3.7 KiB
ZBA (working title)
A Game Boy Advance Emulator written in Zig ⚡!
Scope
I'm hardly the first to write a Game Boy Advance Emulator nor will I be the last. This project isn't going to compete with the GOATs like mGBA or NanoBoyAdvance. There aren't any interesting ideas either like in DSHBA.
This is a simple (read: incomplete) for-fun long-term project. I hope to get "mostly there", which to me means that I'm not missing any major hardware features and the set of possible improvements would be in memory timing or in UI/UX. With respect to that goal, here's what's outstanding:
TODO
- Affine Sprites
- Windowing (see this branch)
- Shaders (see this branch)
- Audio Resampler (Having issues with SDL2's)
- Immediate Mode GUI
- Refactoring for easy-ish perf boosts
Tests
- jsmolka's GBA Test Collection
arm.gba
andthumb.gba
flash64.gba
,flash128.gba
,none.gba
, andsram.gba
hello.gba
,shades.gba
, andstripes.gba
memory.gba
bios.gba
nes.gba
- DenSinH's GBA ROMs
eeprom-test
andflash-test
midikey2freq
swi-tests-random
- destoer's GBA Tests
cond_invalid.gba
dma_priority.gba
hello_world.gba
if_ack.gba
line_timing.gba
lyc_midline.gba
window_midframe.gba
- ladystarbreeze's GBA Test Collection
retAddr.gba
helloWorld.gba
helloAudio.gba
armwrestler-gba-fixed.gba
- FuzzARM
Resources
Compiling
Most recently built on Zig 0.10.0-dev.4324+c23b3e6fd
Dependencies
bitfields.zig
from FlorenceOS is included under lib/util/bitfield.zig
.
Use git submodule update --init
from the project root to pull the git submodules SDL.zig
, zig-clap
, known-folders
, zig-toml
and zig-datetime
Be sure to provide SDL2 using:
- Linux: Your distro's package manager
- MacOS: ¯\_(ツ)_/¯
- Windows:
vcpkg
(installsdl2:x64-windows
)
SDL.zig
will provide a helpful compile error if the zig compiler is unable to find SDL2.
Once you've got all the dependencies, execute zig build -Drelease-fast
. The executable is located at zig-out/bin/
.
Controls
Key | Button |
---|---|
X | A |
Z | B |
A | L |
S | R |
Return | Start |
RShift | Select |
Arrow Keys | D-Pad |