romdevtools 0.14.0 → 0.15.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.
Files changed (96) hide show
  1. package/AGENTS.md +17 -10
  2. package/CHANGELOG.md +63 -0
  3. package/examples/atari2600/main.asm +1 -1
  4. package/examples/atari2600/templates/default.asm +1 -1
  5. package/examples/atari2600/templates/paddle.asm +59 -47
  6. package/examples/atari7800/main.c +1 -1
  7. package/examples/atari7800/templates/default.c +1 -1
  8. package/examples/atari7800/templates/music_demo.c +1 -1
  9. package/examples/c64/main.c +1 -1
  10. package/examples/c64/templates/platformer.c +2 -2
  11. package/examples/c64/templates/puzzle.c +1 -1
  12. package/examples/c64/templates/racing.c +3 -3
  13. package/examples/c64/templates/shmup.c +6 -5
  14. package/examples/c64/templates/sports.c +4 -4
  15. package/examples/gb/main.asm +1 -1
  16. package/examples/gb/main.c +1 -1
  17. package/examples/gb/templates/puzzle.c +1 -1
  18. package/examples/gb/templates/racing.c +1 -1
  19. package/examples/gb/templates/shmup.c +1 -1
  20. package/examples/gba/templates/gba_hello.c +1 -1
  21. package/examples/gba/templates/maxmod_demo.c +1 -1
  22. package/examples/gba/templates/puzzle.c +17 -3
  23. package/examples/gba/templates/racing.c +16 -2
  24. package/examples/gba/templates/shmup.c +23 -4
  25. package/examples/gba/templates/tonc_hello.c +6 -4
  26. package/examples/gbc/main.asm +1 -1
  27. package/examples/gbc/templates/puzzle.c +1 -1
  28. package/examples/gbc/templates/racing.c +1 -1
  29. package/examples/gbc/templates/shmup.c +1 -1
  30. package/examples/genesis/main.s +1 -1
  31. package/examples/genesis/templates/puzzle.c +1 -1
  32. package/examples/genesis/templates/racing.c +45 -1
  33. package/examples/genesis/templates/shmup.c +12 -3
  34. package/examples/genesis/templates/shmup_2p.c +2 -2
  35. package/examples/genesis/templates/sports.c +39 -0
  36. package/examples/gg/templates/hello_sprite.c +38 -23
  37. package/examples/gg/templates/music_demo.c +11 -8
  38. package/examples/gg/templates/platformer.c +37 -15
  39. package/examples/gg/templates/racing.c +25 -12
  40. package/examples/gg/templates/shmup.c +12 -6
  41. package/examples/gg/templates/sports.c +30 -16
  42. package/examples/gg/templates/tile_engine.c +24 -10
  43. package/examples/lynx/templates/platformer.c +7 -1
  44. package/examples/lynx/templates/puzzle.c +8 -2
  45. package/examples/lynx/templates/racing.c +7 -1
  46. package/examples/lynx/templates/sports.c +7 -1
  47. package/examples/nes/main.c +2 -2
  48. package/examples/nes/space-shooter/nes_runtime.h +1 -1
  49. package/examples/nes/templates/default.c +4 -1
  50. package/examples/nes/templates/racing.c +50 -1
  51. package/examples/pce/main.c +1 -1
  52. package/examples/sms/templates/hello_sprite.c +1 -1
  53. package/examples/sms/templates/music_demo.c +1 -1
  54. package/examples/sms/templates/puzzle.c +1 -1
  55. package/examples/sms/templates/racing.c +1 -1
  56. package/examples/sms/templates/shmup.c +1 -1
  57. package/examples/sms/templates/shmup_2p.c +2 -2
  58. package/examples/snes/main.asm +1 -1
  59. package/examples/snes/templates/c-hello-data.asm +309 -14
  60. package/examples/snes/templates/c-hello.c +13 -2
  61. package/examples/snes/templates/default.c +1 -1
  62. package/examples/snes/templates/hello_sprite-data.asm +300 -2
  63. package/examples/snes/templates/hello_sprite.c +10 -1
  64. package/examples/snes/templates/music_demo-data.asm +300 -2
  65. package/examples/snes/templates/music_demo.c +10 -1
  66. package/examples/snes/templates/platformer-data.asm +300 -2
  67. package/examples/snes/templates/platformer.c +10 -1
  68. package/examples/snes/templates/puzzle-data.asm +300 -2
  69. package/examples/snes/templates/puzzle.c +11 -1
  70. package/examples/snes/templates/racing-data.asm +300 -2
  71. package/examples/snes/templates/racing.c +40 -4
  72. package/examples/snes/templates/shmup-data.asm +299 -6
  73. package/examples/snes/templates/shmup.c +11 -7
  74. package/examples/snes/templates/sports-data.asm +300 -2
  75. package/examples/snes/templates/sports.c +40 -5
  76. package/package.json +1 -1
  77. package/src/mcp/tools/project.js +33 -22
  78. package/src/mcp/tools/toolchain.js +183 -19
  79. package/src/observer/livestream.html +34 -4
  80. package/src/platforms/gg/MENTAL_MODEL.md +14 -13
  81. package/src/platforms/gg/lib/c/vdp_init.c +10 -8
  82. package/src/platforms/msx/MENTAL_MODEL.md +1 -1
  83. package/src/platforms/nes/TROUBLESHOOTING.md +1 -1
  84. package/src/platforms/nes/lib/c/nes_runtime.c +28 -6
  85. package/src/platforms/pce/MENTAL_MODEL.md +1 -1
  86. package/src/platforms/pce/lib/c/pce_hw.h +1 -0
  87. package/src/platforms/pce/lib/c/pce_video.c +26 -0
  88. package/src/platforms/sms/MENTAL_MODEL.md +12 -12
  89. package/src/platforms/sms/lib/c/vdp_init.c +10 -8
  90. package/src/platforms/sms/lib/vdp_init.s +1 -1
  91. package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +1 -1
  92. package/src/toolchains/cc65/presets/nes/chr-ram.cfg +1 -1
  93. package/src/toolchains/cc65/presets/nes/chr-ram.crt0.s +1 -1
  94. package/src/toolchains/genesis-c/README.md +1 -1
  95. package/src/toolchains/sdcc/preflight-lint.js +47 -7
  96. package/src/toolchains/snes-c/snes-c.js +3 -7
