<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0pboy.git/src/control.c, branch master</title>
<subtitle>sl0pboy - a Game Boy Color emulator (companion to the gbos OS)</subtitle>
<id>https://git.sl0p.foo/sl0pboy.git/atom/src/control.c?h=master</id>
<link rel='self' href='https://git.sl0p.foo/sl0pboy.git/atom/src/control.c?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/'/>
<updated>2026-07-16T23:08:48Z</updated>
<entry>
<title>rebrand: gbc -&gt; sl0pboy (binary, README, tooling)</title>
<updated>2026-07-16T23:08:48Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-16T23:08:48Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=c714fc8927c454b5cf4735429b4cc9cde7aa5760'/>
<id>urn:sha1:c714fc8927c454b5cf4735429b4cc9cde7aa5760</id>
<content type='text'>
</content>
</entry>
<entry>
<title>record: capture the displayed frame (chrome + palette)</title>
<updated>2026-07-16T22:27:28Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-16T22:27:28Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=506a6611fae8b56c895fe17ed0b94e2f194407da'/>
<id>urn:sha1:506a6611fae8b56c895fe17ed0b94e2f194407da</id>
<content type='text'>
The video recorder now writes render_capture_frame() instead of the raw
LCD framebuffer, so captures match what's shown: chrome frames record at
their larger dimensions (written into the .gbv header) and the LCD palette
is baked in. Button presses also show up lit in recordings.
</content>
</entry>
<entry>
<title>control: video frame capture + deterministic input-movie replay</title>
<updated>2026-07-15T14:53:28Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-15T14:53:28Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=95fa3f0095d6f383840992cab6833cac92493a60'/>
<id>urn:sha1:95fa3f0095d6f383840992cab6833cac92493a60</id>
<content type='text'>
Two socket features for building reproducible showcase clips:

- record start &lt;path&gt; [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 &lt;path&gt; [reset] / input stop: drive the joypad from a synthesized
  TAS-style movie (text: '&lt;frames&gt; [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.
</content>
</entry>
<entry>
<title>fix(control): ignore SIGPIPE so a vanishing client can't kill the emulator</title>
<updated>2026-07-14T23:42:34Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-14T23:42:34Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=2d39cb0b3ff9851e9872b3eb1f1324bde6910a1c'/>
<id>urn:sha1:2d39cb0b3ff9851e9872b3eb1f1324bde6910a1c</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>control: socket-based debug channel + gbctl CLI driver</title>
<updated>2026-07-14T21:26:49Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-14T21:26:49Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=c879adc43b91a53eb7e76f232a39abb56d8144c1'/>
<id>urn:sha1:c879adc43b91a53eb7e76f232a39abb56d8144c1</id>
<content type='text'>
Replace the input-only FIFO's limitations with a Unix-domain socket control
channel (--sock) that is a superset of the button vocabulary plus emulator
introspection: read/write bus memory, get/set CPU context, single-step, PC
breakpoints, value-change watchpoints, run/pause. Being a socket it replies to
each command and broadcasts async 'event stop ...' lines; a stored last-stop
record (stopinfo) lets per-request clients recover a missed event.

Add gbctl: a stdlib-python CLI that spawns a tmux pane running the emulator on
a ROM, auto-resolves the socket, and drives it with terse verbs (cpu/read/write/
reg/step/break/watch/continue/pause/press/hold/screen/stop). The FIFO stays as
legacy input-only.
</content>
</entry>
</feed>
