In the interest of furthering the state of Game Boy Advance emulation, I've been writing a test suite that tests various aspects of hardware. At the moment, it only tests timing operations, but way more will be coming in the future. Source code is available on GitHub.

Memory tests

Each test contains 44 configurations. The current version contains 1552 tests total.

Scores:

I/O read tests

The current version contains 123 tests.

Timing tests

Each test contains 20 (or 10 if only an ARM version is supported) configurations:

Scores:

Timer IRQ tests

Each test contains 10 configurations. The current version contains 90 tests total.

Scores

DMA tests

The current version contains 1256 tests total.

Scores:

Carry instruction tests

Each test contains 3 configurations. The current version contains 93 tests total.

Scores:

BIOS math tests

Each test contains 5 cases: the outputs in registers r0 through r3 and the program state flags. Note that for most of these tests, r0 is the only important case, although some games may rely on the other values. The current version contains 625 tests total. These tests only apply to emulators with HLE BIOS.

Scores:

DMA tests

The current version contains 1256 tests total.

Scores:

Memory tests

Each test contains 44 configurations. The current version contains 1552 tests total.

Scores:

- mGBA (0.6 beta 1): 1552 passes

- mGBA (0.5.0): 1552 passes

- higan v103: 1552 passes

- NO$GBA 2.8e (BIOS): 1394

- VBA-M 2.0.0 beta 3: 1375 passes

- VGBA 5.5: 1255 passes

- NO$GBA 2.8e: emulation crashes

I/O read tests

The current version contains 123 tests.

- higan v103: 123 passes

- mGBA (0.6 beta 1): 116 passes

- mGBA (0.5.0): 104 passes

- NO$GBA 2.8e: 100 passes

- VBA-M 2.0.0 beta 3: 100 passes

- VGBA 5.5: 10 passes

Timing tests

Each test contains 20 (or 10 if only an ARM version is supported) configurations:

- ROM 4/2 waitstates, no prefetch

- ROM 4/2 waitstates, prefetch

- ROM 3/2 waitstates, no prefetch

- ROM 3/2 waitstates, prefetch

- ROM 4/1 waitstates, no prefetch

- ROM 4/1 waitstates, prefetch

- ROM 3/1 waitstates, no prefetch

- ROM 3/1 waitstates, prefetch

- WRAM

- IWRAM

Scores:

- mGBA (master, BIOS): 1474 passes

- mGBA (master): 1434 passes

- higan v103: 1300 passes

- mGBA (0.5.2, BIOS): 1176 passes

- mGBA (0.5.2): 1136 passes

- NO$GBA 2.8e (BIOS): 988 passes

- NO$GBA 2.8e: 968 passes

- VBA-M 2.0.0 beta 3: 678 passes

- VGBA 5.5: 4 passes

Timer IRQ tests

Each test contains 10 configurations. The current version contains 90 tests total.

Scores

- mGBA (master): 70 passes

- NO$GBA 2.9: 44 passes

- higan v107: 36 passes

- VBA-M 2.1.4: 8 passes

DMA tests

The current version contains 1256 tests total.

Scores:

- mGBA (master): 1232 passes

- mGBA (0.6.1): 1112 passes

- NO$GBA 2.8f: 1060 passes

- VBA-M 2.0.1: 1032 passes

- VGBA 5.5: 998 passes

Carry instruction tests

Each test contains 3 configurations. The current version contains 93 tests total.

Scores:

- mGBA (0.5.0): 93 passes

- higan v103: 93 passes

- NO$GBA 2.8b: 93 passes

- VBA-M 2.0.0 beta 3: 93 passes

- VGBA 5.5: 93 passes

BIOS math tests

Each test contains 5 cases: the outputs in registers r0 through r3 and the program state flags. Note that for most of these tests, r0 is the only important case, although some games may rely on the other values. The current version contains 625 tests total. These tests only apply to emulators with HLE BIOS.

Scores:

- mGBA (0.6 beta 1): 625 passes

- VBA-M 2.0.0 beta 3: 425 passes

- NO$GBA 2.8e: emulator crashes

- mGBA (0.5.2): emulator crashes

- VGBA 5.5: emulator crashes

DMA tests

The current version contains 1256 tests total.

Scores:

- mGBA (master): 1232 passes

- mGBA (0.6.1): 1112 passes

- NO$GBA 2.8f: 1060 passes

- VBA-M 2.0.1: 1032 passes

- VGBA 5.5: 998 passes