From 27359b442c139e5cec1ac36b50b427fb828e73e6 Mon Sep 17 00:00:00 2001 From: gbc dev Date: Sat, 18 Jul 2026 22:47:08 +0200 Subject: docs: document the SL0PBOY boot-logo patcher (tools/mk_sl0pboy_bios.py) Add a BIOS subsection covering usage (Pillow dep, SL0P_TEXT/SL0P_FONT knobs, the preview PNG), how the in-place $0607 blob patch works, and why the forked binary stays out of git while the generator ships. --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index d53f728..e0e5f80 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,35 @@ pokes `0xFF50`, just like hardware. 256 bytes → boots as DMG; 2304 bytes (like the bundled `bios/gbc_bios.bin`) → boots as CGB, which also colorizes plain DMG games via the boot ROM's compatibility palette. +### SL0PBOY boot logo (`tools/mk_sl0pboy_bios.py`) + +Fork the CGB boot ROM so the power-on animation reads **SL0PBOY** instead of +**GAME BOY** — same italic drop, colorize and chime: + +```sh +pip install pillow # needs Pillow + a bold-italic TTF +tools/mk_sl0pboy_bios.py # bios/gbc_bios.bin -> bios/sl0pboy_bios.bin +./build/sl0pboy --bios bios/sl0pboy_bios.bin --sixel 3 --chrome roms/pky.gbc +SL0P_TEXT='SL0P' tools/mk_sl0pboy_bios.py # or brand it whatever you like +``` + +It also drops a `bios/sl0pboy_bios.bin.preview.png` so you can eyeball the +wordmark before booting. Env knobs: `SL0P_TEXT` (default `SL0PBOY`), `SL0P_FONT` +(default LiberationSans-BoldItalic). + +**How it works.** The stock CGB boot ROM draws its GAME BOY wordmark from a +192-byte blob at `0x0607` — the routine at `0x03F0` copies it to VRAM tiles +`0x08-0x37`: 48 tiles (16×3, tile-sequential), 4 bytes each, every byte one +8-px row that the copy loop doubles vertically (plane 1 stays 0). The script +re-encodes that blob from a bold-italic bitmap and patches it **in place** — +no code moves, and the cart's own Nintendo logo (`0x0104`) is untouched, so the +boot ROM's integrity check still passes and it hands off to the game normally. + +> `bios/` is git-ignored (the stock boot ROM is copyrighted Nintendo material), +> so the forked binary lives only in your working tree — regenerate it any time +> from your local `bios/gbc_bios.bin`. The script itself ships only our original +> logo art + the patch offset. + ## Headless serial console (`--headless`) Bringing up an OS/monitor on the emulated Game Boy? `--headless` kills all -- cgit v1.3.1-sl0p