11个版本

0.3.0 2021年1月17日
0.2.5 2019年6月29日
0.2.4 2019年1月12日
0.2.3 2018年12月23日
0.1.3 2018年8月20日

#653 in 游戏开发

每月30次下载

MIT许可

150KB
3.5K SLoC

GGBASM (生成Gameboy汇编器)

Build Status dependency status Crates.io Docs

作为Rust crate库的游戏boy汇编器。作为库而不是命令行应用程序,允许优雅地组合

  • 原始字节和从Rust代码生成的指令
  • 从*.asm文件读取的指令。

RomBuilder

RomBuilder是GGBASM的核心Rust API。

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

示例

查看示例文件夹heartacheGB

与RGBDS的比较

  • RGBDS只需要*.asm文件,而GGBASM需要*.asm和一个完整的Rust crate。
  • RGBDS需要运行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来构建ROM,而GGBASM使用cargo run来构建ROM
  • RGBDS在*.asm文件中使用include,而GGBASM使用Rust在ROM的正确位置插入指令和原始字节。
  • GGBASM具有生成字节的辅助函数,例如:png_to_gb_sprite
  • RGBDS有自己的类似Intel的语法,GGBASM语法使用RGBDS语法并添加了一些内容。从RGBDS的变化
    • 十六进制可以表示为0x2a,也可以表示为$2a
    • 使用advance_address 0xYYYY而不是section "FOO",$HOME[$YY]

依赖关系

~16MB
~122K SLoC