Skip to content

CoroGB is an experimental gameboy emulator written in C++ w/ coroutines

License

Notifications You must be signed in to change notification settings

TheThief/CoroGB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CoroGB

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 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!

MBC2

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

MBC5

Test mooneye-gb
rom 512kb 👍
rom 1Mb 👍
rom 2Mb 👍
rom 4Mb 👍
rom 8Mb 👍
rom 16Mb 👍
rom 32Mb 👍
rom 64Mb 👍

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages