Optime GBA is a work-in-progress Game Boy Advance and Nintendo DS emulator.
I aim to develop Optime GBA to the point where it can run most popular games with decent performance. So far, optimization is somewhat lackluster, only managing around 400 frames per second in Pokémon Emerald on a high-end machine.
- Passing all of ARMWrestler, a simple test of the GBA's CPU
- Passing all of jsmolka's gba-suite CPU instruction tests
- 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
- Cold boot through firmware works
- Booting many popular games, including New Super Mario Bros. and Pokémon Platinum
- Further optimization
- Seek out any unimplemented ARM7TDMI quirks that may remain
- Implement remaining PPU features, fix PPU bugs
- Sprite mosaic
- Flash and EEPROM save memory
- Nintendo DS extended 2D graphical features
- 3D graphics
- Dynamic recompiler, possibly in the far future
- A - X
- B - Z
- X - S
- Y - A
- Start - Enter
- Select - Backspace
- Left - Left
- Right - Right
- Up - Up
- Down - Down
- 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
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.
Please prepare both GBA and NDS firmware.
Put your ROMs under roms/
.
# OpenTK Debugger
dotnet run -c Release -p OptimeGBA-OpenTK.csproj
# Simple SDL Frontend
dotnet run -c Release -p OptimeGBA-SDL.csproj
Drag and drop your rom into the main window.