mirror of
https://github.com/imjasonh/nescript
synced 2026-07-18 06:36:57 +00:00
compiler: PRNG / edge input / palette fade / AxROM / CNROM / FCEUX labels
Closes seven of the cc65/nesdoug parity gaps catalogued in docs/future-work.md in a single pass. All of the new features are gated on marker labels so programs that don't use them produce byte-identical ROM output (every pre-existing committed .nes file round-trips unchanged). Language / runtime additions: - `rand8()` / `rand16()` / `seed_rand(u16)` intrinsics backed by a 16-bit Galois LFSR (~30 bytes of runtime, ~40 cycles per draw). Reset path seeds state to 0xACE1 so the first draw is useful even without explicit seeding. - `p1.button.a.pressed` / `.released` edge-triggered input via a new ReadInputEdge IR op plus an NMI-side prev-frame snapshot into $07E6/$07E7, gated on the `__edge_input_used` marker. - `set_palette_brightness(level)` builtin mapping levels 0..8 to PPU mask emphasis bytes (`$2001`) for neslib-style screen fades. - `mapper: AxROM` (iNES 7) with automatic 32 KB PRG padding so emulators that enforce mapper-7's 32 KB page size boot cleanly. - `mapper: CNROM` (iNES 3) with a reset-time CHR bank 0 select. - `--fceux-labels <prefix>` CLI flag emitting per-bank `.nl` label files and a `.ram.nl` file for FCEUX's debugger. Tests + examples: - Five new example programs with committed .nes ROMs and pixel+audio goldens: prng_demo, edge_input_demo, palette_brightness_demo, axrom_simple, cnrom_simple. - Seven integration tests covering JSR emission, the omitted-when-unused invariant, the NMI prev-input snapshot, the correct mapper numbers for AxROM/CNROM, and negative tests for unknown button names and bad rand8 arity. - `is_intrinsic()` now runs in expression-position Call paths too, so `var x = rand8(1, 2)` errors at compile time instead of silently dropping the extra arguments.
This commit is contained in:
parent
c96135fd86
commit
7507459787
35 changed files with 1272 additions and 22 deletions
1
tests/emulator/goldens/axrom_simple.audio.hash
Normal file
1
tests/emulator/goldens/axrom_simple.audio.hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/axrom_simple.png
Normal file
BIN
tests/emulator/goldens/axrom_simple.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
1
tests/emulator/goldens/cnrom_simple.audio.hash
Normal file
1
tests/emulator/goldens/cnrom_simple.audio.hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/cnrom_simple.png
Normal file
BIN
tests/emulator/goldens/cnrom_simple.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 836 B |
1
tests/emulator/goldens/edge_input_demo.audio.hash
Normal file
1
tests/emulator/goldens/edge_input_demo.audio.hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/edge_input_demo.png
Normal file
BIN
tests/emulator/goldens/edge_input_demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 939 B |
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/palette_brightness_demo.png
Normal file
BIN
tests/emulator/goldens/palette_brightness_demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
1
tests/emulator/goldens/prng_demo.audio.hash
Normal file
1
tests/emulator/goldens/prng_demo.audio.hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
a82b6ff5 132084
|
||||
BIN
tests/emulator/goldens/prng_demo.png
Normal file
BIN
tests/emulator/goldens/prng_demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Loading…
Add table
Add a link
Reference in a new issue