issues
search
m0xsec
/
ferrum
Gameboy Emulator written in Rust
1
stars
0
forks
source link
High-level project outline
#3
Closed
m0xsec
closed
1 year ago
m0xsec
commented
1 year ago
CPU:
Emulate the custom Z80-like 8-bit CPU used in the GameBoy.
Implement the instruction set, registers, flags, and interrupts.
Memory:
Implement memory mapping for the different memory regions:
ROM (read-only memory)
RAM (random access memory)
VRAM (video RAM)
OAM (object attribute memory, for sprite attributes)
I/O registers
High RAM (HRAM)
Handle memory read/write operations and bank switching (for larger ROMs and RAM).
GPU (Graphics Processing Unit):
Emulate the GameBoy's pixel processing unit (PPU) and its associated rendering pipeline.
Implement background, window, and sprite rendering.
Handle palette management and colorization.
Manage the display timing, including the different modes (HBlank, VBlank, etc.) and their respective durations.
Timers:
Implement the different timers (DIV, TIMA, and TMA) and their respective registers.
Handle timer interrupts.
Input:
Implement input handling for the GameBoy's buttons (D-pad, A, B, Start, and Select).
Manage input-related memory addresses and interrupts.
Sound:
Emulate the GameBoy's sound processing unit (APU), which includes four sound channels:
Two pulse wave channels (Square 1 and Square 2)
One programmable waveform channel (Wave)
One noise channel (Noise)
Implement the relevant sound registers and their behavior.
Cartridge and MBC (Memory Bank Controller):
Implement support for different cartridge types and MBCs.
Handle cartridge header parsing, ROM and RAM bank switching, and save file management.
Debugging and testing:
Create a debugger and/or logging system to help identify and fix issues during development.
Test the emulator using test ROMs and legal games to ensure accuracy and compatibility.
Frontend/UI:
Develop a user-friendly interface for loading ROMs, configuring controls, managing save states, and adjusting emulator settings.
CPU:
Memory:
Implement memory mapping for the different memory regions:
GPU (Graphics Processing Unit):
Timers:
Input:
Sound:
Cartridge and MBC (Memory Bank Controller):
Debugging and testing:
Frontend/UI: