Downloads

Accuracy Tests

Test roms are programs created to test and validate some of the NES' behavior. They are used by emulators to ensure that the emulated console behaves as much as possible like a NES. While they are not perfect for assessing an emulator's overall accuracy, they still provide a decent estimate. The following tables list the majority of existing test roms and whether or not Mesen passes each test.

Audio

apu_mixer

4/4 Pass

dmc

Pass

noise

Pass

square

Pass

triangle

Pass

apu_phase_reset

Pass

apu_reset

6/6 Pass

4015_cleared

Pass

4017_timing

Pass

4017_written

Pass

irq_flag_cleared

Pass

len_ctrs_enabled

Pass

works_immediately

Pass

apu_test

8/8 Pass

1-len_ctr

Pass

2-len_table

Pass

3-irq_flag

Pass

4-jitter

Pass

5-len_timing

Pass

6-irq_flag_timing

Pass

7-dmc_basics

Pass

8-dmc_rates

Pass

blargg_apu_2005_07_30

11/11 Pass

01.len_ctr

Pass

02.len_table

Pass

03.irq_flag

Pass

04.clock_jitter

Pass

05.len_timing_mode0

Pass

06.len_timing_mode1

Pass

07.irq_flag_timing

Pass

08.irq_timing

Pass

09.reset_timing

Pass

10.len_halt_timing

Pass

11.len_reload_timing

Pass

dmc_tests

4/4 Pass

buffer_retained

Pass

latency

Pass

status_irq

Pass

status

Pass

fadeout_and_triangle_tests

Pass

pal_apu_tests

11/11 Pass

01.len_ctr

Pass

02.len_table

Pass

03.irq_flag

Pass

04.clock_jitter

Pass

05.len_timing_mode0

Pass

06.len_timing_mode1

Pass

07.irq_flag_timing

Pass

08.irq_timing

Pass

09.reset_timing

Pass

10.len_halt_timing

Pass

11.len_reload_timing

Pass

square_timer_div2

Pass

test_apu_2

11/11 Pass

test_1

Pass

test_2

Pass

test_3

Pass

test_4

Pass

test_5

Pass

test_6

Pass

test_7

Pass

test_8

Pass

test_9

Pass

test_10

Pass

test_11

Pass

test_apu_env

Pass

test_apu_sweep

2/2 Pass

sweep_cutoff

Pass

sweep_sub

Pass

test_apu_timers

4/4 Pass

dmc_pitch

Pass

noise_pitch

Pass

square_pitch

Pass

triangle_pitch

Pass

test_tri_lin_ctr

Pass

volume_tests

Pass

CPU

branch_timing_tests

3/3 Pass

1.Branch_Basics

Pass

2.Backward_Branch

Pass

3.Forward_Branch

Pass

cpu_dummy_reads

Pass

cpu_dummy_writes

2/2 Pass

cpu_dummy_writes_oam

Pass

cpu_dummy_writes_ppumem

Pass

cpu_exec_space

2/2 Pass

test_cpu_exec_space_apu

Pass

test_cpu_exec_space_ppuio

Pass

cpu_interrupts_v2

6/6 Pass

cpu_interrupts

Pass

1-cli_latency

Pass

2-nmi_and_brk

Pass

3-nmi_and_irq

Pass

4-irq_and_dma

Pass

5-branch_delays_irq

Pass

cpu_reset

2/2 Pass

ram_after_reset

Pass

registers

Pass

cpu_timing_test6

Pass

dma_sync_test

2/2 Pass

dma_sync_test

Pass

dma_sync_test_odd

Pass

dmc_dma_during_read4

5/5 Pass

dma_2007_read

Pass

dma_2007_write

Pass

dma_4016_read

Pass

double_2007_read

Pass

read_write_2007

Pass

dpcmletterbox

Pass

instr_misc

5/5 Pass

instr_misc

Pass

01-abs_x_wrap

Pass

02-branch_wrap

Pass

03-dummy_reads

Pass

04-dummy_reads_apu

Pass

instr_test-v3

17/17 Pass

01-implied

Pass

02-immediate

Pass

03-zero_page

Pass

04-zp_xy

Pass

05-absolute

Pass

06-abs_xy

Pass

07-ind_x

Pass

08-ind_y

Pass

09-branches

Pass

10-stack

Pass

11-jmp_jsr

Pass

12-rts

Pass

13-rti

Pass

14-brk

Pass

15-special

Pass

all_instrs

Pass

official_only

Pass

instr_timing

3/3 Pass

instr_timing

Pass

1-instr_timing

Pass

2-branch_timing

Pass

nestest

Pass

sprdma_and_dmc_dma

2/2 Pass

sprdma_and_dmc_dma

Pass

sprdma_and_dmc_dma_512

Pass

Video

blargg_ppu_2005_09_15b

5/5 Pass

