| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
| |
- --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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
| |
overworld image
|
| |
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
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.
|
|
|
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.
|