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/cpu.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/cpu.c') diff --git a/src/cpu.c b/src/cpu.c index 9e7f685..5b73724 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -407,6 +407,8 @@ int cpu_step(GB *gb) { case 0xCB: do_cb(gb); break; + case 0xED: gb->poweroff = true; break; // (illegal on HW) clean-exit signal + default: // 0x40-0xBF block: LD r,r' and ALU A,r if (op >= 0x40 && op < 0x80) { -- cgit v1.3.1-sl0p