aboutsummaryrefslogtreecommitdiffstats
path: root/tools (follow)
Commit message (Collapse)AuthorAgeFilesLines
* tools: mk_sl0pboy_bios.py - fork the CGB boot ROM's GAME BOY -> SL0PBOYgbc dev3 days1-0/+85
| | | | | | | | | | | | | The stock CGB boot ROM draws its GAME BOY wordmark from a 192-byte blob at $0607 (routine $03F0 copies it to VRAM tiles $08-$37: 48 tiles, 4 bytes each, every byte a row doubled vertically). This re-encodes that blob with a bold-italic SL0PBOY bitmap of the same size and patches it in place over a local bios/gbc_bios.bin -> bios/sl0pboy_bios.bin. No code moves; the cart's own Nintendo logo ($104) is untouched so the integrity check still passes and the boot hands off normally. bios/ stays gitignored (copyrighted boot ROM); run this to produce the fork locally. Verified end to end: logo drop + color + chime -> gbos.
* rebrand: gbc -> sl0pboy (binary, README, tooling)gbc dev5 days4-4/+4
|
* serial: headless mode tying serial port to stdio for OS debugginggbc dev6 days2-0/+0
| | | | | | | | - --headless: no rendering/TUI; serial TX -> stdout, RX <- stdin (nonblocking) - generalize serial: serial_out_fd/serial_in_fd on the GB; internal-clock transfer now shifts in a real RX byte (from stdin) instead of always 0xFF - paced to native speed by default, --uncapped for turbo; pipes/scripts cleanly - README: document headless serial console
* control: video frame capture + deterministic input-movie replaygbc dev6 days2-0/+187
| | | | | | | | | | | | | | | Two socket features for building reproducible showcase clips: - record start <path> [everyN] / record stop: append the RGB888 framebuffer of each produced frame to a flat 'GBCV' capture file (downsample with everyN). tools/gbgif.py turns it into a GIF (or PNG frames). Capture is decoupled from wall-clock/turbo/frameskip, so timing is always correct. - input play <path> [reset] / input stop: drive the joypad from a synthesized TAS-style movie (text: '<frames> [buttons...]' per line), frame-locked so replay is deterministic. 'reset' does an exact power-on (preserve cart ROM+SRAM, zero all other state) so a movie replays byte-identically -- verified by hashing two runs. tools/gbmovie.py is a Python builder for movies.
* tools: stitch_overworld.py - DFS EXPLORE's connection graph into one ↵gbc dev7 days1-0/+111
| | | | overworld image
* gbhud: live joypad display (cute Game Boy layout, buttons light up)gbc dev7 days1-0/+20
| | | | | New INPUT section reads hJoyHeld (0xFFB4) and draws a d-pad cross + A/B circles + SEL/START pills; held buttons glow bright green, idle ones dim grey.
* fix(control): ignore SIGPIPE so a vanishing client can't kill the emulatorgbc dev7 days2-14/+33
| | | | | | | | | A client that connects and closes before reading (e.g. the HUD's liveness probe) made the greeting write() raise SIGPIPE, terminating the whole emulator - this was behind much of the 'it keeps dying' this session. Also: gbhud now re-resolves the live instance from the registry on every reconnect (skipping stale sockets by test-connecting), so the HUD follows respawns, and its box rendering is ANSI-width-correct.
* tools: live debug HUD (gbhud.py) + 'gbctl hud'gbc dev7 days1-0/+185
| | | | | | | Reads WRAM over the control socket, resolves addresses from pokeyellow.sym, and pretty-prints game state (location, player pos/facing, movement+collision debug, player name/money/badges, party nicknames/levels/HP bars) refreshing ~5Hz. 'gbctl hud' spawns it in a tmux split bound to the live instance.
* apu: register-level emulation of 0xFF10-0xFF3F (fixes music fades)gbc dev7 days2-0/+104
The APU was a black hole: reads returned 0xFF, writes were dropped. That hangs any game that fades music out by decrementing the NR50/rAUDVOL volume register until it reads 0 (Pokemon's StopMusic spin-wait) - the write never stuck, the read never hit 0, infinite loop. Store the 48 sound registers and return them with the standard hardware read-back OR-masks (NR50 mask 0x00 = exact readback). No synthesis, just correct register behavior.