Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
416 commits
Select commit Hold shift + click to select a range
69e8a1e
feat(snes-core): add cx4 disintegrate command
chalharu May 28, 2026
fee1a50
feat(snes-core): add cx4 scale rotate commands
chalharu May 28, 2026
b12752f
feat(snes-core): add cx4 bitplane wave command
chalharu May 28, 2026
ff959f6
feat(snes-core): add cx4 transform lines command
chalharu May 28, 2026
e698749
feat(snes-core): add cx4 wireframe commands
chalharu May 28, 2026
98a0ec2
feat(snes-core): add cx4 oam build command
chalharu May 28, 2026
a714032
feat(snes-core): add sa1 arithmetic mmio
chalharu May 28, 2026
32ebb0d
feat(snes-core): add sa1 super mmc mapping
chalharu May 28, 2026
be2fd6e
feat(snes-core): add sa1 bwram write protection
chalharu May 28, 2026
7ddc78f
feat(snes-core): add sa1 variable data reads
chalharu May 28, 2026
31bead3
feat(snes-core): add sa1 normal dma
chalharu May 28, 2026
1ea5d3c
feat(snes-core): add sa1 character conversion dma
chalharu May 28, 2026
e004c92
feat(snes-core): add sa1 character conversion bwram
chalharu May 28, 2026
3cd58d8
feat(snes-core): add sa1 iram write protection
chalharu May 28, 2026
35369fe
feat(snes-core): add sa1 status flags
chalharu May 28, 2026
e56bf3a
feat(snes-core): add sa1 bwram bitmap reads
chalharu May 28, 2026
6224226
feat(snes-core): add sa1 bwram bitmap writes
chalharu May 28, 2026
77346ef
feat(snes-core): add superfx pbr fetch
chalharu May 28, 2026
49a4db0
feat(snes-core): add superfx rom buffer
chalharu May 28, 2026
9451c89
feat(snes-core): gate superfx start on go flag
chalharu May 28, 2026
32bfee2
fix(snes-core): align superfx start semantics
chalharu May 28, 2026
bb5d89d
feat(snes-core): add superfx branch flags
chalharu May 28, 2026
67fa4ee
Merge remote-tracking branch 'origin/master' into copilot/snes-cpu-20…
chalharu May 28, 2026
afc5ad2
feat(snes-core): add superfx direct ram ops
chalharu May 28, 2026
738f963
feat(snes-core): add superfx alu extensions
chalharu May 28, 2026
d7f8312
feat(snes-core): add superfx bitmap modes
chalharu May 28, 2026
e1adf2c
feat(snes-core): add superfx screen height modes
chalharu May 28, 2026
581b79b
feat(snes-core): add superfx cache register
chalharu May 28, 2026
8cc6166
fix(snes-core): map dsp1 register windows
chalharu May 28, 2026
d2748a6
feat(snes-core): add sa1 timer registers
chalharu May 28, 2026
5ba406d
fix(snes-core): correct superfx ram mirror
chalharu May 28, 2026
2ae95de
feat(snes-core): add superfx stop irq flag
chalharu May 28, 2026
a91c22c
feat(snes-core): clear superfx cbr on stop
chalharu May 28, 2026
c5f66ba
feat(snes-core): add superfx move opcode
chalharu May 28, 2026
dbec63a
fix(snes-core): correct superfx moves flags
chalharu May 28, 2026
a6d1d39
fix(snes-core): preserve superfx load flags
chalharu May 28, 2026
44291a4
fix(snes-core): sign extend superfx ibt
chalharu May 28, 2026
6962a20
fix(snes-core): preserve superfx ram load flags
chalharu May 29, 2026
b291838
fix(snes-core): preserve superfx getb flags
chalharu May 29, 2026
8fa130a
fix(snes-core): correct superfx byte op flags
chalharu May 29, 2026
1148fba
fix(snes-core): store superfx direct writes from sreg
chalharu May 29, 2026
9b0ab50
feat(snes-core): distinguish dsp1b version
chalharu May 29, 2026
7200bc6
fix(snes-core): limit dsp1 hirom mmio banks
chalharu May 29, 2026
357650d
fix(snes-core): limit dsp1 lorom mmio banks
chalharu May 29, 2026
fe373a3
fix(snes-core): handle cx4 absent sram
chalharu May 29, 2026
d20d9f2
feat(snes-core): add apu ipl ports
chalharu May 29, 2026
c89659e
feat(snes-core): store apu ipl uploads
chalharu May 29, 2026
55bde44
feat(snes-core): add apu smp io
chalharu May 29, 2026
4132e9c
feat(snes-core): add basic spc700 execution
chalharu May 29, 2026
1a73fba
feat(snes-core): add apu timers
chalharu May 29, 2026
f23818a
feat(snes-core): add spc700 stack calls
chalharu May 29, 2026
b0e2cae
feat(snes-core): add spc700 a alu
chalharu May 29, 2026
ea2661a
feat(snes-core): add spc700 alu addressing
chalharu May 29, 2026
c71d29d
feat(snes-core): add spc700 word ops
chalharu May 29, 2026
f84a2f7
feat(snes-core): add spc700 shift ops
chalharu May 29, 2026
8cf3a0c
feat(snes-core): add msu1 registers
chalharu May 29, 2026
87ba5a2
feat(snes-core): add spc700 indexed mov
chalharu May 29, 2026
4aaff2a
feat(snes-core): add spc700 indirect alu
chalharu May 29, 2026
2c1d7d7
feat(snes-core): add spc700 memory incdec
chalharu May 29, 2026
98b7954
fix(snes-core): correct superfx write-only reads
chalharu May 29, 2026
dedb877
feat(snes-core): add spc700 memory alu
chalharu May 29, 2026
ffa1dc5
feat(snes-core): add spc700 bit ops
chalharu May 29, 2026
959c1c3
feat(snes-core): add spc700 shift memory ops
chalharu May 29, 2026
07f460c
feat(snes-core): add spc700 brk
chalharu May 29, 2026
fcb25dc
feat(snes-core): add spc700 cbne
chalharu May 29, 2026
20ee25e
feat(snes-core): add spc700 ipl reentry
chalharu May 29, 2026
6948f68
feat(snes-core): add spc700 psw control ops
chalharu May 29, 2026
56ccb15
feat(snes-core): add spc700 dbnz
chalharu May 29, 2026
c34dced
feat(snes-core): add spc700 indirect jmp
chalharu May 29, 2026
e149951
feat(snes-core): add spc700 mul ya
chalharu May 29, 2026
dae31bf
fix(snes-core): preserve psw on spc700 pop
chalharu May 29, 2026
38b5cf7
feat(snes-core): add spc700 decimal adjust
chalharu May 29, 2026
da4bd8c
feat(snes-core): add spc700 div ya x
chalharu May 29, 2026
18ff9bd
test(snes-rom): add spctest opcode coverage
chalharu May 29, 2026
07d15be
test(snes-rom): assert msu1 in gsu rom test
chalharu May 29, 2026
2e1d2c5
feat(snes-core): load msu1 data sidecars
chalharu May 29, 2026
40e4e69
feat(snes-core): detect msu1 audio tracks
chalharu May 29, 2026
6eac282
fix(snes-core): advance super fx stop pc once
chalharu May 29, 2026
bed273f
fix(snes-core): gate msu1 registers on sidecars
chalharu May 29, 2026
e621629
fix(snes-core): stream dsp1 raster output
chalharu May 30, 2026
353567c
fix(snes-core): honor superfx register writes
chalharu May 30, 2026
6e30a7f
fix(snes-core): match dsp1 lorom windows
chalharu May 30, 2026
64d125f
feat(snes-core): add spc700 ipl rom overlay
chalharu May 30, 2026
1aeb86a
fix(snes-core): retain spd dspaddr readback
chalharu May 30, 2026
ddd5e94
fix(snes-core): match apu timer enable resets
chalharu May 30, 2026
65470c5
fix(snes-core): mirror spc700 port writes to ram
chalharu May 30, 2026
76705bc
fix(snes-core): match apu timer source clock
chalharu May 30, 2026
5658902
fix(snes-core): stop msu1 data reads at eof
chalharu May 30, 2026
5c745db
refactor(snes-core): add event-driven cycle runner
chalharu May 30, 2026
bf7bd99
test(snes-rom_test): strengthen gsu coverage
chalharu May 30, 2026
01df581
fix(snes-core): refine DSP header detection
chalharu May 30, 2026
546693a
test(snes-rom_test): add apu ram assertions
chalharu May 30, 2026
9f61e46
test(snes-rom_test): add hardware screen hashes
chalharu May 30, 2026
af0d267
test(snes-rom_test): add cpu screen hashes
chalharu May 30, 2026
a10ac55
feat(snes-rom_test): add performance benchmark
chalharu May 30, 2026
83b8338
test(snes-rom_test): complete screen hash coverage
chalharu May 30, 2026
45a5d0b
feat(snes-rom_test): benchmark enhancement cases
chalharu May 30, 2026
16aa4d4
test(snes-rom_test): add sa1 bwram smoke rom
chalharu May 30, 2026
f5aee84
test(snes-rom_test): add cx4 smoke rom
chalharu May 30, 2026
6d8a719
Merge remote-tracking branch 'origin/master' into copilot/snes-cpu-20…
chalharu May 30, 2026
864d14e
test(snes-rom_test): add dsp1 smoke roms
chalharu May 30, 2026
1e96760
test(snes-rom_test): add dsp1 geometry roms
chalharu May 30, 2026
aebcf2f
test(snes): fast-forward idle benchmarks
chalharu May 30, 2026
384a44e
refactor(snes): speed up idle benchmark paths
chalharu May 30, 2026
2926a55
test(snes-rom_test): add apu dsp register smoke
chalharu May 30, 2026
b200168
fix(gui): decouple settings and render snes frames
chalharu May 30, 2026
dd1bcb8
fix(snes): add gui audio and normal bg rendering
chalharu May 30, 2026
30af5b9
Merge remote-tracking branch 'origin/master' into copilot/snes-cpu-20…
chalharu May 31, 2026
d9b930c
fix: resolve build failure after merge of origin/master by updating d…
chalharu May 31, 2026
e46ea72
chore: apply rustfmt
chalharu May 31, 2026
dd11aab
feat(android): AndroidSound: add with_gain_and_filter(source_rate, fi…
chalharu Jun 1, 2026
70470cb
Merge pull request #147 from chalharu/feature/SNES/android-audio-with…
chalharu Jun 1, 2026
44aa0d4
Merge pull request #149 from chalharu/master
chalharu Jun 1, 2026
08b37fb
Merge remote-tracking branch 'origin/master' into feature/snes
chalharu Jun 1, 2026
3a31309
chore: update nerust_snes packages to version 0.1.0-dev
chalharu Jun 1, 2026
269679f
Merge remote-tracking branch 'origin/master' into feature/snes
chalharu Jun 1, 2026
352b4ed
Merge remote-tracking branch 'origin/master' into feature/snes
chalharu Jun 1, 2026
368aebc
Merge remote-tracking branch 'origin/master' into feature/snes
chalharu Jun 2, 2026
3e6cdbe
Add GSU sprite_scaler binary required by GSU_SPRITE_SCALER_PROGRAM
chalharu Jun 2, 2026
48e8caf
Merge pull request #165 from chalharu/fix/gsu-include-sprite_scaler-bin
chalharu Jun 2, 2026
276f3ad
fix(gtk): reload renderer after rom load
chalharu Jun 2, 2026
e757d82
Merge pull request #170 from chalharu/fix/gtk-reload-on-load
chalharu Jun 2, 2026
c081c09
Squashed 'roms/snes/peter-lemon-snes/' content from commit 350b394e
chalharu Jun 2, 2026
ac791b0
Merge commit 'c081c09191ddf54797cac53b6da49b0d0403d39d' as 'roms/snes…
chalharu Jun 2, 2026
b91bb94
feat: add upstream information for peter-lemon-snes
chalharu Jun 2, 2026
e338530
feat: integrate crc64 hasher into the project
chalharu Jun 2, 2026
e31a908
feat: implement Default trait for Crc64Hasher
chalharu Jun 2, 2026
c698be9
fix: update copyright information to chalharu in multiple files
chalharu Jun 3, 2026
2583eea
feat: update render_screen import to use nerust_snes_render directly
chalharu Jun 3, 2026
63c5e32
chore: remove copyright notices from source files
chalharu Jun 3, 2026
063ab14
test: add tests for crc64 function consistency and input changes
chalharu Jun 3, 2026
29a3a3b
chore: remove unnecessary blank line in ConsoleType enum
chalharu Jun 3, 2026
7e18200
refactor: simplify line presentation logic by introducing a reusable …
chalharu Jun 3, 2026
22daa8a
feat: add nerust_crc64_hasher dependency and integrate Crc64Hasher in…
chalharu Jun 3, 2026
5864cee
feat: enhance SNES command logging with CPU cycle count and add new C…
chalharu Jun 3, 2026
fb3a648
Fix SNES RDNMI and SPC700 boot timing
chalharu Jun 4, 2026
14b6fe9
feat: add self-authored CPU test ROMs for various instructions in SNES
chalharu Jun 3, 2026
04203cc
fix: update log level to Info for better visibility and adjust expect…
chalharu Jun 4, 2026
ad4f223
fix: update ROM file names for CPU ROL and ROR test cases
chalharu Jun 4, 2026
ddb178c
fix: reset NMI flag on APU CPU port write
chalharu Jun 4, 2026
29d5112
feat: add SPC700 instruction test ROMs for ADC, AND, EOR, ORA, and SBC
chalharu Jun 4, 2026
4bc20be
fix: clear NMI flag automatically at the end of vblank and update doc…
chalharu Jun 4, 2026
9ed1e3e
feat: implement SMP instruction budget management and add peek functi…
chalharu Jun 4, 2026
afb7ba9
feat: update SMP instruction cycle calculations and add comprehensive…
chalharu Jun 4, 2026
961b16c
fix: refine SMP instruction cycle calculations and improve code reada…
chalharu Jun 5, 2026
07ba6a5
feat: update APU and Bus implementations for improved instruction han…
chalharu Jun 5, 2026
8b8da39
feat: add reset_at_steps to RomCase and implement validation in runner
chalharu Jun 5, 2026
36aaab0
feat: enhance GSU interpreter with register handling and add ADC test…
chalharu Jun 5, 2026
7652a76
style: format code for improved readability in Apu and Bus implementa…
chalharu Jun 5, 2026
b766006
fix: correct branch condition handling and improve register iteration…
chalharu Jun 5, 2026
077c3ba
fix: simplify condition checks for reset steps in RomCase and runner
chalharu Jun 5, 2026
6064527
style: improve code formatting for clarity in Apu, RomCase, and runne…
chalharu Jun 5, 2026
fb02f95
feat: add Peter Lemon's GSU tests for various instructions and flag c…
chalharu Jun 5, 2026
94cbf5f
feat: add Peter Lemon's GSU MERGE test for SuperFX instruction verifi…
chalharu Jun 5, 2026
7a6fc42
feat: add Peter Lemon's GSU tests for SuperFX logical operations and …
chalharu Jun 5, 2026
7e352e7
feat: update GsuInterpreter to set register and handle carry flag in …
chalharu Jun 6, 2026
f88c0f0
feat: update GsuInterpreter to refine opcode handling and improve ari…
chalharu Jun 6, 2026
12fe2e9
feat: improve multiplication operations in GsuInterpreter by using si…
chalharu Jun 6, 2026
af01c50
feat: enhance GsuInterpreter with caching mechanism for improved perf…
chalharu Jun 6, 2026
b6baf12
feat: enhance GsuInterpreter with pending branch handling and improve…
chalharu Jun 7, 2026
cf29177
feat: add new GSU tests for 2BPP polygon fill and line rendering
chalharu Jun 7, 2026
8b6612c
feat: update DMA execution logic and initialize source in GsuInterpreter
chalharu Jun 7, 2026
7c3115e
feat: add Peter Lemon's GSU 2BPP plot line and pixel tests for 256x16…
chalharu Jun 7, 2026
5c60ec2
feat: refactor GsuInterpreter to use read_alu_source for register acc…
chalharu Jun 8, 2026
631e61f
feat: add Peter Lemon's PPU tests for 2BPP, 4BPP, and 8BPP rendering …
chalharu Jun 8, 2026
0b0f476
fix(snes): correct 65C816 absolute addressing cycle counts and add de…
chalharu Jun 8, 2026
6ef4eab
fix(gui): replace unnecessary clone in test assertions with slice::fr…
chalharu Jun 8, 2026
8b9b439
Merge remote-tracking branch 'origin/master' into feature/snes
chalharu Jun 8, 2026
75aea8b
feat(snes): implement PPU interlace mode and Mode 5/6 rendering
chalharu Jun 9, 2026
b75070f
fix(snes): prevent multiplication overflow in tilemap quadrant calcul…
chalharu Jun 9, 2026
540888f
fix(snes): implement bsnes-standard bit-replication color conversion …
chalharu Jun 9, 2026
6cb28d8
fix(snes): correct color window behavior when both windows disabled
chalharu Jun 9, 2026
66119e8
feat(snes): implement subscreen rendering and per-pixel 5-bit color math
chalharu Jun 9, 2026
6c000cf
fix(snes): correct CGWSEL color math encoding for subscreen blending
chalharu Jun 9, 2026
ee27703
fix(snes): update bitflags dependency to version 2.12.1
chalharu Jun 9, 2026
636971b
fix(render): propagate dynamic resolution to RenderedScreen struct
chalharu Jun 9, 2026
f6a3000
style: format code for improved readability in rendering functions
chalharu Jun 9, 2026
bae127b
refactor(backdrop): remove unused render_current_backdrop function
chalharu Jun 9, 2026
1614d00
fix(snes): remove width_ratio pixel doubling for Mode 5/6 native 512p…
chalharu Jun 9, 2026
bfc48ff
chore: remove unused SCREEN_WIDTH import warnings
chalharu Jun 9, 2026
6e1f354
fix(snes): restore VISIBLE_BG_Y_OFFSET to 1
chalharu Jun 9, 2026
7bda467
fix(snes): remove VISIBLE_BG_Y_OFFSET per SNES specification
chalharu Jun 9, 2026
2766871
test(snes): regolden bgmap expected hashes for VOFFS=0 rendering
chalharu Jun 9, 2026
1424986
test(snes): update expected hashes from reference PNG files using CRC…
chalharu Jun 9, 2026
c8ab2fe
refactor: remove VISIBLE_BG_Y_OFFSET constant
chalharu Jun 9, 2026
69613e3
feat(snes): add reference_png support for test assertions
chalharu Jun 9, 2026
eedbaba
test: replace expected_screen_hash with reference_png for all Peter L…
chalharu Jun 9, 2026
7268530
fix(snes): restrict reference_png to PPU tests, fix early return when…
chalharu Jun 9, 2026
90ed548
fix(snes): restore original early return for TM=0
chalharu Jun 9, 2026
6b79998
chore: update code structure for improved readability and maintainabi…
chalharu Jun 9, 2026
a592493
fix(snes): account for PPU dummy scanline 0 vertical offset
chalharu Jun 9, 2026
18f3122
Merge remote-tracking branch 'origin/feature/snes' into feature/snes
chalharu Jun 9, 2026
2044b38
fix(snes): use round(channel*255/31) LUT for 5-bit to 8-bit color con…
chalharu Jun 9, 2026
a2be766
Revert "fix(snes): use round(channel*255/31) LUT for 5-bit to 8-bit c…
chalharu Jun 9, 2026
0d0c24a
fix(snes): update reference_png to expected_screen_hash in CPU test c…
chalharu Jun 9, 2026
160ff71
Merge remote-tracking branch 'origin/feature/snes' into feature/snes
chalharu Jun 9, 2026
f5df3d9
fix(gsu): reset implicit register to R0 after every ALU operation
chalharu Jun 9, 2026
31b1222
fix(render): apply per-scanline forced blanking after compositing
chalharu Jun 9, 2026
c643cdb
Revert "fix(render): apply per-scanline forced blanking after composi…
chalharu Jun 9, 2026
e62d04d
Reapply "fix(render): apply per-scanline forced blanking after compos…
chalharu Jun 9, 2026
0e2b10b
fix(render): treat palette index 0 as visible color in 8bpp mode
chalharu Jun 9, 2026
8c2147c
feat(tests): add additional PPU BG Map tests and Hello World verifica…
chalharu Jun 9, 2026
64febe9
fix(render): correct tile height for Mode 5/6 (16x8 tiles)
chalharu Jun 9, 2026
3c2a173
feat(tests): add MSU-1 video and input tests for Peter Lemon's SNES g…
chalharu Jun 10, 2026
d2e847a
fix(tests): correct reference PNG filenames for HDMA tests
chalharu Jun 10, 2026
97e7c86
fix(tests): update reference PNG to expected screen hash for Mode7 Pe…
chalharu Jun 10, 2026
1c6829a
fix(mode7): do not treat pixel value 0 as transparent
chalharu Jun 10, 2026
aeed407
fix(render): correct BG layer priority order (BG4→BG3→BG2→BG1)
chalharu Jun 10, 2026
411dcd6
feat(render): add TMW window masking for BG layers
chalharu Jun 10, 2026
b912aa8
fix(render): correct window range and inverted-window handling
chalharu Jun 10, 2026
d2fa215
wip: mode7 + window fixes
chalharu Jun 10, 2026
483425b
fix(render): correct window inverted range and inside/outside mode
chalharu Jun 10, 2026
ac689c0
feat(render): add mosaic effect support
chalharu Jun 10, 2026
d26dc03
fix(render): use current INIDISP when HDMA doesn't target it
chalharu Jun 10, 2026
659c43d
cleanup: revert backdrop early-return change, remove dead code
chalharu Jun 10, 2026
130907c
fix(render): correct backdrop INIDISP/CGRAM capture for scanline 0
chalharu Jun 10, 2026
8ea77af
fix(render): handle stale scanline 0 backdrop with CGRAM HDMA flag
chalharu Jun 10, 2026
aeb22bd
revert mode7 vram and +1 changes, both were already correct
chalharu Jun 10, 2026
539586b
fix(render): implement Mode 5 pixel interleaving for 512px width
chalharu Jun 10, 2026
98e83c5
fix(backdrop): extend CGRAM HDMA fallback to all scanline 0 cases
chalharu Jun 10, 2026
858d90e
fix(mode7): implement EXTBG 3bpp pixel masking
chalharu Jun 10, 2026
7fc10df
fix(mode7): implement correct M7SEL repeat/out-of-bounds per bsnes
chalharu Jun 10, 2026
f687d3b
fix(mode7): implement bsnes-style two-step coordinate transform
chalharu Jun 10, 2026
ef47660
fix(render): add pseudo-hires (SETINI bit 3) support for 512px width
chalharu Jun 10, 2026
17d32d4
fix(test): handle paletted 4-bit PNGs in load_png_rgba
chalharu Jun 10, 2026
660aac5
fix(test): use actual PNG pitch in pixel comparison instead of render…
chalharu Jun 10, 2026
9ff680e
feat(test): add 7z decompression support for .msu.7z MSU-1 data sidecars
chalharu Jun 10, 2026
198fb3b
fix(core): prevent HDMA line counter underflow on zero-counter channels
chalharu Jun 10, 2026
42ca27c
fix(mode7): implement EXTBG BG2 overlay with bit-5 enable logic
chalharu Jun 10, 2026
ff21808
fix(render): correct W12SEL=11 interpretation to mask outside per bsnes
chalharu Jun 10, 2026
a2716e8
fix(render): correct W12SEL=11 interpretation - mask outside for non-…
chalharu Jun 10, 2026
c9142a2
fix(mode7): implement 10-bit sign extension for HOFS/VOFS, remove +1 …
chalharu Jun 10, 2026
83339fb
fix(obj): remove interlace +1 hack, use same logical Y for both fields
chalharu Jun 10, 2026
0425854
docs(render): document presented_y+1 as VBlank tile prefetch compensa…
chalharu Jun 10, 2026
6e0108e
fix(render): implement scanline-0 pre-render skip, remove bg_y +1 hack
chalharu Jun 10, 2026
09b9dd7
fix(snes): interlace rendering fixes - OBJ field filtering, sprite co…
chalharu Jun 10, 2026
993cd0c
fix(snes): render sub screen for Mode 5/6 interleaving regardless of …
chalharu Jun 10, 2026
b96d9d7
fix(render): simplify high-res mode parameter in render_screen function
chalharu Jun 10, 2026
f0b18dd
fix(snes): Mode 5/6 always 16-wide; size bit controls tile height only
chalharu Jun 10, 2026
ad7636e
fix(snes): correct BGMODE tile size bit mask and Mode 5 CHR stride
chalharu Jun 10, 2026
96a48fd
Revert "fix(snes): correct BGMODE tile size bit mask and Mode 5 CHR s…
chalharu Jun 10, 2026
c8c1e60
fix(snes): swap main/sub pixel assignment and correct hofs_extra for …
chalharu Jun 10, 2026
7a84599
fix(snes): Mode 5 main/sub selection combines pseudo-512 x interlace
chalharu Jun 10, 2026
fb443b1
fix(snes): interlace main/sub selection uses screen_y only, not screen_x
chalharu Jun 10, 2026
a3a4fb5
fix(snes): remove height_ratio from bg1 rendering - each output line …
chalharu Jun 10, 2026
3ed3dec
fix(snes): separate interlace (screen_y) vs pseudo-512 (screen_x) mai…
chalharu Jun 10, 2026
9c50e4b
fix(snes): restore +1 pre-fetch compensation for all modes including …
chalharu Jun 11, 2026
3b56ada
fix(snes): set hofs_extra=0 for main screen in interlace mode
chalharu Jun 11, 2026
d018fea
fix(snes): remove height_ratio from bg1 rendering (each output scanli…
chalharu Jun 11, 2026
4ea455e
fix(snes): conditional field_ratio for interlace mode only
chalharu Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/linter-service.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# yamllint disable rule:document-start
linters:
cargo-coupling:
min_grade: C
max_critical: 0
max_circular: 0
68 changes: 65 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,12 @@ members = [
"sound/openal",
"sound/filter",
"sound/traits",
"snes/core",
"snes/render",
"snes/rom_test",
"sound/android",
"timer",
"util/crc64_hasher",
]
default-members = ["core", "persistence", "console"]

Expand Down Expand Up @@ -88,6 +92,7 @@ nerust_contract_persistence = { path = "contract/persistence" }
nerust_contract_rom = { path = "contract/rom" }
nerust_contract_settings = { path = "contract/settings" }
nerust_core = { path = "core" }
nerust_crc64_hasher = { path = "util/crc64_hasher" }
nerust_gui_runtime = { path = "gui/shared/runtime" }
nerust_gui_shell = { path = "gui/shared/shell" }
nerust_gui_session = { path = "gui/shared/session" }
Expand All @@ -107,6 +112,9 @@ nerust_screen_physical = { path = "screen/physical" }
nerust_screen_rgb = { path = "screen/rgb" }
nerust_screen_wgpu = { path = "screen/wgpu" }
nerust_screen_video = { path = "screen/video" }
nerust_snes_core = { path = "snes/core" }
nerust_snes_render = { path = "snes/render" }
nerust_snes_rom_test = { path = "snes/rom_test" }
nerust_serialize = { path = "serialize" }
nerust_sound_openal = { path = "sound/openal" }
nerust_sound_android = { path = "sound/android" }
Expand All @@ -123,6 +131,7 @@ serde = { version = "=1.0.228", default-features = false }
serde_bytes = { version = "=0.11.19" }
serde_derive = { version = "=1.0.228", default-features = false }
serde_yaml = { version = "=0.9.34" }
sevenz-rust2 = { version = "=0.21.0", default-features = false }
shared_library = { version = "=0.1.9" }
simple_logger = { version = "=5.2.0" }
strum = { version = "=0.28.0" }
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!---
Copyright (c) 2018 Mitsuharu Seki
Copyright (c) 2018 chalharu

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
Expand Down
6 changes: 0 additions & 6 deletions backend/opengl/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use nerust_console::video::VideoRenderProfile;
use nerust_screen_opengl::GlView;
use std::os::raw::c_void;
Expand Down
6 changes: 0 additions & 6 deletions backend/wgpu/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use nerust_console::video::VideoRenderProfile;
use nerust_screen_video::{VideoFrameFormat, VideoFrameSpec, VideoPresentation};
use nerust_screen_wgpu::renderer::{
Expand Down
6 changes: 0 additions & 6 deletions cartridge/data/src/ines.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use super::{CartridgeParseError, cartridge_data, validate_mirror_mode};
use nerust_contract_rom::RomFormat;
use nerust_core::cartridge_data_parts::CartridgeDataParts;
Expand Down
6 changes: 0 additions & 6 deletions cartridge/data/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

mod ines;
mod nes20;

Expand Down
6 changes: 0 additions & 6 deletions cartridge/data/src/nes20.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use super::{CartridgeParseError, cartridge_data, validate_mirror_mode};
use nerust_contract_rom::RomFormat;
use nerust_core::cartridge_data_parts::CartridgeDataParts;
Expand Down
2 changes: 1 addition & 1 deletion console/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ edition.workspace = true
rust-version.workspace = true

[dependencies]
crc.workspace = true
log.workspace = true
nerust_cartridge_data.workspace = true
nerust_contract_controller_runtime.workspace = true
nerust_contract_options.workspace = true
nerust_contract_persistence.workspace = true
nerust_contract_rom.workspace = true
nerust_core.workspace = true
nerust_crc64_hasher.workspace = true
nerust_input_nes.workspace = true
nerust_screen_buffer.workspace = true
nerust_screen_filter.workspace = true
Expand Down
36 changes: 1 addition & 35 deletions console/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2018 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

pub mod controller;
mod runner;
pub mod state;
Expand All @@ -14,52 +8,24 @@ use self::runner::data::ConsoleData;
use self::runner::metrics::SharedConsoleMetrics;
use self::state::RuntimeStateExport;
use self::video::ConsoleVideo;
use crc::{CRC_64_XZ, Crc, Digest};
use nerust_cartridge_data::parse_cartridge_bytes;
use nerust_contract_controller_runtime::ControllerRuntime;
use nerust_contract_options::{CoreOptions, Mmc3IrqVariant};
use nerust_contract_persistence::CanonicalMediaIdentity;
use nerust_core::Core;
use nerust_core::cartridge_rom::CartridgeData;
use nerust_crc64_hasher::crc64;
use nerust_screen_buffer::screen_buffer::ScreenBuffer;
use nerust_screen_filter::FilterType;
use nerust_screen_logical::LogicalSize;
use nerust_screen_physical::PhysicalSize;
use nerust_sound_traits::{MixerInput, Sound};
use std::hash::Hasher;
use std::sync::mpsc::{Sender, channel};
use std::sync::{Arc, RwLock};
use std::thread;
use std::thread::JoinHandle;
use thiserror::Error;

// The old crc crate exposed this reflected CRC-64/XZ variant as crc64::ECMA.
const CRC64_LEGACY_ECMA: Crc<u64> = Crc::<u64>::new(&CRC_64_XZ);

struct Crc64Hasher(Digest<'static, u64>);

impl Crc64Hasher {
fn new() -> Self {
Self(CRC64_LEGACY_ECMA.digest())
}
}

impl Hasher for Crc64Hasher {
fn write(&mut self, bytes: &[u8]) {
self.0.update(bytes);
}

fn finish(&self) -> u64 {
self.0.clone().finalize()
}
}

fn crc64(bytes: &[u8]) -> u64 {
let mut hasher = Crc64Hasher::new();
hasher.write(bytes);
hasher.finish()
}

fn mmc3_irq_variant_label(value: Option<Mmc3IrqVariant>) -> &'static str {
match value {
Some(Mmc3IrqVariant::Sharp) => "sharp",
Expand Down
3 changes: 2 additions & 1 deletion console/src/runner/runtime.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use super::{ConsoleData, ConsoleRunner};
use crate::{ConsoleError, ConsoleReply, ConsoleRequestResult, Crc64Hasher};
use crate::{ConsoleError, ConsoleReply, ConsoleRequestResult};
use nerust_core::Core;
use nerust_crc64_hasher::Crc64Hasher;
use nerust_sound_traits::{MixerInput, Sound};
use std::hash::{Hash, Hasher};
use std::sync::mpsc::Sender;
Expand Down
9 changes: 9 additions & 0 deletions console/src/video.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ pub struct VideoFrameHandle {
}

impl VideoFrameHandle {
pub fn new(width: u32, height: u32, stride_bytes: usize, bytes: Arc<[u8]>) -> Self {
Self {
width,
height,
stride_bytes,
bytes,
}
}

pub fn bytes(&self) -> &[u8] {
self.bytes.as_ref()
}
Expand Down
6 changes: 0 additions & 6 deletions contract/mirror/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2026 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#[derive(serde_derive::Serialize, serde_derive::Deserialize, Debug, Copy, Clone, PartialEq, Eq)]
pub enum MirrorMode {
Horizontal,
Expand Down
6 changes: 0 additions & 6 deletions contract/options/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2026 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#[derive(
serde_derive::Serialize, serde_derive::Deserialize, Debug, Clone, Copy, PartialEq, Eq, Default,
)]
Expand Down
6 changes: 0 additions & 6 deletions contract/persistence/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2026 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use nerust_contract_options::CoreOptions;
use nerust_contract_rom::RomIdentity;
use nerust_input_schema::SystemId;
Expand Down
6 changes: 0 additions & 6 deletions contract/rom/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
// Copyright (c) 2026 Mitsuharu Seki
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

use nerust_contract_mirror::MirrorMode;

#[derive(serde_derive::Serialize, serde_derive::Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
Expand Down
Loading