Gameboy Assembler
Small assembler for Gameboy assembly programs written in Swift.
Assembly syntax mostly follows other assemblers, but is probably not compatible.
Takes an assembly file as input, produces a binary, which can be executed in a Gameboy emulator.
Is fairly feature complete, supports all of the instruction set. Still missing some nice-to-have features, see the todo below.
Example program
Here is a small example Gameboy program, which displays a smiley sprite on screen:
# Simple smiley
# Displays a smiley sprite in the upper left corner of the screen
bg_tile_map = 0x9800
bg_tile_data = 0x9000
[org(0x4000)] graphics: db 0x00, 0x24, 0x24, 0x00, 0x81, 0x7e, 0x00, 0x00
[org(0x100)] start: nop; jp main
[org(0x134)] game_title: db "SMILEY"
[org(0x150)] main:
# Set LCDC (bit 7: operation on, bit 0: bg and win on)
ld hl, 0xff40
ld [hl], (1 | (1 << 7))
# Set first bg tile
ld h, (bg_tile_map >> 8)
ld l, (bg_tile_map & 0xff)
ld [hl], 1
# Set the tile data
ld h, (bg_tile_data >> 8)
ld l, ((bg_tile_data & 0xff) + 16)
ld b, 8
ld de, 0x4000
loop:
ld a, [de]
inc de
ld [hl+], a
ld [hl+], a
dec b
jp nz, loop
# Set bg palette data
ld hl, 0xff47
ld [hl], 0xe4
end: jp end
[org(0x7fff)] pad: db 0x00
This is how it looks:
There are more examples in the examples folder:
Smiley sprite | Hello world | Directional pad movement
Usage
Quick start:
git clone [email protected]:ulrikdamm/Assembler.git
cd Assembler
swift build -c release
./.build/release/Assembler input.asm
You can compile the app from the Xcode project or by running swift build
(the executable will be in .build/debug/Assembler)
You compile source code with Assembler input.asm
.
It also contains a dynamic framework which you can import into a macOS or iOS app.
Project status
The assembler is stable and able to produce working binaries. See below for which features are supported and which are yet to come.
New in version 1.2
--output-symbols
)
jr
)
ld a, [0xff46]
)
New in version 1.1
ld a, (data_end - data)
)
ld a, (0xff00 + 0x44)
)
Implemented features
Todo
ds
(define storage)
Wish list
Contributing
Right now it's still a personal project, and I might not be accepting pull requests for new features. Bug fixes and more tests are welcome though.
If you find a bug or a missing feature, feel free to submit an issue.