npm install gbasmgbasm is a JavaScript based compiler for Gameboy z80 assembly code.
gbasm is mainly being developed for and tested with Tuff.
1. Install Node.js
2. Now install gbasm by running npm install -g gbasm
``
Usage: gbasm [options] [sources]
--outfile, -o : The name of the output rom file (default: game.gb)
--optimize, -O: Enable instruction optimizations
--mapfile, -m : Generates a ASCII overview of the mapped ROM space
--symfile, -s : Generates a symbol map compatible with debuggers
--jsonfile, -j : Generates a JSON data dump of all sections with their data, labels, instructions etc.
--silent, -S: Surpresses all logging
--debug, -d: Enable support for custom "msg" debug opcodes',
--verbose, -v: Surpresses all logging
--version: Displays version information
--help: Displays this help text
`
- __ --outfile / -o __
Specifies the filename of the generated ROM image.
- __ --optimize / -O __
Turns on assembly optimizations which are automatically performed during linkage.
- __ --mapfile / -m__
Generates a ASCII overview of the mapped ROM areas.
- __ --symfile / -s __
Generates a symbol map file for use with Debuggers (e.g. bgb)
- __ --debug / -d __
Enables support for custom msg opcodes for use with Debuggers (e.g. bgb)
`asm`
; This will log "Debug Message" when run in the debugger
msg "Debug Message"
msg
> Note: The opcode will be ignored when compiling without the flag.
- __ --jsonfile / -j __
Generates a json file that contains the fully linked ROM data serialized into a detailed format useable for further, custom processing.
gbasm is mostly compatible with rgbds
but there are some deviations and additions:
- gbasm is a multipass compiler, meaning the all sources files and definitions
are parsed before resolving any names or sizes.
- The load accumulator and increment/decrement hl type instructions only take hli and hld as their second operand[
- Memory operands do only support and ] in their syntax
- All names and labels which start with an underscore are treated as being local / private to the file they were defined in
- Most of the pre-defined macros from rgbds are available (e.g. COS, STRLWR etc.)
- User defined macros come in two flavors:
1. __Expression Macros__
These macros contain only a single expression statement and can be used as values everywhere a built-in macro could be used:
`asm
MACRO add(@a, @b)
@a + @b
ENDMACRO
DB add(2, 5) ; essentially DB 7
`Numbers
Expression Macros can take and Strings as their arguments.
2. __Expansion Macros__
These are macros in the classical sense which just expand into additional assembler code:
`asm
MACRO header()
DB $11,$22,$33,$44,$55
DW $1234,$4567
ENDMACRO
header(); expands into the DB and DW diretives above
`
In addition to Strings and Numbers, expansion macros can also take Registers as their arguments.`
asm
MACRO ld16(@number, @a, @b)
ld @a,@number >> 8
ld @b,@number & $ff
ENDMACRO
ld16($1234, b, c); turns into ld b,$12 and ld c,$34
``
Licensed under MIT.