Ein minimales Nintendo Game Boy (DMG) Projekt in RGBDS-Assembly, das "HELLO WORLD!" auf dem Bildschirm rendert. Gebaut mit dem gameboy-programmer Skill-Workflow.
gameboy-hello/
├── main.rgbasm ; Entry point, VRAM-Setup, Tilemap-Aufbau, LCD-Enable
├── font.rgbasm ; 8x8 Pixel-Font (2bpp) für "HELLO WORLD!"
├── hardware.rgbinc ; Game Boy Hardware-Register Definitionen
├── Makefile ; RGBDS Build-Pipeline
└── game.gb ; Kompilierte ROM (nach `make`)
- RGBDS (rgbasm, rgblink, rgbfix) — Assembly-Toolchain
- mGBA (oder ein anderer Game-Boy-Emulator) — zum Testen
# Build-Deps
sudo apt-get update
sudo apt-get install -y build-essential git bison flex \
pkg-config libpng-dev zlib1g-dev
# RGBDS aus Quellen bauen
git clone https://github.com/gbdev/rgbds.git
cd rgbds && make -j$(nproc) && sudo make install && cd ..
make # erzeugt game.gb
make clean # räumt aufDie Pipeline (aus dem gameboy-programmer Skill):
rgbasm -Weverything -Werror -o main.o main.rgbasm
rgblink --dmg --tiny -m game.map -n game.sym -o game.gb main.o
rgbfix --title HELLO --pad-value 0 --validate game.gbrgbfix --validate prüft die ROM-Struktur (Header, Padding). Bei Erfolg:
game.gb: Game Boy ROM image: "HELLO" (Rev.00) [ROM ONLY].
Unter macOS mit installierter mGBA-App:
open -a mGBA game.gbWenn das mgba-Programm im PATH liegt:
mgba game.gbDu solltest dunkle Schrift auf einem hellen Hintergrund sehen.
- Entry point (
$0100):jp Start, danach Nintendo-Logo-Padding. - Start: Interrupts aus, Stack-Pointer setzen, auf VBlank warten (VRAM sicher beschreibbar).
- Font kopieren: Die 9 Glyphen (8x8, 2bpp) aus ROM → VRAM
$8000. - Tilemap aufbauen: Die Tilemap bei
$9800wird gelöscht; danach werden die Tile-Indizes von"HELLO WORLD!"ab$9800 + 3*32 + 6(Zeile 3, Spalte 6) geschrieben. - LCD an:
LCDCmit BG-on, Tilemap/Tiles-Adressen, Palette%11100100(dunkel auf hell). - Main loop: Eine Endlosschleife hält das statische Bild aktiv.
- Text ändern: In
main.rgbasmdenMessage:-Block anpassen. Tile-Indizes:0=space 1=H 2=E 3=L 4=O 5=W 6=R 7=D 8=!.$FFbeendet die Nachricht. Neue Buchstaben infont.rgbasmergänzen (16 Bytes pro Glyph, zwei aufeinanderfolgende Bitplane-Bytes pro Pixelzeile). - Position: Start-Adresse
$9800 + row*32 + colim.writeMsg-Block. - Farbe:
rBGPWert ändern (%11100100= dunkel auf hell,%00011001= hell auf dunkel).
-
makeläuft fehlerfrei durch (rgbasm -Weverything -Werror) -
rgbfix --validatemeldet "ROM VALID" - ROM lädt in mGBA 0.10.5 ohne ROM- oder Headerfehler
- Tilemap enthält korrekt decodiert "HELLO WORLD!"
MIT — mach was du willst.