book | ||
docs | ||
examples | ||
src | ||
.gitignore | ||
build.bat | ||
Cargo.toml | ||
crt0.s | ||
LICENSE-APACHE2.txt | ||
linker.ld | ||
README.md | ||
rustfmt.toml | ||
thumbv4-nintendo-agb.json |
gba
A crate that helps you make GBA games
First Time Setup
ketsuban is the wizard who explained to me how to do this stuff.
-
Install
devkitpro
. They have a graphical installer for Windows, or you can use pacman or whatever for linux things I guess. The goal here, among other things, is to have abinutils
setup that's targetingarm-none-eabi
. We'll also use some of their tools that are specific to GBA development so if you for some reason already have the appropriatebinutils
then you probably still want devkitpro.- On Windows you'll want something like
C:\devkitpro\devkitARM\bin
andC:\devkitpro\tools\bin
to be added to your PATH. I'm not sure on the directories for other systems. If you know then file a PR with the info.
- On Windows you'll want something like
-
Next we use
cargo install cargo-xbuild
to get that all setup. -
Create a binary project. We're going to want nightly rust for this, so if you don't already have it set to default to nightly you should set that up for this project.
-
Clone this repo. It has an appropriate
main.rs
that will draw three test dots as well as other support files:
- crt0.s
- linker.ld
- thumbv4-nintendo-agb.json
- build.rs
-
Run
arm-none-eabi-as crt0.s -o crt0.o
to build thecrt0.s
into acrt0.o
file. You could theoretically to it only whencrt0.s
changes, but in outbuild.bat
file it's set to simply run every single time because it's a cheap enough operation. -
Build with
cargo xbuild --target thumbv4-nintendo-agb.json
- The file extension is significant, and
cargo xbuild
takes it as a flag to compile dependencies with the same sysroot, so you can include crates normally. Well, crates that can run inside a GBA at least (Which means they have to beno_std
, and evenno_alloc
). - This generates an ELF binary that some emulators can run directly (which is helpful because it has debug symbols).
- Also you can patch up the output to be a "real" ROM file:
arm-none-eabi-objcopy -O binary target/thumbv4-nintendo-agb/debug/gbatest target/output.gba
gbafix target/output.gba
-
Alternately, you can use the provided
build.bat
file (or write a similarbuild.sh
file of course), which does all four steps above. -
Time to read the Tonc tutorial and convert all the C code you see into rust code.
- Also of great importance and help is the gbatek document.
- In time we'll have our own book that's specific to rust and this crate and all that, but until then you're gonna have to look at a bunch of C code.
Contribution
This crate is Apache2 licensed and any contributions you submit must also be Apache2 licensed.