summaryrefslogtreecommitdiff
path: root/src/kbd.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-11-29 13:22:29 -0500
committerKevin O'Connor <kevin@koconnor.net>2008-11-29 13:22:29 -0500
commit3f168b6c7c4e1ab189eeeead60e40b16fac880b9 (patch)
treeec1f149a4595808f989282577d600629cb594f04 /src/kbd.c
parentdd3588f8f502b85db4a4a0574d9a7064866cabf5 (diff)
downloadqemu-seabios-3f168b6c7c4e1ab189eeeead60e40b16fac880b9.tar.gz
Detect keyboard ctrl-alt-delete and try to reset machine.
Diffstat (limited to 'src/kbd.c')
-rw-r--r--src/kbd.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/kbd.c b/src/kbd.c
index cb60306..e0f958a 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -338,6 +338,9 @@ handle_16(struct bregs *regs)
}
}
+// 16bit reset vector declared in romlayout.S
+void reset_vector() __attribute__ ((noreturn));
+
#define none 0
#define MAX_SCAN_CODE 0x58
@@ -566,9 +569,12 @@ process_key(u8 scancode)
return;
default:
- if (scancode & 0x80) {
- break; /* toss key releases ... */
- }
+ if (scancode & 0x80)
+ // toss key releases
+ break;
+ if (scancode == 0x53 && (shift_flags & 0x0c) == 0x0c)
+ // Ctrl+alt+del - reset machine.
+ reset_vector();
if (scancode > MAX_SCAN_CODE) {
dprintf(1, "KBD: int09h_handler(): unknown scancode read: 0x%02x!\n"
, scancode);