A systemVerilog implementation of the Game Boy on DE1-SoC
This was for CSEE 4840 Embedded System Design @ Columbia University
To make target files for DE1-SoC
make qsys && make quartus && make rbf
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| cpu instrs | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| dmg sound | :x: | :+1: | N/A | N/A | N/A | N/A | :x: |
| instr timing | :+1: | :+1: | N/A | N/A | N/A | N/A | :+1: |
| interrupt time | N/A | :x: | N/A | N/A | N/A | N/A | :x: |
| mem timing | N/A | :+1: | N/A | N/A | N/A | N/A | :+1: |
| mem timing 2 | :+1: | :+1: | N/A | N/A | N/A | N/A | :+1: |
| oam bug | :x: | :x: | N/A | N/A | N/A | N/A | :x: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| add sp e timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| call timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| call timing2 | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| call cc_timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| call cc_timing2 | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| di timing GS | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| div timing | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| ei sequence | :+1: | :+1: | :+1: | :+1: | :x: | :+1: | :+1: |
| ei timing | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| halt ime0 ei | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| halt ime0 nointr_timing | :+1: | :+1: | :+1: | :+1: | :+1: | :x: | :+1: |
| halt ime1 timing | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| halt ime1 timing2 GS | :+1: | :+1: | :+1: | :+1: | :+1: | :x: | :+1: |
| if ie registers | :+1: | :+1: | :+1: | :+1: | :+1: | :x: | :+1: |
| intr timing | :+1: | :+1: | :+1: | :+1: | :+1: | :x: | :+1: |
| jp timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| jp cc timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| ld hl sp e timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| oam dma_restart | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :x: |
| oam dma start | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| oam dma timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :x: |
| pop timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| push timing | :+1: | :x: | :x: | :+1: | :+1: | :+1: | :+1: |
| rapid di ei | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| ret timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| ret cc timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| reti timing | :+1: | :x: | :+1: | :+1: | :+1: | :+1: | :+1: |
| reti intr timing | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| rst timing | :+1: | :x: | :x: | :+1: | :+1: | :+1: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| daa | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| ie push | :+1: | :x: | :x: | :x: | :x: | :+1: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| basic | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| reg_read | :+1: | :+1: | :+1: | :x: | :x: | :+1: | :+1: |
| sources dmgABCmgbS | :+1: | :+1: | :x: | :x: | :x: | :x: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| boot sclk align dmgABCmgb | :x: | :+1: | :+1: | :x: | :x: | :+1: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| hblank ly scx timing GS | :+1: | :+1: | :x: | :x: | :+1: | :x: | :x: |
| intr 1 2 timing GS | :+1: | :+1: | :+1: | :+1: | :+1: | :x: | :x: |
| intr 2 0 timing | :+1: | :+1: | :x: | :+1: | :+1: | :x: | :x: |
| intr 2 mode0 timing | :+1: | :+1: | :x: | :x: | :+1: | :x: | :+1: |
| intr 2 mode3 timing | :+1: | :+1: | :x: | :x: | :+1: | :x: | :+1: |
| intr 2 oam ok timing | :+1: | :+1: | :x: | :x: | :+1: | :x: | :+1: |
| intr 2 mode0 timing sprites | :x: | :+1: | :x: | :x: | :+1: | :x: | :x: |
| lcdon timing dmgABCmgbS | :x: | :+1: | :x: | :x: | :x: | :x: | :x: |
| lcdon write timing GS | :x: | :+1: | :x: | :x: | :x: | :x: | :x: |
| stat irq blocking | :x: | :+1: | :+1: | :x: | :+1: | :x: | :+1: |
| stat lyc onoff | :x: | :+1: | :x: | :x: | :x: | :x: | :x: |
| vblank stat intr GS | :+1: | :+1: | :x: | :+1: | :+1: | :x: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| div write | :+1: | :+1: | :x: | :+1: | :+1: | :+1: | :+1: |
| rapid toggle | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tim00 div trigger | :+1: | :+1: | :+1: | :x: | :+1: | :+1: | :+1: |
| tim00 | :+1: | :+1: | :x: | :+1: | :+1: | :+1: | :+1: |
| tim01 div trigger | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tim01 | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: | :+1: |
| tim10 div trigger | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tim10 | :+1: | :+1: | :x: | :+1: | :+1: | :+1: | :+1: |
| tim11 div trigger | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tim11 | :+1: | :+1: | :x: | :+1: | :+1: | :+1: | :+1: |
| tima reload | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tima write reloading | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| tma write reloading | :+1: | :+1: | :x: | :x: | :+1: | :+1: | :+1: |
| Test | mooneye-gb | BGB | Gambatte | Higan | MESS | VerilogBoy | Ours |
|---|
| MBC1 | N/A | :+1: | N/A | N/A | N/A | N/A | :+1: |
| MBC5 | N/A | :+1: | N/A | N/A | N/A | N/A | :+1: |
Note: MBC3 test ROM was not created at the time of testing.