<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0pboy.git/src/render.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/render.c?h=master</id>
<link rel='self' href='https://git.sl0p.foo/sl0pboy.git/atom/src/render.c?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/'/>
<updated>2026-07-18T18:41:19Z</updated>
<entry>
<title>render: --shrink N - downscale the half-block live display (1-4)</title>
<updated>2026-07-18T18:41:19Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-18T18:41:19Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=fa1579cc9f209dbeb14ab277dc9c4ac741ace57c'/>
<id>urn:sha1:fa1579cc9f209dbeb14ab277dc9c4ac741ace57c</id>
<content type='text'>
Decimates the LCD N x N before the half-block encode so the monitor pane
takes 160/N cols x 72/N rows. Display-only: capture, recording and sixel
still read the full-res framebuffer.

Decimation is max-luma pick, not box-average: terminal fonts are 1px
bright strokes on dark background, and averaging dims them into grey
mush (the 'blurry font' regression). Keeping the brightest source pixel
of each block preserves stroke brightness and hue.
</content>
</entry>
<entry>
<title>render: Game Boy chrome, LCD palette recolor, and frame capture</title>
<updated>2026-07-16T22:27:18Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-16T22:27:18Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=6c0eaf8469a3f4876cb067e11824a030bf37bcac'/>
<id>urn:sha1:6c0eaf8469a3f4876cb067e11824a030bf37bcac</id>
<content type='text'>
- --chrome: draw a DMG-style 'sl0pboy' shell around the LCD in sixel mode,
  with a bitmap-font silk-screen (logo, labels), speaker grille, power LED,
  and buttons that light up while held.
- LCD palette recolor (render_set_palette): remap the LCD to a 4-shade
  palette by luminance for the classic monochrome look ('dmg'/'green' pea
  green, 'pocket'/'gray'); applies to every render path.
- Refactor the sixel encoder into generic build_palette_buf/encode_sixel_buf
  operating on any RGB888 buffer, shared by the bare LCD and the chrome canvas.
- render_capture_size/frame: produce the exact displayed frame (recolor +
  chrome) as an RGB buffer, for screenshots and video recording.
</content>
</entry>
<entry>
<title>render: no status line in sixel mode (pure graphics output only)</title>
<updated>2026-07-15T08:33:48Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-15T08:33:48Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=63597fab346410974053294ec8f7103490b79ff5'/>
<id>urn:sha1:63597fab346410974053294ec8f7103490b79ff5</id>
<content type='text'>
In --sixel mode the emulator drew a status line (title/skip/[f]ast/q:quit) under
the image; drop it so sixel output is nothing but the game graphics.
</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>
<entry>
<title>speed control: frame skipping to decouple terminal draw from emulation</title>
<updated>2026-07-04T21:07:50Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-04T21:07:50Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=f4ba890eb4b98e1a65a3d9fc8ba8f62dda66895b'/>
<id>urn:sha1:f4ba890eb4b98e1a65a3d9fc8ba8f62dda66895b</id>
<content type='text'>
Emulation always runs at native rate (correct game speed); --frameskip N draws
only 1 of every N+1 frames so a slow terminal no longer bottlenecks the loop.
Adds --fps cap, --uncapped/--turbo, live [ ] and f keys, HUD readout, and an
exit summary of emulated-vs-drawn fps. Replaces the confusing --render-fps.
</content>
</entry>
<entry>
<title>input: external control channel via FIFO</title>
<updated>2026-07-04T20:46:11Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-04T20:46:11Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=54081ce90bf2b4cad803ab78db65b91c1217cc83'/>
<id>urn:sha1:54081ce90bf2b4cad803ab78db65b91c1217cc83</id>
<content type='text'>
Adds --fifo [path] opening a named pipe that accepts button commands from any
process. Supports momentary taps (a, start, name:N), deterministic hold/release
(+name / -name), and 'release'. Merges with keyboard input; held state carries
true key-up semantics the terminal can't provide. GBC_INPUT_DEBUG traces state.
</content>
</entry>
<entry>
<title>renderer: inter-frame diffing to minimize terminal output</title>
<updated>2026-07-04T20:39:34Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-04T20:39:34Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3'/>
<id>urn:sha1:894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3</id>
<content type='text'>
Only cells that changed since the previous frame are redrawn, using cursor
positioning to skip unchanged runs. Static screens write nothing after the
first frame (~108x reduction on acid2). SIGWINCH forces a full repaint.
Verified pixel-exact against the framebuffer (11520/11520 cells, 0 mismatch).
</content>
</entry>
<entry>
<title>add status line HUD, README with architecture and test status</title>
<updated>2026-07-04T20:14:10Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-04T20:14:10Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=ab07098f5b948a7aa2c46d2f82db299b84ea2d9b'/>
<id>urn:sha1:ab07098f5b948a7aa2c46d2f82db299b84ea2d9b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>terminal renderer (truecolor half-block), input, screenshot mode</title>
<updated>2026-07-04T20:12:57Z</updated>
<author>
<name>gbc dev</name>
<email>gbc@localhost</email>
</author>
<published>2026-07-04T20:12:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0pboy.git/commit/?id=5800f04eb0417c980fef2eddd78d8b60d19d0db5'/>
<id>urn:sha1:5800f04eb0417c980fef2eddd78d8b60d19d0db5</id>
<content type='text'>
</content>
</entry>
</feed>
