GGBASM (Generating Gameboy Assembler)
A gameboy assembler as a rust crate library. Being a library instead of command line application, allows for an elegant combination of:
- raw bytes and instructions generated from rust code
- instructions read from *.asm files.
The RomBuilder is the core rust api of GGBASM.
RomBuilder::new()? // Starts off in the first rom bank // A simple example doesnt need to deal with interrupts and jumps, so generate a dummy .add_basic_interrupts_and_jumps()? // generate a header from data in the passed header struct .add_header(header)? // Add game code via an asm file .add_asm_file("main.asm")? // Add an image to the second rom bank .advance_address(1, 0)? .add_image("tiles.png", "GraphicsBinary", &colors_map)? // Consume the RomBuilder and write the rom to disk .write_to_disk("my_cool_game.gb")?;
- RGBDS requires only *.asm files, while GGBASM requires *.asm, and an entire rust crate.
- RGBDS needs to run
RGBDS -o main.obj src/main.asm; rgblink -m game.map -n game.sym -o out.gb main.obj; rgbfix -p 0 -v out.gbto build the rom, while GGBASM uses
cargo runto build the rom
- RGBDS uses includes inside the *.asm files, while GGBASM uses rust to insert instructions and raw bytes at the correct location in the rom.
- GGBASM has helper functions for generating bytes such as: png_to_gb_sprite
- RGBDS has its own intel-like syntax, GGBASM syntax uses RGBDS syntax with a few additions. Changes from RGBDS are:
- hexadecimal can be represented as 0x2a as well as $2a
advance_address 0xYYYYinstead of