OptimeGBA
OptimeGBA copied to clipboard
Optime GBA - Nintendo Game Boy Advance (and WIP Nintendo DS) emulator, written in C# with .NET Core.
trafficstars
Welcome to Optime GBA!
Optime GBA is a work-in-progress Game Boy Advance and Nintendo DS emulator.
Current Progress
- Passing all of ARMWrestler, a simple test of the GBA's CPU
- Passing all of jsmolka's gba-suite CPU instruction tests
GBA
- Timers and DMA are implemented
- Audio is fully implemented and sounds great on all games
- Near complete emulation of the Pixel Processing Unit (PPU)
- Save files work for games using flash memory
Nintendo DS
- Cold boot through firmware works
- Booting many popular games, including New Super Mario Bros. and Pokémon Platinum
Future Plans
- Further optimization
- Seek out any unimplemented ARM7TDMI quirks that may remain
GBA
- Implement remaining PPU features, fix PPU bugs
- Sprite mosaic
Nintendo DS
- Flash and EEPROM save memory
- Nintendo DS extended 2D graphical features
- 3D graphics
- Dynamic recompiler, possibly in the far future
Controls
- A - X
- B - Z
- X - S
- Y - A
- Start - Enter
- Select - Backspace
- Left - Left
- Right - Right
- Up - Up
- Down - Down
Accessory Controls
- Turbo - Tab, Space
- Toggle Color Correction - F1
- Toggle Sound FIFO A - F3
- Toggle Sound FIFO B - F4
- Toggle Sound PSG 1 - F5
- Toggle Sound PSG 2 - F6
- Toggle Sound PSG 3 - F7
- Toggle Sound PSG 4 - F8
- Fullscreen - ALT + Enter, F11
Screenshots

Running
For building and using Optime GBA, .NET 5 is recommended. You also need a CPU with AVX2 support because I completely overdid the renderer.
A compatible Game Boy Advance BIOS image is required to run the emulator. Place the BIOS in the emulator working directory (the root of the repository when using dotnet run) named as gba_bios.bin.
For running Nintendo DS games, official Nintendo DS firmware, ARM9 BIOS, and ARM7 BIOS dumps are required. Place the dumps named as firmware.bin, bios9.bin, bios7.bin, respectively, in the emulator working directory.
# OpenTK Debugger
dotnet run -c Release -p OptimeGBA-OpenTK.csproj
# Simple SDL Frontend
dotnet run -c Release -p OptimeGBA-SDL.csproj