diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-20 13:00:26 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-20 13:00:26 +0000 |
commit | a2f659ee48edc5de6f7ca1064a4f2af6227323a6 (patch) | |
tree | 5f159e4c037692589a46afa4d7af9c867ff90352 /hw/pc.c | |
parent | d7d02e3c3a50782c0fa6b17d16f9957f1cc82a65 (diff) | |
download | qemu-a2f659ee48edc5de6f7ca1064a4f2af6227323a6.zip qemu-a2f659ee48edc5de6f7ca1064a4f2af6227323a6.tar.gz qemu-a2f659ee48edc5de6f7ca1064a4f2af6227323a6.tar.bz2 |
new reset API - shutdown support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@939 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/pc.c')
-rw-r--r-- | hw/pc.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -217,6 +217,9 @@ static uint32_t ioport92_read(void *opaque, uint32_t addr) void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val) { + static const char shutdown_str[8] = "Shutdown"; + static int shutdown_index = 0; + switch(addr) { /* Bochs BIOS messages */ case 0x400: @@ -229,6 +232,18 @@ void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val) fprintf(stderr, "%c", val); #endif break; + case 0x8900: + /* same as Bochs power off */ + if (val == shutdown_str[shutdown_index]) { + shutdown_index++; + if (shutdown_index == 8) { + shutdown_index = 0; + qemu_system_shutdown_request(); + } + } else { + shutdown_index = 0; + } + break; /* LGPL'ed VGA BIOS messages */ case 0x501: @@ -250,6 +265,7 @@ void bochs_bios_init(void) register_ioport_write(0x401, 1, 2, bochs_bios_write, NULL); register_ioport_write(0x402, 1, 1, bochs_bios_write, NULL); register_ioport_write(0x403, 1, 1, bochs_bios_write, NULL); + register_ioport_write(0x8900, 1, 1, bochs_bios_write, NULL); register_ioport_write(0x501, 1, 2, bochs_bios_write, NULL); register_ioport_write(0x502, 1, 2, bochs_bios_write, NULL); |