CoroGB is an experimental gameboy emulator written in C++ w/ coroutines
It is primarily developed for personal advancement, but is hopefully of interest.
Note
A boot rom must be provided! It should be named dmg_rom.bin and placed in the executable's directory (project root also works when running from Visual Studio)
Controls
Up / Down / Left / Right / Z / X / RShift / Enter
Numpad+ is speed up
Tests
Blargg's tests
Test
mooneye-gb
CoroGB
cpu instrs
π
β
dmg sound 2
β
β
instr timing
π
β
mem timing 2
π
β
oam bug 2
β
β
halt bug
π
Notes:
cpu_instrs #2 fails on CoroGB due to not yet having implemented the timer
sound is unimplemented in CoroGB
Mooneye GB acceptance tests
Test
mooneye-gb
CoroGB
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
π
π
Notes:
boot_hwio-dmgABCmgb needs sound emulation
halt_ime1_timing needs timer
Bits (unusable bits in memory and registers)
Test
mooneye-gb
CoroGB
mem oam
π
π
reg f
π
π
unused_hwio GS
π
π
Instructions
Test
mooneye-gb
CoroGB
daa
π
π
Interrupt handling
Test
mooneye-gb
CoroGB
ie push
π
π
OAM DMA
Test
mooneye-gb
CoroGB
basic
π
π
reg_read
π
π
sources dmgABCmgbS
π
π
PPU
Test
mooneye-gb
CoroGB
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
π
β
Notes:
Yes, CoroGB implements stat IRQ blocking!
Serial
Test
mooneye-gb
CoroGB
boot sclk align dmgABCmgb
β
β
Notes:
Serial clock not implemented
Timer
Test
mooneye-gb
CoroGB
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
π
β
Notes:
Timer not implemented
Mooneye GB emulator-only tests
MBC1
Test
mooneye-gb
CoroGB
bits ram en
π
π
rom 512Kb
π
π
rom 1Mb
π
π
rom 2Mb
π
π
rom 4Mb
π
π
rom 8Mb
π
π
rom 16Mb
π
π
ram 64Kb
π
π
ram 256Kb
π
π
multicart rom 8Mb
π
π
Notes:
Yes, CoroGB supports MBC1 multicart roms!
Mooneye GB manual tests
Test
mooneye-gb
CoroGB
sprite priority
π
π
Mealybug tests
Test
CoroGB
m3_wx_4_change
β
m3_wx_4_change_sprites
β
m3_wx_5_change
β
m3_wx_6_change
β
m2_win_en_toggle
β
m3_bgp_change
β
m3_bgp_change_sprites
β
m3_lcdc_bg_en_change
β
m3_lcdc_bg_en_change2
β
m3_lcdc_bg_map_change
β
m3_lcdc_bg_map_change2
β
m3_lcdc_obj_en_change
β
m3_lcdc_obj_en_change_variant
β
m3_lcdc_obj_size_change
β
m3_lcdc_obj_size_change_scx
β
m3_lcdc_tile_sel_change
β
m3_lcdc_tile_sel_change2
β
m3_lcdc_tile_sel_win_change
β
m3_lcdc_tile_sel_win_change2
β
m3_lcdc_win_en_change_multiple
β
m3_lcdc_win_en_change_multiple_wx
β
m3_lcdc_win_map_change
β
m3_lcdc_win_map_change2
β
m3_obp0_change
β
m3_scx_high_5_bits
β
m3_scx_high_5_bits_change2
β
m3_scx_low_3_bits
β
m3_scy_change
β
m3_scy_change2
β
m3_window_timing
β
m3_window_timing_wx_0
β
Other tests
Test
CoroGB
acid2
π
dycptest2
β
lyc
π
opus5
π
sprite_test_01
π
wx_split
π
windows_overlap
π
window_y_trigger
π
About
CoroGB is an experimental gameboy emulator written in C++ w/ coroutines