Here's another test I created. As usual, the ROM file, the readme, and the full source code are included.
http://bisqwit.iki.fi/src/nes_tests/ppu_read_buffer.zip
It is really a mammoth test suite, containing a whopping 78 tests in one.
The test topics mostly revolve around the PPU's $2007 read buffer, but a few ancillary topics are also tested, such as CHR-ROM write protection, PPU reading with the "ADC" instruction, $4014 DMA combined with RAM mirroring, and sprite-0 hit flag, with varying degree of intensity.
The test takes about 20 seconds, and either displays some graphics or plays a few audible tones during those sections where the user must just wait.
I would appreciate test results on the actual console before anyone cheers saying their emulator passes all tests. It is really hard to come up with tests that are failed by the best emulators, today, especially if you can only test on those very emulators.
From the set of Nintendulator, Nestopia, Rocknes and puNES, I only found that Nintendulator consistently fails when you pause / turbo during the DMA tests, but otherwise all four pass all tests.
The focus of this test suite is to catch a large set of typical beginner's mistakes in NES emulation coding. Because of this, the program actually executes as many tests as possible before reporting the results. Tests which depend on passing of an earlier test are not executed. Some tests contain a special workaround for a previously failed test, so that the actual topic can still be tested even if the PPU is broken in a predictable manner. The ROM also tries hard to catch and graciously handle any spuriously triggered BRKs and IRQs.
When the results are reported, the numeric list of all failed tests is shown, followed by the explanation of the first failed test. Tests are not always executed in numeric order. For example (FCEU):
The ROM is a CNROM (iNES mapper 3) with 1 × 16 kB of PRG-ROM, 3 × 8 kB of CHR-ROM and horizontal mirroring. I had to actually implement some compression schemes to fit everything in the ROM that I wanted to fit.
http://bisqwit.iki.fi/src/nes_tests/ppu_read_buffer.zip
It is really a mammoth test suite, containing a whopping 78 tests in one.
The test topics mostly revolve around the PPU's $2007 read buffer, but a few ancillary topics are also tested, such as CHR-ROM write protection, PPU reading with the "ADC" instruction, $4014 DMA combined with RAM mirroring, and sprite-0 hit flag, with varying degree of intensity.
The test takes about 20 seconds, and either displays some graphics or plays a few audible tones during those sections where the user must just wait.
I would appreciate test results on the actual console before anyone cheers saying their emulator passes all tests. It is really hard to come up with tests that are failed by the best emulators, today, especially if you can only test on those very emulators.
From the set of Nintendulator, Nestopia, Rocknes and puNES, I only found that Nintendulator consistently fails when you pause / turbo during the DMA tests, but otherwise all four pass all tests.
The focus of this test suite is to catch a large set of typical beginner's mistakes in NES emulation coding. Because of this, the program actually executes as many tests as possible before reporting the results. Tests which depend on passing of an earlier test are not executed. Some tests contain a special workaround for a previously failed test, so that the actual topic can still be tested even if the PPU is broken in a predictable manner. The ROM also tries hard to catch and graciously handle any spuriously triggered BRKs and IRQs.
When the results are reported, the numeric list of all failed tests is shown, followed by the explanation of the first failed test. Tests are not always executed in numeric order. For example (FCEU):
The ROM is a CNROM (iNES mapper 3) with 1 × 16 kB of PRG-ROM, 3 × 8 kB of CHR-ROM and horizontal mirroring. I had to actually implement some compression schemes to fit everything in the ROM that I wanted to fit.