Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ulrikdamm/Assembler
Assembler for Gameboy games
https://github.com/ulrikdamm/Assembler
Last synced: 2 months ago
JSON representation
Assembler for Gameboy games
- Host: GitHub
- URL: https://github.com/ulrikdamm/Assembler
- Owner: ulrikdamm
- Created: 2016-09-10T13:52:28.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-10-21T10:11:09.000Z (over 2 years ago)
- Last Synced: 2024-01-24T12:34:44.139Z (5 months ago)
- Language: Swift
- Homepage:
- Size: 260 KB
- Stars: 117
- Watchers: 5
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Lists
- awesome-gbdev - Assembler - Assembler written in Swift. (Software Development / Compilers)
- awesome-gb-dev-zh - ζ±ηΌη¨εΊ
README
# 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:
```assembly
# Simple smiley
# Displays a smiley sprite in the upper left corner of the screenbg_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:
![Smiley example screenshot](https://d17oy1vhnax1f7.cloudfront.net/items/2t2s3q1J3E3Y2Z3e2p1D/smiley.png?v=dff06f03)
There are more examples in the examples folder:
[Smiley sprite](Examples/smiley.asm) | [Hello world](Examples/helloworld.asm) | [Directional pad movement](Examples/movement.asm)
## Usage
Quick start:
```bash
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
π Optional linker output showing all symbol locations (run with `--output-symbols`)
π Relative jumps (`jr`)
π Updated syntax (uses [] instead of () for direct memory access, as in `ld a, [0xff46]`)
π Example code showing gamepad input and DMA transfers
π Fixed problems with loads between a and memory that wouldn't assemble properly### New in version 1.1
π Ability to use labels in expressions (e.g. `ld a, (data_end - data)`)
π Allows empty labels (useful for the first point)
π Better command line interface, allows relative paths
π Updated examples
π Fixed loading of values between A and memory addresses (e.g. `ld a, (0xff00 + 0x44)`)### Implemented features
β Assembly parsing
β Code generation
β Linking
β All of the Gameboy instruction set
β Error reporting with line numbers
β Command line interface
β Constant defines
β Build-time expressions
β Strings### Todo
β‘οΈ Imports and file modules
β‘οΈ Smart layout of disconnected blocks in linker
β‘οΈ Support for variables though `ds` (define storage)### Wish list
π More awesome example programs
π Sprite importer (manually entering pixel hex codes suck. Maybe a way of defining sprites in ASCII art?)
π Graphical code editor## 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.