#save #gba #flash #eeprom #sram #no-alloc #gba-flash

no-std gba_save

Tools for interacting with backup media on Game Boy Advance cartridges

1 unstable release

new 0.1.0 May 4, 2025

#638 in Game dev

MIT/Apache

135KB
3K SLoC

gba_save

GitHub Workflow Status crates.io docs.rs License

Tools for interacting with backup media on Game Boy Advance cartridges.

The Game Boy Advance has three forms of backup media for saving data: SRAM, EEPROM, and Flash. This library provides tools for interacting with all three different types.

Example Usage

To write and read save data using SRAM, use something like the following:

use deranged::RangedUsize;
use embedded_io::{Read, Write};
use gba_save::sram::Sram;

let mut sram = unsafe {Sram::new()};
let mut writer = sram.writer(RangedUsize::new_static<0>()..RangedUsize::new_static<15>());

// Write some data.
//
// Note that you'll usually want to handle the error here.
writer.write(b"hello, world!").expect("could not write to SRAM");

// Write some more data.
writer.write(b"123").expect("could not write to SRAM");

// Read the data back.
let mut reader = sram.reader(RangedUsize::new_static<0>()..RangedUsize::new_static<15>());
let mut buffer = [0; 16];
assert_eq!(reader.read(&mut buf), 16);
// Both things that were written will be read back.
assert_eq!(buffer, b"hello, world!123");

See the documentation for more details and examples for interacting with SRAM and the other backup media types.

Optional Features

  • serde: Enable serializing and deserializing the variuos error types using the serde library.
  • log: Enable log messages using the log library. Helpful for development. This is best used when paired with a logger like mgba_log or nocash_gba_log.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~135–305KB