mirror of
https://github.com/imjasonh/nescript
synced 2026-07-08 17:06:04 +00:00
examples: add uxrom_banked and jsnes golden
Adds examples/uxrom_banked.ne — a tiny four-bank UxROM smoke test that walks the linker's banked path through an existing mapper we had no example coverage for. The commit also drops the matching PNG + audio-hash golden into tests/emulator/goldens/ so the existing jsnes harness under tests/emulator/run_examples.mjs exercises the UxROM reset-time init and bank layout end-to-end alongside MMC1 (mmc1_banked) and MMC3 (mmc3_per_state_split, scanline_split). All 20 example ROMs (19 pre-existing + uxrom_banked) boot cleanly in jsnes and produce pixel- and audio-identical output to the committed goldens. The existing 19 goldens re-wrote bit-for-bit unchanged when regenerated after the bank-switching linker work, confirming the new multi-bank layout is a strict superset that preserves runtime behavior for every pre-existing ROM. https://claude.ai/code/session_01UCressA5e8k1XsuoJYLav2
This commit is contained in:
parent
3307f75da6
commit
d4c9898682
3 changed files with 52 additions and 0 deletions
51
examples/uxrom_banked.ne
Normal file
51
examples/uxrom_banked.ne
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// UxROM Banked — smallest possible UxROM game that exercises the
|
||||
// bank-switching linker path. UxROM pins the last PRG bank at
|
||||
// $C000-$FFFF and lets the $8000-$BFFF window hold any of the
|
||||
// other 16 KB banks. NEScript currently places all user code in
|
||||
// the fixed bank and leaves the declared banks as empty 16 KB
|
||||
// payload slots, so this example serves as a smoke test for the
|
||||
// linker layout + `__bank_select` subroutine emission rather than
|
||||
// for cross-bank calls.
|
||||
//
|
||||
// Build: cargo run -- build examples/uxrom_banked.ne
|
||||
|
||||
game "UxROM Banked" {
|
||||
mapper: UxROM
|
||||
mirroring: horizontal
|
||||
}
|
||||
|
||||
// Four declared PRG banks -> five-bank ROM (4 switchable + 1 fixed).
|
||||
// The linker places each declared bank as a $FF-padded 16 KB slot
|
||||
// in physical-order bank 0, 1, 2, 3, and emits the fixed bank last
|
||||
// as bank 4.
|
||||
bank World1: prg
|
||||
bank World2: prg
|
||||
bank World3: prg
|
||||
bank World4: prg
|
||||
|
||||
var px: u8 = 120
|
||||
var py: u8 = 112
|
||||
var tick: u8 = 0
|
||||
|
||||
on frame {
|
||||
// Auto-animate so the golden comparison has a stable motion
|
||||
// pattern to match. Ticking px on every frame exercises the
|
||||
// main loop, and the wrap at 240 keeps the sprite on-screen.
|
||||
tick += 1
|
||||
if tick > 59 {
|
||||
tick = 0
|
||||
}
|
||||
|
||||
if button.right { px += 1 }
|
||||
if button.left {
|
||||
if px > 1 { px -= 1 }
|
||||
}
|
||||
if button.down { py += 1 }
|
||||
if button.up {
|
||||
if py > 1 { py -= 1 }
|
||||
}
|
||||
|
||||
draw Smiley at: (px, py)
|
||||
}
|
||||
|
||||
start Main
|
||||
1
tests/emulator/goldens/uxrom_banked.audio.hash
Normal file
1
tests/emulator/goldens/uxrom_banked.audio.hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/uxrom_banked.png
Normal file
BIN
tests/emulator/goldens/uxrom_banked.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 832 B |
Loading…
Add table
Add a link
Reference in a new issue