An experimental Game Boy Emulator written in Java
Game Boy Color | Game Boy |
---|---|
CPU
Emulation with decompiler and debugger (with execution and memory breakpoints)PPU
EmulationAPU
Emulation with 2Pulse Channels
, aWave Channel
and aNoise Channel
(no stereo output yet)- Persistent
RAM
when supported by the cartridge - Basics
MBCs
:
- Load a ROM
- Pause / Resume emulation
- Reset
- Change emulation speed
- Enable / Disable RTC
- Enable / Disable Bootstrap
- Specify Bootstrap ROMs (for DMG and CGB)
- Edit Gamma factor for color correction (Only in CGB Mode)
- Select an existing DMG palette or customize it yourself
- Choose audio output
- Change master volume
- Enable / Disable audio channels
- Input customization (No gamepad support yet)
- Enable/Disable cheats
- Add/Remove cheats
- Enter step by step code execution
- Display flags and
CPU registers
(as 8bit and merge as 16bit) - Display the current code execution
- Manage breakpoints (Execution, Memory access ...)
- Display one page of memory (256 bytes)
- Search for a specified address
- Display RAW memory as ASCII and hexadecimal
- Display which sector a RAM address belongs to
- Display
RAM
with color gradient to help spot patterns - Display a formatted view of the I/O registers
- Display the
tilemaps
and current viewport and tile information - Display the
tileset
with tile information - Display the
palettes
with color details - Display
OAM
as list and as a rendered layer
- Display waveforms of all Audio Channels and the master DAC
- Display the state of the Audio Registers and the Wave data
- Display the serial output of the Game Boy as a String
- Display emulator information (Emulation reset, Breakpoint reached ...)
- Enable user to enter commands (type help for list of commands)
Each of the following features run on a dedicated thread :
- Gameboy core hardware (CPU, APU, PPU, MMU, Timers, Cartridge)
- Windows rendering routines (Screen rendering, ImGui Layers, Input capture, Console command (Forwarded to the Console Thread))
- Debugger (CPU and MMU snapshots, breakpoint system, PPU Debug rendering, APU Visualizer and Serial Output)
- Console interpreter
To launch the Emulator set the Main Class to Main.java
-
CPU
implementation -
Memory Management Unit
implementation - OpenGL and ImGui layers
-
PPU
implementation -
Cartridge
implementation -
APU
with all channels implementation - Debugger, PPU and APU visualization
- Console and breakpoints
- MBC1
- MBC2
- MBC3
- MBC5
- Game Boy Color features
- Settings pannel (Inputs, Audio, Graphics ...)
- Multithreading
- GameShark cheats
- Input customization (W.I.P.)
- Keyboard support
- Extended key range
- Gamepad support
- Add modular post-processing pipeline
- Javadoc
- Pokémon Red and Blue run but render at half speed, even though audio run mostly as intended
- Pokémon Yellow not booting at all, it loops reading screen registers
LCDC or STAT
- GBDev Pan Docs A very comprehensive documentation on the Game Boy's inner workings
- Gameboy CPU Manual A complete document explaining the CPU's inner workings (opcodes, timing, registers ...)
- gbops A list of the opcodes of the Gameboy's custom CPU
- Gameboy OPCODES Another list of the opcodes of the Game Boy's custom CPU, known to have some mistakes regarding some instruction sizes
- LWJGL 3 : OpenGL Wrapper for Java (and other useful utilities)
- Beads : Audio library used for generating waveforms
- ImGui-Java : Dear ImGui wrapper for Java
This project is licensed under the MIT license