| Commit message (Collapse) | Author | Files | Lines |
|
Root-cause work for the 'idle link-socket drop' (see gbos
docs/link-drop-investigation.md): when the hub restarts or the bridge
dies, the link fd went dead forever - and before SIGPIPE was ignored,
the next console-echo write() would kill the whole emulator silently.
Now, in --serial-sock mode, EOF on read or EPIPE/ECONNRESET/ENOTCONN/
EBADF on either direction marks the link dead, closes the fd, and
retries connect() every 500ms from the serial poll path (the guest
polls constantly, so no extra plumbing). RX stays pending while down
(serial_no_eof semantics), so the guest just sees a quiet link that
comes back. Logs 'link socket lost / reconnected' either way.
Verified: SIGKILL the hub, restart it - every GB reconnects within ~1s
and keeps its lease.
|
|
Add optional boot ROM emulation. When a boot ROM image is loaded, gb_reset
starts execution at PC=0 with power-on register state instead of the
documented post-boot state; the ROM overlays low memory (with the CGB
0x0100-0x01FF header hole showing the cartridge through) until the game
writes 0xFF50 to hand off. gb_load_bootrom() accepts 256-byte (DMG) or
2304-byte (CGB) images.
|
|
--keys "udlrabse." plays scripted joypad taps (each char = one button
held 10 frames then released 10, so the guest sees a clean edge); pairs
with --headless --shot to drive on-screen input and capture the result.
When --keys is active, serial-RX EOF stays pending instead of sending
$04, so a shell blocked on read waits for OSK input instead of exiting.
|
|
read()==0 completes the external-clock transfer with SB=0x04 (EOT), so a gbos
program's readc() sees EOF instead of polling forever. Enables cat/wc-style
tools and lets the shell exit on Ctrl-D / pipe end.
|
|
- external-clock transfers (SC=$80) deliver a stdin byte into SB without
echoing to stdout, and stay pending when no input is available -> programs
can poll for input cleanly. internal-clock (SC=$81) stays pure TX.
|
|
- --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
|
|
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.
|
|
Passes blargg cpu_instrs (all 11), instr_timing, mem_timing.
|