@@ -1,28 +1,323 @@
1
- ; ── c-hello-data.asm — stub data symbols for the c-hello template ──
1
+ ; ── c-hello-data.asm — font data symbols for the c-hello template ──
2
2
  ;
3
3
  ; Two symbols required by main.c's consoleInitText call:
4
4
  ;
5
- ; tilfont — pointer to font tile data (.pic format = wla-dx
6
- ; binary include, 2 KB for a 16x16 ASCII font in 2bpp)
7
- ; palfont — pointer to font palette data (.pal = 32-byte SNES
8
- ; CGRAM blob: 16 colors × 2 bytes per color in BGR555)
5
+ ; tilfont — 8x8 4bpp console font tiles (96 glyphs, ASCII 0x20-0x7F).
6
+ ; consoleInitText DMAs 3072 bytes (96 x 32) from here.
7
+ ; palfont — 32-byte SNES CGRAM blob: 16 colours x 2 bytes (BGR555);
8
+ ; colour 0 transparent, colour 1 white.
9
9
  ;
10
- ; Both stubbed as 8 zero bytes here so the link resolves. Real
11
- ; projects replace these stubs with `.incbin "myfont.pic"` and
12
- ; `.incbin "myfont.pal"`.
13
- ;
14
- ; Convert a PNG to .pic + .pal with PVSnesLib's gfx4snes tool (not
15
- ; bundled in romdev yet — pre-convert outside the MCP and ship
16
- ; the binary artifacts alongside your source).
10
+ ; This used to be an 8-byte stub which made consoleDrawText render
11
+ ; garbage/black text. A real embedded font now ships so c_hello shows
12
+ ; readable text out of the box.
17
13
 
18
14
  .include "hdr.asm"
19
15
 
20
16
  .section ".rodata1" superfree
21
17
 
18
+ ; ── tilfont: 8x8 4bpp console font (96 glyphs, ASCII 0x20-0x7F) ──
19
+ ; consoleInitText DMAs exactly 3072 bytes (96 tiles x 32 bytes, 4bpp)
20
+ ; from this label into VRAM. Glyph index = (char - 0x20), so 0x20=tile 0.
21
+ ; Only bitplane 0 carries pixels => every set pixel uses palette colour 1.
22
+ ; Public-domain font8x8 basic (Daniel Hepper), converted to SNES 4bpp.
22
23
  tilfont:
