Emulator tests: Difference between revisions
(→PPU Tests: 240p Test Suite is successor to tvpassfail, letting me collect all older revisions at the bottom) |
TakuikaNinja (talk | contribs) (Fix download links to allpads and Zap Ruder, as they are now handled as GitHub releases.) |
||
(21 intermediate revisions by 5 users not shown) | |||
Line 2: | Line 2: | ||
== Validation ROMs == | == Validation ROMs == | ||
{{mbox | |||
| type = warning | |||
| text = '''Some of the download links below are currently dead, but many have been archived at [https://github.com/christopherpow/nes-test-roms https://github.com/christopherpow/nes-test-roms]'''. | |||
}} | |||
=== CPU Tests === | === CPU Tests === | ||
Line 37: | Line 40: | ||
| [http://blargg.8bitalley.com/parodius/nes-tests/instr_timing.zip instr_timing] || blargg || Tests timing of all instructions, including unofficial ones, page-crossing, etc. || | | [http://blargg.8bitalley.com/parodius/nes-tests/instr_timing.zip instr_timing] || blargg || Tests timing of all instructions, including unofficial ones, page-crossing, etc. || | ||
|- | |- | ||
| [http://nickmass.com/images/nestest.nes nestest] ([https://www.qmtpro.com/~nes/misc/nestest.txt doc]) || kevtris || fairly thoroughly tests CPU operation. This is the best test to start with when getting a CPU emulator working for the first time. Start execution at $C000 and compare execution with a [https://www.qmtpro.com/~nes/misc/nestest.log log] | | [http://nickmass.com/images/nestest.nes nestest] ([https://www.qmtpro.com/~nes/misc/nestest.txt doc]) || kevtris || fairly thoroughly tests CPU operation. This is the best test to start with when getting a CPU emulator working for the first time. Start execution at $C000 and compare execution with a [https://www.qmtpro.com/~nes/misc/nestest.log known good log] (created using [[Nintendulator]], an emulator chosen by the test's author because its CPU was verified to function correctly, aside from some minor details of the power-up state). || | ||
|- | |- | ||
| [//forums.nesdev.org/viewtopic.php?t=13334 ram_retain] || rainwarrior || RAM contents test, for displaying contents of RAM at power-on or after reset || [http://forums.nesdev.org/viewtopic.php?t=13334 thread] | | [//forums.nesdev.org/viewtopic.php?t=13334 ram_retain] || rainwarrior || RAM contents test, for displaying contents of RAM at power-on or after reset || [http://forums.nesdev.org/viewtopic.php?t=13334 thread] | ||
Line 54: | Line 57: | ||
| [http://www.slack.net/~ant/nes-tests/blargg_ppu_tests.zip blargg_ppu_tests_2005.09.15b] || blargg || Miscellaneous PPU tests (palette ram, sprite ram, etc.) || [https://forums.nesdev.org/viewtopic.php?t=567 thread] | | [http://www.slack.net/~ant/nes-tests/blargg_ppu_tests.zip blargg_ppu_tests_2005.09.15b] || blargg || Miscellaneous PPU tests (palette ram, sprite ram, etc.) || [https://forums.nesdev.org/viewtopic.php?t=567 thread] | ||
|- | |- | ||
| [http:// | | [http://www.slack.net/~ant/nes-hacks/full_nes_palette.nes full_nes_palette] || blargg || Displays the full palette with all emphasis states, demonstrates direct PPU color control || [https://forums.nesdev.org/viewtopic.php?p=10658 thread] | ||
|- | |- | ||
| [http:// | | [http://www.slack.net/~ant/old/nes-code/nmi_sync.zip nmi_sync] || blargg || Verifies NMI timing by creating a specific pattern on the screen (NTSC & PAL versions) || [https://forums.nesdev.org/viewtopic.php?t=6589 thread] | ||
|- | |- | ||
| [http://forums.nesdev.org/viewtopic.php?f=2&t=15080 ntsc_torture] || rainwarrior || NTSC Torture Test displays visual patterns to demonstrate NTSC signal artifacts || [http://forums.nesdev.org/viewtopic.php?f=2&t=15080 thread] | | [http://forums.nesdev.org/viewtopic.php?f=2&t=15080 ntsc_torture] || rainwarrior || NTSC Torture Test displays visual patterns to demonstrate NTSC signal artifacts || [http://forums.nesdev.org/viewtopic.php?f=2&t=15080 thread] | ||
Line 74: | Line 77: | ||
| [http://blargg.8bitalley.com/parodius/nes-tests/ppu_sprite_hit.zip ppu_sprite_hit] || blargg || Tests sprite 0 hit behavior and timing || [https://forums.nesdev.org/viewtopic.php?t=626 thread] | | [http://blargg.8bitalley.com/parodius/nes-tests/ppu_sprite_hit.zip ppu_sprite_hit] || blargg || Tests sprite 0 hit behavior and timing || [https://forums.nesdev.org/viewtopic.php?t=626 thread] | ||
|- | |- | ||
| [http:// | | [http://www.slack.net/~ant/nes-tests/sprite_overflow_tests.zip sprite_overflow_tests] || blargg || Tests sprite overflow behavior and timing || [https://forums.nesdev.org/viewtopic.php?t=1308 thread] | ||
|- | |- | ||
| [http://blargg.8bitalley.com/parodius/nes-tests/ppu_vbl_nmi.zip ppu_vbl_nmi] || blargg || Tests the behavior and timing of the NTSC PPU's VBL flag, NMI enable, and NMI interrupt. Timing is tested to an accuracy of one PPU clock. || [https://forums.nesdev.org/viewtopic.php?t=730 thread] | | [http://blargg.8bitalley.com/parodius/nes-tests/ppu_vbl_nmi.zip ppu_vbl_nmi] || blargg || Tests the behavior and timing of the NTSC PPU's VBL flag, NMI enable, and NMI interrupt. Timing is tested to an accuracy of one PPU clock. || [https://forums.nesdev.org/viewtopic.php?t=730 thread] | ||
Line 142: | Line 145: | ||
| [https://forums.nesdev.org/viewtopic.php?f=3&t=13120 31_test] || rainwarrior || Tests for mapper 31 (see thread for ROMs in various PRG sizes) || [https://forums.nesdev.org/viewtopic.php?f=3&t=13120 thread] | | [https://forums.nesdev.org/viewtopic.php?f=3&t=13120 31_test] || rainwarrior || Tests for mapper 31 (see thread for ROMs in various PRG sizes) || [https://forums.nesdev.org/viewtopic.php?f=3&t=13120 thread] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=2253 BNTest] || tepples || Tests how many PRG banks are reachable in BxROM and AxROM. || [https://forums.nesdev.org/viewtopic.php?p=79826#p79826 thread] | | [https://forums.nesdev.org/download/file.php?id=2253 BNTest] || tepples || Tests how many PRG banks are reachable in BxROM and AxROM. || [https://forums.nesdev.org/viewtopic.php?p=79826#p79826 thread] [https://github.com/pinobatch/little-things-nes/tree/master/bntest GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?f=3&t=12085 bxrom_512k_test] || rainwarrior || Similar to the BxROM test in BNTest above. || [https://forums.nesdev.org/viewtopic.php?f=3&t=12085 thread] | | [https://forums.nesdev.org/viewtopic.php?f=3&t=12085 bxrom_512k_test] || rainwarrior || Similar to the BxROM test in BNTest above. || [https://forums.nesdev.org/viewtopic.php?f=3&t=12085 thread] | ||
Line 154: | Line 157: | ||
| [https://forums.nesdev.org/download/file.php?id=2759 fme7acktest-r1] || tepples || Checks some IRQ acknowledgment behiaviors of Sunsoft FME-7 that emulators were getting wrong in 2015. || [https://forums.nesdev.org/viewtopic.php?f=2&t=12436 thread] | | [https://forums.nesdev.org/download/file.php?id=2759 fme7acktest-r1] || tepples || Checks some IRQ acknowledgment behiaviors of Sunsoft FME-7 that emulators were getting wrong in 2015. || [https://forums.nesdev.org/viewtopic.php?f=2&t=12436 thread] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=2800 fme7ramtest-r1] || tepples || Checks how much work | | [https://forums.nesdev.org/download/file.php?id=2800 fme7ramtest-r1] || tepples || Checks how much work RAM the Sunsoft FME-7 can access || [https://forums.nesdev.org/viewtopic.php?f=9&t=12467 thread] [https://github.com/pinobatch/little-things-nes/tree/master/fme7acktest GitHub] | ||
|- | |- | ||
| [https://pineight.com/nes/holydiverbatman-bin-0.01.7z Holy Mapperel] || tepples || Detects over a dozen mappers and verifies that all PRG ROM and CHR ROM banks are reachable, that PRG RAM and CHR RAM can be written and read back without error, and that nametable mirroring, IRQ, and WRAM protection work. (Formerly Holy Diver Batman) || [https://forums.nesdev.org/viewtopic.php?f=22&t=10640 thread] | | [https://pineight.com/nes/holydiverbatman-bin-0.01.7z Holy Mapperel] || tepples || Detects over a dozen mappers and verifies that all PRG ROM and CHR ROM banks are reachable, that PRG RAM and CHR RAM can be written and read back without error, and that nametable mirroring, IRQ, and WRAM protection work. (Formerly Holy Diver Batman) || [https://forums.nesdev.org/viewtopic.php?f=22&t=10640 thread] [https://github.com/pinobatch/holy-mapperel GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=5166 mmc3bigchrram] || tepples || MMC3 test for large 32kb CHR RAM with NES 2.0 headers || [https://forums.nesdev.org/viewtopic.php?f=3&t=13890 thread] | | [https://forums.nesdev.org/download/file.php?id=5166 mmc3bigchrram] || tepples || MMC3 test for large 32kb CHR RAM with NES 2.0 headers || [https://forums.nesdev.org/viewtopic.php?f=3&t=13890 thread] [https://github.com/pinobatch/little-things-nes/tree/master/mmc3bigchrram GitHub] | ||
|- | |- | ||
| [http:// | | [http://slack.net/~ant/old/nes-tests/mmc3_test_2.zip mmc3_test_2] || blargg || MMC3 scanline counter and IRQ generation tests. || | ||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?p=261236#p261236 mmc3irqtest] || N-K || MMC3 scanline IRQ test and $C000 glitch investigation. || [https://forums.nesdev.org/viewtopic.php?p=261236#p261236 thread] | |||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?p=76817#p76817 mmc5test] || Drag || MMC5 scanline counter || [https://forums.nesdev.org/viewtopic.php?t=7653 thread] | | [https://forums.nesdev.org/viewtopic.php?p=76817#p76817 mmc5test] || Drag || MMC5 scanline counter || [https://forums.nesdev.org/viewtopic.php?t=7653 thread] | ||
Line 176: | Line 181: | ||
| rainwarrior || [https://forums.nesdev.org/viewtopic.php?f=3&t=9350&start=90#p153334 34_test] - Mapper 34, Submappers 1 and 2 || [https://forums.nesdev.org/viewtopic.php?f=3&t=9350&start=90#p153334 thread] | | rainwarrior || [https://forums.nesdev.org/viewtopic.php?f=3&t=9350&start=90#p153334 34_test] - Mapper 34, Submappers 1 and 2 || [https://forums.nesdev.org/viewtopic.php?f=3&t=9350&start=90#p153334 thread] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=12185 test28] || tepples || Tests for mapper 28 || [https://forums.nesdev.org/viewtopic.php?p=215345#p215345 thread] | | [https://forums.nesdev.org/download/file.php?id=12185 test28] || tepples || Tests for mapper 28 || [https://forums.nesdev.org/viewtopic.php?p=215345#p215345 thread] [https://github.com/pinobatch/little-things-nes/tree/master/test28 GitHub] | ||
|- | |- | ||
| [http://forums.nesdev.org/download/file.php?id=10017 vrc24test] || AWJ || Detects and tests all VRC 2/4 variants || [http://forums.nesdev.org/viewtopic.php?f=3&t=16009 thread] | | [http://forums.nesdev.org/download/file.php?id=10017 vrc24test] || AWJ || Detects and tests all VRC 2/4 variants || [http://forums.nesdev.org/viewtopic.php?f=3&t=16009 thread] | ||
Line 183: | Line 188: | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?p=244062#p244062 mmc5ramsize] || rainwarrior || MMC5 large PRG-RAM support tests || [https://forums.nesdev.org/viewtopic.php?p=244062#p244062 thread] | | [https://forums.nesdev.org/viewtopic.php?p=244062#p244062 mmc5ramsize] || rainwarrior || MMC5 large PRG-RAM support tests || [https://forums.nesdev.org/viewtopic.php?p=244062#p244062 thread] | ||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?t=23619 mmc1atest] || tepples || Characterizes behavior of [[iNES Mapper 155|MMC1A]] vs. [[iNES Mapper 001|MMC1B]] || [https://forums.nesdev.org/viewtopic.php?t=23619 thread] [https://github.com/pinobatch/little-things-nes/tree/master/mmc1a GitHub] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?p=284414#p284414 n163_soundram] || rainwarrior || Test for [[Namco 163 audio]] sound RAM read-back. || [https://forums.nesdev.org/viewtopic.php?p=284414#p284414 thread] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?p=285135#p285135 n163_soundram_init] || rainwarrior || Test for [[Namco 163 audio]] sound RAM contents at power-on. || [https://forums.nesdev.org/viewtopic.php?p=285135#p285135 thread] | |||
|} | |} | ||
Line 192: | Line 203: | ||
! Resources | ! Resources | ||
|- | |- | ||
| [https://github.com/pinobatch/allpads-nes/ | | [https://github.com/pinobatch/allpads-nes/releases/latest/download/allpads.nes allpads] || tepples || Multiple controller test supporting NES controller, Super NES controller, Famicom microphone, Four Score, Zapper, NES Arkanoid controller, and Super NES Mouse; also has raw 32-bit report mode || [https://forums.nesdev.org/viewtopic.php?f=2&t=12549 thread] [https://github.com/pinobatch/allpads-nes GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=5905 dma_sync_test_v2] || Rahsennor || Tests DMC DMA read corruption || [https://forums.nesdev.org/viewtopic.php?f=2&t=14319 thread] | | [https://forums.nesdev.org/download/file.php?id=5905 dma_sync_test_v2] || Rahsennor || Tests DMC DMA read corruption || [https://forums.nesdev.org/viewtopic.php?f=2&t=14319 thread] | ||
|- | |- | ||
| [https://github.com/christopherpow/nes-test-roms/raw/master/PaddleTest3/PaddleTest.nes PaddleTest3] || 3gengames || Test for the Arkanoid controller || [https://forums.nesdev.org/viewtopic.php?t=7929 thread] | | [https://github.com/christopherpow/nes-test-roms/raw/master/PaddleTest3/PaddleTest.nes PaddleTest3] || 3gengames || Test for the Arkanoid controller || [https://forums.nesdev.org/viewtopic.php?t=7929 thread] | ||
|- | |||
| [https://forums.nesdev.org/download/file.php?id=21972 vaus] || lidnariq || Arkanoid controller 9-bit result test || [https://forums.nesdev.org/viewtopic.php?t=23801 thread] | |||
|- | |- | ||
| [http://blargg.8bitalley.com/parodius/nes-code/read_joy3.zip read_joy3] || blargg || Various NES controllers tests, including read corruption due to DMC DMA || [https://forums.nesdev.org/viewtopic.php?f=2&t=4124&start=0 thread] | | [http://blargg.8bitalley.com/parodius/nes-code/read_joy3.zip read_joy3] || blargg || Various NES controllers tests, including read corruption due to DMC DMA || [https://forums.nesdev.org/viewtopic.php?f=2&t=4124&start=0 thread] | ||
|- | |- | ||
| [https://github.com/pinobatch/zap-ruder/ | | [https://github.com/pinobatch/zap-ruder/releases/latest/download/ruder.nes Zap Ruder] || tepples || Test for the Zapper, including dual wield but not the serial Vs. variant || [https://forums.nesdev.org/viewtopic.php?t=8108 thread] [https://github.com/pinobatch/zap-ruder GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=5356 spadtest-nes] || tepples || Super Nintendo controller test (when connected to a NES) || [https://forums.nesdev.org/viewtopic.php?p=167288 thread] | | [https://forums.nesdev.org/download/file.php?id=5356 spadtest-nes] || tepples || Super Nintendo controller test (when connected to a NES) || [https://forums.nesdev.org/viewtopic.php?p=167288 thread] | ||
|- | |- | ||
| [http://pics.pineight.com/nes/vaus-test-0.02.zip vaus_test] || tepples || Another test for the Arkanoid controller || [https://forums.nesdev.org/viewtopic.php?p=120455 thread] | | [http://pics.pineight.com/nes/vaus-test-0.02.zip vaus_test] || tepples || Another test for the Arkanoid controller || [https://forums.nesdev.org/viewtopic.php?p=120455 thread] [https://github.com/pinobatch/little-things-nes/tree/master/vaus-test GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?p=231608#p231608 mset] || rainwarrior || SNES mouse test || [https://forums.nesdev.org/viewtopic.php?p=231608#p231608 thread] | | [https://forums.nesdev.org/viewtopic.php?p=231608#p231608 mset] || rainwarrior || SNES mouse test || [https://forums.nesdev.org/viewtopic.php?p=231608#p231608 thread] | ||
Line 210: | Line 223: | ||
| [https://forums.nesdev.org/viewtopic.php?f=3&t=18314&p=232358#p232358 mict] || rainwarrior || Famicom microphone test || [https://forums.nesdev.org/viewtopic.php?f=3&t=18314 thread] | | [https://forums.nesdev.org/viewtopic.php?f=3&t=18314&p=232358#p232358 mict] || rainwarrior || Famicom microphone test || [https://forums.nesdev.org/viewtopic.php?f=3&t=18314 thread] | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?f=22&t=18998 Telling LYs?] || tepples || Tests whether input can change on any scanline || [https://forums.nesdev.org/viewtopic.php?f=22&t=18998 thread] | | [https://forums.nesdev.org/viewtopic.php?f=22&t=18998 Telling LYs?] || tepples || Tests whether input can change on any scanline || [https://forums.nesdev.org/viewtopic.php?f=22&t=18998 thread] [https://github.com/pinobatch/little-things-nes/tree/master/tellinglys GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?f=2&t=19752 ctrltest] || rainwarrior || Generic log of 16-bit report on all 5 input data lines. || [https://forums.nesdev.org/viewtopic.php?f=2&t=19752 thread] | | [https://forums.nesdev.org/viewtopic.php?f=2&t=19752 ctrltest] || rainwarrior || Generic log of 16-bit report on all 5 input data lines. || [https://forums.nesdev.org/viewtopic.php?f=2&t=19752 thread] | ||
|- | |- | ||
| [https://forums.nesdev.org/viewtopic.php?p=106954#p106954 raw] || lidnariq || Immediate state of 32-bit report on all 5x2 input data lines. || [https://forums.nesdev.org/viewtopic.php?p=106954#p106954 thread] | | [https://forums.nesdev.org/viewtopic.php?p=106954#p106954 raw] | ||
[https://forums.nesdev.org/viewtopic.php?t=23745 pack2] | |||
|| lidnariq || Immediate state of 32-bit report on all 5x2 input data lines. | |||
Immediate state of 64-bit report on all 5x2 input data lines. | |||
|| [https://forums.nesdev.org/viewtopic.php?p=106954#p106954 thread] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?f=9&t=13021 zapper tests] || rainwarrior || Simple tests for displaying output of zapper reads. || [https://forums.nesdev.org/viewtopic.php?f=9&t=13021 thread] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?t=24192 powerpadgesture] || tepples || Gesture test for [[Power Pad]] displaying log of presses and releases. || [https://forums.nesdev.org/viewtopic.php?t=24192 thread] | |||
|- | |||
| [https://www.nesdev.org/powerpd.zip POWERPAD.NES] || Tennessee Carmel-Veilleux || Old simple test for Power Pad. || [https://www.nesdev.org/powerpad.txt powerpad.txt] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?p=294558#p294558 d34test] || rainwarrior || Generic log of 32-bit report on D3 and D4 data lines, with 16-bit report on D0. || [https://forums.nesdev.org/viewtopic.php?p=294558#p294558 thread] | |||
|- | |||
| [https://forums.nesdev.org/viewtopic.php?p=294558#p294558 kmbtest] || rainwarrior || Input test for a proposed USB Keyboard and Mouse interface. || [https://forums.nesdev.org/viewtopic.php?p=294558#p294558 thread] | |||
|} | |} | ||
Line 224: | Line 251: | ||
! Resources | ! Resources | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id= | | [https://forums.nesdev.org/download/file.php?id=19130 240pee-0.22] || tepples || 240p Test Suite (an NES version of the [http://junkerhq.net/xrgb/index.php/240p_test_suite 240p Test Suite] by Artemio Urbina), including an MDFourier tone generator || [https://forums.nesdev.org/viewtopic.php?t=13394 thread] [https://github.com/pinobatch/240p-test-mini/tree/master/nes GitHub] | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=1415 characterize-vs] || lidnariq || VS System tests || [https://forums.nesdev.org/viewtopic.php?f=3&t=10276&start=15#p127592 thread] | | [https://forums.nesdev.org/download/file.php?id=1415 characterize-vs] || lidnariq || VS System tests || [https://forums.nesdev.org/viewtopic.php?f=3&t=10276&start=15#p127592 thread] | ||
|- | |- | ||
| [http://nesdev.org/NEStress.zip NEStress] || || Old test - some of the tests are supposed to fail on real hardware. || | | [http://nesdev.org/NEStress.zip NEStress] || Flubba || Old test - some of the tests are supposed to fail on real hardware. || | ||
|- | |- | ||
| [https://forums.nesdev.org/download/file.php?id=2826 oc-r1a] || tepples || Detects and displays accurate clock rate of the NES || [https://forums.nesdev.org/viewtopic.php?f=22&t=12499 thread] | | [https://forums.nesdev.org/download/file.php?id=2826 oc-r1a] || tepples || Detects and displays accurate clock rate of the NES (since incorporated into 240p Test Suite) || [https://forums.nesdev.org/viewtopic.php?f=22&t=12499 thread] | ||
|- | |- | ||
| [https://github.com/bbbradsmith/nes-audio-tests nes-audio-tests] || rainwarrior || NSF and NES ROM tests for expansion audio sound, NSF behaviour, and other various audio related things. || | | [https://github.com/bbbradsmith/nes-audio-tests nes-audio-tests] || rainwarrior || NSF and NES ROM tests for expansion audio sound, NSF behaviour, and other various audio related things. || |
Latest revision as of 00:06, 23 September 2024
There are many ROMs available that test an emulator for inaccuracies.
Validation ROMs
Some of the download links below are currently dead, but many have been archived at https://github.com/christopherpow/nes-test-roms. |
CPU Tests
Name | Author | Description | Resources |
---|---|---|---|
branch_timing_tests | blargg | These ROMs test timing of the branch instruction, including edge cases | |
cpu_dummy_reads | blargg | Tests the CPU's dummy reads | thread |
cpu_dummy_writes | bisqwit | Tests the CPU's dummy writes | thread |
cpu_exec_space | bisqwit | Verifies that the CPU can execute code from any possible memory location, even if that is mapped as I/O space | thread |
cpu_flag_concurrency | bisqwit | Unsure what results are meant to be, see thread for more info. | thread |
cpu_interrupts_v2 | blargg | Tests the behavior and timing of CPU in the presence of interrupts, both IRQ and NMI; see CPU interrupts. | thread |
cpu_reset | blargg | Tests CPU registers just after power and changes during reset, and that RAM isn't changed during reset. | |
cpu_timing_test6 | blargg | This program tests instruction timing for all official and unofficial NES 6502 instructions except the 8 branch instructions (Bxx) and the 12 halt instructions (HLT) | thread |
coredump | jroatch | Coredump tool for displaying contents of RAM | thread |
instr_misc | blargg | Tests some miscellaneous aspects of instructions, including behavior when 16-bit address wraps around, and dummy reads. | |
instr_test_v5 | blargg | Tests official and unofficial CPU instructions and lists which ones failed. It will work even if emulator has no PPU and only supports NROM, writing a copy of output to $6000 (see readme). This more thoroughly tests instructions, but can't help you figure out what's wrong beyond what instruction(s) are failing, so it's better for testing mature CPU emulators. | |
instr_timing | blargg | Tests timing of all instructions, including unofficial ones, page-crossing, etc. | |
nestest (doc) | kevtris | fairly thoroughly tests CPU operation. This is the best test to start with when getting a CPU emulator working for the first time. Start execution at $C000 and compare execution with a known good log (created using Nintendulator, an emulator chosen by the test's author because its CPU was verified to function correctly, aside from some minor details of the power-up state). | |
ram_retain | rainwarrior | RAM contents test, for displaying contents of RAM at power-on or after reset | thread |
PPU Tests
Name | Author | Description | Resources |
---|---|---|---|
color_test | rainwarrior | Simple display of any chosen color full-screen | thread |
blargg_ppu_tests_2005.09.15b | blargg | Miscellaneous PPU tests (palette ram, sprite ram, etc.) | thread |
full_nes_palette | blargg | Displays the full palette with all emphasis states, demonstrates direct PPU color control | thread |
nmi_sync | blargg | Verifies NMI timing by creating a specific pattern on the screen (NTSC & PAL versions) | thread |
ntsc_torture | rainwarrior | NTSC Torture Test displays visual patterns to demonstrate NTSC signal artifacts | thread |
oam_read | blargg | Tests OAM reading ($2004), being sure it reads the byte from OAM at the current address in $2003. | thread |
oam_stress | blargg | Thoroughly tests OAM address ($2003) and read/write ($2004) | thread |
oamtest3 | lidnariq | Utility to upload OAM data via $2003/$2004 - can be used to test for the OAMADDR bug behavior | thread 1 thread 2 |
palette | rainwarrior | Palette display requiring only scanline-based palette changes, intended to demonstrate the full palette even on less advanced emulators | thread |
ppu_open_bus | blargg | Tests behavior when reading from open-bus PPU bits/registers | |
ppu_read_buffer | bisqwit | Mammoth test pack tests many aspects of the NES system, mostly centering around the PPU $2007 read buffer | thread |
ppu_sprite_hit | blargg | Tests sprite 0 hit behavior and timing | thread |
sprite_overflow_tests | blargg | Tests sprite overflow behavior and timing | thread |
ppu_vbl_nmi | blargg | Tests the behavior and timing of the NTSC PPU's VBL flag, NMI enable, and NMI interrupt. Timing is tested to an accuracy of one PPU clock. | thread |
scanline | Quietust | Displays a test screen that will contain glitches if certain portions of the emulation are not perfect. | |
sprdma_and_dmc_dma | blargg | Tests the cycle stealing behavior of the DMC DMA while running Sprite DMAs | thread |
sprite_hit_tests_2005.10.05 | blargg | Generally the same as ppu_sprite_hit (older revision of the tests - ppu_sprite_hit is most likely better) | thread |
sprite_overflow_tests | blargg | Generally the same as ppu_sprite_overflow (older revision of the tests - ppu_sprite_overflow is most likely better) | thread |
tvpassfail | tepples | NTSC color and NTSC/PAL pixel aspect ratio test ROM (older revision of the tests - 240p Test Suite is most likely better) | thread |
vbl_nmi_timing | blargg | Generally the same as ppu_vbl_nmi (older revision of the tests - ppu_vbl_nmi is most likely better) | thread |
APU Tests
Name | Author | Description | Resources |
---|---|---|---|
apu_mixer | blargg | Verifies proper operation of the APU's sound channel mixer, including relative volumes of channels and non-linear mixing. recordings when run on NES are available for comparison, though the tests are made so that you don't really need these. | thread |
apu_phase_reset | Rahsennor | Tests the correct square channel behavior when writing to $4003/4007 (reset the duty cycle sequencers but not the clock dividers) | thread |
apu_reset | blargg | Tests initial APU state at power, and the effect of reset. | |
apu_test | blargg | Tests many aspects of the APU that are visible to the CPU. Really obscure things are not tested here. | |
blargg_apu_2005.07.30 | blargg | Tests APU length counters, frame counter, IRQ, etc. | |
dmc_dma_during_read4 | blargg | Tests register read/write behavior while DMA is running | |
dmc_tests | ? | ? | |
dpcmletterbox | tepples | Tests accuracy of the DMC channel's IRQ | |
pal_apu_tests | blargg | PAL version of the blargg_apu_2005.07.30 tests | |
square_timer_div2 | blargg | Tests the square timer's period | |
test_apu_2 (1-10) (11) | x0000 | 11 tests that verify a number of behaviors with the APU (including the frame counter) | thread |
test_apu_env | blargg | Tests the APU envelope for correctness. | |
test_apu_sweep | blargg | Tests the sweep unit's add, subtract, overflow cutoff, and minimum period behaviors. | |
test_apu_timers | blargg | Tests frequency timer of all 5 channels | |
test_tri_lin_ctr | blargg | Tests triangle's linear counter and clocking by the frame counter | |
volume_tests | tepples | Plays tones on all the APU's channels to show their relative volumes at various settings of $4011. Package includes a recording from an NES's audio output for comparison. |
Mapper-specific Tests
Name | Author | Description | Resources |
---|---|---|---|
31_test | rainwarrior | Tests for mapper 31 (see thread for ROMs in various PRG sizes) | thread |
BNTest | tepples | Tests how many PRG banks are reachable in BxROM and AxROM. | thread GitHub |
bxrom_512k_test | rainwarrior | Similar to the BxROM test in BNTest above. | thread |
FdsIrqTests (v7) | Sour | Tests various elements of the FDS' IRQ | thread |
exram | Quietust | MMC5 exram test | |
famicom_audio_swap_tests | rainwarrior | Hotswap tests for Famicom expansion audio (5B, MMC5, VRC6, VRC7, N163, FDS) | thread |
fme7acktest-r1 | tepples | Checks some IRQ acknowledgment behiaviors of Sunsoft FME-7 that emulators were getting wrong in 2015. | thread |
fme7ramtest-r1 | tepples | Checks how much work RAM the Sunsoft FME-7 can access | thread GitHub |
Holy Mapperel | tepples | Detects over a dozen mappers and verifies that all PRG ROM and CHR ROM banks are reachable, that PRG RAM and CHR RAM can be written and read back without error, and that nametable mirroring, IRQ, and WRAM protection work. (Formerly Holy Diver Batman) | thread GitHub |
mmc3bigchrram | tepples | MMC3 test for large 32kb CHR RAM with NES 2.0 headers | thread GitHub |
mmc3_test_2 | blargg | MMC3 scanline counter and IRQ generation tests. | |
mmc3irqtest | N-K | MMC3 scanline IRQ test and $C000 glitch investigation. | thread |
mmc5test | Drag | MMC5 scanline counter | thread |
mmc5test_v2 | AWJ | MMC5 tests | thread |
serom | lidnariq | Tests the constraints of SEROM / SHROM / SH1ROM variations of the MMC1 boards. | thread |
NES 2.0 Submapper Tests | rainwarrior | 2_test - Mapper 2, Submappers 0, 1 and 2 | thread |
rainwarrior | 3_test - Mapper 3, Submappers 0, 1 and 2 | thread | |
rainwarrior | 7_test - Mapper 7, Submappers 0, 1 and 2 | thread | |
rainwarrior | 34_test - Mapper 34, Submappers 1 and 2 | thread | |
test28 | tepples | Tests for mapper 28 | thread GitHub |
vrc24test | AWJ | Detects and tests all VRC 2/4 variants | thread |
vrc6test | natt | VRC6 mirroring tests | thread |
mmc5ramsize | rainwarrior | MMC5 large PRG-RAM support tests | thread |
mmc1atest | tepples | Characterizes behavior of MMC1A vs. MMC1B | thread GitHub |
n163_soundram | rainwarrior | Test for Namco 163 audio sound RAM read-back. | thread |
n163_soundram_init | rainwarrior | Test for Namco 163 audio sound RAM contents at power-on. | thread |
Input Tests
Name | Author | Description | Resources |
---|---|---|---|
allpads | tepples | Multiple controller test supporting NES controller, Super NES controller, Famicom microphone, Four Score, Zapper, NES Arkanoid controller, and Super NES Mouse; also has raw 32-bit report mode | thread GitHub |
dma_sync_test_v2 | Rahsennor | Tests DMC DMA read corruption | thread |
PaddleTest3 | 3gengames | Test for the Arkanoid controller | thread |
vaus | lidnariq | Arkanoid controller 9-bit result test | thread |
read_joy3 | blargg | Various NES controllers tests, including read corruption due to DMC DMA | thread |
Zap Ruder | tepples | Test for the Zapper, including dual wield but not the serial Vs. variant | thread GitHub |
spadtest-nes | tepples | Super Nintendo controller test (when connected to a NES) | thread |
vaus_test | tepples | Another test for the Arkanoid controller | thread GitHub |
mset | rainwarrior | SNES mouse test | thread |
mict | rainwarrior | Famicom microphone test | thread |
Telling LYs? | tepples | Tests whether input can change on any scanline | thread GitHub |
ctrltest | rainwarrior | Generic log of 16-bit report on all 5 input data lines. | thread |
raw | lidnariq | Immediate state of 32-bit report on all 5x2 input data lines.
Immediate state of 64-bit report on all 5x2 input data lines. |
thread |
zapper tests | rainwarrior | Simple tests for displaying output of zapper reads. | thread |
powerpadgesture | tepples | Gesture test for Power Pad displaying log of presses and releases. | thread |
POWERPAD.NES | Tennessee Carmel-Veilleux | Old simple test for Power Pad. | powerpad.txt |
d34test | rainwarrior | Generic log of 32-bit report on D3 and D4 data lines, with 16-bit report on D0. | thread |
kmbtest | rainwarrior | Input test for a proposed USB Keyboard and Mouse interface. | thread |
Misc Tests
Name | Author | Description | Resources |
---|---|---|---|
240pee-0.22 | tepples | 240p Test Suite (an NES version of the 240p Test Suite by Artemio Urbina), including an MDFourier tone generator | thread GitHub |
characterize-vs | lidnariq | VS System tests | thread |
NEStress | Flubba | Old test - some of the tests are supposed to fail on real hardware. | |
oc-r1a | tepples | Detects and displays accurate clock rate of the NES (since incorporated into 240p Test Suite) | thread |
nes-audio-tests | rainwarrior | NSF and NES ROM tests for expansion audio sound, NSF behaviour, and other various audio related things. |
Automated testing
It's best if your emulator can automatically run a suite of tests at the press of a button. This allows you to re-run them every time you make a change, without any effort. Automation can be difficult, because the emulator must be able to determine success/failure without your help.
The first part of automated testing is support for a "movie" or "demo", or a list of what buttons were pressed when. An emulator makes a movie by recording presses while the user is playing, and then it plays the movie by feeding the recorded presses back through the input system. This not only helps automated testing but also makes your emulator attractive to speedrunners.
To create a test case, record a movie of the player activating all tests in a ROM, take a screenshot of each result screen, and log the time and a hash of each screenshot. The simplest test ROMs won't require any button presses. ROMs that test more than one thing are more likely to require them, and an actual game will require a playthrough. Then to run a test case, play the movie in fast-forward (no delay between frames) and take screenshots at the same times. If a screenshot's hash differs from that of the corresponding screenshot from when the test case was created, make a note of this difference in the log. Then you can compare the emulator's output frame-by-frame to that of the previous release of your emulator running the same test case.