From ca6f9bb91893cf50c8e09bf7396085a7d69e80ab Mon Sep 17 00:00:00 2001 From: gbc dev Date: Thu, 16 Jul 2026 12:49:02 +0200 Subject: headless: $ED opcode = clean power-off (exit + battery save) 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. --- src/gb.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/gb.h') diff --git a/src/gb.h b/src/gb.h index 7218648..7959e60 100644 --- a/src/gb.h +++ b/src/gb.h @@ -116,6 +116,7 @@ struct GB { bool serial_log; // print serial output to stderr (blargg tests) int serial_out_fd; // if >=0, transmitted serial bytes written here (stdout) int serial_in_fd; // if >=0, received serial bytes read here (stdin), else 0xFF + bool poweroff; // set by the $ED opcode: request a clean emulator exit }; void gb_init(GB *gb); -- cgit v1.3.1-sl0p