11 releases

0.3.0 Jan 17, 2021
0.2.5 Jun 29, 2019
0.2.4 Jan 12, 2019
0.2.3 Dec 23, 2018
0.1.3 Aug 20, 2018

#698 in Game dev

30 downloads per month

MIT license

150KB
3.5K SLoC

GGBASM (Generating Gameboy Assembler)

Build Status dependency status Crates.io Docs

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.

RomBuilder

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")?;

Examples

Check out the examples folder and heartacheGB.

Comparison with RGBDS

  • 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.gb to build the rom, while GGBASM uses cargo run to 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
    • uses advance_address 0xYYYY instead of section "FOO",$HOME[$YY]

Dependencies

~8MB
~124K SLoC