23
- .db 0, 0, 0, 0, 0, 0, 0, 0
24
+ ; 0x20 '(space)'
25
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
26
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
27
+ ; 0x21 '!'
28
+ .db $18, $00, $3C, $00, $3C, $00, $18, $00, $18, $00, $00, $00, $18, $00, $00, $00
29
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
30
+ ; 0x22 '"'
31
+ .db $6C, $00, $6C, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
32
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
33
+ ; 0x23 '#'
34
+ .db $6C, $00, $6C, $00, $FE, $00, $6C, $00, $FE, $00, $6C, $00, $6C, $00, $00, $00
35
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
36
+ ; 0x24 '$'
37
+ .db $30, $00, $7C, $00, $C0, $00, $78, $00, $0C, $00, $F8, $00, $30, $00, $00, $00
38
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
39
+ ; 0x25 '%'
40
+ .db $00, $00, $C6, $00, $CC, $00, $18, $00, $30, $00, $66, $00, $C6, $00, $00, $00
41
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
42
+ ; 0x26 '&'
43
+ .db $38, $00, $6C, $00, $38, $00, $76, $00, $DC, $00, $CC, $00, $76, $00, $00, $00
44
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
45
+ ; 0x27 '''
46
+ .db $60, $00, $60, $00, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
47
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
48
+ ; 0x28 '('
49
+ .db $18, $00, $30, $00, $60, $00, $60, $00, $60, $00, $30, $00, $18, $00, $00, $00
50
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
51
+ ; 0x29 ')'
52
+ .db $60, $00, $30, $00, $18, $00, $18, $00, $18, $00, $30, $00, $60, $00, $00, $00
53
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
54
+ ; 0x2A '*'
55
+ .db $00, $00, $66, $00, $3C, $00, $FF, $00, $3C, $00, $66, $00, $00, $00, $00, $00
56
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
57
+ ; 0x2B '+'
58
+ .db $00, $00, $30, $00, $30, $00, $FC, $00, $30, $00, $30, $00, $00, $00, $00, $00
59
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
60
+ ; 0x2C ','
61
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $30, $00, $30, $00, $60, $00
62
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
63
+ ; 0x2D '-'
64
+ .db $00, $00, $00, $00, $00, $00, $FC, $00, $00, $00, $00, $00, $00, $00, $00, $00
65
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
66
+ ; 0x2E '.'
67
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $30, $00, $30, $00, $00, $00
68
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
69
+ ; 0x2F '/'
70
+ .db $06, $00, $0C, $00, $18, $00, $30, $00, $60, $00, $C0, $00, $80, $00, $00, $00
71
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
72
+ ; 0x30 '0'
73
+ .db $7C, $00, $C6, $00, $CE, $00, $DE, $00, $F6, $00, $E6, $00, $7C, $00, $00, $00
74
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
75
+ ; 0x31 '1'
76
+ .db $30, $00, $70, $00, $30, $00, $30, $00, $30, $00, $30, $00, $FC, $00, $00, $00
77
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
78
+ ; 0x32 '2'
79
+ .db $78, $00, $CC, $00, $0C, $00, $38, $00, $60, $00, $CC, $00, $FC, $00, $00, $00
80
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
81
+ ; 0x33 '3'
82
+ .db $78, $00, $CC, $00, $0C, $00, $38, $00, $0C, $00, $CC, $00, $78, $00, $00, $00
83
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
84
+ ; 0x34 '4'
85
+ .db $1C, $00, $3C, $00, $6C, $00, $CC, $00, $FE, $00, $0C, $00, $1E, $00, $00, $00
86
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
87
+ ; 0x35 '5'
88
+ .db $FC, $00, $C0, $00, $F8, $00, $0C, $00, $0C, $00, $CC, $00, $78, $00, $00, $00
89
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
90
+ ; 0x36 '6'
91
+ .db $38, $00, $60, $00, $C0, $00, $F8, $00, $CC, $00, $CC, $00, $78, $00, $00, $00
92
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
93
+ ; 0x37 '7'
94
+ .db $FC, $00, $CC, $00, $0C, $00, $18, $00, $30, $00, $30, $00, $30, $00, $00, $00
95
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
96
+ ; 0x38 '8'
97
+ .db $78, $00, $CC, $00, $CC, $00, $78, $00, $CC, $00, $CC, $00, $78, $00, $00, $00
98
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
99
+ ; 0x39 '9'
100
+ .db $78, $00, $CC, $00, $CC, $00, $7C, $00, $0C, $00, $18, $00, $70, $00, $00, $00
101
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
102
+ ; 0x3A ':'
103
+ .db $00, $00, $30, $00, $30, $00, $00, $00, $00, $00, $30, $00, $30, $00, $00, $00
104
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
105
+ ; 0x3B ';'
106
+ .db $00, $00, $30, $00, $30, $00, $00, $00, $00, $00, $30, $00, $30, $00, $60, $00
107
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
108
+ ; 0x3C '<'
109
+ .db $18, $00, $30, $00, $60, $00, $C0, $00, $60, $00, $30, $00, $18, $00, $00, $00
110
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
111
+ ; 0x3D '='
112
+ .db $00, $00, $00, $00, $FC, $00, $00, $00, $00, $00, $FC, $00, $00, $00, $00, $00
113
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
114
+ ; 0x3E '>'
115
+ .db $60, $00, $30, $00, $18, $00, $0C, $00, $18, $00, $30, $00, $60, $00, $00, $00
116
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
117
+ ; 0x3F '?'
118
+ .db $78, $00, $CC, $00, $0C, $00, $18, $00, $30, $00, $00, $00, $30, $00, $00, $00
119
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
120
+ ; 0x40 '@'
121
+ .db $7C, $00, $C6, $00, $DE, $00, $DE, $00, $DE, $00, $C0, $00, $78, $00, $00, $00
122
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
123
+ ; 0x41 'A'
124
+ .db $30, $00, $78, $00, $CC, $00, $CC, $00, $FC, $00, $CC, $00, $CC, $00, $00, $00
125
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
126
+ ; 0x42 'B'
127
+ .db $FC, $00, $66, $00, $66, $00, $7C, $00, $66, $00, $66, $00, $FC, $00, $00, $00
128
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
129
+ ; 0x43 'C'
130
+ .db $3C, $00, $66, $00, $C0, $00, $C0, $00, $C0, $00, $66, $00, $3C, $00, $00, $00
131
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
132
+ ; 0x44 'D'
133
+ .db $F8, $00, $6C, $00, $66, $00, $66, $00, $66, $00, $6C, $00, $F8, $00, $00, $00
134
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
135
+ ; 0x45 'E'
136
+ .db $FE, $00, $62, $00, $68, $00, $78, $00, $68, $00, $62, $00, $FE, $00, $00, $00
137
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
138
+ ; 0x46 'F'
139
+ .db $FE, $00, $62, $00, $68, $00, $78, $00, $68, $00, $60, $00, $F0, $00, $00, $00
140
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
141
+ ; 0x47 'G'
142
+ .db $3C, $00, $66, $00, $C0, $00, $C0, $00, $CE, $00, $66, $00, $3E, $00, $00, $00
143
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
144
+ ; 0x48 'H'
145
+ .db $CC, $00, $CC, $00, $CC, $00, $FC, $00, $CC, $00, $CC, $00, $CC, $00, $00, $00
146
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
147
+ ; 0x49 'I'
148
+ .db $78, $00, $30, $00, $30, $00, $30, $00, $30, $00, $30, $00, $78, $00, $00, $00
149
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
150
+ ; 0x4A 'J'
151
+ .db $1E, $00, $0C, $00, $0C, $00, $0C, $00, $CC, $00, $CC, $00, $78, $00, $00, $00
152
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
153
+ ; 0x4B 'K'
154
+ .db $E6, $00, $66, $00, $6C, $00, $78, $00, $6C, $00, $66, $00, $E6, $00, $00, $00
155
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
156
+ ; 0x4C 'L'
157
+ .db $F0, $00, $60, $00, $60, $00, $60, $00, $62, $00, $66, $00, $FE, $00, $00, $00
158
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
159
+ ; 0x4D 'M'
160
+ .db $C6, $00, $EE, $00, $FE, $00, $FE, $00, $D6, $00, $C6, $00, $C6, $00, $00, $00
161
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
162
+ ; 0x4E 'N'
163
+ .db $C6, $00, $E6, $00, $F6, $00, $DE, $00, $CE, $00, $C6, $00, $C6, $00, $00, $00
164
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
165
+ ; 0x4F 'O'
166
+ .db $38, $00, $6C, $00, $C6, $00, $C6, $00, $C6, $00, $6C, $00, $38, $00, $00, $00
167
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
168
+ ; 0x50 'P'
169
+ .db $FC, $00, $66, $00, $66, $00, $7C, $00, $60, $00, $60, $00, $F0, $00, $00, $00
170
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
171
+ ; 0x51 'Q'
172
+ .db $78, $00, $CC, $00, $CC, $00, $CC, $00, $DC, $00, $78, $00, $1C, $00, $00, $00
173
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
174
+ ; 0x52 'R'
175
+ .db $FC, $00, $66, $00, $66, $00, $7C, $00, $6C, $00, $66, $00, $E6, $00, $00, $00
176
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
177
+ ; 0x53 'S'
178
+ .db $78, $00, $CC, $00, $E0, $00, $70, $00, $1C, $00, $CC, $00, $78, $00, $00, $00
179
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
180
+ ; 0x54 'T'
181
+ .db $FC, $00, $B4, $00, $30, $00, $30, $00, $30, $00, $30, $00, $78, $00, $00, $00
182
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
183
+ ; 0x55 'U'
184
+ .db $CC, $00, $CC, $00, $CC, $00, $CC, $00, $CC, $00, $CC, $00, $FC, $00, $00, $00
185
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
186
+ ; 0x56 'V'
187
+ .db $CC, $00, $CC, $00, $CC, $00, $CC, $00, $CC, $00, $78, $00, $30, $00, $00, $00
188
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
189
+ ; 0x57 'W'
190
+ .db $C6, $00, $C6, $00, $C6, $00, $D6, $00, $FE, $00, $EE, $00, $C6, $00, $00, $00
191
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
192
+ ; 0x58 'X'
193
+ .db $C6, $00, $C6, $00, $6C, $00, $38, $00, $38, $00, $6C, $00, $C6, $00, $00, $00
194
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
195
+ ; 0x59 'Y'
196
+ .db $CC, $00, $CC, $00, $CC, $00, $78, $00, $30, $00, $30, $00, $78, $00, $00, $00
197
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
198
+ ; 0x5A 'Z'
199
+ .db $FE, $00, $C6, $00, $8C, $00, $18, $00, $32, $00, $66, $00, $FE, $00, $00, $00
200
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
201
+ ; 0x5B '['
202
+ .db $78, $00, $60, $00, $60, $00, $60, $00, $60, $00, $60, $00, $78, $00, $00, $00
203
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
204
+ ; 0x5C 'backslash'
205
+ .db $C0, $00, $60, $00, $30, $00, $18, $00, $0C, $00, $06, $00, $02, $00, $00, $00
206
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
207
+ ; 0x5D ']'
208
+ .db $78, $00, $18, $00, $18, $00, $18, $00, $18, $00, $18, $00, $78, $00, $00, $00
209
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
210
+ ; 0x5E '^'
211
+ .db $10, $00, $38, $00, $6C, $00, $C6, $00, $00, $00, $00, $00, $00, $00, $00, $00
212
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
213
+ ; 0x5F '_'
214
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00
215
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
216
+ ; 0x60 '`'
217
+ .db $30, $00, $30, $00, $18, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
218
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
219
+ ; 0x61 'a'
220
+ .db $00, $00, $00, $00, $78, $00, $0C, $00, $7C, $00, $CC, $00, $76, $00, $00, $00
221
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
222
+ ; 0x62 'b'
223
+ .db $E0, $00, $60, $00, $60, $00, $7C, $00, $66, $00, $66, $00, $DC, $00, $00, $00
224
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
225
+ ; 0x63 'c'
226
+ .db $00, $00, $00, $00, $78, $00, $CC, $00, $C0, $00, $CC, $00, $78, $00, $00, $00
227
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
228
+ ; 0x64 'd'
229
+ .db $1C, $00, $0C, $00, $0C, $00, $7C, $00, $CC, $00, $CC, $00, $76, $00, $00, $00
230
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
231
+ ; 0x65 'e'
232
+ .db $00, $00, $00, $00, $78, $00, $CC, $00, $FC, $00, $C0, $00, $78, $00, $00, $00
233
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
234
+ ; 0x66 'f'
235
+ .db $38, $00, $6C, $00, $60, $00, $F0, $00, $60, $00, $60, $00, $F0, $00, $00, $00
236
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
237
+ ; 0x67 'g'
238
+ .db $00, $00, $00, $00, $76, $00, $CC, $00, $CC, $00, $7C, $00, $0C, $00, $F8, $00
239
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
240
+ ; 0x68 'h'
241
+ .db $E0, $00, $60, $00, $6C, $00, $76, $00, $66, $00, $66, $00, $E6, $00, $00, $00
242
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
243
+ ; 0x69 'i'
244
+ .db $30, $00, $00, $00, $70, $00, $30, $00, $30, $00, $30, $00, $78, $00, $00, $00
245
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
246
+ ; 0x6A 'j'
247
+ .db $0C, $00, $00, $00, $0C, $00, $0C, $00, $0C, $00, $CC, $00, $CC, $00, $78, $00
248
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
249
+ ; 0x6B 'k'
250
+ .db $E0, $00, $60, $00, $66, $00, $6C, $00, $78, $00, $6C, $00, $E6, $00, $00, $00
251
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
252
+ ; 0x6C 'l'
253
+ .db $70, $00, $30, $00, $30, $00, $30, $00, $30, $00, $30, $00, $78, $00, $00, $00
254
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
255
+ ; 0x6D 'm'
256
+ .db $00, $00, $00, $00, $CC, $00, $FE, $00, $FE, $00, $D6, $00, $C6, $00, $00, $00
257
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
258
+ ; 0x6E 'n'
259
+ .db $00, $00, $00, $00, $F8, $00, $CC, $00, $CC, $00, $CC, $00, $CC, $00, $00, $00
260
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
261
+ ; 0x6F 'o'
262
+ .db $00, $00, $00, $00, $78, $00, $CC, $00, $CC, $00, $CC, $00, $78, $00, $00, $00
263
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
264
+ ; 0x70 'p'
265
+ .db $00, $00, $00, $00, $DC, $00, $66, $00, $66, $00, $7C, $00, $60, $00, $F0, $00
266
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
267
+ ; 0x71 'q'
268
+ .db $00, $00, $00, $00, $76, $00, $CC, $00, $CC, $00, $7C, $00, $0C, $00, $1E, $00
269
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
270
+ ; 0x72 'r'
271
+ .db $00, $00, $00, $00, $DC, $00, $76, $00, $66, $00, $60, $00, $F0, $00, $00, $00
272
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
273
+ ; 0x73 's'
274
+ .db $00, $00, $00, $00, $7C, $00, $C0, $00, $78, $00, $0C, $00, $F8, $00, $00, $00
275
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
276
+ ; 0x74 't'
277
+ .db $10, $00, $30, $00, $7C, $00, $30, $00, $30, $00, $34, $00, $18, $00, $00, $00
278
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
279
+ ; 0x75 'u'
280
+ .db $00, $00, $00, $00, $CC, $00, $CC, $00, $CC, $00, $CC, $00, $76, $00, $00, $00
281
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
282
+ ; 0x76 'v'
283
+ .db $00, $00, $00, $00, $CC, $00, $CC, $00, $CC, $00, $78, $00, $30, $00, $00, $00
284
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
285
+ ; 0x77 'w'
286
+ .db $00, $00, $00, $00, $C6, $00, $D6, $00, $FE, $00, $FE, $00, $6C, $00, $00, $00
287
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
288
+ ; 0x78 'x'
289
+ .db $00, $00, $00, $00, $C6, $00, $6C, $00, $38, $00, $6C, $00, $C6, $00, $00, $00
290
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
291
+ ; 0x79 'y'
292
+ .db $00, $00, $00, $00, $CC, $00, $CC, $00, $CC, $00, $7C, $00, $0C, $00, $F8, $00
293
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
294
+ ; 0x7A 'z'
295
+ .db $00, $00, $00, $00, $FC, $00, $98, $00, $30, $00, $64, $00, $FC, $00, $00, $00
296
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
297
+ ; 0x7B '{'
298
+ .db $1C, $00, $30, $00, $30, $00, $E0, $00, $30, $00, $30, $00, $1C, $00, $00, $00
299
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
300
+ ; 0x7C '|'
301
+ .db $18, $00, $18, $00, $18, $00, $00, $00, $18, $00, $18, $00, $18, $00, $00, $00
302
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
303
+ ; 0x7D '}'
304
+ .db $E0, $00, $30, $00, $30, $00, $1C, $00, $30, $00, $30, $00, $E0, $00, $00, $00
305
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
306
+ ; 0x7E '~'
307
+ .db $76, $00, $DC, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
308
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
309
+ ; 0x7F 'del'
310
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
311
+ .db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
24
312
 
313
+ ; ── palfont: 16-colour text palette (32 bytes, BGR555) ──
314
+ ; colour 0 = transparent (BG backdrop shows through), colour 1 = white.
25
315
  palfont:
26
- .db 0, 0, 0, 0, 0, 0, 0, 0
316
+ .db $00, $00 ; 0 transparent
317
+ .db $FF, $7F ; 1 white (text)
318
+ .db $00, $00, $00, $00, $00, $00, $00, $00
319
+ .db $00, $00, $00, $00, $00, $00, $00, $00
320
+ .db $00, $00, $00, $00, $00, $00, $00, $00
321
+ .db $00, $00
27
322
 
28
323
  .ends
@@ -12,7 +12,7 @@
12
12
  * authored .pic + .pal works equivalently).
13
13
  *
14
14
  * Build via romdev:
15
- * buildSource({
15
+ * build({ output: "rom",
16
16
  * platform: "snes", language: "c",
17
17
  * sources: {
18
18
  * "main.c": <this file>,
@@ -28,6 +28,11 @@
28
28
 
29
29
  extern char tilfont, palfont;
30
30
 
31
+ /* consoleVblank() copies the dirty text tilemap to VRAM during VBlank.
32
+ * It has no public prototype in console.h, so declare it here. Call it
33
+ * once per frame (after WaitForVBlank) or via nmiSet(consoleVblank). */
34
+ extern void consoleVblank(void);
35
+
31
36
  int main(void) {
32
37
  /* ── 1. PVSnesLib text-mode setup ─────────────────────────────
33
38
  * Map + tile-data + palette-offset addresses are conventions —
@@ -36,14 +41,19 @@ int main(void) {
36
41
  */
37
42
  consoleSetTextMapPtr(0x6800);
38
43
  consoleSetTextGfxPtr(0x3000);
39
- consoleSetTextOffset(0x0100);
44
+ consoleSetTextOffset(0x0000); /* tile index = (char-0x20); font is at the BG char base */
40
45
  consoleInitText(0, 16 * 2, &tilfont, &palfont);
41
46
 
42
47
  /* ── 2. Pick a BG mode ────────────────────────────────────────
43
48
  * BG_MODE1 = 16-color BG0/BG1 + 4-color BG2. Good default.
49
+ * consoleInitText only DMAs the font/palette to VRAM — it does NOT
50
+ * program the PPU BG base registers, so point BG0 at the same font
51
+ * ($3000) + map ($6800) addresses we gave the console above.
44
52
  * Disable BG1 / BG2 since we only use BG0 for text here.
45
53
  */
46
54
  setMode(BG_MODE1, 0);
55
+ bgSetGfxPtr(0, 0x3000);
56
+ bgSetMapPtr(0, 0x6800, SC_32x32);
47
57
  bgSetDisable(1);
48
58
  bgSetDisable(2);
49
59
 
@@ -66,6 +76,7 @@ int main(void) {
66
76
  */
67
77
  while (1) {
68
78
  WaitForVBlank();
79
+ consoleVblank(); /* flush any consoleDrawText changes to VRAM */
69
80
  }
70
81
  return 0;
71
82
  }
@@ -17,7 +17,7 @@
17
17
  *
18
18
  * Sibling `data.asm` provides the sprite tile + palette bytes.
19
19
  * Build:
20
- * buildSource({
20
+ * build({ output: "rom",
21
21
  * platform:"snes", language:"c",
22
22
  * sourcesPaths:{"main.c":"...","data.asm":"..."},
23
23
  * })