palette_ram

Pass

power_up_palette

Pass

sprite_ram

Pass

vbl_clear_time

Pass

vram_access

Pass

full_palette

3/3 Pass

flowing_palette

Pass

full_palette

Pass

full_palette_smooth

Pass

misc_oam_tests

5/5 Pass

oam_read_vbl_wait

Pass

oam_read

Pass

oam_stress

Pass

oamtest3

Pass

read2004

Pass

nmi_sync

2/2 Pass

demo_ntsc

Pass

demo_pal

Pass

ppu_open_bus

Pass

ppu_read_buffer

Pass

ppu_sprite_hit

11/11 Pass

ppu_sprite_hit

Pass

01-basics

Pass

02-alignment

Pass

03-corners

Pass

04-flip

Pass

05-left_clip

Pass

06-right_edge

Pass

07-screen_bottom

Pass

08-double_height

Pass

09-timing

Pass

10-timing_order

Pass

ppu_sprite_overflow

6/6 Pass

ppu_sprite_overflow

Pass

01-basics

Pass

02-details

Pass

03-timing

Pass

04-obscure

Pass

05-emulator

Pass

ppu_vbl_nmi

11/11 Pass

ppu_vbl_nmi

Pass

01-vbl_basics

Pass

02-vbl_set_time

Pass

03-vbl_clear_time

Pass

04-nmi_control

Pass

05-nmi_timing

Pass

06-suppression

Pass

07-nmi_on_timing

Pass

08-nmi_off_timing

Pass

09-even_odd_frames

Pass

10-even_odd_timing

Pass

scanline

Pass

Input Devices

allpads

Pass

PaddleTest3

Pass

read_joy3

4/4 Pass

count_errors

Pass

count_errors_fast

Pass

test_buttons

Pass

thorough_test

Pass

ruder

Pass

vaus-test

Pass

Mapper-specific tests

bntest

3/3 Pass

bntest_aorom

Pass

bntest_h

Pass

bntest_v

Pass

FME7

3/3 Pass

fme7acktest

Pass

fme7ramtest

Pass

fme7ramtest_128k

Pass

holydiver

24/24 Pass

M0_P32K_C8K_V

Pass

M1_P128K

Pass

M1_P128K_C128K

Pass

M1_P128K_C128K_S8K

Pass

M1_P128K_C128K_W8K

Pass

M1_P128K_C32K

Pass

M1_P128K_C32K_S8K

Pass

M1_P128K_C32K_W8K

Pass

M1_P512K_S32K

Pass

M1_P512K_S8K

Pass

M2_P128K_V

Pass

M3_P32K_C32K_H

Pass

M4_P128K

Pass

M4_P256K_C256K

Pass

M7_P128K

Pass

M9_P128K_C64K

Pass

M10_P128K_C64K_S8K

Pass

M10_P128K_C64K_W8K

Pass

M28_P512K

Pass

M34_P128K_H

Pass

M66_P64K_C16K_V

Pass

M78.3_P128K_C64K

Pass

M118_P128K_C64K

Pass

M180_P128K_H

Pass

HomebrewMappers

9/9 Pass

31_test_16

Pass

31_test_32

Pass

31_test_64

Pass

31_test_128

Pass

31_test_256

Pass

31_test_512

Pass

31_test_1024

Pass

GTROM CHR-RAM test

Pass

test28

Pass

MMC3

7/7 Pass

1-clocking

Pass

2-details

Pass

3-A12_clocking

Pass

4-scanline_timing

Pass

5-MMC3

Pass

6-MMC3_alt

Pass

mmc3bigchrram

Pass

MMC5

2/2 Pass

mmc5exram

Pass

mmc5test_v2

Pass

Submappers

12/12 Pass

2_test_0

Pass

2_test_1

Pass

2_test_2

Pass

3_test_0

Pass

3_test_1

Pass

3_test_2

Pass

7_test_0

Pass

7_test_1

Pass

7_test_2

Pass

34_test_1

Pass

34_test_2

Pass

serom

Pass

VRC6

2/2 Pass

vrc6test24

Pass

vrc6test26

Pass

Test results: 236 / 236 (100%)

Note that there are some caveats to using test roms - a higher result does not always mean better emulation or compatibility. These tests do not test every aspect of the NES, and some tests only validate some very specific edge cases in the hardware that games do not rely on. A high (or even perfect) rating on these tests does not imply that Mesen's emulation is perfect (it is not).

Note: Some tests are currently not included in this list because their behavior on real hardware needs to be validated.

Supported Mappers

Each mapper number represents a different cartridge type. Not all mappers are as important - some are used by hundreds of games, others are used by a single game. For example, mapper #4 is used by over 500 licensed games, while mapper #9 is used by a single game. Not all numbers from 0 to 255 have been assigned to specific cartridge models - some are still unused (gray).