c64bridge 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/prompts/README.md +6 -0
- package/.github/prompts/assembly-routine-session.prompt.md +13 -0
- package/.github/prompts/basic-program-session.prompt.md +13 -0
- package/.github/prompts/drive-management-session.prompt.md +13 -0
- package/.github/prompts/petscii-art-session.prompt.md +13 -0
- package/.github/prompts/play-classic-game.prompt.md +13 -0
- package/.github/prompts/sid-music-session.prompt.md +13 -0
- package/AGENTS.md +173 -0
- package/LICENSE +339 -0
- package/README.md +582 -0
- package/data/README.md +16 -0
- package/data/api/basic-api-spec.md +154 -0
- package/data/api/kernal-api-spec.md +68 -0
- package/data/assembly/assembly-spec.md +196 -0
- package/data/assembly/examples/effects/sinewave.asm +5 -0
- package/data/assembly/examples/graphics/sprite/mover.asm +15 -0
- package/data/assembly/examples/sid-file-structure.md +8 -0
- package/data/assembly/examples/sid-overview.md +11 -0
- package/data/audio/examples/Biosphere.sid +0 -0
- package/data/audio/sid-file-structure.md +91 -0
- package/data/audio/sid-programming-best-practices.md +198 -0
- package/data/audio/sid-spec.md +166 -0
- package/data/audio/sidwave.md +131 -0
- package/data/audio/sidwave.schema.json +64 -0
- package/data/basic/basic-spec.md +230 -0
- package/data/basic/examples/audio/alle-meine-entchen-expressive.bas +41 -0
- package/data/basic/examples/audio/c-major-scale-pleasant.bas +29 -0
- package/data/basic/examples/io/joystick.bas +5 -0
- package/data/basic/examples/video/bounce.bas +8 -0
- package/data/basic/examples/video/entchen-petscii.bas +16 -0
- package/data/basic/examples/video/hello-world.bas +4 -0
- package/data/basic/examples/video/wave.bas +7 -0
- package/data/context/bootstrap.md +148 -0
- package/data/context/chat.md +36 -0
- package/data/drive/drive-spec.md +215 -0
- package/data/embeddings_asm.json +1 -0
- package/data/embeddings_basic.json +1 -0
- package/data/embeddings_hardware.json +1 -0
- package/data/embeddings_mixed.json +1 -0
- package/data/embeddings_other.json +1 -0
- package/data/io/cia-spec.md +115 -0
- package/data/io/io-spec.md +124 -0
- package/data/memory/kernal-memory-map.md +227 -0
- package/data/memory/low-memory-map.md +133 -0
- package/data/memory/memory-map.md +186 -0
- package/data/printer/printer-commodore-bitmap.md +31 -0
- package/data/printer/printer-commodore.md +28 -0
- package/data/printer/printer-epson-bitmap.md +29 -0
- package/data/printer/printer-epson.md +30 -0
- package/data/printer/printer-prompts.md +29 -0
- package/data/printer/printer-spec.md +180 -0
- package/data/video/character-set.csv +257 -0
- package/data/video/vic-spec.md +276 -0
- package/dist/assemblyConverter.js +1299 -0
- package/dist/audio/record_and_analyze_audio.js +292 -0
- package/dist/basicConverter.js +193 -0
- package/dist/bootstrap/stdio-logger.js +32 -0
- package/dist/c64Client.js +1052 -0
- package/dist/chargen.js +197 -0
- package/dist/config.js +142 -0
- package/dist/context.js +157 -0
- package/dist/device.js +413 -0
- package/dist/index.js +7 -0
- package/dist/knowledge.js +454 -0
- package/dist/logger.js +182 -0
- package/dist/loggingHttpClient.js +88 -0
- package/dist/mcp-server.js +426 -0
- package/dist/petscii.js +135 -0
- package/dist/petsciiArt.js +356 -0
- package/dist/platform.js +82 -0
- package/dist/prompts/registry.js +560 -0
- package/dist/rag/discover.config.json +41 -0
- package/dist/rag/discover.js +401 -0
- package/dist/rag/embeddings.js +60 -0
- package/dist/rag/externalFetcher.js +934 -0
- package/dist/rag/indexer.js +770 -0
- package/dist/rag/init.js +139 -0
- package/dist/rag/knowledgeIndex.js +361 -0
- package/dist/rag/loggingRetriever.js +46 -0
- package/dist/rag/rateLimiter.js +127 -0
- package/dist/rag/retriever.js +74 -0
- package/dist/rag/sources.csv +31 -0
- package/dist/rag/types.js +5 -0
- package/dist/rag/urlUtils.js +38 -0
- package/dist/sidplayRunner.js +240 -0
- package/dist/sidwave.js +101 -0
- package/dist/sidwaveCompiler.js +329 -0
- package/dist/tools/audio.js +944 -0
- package/dist/tools/developer.js +515 -0
- package/dist/tools/errors.js +59 -0
- package/dist/tools/graphics.js +469 -0
- package/dist/tools/machineControl.js +267 -0
- package/dist/tools/memory.js +224 -0
- package/dist/tools/printer.js +482 -0
- package/dist/tools/programRunners.js +315 -0
- package/dist/tools/rag.js +153 -0
- package/dist/tools/registry.js +58 -0
- package/dist/tools/responses.js +36 -0
- package/dist/tools/schema.js +304 -0
- package/dist/tools/storage.js +740 -0
- package/dist/tools/streaming.js +132 -0
- package/dist/tools/types.js +99 -0
- package/dist/viceRunner.js +239 -0
- package/doc/MCP_SETUP.md +153 -0
- package/doc/README.md +7 -0
- package/doc/developer.md +312 -0
- package/doc/img/logo.png +0 -0
- package/doc/img/prompts/duck_petscii.png +0 -0
- package/doc/img/prompts/duck_song.png +0 -0
- package/doc/img/vscode/vscode-copilot-c64-chat-mode.png +0 -0
- package/doc/img/vscode/vscode-copilot-hello-world.png +0 -0
- package/doc/prompts/README.md +96 -0
- package/doc/prompts/user-prompt-ideas.md +147 -0
- package/doc/rest/c64-openapi.yaml +979 -0
- package/doc/rest/c64-rest-api.md +106 -0
- package/doc/troubleshooting-mcp.md +177 -0
- package/generated/c64/index.js +857 -0
- package/mcp.json +106 -0
- package/package.json +79 -0
- package/scripts/c64-cli.mjs +142 -0
- package/scripts/c64-tool.sh +83 -0
- package/scripts/check-package.mjs +89 -0
- package/scripts/cli.js +61 -0
- package/scripts/fetch-external-sources.mjs +67 -0
- package/scripts/generate-changelog.mjs +131 -0
- package/scripts/postbuild.mjs +101 -0
- package/scripts/prepare-release.mjs +58 -0
- package/scripts/rag-rebuild.mjs +53 -0
- package/scripts/register-ts-node.mjs +6 -0
- package/scripts/run-mcp-check.sh +104 -0
- package/scripts/run-tests.mjs +195 -0
- package/scripts/sid2wav.sh +94 -0
- package/scripts/smoke-run.sh +65 -0
- package/scripts/start-mock-c64.mjs +51 -0
- package/scripts/start-mock.mjs +31 -0
- package/scripts/start.mjs +72 -0
- package/scripts/update-readme.ts +164 -0
- package/scripts/verify-package.mjs +147 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
screen_code,screen_code_dec,petscii_code,petscii_code_dec,char,unicode,name,keyboard,control_code,byte1,byte2,byte3,byte4,byte5,byte6,byte7,byte8
|
|
2
|
+
$00,0,$40,64,@,U+0040,commercial at,,@,$3C,$66,$6E,$6E,$60,$62,$3C,$00
|
|
3
|
+
$01,1,$41,65,A,U+0041,latin capital letter a,,a,$18,$3C,$66,$7E,$66,$66,$66,$00
|
|
4
|
+
$02,2,$42,66,B,U+0042,latin capital letter b,,b,$7C,$66,$66,$7C,$66,$66,$7C,$00
|
|
5
|
+
$03,3,$43,67,C,U+0043,latin capital letter c,,c,$3C,$66,$60,$60,$60,$66,$3C,$00
|
|
6
|
+
$04,4,$44,68,D,U+0044,latin capital letter d,,d,$78,$6C,$66,$66,$66,$6C,$78,$00
|
|
7
|
+
$05,5,$45,69,E,U+0045,latin capital letter e,,e,$7E,$60,$60,$78,$60,$60,$7E,$00
|
|
8
|
+
$06,6,$46,70,F,U+0046,latin capital letter f,,f,$7E,$60,$60,$78,$60,$60,$60,$00
|
|
9
|
+
$07,7,$47,71,G,U+0047,latin capital letter g,,g,$3C,$66,$60,$6E,$66,$66,$3C,$00
|
|
10
|
+
$08,8,$48,72,H,U+0048,latin capital letter h,,h,$66,$66,$66,$7E,$66,$66,$66,$00
|
|
11
|
+
$09,9,$49,73,I,U+0049,latin capital letter i,,i,$3C,$18,$18,$18,$18,$18,$3C,$00
|
|
12
|
+
$0A,10,$4A,74,J,U+004A,latin capital letter j,,j,$1E,$0C,$0C,$0C,$0C,$6C,$38,$00
|
|
13
|
+
$0B,11,$4B,75,K,U+004B,latin capital letter k,,k,$66,$6C,$78,$70,$78,$6C,$66,$00
|
|
14
|
+
$0C,12,$4C,76,L,U+004C,latin capital letter l,,l,$60,$60,$60,$60,$60,$60,$7E,$00
|
|
15
|
+
$0D,13,$4D,77,M,U+004D,latin capital letter m,,m,$63,$77,$7F,$6B,$63,$63,$63,$00
|
|
16
|
+
$0E,14,$4E,78,N,U+004E,latin capital letter n,,n,$66,$76,$7E,$7E,$6E,$66,$66,$00
|
|
17
|
+
$0F,15,$4F,79,O,U+004F,latin capital letter o,,o,$3C,$66,$66,$66,$66,$66,$3C,$00
|
|
18
|
+
$10,16,$50,80,P,U+0050,latin capital letter p,,p,$7C,$66,$66,$7C,$60,$60,$60,$00
|
|
19
|
+
$11,17,$51,81,Q,U+0051,latin capital letter q,,q,$3C,$66,$66,$66,$66,$3C,$0E,$00
|
|
20
|
+
$12,18,$52,82,R,U+0052,latin capital letter r,,r,$7C,$66,$66,$7C,$78,$6C,$66,$00
|
|
21
|
+
$13,19,$53,83,S,U+0053,latin capital letter s,,s,$3C,$66,$60,$3C,$06,$66,$3C,$00
|
|
22
|
+
$14,20,$54,84,T,U+0054,latin capital letter t,,t,$7E,$18,$18,$18,$18,$18,$18,$00
|
|
23
|
+
$15,21,$55,85,U,U+0055,latin capital letter u,,u,$66,$66,$66,$66,$66,$66,$3C,$00
|
|
24
|
+
$16,22,$56,86,V,U+0056,latin capital letter v,,v,$66,$66,$66,$66,$66,$3C,$18,$00
|
|
25
|
+
$17,23,$57,87,W,U+0057,latin capital letter w,,w,$63,$63,$63,$6B,$7F,$77,$63,$00
|
|
26
|
+
$18,24,$58,88,X,U+0058,latin capital letter x,,x,$66,$66,$3C,$18,$3C,$66,$66,$00
|
|
27
|
+
$19,25,$59,89,Y,U+0059,latin capital letter y,,y,$66,$66,$66,$3C,$18,$18,$18,$00
|
|
28
|
+
$1A,26,$5A,90,Z,U+005A,latin capital letter z,,z,$7E,$06,$0C,$18,$30,$60,$7E,$00
|
|
29
|
+
$1B,27,$5B,91,[,U+005B,left square bracket,shift + :,c= + :,$3C,$30,$30,$30,$30,$30,$3C,$00
|
|
30
|
+
$1C,28,$5C,92,£,U+00A3,pound sign,,£,$0C,$12,$30,$7C,$30,$62,$FC,$00
|
|
31
|
+
$1D,29,$5D,93,],U+005D,right square bracket,shift + ;,c= + ;,$3C,$0C,$0C,$0C,$0C,$0C,$3C,$00
|
|
32
|
+
$1E,30,$5E,94,↑,U+2191,upwards arrow,,↑,$00,$18,$3C,$7E,$18,$18,$18,$18
|
|
33
|
+
$1F,31,$5F,95,←,U+2190,leftwards arrow,shift + ←,← / c= + ←,$00,$10,$30,$7F,$7F,$30,$10,$00
|
|
34
|
+
$20,32,$20,32,,U+0020,space,,space,$00,$00,$00,$00,$00,$00,$00,$00
|
|
35
|
+
$21,33,$21,33,!,U+0021,exclamation mark,shift + 1,,$18,$18,$18,$18,$00,$00,$18,$00
|
|
36
|
+
$22,34,$22,34,"""",U+0022,quotation mark,shift + 2,,$66,$66,$66,$00,$00,$00,$00,$00
|
|
37
|
+
$23,35,$23,35,#,U+0023,number sign,shift + 3,,$66,$66,$FF,$66,$FF,$66,$66,$00
|
|
38
|
+
$24,36,$24,36,$,U+0024,dollar sign,shift + 4,,$18,$3E,$60,$3C,$06,$7C,$18,$00
|
|
39
|
+
$25,37,$25,37,%,U+0025,percent sign,shift + 5,,$62,$66,$0C,$18,$30,$66,$46,$00
|
|
40
|
+
$26,38,$26,38,&,U+0026,ampersand,shift + 6,,$3C,$66,$3C,$38,$67,$66,$3F,$00
|
|
41
|
+
$27,39,$27,39,',U+0027,apostrophe,shift + 7,,$06,$0C,$18,$00,$00,$00,$00,$00
|
|
42
|
+
$28,40,$28,40,(,U+0028,left parenthesis,shift + 8,,$0C,$18,$30,$30,$30,$18,$0C,$00
|
|
43
|
+
$29,41,$29,41,),U+0029,right parenthesis,shift + 9,c= + 9,$30,$18,$0C,$0C,$0C,$18,$30,$00
|
|
44
|
+
$2A,42,$2A,42,*,U+002A,asterisk,,*,$00,$66,$3C,$FF,$3C,$66,$00,$00
|
|
45
|
+
$2B,43,$2B,43,+,U+002B,plus sign,,+,$00,$18,$18,$7E,$18,$18,$00,$00
|
|
46
|
+
$2C,44,$2C,44,",",U+002C,comma,,",",$00,$00,$00,$00,$00,$18,$18,$30
|
|
47
|
+
$2D,45,$2D,45,-,U+002D,hyphen-minus,,-,$00,$00,$00,$7E,$00,$00,$00,$00
|
|
48
|
+
$2E,46,$2E,46,.,U+002E,full stop,,.,$00,$00,$00,$00,$00,$18,$18,$00
|
|
49
|
+
$2F,47,$2F,47,/,U+002F,solidus,,/,$00,$03,$06,$0C,$18,$30,$60,$00
|
|
50
|
+
$30,48,$30,48,0,U+0030,digit zero,shift + 0,0 / c= + 0,$3C,$66,$6E,$76,$66,$66,$3C,$00
|
|
51
|
+
$31,49,$31,49,1,U+0031,digit one,,1,$18,$18,$38,$18,$18,$18,$7E,$00
|
|
52
|
+
$32,50,$32,50,2,U+0032,digit two,,2,$3C,$66,$06,$0C,$30,$60,$7E,$00
|
|
53
|
+
$33,51,$33,51,3,U+0033,digit three,,3,$3C,$66,$06,$1C,$06,$66,$3C,$00
|
|
54
|
+
$34,52,$34,52,4,U+0034,digit four,,4,$06,$0E,$1E,$66,$7F,$06,$06,$00
|
|
55
|
+
$35,53,$35,53,5,U+0035,digit five,,5,$7E,$60,$7C,$06,$06,$66,$3C,$00
|
|
56
|
+
$36,54,$36,54,6,U+0036,digit six,,6,$3C,$66,$60,$7C,$66,$66,$3C,$00
|
|
57
|
+
$37,55,$37,55,7,U+0037,digit seven,,7,$7E,$66,$0C,$18,$18,$18,$18,$00
|
|
58
|
+
$38,56,$38,56,8,U+0038,digit eight,,8,$3C,$66,$66,$3C,$66,$66,$3C,$00
|
|
59
|
+
$39,57,$39,57,9,U+0039,digit nine,,9,$3C,$66,$66,$3E,$06,$66,$3C,$00
|
|
60
|
+
$3A,58,$3A,58,:,U+003A,colon,,:,$00,$00,$18,$00,$00,$18,$00,$00
|
|
61
|
+
$3B,59,$3B,59,;,U+003B,semicolon,,;,$00,$00,$18,$00,$00,$18,$18,$30
|
|
62
|
+
$3C,60,$3C,60,<,U+003C,less-than sign,"shift + ,","c= + ,",$0E,$18,$30,$60,$30,$18,$0E,$00
|
|
63
|
+
$3D,61,$3D,61,=,U+003D,equals sign,shift + =,= / c= + =,$00,$00,$7E,$00,$7E,$00,$00,$00
|
|
64
|
+
$3E,62,$3E,62,>,U+003E,greater-than sign,shift + .,c= + .,$70,$18,$0C,$06,$0C,$18,$70,$00
|
|
65
|
+
$3F,63,$3F,63,?,U+003F,question mark,shift + /,c= + /,$3C,$66,$06,$0C,$18,$00,$18,$00
|
|
66
|
+
$40,64,$60,96,─,U+2500,box drawings light horizontal,,,$00,$00,$00,$FF,$FF,$00,$00,$00
|
|
67
|
+
$41,65,$61,97,♠,U+2660,black spade suit,,,$08,$1C,$3E,$7F,$7F,$1C,$3E,$00
|
|
68
|
+
$42,66,$62,98,🭲,U+1FB72,vertical one eighth block-4,,,$18,$18,$18,$18,$18,$18,$18,$18
|
|
69
|
+
$43,67,$63,99,🭸,U+1FB78,horizontal one eighth block-4,,,$00,$00,$00,$FF,$FF,$00,$00,$00
|
|
70
|
+
$44,68,$64,100,🭷,U+1FB77,horizontal one eighth block-3,,,$00,$00,$FF,$FF,$00,$00,$00,$00
|
|
71
|
+
$45,69,$65,101,🭶,U+1FB76,horizontal one eighth block-2,,,$00,$FF,$FF,$00,$00,$00,$00,$00
|
|
72
|
+
$46,70,$66,102,🭺,U+1FB7A,horizontal one eighth block-6,,,$00,$00,$00,$00,$FF,$FF,$00,$00
|
|
73
|
+
$47,71,$67,103,🭱,U+1FB71,vertical one eighth block-3,,,$30,$30,$30,$30,$30,$30,$30,$30
|
|
74
|
+
$48,72,$68,104,🭴,U+1FB74,vertical one eighth block-6,,,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
|
|
75
|
+
$49,73,$69,105,╮,U+256E,box drawings light arc down and left,,,$00,$00,$00,$E0,$F0,$38,$18,$18
|
|
76
|
+
$4A,74,$6A,106,╰,U+2570,box drawings light arc up and right,,,$18,$18,$1C,$0F,$07,$00,$00,$00
|
|
77
|
+
$4B,75,$6B,107,╯,U+256F,box drawings light arc up and left,,,$18,$18,$38,$F0,$E0,$00,$00,$00
|
|
78
|
+
$4C,76,$6C,108,🭼,U+1FB7C,left and lower one eighth block,,,$C0,$C0,$C0,$C0,$C0,$C0,$FF,$FF
|
|
79
|
+
$4D,77,$6D,109,╲,U+2572,box drawings light diagonal upper left to lower right,,,$C0,$E0,$70,$38,$1C,$0E,$07,$03
|
|
80
|
+
$4E,78,$6E,110,╱,U+2571,box drawings light diagonal upper right to lower left,,,$03,$07,$0E,$1C,$38,$70,$E0,$C0
|
|
81
|
+
$4F,79,$6F,111,🭽,U+1FB7D,left and upper one eighth block,,,$FF,$FF,$C0,$C0,$C0,$C0,$C0,$C0
|
|
82
|
+
$50,80,$70,112,🭾,U+1FB7E,right and upper one eighth block,,,$FF,$FF,$03,$03,$03,$03,$03,$03
|
|
83
|
+
$51,81,$71,113,•,U+2022,bullet,,,$00,$3C,$7E,$7E,$7E,$7E,$3C,$00
|
|
84
|
+
$52,82,$72,114,🭻,U+1FB7B,horizontal one eighth block-7,,,$00,$00,$00,$00,$00,$FF,$FF,$00
|
|
85
|
+
$53,83,$73,115,♥,U+2665,black heart suit,,,$36,$7F,$7F,$7F,$3E,$1C,$08,$00
|
|
86
|
+
$54,84,$74,116,🭰,U+1FB70,vertical one eighth block-2,,,$60,$60,$60,$60,$60,$60,$60,$60
|
|
87
|
+
$55,85,$75,117,╭,U+256D,box drawings light arc down and right,,,$00,$00,$00,$07,$0F,$1C,$18,$18
|
|
88
|
+
$56,86,$76,118,╳,U+2573,box drawings light diagonal cross,,,$C3,$E7,$7E,$3C,$3C,$7E,$E7,$C3
|
|
89
|
+
$57,87,$77,119,○,U+25CB,white circle,,,$00,$3C,$7E,$66,$66,$7E,$3C,$00
|
|
90
|
+
$58,88,$78,120,♣,U+2663,black club suit,,,$18,$18,$66,$66,$18,$18,$3C,$00
|
|
91
|
+
$59,89,$79,121,🭵,U+1FB75,vertical one eighth block-7,,,$06,$06,$06,$06,$06,$06,$06,$06
|
|
92
|
+
$5A,90,$7A,122,♦,U+2666,black diamond suit,,,$08,$1C,$3E,$7F,$3E,$1C,$08,$00
|
|
93
|
+
$5B,91,$7B,123,┼,U+253C,box drawings light vertical and horizontal,,,$18,$18,$18,$FF,$FF,$18,$18,$18
|
|
94
|
+
$5C,92,$7C,124,🮌,U+1FB8C,left half medium shade,,,$C0,$C0,$30,$30,$C0,$C0,$30,$30
|
|
95
|
+
$5D,93,$7D,125,│,U+2502,box drawings light vertical,,,$18,$18,$18,$18,$18,$18,$18,$18
|
|
96
|
+
$5E,94,$7E,126,π,U+03C0,greek small letter pi,,,$00,$00,$03,$3E,$76,$36,$36,$00
|
|
97
|
+
$5F,95,$7F,127,◥,U+25E5,black upper right triangle,,,$FF,$7F,$3F,$1F,$0F,$07,$03,$01
|
|
98
|
+
$60,96,,,,,,,,$00,$00,$00,$00,$00,$00,$00,$00
|
|
99
|
+
$61,97,,,,,,,,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0
|
|
100
|
+
$62,98,,,,,,,,$00,$00,$00,$00,$FF,$FF,$FF,$FF
|
|
101
|
+
$63,99,,,,,,,,$FF,$00,$00,$00,$00,$00,$00,$00
|
|
102
|
+
$64,100,,,,,,,,$00,$00,$00,$00,$00,$00,$00,$FF
|
|
103
|
+
$65,101,,,,,,,,$C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0
|
|
104
|
+
$66,102,,,,,,,,$CC,$CC,$33,$33,$CC,$CC,$33,$33
|
|
105
|
+
$67,103,,,,,,,,$03,$03,$03,$03,$03,$03,$03,$03
|
|
106
|
+
$68,104,,,,,,,,$00,$00,$00,$00,$CC,$CC,$33,$33
|
|
107
|
+
$69,105,,,,,,,,$FF,$FE,$FC,$F8,$F0,$E0,$C0,$80
|
|
108
|
+
$6A,106,,,,,,,,$03,$03,$03,$03,$03,$03,$03,$03
|
|
109
|
+
$6B,107,,,,,,,,$18,$18,$18,$1F,$1F,$18,$18,$18
|
|
110
|
+
$6C,108,,,,,,,,$00,$00,$00,$00,$0F,$0F,$0F,$0F
|
|
111
|
+
$6D,109,,,,,,,,$18,$18,$18,$1F,$1F,$00,$00,$00
|
|
112
|
+
$6E,110,,,,,,,,$00,$00,$00,$F8,$F8,$18,$18,$18
|
|
113
|
+
$6F,111,,,,,,,,$00,$00,$00,$00,$00,$00,$FF,$FF
|
|
114
|
+
$70,112,,,,,,,,$00,$00,$00,$1F,$1F,$18,$18,$18
|
|
115
|
+
$71,113,,,,,,,,$18,$18,$18,$FF,$FF,$00,$00,$00
|
|
116
|
+
$72,114,,,,,,,,$00,$00,$00,$FF,$FF,$18,$18,$18
|
|
117
|
+
$73,115,,,,,,,,$18,$18,$18,$F8,$F8,$18,$18,$18
|
|
118
|
+
$74,116,,,,,,,,$C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0
|
|
119
|
+
$75,117,,,,,,,,$E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0
|
|
120
|
+
$76,118,,,,,,,,$07,$07,$07,$07,$07,$07,$07,$07
|
|
121
|
+
$77,119,,,,,,,,$FF,$FF,$00,$00,$00,$00,$00,$00
|
|
122
|
+
$78,120,,,,,,,,$FF,$FF,$FF,$00,$00,$00,$00,$00
|
|
123
|
+
$79,121,,,,,,,,$00,$00,$00,$00,$00,$FF,$FF,$FF
|
|
124
|
+
$7A,122,,,,,,,,$03,$03,$03,$03,$03,$03,$FF,$FF
|
|
125
|
+
$7B,123,,,,,,,,$00,$00,$00,$00,$F0,$F0,$F0,$F0
|
|
126
|
+
$7C,124,,,,,,,,$0F,$0F,$0F,$0F,$00,$00,$00,$00
|
|
127
|
+
$7D,125,,,,,,,,$18,$18,$18,$F8,$F8,$00,$00,$00
|
|
128
|
+
$7E,126,,,,,,,,$F0,$F0,$F0,$F0,$00,$00,$00,$00
|
|
129
|
+
$7F,127,,,,,,,,$F0,$F0,$F0,$F0,$0F,$0F,$0F,$0F
|
|
130
|
+
$80,128,$40,64,@,U+0040,commercial at (reverse),,@,$C3,$99,$91,$91,$9F,$99,$C3,$FF
|
|
131
|
+
$81,129,$41,65,A,U+0041,latin capital letter a (reverse),,a,$E7,$C3,$99,$81,$99,$99,$99,$FF
|
|
132
|
+
$82,130,$42,66,B,U+0042,latin capital letter b (reverse),,b,$83,$99,$99,$83,$99,$99,$83,$FF
|
|
133
|
+
$83,131,$43,67,C,U+0043,latin capital letter c (reverse),,c,$C3,$99,$9F,$9F,$9F,$99,$C3,$FF
|
|
134
|
+
$84,132,$44,68,D,U+0044,latin capital letter d (reverse),,d,$87,$93,$99,$99,$99,$93,$87,$FF
|
|
135
|
+
$85,133,$45,69,E,U+0045,latin capital letter e (reverse),,e,$81,$9F,$9F,$87,$9F,$9F,$81,$FF
|
|
136
|
+
$86,134,$46,70,F,U+0046,latin capital letter f (reverse),,f,$81,$9F,$9F,$87,$9F,$9F,$9F,$FF
|
|
137
|
+
$87,135,$47,71,G,U+0047,latin capital letter g (reverse),,g,$C3,$99,$9F,$91,$99,$99,$C3,$FF
|
|
138
|
+
$88,136,$48,72,H,U+0048,latin capital letter h (reverse),,h,$99,$99,$99,$81,$99,$99,$99,$FF
|
|
139
|
+
$89,137,$49,73,I,U+0049,latin capital letter i (reverse),,i,$C3,$E7,$E7,$E7,$E7,$E7,$C3,$FF
|
|
140
|
+
$8A,138,$4A,74,J,U+004A,latin capital letter j (reverse),,j,$E1,$F3,$F3,$F3,$F3,$93,$C7,$FF
|
|
141
|
+
$8B,139,$4B,75,K,U+004B,latin capital letter k (reverse),,k,$99,$93,$87,$8F,$87,$93,$99,$FF
|
|
142
|
+
$8C,140,$4C,76,L,U+004C,latin capital letter l (reverse),,l,$9F,$9F,$9F,$9F,$9F,$9F,$81,$FF
|
|
143
|
+
$8D,141,$4D,77,M,U+004D,latin capital letter m (reverse),,m,$9C,$88,$80,$94,$9C,$9C,$9C,$FF
|
|
144
|
+
$8E,142,$4E,78,N,U+004E,latin capital letter n (reverse),,n,$99,$89,$81,$81,$91,$99,$99,$FF
|
|
145
|
+
$8F,143,$4F,79,O,U+004F,latin capital letter o (reverse),,o,$C3,$99,$99,$99,$99,$99,$C3,$FF
|
|
146
|
+
$90,144,$50,80,P,U+0050,latin capital letter p (reverse),,p,$83,$99,$99,$83,$9F,$9F,$9F,$FF
|
|
147
|
+
$91,145,$51,81,Q,U+0051,latin capital letter q (reverse),,q,$C3,$99,$99,$99,$99,$C3,$F1,$FF
|
|
148
|
+
$92,146,$52,82,R,U+0052,latin capital letter r (reverse),,r,$83,$99,$99,$83,$87,$93,$99,$FF
|
|
149
|
+
$93,147,$53,83,S,U+0053,latin capital letter s (reverse),,s,$C3,$99,$9F,$C3,$F9,$99,$C3,$FF
|
|
150
|
+
$94,148,$54,84,T,U+0054,latin capital letter t (reverse),,t,$81,$E7,$E7,$E7,$E7,$E7,$E7,$FF
|
|
151
|
+
$95,149,$55,85,U,U+0055,latin capital letter u (reverse),,u,$99,$99,$99,$99,$99,$99,$C3,$FF
|
|
152
|
+
$96,150,$56,86,V,U+0056,latin capital letter v (reverse),,v,$99,$99,$99,$99,$99,$C3,$E7,$FF
|
|
153
|
+
$97,151,$57,87,W,U+0057,latin capital letter w (reverse),,w,$9C,$9C,$9C,$94,$80,$88,$9C,$FF
|
|
154
|
+
$98,152,$58,88,X,U+0058,latin capital letter x (reverse),,x,$99,$99,$C3,$E7,$C3,$99,$99,$FF
|
|
155
|
+
$99,153,$59,89,Y,U+0059,latin capital letter y (reverse),,y,$99,$99,$99,$C3,$E7,$E7,$E7,$FF
|
|
156
|
+
$9A,154,$5A,90,Z,U+005A,latin capital letter z (reverse),,z,$81,$F9,$F3,$E7,$CF,$9F,$81,$FF
|
|
157
|
+
$9B,155,$5B,91,[,U+005B,left square bracket (reverse),shift + :,c= + :,$C3,$CF,$CF,$CF,$CF,$CF,$C3,$FF
|
|
158
|
+
$9C,156,$5C,92,£,U+00A3,pound sign (reverse),,£,$F3,$ED,$CF,$83,$CF,$9D,$03,$FF
|
|
159
|
+
$9D,157,$5D,93,],U+005D,right square bracket (reverse),shift + ;,c= + ;,$C3,$F3,$F3,$F3,$F3,$F3,$C3,$FF
|
|
160
|
+
$9E,158,$5E,94,↑,U+2191,upwards arrow (reverse),,↑,$FF,$E7,$C3,$81,$E7,$E7,$E7,$E7
|
|
161
|
+
$9F,159,$5F,95,←,U+2190,leftwards arrow (reverse),shift + ←,← / c= + ←,$FF,$EF,$CF,$80,$80,$CF,$EF,$FF
|
|
162
|
+
$A0,160,$20,32,,U+0020,space (reverse),,space,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
|
163
|
+
$A1,161,$21,33,!,U+0021,exclamation mark (reverse),shift + 1,,$E7,$E7,$E7,$E7,$FF,$FF,$E7,$FF
|
|
164
|
+
$A2,162,$22,34,"""",U+0022,quotation mark (reverse),shift + 2,,$99,$99,$99,$FF,$FF,$FF,$FF,$FF
|
|
165
|
+
$A3,163,$23,35,#,U+0023,number sign (reverse),shift + 3,,$99,$99,$00,$99,$00,$99,$99,$FF
|
|
166
|
+
$A4,164,$24,36,$,U+0024,dollar sign (reverse),shift + 4,,$E7,$C1,$9F,$C3,$F9,$83,$E7,$FF
|
|
167
|
+
$A5,165,$25,37,%,U+0025,percent sign (reverse),shift + 5,,$9D,$99,$F3,$E7,$CF,$99,$B9,$FF
|
|
168
|
+
$A6,166,$26,38,&,U+0026,ampersand (reverse),shift + 6,,$C3,$99,$C3,$C7,$98,$99,$C0,$FF
|
|
169
|
+
$A7,167,$27,39,',U+0027,apostrophe (reverse),shift + 7,,$F9,$F3,$E7,$FF,$FF,$FF,$FF,$FF
|
|
170
|
+
$A8,168,$28,40,(,U+0028,left parenthesis (reverse),shift + 8,,$F3,$E7,$CF,$CF,$CF,$E7,$F3,$FF
|
|
171
|
+
$A9,169,$29,41,),U+0029,right parenthesis (reverse),shift + 9,c= + 9,$CF,$E7,$F3,$F3,$F3,$E7,$CF,$FF
|
|
172
|
+
$AA,170,$2A,42,*,U+002A,asterisk (reverse),,*,$FF,$99,$C3,$00,$C3,$99,$FF,$FF
|
|
173
|
+
$AB,171,$2B,43,+,U+002B,plus sign (reverse),,+,$FF,$E7,$E7,$81,$E7,$E7,$FF,$FF
|
|
174
|
+
$AC,172,$2C,44,",",U+002C,comma (reverse),,",",$FF,$FF,$FF,$FF,$FF,$E7,$E7,$CF
|
|
175
|
+
$AD,173,$2D,45,-,U+002D,hyphen-minus (reverse),,-,$FF,$FF,$FF,$81,$FF,$FF,$FF,$FF
|
|
176
|
+
$AE,174,$2E,46,.,U+002E,full stop (reverse),,.,$FF,$FF,$FF,$FF,$FF,$E7,$E7,$FF
|
|
177
|
+
$AF,175,$2F,47,/,U+002F,solidus (reverse),,/,$FF,$FC,$F9,$F3,$E7,$CF,$9F,$FF
|
|
178
|
+
$B0,176,$30,48,0,U+0030,digit zero (reverse),shift + 0,0 / c= + 0,$C3,$99,$91,$89,$99,$99,$C3,$FF
|
|
179
|
+
$B1,177,$31,49,1,U+0031,digit one (reverse),,1,$E7,$E7,$C7,$E7,$E7,$E7,$81,$FF
|
|
180
|
+
$B2,178,$32,50,2,U+0032,digit two (reverse),,2,$C3,$99,$F9,$F3,$CF,$9F,$81,$FF
|
|
181
|
+
$B3,179,$33,51,3,U+0033,digit three (reverse),,3,$C3,$99,$F9,$E3,$F9,$99,$C3,$FF
|
|
182
|
+
$B4,180,$34,52,4,U+0034,digit four (reverse),,4,$F9,$F1,$E1,$99,$80,$F9,$F9,$FF
|
|
183
|
+
$B5,181,$35,53,5,U+0035,digit five (reverse),,5,$81,$9F,$83,$F9,$F9,$99,$C3,$FF
|
|
184
|
+
$B6,182,$36,54,6,U+0036,digit six (reverse),,6,$C3,$99,$9F,$83,$99,$99,$C3,$FF
|
|
185
|
+
$B7,183,$37,55,7,U+0037,digit seven (reverse),,7,$81,$99,$F3,$E7,$E7,$E7,$E7,$FF
|
|
186
|
+
$B8,184,$38,56,8,U+0038,digit eight (reverse),,8,$C3,$99,$99,$C3,$99,$99,$C3,$FF
|
|
187
|
+
$B9,185,$39,57,9,U+0039,digit nine (reverse),,9,$C3,$99,$99,$C1,$F9,$99,$C3,$FF
|
|
188
|
+
$BA,186,$3A,58,:,U+003A,colon (reverse),,:,$FF,$FF,$E7,$FF,$FF,$E7,$FF,$FF
|
|
189
|
+
$BB,187,$3B,59,;,U+003B,semicolon (reverse),,;,$FF,$FF,$E7,$FF,$FF,$E7,$E7,$CF
|
|
190
|
+
$BC,188,$3C,60,<,U+003C,less-than sign (reverse),"shift + ,","c= + ,",$F1,$E7,$CF,$9F,$CF,$E7,$F1,$FF
|
|
191
|
+
$BD,189,$3D,61,=,U+003D,equals sign (reverse),shift + =,= / c= + =,$FF,$FF,$81,$FF,$81,$FF,$FF,$FF
|
|
192
|
+
$BE,190,$3E,62,>,U+003E,greater-than sign (reverse),shift + .,c= + .,$8F,$E7,$F3,$F9,$F3,$E7,$8F,$FF
|
|
193
|
+
$BF,191,$3F,63,?,U+003F,question mark (reverse),shift + /,c= + /,$C3,$99,$F9,$F3,$E7,$FF,$E7,$FF
|
|
194
|
+
$C0,192,$60,96,─,U+2500,box drawings light horizontal (reverse),,,$FF,$FF,$FF,$00,$00,$FF,$FF,$FF
|
|
195
|
+
$C1,193,$61,97,♠,U+2660,black spade suit (reverse),,,$F7,$E3,$C1,$80,$80,$E3,$C1,$FF
|
|
196
|
+
$C2,194,$62,98,🭲,U+1FB72,vertical one eighth block-4 (reverse),,,$E7,$E7,$E7,$E7,$E7,$E7,$E7,$E7
|
|
197
|
+
$C3,195,$63,99,🭸,U+1FB78,horizontal one eighth block-4 (reverse),,,$FF,$FF,$FF,$00,$00,$FF,$FF,$FF
|
|
198
|
+
$C4,196,$64,100,🭷,U+1FB77,horizontal one eighth block-3 (reverse),,,$FF,$FF,$00,$00,$FF,$FF,$FF,$FF
|
|
199
|
+
$C5,197,$65,101,🭶,U+1FB76,horizontal one eighth block-2 (reverse),,,$FF,$00,$00,$FF,$FF,$FF,$FF,$FF
|
|
200
|
+
$C6,198,$66,102,🭺,U+1FB7A,horizontal one eighth block-6 (reverse),,,$FF,$FF,$FF,$FF,$00,$00,$FF,$FF
|
|
201
|
+
$C7,199,$67,103,🭱,U+1FB71,vertical one eighth block-3 (reverse),,,$CF,$CF,$CF,$CF,$CF,$CF,$CF,$CF
|
|
202
|
+
$C8,200,$68,104,🭴,U+1FB74,vertical one eighth block-6 (reverse),,,$F3,$F3,$F3,$F3,$F3,$F3,$F3,$F3
|
|
203
|
+
$C9,201,$69,105,╮,U+256E,box drawings light arc down and left (reverse),,,$FF,$FF,$FF,$1F,$0F,$C7,$E7,$E7
|
|
204
|
+
$CA,202,$6A,106,╰,U+2570,box drawings light arc up and right (reverse),,,$E7,$E7,$E3,$F0,$F8,$FF,$FF,$FF
|
|
205
|
+
$CB,203,$6B,107,╯,U+256F,box drawings light arc up and left (reverse),,,$E7,$E7,$C7,$0F,$1F,$FF,$FF,$FF
|
|
206
|
+
$CC,204,$6C,108,🭼,U+1FB7C,left and lower one eighth block (reverse),,,$3F,$3F,$3F,$3F,$3F,$3F,$00,$00
|
|
207
|
+
$CD,205,$6D,109,╲,U+2572,box drawings light diagonal upper left to lower right (reverse),,,$3F,$1F,$8F,$C7,$E3,$F1,$F8,$FC
|
|
208
|
+
$CE,206,$6E,110,╱,U+2571,box drawings light diagonal upper right to lower left (reverse),,,$FC,$F8,$F1,$E3,$C7,$8F,$1F,$3F
|
|
209
|
+
$CF,207,$6F,111,🭽,U+1FB7D,left and upper one eighth block (reverse),,,$00,$00,$3F,$3F,$3F,$3F,$3F,$3F
|
|
210
|
+
$D0,208,$70,112,🭾,U+1FB7E,right and upper one eighth block (reverse),,,$00,$00,$FC,$FC,$FC,$FC,$FC,$FC
|
|
211
|
+
$D1,209,$71,113,•,U+2022,bullet (reverse),,,$FF,$C3,$81,$81,$81,$81,$C3,$FF
|
|
212
|
+
$D2,210,$72,114,🭻,U+1FB7B,horizontal one eighth block-7 (reverse),,,$FF,$FF,$FF,$FF,$FF,$00,$00,$FF
|
|
213
|
+
$D3,211,$73,115,♥,U+2665,black heart suit (reverse),,,$C9,$80,$80,$80,$C1,$E3,$F7,$FF
|
|
214
|
+
$D4,212,$74,116,🭰,U+1FB70,vertical one eighth block-2 (reverse),,,$9F,$9F,$9F,$9F,$9F,$9F,$9F,$9F
|
|
215
|
+
$D5,213,$75,117,╭,U+256D,box drawings light arc down and right (reverse),,,$FF,$FF,$FF,$F8,$F0,$E3,$E7,$E7
|
|
216
|
+
$D6,214,$76,118,╳,U+2573,box drawings light diagonal cross (reverse),,,$3C,$18,$81,$C3,$C3,$81,$18,$3C
|
|
217
|
+
$D7,215,$77,119,○,U+25CB,white circle (reverse),,,$FF,$C3,$81,$99,$99,$81,$C3,$FF
|
|
218
|
+
$D8,216,$78,120,♣,U+2663,black club suit (reverse),,,$E7,$E7,$99,$99,$E7,$E7,$C3,$FF
|
|
219
|
+
$D9,217,$79,121,🭵,U+1FB75,vertical one eighth block-7 (reverse),,,$F9,$F9,$F9,$F9,$F9,$F9,$F9,$F9
|
|
220
|
+
$DA,218,$7A,122,♦,U+2666,black diamond suit (reverse),,,$F7,$E3,$C1,$80,$C1,$E3,$F7,$FF
|
|
221
|
+
$DB,219,$7B,123,┼,U+253C,box drawings light vertical and horizontal (reverse),,,$E7,$E7,$E7,$00,$00,$E7,$E7,$E7
|
|
222
|
+
$DC,220,$7C,124,🮌,U+1FB8C,left half medium shade (reverse),,,$3F,$3F,$CF,$CF,$3F,$3F,$CF,$CF
|
|
223
|
+
$DD,221,$7D,125,│,U+2502,box drawings light vertical (reverse),,,$E7,$E7,$E7,$E7,$E7,$E7,$E7,$E7
|
|
224
|
+
$DE,222,$7E,126,π,U+03C0,greek small letter pi (reverse),,,$FF,$FF,$FC,$C1,$89,$C9,$C9,$FF
|
|
225
|
+
$DF,223,$7F,127,◥,U+25E5,black upper right triangle (reverse),,,$00,$80,$C0,$E0,$F0,$F8,$FC,$FE
|
|
226
|
+
$E0,224,,,,,,,,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
|
227
|
+
$E1,225,,,,,,,,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
|
|
228
|
+
$E2,226,,,,,,,,$FF,$FF,$FF,$FF,$00,$00,$00,$00
|
|
229
|
+
$E3,227,,,,,,,,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
|
230
|
+
$E4,228,,,,,,,,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00
|
|
231
|
+
$E5,229,,,,,,,,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F
|
|
232
|
+
$E6,230,,,,,,,,$33,$33,$CC,$CC,$33,$33,$CC,$CC
|
|
233
|
+
$E7,231,,,,,,,,$FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC
|
|
234
|
+
$E8,232,,,,,,,,$FF,$FF,$FF,$FF,$33,$33,$CC,$CC
|
|
235
|
+
$E9,233,,,,,,,,$00,$01,$03,$07,$0F,$1F,$3F,$7F
|
|
236
|
+
$EA,234,,,,,,,,$FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC
|
|
237
|
+
$EB,235,,,,,,,,$E7,$E7,$E7,$E0,$E0,$E7,$E7,$E7
|
|
238
|
+
$EC,236,,,,,,,,$FF,$FF,$FF,$FF,$F0,$F0,$F0,$F0
|
|
239
|
+
$ED,237,,,,,,,,$E7,$E7,$E7,$E0,$E0,$FF,$FF,$FF
|
|
240
|
+
$EE,238,,,,,,,,$FF,$FF,$FF,$07,$07,$E7,$E7,$E7
|
|
241
|
+
$EF,239,,,,,,,,$FF,$FF,$FF,$FF,$FF,$FF,$00,$00
|
|
242
|
+
$F0,240,,,,,,,,$FF,$FF,$FF,$E0,$E0,$E7,$E7,$E7
|
|
243
|
+
$F1,241,,,,,,,,$E7,$E7,$E7,$00,$00,$FF,$FF,$FF
|
|
244
|
+
$F2,242,,,,,,,,$FF,$FF,$FF,$00,$00,$E7,$E7,$E7
|
|
245
|
+
$F3,243,,,,,,,,$E7,$E7,$E7,$07,$07,$E7,$E7,$E7
|
|
246
|
+
$F4,244,,,,,,,,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F
|
|
247
|
+
$F5,245,,,,,,,,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F
|
|
248
|
+
$F6,246,,,,,,,,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8
|
|
249
|
+
$F7,247,,,,,,,,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF
|
|
250
|
+
$F8,248,,,,,,,,$00,$00,$00,$FF,$FF,$FF,$FF,$FF
|
|
251
|
+
$F9,249,,,,,,,,$FF,$FF,$FF,$FF,$FF,$00,$00,$00
|
|
252
|
+
$FA,250,,,,,,,,$FC,$FC,$FC,$FC,$FC,$FC,$00,$00
|
|
253
|
+
$FB,251,,,,,,,,$FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F
|
|
254
|
+
$FC,252,,,,,,,,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF
|
|
255
|
+
$FD,253,,,,,,,,$E7,$E7,$E7,$07,$07,$FF,$FF,$FF
|
|
256
|
+
$FE,254,,,,,,,,$0F,$0F,$0F,$0F,$FF,$FF,$FF,$FF
|
|
257
|
+
$FF,255,,,,,,,,$0F,$0F,$0F,$0F,$F0,$F0,$F0,$F0
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# MOS 6567/6569 VIC-II Quick Reference
|
|
2
|
+
|
|
3
|
+
Source: <https://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt>
|
|
4
|
+
|
|
5
|
+
## System Overview
|
|
6
|
+
|
|
7
|
+
- Core chips: 6510 CPU (NMOS, ~1.02 MHz NTSC / ~0.985 MHz PAL), VIC-II (6567 NTSC / 6569 PAL, later 8562/8565), SID 6581, two CIA 6526, 64 KB DRAM, 1 KB colour SRAM, 16 KB Kernal/BASIC ROM, 4 KB character ROM.
|
|
8
|
+
- VIC-II features: 40x25 text matrix, 320x200 or 160x200 bitmap, eight 24x21 sprites, 16 fixed colours, DMA/refresh master, light-pen input, IRQ generation.
|
|
9
|
+
|
|
10
|
+
## Key 6510 Signals
|
|
11
|
+
|
|
12
|
+
- `phi2`: Two-phase system clock; VIC drives phase 1 (low), CPU drives phase 2 (high).
|
|
13
|
+
- `R/W`: Bus direction (1 read, 0 write).
|
|
14
|
+
- `IRQ`, `NMI`: Interrupt inputs (VIC connects to IRQ).
|
|
15
|
+
- `RDY`: Halts CPU on reads when low (asserted via VIC BA).
|
|
16
|
+
- `AEC`: Tri-states CPU address bus when low (driven by VIC).
|
|
17
|
+
- `P0..P5`: On-chip port (DDR $0000, data $0001) controlling LORAM, HIRAM, CHAREN, cassette lines.
|
|
18
|
+
|
|
19
|
+
## Key VIC-II Signals
|
|
20
|
+
|
|
21
|
+
- `A0..A13`: 14-bit multiplexed video address bus (CIA2 bank bits extend reach to 64 KB).
|
|
22
|
+
- `D0..D11`: 12-bit data bus; lower 8 bits share CPU bus, upper 4 hit colour RAM.
|
|
23
|
+
- `IRQ`: Output to 6510 IRQ pin.
|
|
24
|
+
- `BA`: Bus Available; low three cycles before VIC steals phase-2 slots.
|
|
25
|
+
- `AEC`: Mirrors CPU AEC; low means VIC drives the bus.
|
|
26
|
+
- `LP`: Light-pen input (wired into keyboard matrix).
|
|
27
|
+
- `phi_in` / `phi0`: Pixel clock input (8.18 MHz NTSC, 7.88 MHz PAL) and derived 1 MHz system clock output.
|
|
28
|
+
|
|
29
|
+
## Memory Maps
|
|
30
|
+
|
|
31
|
+
### CPU View (6510)
|
|
32
|
+
|
|
33
|
+
| Range | Content | Notes |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| $0000 | I/O port DDR | Writes normally isolated; VIC leakage can touch RAM. |
|
|
36
|
+
| $0001 | I/O port data | Controls ROM/I/O mapping. |
|
|
37
|
+
| $0002-$9FFF | RAM | Always writable even when ROM overlays. |
|
|
38
|
+
| $A000-$BFFF | BASIC ROM or RAM | Toggled by LORAM/HIRAM. |
|
|
39
|
+
| $C000-$CFFF | RAM | |
|
|
40
|
+
| $D000-$D3FF | VIC registers (mirrored every $40) | |
|
|
41
|
+
| $D400-$D7FF | SID | |
|
|
42
|
+
| $D800-$DBFF | Colour RAM (4-bit, open upper nybble) | Visible when CHAREN=1. |
|
|
43
|
+
| $DC00-$DCFF | CIA1 | |
|
|
44
|
+
| $DD00-$DDFF | CIA2 | |
|
|
45
|
+
| $DE00-$DFFF | Expansion I/O (open bus) | Often returns last VIC fetch. |
|
|
46
|
+
| $E000-$FFFF | Kernal ROM or RAM | Controlled by HIRAM/external lines. |
|
|
47
|
+
|
|
48
|
+
### VIC View
|
|
49
|
+
|
|
50
|
+
| Bank | CPU Range | VIC Range | Contents |
|
|
51
|
+
| --- | --- | --- | --- |
|
|
52
|
+
| 0 | $0000-$3FFF | $0000-$3FFF | RAM; char ROM at $1000-$1FFF. |
|
|
53
|
+
| 1 | $4000-$7FFF | $0000-$3FFF | RAM. |
|
|
54
|
+
| 2 | $8000-$BFFF | $0000-$3FFF | RAM; char ROM at $1000-$1FFF. |
|
|
55
|
+
| 3 | $C000-$FFFF | $0000-$3FFF | RAM. |
|
|
56
|
+
|
|
57
|
+
- CIA2 port A bits 0-1 (inverted) choose the active 16 KB bank.
|
|
58
|
+
- Colour RAM (10-bit address) appears as upper nybble on every VIC read regardless of bank.
|
|
59
|
+
|
|
60
|
+
## Character ROM
|
|
61
|
+
|
|
62
|
+
The **Character ROM** (*chargen*) for the C64 is **4 KB at $D000–$DFFF (53248–57343)**, consisting of **two 2 KB sets** (each 256×8-byte glyphs):
|
|
63
|
+
|
|
64
|
+
- **Set 1 (uppercase/graphics):** $D000–$D7FF (53248–55295), 256 entries
|
|
65
|
+
- **Set 2 (lowercase/uppercase):** $D800–$DFFF (55296–57343), 256 entries
|
|
66
|
+
|
|
67
|
+
**Screen codes** index glyphs; **PETSCII codes** are logical character codes used by BASIC/KERNAL. Screen memory at **$0400–$07E7** stores screen codes that the **VIC-II** uses to fetch 8-byte bitmaps from the active character set.
|
|
68
|
+
|
|
69
|
+
### Screen/PETSCII Code Mapping and Character Bitmaps
|
|
70
|
+
|
|
71
|
+
The file `data/video/character-set.csv` contains the screen codes, PETSCII codes, and exact bitmaps of the first 256 entries. Its columns are **screen_code**, **petscii_code**, **Unicode/name**, and **byte1–byte8** (the 8×8 bitmap rows).
|
|
72
|
+
|
|
73
|
+
### Switching character sets
|
|
74
|
+
|
|
75
|
+
- Via control codes: `CHR$(142)` (set 1), `CHR$(14)` (set 2)
|
|
76
|
+
- Via register: **$D018 (53272)** selects screen base (upper nybble, ×1 KB) and character base (lower nybble, ×2 KB; bit 0 ignored). Typical values: **21** (set 1) and **23** (set 2).
|
|
77
|
+
- Keyboard: **SHIFT + Commodore** toggles sets.
|
|
78
|
+
|
|
79
|
+
### Rendering rules
|
|
80
|
+
|
|
81
|
+
- Each glyph = **8 rows × 1 byte/row**, **MSB = leftmost pixel**. Bit **1 = foreground** (per-cell color at **$D800–$DBE7**), **0 = background**.
|
|
82
|
+
- **Reverse-video:** characters **128–255** are reverse images of **0–127** in ROM sets.
|
|
83
|
+
- **Multicolor char mode:** pixels are **bit-pairs** (4 wide pixels/row). Colors: `00`=background ($D021), `01`=$D022, `10`=$D023, `11`=per-character color ($D800–$DBE7, colors 0–7). Enable multicolor via **$D011 bit 4** and color interpretation via **$D016 bit 4**; hires/multicolor can mix per cell (color RAM bit 3).
|
|
84
|
+
|
|
85
|
+
### Custom character sets in RAM
|
|
86
|
+
|
|
87
|
+
- **Alignment:** base address must be **2 KB-aligned** and within the **same 16 KB VIC bank** as screen RAM.
|
|
88
|
+
- **ROM-shadowed gaps:** VIC cannot see RAM charsets at **$1000, $1800, $9000, $9800** (ROM overlays).
|
|
89
|
+
- **Accessing ROM by CPU:** set **CHAREN** (I/O port at **$01**, bit 2 = 0) to map ROM at **$D000–$DFFF** for copying to RAM.
|
|
90
|
+
|
|
91
|
+
## Bus Arbitration
|
|
92
|
+
|
|
93
|
+
- VIC issues a read every phase-1 slot (c/g/p/s/refresh/idle access types).
|
|
94
|
+
- Character pointer fetches cost 40 extra phase-2 cycles during bad lines; sprite data consumes 2 phase-2 cycles per active sprite line.
|
|
95
|
+
- BA drops three cycles before takeover; AEC follows low three cycles later so CPU finishes up to three writes.
|
|
96
|
+
- CPU stalls only on reads; writes continue until RDY is sampled on the next read.
|
|
97
|
+
|
|
98
|
+
## Register Map ($D000-$D02E, mirrors every $40)
|
|
99
|
+
|
|
100
|
+
| # | Addr | Bits | Purpose |
|
|
101
|
+
| --- | --- | --- | --- |
|
|
102
|
+
| 0 | $d000 | M0X[7:0] | Sprite 0 X (LSB). |
|
|
103
|
+
| 1 | $d001 | M0Y[7:0] | Sprite 0 Y. |
|
|
104
|
+
| 2 | $d002 | M1X[7:0] | Sprite 1 X (LSB). |
|
|
105
|
+
| 3 | $d003 | M1Y[7:0] | Sprite 1 Y. |
|
|
106
|
+
| 4 | $d004 | M2X[7:0] | Sprite 2 X (LSB). |
|
|
107
|
+
| 5 | $d005 | M2Y[7:0] | Sprite 2 Y. |
|
|
108
|
+
| 6 | $d006 | M3X[7:0] | Sprite 3 X (LSB). |
|
|
109
|
+
| 7 | $d007 | M3Y[7:0] | Sprite 3 Y. |
|
|
110
|
+
| 8 | $d008 | M4X[7:0] | Sprite 4 X (LSB). |
|
|
111
|
+
| 9 | $d009 | M4Y[7:0] | Sprite 4 Y. |
|
|
112
|
+
| 10 | $d00a | M5X[7:0] | Sprite 5 X (LSB). |
|
|
113
|
+
| 11 | $d00b | M5Y[7:0] | Sprite 5 Y. |
|
|
114
|
+
| 12 | $d00c | M6X[7:0] | Sprite 6 X (LSB). |
|
|
115
|
+
| 13 | $d00d | M6Y[7:0] | Sprite 6 Y. |
|
|
116
|
+
| 14 | $d00e | M7X[7:0] | Sprite 7 X (LSB). |
|
|
117
|
+
| 15 | $d00f | M7Y[7:0] | Sprite 7 Y. |
|
|
118
|
+
| 16 | $d010 | M7X8..M0X8 | Sprite X MSBs. |
|
|
119
|
+
| 17 | $d011 | RST8 ECM BMM DEN RSEL YSCROLL[2:0] | Control 1: raster MSB, mode flags, display enable, 25/24 rows, vertical scroll. |
|
|
120
|
+
| 18 | $d012 | RASTER[7:0] | Raster counter LSB / compare value. |
|
|
121
|
+
| 19 | $d013 | LPX[7:0] | Light-pen X (bits 8-1). |
|
|
122
|
+
| 20 | $d014 | LPY[7:0] | Light-pen Y (bits 8-1). |
|
|
123
|
+
| 21 | $d015 | M7E..M0E | Sprite enable bits. |
|
|
124
|
+
| 22 | $d016 | -- RES MCM CSEL XSCROLL[2:0] | Control 2: multicolour, 40/38 columns, horizontal scroll (RES unused on 6567/6569). |
|
|
125
|
+
| 23 | $d017 | M7YE..M0YE | Sprite Y expansion toggles. |
|
|
126
|
+
| 24 | $d018 | VM13..VM10 CB13..CB11 _ | Video matrix and character/bitmap base pointers. |
|
|
127
|
+
| 25 | $d019 | IRQ ILP IMMC IMBC IRST | Interrupt latch (write 1 to clear, bit 7 mirrors IRQ). |
|
|
128
|
+
| 26 | $d01a | ---- ELP EMMC EMBC ERST | Interrupt enable mask. |
|
|
129
|
+
| 27 | $d01b | M7DP..M0DP | Sprite priority (0 behind foreground, 1 in front). |
|
|
130
|
+
| 28 | $d01c | M7MC..M0MC | Sprite multicolour enable. |
|
|
131
|
+
| 29 | $d01d | M7XE..M0XE | Sprite X expansion. |
|
|
132
|
+
| 30 | $d01e | M7M..M0M | Sprite-sprite collision flags (read clears). |
|
|
133
|
+
| 31 | $d01f | M7D..M0D | Sprite-data collision flags (read clears). |
|
|
134
|
+
| 32 | $d020 | ---- EC[3:0] | Border colour. |
|
|
135
|
+
| 33 | $d021 | ---- B0C[3:0] | Background colour 0. |
|
|
136
|
+
| 34 | $d022 | ---- B1C[3:0] | Background colour 1. |
|
|
137
|
+
| 35 | $d023 | ---- B2C[3:0] | Background colour 2. |
|
|
138
|
+
| 36 | $d024 | ---- B3C[3:0] | Background colour 3. |
|
|
139
|
+
| 37 | $d025 | ---- MM0[3:0] | Sprite multicolour 0. |
|
|
140
|
+
| 38 | $d026 | ---- MM1[3:0] | Sprite multicolour 1. |
|
|
141
|
+
| 39 | $d027 | ---- M0C[3:0] | Sprite 0 colour. |
|
|
142
|
+
| 40 | $d028 | ---- M1C[3:0] | Sprite 1 colour. |
|
|
143
|
+
| 41 | $d029 | ---- M2C[3:0] | Sprite 2 colour. |
|
|
144
|
+
| 42 | $d02a | ---- M3C[3:0] | Sprite 3 colour. |
|
|
145
|
+
| 43 | $d02b | ---- M4C[3:0] | Sprite 4 colour. |
|
|
146
|
+
| 44 | $d02c | ---- M5C[3:0] | Sprite 5 colour. |
|
|
147
|
+
| 45 | $d02d | ---- M6C[3:0] | Sprite 6 colour. |
|
|
148
|
+
| 46 | $d02e | ---- M7C[3:0] | Sprite 7 colour. |
|
|
149
|
+
|
|
150
|
+
Notes: unused bits read as 1; writes to $d01e/$d01f ignored; registers repeat every $40 bytes; $d02f-$d03f read $ff.
|
|
151
|
+
|
|
152
|
+
## Palette
|
|
153
|
+
|
|
154
|
+
| Code | Colour |
|
|
155
|
+
| --- | --- |
|
|
156
|
+
| 0 | Black |
|
|
157
|
+
| 1 | White |
|
|
158
|
+
| 2 | Red |
|
|
159
|
+
| 3 | Cyan |
|
|
160
|
+
| 4 | Pink |
|
|
161
|
+
| 5 | Green |
|
|
162
|
+
| 6 | Blue |
|
|
163
|
+
| 7 | Yellow |
|
|
164
|
+
| 8 | Orange |
|
|
165
|
+
| 9 | Brown |
|
|
166
|
+
| 10 | Light red |
|
|
167
|
+
| 11 | Dark gray |
|
|
168
|
+
| 12 | Medium gray |
|
|
169
|
+
| 13 | Light green |
|
|
170
|
+
| 14 | Light blue |
|
|
171
|
+
| 15 | Light gray |
|
|
172
|
+
|
|
173
|
+
## Display Geometry
|
|
174
|
+
|
|
175
|
+
- Screen rendered line by line; 8 pixels per CPU cycle.
|
|
176
|
+
- Display window fixed centrally while borders mask surrounding area.
|
|
177
|
+
- `RSEL` (bit 3 of $d011): 24 rows (192 px, raster $37-$f6) or 25 rows (200 px, raster $33-$fa).
|
|
178
|
+
- `CSEL` (bit 3 of $d016): 38 columns (304 px, X $1f-$14e) or 40 columns (320 px, X $18-$157).
|
|
179
|
+
- `XSCROLL[2:0]` and `YSCROLL[2:0]`: fine scroll 0-7 pixels.
|
|
180
|
+
- Cycle/line metrics: 6569 PAL (63 cycles, 312 lines, 284 visible, IRQ reference X=$194, visible X $1e0-$17c); 6567R56A NTSC (64 cycles, 262 lines, 234 visible, IRQ X=$19c, visible X $1e8-$184); 6567R8 NTSC (65 cycles, 263 lines, 235 visible, IRQ X=$19c, visible X $1e9-$18c).
|
|
181
|
+
|
|
182
|
+
## Bad Lines and Counters
|
|
183
|
+
|
|
184
|
+
- Bad line condition: during a phi0 falling edge, raster between $30 and $f7 inclusive, low three bits equal `YSCROLL`, and `DEN` was set at least once in raster line $30.
|
|
185
|
+
- On a bad line the VIC pulls BA low from cycle 12, keeps AEC low from cycle 15, and performs 40 c-fetches in cycles 15-54 (phase 2).
|
|
186
|
+
- Internal counters: `VC` (10-bit), `VCBASE` (10-bit), `RC` (3-bit), `VMLI` (6-bit index into the 40x12 buffer).
|
|
187
|
+
- Cycle 14 phase 1: `VC <- VCBASE`, `VMLI` reset; if bad line, `RC <- 0`.
|
|
188
|
+
- Each g-fetch in display state increments `VC` and `VMLI`.
|
|
189
|
+
- Cycle 58 phase 1: if `RC == 7`, sequencer idles and `VCBASE <- VC`; otherwise `RC++`.
|
|
190
|
+
- Idle state fetches from $3fff (or $39ff when ECM=1) with video matrix bits forced to 0.
|
|
191
|
+
|
|
192
|
+
## Memory Access Types per Raster Line
|
|
193
|
+
|
|
194
|
+
- `c`: video matrix + colour RAM (12-bit).
|
|
195
|
+
- `g`: character/bitmap byte (8-bit) or idle fetch ($3fff/$39ff).
|
|
196
|
+
- `p`: sprite pointer (one per sprite each line).
|
|
197
|
+
- `s`: sprite data (three bytes per active sprite line, immediately after pointer).
|
|
198
|
+
- `r`: DRAM refresh (five accesses using REF counter).
|
|
199
|
+
- `i`: idle access to $3fff.
|
|
200
|
+
- Order is hard-wired; bad lines insert 40 consecutive `c` slots, and active sprites add `s` slots right after their pointer cycle.
|
|
201
|
+
|
|
202
|
+
## Graphics Modes (ECM/BMM/MCM)
|
|
203
|
+
|
|
204
|
+
Graphics mode is selected by the following bits in $d011 and $d016:
|
|
205
|
+
|
|
206
|
+
- `ECM` (bit 6 of $d011): Extended Colour Mode.
|
|
207
|
+
- `BMM` (bit 5 of $d011): Bit Map Mode.
|
|
208
|
+
- `MCM` (bit 4 of $d016): Multi Colour Mode.
|
|
209
|
+
|
|
210
|
+
| Mode | Bits (ECM/BMM/MCM) | Memory interpretation | Pixel output |
|
|
211
|
+
| --- | --- | --- | --- |
|
|
212
|
+
| Standard text | 0/0/0 | `c`: char code + colour nybble; `g`: CB bits + RC | 8x8 pixels; bit 1 uses `c[11:8]`, bit 0 uses B0C ($d021$). |
|
|
213
|
+
| Multicolour text | 0/0/1 | `c[11]` selects multi flag | Flag 0: standard text; flag 1: 4x8 pixels, 00->B0C, 01->B1C, 10->B2C, 11->`c[10:8]`. |
|
|
214
|
+
| Standard bitmap | 0/1/0 | `c`: foreground/background nybbles; `g`: bitmap byte | 8x8 pixels; bit 0 -> `c[3:0]`, bit 1 -> `c[7:4]`. |
|
|
215
|
+
| Multicolour bitmap | 0/1/1 | `c`: colours for 01/10/11 | 4x8 pixels; 00->B0C, 01->`c[7:4]`, 10->`c[3:0]`, 11->`c[11:8]`. |
|
|
216
|
+
| ECM text | 1/0/0 | Upper char bits select B0C..B3C (char set reduced to 64) | Foreground uses `c[11:8]`; background chosen via `c[7:6]`. |
|
|
217
|
+
| Invalid text | 1/0/1 | Same addressing as ECM multi; outputs black | Useful for collision tricks; no visible pixels. |
|
|
218
|
+
| Invalid bitmap 1 | 1/1/0 | Bitmap with A9/A10 forced low | Displays black; repeats sections; collisions still occur. |
|
|
219
|
+
| Invalid bitmap 2 | 1/1/1 | Multicolour bitmap with A9/A10 forced low | Black output; collisions possible; 4x8 grouping. |
|
|
220
|
+
| Idle state | any (when sequencer idle) | `g` fetch at $3fff/$39ff, video matrix treated as zero | Outputs backgrounds per mode (typically B0C or black). |
|
|
221
|
+
|
|
222
|
+
## Sprites
|
|
223
|
+
|
|
224
|
+
- Data layout: 63 bytes (21 rows x 3 bytes), pointer table = last 8 bytes of video matrix ($03f8-$03ff in bank).
|
|
225
|
+
- Each sprite has counters `MC` (6-bit) and `MCBASE`, plus a Y expansion flip-flop.
|
|
226
|
+
- DMA enable: in cycles 55-56 the VIC tests `MxE` and `Y == RASTER`; if true, DMA turns on, `MCBASE <- 0`, Y expansion flip-flop cleared when `MxYE` set.
|
|
227
|
+
- Cycle 58: `MC <- MCBASE`; sprite becomes visible if DMA on and Y matches raster.
|
|
228
|
+
- Sprite fetches: after pointer (`p`) cycle, three `s` cycles read data bytes into a 24-bit shift register; `MC` increments each `s`.
|
|
229
|
+
- Display: shift register outputs bits once X matches register; multicolour groups two bits; X expansion halves shift rate; toggling `MxYE` repeats lines for Y expansion.
|
|
230
|
+
- Reuse: change Y mid-frame after DMA completes to display same sprite later; horizontal reuse impossible after 24 pixels (shift register empty).
|
|
231
|
+
- Priority: sprites ordered 0 highest to 7 lowest; `MxDP=0` places sprite behind foreground graphics, `1` in front; overall order background < foreground < sprite (subject to `MxDP`) < border.
|
|
232
|
+
- Collisions: $d01e (sprite-sprite) and $d01f (sprite-graphics) latch bits until read; only first collision while register clear raises IRQ if enabled.
|
|
233
|
+
|
|
234
|
+
## Border Logic
|
|
235
|
+
|
|
236
|
+
- Two flip-flops: main border (controls border colour) and vertical border (gates sequencer output).
|
|
237
|
+
- Comparators per axis use RSEL/CSEL thresholds: horizontal $1f/$14f (38 cols) or $18/$158 (40 cols); vertical $37/$f7 (24 rows) or $33/$fb (25 rows).
|
|
238
|
+
- Rules: reaching right edge sets main border; left edge clears it if vertical flip-flop reset; vertical flip-flop set at bottom or when left edge meets top/bottom; DEN must be 1 to clear vertical flip-flop.
|
|
239
|
+
|
|
240
|
+
## Display Enable (DEN)
|
|
241
|
+
|
|
242
|
+
- Clearing bit 4 of $d011 suppresses bad lines and keeps vertical border set (screen becomes full border colour).
|
|
243
|
+
- Re-enabling mid-frame (with YSCROLL=0) can cause DMA Delay when line $30 becomes a late bad line.
|
|
244
|
+
|
|
245
|
+
## Light-Pen
|
|
246
|
+
|
|
247
|
+
- Negative edge on `LP` latches beam into $d013/$d014 (8-bit each; horizontal resolution is two pixels).
|
|
248
|
+
- Only first trigger per frame is captured; reset occurs during vertical blank.
|
|
249
|
+
- `LP` shares CIA1 keyboard matrix bit (port B bit 4), permitting software-triggered latching for timing.
|
|
250
|
+
|
|
251
|
+
## Interrupts
|
|
252
|
+
|
|
253
|
+
| Bit | Latch ($d019) | Enable ($d01a) | Trigger |
|
|
254
|
+
| --- | --- | --- | --- |
|
|
255
|
+
| 0 | IRST | ERST | Raster compare hits programmed line (checked cycle 0, cycle 1 for line 0). |
|
|
256
|
+
| 1 | IMBC | EMBC | Sprite pixel overlaps foreground graphics pixel. |
|
|
257
|
+
| 2 | IMMC | EMMC | Two or more sprites output non-transparent pixels simultaneously. |
|
|
258
|
+
| 3 | ILP | ELP | Negative edge on light-pen input. |
|
|
259
|
+
|
|
260
|
+
- Write 1 to any asserted latch bit to clear; bit 7 mirrors IRQ line state.
|
|
261
|
+
- VIC asserts IRQ while any enabled latch bit remains set; CPU must clear before exiting handler (level-sensitive).
|
|
262
|
+
|
|
263
|
+
## DRAM Refresh
|
|
264
|
+
|
|
265
|
+
- Five refresh reads per raster line via 8-bit REF counter (reset to $ff in line 0, decremented each refresh access).
|
|
266
|
+
- Refresh addresses: $3fff, $3ffe, $3ffd, $3ffc, $3ffb in line 0, then continue downward, wrapping every 256 refreshes.
|
|
267
|
+
|
|
268
|
+
## Notable Effects
|
|
269
|
+
|
|
270
|
+
- Hyperscreen: toggle CSEL/RSEL so comparisons never match (e.g. switch RSEL at raster 248-250) to disable borders and expose idle graphics or sprites.
|
|
271
|
+
- FLD (Flexible Line Distance): adjust YSCROLL to delay bad lines; controls line spacing and enables large downward scroll without memory moves.
|
|
272
|
+
- FLI (Flexible Line Interpretation): force bad line each raster (write YSCROLL after cycle 14) to reload colour data per line; requires cycling VM bits; first three fetches read $ff causing left-side stripes.
|
|
273
|
+
- Linecrunch: clear bad line condition before cycle 14 so RC stays 7 and `VCBASE` jumps by 40; collapses a text line into one raster and speeds upward scroll.
|
|
274
|
+
- Doubled lines: assert bad line late (cycles 54-57) so RC wraps to 0 and same line renders twice.
|
|
275
|
+
- DMA Delay: create bad line while sequencer idle (cycle 15-53). Initial three fetches see $ff or CPU opcode low nibble; VC misalignment shifts display horizontally without copying data.
|
|
276
|
+
- Sprite stretching: toggle `MxYE` around cycle 16 to repeat or skip line increments; manipulating `MCBASE` permits arbitrary vertical scaling or double rendering.
|