This project aims to build a GameBoy CPU with the following functionality:
- Execute GameBoy opcodes with complete Cycle-Accuracy
- Implement the Timer Circuit
- Service Timing Interups
- Handle the Halt Bug (should work, can't confirm until PPU is added)
- ei before halt, (IE&IF != 0, IME = 0), call ISR but return to halt
- rst after halt bug (IE&IF != 0, IME = 0), push address of rst to stack, not rst+1
- halt, (IE&IF != 0, IME = 0), read next opcode twice
- halt, (IE&IF != 0, IME = 1), call ISR and continue normally
- ei before halt, (IE&IF != 0, IME = 0), rst after halt. Call ISR, return to halt, rst works normally
The following components are not in the scope of this repository:
- PPU
- APU
- DMA
- Boot ROM
- MBC Cartridges
Test | Result |
---|---|
cpu_instrs | ✅ |
instr_timing | ✅ |
mem_timing | ✅ |
halt_bug | ❌ (requires Vblank interrupt, can't test in this scope) |
Name | Description |
---|---|
GameBoy Instruction Set | Table View of GameBoy Opcodes |
PanDocs | General Device Documentation |
rgbds Docs | In-Depth Command Documentation |
GameBoy Complete Technical Reference | Cycle-by-Cycle Opcode Breakdowns |
mGBA gbdoc | Additional Device Documentation |
blarggs Test ROMS | Test ROMS |
Mooneye Test ROMS | Test ROMS |
GameBoy Doctor | Support Tool for blargg Test ROMS |