aboutsummaryrefslogtreecommitdiffstats
path: root/src/gb.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* headless: $ED opcode = clean power-off (exit + battery save)gbc dev2026-07-161-0/+1
| | | | | | | | The unused SM83 opcode $ED now sets gb->poweroff, which breaks the headless loop so the normal cart_free()->cart_save() path runs. Lets a guest OS shut the emulator down cleanly (and flush its .sav) instead of relying on an external timeout/SIGTERM, which could SIGKILL before the save. run_frame() also stops on poweroff so exit is immediate.
* serial: headless mode tying serial port to stdio for OS debugginggbc dev2026-07-151-0/+2
| | | | | | | | - --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
* apu: register-level emulation of 0xFF10-0xFF3F (fixes music fades)gbc dev2026-07-151-0/+5
| | | | | | | | | 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.
* scaffolding: build system, cartridge loader with MBC1/2/3/5, core typesgbc dev2026-07-041-0/+127