1
0
Fork 0
mirror of https://github.com/imjasonh/nescript synced 2026-07-12 10:39:31 +00:00
nescript/tests/emulator/goldens
Claude 37974611ae
linker: shrink default palette load from inline stores to loop
The reset-time "no user palette" path was emitting 32 unrolled
`LDA #imm / STA $2007` pairs (~170 bytes) to write the built-in
palette. Replace it with the same indirect-loop loader the
user-palette path already uses (runtime::gen_initial_palette_load),
with the 32-byte default palette spliced into PRG under a
`__default_palette` data block. Net saving is ~120 bytes — ~20
bytes of code + 32 bytes of data vs ~170 bytes of unrolled stores.

Delete `Linker::gen_palette_load` (dead after the refactor) and its
unit test. Replace with two tests covering the observable
behaviour: the default palette bytes appear in PRG when no user
palette is declared, and the `__default_palette` label is
suppressed when the user does declare a palette.

Audio goldens flip again for audio_demo, noise_triangle_sfx, and
sfx_pitch_envelope. These are the three audio examples that don't
declare their own palette — shrinking the default-palette load
shifts their audio tick's absolute address by ~120 bytes, which
changes branch page-crossing timing and therefore the exact APU
register write sample offsets. Same class of drift as the
mul/divide gating commit.

https://claude.ai/code/session_016kM6P7PukktBDqTZexrrAN
2026-04-16 21:15:08 +00:00
..
arrays_and_functions.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
arrays_and_functions.png compiler: fix three scoping bugs; war: revert all local/param workarounds 2026-04-15 20:33:41 +00:00
audio_demo.audio.hash linker: shrink default palette load from inline stores to loop 2026-04-16 21:15:08 +00:00
audio_demo.png tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
auto_chr_background.audio.hash assets: auto-generate CHR data from @nametable() PNG sources 2026-04-15 03:29:58 +00:00
auto_chr_background.png assets: auto-generate CHR data from @nametable() PNG sources 2026-04-15 03:29:58 +00:00
bitwise_ops.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
bitwise_ops.png
bouncing_ball.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
bouncing_ball.png
coin_cavern.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
coin_cavern.png
comparisons.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
comparisons.png
friendly_assets.audio.hash runtime: gate __multiply / __divide on usage markers 2026-04-16 21:15:08 +00:00
friendly_assets.png language: pleasant asset syntax for palettes, CHR, bg, sfx, music 2026-04-13 16:09:53 +00:00
function_chain.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
function_chain.png tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
hello_sprite.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
hello_sprite.png
inline_asm_demo.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
inline_asm_demo.png codegen: reuse analyzer's local allocations so inline asm {param} works 2026-04-16 16:03:10 +00:00
logic_ops.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
logic_ops.png tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
loop_break_continue.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
loop_break_continue.png
match_demo.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
match_demo.png
metasprite_demo.audio.hash parser/lowering: declarative metasprites for multi-tile sprite groups 2026-04-15 03:13:30 +00:00
metasprite_demo.png parser/lowering: declarative metasprites for multi-tile sprite groups 2026-04-15 03:13:30 +00:00
mmc1_banked.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
mmc1_banked.png
mmc3_per_state_split.audio.hash main: write the real mapper byte into the iNES header 2026-04-13 01:27:42 +00:00
mmc3_per_state_split.png
nested_structs.audio.hash analyzer/lowering: support nested struct fields and array struct fields 2026-04-15 02:19:49 +00:00
nested_structs.png analyzer/lowering: support nested struct fields and array struct fields 2026-04-15 02:19:49 +00:00
noise_triangle_sfx.audio.hash linker: shrink default palette load from inline stores to loop 2026-04-16 21:15:08 +00:00
noise_triangle_sfx.png audio: triangle and noise sfx channels 2026-04-14 10:42:53 +00:00
palette_and_background.audio.hash palette/background: first-class declarations with reset-time load and runtime swaps 2026-04-13 11:11:33 +00:00
palette_and_background.png palette/background: first-class declarations with reset-time load and runtime swaps 2026-04-13 11:11:33 +00:00
platformer.audio.hash runtime: gate __multiply / __divide on usage markers 2026-04-16 21:15:08 +00:00
platformer.png feat(platformer): add stomp-or-die enemy collisions, live HUD, GameOver state 2026-04-13 20:23:07 +00:00
pong.audio.hash runtime: gate __multiply / __divide on usage markers 2026-04-16 21:15:08 +00:00
pong.png codegen: fuse compare-then-branch to drop boolean materialization 2026-04-16 17:10:02 +00:00
scanline_split.audio.hash main: write the real mapper byte into the iNES header 2026-04-13 01:27:42 +00:00
scanline_split.png
sfx_pitch_envelope.audio.hash linker: shrink default palette load from inline stores to loop 2026-04-16 21:15:08 +00:00
sfx_pitch_envelope.png audio: per-frame pitch envelopes for pulse SFX 2026-04-15 02:54:56 +00:00
sha256.audio.hash examples/sha256: interactive SHA-256 hasher with on-screen keyboard 2026-04-16 14:02:58 +00:00
sha256.png examples/sha256: interactive SHA-256 hasher with on-screen keyboard 2026-04-16 14:02:58 +00:00
sprite_flicker_demo.audio.hash sprite-per-scanline: add cycle_sprites runtime flicker + debug telemetry 2026-04-15 22:07:19 +00:00
sprite_flicker_demo.png sprite-per-scanline: add cycle_sprites runtime flicker + debug telemetry 2026-04-15 22:07:19 +00:00
sprites_and_palettes.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
sprites_and_palettes.png
state_machine.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
state_machine.png
structs_enums_for.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
structs_enums_for.png
two_player.audio.hash tests/emulator: record audio goldens alongside screenshots 2026-04-12 22:33:48 +00:00
two_player.png
uxrom_banked.audio.hash examples: add uxrom_banked and jsnes golden 2026-04-13 02:04:25 +00:00
uxrom_banked.png examples: add uxrom_banked and jsnes golden 2026-04-13 02:04:25 +00:00
uxrom_banked_to_banked.audio.hash codegen: support banked → banked cross-bank function calls 2026-04-15 02:37:19 +00:00
uxrom_banked_to_banked.png codegen: support banked → banked cross-bank function calls 2026-04-15 02:37:19 +00:00
uxrom_user_banked.audio.hash codegen: user code in switchable banks via cross-bank trampolines 2026-04-14 11:41:20 +00:00
uxrom_user_banked.png codegen: user code in switchable banks via cross-bank trampolines 2026-04-14 11:41:20 +00:00
war.audio.hash runtime: gate __multiply / __divide on usage markers 2026-04-16 21:15:08 +00:00
war.png examples: regenerate ROMs, gifs, and goldens after codegen local fix 2026-04-16 16:12:46 +00:00