aboutsummaryrefslogtreecommitdiffstats
path: root/tools (follow)
Commit message (Collapse)AuthorAgeFilesLines
* rebrand: gbc -> sl0pboy (binary, README, tooling)gbc dev2026-07-174-4/+4
|
* serial: headless mode tying serial port to stdio for OS debugginggbc dev2026-07-152-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 dev2026-07-152-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 dev2026-07-151-0/+111
| | | | overworld image
* gbhud: live joypad display (cute Game Boy layout, buttons light up)gbc dev2026-07-151-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 dev2026-07-152-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 dev2026-07-151-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 dev2026-07-152-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.