romdevtools 0.28.0 → 0.30.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/AGENTS.md +53 -43
- package/CHANGELOG.md +91 -0
- package/README.md +3 -3
- package/examples/README.md +7 -7
- package/examples/atari2600/templates/platformer.asm +1225 -332
- package/examples/atari2600/templates/puzzle.asm +1056 -0
- package/examples/atari2600/templates/racing.asm +906 -275
- package/examples/atari2600/templates/shmup.asm +1031 -239
- package/examples/atari2600/templates/sports.asm +1135 -253
- package/examples/atari7800/templates/platformer.c +991 -156
- package/examples/atari7800/templates/puzzle.c +1091 -148
- package/examples/atari7800/templates/racing.c +952 -124
- package/examples/atari7800/templates/shmup.c +812 -134
- package/examples/atari7800/templates/sports.c +820 -184
- package/examples/c64/templates/platformer.c +879 -164
- package/examples/c64/templates/puzzle.c +855 -178
- package/examples/c64/templates/racing.c +873 -97
- package/examples/c64/templates/shmup.c +757 -161
- package/examples/c64/templates/sports.c +755 -100
- package/examples/gb/templates/platformer.c +841 -179
- package/examples/gb/templates/puzzle.c +986 -246
- package/examples/gb/templates/racing.c +754 -174
- package/examples/gb/templates/shmup.c +673 -175
- package/examples/gb/templates/sports.c +790 -159
- package/examples/gba/templates/platformer.c +626 -165
- package/examples/gba/templates/puzzle.c +519 -269
- package/examples/gba/templates/racing.c +511 -206
- package/examples/gba/templates/shmup.c +564 -179
- package/examples/gba/templates/sports.c +454 -174
- package/examples/gbc/templates/platformer.c +944 -180
- package/examples/gbc/templates/puzzle.c +363 -109
- package/examples/gbc/templates/racing.c +884 -180
- package/examples/gbc/templates/shmup.c +821 -185
- package/examples/gbc/templates/sports.c +870 -162
- package/examples/genesis/templates/platformer.c +747 -129
- package/examples/genesis/templates/puzzle.c +694 -261
- package/examples/genesis/templates/racing.c +726 -203
- package/examples/genesis/templates/shmup.c +535 -142
- package/examples/genesis/templates/sports.c +495 -158
- package/examples/gg/templates/platformer.c +880 -215
- package/examples/gg/templates/puzzle.c +875 -216
- package/examples/gg/templates/racing.c +915 -172
- package/examples/gg/templates/shmup.c +714 -191
- package/examples/gg/templates/sports.c +732 -129
- package/examples/lynx/templates/platformer.c +604 -69
- package/examples/lynx/templates/puzzle.c +498 -158
- package/examples/lynx/templates/racing.c +538 -102
- package/examples/lynx/templates/shmup.c +458 -131
- package/examples/lynx/templates/sports.c +496 -72
- package/examples/msx/platformer/main.c +649 -162
- package/examples/msx/puzzle/main.c +742 -240
- package/examples/msx/racing/main.c +669 -178
- package/examples/msx/shmup/main.c +460 -178
- package/examples/msx/sports/main.c +592 -126
- package/examples/nes/templates/platformer.c +589 -171
- package/examples/nes/templates/puzzle.c +563 -242
- package/examples/nes/templates/racing.c +502 -208
- package/examples/nes/templates/shmup.c +339 -145
- package/examples/nes/templates/sports.c +341 -183
- package/examples/pce/platformer/main.c +874 -205
- package/examples/pce/puzzle/main.c +802 -287
- package/examples/pce/racing/main.c +783 -208
- package/examples/pce/shmup/main.c +638 -212
- package/examples/pce/sports/main.c +586 -169
- package/examples/porting-across-platforms/README.md +1 -1
- package/examples/sms/templates/platformer.c +762 -177
- package/examples/sms/templates/puzzle.c +752 -212
- package/examples/sms/templates/racing.c +808 -145
- package/examples/sms/templates/shmup.c +599 -162
- package/examples/sms/templates/sports.c +630 -122
- package/examples/snes/templates/music_demo.c +7 -0
- package/examples/snes/templates/platformer-data.asm +123 -24
- package/examples/snes/templates/platformer-hdr.asm +57 -0
- package/examples/snes/templates/platformer.c +586 -165
- package/examples/snes/templates/puzzle-data.asm +116 -21
- package/examples/snes/templates/puzzle-hdr.asm +57 -0
- package/examples/snes/templates/puzzle.c +614 -235
- package/examples/snes/templates/racing-data.asm +390 -32
- package/examples/snes/templates/racing-hdr.asm +57 -0
- package/examples/snes/templates/racing.c +807 -196
- package/examples/snes/templates/shmup-data.asm +87 -29
- package/examples/snes/templates/shmup-hdr.asm +57 -0
- package/examples/snes/templates/shmup.c +459 -198
- package/examples/snes/templates/sports-data.asm +48 -2
- package/examples/snes/templates/sports-hdr.asm +57 -0
- package/examples/snes/templates/sports.c +414 -163
- package/package.json +12 -12
- package/src/cores/wasm/bluemsx_libretro.js +1 -1
- package/src/cores/wasm/bluemsx_libretro.wasm +0 -0
- package/src/cores/wasm/fceumm_libretro.js +1 -1
- package/src/cores/wasm/fceumm_libretro.wasm +0 -0
- package/src/cores/wasm/gambatte_libretro.js +1 -1
- package/src/cores/wasm/gambatte_libretro.wasm +0 -0
- package/src/cores/wasm/geargrafx_libretro.js +1 -1
- package/src/cores/wasm/geargrafx_libretro.wasm +0 -0
- package/src/cores/wasm/genesis_plus_gx_libretro.js +1 -1
- package/src/cores/wasm/genesis_plus_gx_libretro.wasm +0 -0
- package/src/cores/wasm/handy_libretro.js +1 -1
- package/src/cores/wasm/handy_libretro.wasm +0 -0
- package/src/cores/wasm/mgba_libretro.js +1 -1
- package/src/cores/wasm/mgba_libretro.wasm +0 -0
- package/src/cores/wasm/prosystem_libretro.js +1 -1
- package/src/cores/wasm/prosystem_libretro.wasm +0 -0
- package/src/cores/wasm/snes9x_libretro.js +1 -1
- package/src/cores/wasm/snes9x_libretro.wasm +0 -0
- package/src/cores/wasm/stella2014_libretro.js +1 -1
- package/src/cores/wasm/stella2014_libretro.wasm +0 -0
- package/src/cores/wasm/vice_x64_libretro.js +1 -1
- package/src/cores/wasm/vice_x64_libretro.wasm +0 -0
- package/src/host/LibretroHost.js +84 -8
- package/src/http/tool-registry.js +11 -11
- package/src/mcp/tools/cheats.js +2 -1
- package/src/mcp/tools/frame.js +3 -2
- package/src/mcp/tools/index.js +3 -3
- package/src/mcp/tools/input.js +5 -4
- package/src/mcp/tools/lifecycle.js +6 -4
- package/src/mcp/tools/memory.js +131 -24
- package/src/mcp/tools/platform-docs.js +1 -1
- package/src/mcp/tools/preview-tile.js +6 -2
- package/src/mcp/tools/project.js +1098 -130
- package/src/mcp/tools/record.js +6 -7
- package/src/mcp/tools/rom-id.js +5 -1
- package/src/mcp/tools/run-until.js +12 -4
- package/src/mcp/tools/snippets.js +6 -6
- package/src/mcp/tools/sprite-pipeline.js +14 -2
- package/src/mcp/tools/state.js +2 -1
- package/src/mcp/tools/tile-inspect.js +8 -1
- package/src/mcp/tools/toolchain.js +12 -1
- package/src/mcp/tools/watch-memory.js +53 -10
- package/src/observer/bus.js +73 -0
- package/src/observer/livestream.html +4 -2
- package/src/observer/tool-wrap.js +17 -14
- package/src/platforms/_guides/ROMHACKING_PLAYBOOK.md +32 -3
- package/src/platforms/atari7800/MENTAL_MODEL.md +5 -5
- package/src/platforms/atari7800/TROUBLESHOOTING.md +5 -5
- package/src/platforms/c64/MENTAL_MODEL.md +11 -4
- package/src/platforms/c64/TROUBLESHOOTING.md +13 -0
- package/src/platforms/gb/MENTAL_MODEL.md +3 -3
- package/src/platforms/gb/TROUBLESHOOTING.md +61 -8
- package/src/platforms/gb/lib/c/README.md +10 -11
- package/src/platforms/gb/lib/c/gb_crt0.s +27 -3
- package/src/platforms/gb/lib/c/patch-header.js +13 -3
- package/src/platforms/gba/MENTAL_MODEL.md +4 -4
- package/src/platforms/gba/TROUBLESHOOTING.md +3 -3
- package/src/platforms/gba/lib/c/gba_sfx.c +40 -0
- package/src/platforms/gba/lib/c/gba_sfx.h +10 -0
- package/src/platforms/gbc/MENTAL_MODEL.md +4 -4
- package/src/platforms/gbc/TROUBLESHOOTING.md +4 -4
- package/src/platforms/gbc/UPSTREAM_SOURCES.md +1 -1
- package/src/platforms/gbc/lib/c/README.md +10 -11
- package/src/platforms/gbc/lib/c/gb_crt0.s +26 -3
- package/src/platforms/gbc/lib/c/patch-header.js +13 -3
- package/src/platforms/genesis/MENTAL_MODEL.md +3 -3
- package/src/platforms/genesis/TROUBLESHOOTING.md +2 -2
- package/src/platforms/gg/MENTAL_MODEL.md +4 -4
- package/src/platforms/gg/TROUBLESHOOTING.md +3 -3
- package/src/platforms/gg/UPSTREAM_SOURCES.md +1 -1
- package/src/platforms/gg/lib/c/joypad_read.c +29 -0
- package/src/platforms/lynx/MENTAL_MODEL.md +1 -1
- package/src/platforms/lynx/TROUBLESHOOTING.md +3 -3
- package/src/platforms/msx/MENTAL_MODEL.md +5 -5
- package/src/platforms/msx/TROUBLESHOOTING.md +2 -2
- package/src/platforms/msx/lib/c/msx_hw.h +1 -0
- package/src/platforms/msx/lib/c/msx_vdp.c +25 -0
- package/src/platforms/nes/MENTAL_MODEL.md +2 -2
- package/src/platforms/nes/lib/c/nes_runtime.c +149 -34
- package/src/platforms/nes/lib/c/nes_runtime.h +34 -1
- package/src/platforms/pce/MENTAL_MODEL.md +5 -5
- package/src/platforms/pce/TROUBLESHOOTING.md +1 -1
- package/src/platforms/pce/lib/c/pce_hw.h +11 -0
- package/src/platforms/pce/lib/c/pce_video.c +32 -0
- package/src/platforms/sms/MENTAL_MODEL.md +6 -6
- package/src/platforms/snes/MENTAL_MODEL.md +2 -2
- package/src/platforms/snes/TROUBLESHOOTING.md +40 -1
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +13 -8
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.crt0.s +58 -5
- package/src/toolchains/cc65/presets/nes/chr-rom.crt0.s +52 -3
- package/src/toolchains/cc65/presets/pce/rom32k.cfg +52 -0
- package/src/toolchains/index.js +27 -11
|
@@ -1,7 +1,53 @@
|
|
|
1
|
-
; ── sports-data.asm —
|
|
2
|
-
;
|
|
1
|
+
; ── sports-data.asm — NET SURGE's assembly half ──────────────────────────────
|
|
2
|
+
;
|
|
3
|
+
; What lives here (and why it can't live in sports.c):
|
|
4
|
+
; 1. sram_read16/sram_write16 — battery SRAM accessors. SRAM sits at
|
|
5
|
+
; $70:0000 (declared in hdr.asm — see sports-hdr.asm), reachable only
|
|
6
|
+
; with long (24-bit) addressing, which tcc C pointers don't emit.
|
|
7
|
+
; 2. Font + sprite + wallpaper tiles (rodata). One sprite tile: a solid
|
|
8
|
+
; 8×8 white block reused for paddles + ball.
|
|
9
|
+
;
|
|
10
|
+
; Section names must stay unique vs snes_sfx_data.asm (also linked in).
|
|
3
11
|
.include "hdr.asm"
|
|
4
12
|
|
|
13
|
+
.SECTION ".sports_asm" SUPERFREE
|
|
14
|
+
|
|
15
|
+
; ── HARDWARE IDIOM (load-bearing) — battery SRAM accessors ──────────────────
|
|
16
|
+
; SRAM is mapped at $70:0000 (LoROM, SRAMSIZE $01 in sports-hdr.asm = 2 KB).
|
|
17
|
+
; Long addressing only — there is no SRAM mirror in the program banks, which
|
|
18
|
+
; is why these are asm and not C. tcc calling convention: u16 arg at 5,s
|
|
19
|
+
; (after the 4-byte rtl frame), second arg at 7,s; u16 return in tcc__r0.
|
|
20
|
+
|
|
21
|
+
; u16 sram_read16(u16 offset)
|
|
22
|
+
sram_read16:
|
|
23
|
+
php
|
|
24
|
+
rep #$30
|
|
25
|
+
lda 5,s ; offset
|
|
26
|
+
tax
|
|
27
|
+
sep #$20
|
|
28
|
+
lda.l $700000,x
|
|
29
|
+
sta.w tcc__r0
|
|
30
|
+
lda.l $700001,x
|
|
31
|
+
sta.w tcc__r0 + 1
|
|
32
|
+
plp
|
|
33
|
+
rtl
|
|
34
|
+
|
|
35
|
+
; void sram_write16(u16 offset, u16 value)
|
|
36
|
+
sram_write16:
|
|
37
|
+
php
|
|
38
|
+
rep #$30
|
|
39
|
+
lda 5,s ; offset
|
|
40
|
+
tax
|
|
41
|
+
lda 7,s ; value
|
|
42
|
+
sep #$20
|
|
43
|
+
sta.l $700000,x ; low byte
|
|
44
|
+
xba
|
|
45
|
+
sta.l $700001,x ; high byte
|
|
46
|
+
plp
|
|
47
|
+
rtl
|
|
48
|
+
|
|
49
|
+
.ENDS
|
|
50
|
+
|
|
5
51
|
.section ".rodata1" superfree
|
|
6
52
|
|
|
7
53
|
tilfont:
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
;==LoRom== sports hdr.asm — PROJECT OVERRIDE of PVSnesLib's stock header
|
|
2
|
+
;
|
|
3
|
+
; Why this file exists: the stock include/hdr.asm declares CARTRIDGETYPE $00
|
|
4
|
+
; (ROM only) and SRAMSIZE $00. The SNES cart header is the ONLY place battery
|
|
5
|
+
; SRAM gets declared — snes9x (and real flash carts) size the save RAM from
|
|
6
|
+
; these two bytes. Delete this file and the build still succeeds, the game
|
|
7
|
+
; still runs, and saves silently stop existing: sram_read16/sram_write16 hit
|
|
8
|
+
; open bus at $70:0000 and the best win streak never survives a power cycle.
|
|
9
|
+
;
|
|
10
|
+
; Everything except CARTRIDGETYPE/SRAMSIZE/NAME is byte-identical to the
|
|
11
|
+
; stock header — the memory map and vectors MUST match what PVSnesLib's
|
|
12
|
+
; crt0/libs were assembled against, or wlalink places sections inconsistently.
|
|
13
|
+
|
|
14
|
+
.MEMORYMAP ; Begin describing the system architecture.
|
|
15
|
+
SLOTSIZE $8000 ; ROM slot is $8000 bytes (LoROM 32K banks).
|
|
16
|
+
DEFAULTSLOT 0
|
|
17
|
+
SLOT 0 $8000 ; ROM
|
|
18
|
+
SLOT 1 $0 $2000 ; low WRAM mirror (tcc registers live at $0000)
|
|
19
|
+
SLOT 2 $2000 $E000 ; WRAM $2000-$FFFF
|
|
20
|
+
SLOT 3 $0 $10000 ; bank $7F WRAM (tcc C globals)
|
|
21
|
+
.ENDME
|
|
22
|
+
|
|
23
|
+
.ROMBANKSIZE $8000 ; 32 KByte ROM banks
|
|
24
|
+
.ROMBANKS 8 ; 2 Mbits (256 KB) — matches PVSnesLib stock
|
|
25
|
+
|
|
26
|
+
.SNESHEADER
|
|
27
|
+
ID "SNES"
|
|
28
|
+
|
|
29
|
+
NAME "NET SURGE " ; Program Title - 21 bytes, space-padded.
|
|
30
|
+
; "123456789012345678901"
|
|
31
|
+
|
|
32
|
+
SLOWROM
|
|
33
|
+
LOROM
|
|
34
|
+
|
|
35
|
+
CARTRIDGETYPE $02 ; $02 = ROM + SRAM + battery ← THE SAVE SWITCH
|
|
36
|
+
ROMSIZE $08 ; $08 = 2 Mbits
|
|
37
|
+
SRAMSIZE $01 ; $01 = 2 KB SRAM, mapped at $70:0000-$07FF
|
|
38
|
+
COUNTRY $01 ; $01 = U.S.
|
|
39
|
+
LICENSEECODE $00
|
|
40
|
+
VERSION $00
|
|
41
|
+
.ENDSNES
|
|
42
|
+
|
|
43
|
+
.SNESNATIVEVECTOR ; Native Mode interrupt vector table
|
|
44
|
+
COP EmptyHandler
|
|
45
|
+
BRK EmptyHandler
|
|
46
|
+
ABORT EmptyHandler
|
|
47
|
+
NMI VBlank ; PVSnesLib's vblank.asm handler
|
|
48
|
+
IRQ EmptyHandler
|
|
49
|
+
.ENDNATIVEVECTOR
|
|
50
|
+
|
|
51
|
+
.SNESEMUVECTOR ; Emulation Mode interrupt vector table
|
|
52
|
+
COP EmptyHandler
|
|
53
|
+
ABORT EmptyHandler
|
|
54
|
+
NMI EmptyHandler
|
|
55
|
+
RESET tcc__start ; PVSnesLib crt0 entry
|
|
56
|
+
IRQBRK EmptyHandler
|
|
57
|
+
.ENDEMUVECTOR
|