CoroGB is an experimental gameboy emulator written in C++ w/ coroutines
It is primarily developed for personal advancement, but is hopefully of interest.
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)
Up / Down / Left / Right / Z / X / RShift / Enter
Numpad+ is speed up
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
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
Test | mooneye-gb | CoroGB |
---|---|---|
mem oam | 👍 | 👍 |
reg f | 👍 | 👍 |
unused_hwio GS | 👍 | 👍 |
Test | mooneye-gb | CoroGB |
---|---|---|
daa | 👍 | 👍 |
Test | mooneye-gb | CoroGB |
---|---|---|
ie push | 👍 | 👍 |
Test | mooneye-gb | CoroGB |
---|---|---|
basic | 👍 | 👍 |
reg_read | 👍 | 👍 |
sources dmgABCmgbS | 👍 | 👍 |
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!
Test | mooneye-gb | CoroGB |
---|---|---|
boot sclk align dmgABCmgb | ❌ | ❌ |
Notes:
- Serial clock not implemented
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
Test | mooneye-gb | CoroGB |
---|---|---|
bits bank1 | 👍 | 👍 |
bits bank2 | 👍 | 👍 |
bits mode | 👍 | 👍 |
bits ramg | 👍 | 👍 |
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!
Test | mooneye-gb | CoroGB |
---|---|---|
bits ramg | 👍 | 👍 |
bits romb | 👍 | 👍 |
bits unused | 👍 | 👍 |
rom 512kb | 👍 | 👍 |
rom 1Mb | 👍 | 👍 |
rom 2Mb | 👍 | 👍 |
ram | 👍 | ❌ |
Notes:
- Ram test fails due to not implementing cart ram mirror and not restricting cart ram to 4 bits
Test | mooneye-gb |
---|---|
rom 512kb | 👍 |
rom 1Mb | 👍 |
rom 2Mb | 👍 |
rom 4Mb | 👍 |
rom 8Mb | 👍 |
rom 16Mb | 👍 |
rom 32Mb | 👍 |
rom 64Mb | 👍 |
Test | mooneye-gb | CoroGB |
---|---|---|
sprite priority | 👍 | 👍 |
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 | ❌ |
Test | CoroGB |
---|---|
acid2 | 👍 |
dycptest2 | ❌ |
lyc | 👍 |
opus5 | 👍 |
sprite_test_01 | 👍 |
wx_split | 👍 |
windows_overlap | 👍 |
window_y_trigger | 👍 |