Boy is a Gamboy (dmg not 0) emulator written in Java.
Writing a good understandable emulator without any magic
Understanding how the hardware works to make a clear implementation
Having the best performance
Pass all tests for dmg (not 0)
Implement sound
Make implementation of MBC1 clearer
Implement all other MBC's
Blargg's cpu_instrs tests
Test
Boy
01-special
👍
02-interrupts
👍
03-op sp,hl
👍
04-op r,imm
👍
05-op rp
👍
06-ld r,r
👍
07-jr,jp,call,ret,rst
👍
08-misc instrs
👍
09-op r,r
👍
10-bit ops
👍
11-op a,(hl)
👍
Blargg's instr_timing tests
Blargg's mem_timing tests
Test
Boy
01-read_timing
👍
02-write_timing
👍
03-modify_timing
👍
Mooneye GB acceptance tests
Test
Boy
add sp e timing
👍
boot div dmgABCmgb
❌
boot hwio dmgABCmgb
👍
boot regs dmgABC
👍
call timing
👍
call timing2
👍
call cc_timing
👍
call cc_timing2
👍
di timing GS
👍
div timing
👍
ei sequence
👍
ei timing
👍
halt ime0 ei
👍
halt ime0 nointr_timing
👍
halt ime1 timing
👍
halt ime1 timing2 GS
👍
if ie registers
👍
intr timing
👍
jp timing
👍
jp cc timing
👍
ld hl sp e timing
👍
oam dma_restart
👍
oam dma start
👍
oam dma timing
👍
pop timing
👍
push timing
👍
rapid di ei
👍
ret timing
👍
ret cc timing
👍
reti timing
👍
reti intr timing
👍
rst timing
👍
Bits (unusable bits in memory and registers)
Test
Boy
mem oam
👍
reg f
👍
unused_hwio GS
👍
Test
Boy
basic
👍
reg_read
👍
sources dmgABCmgbS
❌
Test
Boy
hblank ly scx timing GS
❌
intr 1 2 timing GS
👍
intr 2 0 timing
👍
intr 2 mode0 timing
👍
intr 2 mode3 timing
👍
intr 2 oam ok timing
👍
intr 2 mode0 timing sprites
❌
lcdon timing dmgABCmgbS
👍
lcdon write timing GS
👍
stat irq blocking
❌
stat lyc onoff
❌
vblank stat intr GS
👍
Test
Boy
boot sclk align dmgABCmgb
❌
Test
Boy
div write
👍
rapid toggle
👍
tim00 div trigger
👍
tim00
👍
tim01 div trigger
👍
tim01
👍
tim10 div trigger
👍
tim10
👍
tim11 div trigger
👍
tim11
👍
tima reload
👍
tima write reloading
❌
tma write reloading
❌
Mooneye GB emulator-only tests
Test
Boy
bits ram en
👍
rom 512Kb
👍
rom 1Mb
👍
rom 2Mb
👍
rom 4Mb
👍
rom 8Mb
👍
rom 16Mb
👍
ram 64Kb
👍
ram 256Kb
👍
multicart rom 8Mb
❌
Test
Boy
sprite priority
👍