From 39b4388384414b67f29e3d51bcb4caa9dfb97244 Mon Sep 17 00:00:00 2001 From: Christophe Bothamy Date: Tue, 4 Mar 2003 21:08:39 +0000 Subject: [PATCH] - first revision of harddisk modes support. See patch content for details. --- bochs/patches/patch.harddisk-modes | 3861 ++++++++++++++++++++++++++++ 1 file changed, 3861 insertions(+) create mode 100644 bochs/patches/patch.harddisk-modes diff --git a/bochs/patches/patch.harddisk-modes b/bochs/patches/patch.harddisk-modes new file mode 100644 index 000000000..fd2548a02 --- /dev/null +++ b/bochs/patches/patch.harddisk-modes @@ -0,0 +1,3861 @@ +---------------------------------------------------------------------- +Patch name: patch.harddisk-modes +Author: justin SB, Sharvil Nanavati, Christophe Bothamy +Date: Tue Mar 4 09:51:39 CET 2003 +Status: proposed, applyable + +Detailed description: + + This patch adds multiple disk "modes" support to Bochs. + It includes Justin SB's sparse disk support, and Sharvil + Nanavati's vmware3 support, as well as legacy modes + (flat, concat, external (EXTERNAL_DISK_SIMULATOR), i + dll (DLL_HD_SUPPORT)), and proposed additional modes + (undoable, growable, split, volatile, z-undoable, z-volatile) + (see http://cbothamy.free.fr/projects/bochs/disk%20modes%20changes.txt) + + This patch removes the old and now unneeded '--enable-split-hd' + and adds a '--enable-compressed-hd' to the ./configure options + Compressed modes will be use zlib. + + This patch adds a new "mode" option to the ataX-xxxx directive + of the configuration file. + + This way, it is possible to use one disk mode for each + of the ata devices. + + Done : + - inclusion of sparse disk image support + - inclusion of vmware3 image support + - handle new "mode" option in main.cc + - handle new "mode" option in text config interface + - update .bochsrc with new option + - handle modes in harddrive.cc + - update iodev/Makefile.in + + Still to do : + - update bximage (add a command line switch) to create sparse disks + - update bximage (add a command line switch) to create growable disks + - update bximage (add a command line switch) to create split disks + - check availablity of zlib for win32 + - check for zlib in ./configure + - implement redolog class + - implement additionnal mode undoable + - implement additionnal mode growable + - implement additionnal mode split + - implement additionnal mode volatile + - implement additionnal mode z-undowable + - implement additionnal mode z-volatile + - handle new "mode" option in wxwindow config interface + - update user doc (see misc.txt) + - update bximage to convert/commit various modes + +Patch was created with: + cvs diff -u +Apply patch to what version: + cvs checked out on Tue Mar 4 09:51:39 CET 2003 +Instructions: + To patch, go to main bochs directory. + Type "patch -p0 < THIS_PATCH_FILE". +---------------------------------------------------------------------- +Index: .bochsrc +=================================================================== +RCS file: /cvsroot/bochs/bochs/.bochsrc,v +retrieving revision 1.66 +diff -u -r1.66 .bochsrc +--- .bochsrc 9 Feb 2003 18:59:18 -0000 1.66 ++++ .bochsrc 4 Mar 2003 17:59:42 -0000 +@@ -150,7 +150,7 @@ + # ata[0-3]: enabled=[0|1], ioaddr1=addr, ioaddr2=addr, irq=number + # + # These options enables up to 4 ata channels. For each channel +-# the two base io address and the irq must be specified. ++# the two base io addresses and the irq must be specified. + # + # ata0 is enabled by default, with ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 + # +@@ -170,6 +170,8 @@ + # + # This defines the type and characteristics of all attached ata devices: + # type= type of attached device [disk|cdrom] ++# mode= only valid for disks [flat|concat|external|dll|sparse|vmware3] ++# mode= not implemented yet [undoable|growable|split|volatile|z-undoable|z-volatile] + # path= path of the image + # cylinders= only valid for disks + # heads= only valid for disks +@@ -195,21 +197,21 @@ + # The path is mandatory for type=cdrom + # + # Default values are: +-# biosdetect=auto, translation=auto, model="Generic 1234" ++# mode=flat, biosdetect=auto, translation=auto, model="Generic 1234" + # + # The biosdetect option has currently no effect on the bios + # + # Examples: +-# ata0-master: type=disk, path=10M.sample, cylinders=306, heads=4, spt=17 +-# ata0-slave: type=disk, path=20M.sample, cylinders=615, heads=4, spt=17 +-# ata1-master: type=disk, path=30M.sample, cylinders=615, heads=6, spt=17 +-# ata1-slave: type=disk, path=46M.sample, cylinders=940, heads=6, spt=17 +-# ata2-master: type=disk, path=62M.sample, cylinders=940, heads=8, spt=17 +-# ata2-slave: type=disk, path=112M.sample, cylinders=900, heads=15, spt=17 +-# ata3-master: type=disk, path=483M.sample, cylinders=1024, heads=15, spt=63 ++# ata0-master: type=disk, mode=flat, path=10M.sample, cylinders=306, heads=4, spt=17 ++# ata0-slave: type=disk, mode=flat, path=20M.sample, cylinders=615, heads=4, spt=17 ++# ata1-master: type=disk, mode=flat, path=30M.sample, cylinders=615, heads=6, spt=17 ++# ata1-slave: type=disk, mode=flat, path=46M.sample, cylinders=940, heads=6, spt=17 ++# ata2-master: type=disk, mode=flat, path=62M.sample, cylinders=940, heads=8, spt=17 ++# ata2-slave: type=disk, mode=flat, path=112M.sample, cylinders=900, heads=15, spt=17 ++# ata3-master: type=disk, mode=flat, path=483M.sample, cylinders=1024, heads=15, spt=63 + # ata3-slave: type=cdrom, path=iso.sample, status=inserted + #======================================================================= +-ata0-master: type=disk, path="30M.sample", cylinders=615, heads=6, spt=17 ++ata0-master: type=disk, mode=flat, path="30M.sample", cylinders=615, heads=6, spt=17 + #ata0-slave: type=cdrom, path=D:, status=inserted + #ata0-slave: type=cdrom, path=/dev/cdrom, status=inserted + #ata0-slave: type=cdrom, path="drive", status=inserted +Index: bochs.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/bochs.h,v +retrieving revision 1.120 +diff -u -r1.120 bochs.h +--- bochs.h 26 Feb 2003 02:41:29 -0000 1.120 ++++ bochs.h 4 Mar 2003 17:59:42 -0000 +@@ -49,6 +49,8 @@ + #include + #include + #include ++#include ++ + #ifndef WIN32 + # include + #else +Index: config.h.in +=================================================================== +RCS file: /cvsroot/bochs/bochs/config.h.in,v +retrieving revision 1.107 +diff -u -r1.107 config.h.in +--- config.h.in 2 Mar 2003 23:59:02 -0000 1.107 ++++ config.h.in 4 Mar 2003 17:59:42 -0000 +@@ -285,15 +285,8 @@ + + #define BX_GDBSTUB 0 + +-// This option enables "split hard drive" support, which means +-// that a series of partial hard disk images can be treated +-// as a single large image. If you set up the partition sizes and +-// file sizes correctly, this allows you to store each partition +-// in a separate file, which is very convenient if you want to operate +-// on a single partition (e.g. mount with loopback, create filesystem, +-// fsck, etc.). +-// [[Provide example of partitioning]] +-#define BX_SPLIT_HD_SUPPORT 0 ++// This option enables compressed (zlib) hd support ++#define BX_COMPRESSED_HD_SUPPORT 0 + + // This option defines the number of supported ATA channels. + // There are up to two drives per ATA channel. +Index: configure +=================================================================== +RCS file: /cvsroot/bochs/bochs/configure,v +retrieving revision 1.202 +diff -u -r1.202 configure +--- configure 2 Mar 2003 23:59:03 -0000 1.202 ++++ configure 4 Mar 2003 17:59:48 -0000 +@@ -1,5 +1,5 @@ + #! /bin/sh +-# From configure.in Id: configure.in,v 1.201 2003/02/21 14:40:59 cisc Exp . ++# From configure.in Id: configure.in,v 1.202 2003/03/02 23:59:08 cbothamy Exp . + # Guess values for system-dependent variables and create Makefiles. + # Generated by GNU Autoconf 2.57. + # +@@ -468,7 +468,7 @@ + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX SET_MAKE LN_S ECHO RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP EGREP LIBTOOL LIBADD_DL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS BX_USE_NEW_PIT BX_USE_SLOWDOWN_TIMER SLOWDOWN_OBJS BX_USE_IDLE_HACK DEFINE_PLUGIN_PATH OBJS64 IOAPIC_OBJS APIC_OBJS BX_SPLIT_HD_SUPPORT NE2K_OBJS NETLOW_OBJS PCI_OBJ SUFFIX_LINE CPP_SUFFIX DEBUGGER_VAR BX_EXTERNAL_DEBUGGER DISASM_VAR READLINE_LIB INSTRUMENT_DIR INSTRUMENT_VAR FPU_VAR FPU_GLUE_OBJ CDROM_OBJS SB16_OBJS SOUNDLOW_OBJS GDBSTUB_VAR IODEBUG_OBJS DOCBOOK2HTML BUILD_DOCBOOK_VAR INSTALL_DOCBOOK_VAR IODEV_LIB_VAR EXTRA_BX_OBJS NONINLINE_VAR INLINE_VAR EXTERNAL_DEPENDENCY EXT_DEBUG_OBJS WX_CONFIG GUI_CFLAGS GUI_CXXFLAGS WX_CFLAGS WX_CXXFLAGS PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS INSTALL_TARGET INSTALL_LIST_FOR_PLATFORM RFB_LIBS GUI_OBJS DEVICE_LINK_OPTS GUI_LINK_OPTS GUI_LINK_OPTS_TERM GUI_LINK_OPTS_WX DASH SLASH CXXFP CFP OFP MAKELIB RMCOMMAND LINK LINK_CONSOLE EXE PRIMARY_TARGET PLUGIN_LIBNAME_TRANSFORMATION COMMAND_SEPARATOR CD_UP_ONE CD_UP_TWO VERSION VER_STRING REL_STRING EXTRA_LINK_OPTS GUI_NON_PLUGIN_OBJS GUI_PLUGIN_OBJS IODEV_NON_PLUGIN_OBJS IODEV_PLUGIN_OBJS PLUGIN_VAR PLUGIN_TARGET INSTALL_PLUGINS_VAR GZIP TAR LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX SET_MAKE LN_S ECHO RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP EGREP LIBTOOL LIBADD_DL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS BX_USE_NEW_PIT BX_USE_SLOWDOWN_TIMER SLOWDOWN_OBJS BX_USE_IDLE_HACK DEFINE_PLUGIN_PATH OBJS64 IOAPIC_OBJS APIC_OBJS BX_COMPRESSED_HD_SUPPORT NE2K_OBJS NETLOW_OBJS PCI_OBJ SUFFIX_LINE CPP_SUFFIX DEBUGGER_VAR BX_EXTERNAL_DEBUGGER DISASM_VAR READLINE_LIB INSTRUMENT_DIR INSTRUMENT_VAR FPU_VAR FPU_GLUE_OBJ CDROM_OBJS SB16_OBJS SOUNDLOW_OBJS GDBSTUB_VAR IODEBUG_OBJS DOCBOOK2HTML BUILD_DOCBOOK_VAR INSTALL_DOCBOOK_VAR IODEV_LIB_VAR EXTRA_BX_OBJS NONINLINE_VAR INLINE_VAR EXTERNAL_DEPENDENCY EXT_DEBUG_OBJS WX_CONFIG GUI_CFLAGS GUI_CXXFLAGS WX_CFLAGS WX_CXXFLAGS PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS INSTALL_TARGET INSTALL_LIST_FOR_PLATFORM RFB_LIBS GUI_OBJS DEVICE_LINK_OPTS GUI_LINK_OPTS GUI_LINK_OPTS_TERM GUI_LINK_OPTS_WX DASH SLASH CXXFP CFP OFP MAKELIB RMCOMMAND LINK LINK_CONSOLE EXE PRIMARY_TARGET PLUGIN_LIBNAME_TRANSFORMATION COMMAND_SEPARATOR CD_UP_ONE CD_UP_TWO VERSION VER_STRING REL_STRING EXTRA_LINK_OPTS GUI_NON_PLUGIN_OBJS GUI_PLUGIN_OBJS IODEV_NON_PLUGIN_OBJS IODEV_PLUGIN_OBJS PLUGIN_VAR PLUGIN_TARGET INSTALL_PLUGINS_VAR GZIP TAR LIBOBJS LTLIBOBJS' + ac_subst_files='' + + # Initialize some variables set by options. +@@ -1031,7 +1031,7 @@ + --enable-x86-64 compile in support for x86-64 instructions + --enable-cpu-level select cpu level (3,4,5,6) + --enable-apic enable APIC support +- --enable-split-hd allows split hard disk image ++ --enable-compressed-hd allows compressed (zlib) hard disk image + --enable-ne2000 enable limited ne2000 support + --enable-pci enable limited i440FX PCI support + --enable-usb enable limited USB support +@@ -20405,23 +20405,23 @@ + + + +-echo "$as_me:$LINENO: checking for split hard disk image support" >&5 +-echo $ECHO_N "checking for split hard disk image support... $ECHO_C" >&6 +-# Check whether --enable-split-hd or --disable-split-hd was given. +-if test "${enable_split_hd+set}" = set; then +- enableval="$enable_split_hd" ++echo "$as_me:$LINENO: checking for compressed hard disk image support" >&5 ++echo $ECHO_N "checking for compressed hard disk image support... $ECHO_C" >&6 ++# Check whether --enable-compressed-hd or --disable-compressed-hd was given. ++if test "${enable_compressed_hd+set}" = set; then ++ enableval="$enable_compressed_hd" + if test "$enableval" = yes; then + echo "$as_me:$LINENO: result: yes" >&5 + echo "${ECHO_T}yes" >&6 + cat >>confdefs.h <<\_ACEOF +-#define BX_SPLIT_HD_SUPPORT 1 ++#define BX_COMPRESSED_HD_SUPPORT 1 + _ACEOF + + else + echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 + cat >>confdefs.h <<\_ACEOF +-#define BX_SPLIT_HD_SUPPORT 0 ++#define BX_COMPRESSED_HD_SUPPORT 0 + _ACEOF + + fi +@@ -20430,7 +20430,7 @@ + echo "$as_me:$LINENO: result: yes" >&5 + echo "${ECHO_T}yes" >&6 + cat >>confdefs.h <<\_ACEOF +-#define BX_SPLIT_HD_SUPPORT 1 ++#define BX_COMPRESSED_HD_SUPPORT 0 + _ACEOF + + +@@ -25115,7 +25115,7 @@ + s,@OBJS64@,$OBJS64,;t t + s,@IOAPIC_OBJS@,$IOAPIC_OBJS,;t t + s,@APIC_OBJS@,$APIC_OBJS,;t t +-s,@BX_SPLIT_HD_SUPPORT@,$BX_SPLIT_HD_SUPPORT,;t t ++s,@BX_COMPRESSED_HD_SUPPORT@,$BX_COMPRESSED_HD_SUPPORT,;t t + s,@NE2K_OBJS@,$NE2K_OBJS,;t t + s,@NETLOW_OBJS@,$NETLOW_OBJS,;t t + s,@PCI_OBJ@,$PCI_OBJ,;t t +Index: configure.in +=================================================================== +RCS file: /cvsroot/bochs/bochs/configure.in,v +retrieving revision 1.202 +diff -u -r1.202 configure.in +--- configure.in 2 Mar 2003 23:59:08 -0000 1.202 ++++ configure.in 4 Mar 2003 17:59:49 -0000 +@@ -684,22 +684,22 @@ + AC_SUBST(IOAPIC_OBJS) + AC_SUBST(APIC_OBJS) + +-AC_MSG_CHECKING(for split hard disk image support) +-AC_ARG_ENABLE(split-hd, +- [ --enable-split-hd allows split hard disk image], ++AC_MSG_CHECKING(for compressed hard disk image support) ++AC_ARG_ENABLE(compressed-hd, ++ [ --enable-compressed-hd allows compressed (zlib) hard disk image], + [if test "$enableval" = yes; then + AC_MSG_RESULT(yes) +- AC_DEFINE(BX_SPLIT_HD_SUPPORT, 1) ++ AC_DEFINE(BX_COMPRESSED_HD_SUPPORT, 1) + else + AC_MSG_RESULT(no) +- AC_DEFINE(BX_SPLIT_HD_SUPPORT, 0) ++ AC_DEFINE(BX_COMPRESSED_HD_SUPPORT, 0) + fi], + [ + AC_MSG_RESULT(yes) +- AC_DEFINE(BX_SPLIT_HD_SUPPORT, 1) ++ AC_DEFINE(BX_COMPRESSED_HD_SUPPORT, 0) + ] + ) +-AC_SUBST(BX_SPLIT_HD_SUPPORT) ++AC_SUBST(BX_COMPRESSED_HD_SUPPORT) + + AC_MSG_CHECKING(for NE2000 support) + AC_ARG_ENABLE(ne2000, +Index: main.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/main.cc,v +retrieving revision 1.223 +diff -u -r1.223 main.cc +--- main.cc 13 Feb 2003 15:51:12 -0000 1.223 ++++ main.cc 4 Mar 2003 17:59:51 -0000 +@@ -195,6 +195,7 @@ + switch (val) { + case BX_ATA_DEVICE_DISK: + SIM->get_param_num ((bx_id)(BXP_ATA0_MASTER_PRESENT + device))->set (1); ++ SIM->get_param ((bx_id)(BXP_ATA0_MASTER_MODE + device))->set_enabled (1); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_PATH + device))->set_enabled (1); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_CYLINDERS + device))->set_enabled (1); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_HEADS + device))->set_enabled (1); +@@ -206,6 +207,7 @@ + break; + case BX_ATA_DEVICE_CDROM: + SIM->get_param_num ((bx_id)(BXP_ATA0_MASTER_PRESENT + device))->set (1); ++ SIM->get_param ((bx_id)(BXP_ATA0_MASTER_MODE + device))->set_enabled (0); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_PATH + device))->set_enabled (1); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_CYLINDERS + device))->set_enabled (0); + SIM->get_param ((bx_id)(BXP_ATA0_MASTER_HEADS + device))->set_enabled (0); +@@ -531,6 +533,13 @@ + BX_ATA_DEVICE_DISK, + BX_ATA_DEVICE_DISK)); + ++ menu->add (bx_options.atadevice[channel][slave].Omode = new bx_param_enum_c ((bx_id)(BXP_ATA0_MASTER_MODE+channel*2+slave), ++ "ata-device:mode", ++ "Type of ATA device", ++ atadevice_mode_names, ++ BX_ATA_MODE_FLAT, ++ BX_ATA_MODE_FLAT)); ++ + menu->add (bx_options.atadevice[channel][slave].Ostatus = new bx_param_enum_c ((bx_id)(BXP_ATA0_MASTER_STATUS+channel*2+slave), + "ata-device:status", + "Inserted or ejected", +@@ -638,6 +647,9 @@ + bx_options.atadevice[channel][slave].Otype->set_ask_format ( + BX_WITH_WX? "Type of ATA device:" + : "Enter type of ATA device, disk or cdrom: [%s] "); ++ bx_options.atadevice[channel][slave].Omode->set_ask_format ( ++ BX_WITH_WX? "Policy of ATA device:" ++ : "Enter mode of ATA device, (flat, concat, etc.): [%s] "); + bx_options.atadevice[channel][slave].Opath->set_ask_format ( + BX_WITH_WX? "Path or physical device name:" + : "Enter new filename: [%s] "); +@@ -666,6 +678,7 @@ + #if !BX_WITH_WX + bx_options.atadevice[channel][slave].Opresent->set_format ("enabled: %s"); + bx_options.atadevice[channel][slave].Otype->set_format (", %s"); ++ bx_options.atadevice[channel][slave].Omode->set_format (", mode %s"); + bx_options.atadevice[channel][slave].Opath->set_format (" on '%s'"); + bx_options.atadevice[channel][slave].Ocylinders->set_format (", %d cylinders"); + bx_options.atadevice[channel][slave].Oheads->set_format (", %d heads"); +@@ -1336,6 +1349,7 @@ + for (Bit8u slave=0; slave<2; slave++) { + bx_options.atadevice[channel][slave].Opresent->reset(); + bx_options.atadevice[channel][slave].Otype->reset(); ++ bx_options.atadevice[channel][slave].Omode->reset(); + bx_options.atadevice[channel][slave].Opath->reset(); + bx_options.atadevice[channel][slave].Ocylinders->reset(); + bx_options.atadevice[channel][slave].Oheads->reset(); +@@ -2798,6 +2812,42 @@ + else if (!strcmp(params[i], "type=cdrom")) { + bx_options.atadevice[channel][slave].Otype->set (BX_ATA_DEVICE_CDROM); + } ++ else if (!strcmp(params[i], "mode=flat")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_FLAT); ++ } ++ else if (!strcmp(params[i], "mode=concat")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_CONCAT); ++ } ++ else if (!strcmp(params[i], "mode=external")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_EXTDISKSIM); ++ } ++ else if (!strcmp(params[i], "mode=dll")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_DLL_HD); ++ } ++ else if (!strcmp(params[i], "mode=sparse")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_SPARSE); ++ } ++ else if (!strcmp(params[i], "mode=vmware3")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_VMWARE3); ++ } ++ else if (!strcmp(params[i], "mode=split")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_SPLIT); ++ } ++ else if (!strcmp(params[i], "mode=undoable")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_UNDOABLE); ++ } ++ else if (!strcmp(params[i], "mode=growable")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_GROWABLE); ++ } ++ else if (!strcmp(params[i], "mode=volatile")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_VOLATILE); ++ } ++ else if (!strcmp(params[i], "mode=z-undoable")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_Z_UNDOABLE); ++ } ++ else if (!strcmp(params[i], "mode=z-volatile")) { ++ bx_options.atadevice[channel][slave].Omode->set (BX_ATA_MODE_Z_VOLATILE); ++ } + else if (!strncmp(params[i], "path=", 5)) { + bx_options.atadevice[channel][slave].Opath->set (¶ms[i][5]); + } +@@ -3702,9 +3752,47 @@ + if (opt->Opresent->get()) { + fprintf (fp, "ata%d-%s: ", channel, drive==0?"master":"slave"); + +- if (opt->Otype->get() == BX_ATA_DEVICE_DISK) { +- fprintf (fp, "type=disk, path=\"%s\", cylinders=%d, heads=%d, spt=%d", +- opt->Opath->getptr(), opt->Ocylinders->get(), opt->Oheads->get(), opt->Ospt->get()); ++ if (opt->Omode->get() == BX_ATA_DEVICE_DISK) { ++ fprintf (fp, "type=disk"); ++ ++ switch(opt->Otranslation->get()) { ++ case BX_ATA_MODE_FLAT: ++ fprintf (fp, ", mode=flat"); ++ break; ++ case BX_ATA_MODE_CONCAT: ++ fprintf (fp, ", mode=flat"); ++ break; ++ case BX_ATA_MODE_EXTDISKSIM: ++ fprintf (fp, ", mode=external"); ++ break; ++ case BX_ATA_MODE_DLL_HD: ++ fprintf (fp, ", mode=dll"); ++ break; ++ case BX_ATA_MODE_SPARSE: ++ fprintf (fp, ", mode=sparse"); ++ break; ++ case BX_ATA_MODE_VMWARE3: ++ fprintf (fp, ", mode=vmware3"); ++ break; ++ case BX_ATA_MODE_SPLIT: ++ fprintf (fp, ", mode=split"); ++ break; ++ case BX_ATA_MODE_UNDOABLE: ++ fprintf (fp, ", mode=undoable"); ++ break; ++ case BX_ATA_MODE_GROWABLE: ++ fprintf (fp, ", mode=growable"); ++ break; ++ case BX_ATA_MODE_VOLATILE: ++ fprintf (fp, ", mode=volatile"); ++ break; ++ case BX_ATA_MODE_Z_UNDOABLE: ++ fprintf (fp, ", mode=z-undoable"); ++ break; ++ case BX_ATA_MODE_Z_VOLATILE: ++ fprintf (fp, ", mode=z-volatile"); ++ break; ++ } + + switch(opt->Otranslation->get()) { + case BX_ATA_TRANSLATION_NONE: +@@ -3723,6 +3811,9 @@ + fprintf (fp, ", translation=auto"); + break; + } ++ ++ fprintf (fp, ", path=\"%s\", cylinders=%d, heads=%d, spt=%d", ++ opt->Ocylinders->get(), opt->Oheads->get(), opt->Ospt->get()); + } + else if (opt->Otype->get() == BX_ATA_DEVICE_CDROM) { + fprintf (fp, "type=cdrom, path=\"%s\", status=%s", +Index: doc/docbook/misc.txt +=================================================================== +RCS file: /cvsroot/bochs/bochs/doc/docbook/misc.txt,v +retrieving revision 1.21 +diff -u -r1.21 misc.txt +--- doc/docbook/misc.txt 15 Dec 2002 18:00:28 -0000 1.21 ++++ doc/docbook/misc.txt 4 Mar 2003 17:59:52 -0000 +@@ -476,3 +476,70 @@ + copied the expected image to a.img and continued. + + ++-------------------------------------------------- ++This should be included in the user doc ++// This option enables "split hard drive" support, which means ++// that a series of partial hard disk images can be treated ++// as a single large image. If you set up the partition sizes and ++// file sizes correctly, this allows you to store each partition ++// in a separate file, which is very convenient if you want to operate ++// on a single partition (e.g. mount with loopback, create filesystem, ++// fsck, etc.). ++// [[Provide example of partitioning]] ++ ++---------------------------------------------------------------------- ++Patch name: patch.sparsedisk-justinsb ++Author: Justin SB ++Date: 27 Jan 2003 ++ ++Detailed description: ++ ++ This patch enables "sparse hard drive" support: ++ ++ 1) A large hard drive can be created, and only used space will be stored ++ in the file. In practice this is not a large gain as Unix does this ++ anyway. ++ 2) Multiple sparse drive images can be mounted on top of each other. ++ Writes go to the top image. This allows several similar configurations ++ to share a master "base" file, and also allows filesystem rollback or ++ no-write options. Up to 10 disk images can be layered on top of each other. ++ ++ There is a need for supporting utilities: ++ 1) to merge two sparse disk images into a single image ++ 2) to defragment a sparse disk image and remove unused space ++ ++ Examples: ++ Space Saving ++ 1) Create a sparse disk image using bximage. Set size to eg 10GB. Only allocated space will be stored, ++ so your drive image should be only about as large as the files stored on it. ++ ++ Disk Rollback: ++ 1) Create a sparse disk image called "c.img.0". Point .bochsrc at "c.img.0". ++ In bochs, install your favourite OS. Switch off bochs. ++ 2) Create a sparse disk image (of the same size) and name it "c.img.1". Point .bochsrc at "c.img.1" ++ "c.img.0" is visible, but all writes go to "c.img.1". After using bochs, you can simply delete ++ "c.img.1" to undo changes and go back to a clean OS install. ++ ++ Disk Optional Commit: ++ 1) Create a sparse disk image called "c.img.0". Point .bochsrc at "c.img.0". ++ In bochs, install your favourite OS. Switch off bochs. ++ 2) Create a sparse disk image (of the same size) and name it "c.img.1". Point .bochsrc at "c.img.1" ++ "c.img.0" is visible, but all writes go to "c.img.1". After using bochs, if you want to keep the ++ changes, use the (currently non-existant) merge utility to make a single unified drive image. ++ Alternatively simply create a new partition on top called "c.img.3". ++ ++ Common Base: ++ 1) Create a sparse disk image called "base.img". Point .bochsrc at "base.img". ++ In bochs, install your favourite OS. Switch off bochs. ++ 2) Create a sparse disk image (of the same size) and name it "www.img.1". Make "wwww.img.0" a symlink to ++ "base.img". Point .bochsrc at "www.img.1". Using bochs, install a webserver. ++ 3) Create a symlink to "base.img" called "db.img.0". Create a sparse disk image (of the same size) ++ and name it "db.img.1". Point .bochsrc at "db.img.1". Using bochs, install a database server. ++ ++ Now both a database server and webserver can be run in separate virtual machines, but they share ++ the common OS image, saving drive space. ++ ++ ++ ++ Disk Rollback and Optional Commit will probably be the most used of these options. ++ +Index: gui/siminterface.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/gui/siminterface.cc,v +retrieving revision 1.94 +diff -u -r1.94 siminterface.cc +--- gui/siminterface.cc 6 Feb 2003 23:16:55 -0000 1.94 ++++ gui/siminterface.cc 4 Mar 2003 17:59:52 -0000 +@@ -442,14 +442,17 @@ + + char *floppy_status_names[] = { "ejected", "inserted", NULL }; + int n_floppy_status_names = 2; +-char *floppy_bootdisk_names[] = { "floppy", "hard","cdrom", NULL }; ++char *floppy_bootdisk_names[] = { "floppy", "disk","cdrom", NULL }; + int n_floppy_bootdisk_names = 3; + char *loader_os_names[] = { "none", "linux", "nullkernel", NULL }; + int n_loader_os_names = 3; + char *keyboard_type_names[] = { "xt", "at", "mf", NULL }; + int n_keyboard_type_names = 3; +-char *atadevice_type_names[] = { "hard disk", "cdrom", NULL }; ++ ++char *atadevice_type_names[] = { "disk", "cdrom", NULL }; + int n_atadevice_type_names = 2; ++char *atadevice_mode_names[] = { "flat", "concat", "external", "dll", "sparse", "vmware3", "split", "undoable", "growable", "volatile", "z-undoable", "z-volatile", NULL }; ++int n_atadevice_mode_names = 12; + char *atadevice_status_names[] = { "ejected", "inserted", NULL }; + int n_atadevice_status_names = 2; + char *atadevice_biosdetect_names[] = { "none", "auto", "cmos", NULL }; +Index: gui/siminterface.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/gui/siminterface.h,v +retrieving revision 1.99 +diff -u -r1.99 siminterface.h +--- gui/siminterface.h 6 Feb 2003 23:16:54 -0000 1.99 ++++ gui/siminterface.h 4 Mar 2003 17:59:53 -0000 +@@ -199,6 +199,14 @@ + BXP_ATA2_SLAVE_TYPE, + BXP_ATA3_MASTER_TYPE, + BXP_ATA3_SLAVE_TYPE, ++ BXP_ATA0_MASTER_MODE, ++ BXP_ATA0_SLAVE_MODE, ++ BXP_ATA1_MASTER_MODE, ++ BXP_ATA1_SLAVE_MODE, ++ BXP_ATA2_MASTER_MODE, ++ BXP_ATA2_SLAVE_MODE, ++ BXP_ATA3_MASTER_MODE, ++ BXP_ATA3_SLAVE_MODE, + BXP_ATA0_MASTER_PATH, + BXP_ATA0_SLAVE_PATH, + BXP_ATA1_MASTER_PATH, +@@ -1117,6 +1125,20 @@ + #define BX_ATA_TRANSLATION_AUTO 4 + #define BX_ATA_TRANSLATION_LAST 4 + ++#define BX_ATA_MODE_FLAT 0 ++#define BX_ATA_MODE_CONCAT 1 ++#define BX_ATA_MODE_EXTDISKSIM 2 ++#define BX_ATA_MODE_DLL_HD 3 ++#define BX_ATA_MODE_SPARSE 4 ++#define BX_ATA_MODE_VMWARE3 5 ++#define BX_ATA_MODE_SPLIT 6 ++#define BX_ATA_MODE_UNDOABLE 7 ++#define BX_ATA_MODE_GROWABLE 8 ++#define BX_ATA_MODE_VOLATILE 9 ++#define BX_ATA_MODE_Z_UNDOABLE 10 ++#define BX_ATA_MODE_Z_VOLATILE 11 ++#define BX_ATA_MODE_LAST 11 ++ + BOCHSAPI extern char *bochs_start_names[]; + BOCHSAPI extern int n_bochs_start_names; + BOCHSAPI extern char *floppy_type_names[]; +@@ -1132,6 +1154,8 @@ + BOCHSAPI extern int n_keyboard_type_names; + BOCHSAPI extern char *atadevice_type_names[]; + BOCHSAPI extern int n_atadevice_type_names; ++BOCHSAPI extern char *atadevice_mode_names[]; ++BOCHSAPI extern int n_atadevice_mode_names; + BOCHSAPI extern char *atadevice_status_names[]; + BOCHSAPI extern int n_atadevice_status_names; + BOCHSAPI extern char *atadevice_biosdetect_names[]; +@@ -1150,6 +1174,7 @@ + bx_list_c *Omenu; + bx_param_bool_c *Opresent; + bx_param_enum_c *Otype; ++ bx_param_enum_c *Omode; + bx_param_string_c *Opath; + bx_param_num_c *Ocylinders; + bx_param_num_c *Oheads; +Index: iodev/Makefile.in +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/Makefile.in,v +retrieving revision 1.40 +diff -u -r1.40 Makefile.in +--- iodev/Makefile.in 3 Mar 2003 17:39:16 -0000 1.40 ++++ iodev/Makefile.in 4 Mar 2003 17:59:54 -0000 +@@ -92,6 +92,7 @@ + + OBJS_THAT_SUPPORT_OTHER_PLUGINS = \ + scancodes.o \ ++ vmware3.o \ + $(CDROM_OBJS) \ + $(SOUNDLOW_OBJS) \ + $(NETLOW_OBJS) +@@ -120,8 +121,8 @@ + $(LIBTOOL) $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) + + # special link rules for plugins that require more than one object file +-libbx_harddrv.la: harddrv.lo $(CDROM_OBJS:.o=.lo) +- $(LIBTOOL) $(CXX) -module harddrv.lo $(CDROM_OBJS:.o=.lo) -o libbx_harddrv.la -rpath $(PLUGIN_PATH) ++libbx_harddrv.la: harddrv.lo vmware3.lo $(CDROM_OBJS:.o=.lo) ++ $(LIBTOOL) $(CXX) -module harddrv.lo vmware3.lo $(CDROM_OBJS:.o=.lo) -o libbx_harddrv.la -rpath $(PLUGIN_PATH) + + libbx_keyboard.la: keyboard.lo scancodes.lo + $(LIBTOOL) $(CXX) -module keyboard.lo scancodes.lo -o libbx_keyboard.la -rpath $(PLUGIN_PATH) +@@ -140,8 +141,8 @@ + $(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY) + + # special link rules for plugins that require more than one object file +-bx_harddrv.dll: harddrv.o $(CDROM_OBJS) +- $(CXX) $(CXXFLAGS) -shared -o bx_harddrv.dll harddrv.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) ++bx_harddrv.dll: harddrv.o vmware3.o $(CDROM_OBJS) ++ $(CXX) $(CXXFLAGS) -shared -o bx_harddrv.dll harddrv.o vmware3.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + + bx_keyboard.dll: keyboard.o scancodes.o + $(CXX) $(CXXFLAGS) -shared -o bx_keyboard.dll keyboard.o scancodes.o $(WIN32_DLL_IMPORT_LIBRARY) +@@ -179,11 +180,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + cdrom.o: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -192,13 +192,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + cdrom_amigaos.o: cdrom_amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -206,11 +206,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scsi_commands.h + cdrom_beos.o: cdrom_beos.@CPP_SUFFIX@ cdrom_beos.h +@@ -220,13 +219,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + crc32.o: crc32.@CPP_SUFFIX@ crc32.h ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -234,11 +233,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + devices.o: devices.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -248,11 +246,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + dma.o: dma.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -261,26 +258,26 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + eth.o: eth.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + eth_arpback.o: eth_arpback.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -288,11 +285,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_fbsd.o: eth_fbsd.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -302,11 +298,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_linux.o: eth_linux.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -316,11 +311,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_null.o: eth_null.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -330,11 +324,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_packetmaker.o: eth_packetmaker.@CPP_SUFFIX@ ../bochs.h ../config.h \ +@@ -344,11 +337,10 @@ + ../gui/gui.h ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h \ + ../iodev/pci.h ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_tap.o: eth_tap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -358,11 +350,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_tuntap.o: eth_tuntap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -372,11 +363,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_win32.o: eth_win32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -386,11 +376,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + extfpuirq.o: extfpuirq.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -400,11 +389,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + floppy.o: floppy.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -413,13 +401,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + guest2host.o: guest2host.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -427,11 +415,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + harddrv.o: harddrv.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -441,11 +428,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + ioapic.o: ioapic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -454,13 +440,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + iodebug.o: iodebug.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -468,11 +454,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + keyboard.o: keyboard.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -482,11 +467,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scancodes.h + ne2k.o: ne2k.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -495,13 +479,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + parallel.o: parallel.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -509,11 +493,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + pci.o: pci.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -522,13 +505,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pci2isa.o: pci2isa.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -536,11 +519,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + pciusb.o: pciusb.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -549,52 +531,52 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pcivga.o: pcivga.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pic.o: pic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pit.o: pit.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pit82c54.o: pit82c54.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -602,11 +584,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h pit82c54.h + pit_wrap.o: pit_wrap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -616,11 +597,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h pit_wrap.h + sb16.o: sb16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -629,13 +609,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + scancodes.o: scancodes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -643,11 +623,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scancodes.h + serial.o: serial.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -656,13 +635,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + serial_raw.o: serial_raw.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -670,11 +649,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + slowdown_timer.o: slowdown_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -684,11 +662,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + soundlnx.o: soundlnx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -698,11 +675,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + soundwin.o: soundwin.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -712,11 +688,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + unmapped.o: unmapped.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -726,10 +701,22 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h ++usb.o: usb.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ ++ ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ ++ ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ ++ ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ ++ ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ + ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ + ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h +@@ -739,13 +726,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + virt_timer.o: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -753,40 +740,51 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h +-biosdev.lo: biosdev.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ ++vmware3.o: vmware3.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../gui/gui.h \ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h +-cdrom.lo: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ ++biosdev.lo: biosdev.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ ++ ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ ++ ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ ++ ../pc_system.h ../plugin.h ../extplugin.h ../gui/gui.h \ ++ ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ ++ ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ ++ ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h ++cdrom.lo: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + cdrom_amigaos.lo: cdrom_amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -794,11 +792,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scsi_commands.h + cdrom_beos.lo: cdrom_beos.@CPP_SUFFIX@ cdrom_beos.h +@@ -808,13 +805,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + crc32.lo: crc32.@CPP_SUFFIX@ crc32.h ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -822,11 +819,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + devices.lo: devices.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -836,11 +832,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + dma.lo: dma.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -849,26 +844,26 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + eth.lo: eth.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + eth_arpback.lo: eth_arpback.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -876,11 +871,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_fbsd.lo: eth_fbsd.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -890,11 +884,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_linux.lo: eth_linux.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -904,11 +897,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_null.lo: eth_null.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -918,11 +910,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_packetmaker.lo: eth_packetmaker.@CPP_SUFFIX@ ../bochs.h ../config.h \ +@@ -932,11 +923,10 @@ + ../gui/gui.h ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h \ + ../iodev/pci.h ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_tap.lo: eth_tap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -946,11 +936,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_tuntap.lo: eth_tuntap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -960,11 +949,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + eth_win32.lo: eth_win32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -974,11 +962,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + extfpuirq.lo: extfpuirq.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -988,11 +975,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + floppy.lo: floppy.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1001,13 +987,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + guest2host.lo: guest2host.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1015,11 +1001,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + harddrv.lo: harddrv.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1029,11 +1014,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + ioapic.lo: ioapic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1042,13 +1026,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + iodebug.lo: iodebug.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1056,11 +1040,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + keyboard.lo: keyboard.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1070,11 +1053,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scancodes.h + ne2k.lo: ne2k.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1083,13 +1065,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + parallel.lo: parallel.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1097,11 +1079,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + pci.lo: pci.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1110,13 +1091,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pci2isa.lo: pci2isa.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1124,11 +1105,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + pciusb.lo: pciusb.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1137,52 +1117,52 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pcivga.lo: pcivga.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pic.lo: pic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pit.lo: pit.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ + ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ + ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + pit82c54.lo: pit82c54.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1190,11 +1170,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h pit82c54.h + pit_wrap.lo: pit_wrap.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1204,11 +1183,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h pit_wrap.h + sb16.lo: sb16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1217,13 +1195,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + scancodes.lo: scancodes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1231,11 +1209,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h scancodes.h + serial.lo: serial.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ +@@ -1244,13 +1221,13 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ +- ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ +- ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h + serial_raw.lo: serial_raw.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ +@@ -1258,11 +1235,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + slowdown_timer.lo: slowdown_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1272,11 +1248,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + soundlnx.lo: soundlnx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1286,11 +1261,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + soundwin.lo: soundwin.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1300,11 +1274,10 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h + unmapped.lo: unmapped.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ +@@ -1314,10 +1287,22 @@ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h ++usb.lo: usb.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../debug/debug.h \ ++ ../bxversion.h ../gui/siminterface.h ../state_file.h ../cpu/cpu.h \ ++ ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h ../pc_system.h \ ++ ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ ++ ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ ++ ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ + ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ + ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h +@@ -1327,24 +1312,36 @@ + ../plugin.h ../extplugin.h ../gui/gui.h ../gui/textconfig.h \ + ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h ../iodev/pci2isa.h \ + ../iodev/pcivga.h ../iodev/vga.h ../iodev/biosdev.h ../iodev/cmos.h \ +- ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h ../iodev/cdrom.h \ ++ ../iodev/dma.h ../iodev/floppy.h ../iodev/harddrv.h \ ++ ../iodev/vmware3.h ../iodev/cdrom.h ../iodev/keyboard.h \ ++ ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ ++ ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ ++ ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h ++virt_timer.lo: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ ++ ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ ++ ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ ++ ../pc_system.h ../plugin.h ../extplugin.h ../gui/gui.h \ ++ ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ ++ ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ ++ ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ + ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ + ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ +- ../iodev/serial.h ../iodev/sb16.h ../iodev/soundlnx.h \ +- ../iodev/soundwin.h ../iodev/unmapped.h ../iodev/eth.h \ +- ../iodev/ne2k.h ../iodev/guest2host.h ../iodev/slowdown_timer.h \ +- ../iodev/extfpuirq.h ../instrument/stubs/instrument.h +-virt_timer.lo: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ ++ ../instrument/stubs/instrument.h ++vmware3.lo: vmware3.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../debug/debug.h ../bxversion.h ../gui/siminterface.h ../state_file.h \ + ../cpu/cpu.h ../cpu/lazy_flags.h ../cpu/i387.h ../memory/memory.h \ + ../pc_system.h ../plugin.h ../extplugin.h ../gui/gui.h \ + ../gui/textconfig.h ../gui/keymap.h ../iodev/iodev.h ../iodev/pci.h \ + ../iodev/pci2isa.h ../iodev/pcivga.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ +- ../iodev/harddrv.h ../iodev/cdrom.h ../iodev/keyboard.h \ +- ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h ../iodev/pit_wrap.h \ +- ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ +- ../iodev/sb16.h ../iodev/soundlnx.h ../iodev/soundwin.h \ +- ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ ++ ../iodev/harddrv.h ../iodev/vmware3.h ../iodev/cdrom.h \ ++ ../iodev/keyboard.h ../iodev/parallel.h ../iodev/pic.h ../iodev/pit.h \ ++ ../iodev/pit_wrap.h ../iodev/pit82c54.h ../iodev/virt_timer.h \ ++ ../iodev/serial.h ../iodev/unmapped.h ../iodev/eth.h ../iodev/ne2k.h \ + ../iodev/guest2host.h ../iodev/slowdown_timer.h ../iodev/extfpuirq.h \ + ../instrument/stubs/instrument.h +Index: iodev/harddrv.cc +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/harddrv.cc,v +retrieving revision 1.96 +diff -u -r1.96 harddrv.cc +--- iodev/harddrv.cc 2 Mar 2003 23:59:10 -0000 1.96 ++++ iodev/harddrv.cc 4 Mar 2003 17:59:56 -0000 +@@ -31,12 +31,14 @@ + + + // Define BX_PLUGGABLE in files that can be compiled into plugins. For +-// platforms that require a special tag on exported symbols, BX_PLUGGABLE ++// platforms that require a special tag on exported symbols, BX_PLUGGABLE + // is used to know when we are exporting symbols and when we are importing. + #define BX_PLUGGABLE + + #include "bochs.h" + ++#include ++ + #define LOG_THIS theHardDrive-> + + // WARNING: dangerous options! +@@ -118,37 +120,16 @@ + #if DLL_HD_SUPPORT + # error code must be fixed to use DLL_HD_SUPPORT and 4 ata channels + #endif +- ++ + for (Bit8u channel=0; channelget() == BX_ATA_DEVICE_DISK) { + BX_DEBUG(( "Hard-Disk on target %d/%d",channel,device)); + BX_HD_THIS channels[channel].drives[device].device_type = IDE_DISK; ++ ++ /* instantiate the right class */ ++ switch (bx_options.atadevice[channel][device].Omode->get()) { ++ ++ case BX_ATA_MODE_FLAT: ++ BX_INFO(("HD on ata%d-%d: '%s' 'flat' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new default_image_t(); ++ break; ++ ++ case BX_ATA_MODE_CONCAT: ++ BX_INFO(("HD on ata%d-%d: '%s' 'concat' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new concat_image_t(); ++ break; ++ ++#if EXTERNAL_DISK_SIMULATOR ++ case BX_ATA_MODE_EXTDISKSIM: ++ BX_INFO(("HD on ata%d-%d: '%s' 'External Simulator' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new EXTERNAL_DISK_SIMULATOR_CLASS(); ++ break; ++#endif //EXTERNAL_DISK_SIMULATOR ++ ++#if DLL_HD_SUPPORT ++ case BX_ATA_MODE_DLL_HD: ++ BX_INFO(("HD on ata%d-%d: '%s' 'dll' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new dll_image_t(); ++ break; ++#endif //DLL_HD_SUPPORT ++ ++ case BX_ATA_MODE_SPARSE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'sparse' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new sparse_image_t(); ++ break; ++ ++ case BX_ATA_MODE_VMWARE3: ++ BX_INFO(("HD on ata%d-%d: '%s' 'vmware3' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new vmware3_image_t(); ++ break; ++ ++#if 0 ++ case BX_ATA_MODE_SPLIT: ++ BX_INFO(("HD on ata%d-%d: '%s' 'split' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new split_image_t(); ++ break; ++ ++ case BX_ATA_MODE_UNDOABLE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'undoable' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new undoable_image_t(); ++ break; ++ ++ case BX_ATA_MODE_GROWABLE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'growable' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new growable_image_t(); ++ break; ++ ++ case BX_ATA_MODE_VOLATILE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'volatile' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new volatile_image_t(); ++ break; ++ ++#if BX_SUPPORT_COMPRESSED_HD ++ case BX_ATA_MODE_Z_UNDOABLE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'z-undoable' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new compressed_undoable_image_t(); ++ break; ++ ++ case BX_ATA_MODE_Z_VOLATILE: ++ BX_INFO(("HD on ata%d-%d: '%s' 'z-volatile' mode ", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr ())); ++ channels[channel].drives[device].hard_drive = new compressed_volatile_image_t(); ++ break; ++#endif //BX_SUPPORT_COMPRESSED_HD ++ ++#endif //0 ++ default: ++ BX_PANIC(("HD on ata%d-%d: '%s' unsupported HD mode : %s", channel, device, ++ bx_options.atadevice[channel][device].Opath->getptr (), ++ atadevice_mode_names[bx_options.atadevice[channel][device].Omode->get()])); ++ break; ++ } ++ + int cyl = bx_options.atadevice[channel][device].Ocylinders->get (); + int heads = bx_options.atadevice[channel][device].Oheads->get (); + int spt = bx_options.atadevice[channel][device].Ospt->get (); +@@ -264,7 +336,6 @@ + if ((BX_HD_THIS channels[channel].drives[device].hard_drive->open(bx_options.atadevice[channel][device].Opath->getptr ())) < 0) { + BX_PANIC(("ata%d-%d: could not open hard drive image file '%s'", channel, device, bx_options.atadevice[channel][device].Opath->getptr ())); + } +- BX_INFO(("HD on ata%d-%d: '%s'",channel, device, bx_options.atadevice[channel][device].Opath->getptr ())); + } + else if (bx_options.atadevice[channel][device].Otype->get() == BX_ATA_DEVICE_CDROM) { + BX_DEBUG(( "CDROM on target %d/%d",channel,device)); +@@ -2382,8 +2453,10 @@ + bx_hard_drive_c::close_harddrive(void) + { + for (Bit8u channel=0; channelclose(); +- BX_HD_THIS channels[channel].drives[1].hard_drive->close(); ++ if(BX_HD_THIS channels[channel].drives[0].hard_drive != NULL) ++ BX_HD_THIS channels[channel].drives[0].hard_drive->close(); ++ if(BX_HD_THIS channels[channel].drives[1].hard_drive != NULL) ++ BX_HD_THIS channels[channel].drives[1].hard_drive->close(); + } + } + +@@ -3157,7 +3230,18 @@ + return ::write(fd, (char*) buf, count); + } + +-#if BX_SPLIT_HD_SUPPORT ++char increment_string (char *str, int diff) ++{ ++ // find the last character of the string, and increment it. ++ char *p = str; ++ while (*p != 0) p++; ++ BX_ASSERT (p>str); // choke on zero length strings ++ p--; // point to last character of the string ++ (*p) += diff; // increment to next/previous ascii code. ++ BX_DEBUG(("increment string returning '%s'", str)); ++ return (*p); ++} ++ + /*** concat_image_t function definitions ***/ + + concat_image_t::concat_image_t () +@@ -3167,13 +3251,7 @@ + + void concat_image_t::increment_string (char *str) + { +- // find the last character of the string, and increment it. +- char *p = str; +- while (*p != 0) p++; +- BX_ASSERT (p>str); // choke on zero length strings +- p--; // point to last character of the string +- ++(*p); // increment to next ascii code. +- BX_DEBUG(("concat_image.increment string returning '%s'", str)); ++ ::increment_string(str, +1); + } + + int concat_image_t::open (const char* pathname0) +@@ -3283,7 +3361,7 @@ + // notice if anyone does sequential read or write without seek in between. + // This can be supported pretty easily, but needs additional checks for + // end of a partial image. +- if (!seek_was_last_op) ++ if (!seek_was_last_op) + BX_PANIC( ("no seek before read")); + return ::read(fd, (char*) buf, count); + } +@@ -3298,7 +3376,560 @@ + BX_PANIC( ("no seek before write")); + return ::write(fd, (char*) buf, count); + } +-#endif /* BX_SPLIT_HD_SUPPORT */ ++ ++/* Do these utility functions maybe already exist elsewhere? ++*/ ++inline uint32 little_to_local_endian(uint32 value) ++{ ++#ifdef BX_LITTLE_ENDIAN ++ // Already in local endian ++ return value; ++#else /* BX_BIG_ENDIAN */ ++ return read_32bit((const uint8*)&value); ++#endif ++} ++ ++ ++inline uint32 local_to_little_endian(uint32 value) ++{ ++#ifdef BX_LITTLE_ENDIAN ++ // Already in local endian ++ return value; ++#else /* BX_BIG_ENDIAN */ ++ uint32 ret = (((value >> 0) & 0xff) << 24) + (((value >> 8) & 0xff) << 16) + (((value >> 16) & 0xff) << 8) + (((value >> 24) & 0xff) << 0); ++ ++ return ret; ++#endif ++} ++ ++/*** sparse_image_t function definitions ***/ ++sparse_image_t::sparse_image_t () ++{ ++ fd = -1; ++ pathname = NULL; ++#ifdef _POSIX_MAPPED_FILES ++ mmap_header = NULL; ++#endif ++ pagetable = NULL; ++} ++ ++ ++/* ++void showpagetable(uint32 * pagetable, size_t numpages) ++{ ++ printf("Non null pages: "); ++ for (int i = 0; i < numpages; i++) ++ { ++ if (pagetable[i] != 0xffffffff) ++ { ++ printf("%d ", i); ++ } ++ } ++ printf("\n"); ++} ++*/ ++ ++ ++void sparse_image_t::read_header() ++{ ++ BX_ASSERT(sizeof(header) == HEADER_SIZE); ++ ++ int ret = ::read(fd, &header, sizeof(header)); ++ ++ if (-1 == ret) ++ { ++ panic(strerror(errno)); ++ } ++ ++ if (sizeof(header) != ret) ++ { ++ panic("could not read entire header"); ++ } ++ ++ if (little_to_local_endian(header.magic) != SPARSE_HEADER_MAGIC) ++ { ++ panic("failed header magic check"); ++ } ++ ++ if (little_to_local_endian(header.version) != 1) ++ { ++ panic("unknown version in header"); ++ } ++ ++ pagesize = little_to_local_endian(header.pagesize); ++ uint32 numpages = little_to_local_endian(header.numpages); ++ ++ total_size = pagesize; ++ total_size *= numpages; ++ ++ pagesize_shift = 0; ++ while ((pagesize >> pagesize_shift) > 1) pagesize_shift++; ++ ++ if ((1 << pagesize_shift) != pagesize) ++ { ++ panic("failed block size header check"); ++ } ++ ++ pagesize_mask = pagesize - 1; ++ ++ size_t preamble_size = (sizeof(uint32) * numpages) + sizeof(header); ++ data_start = 0; ++ while (data_start < preamble_size) data_start += pagesize; ++ ++ bool did_mmap = false; ++ ++#ifdef _POSIX_MAPPED_FILES ++// Try to memory map from the beginning of the file (0 is trivially a page multiple) ++ void * mmap_header = mmap(NULL, preamble_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); ++ if (mmap_header == MAP_FAILED) ++ { ++ BX_INFO(("failed to mmap sparse disk file - using conventional file access")); ++ mmap_header = NULL; ++ } ++ else ++ { ++ mmap_length = preamble_size; ++ did_mmap = true; ++ pagetable = ((uint32 *) (((uint8 *) mmap_header) + sizeof(header))); ++ ++// system_pagesize = getpagesize(); ++ system_pagesize_mask = getpagesize() - 1; ++ } ++#endif ++ ++ if (!did_mmap) ++ { ++ pagetable = new uint32[numpages]; ++ ++ if (pagetable == NULL) ++ { ++ panic("could not allocate memory for sparse disk block table"); ++ } ++ ++ ret = ::read(fd, pagetable, sizeof(uint32) * numpages); ++ ++ if (-1 == ret) ++ { ++ panic(strerror(errno)); ++ } ++ ++ if ((sizeof(uint32) * numpages) != ret) ++ { ++ panic("could not read entire block table"); ++ } ++ } ++} ++ ++int sparse_image_t::open (const char* pathname0) ++{ ++ pathname = strdup(pathname0); ++ BX_DEBUG(("sparse_image_t.open")); ++ ++ fd = ::open(pathname, O_RDWR ++#ifdef O_BINARY ++ | O_BINARY ++#endif ++ ); ++ ++ if (fd < 0) ++ { ++ // open failed. ++ return -1; ++ } ++ BX_DEBUG(("sparse_image: open image %s", pathname)); ++ ++ read_header(); ++ ++ struct stat stat_buf; ++ if (0 != fstat(fd, &stat_buf)) panic(("fstat() returns error!")); ++ ++ underlying_filesize = stat_buf.st_size; ++ ++ if ((underlying_filesize % pagesize) != 0) ++ panic("size of sparse disk image is not multiple of page size"); ++ ++ underlying_current_filepos = 0; ++ if (-1 == ::lseek(fd, 0, SEEK_SET)) ++ panic("error while seeking to start of file"); ++ ++ lseek(0, SEEK_SET); ++ ++ //showpagetable(pagetable, header.numpages); ++ ++ char * parentpathname = strdup(pathname); ++ char lastchar = ::increment_string(parentpathname, -1); ++ ++ if ((lastchar >= '0') && (lastchar <= '9')) ++ { ++ struct stat stat_buf; ++ if (0 == lstat(parentpathname, &stat_buf)) ++ { ++ parent_image = new sparse_image_t(); ++ int ret = parent_image->open(parentpathname); ++ if (ret != 0) return ret; ++ if ( (parent_image->pagesize != pagesize) ++ || (parent_image->total_size != total_size)) ++ { ++ panic("child drive image does not have same page count/page size configuration"); ++ } ++ } ++ } ++ ++ if (parentpathname != NULL) free(parentpathname); ++ ++ return 0; // success. ++} ++ ++void sparse_image_t::close () ++{ ++ BX_DEBUG(("concat_image_t.close")); ++ if (pathname != NULL) ++ { ++ free(pathname); ++ } ++#ifdef _POSIX_MAPPED_FILES ++ if (mmap_header != NULL) ++ { ++ int ret = munmap(mmap_header, mmap_length); ++ if (ret != 0) ++ BX_INFO(("failed to un-memory map sparse disk file")); ++ } ++ pagetable = NULL; // We didn't malloc it ++#endif ++ if (fd > -1) { ++ ::close(fd); ++ } ++ if (pagetable != NULL) ++ { ++ delete [] pagetable; ++ } ++ if (parent_image != NULL) ++ { ++ delete parent_image; ++ } ++} ++ ++off_t sparse_image_t::lseek (off_t offset, int whence) ++{ ++ //showpagetable(pagetable, header.numpages); ++ ++ if ((offset % 512) != 0) ++ BX_PANIC( ("lseek HD with offset not multiple of 512")); ++ if (whence != SEEK_SET) ++ BX_PANIC( ("lseek HD with whence not SEEK_SET")); ++ ++ BX_DEBUG(("sparse_image_t.lseek(%d)", whence)); ++ ++ if (offset > total_size) ++ { ++ BX_PANIC(("sparse_image_t.lseek to byte %ld failed", (long)offset)); ++ return -1; ++ } ++ ++ //printf("Seeking to position %ld\n", (long) offset); ++ ++ set_virtual_page(offset >> pagesize_shift); ++ position_page_offset = offset & pagesize_mask; ++ ++ return 0; ++} ++ ++inline off_t sparse_image_t::get_physical_offset() ++{ ++ off_t physical_offset = data_start; ++ physical_offset += (position_physical_page << pagesize_shift); ++ physical_offset += position_page_offset; ++ ++ return physical_offset; ++} ++ ++inline void sparse_image_t::set_virtual_page(uint32 new_virtual_page) ++{ ++ position_virtual_page = new_virtual_page; ++ ++ position_physical_page = little_to_local_endian(pagetable[position_virtual_page]); ++} ++ ++ssize_t sparse_image_t::read_page_fragment(uint32 read_virtual_page, uint32 read_page_offset, size_t read_size, void * buf) ++{ ++ if (read_virtual_page != position_virtual_page) ++ { ++ set_virtual_page(read_virtual_page); ++ } ++ ++ position_page_offset = read_page_offset; ++ ++ if (position_physical_page == PAGE_NOT_ALLOCATED) ++ { ++ if (parent_image != NULL) ++ { ++ return parent_image->read_page_fragment(read_virtual_page, read_page_offset, read_size, buf); ++ } ++ else ++ { ++ memset(buf, read_size, 0); ++ } ++ } ++ else ++ { ++ off_t physical_offset = get_physical_offset(); ++ ++ if (physical_offset != underlying_current_filepos) ++ { ++ int ret = ::lseek(fd, physical_offset, SEEK_SET); ++ // underlying_current_filepos update deferred ++ if (ret == -1) ++ panic(strerror(errno)); ++ } ++ ++ //printf("Reading %s at position %ld size %d\n", pathname, (long) physical_offset, (long) read_size); ++ ssize_t readret = ::read(fd, buf, read_size); ++ ++ if (readret == -1) ++ { ++ panic(strerror(errno)); ++ } ++ ++ if (readret != read_size) ++ { ++ panic("could not read block contents from file"); ++ } ++ ++ underlying_current_filepos = physical_offset + read_size; ++ } ++ ++ return read_size; ++} ++ ++ssize_t sparse_image_t::read(void* buf, size_t count) ++{ ++ //showpagetable(pagetable, header.numpages); ++ ssize_t total_read = 0; ++ ++ if (bx_dbg.disk) ++ BX_DEBUG(("sparse_image_t.read %ld bytes", (long)count)); ++ ++ while (count != 0) ++ { ++ size_t can_read = pagesize - position_page_offset; ++ if (count < can_read) can_read = count; ++ ++ BX_ASSERT (can_read != 0); ++ ++ size_t was_read = read_page_fragment(position_virtual_page, position_page_offset, can_read, buf); ++ ++ BX_ASSERT(was_read == can_read); ++ ++ total_read += can_read; ++ ++ position_page_offset += can_read; ++ if (position_page_offset == pagesize) ++ { ++ position_page_offset = 0; ++ set_virtual_page(position_virtual_page + 1); ++ } ++ ++ BX_ASSERT(position_page_offset < pagesize); ++ ++ buf = (((uint8 *) buf) + can_read); ++ count -= can_read; ++ } ++ ++ return total_read; ++} ++ ++void sparse_image_t::panic(const char * message) ++{ ++ char buffer[1024]; ++ if (message == NULL) ++ { ++ snprintf(buffer, sizeof(buffer), "error with sparse disk image %s", pathname); ++ } ++ else ++ { ++ snprintf(buffer, sizeof(buffer), "error with sparse disk image %s - %s", pathname, message); ++ } ++ BX_PANIC((buffer)); ++} ++ ++ssize_t sparse_image_t::write (const void* buf, size_t count) ++{ ++ //showpagetable(pagetable, header.numpages); ++ ++ ssize_t total_written = 0; ++ ++ uint32 update_pagetable_start = position_virtual_page; ++ uint32 update_pagetable_count = 0; ++ ++ if (bx_dbg.disk) ++ BX_DEBUG(("sparse_image_t.write %ld bytes", (long)count)); ++ ++ while (count != 0) ++ { ++ size_t can_write = pagesize - position_page_offset; ++ if (count < can_write) can_write = count; ++ ++ BX_ASSERT (can_write != 0); ++ ++ if (position_physical_page == PAGE_NOT_ALLOCATED) ++ { ++ // We just add on another page at the end of the file ++ // Reclamation, compaction etc should currently be done off-line ++ ++ size_t data_size = underlying_filesize - data_start; ++ BX_ASSERT((data_size % pagesize) == 0); ++ ++ ++ uint32 data_size_pages = data_size / pagesize; ++ uint32 next_data_page = data_size_pages; ++ ++ pagetable[position_virtual_page] = local_to_little_endian(next_data_page); ++ position_physical_page = next_data_page; ++ ++ off_t page_file_start = data_start + (position_physical_page << pagesize_shift); ++ ++ if (parent_image != NULL) ++ { ++ // If we have a parent, we must merge our portion with the parent ++ void * writebuffer = NULL; ++ ++ if (can_write == pagesize) ++ { ++ writebuffer = (void *) buf; ++ } ++ else ++ { ++ writebuffer = malloc(pagesize); ++ if (writebuffer == NULL) ++ panic("Cannot allocate sufficient memory for page-merge in write"); ++ ++ // Read entire page - could optimize, but simple for now ++ parent_image->read_page_fragment(position_virtual_page, 0, pagesize, writebuffer); ++ ++ void * dest_start = ((uint8 *) writebuffer) + position_page_offset; ++ memcpy(dest_start, buf, can_write); ++ } ++ ++ int ret; ++ ret = ::lseek(fd, page_file_start, SEEK_SET); ++ // underlying_current_filepos update deferred ++ if (-1 == ret) panic(strerror(errno)); ++ ++ ret = ::write(fd, writebuffer, pagesize); ++ ++ if (-1 == ret) panic(strerror(errno)); ++ ++ if (pagesize != ret) panic("failed to write entire merged page to disk"); ++ ++ if (can_write != pagesize) ++ { ++ free(writebuffer); ++ } ++ } ++ else ++ { ++ // We need to write a zero page because read has been returning zeroes ++ // We seek as close to the page end as possible, and then write a little ++ // This produces a sparse file which has blanks ++ // Also very quick, even when pagesize is massive ++ int ret; ++ ret = ::lseek(fd, page_file_start + pagesize - 4, SEEK_SET); ++ // underlying_current_filepos update deferred ++ if (-1 == ret) panic(strerror(errno)); ++ ++ uint32 zero = 0; ++ ret = ::write(fd, &zero, 4); ++ ++ if (-1 == ret) panic(strerror(errno)); ++ ++ if (4 != ret) panic("failed to write entire blank page to disk"); ++ } ++ ++ update_pagetable_count = (position_virtual_page - update_pagetable_start) + 1; ++ underlying_filesize = underlying_current_filepos = page_file_start + pagesize; ++ } ++ ++ BX_ASSERT(position_physical_page != PAGE_NOT_ALLOCATED); ++ ++ off_t physical_offset = get_physical_offset(); ++ ++ if (physical_offset != underlying_current_filepos) ++ { ++ int ret = ::lseek(fd, physical_offset, SEEK_SET); ++ // underlying_current_filepos update deferred ++ if (ret == -1) ++ panic(strerror(errno)); ++ } ++ ++ //printf("Writing at position %ld size %d\n", (long) physical_offset, can_write); ++ ssize_t writeret = ::write(fd, buf, can_write); ++ ++ if (writeret == -1) ++ { ++ panic(strerror(errno)); ++ } ++ ++ if (writeret != can_write) ++ { ++ panic("could not write block contents to file"); ++ } ++ ++ underlying_current_filepos = physical_offset + can_write; ++ ++ total_written += can_write; ++ ++ position_page_offset += can_write; ++ if (position_page_offset == pagesize) ++ { ++ position_page_offset = 0; ++ set_virtual_page(position_virtual_page + 1); ++ } ++ ++ BX_ASSERT(position_page_offset < pagesize); ++ ++ buf = (((uint8 *) buf) + can_write); ++ count -= can_write; ++ } ++ ++ if (update_pagetable_count != 0) ++ { ++ bool done = false; ++ off_t pagetable_write_from = sizeof(header) + (sizeof(uint32) * update_pagetable_start); ++ size_t write_bytecount = update_pagetable_count * sizeof(uint32); ++ ++#ifdef _POSIX_MAPPED_FILES ++ if (mmap_header != NULL) ++ { ++ // Sync from the beginning of the page ++ size_t system_page_offset = pagetable_write_from & system_pagesize_mask; ++ void * start = ((uint8 *) mmap_header + pagetable_write_from - system_page_offset); ++ ++ int ret = msync(start, system_page_offset + write_bytecount, MS_ASYNC); ++ ++ if (ret != 0) ++ panic(strerror(errno)); ++ ++ done = true; ++ } ++#endif ++ ++ if (!done) ++ { ++ int ret = ::lseek(fd, pagetable_write_from, SEEK_SET); ++ // underlying_current_filepos update deferred ++ if (ret == -1) panic(strerror(errno)); ++ ++ //printf("Writing header at position %ld size %ld\n", (long) pagetable_write_from, (long) write_bytecount); ++ ret = ::write(fd, &pagetable[update_pagetable_start], write_bytecount); ++ if (ret == -1) panic(strerror(errno)); ++ if (ret != write_bytecount) panic("could not write entire updated block header"); ++ ++ underlying_current_filepos = pagetable_write_from + write_bytecount; ++ } ++ } ++ ++ return total_written; ++} + + #if DLL_HD_SUPPORT + /*** dll_image_t function definitions ***/ +@@ -3369,7 +4000,7 @@ + return -1; + } + } +-#endif ++#endif // DLL_HD_SUPPORT + + error_recovery_t::error_recovery_t () + { +Index: iodev/harddrv.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/harddrv.h,v +retrieving revision 1.19 +diff -u -r1.19 harddrv.h +--- iodev/harddrv.h 2 Mar 2003 23:59:11 -0000 1.19 ++++ iodev/harddrv.h 4 Mar 2003 17:59:56 -0000 +@@ -64,6 +64,7 @@ + unsigned sectors; + }; + ++// FLAT MODE + class default_image_t : public device_image_t + { + public: +@@ -87,10 +88,10 @@ + + private: + int fd; +- ++ + }; + +-#if BX_SPLIT_HD_SUPPORT ++// CONCAT MODE + class concat_image_t : public device_image_t + { + public: +@@ -135,7 +136,96 @@ + int fd; // fd to use for reads and writes + off_t thismin, thismax; // byte offset boundary of this image + }; +-#endif /* BX_SPLIT_HD_SUPPORT */ ++ ++// SPARSE MODE ++class sparse_image_t : public device_image_t ++{ ++ ++// Format of a sparse file: ++// 512 byte header, containing details such as page size and number of pages ++// Page indirection table, mapping virtual pages to physical pages within file ++// Physical pages till end of file ++ ++#define SPARSE_HEADER_MAGIC (0x02468ace) ++#define SPARSE_HEADER_VERSION 1 ++#define HEADER_SIZE (512) // Plenty of room for later ++#define PAGE_NOT_ALLOCATED (0xffffffff) ++ ++ typedef struct ++ { ++ uint32 magic; ++ uint32 version; ++ uint32 pagesize; ++ uint32 numpages; ++ ++ uint32 padding[60]; ++ } sparse_header_t; ++ ++ public: ++ // Default constructor ++ sparse_image_t(); ++ ++ // Open a image. Returns non-negative if successful. ++ int open (const char* pathname); ++ ++ // Close the image. ++ void close (); ++ ++ // Position ourselves. Return the resulting offset from the ++ // beginning of the file. ++ off_t lseek (off_t offset, int whence); ++ ++ // Read count bytes to the buffer buf. Return the number of ++ // bytes read (count). ++ ssize_t read (void* buf, size_t count); ++ ++ // Write count bytes from buf. Return the number of bytes ++ // written (count). ++ ssize_t write (const void* buf, size_t count); ++ ++ private: ++ int fd; ++ ++#ifdef _POSIX_MAPPED_FILES ++ void * mmap_header; ++ size_t mmap_length; ++ size_t system_pagesize_mask; ++#endif ++ uint32 * pagetable; ++ ++ // Header is written to disk in little-endian (x86) format ++ // Thus needs to be converted on big-endian systems before read ++ // The pagetable is also kept little endian ++ ++ sparse_header_t header; ++ ++ uint32 pagesize; ++ int pagesize_shift; ++ uint32 pagesize_mask; ++ ++ off_t data_start; ++ off_t underlying_filesize; ++ ++ char * pathname; ++ ++ off_t position; ++ ++ uint32 position_virtual_page; ++ uint32 position_physical_page; ++ uint32 position_page_offset; ++ ++ off_t underlying_current_filepos; ++ ++ off_t total_size; ++ ++ void panic(const char * message); ++ off_t sparse_image_t::get_physical_offset(); ++ void sparse_image_t::set_virtual_page(uint32 new_virtual_page); ++ void read_header(); ++ ssize_t read_page_fragment(uint32 read_virtual_page, uint32 read_page_offset, size_t read_size, void * buf); ++ ++ sparse_image_t * parent_image; ++}; + + #if EXTERNAL_DISK_SIMULATOR + #include "external-disk-simulator.h" +@@ -367,3 +457,4 @@ + #endif + + }; ++ +Index: iodev/iodev.h +=================================================================== +RCS file: /cvsroot/bochs/bochs/iodev/iodev.h,v +retrieving revision 1.31 +diff -u -r1.31 iodev.h +--- iodev/iodev.h 2 Mar 2003 23:59:11 -0000 1.31 ++++ iodev/iodev.h 4 Mar 2003 17:59:56 -0000 +@@ -397,6 +397,7 @@ + #include "iodev/dma.h" + #include "iodev/floppy.h" + #include "iodev/harddrv.h" ++#include "iodev/vmware3.h" + #if BX_IODEBUG_SUPPORT + # include "iodev/iodebug.h" + #endif +Index: misc/bximage.c +=================================================================== +RCS file: /cvsroot/bochs/bochs/misc/bximage.c,v +retrieving revision 1.17 +diff -u -r1.17 bximage.c +--- misc/bximage.c 26 Nov 2002 11:21:31 -0000 1.17 ++++ misc/bximage.c 4 Mar 2003 17:59:56 -0000 +@@ -1,4 +1,4 @@ +-/* ++/* + * misc/bximage.c + * $Id: patch.harddisk-modes,v 1.1 2003-03-04 21:08:39 cbothamy Exp $ + * +@@ -16,6 +16,18 @@ + #endif + #include "config.h" + ++#if BX_SPARSE_HD_SUPPORT ++#include ++ ++#define uint8 Bit8u ++#define uint16 Bit16u ++#define uint32 Bit32u ++ ++#define INCLUDE_ONLY_SPARSE_HEADER 1 ++#include "../iodev/harddrv.h" ++ ++#endif // BX_SPARSE_HD_SUPPORT ++ + char *EOF_ERR = "ERROR: End of input"; + char *rcsid = "$Id: patch.harddisk-modes,v 1.1 2003-03-04 21:08:39 cbothamy Exp $"; + char *divider = "========================================================================"; +@@ -190,12 +202,41 @@ + return 0; + } + ++#if BX_SPARSE_HD_SUPPORT ++// fileset is like memset but for a file handle ++void fileset(FILE * fp, int c, size_t n) ++{ ++#define BLOCK_SIZE (1024) ++ int block[BLOCK_SIZE]; ++ size_t left_to_write = n; ++ ++ memset(block, c, sizeof(block)); ++ ++ while (left_to_write > 0) ++ { ++ size_t write = sizeof(block); ++ if (write > left_to_write) write = left_to_write; ++ ++ if (1 != fwrite(block, write, 1, fp)) ++ { ++ fclose (fp); ++ fatal ("ERROR: The disk image is not complete - could not write data block!"); ++ } ++ ++ left_to_write -= write; ++ } ++ ++} ++#endif ++ + /* produce the image file */ +-int make_image (Bit64u sec, char *filename) ++int make_image (Bit64u sec, char *filename, int sparse) + { +- FILE *fp; ++ FILE *fp; + char buffer[1024]; +- ++#if BX_SPARSE_HD_SUPPORT ++ Bit64u numpages; ++#endif + // check if it exists before trashing someone's disk image + fp = fopen (filename, "r"); + if (fp) { +@@ -203,7 +244,7 @@ + sprintf (buffer, "\nThe disk image '%s' already exists. Are you sure you want to replace it?\nPlease type yes or no. [no] ", filename); + if (ask_yn (buffer, 0, &confirm) < 0) + fatal (EOF_ERR); +- if (!confirm) ++ if (!confirm) + fatal ("ERROR: Aborted"); + fclose (fp); + } +@@ -221,27 +262,69 @@ + + printf ("\nWriting: ["); + +- /* ++#if BX_SPARSE_HD_SUPPORT ++ if (sparse) ++ { ++ sparse_header_t header; ++ size_t sizesofar; ++ size_t padtopagesize; ++ ++ memset(&header, 0, sizeof(header)); ++ header.magic = SPARSE_HEADER_MAGIC; ++ header.version = SPARSE_HEADER_VERSION; ++ ++ header.pagesize = (1 << 10) * 32; // Use 32 KB Pages - could be configurable ++ numpages = (sec / (header.pagesize / 512)) + 1; ++ ++ header.numpages = numpages; ++ ++ if (numpages != header.numpages) ++ { ++ fclose (fp); ++ fatal ("ERROR: The disk image is too large for a sparse image!"); ++ // Could increase page size here. ++ // But note this only happens at 128 Terabytes! ++ } ++ ++ if (fwrite(&header, sizeof(header), 1, fp) != 1) ++ { ++ fclose (fp); ++ fatal ("ERROR: The disk image is not complete - could not write header!"); ++ } ++ ++ fileset(fp, 0xff, 4 * header.numpages); ++ ++ sizesofar = HEADER_SIZE + (4 * header.numpages); ++ padtopagesize = header.pagesize - (sizesofar & (header.pagesize - 1)); ++ ++ fileset(fp, 0, padtopagesize); ++ } ++#endif ++ ++ if (!sparse) ++ { ++ /* + * seek to sec*512-1 and write a single character. + * can't just do: fseek(fp, 512*sec-1, SEEK_SET) + * because 512*sec may be too large for signed int. + */ +- while (sec > 0) +- { +- /* temp <-- min(sec, 4194303) ++ while (sec > 0) ++ { ++ /* temp <-- min(sec, 4194303) + * 4194303 is (int)(0x7FFFFFFF/512) + */ +- long temp = ((sec < 4194303) ? sec : 4194303); +- fseek(fp, 512*temp, SEEK_CUR); +- sec -= temp; +- } +- +- fseek(fp, -1, SEEK_CUR); +- if (fputc('\0', fp) == EOF) +- { +- fclose (fp); +- fatal ("ERROR: The disk image is not complete!"); +- } ++ long temp = ((sec < 4194303) ? sec : 4194303); ++ fseek(fp, 512*temp, SEEK_CUR); ++ sec -= temp; ++ } ++ ++ fseek(fp, -1, SEEK_CUR); ++ if (fputc('\0', fp) == EOF) ++ { ++ fclose (fp); ++ fatal ("ERROR: The disk image is not complete!"); ++ } ++ } + + printf ("] Done.\n"); + fclose (fp); +@@ -254,6 +337,7 @@ + Bit64s sectors = 0; + char filename[256]; + char bochsrc_line[256]; ++ int sparse = 0; + print_banner (); + filename[0] = 0; + if (ask_menu (fdhd_menu, fdhd_n_choices, fdhd_choices, 1, &hd) < 0) +@@ -273,6 +357,10 @@ + printf (" total size=%.2f megabytes\n", (float)sectors*512.0/1024.0/1024.0); + if (ask_string ("\nWhat should I name the image?\n[c.img] ", "c.img", filename) < 0) + fatal (EOF_ERR); ++#if BX_SPARSE_HD_SUPPORT ++ if (ask_yn ("\nShould I create a sparse image?\nPlease type yes or no. [no] ", 0, &sparse) < 0) ++ fatal (EOF_ERR); ++#endif //BX_SPARSE_HD_SUPPORT + sprintf (bochsrc_line, "ata0-master: type=disk, path=\"%s\", cylinders=%d, heads=%d, spt=%d", filename, cyl, heads, spt); + } else { + int fdsize, cyl=0, heads=0, spt=0; +@@ -285,7 +373,7 @@ + case 2: name="1_2"; cyl=80; heads=2; spt=15; break; /* 1.2 meg */ + case 3: name="1_44"; cyl=80; heads=2; spt=18; break; /* 1.44 meg */ + case 4: name="2_88"; cyl=80; heads=2; spt=36; break; /* 2.88 meg */ +- default: ++ default: + fatal ("ERROR: fdsize out of range"); + } + sectors = cyl*heads*spt; +@@ -303,13 +391,13 @@ + fatal ("ERROR: Illegal disk size!"); + if (strlen (filename) < 1) + fatal ("ERROR: Illegal filename"); +- make_image (sectors, filename); ++ make_image (sectors, filename, sparse); + printf ("\nI wrote %lld bytes to %s.\n", sectors*512, filename); + printf ("\nThe following line should appear in your bochsrc:\n"); + printf (" %s\n", bochsrc_line); + myexit(0); + + // make picky compilers (c++, gcc) happy, +- // even though we leave via 'myexit' just above ++ // even though we leave via 'myexit' just above + return 0; + } +--- /dev/null Fri Oct 18 15:15:18 2002 ++++ iodev/vmware3.cc Tue Mar 4 16:15:02 2003 +@@ -0,0 +1,392 @@ ++/* ++ * This file provides support for VMWare's virtual disk image ++ * format. ++ * ++ * Author: Sharvil Nanavati, for Net Integration Technologies, Inc. ++ * Contact: snrrrub@yahoo.com ++ * ++ * Copyright (C) 2003 Net Integration Technologies, Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include "bochs.h" ++ ++/* Not very friendly... */ ++extern bx_hard_drive_c *theHardDrive; ++#define LOG_THIS theHardDrive-> ++ ++bool vmware3_image_t::is_valid_header(COW_Header & header) ++{ ++ if(header.id[0] != 'C' || header.id[1] != 'O' || header.id[2] != 'W' || ++ header.id[3] != 'D') ++ { ++ BX_DEBUG(("not a vmware3 COW disk")); ++ return false; ++ } ++ ++ if(header.header_version != 3) ++ { ++ BX_DEBUG(("unsupported vmware3 COW disk header version")); ++ ++ return false; ++ } ++ ++ if(header.vmware_version != 2) ++ { ++ BX_DEBUG(("unsupported vmware3 COW disk version")); ++ return false; ++ } ++ ++ return true; ++} ++ ++char * vmware3_image_t::generate_cow_name(const char * filename, unsigned chain) ++{ ++ char * name = new char[strlen(filename) + 4]; ++ if(name == 0) ++ BX_PANIC(("unable to allocate %d bytes for vmware3 COW file name (base: %s, chain: %d)", strlen(filename) + 4, filename, chain)); ++ strcpy(name, filename); ++ if(chain != 0) ++ { ++ char * period = strrchr(name, '.'); ++ if (period != 0) ++ { ++ char temp[1024]; ++ strcpy(temp, period + 1); ++ *period = 0; ++ sprintf(name, "%s-%02d.%s", name, chain + 1, temp); ++ } ++ else ++ sprintf(name, "%s-%02d", name, chain + 1); ++ } ++ return name; ++} ++ ++/* ++ * This function will panic if errors occur when attempting to open an image ++ * file. Now if only I could use exceptions to handle the errors in an elegant ++ * fashion... ++ */ ++int vmware3_image_t::open(const char * pathname) ++{ ++ COW_Header header; ++ int file; ++ int flags = O_RDWR; ++#ifdef O_BINARY ++ flags |= O_BINARY ++#endif ++ ++ /* Open the virtual disk */ ++ file = ::open(pathname, flags); ++ ++ if(file < 0) ++ return -1; ++ ++ /* Read the header */ ++ if(::read(file, &header, sizeof(COW_Header)) < 0) ++ BX_PANIC(("unable to read vmware3 COW Disk header from file '%s'", pathname)); ++ ++ /* Make sure it's a valid header */ ++ if(!is_valid_header(header)) ++ BX_PANIC(("invalid vmware3 COW Disk image")); ++ ++ ::close(file); ++ ++ tlb_size = header.tlb_size_sectors * 512; ++ slb_count = (1 << FL_SHIFT) / tlb_size; ++ images = new COW_Image [header.number_of_chains]; ++ ++ off_t offset = 0; ++ for (int i = 0; i < header.number_of_chains; ++i) ++ { ++ char * filename = generate_cow_name(pathname, i); ++ current = &images[i]; ++ ++ current->fd = ::open(filename, flags); ++ if(current->fd < 0) ++ BX_PANIC(("unable to open vmware3 COW Disk file '%s'", filename)); ++ ++ if(::read(current->fd, ¤t->header, sizeof(COW_Header)) < 0) ++ BX_PANIC(("unable to read header or invalid header in vmware3 COW Disk file '%s'", filename)); ++ ++ if(!is_valid_header(current->header)) ++ BX_PANIC(("invalid vmware3 COW Disk file '%s'", filename)); ++ ++ current->flb = new unsigned [current->header.flb_count]; ++ if(current->flb == 0) ++ BX_PANIC(("cannot allocate %d bytes for flb in vmware3 COW Disk '%s'", current->header.flb_count * 4, filename)); ++ ++ current->slb = new unsigned * [current->header.flb_count]; ++ if(current->slb == 0) ++ BX_PANIC(("cannot allocate %d bytes for slb in vmware3 COW Disk '%s'", current->header.flb_count * 4, filename)); ++ ++ for(int j = 0; j < current->header.flb_count; ++j) ++ { ++ current->slb[j] = new unsigned [slb_count]; ++ if(current->slb[j] == 0) ++ BX_PANIC(("cannot allocate %d bytes for slb[] in vmware3 COW Disk '%s'", slb_count * 4, filename)); ++ } ++ ++ current->tlb = new char [tlb_size]; ++ if(current->tlb == 0) ++ BX_PANIC(("cannot allocate %d bytes for tlb in vmware3 COW Disk '%s'", tlb_size, filename)); ++ ++ if(::lseek(current->fd, current->header.flb_offset_sectors * 512, SEEK_SET) < 0) ++ BX_PANIC(("unable to seek vmware3 COW Disk file '%s'", filename)); ++ ++ if(::read(current->fd, (char*)current->flb, current->header.flb_count * 4) < 0) ++ BX_PANIC(("unable to read flb from vmware3 COW Disk file '%s'", filename)); ++ ++ for(int j = 0; j < current->header.flb_count; ++j) ++ if(current->flb[j] != 0) ++ { ++ if(::lseek(current->fd, current->flb[j] * 512, SEEK_SET) < 0) ++ BX_PANIC(("unable to seek vmware3 COW Disk file '%s'", filename)); ++ if(::read(current->fd, (char*)current->slb[j], slb_count * 4) < 0) ++ BX_PANIC(("unable to read slb from vmware3 COW Disk file '%s'", filename)); ++ } ++ ++ current->min_offset = offset; ++ offset += current->header.total_sectors * 512; ++ current->max_offset = offset; ++ ++ current->offset = INVALID_OFFSET; ++ current->synced = true; ++ delete[] filename; ++ } ++ current = &images[0]; ++ requested_offset = 0; ++ cylinders = header.cylinders_in_disk; ++ heads = header.heads_in_disk; ++ sectors = header.sectors_in_disk; ++ return 1; ++} ++ ++off_t vmware3_image_t::perform_seek() ++{ ++ if(requested_offset < current->min_offset || requested_offset >= current->max_offset) ++ { ++ if(!sync()) ++ { ++ BX_DEBUG(("could not sync before switching vmware3 COW files")); ++ return INVALID_OFFSET; ++ } ++ ++ while(requested_offset < current->min_offset) ++ current = &images[current->header.chain_id - 1]; ++ ++ while(requested_offset >= current->max_offset) ++ current = &images[current->header.chain_id + 1]; ++ } ++ ++ if(current->offset != INVALID_OFFSET && requested_offset >= current->offset ++ && requested_offset < current->offset + tlb_size) ++ return (requested_offset - current->offset); ++ ++ if(!sync()) ++ { ++ BX_DEBUG(("could not sync before seeking vmware3 COW file")); ++ return INVALID_OFFSET; ++ } ++ ++ unsigned relative_offset = (requested_offset - current->min_offset); ++ unsigned i = relative_offset >> FL_SHIFT; ++ unsigned j = (relative_offset & ~FL_MASK) / tlb_size; ++ ++ if(current->slb[i][j]) ++ { ++ if(::lseek(current->fd, current->slb[i][j] * 512, SEEK_SET) < 0) ++ { ++ BX_DEBUG(("could not seek vmware3 COW to sector slb[%d][%d]", i, j)); ++ return INVALID_OFFSET; ++ } ++ if(::read(current->fd, current->tlb, tlb_size) < 0) ++ { ++ BX_DEBUG(("could not read %d bytes from vmware3 COW image", tlb_size)); ++ return INVALID_OFFSET; ++ } ++ } ++ else ++ memset(current->tlb, 0, tlb_size); ++ ++ current->offset = (requested_offset / tlb_size) * tlb_size; ++ return (requested_offset - current->offset); ++} ++ ++ssize_t vmware3_image_t::read(void * buf, size_t count) ++{ ++ ssize_t total = 0; ++ while(count > 0) ++ { ++ off_t offset = perform_seek(); ++ if(offset == INVALID_OFFSET) ++ { ++ BX_DEBUG(("vmware3 COW read failed on %d bytes", count)); ++ return -1; ++ } ++ unsigned bytes_remaining = tlb_size - offset; ++ unsigned amount = (bytes_remaining > count) ? count : bytes_remaining; ++ memcpy(buf, current->tlb + offset, amount); ++ requested_offset += amount; ++ total += amount; ++ count -= amount; ++ } ++ return total; ++} ++ ++/* This could be done much better, I'm sure. In fact, the whole header doesn't ++ * need to be re-written each time a new tlb is allocated nor does the whole ++ * slb need to be re-written (most of the time) but that can be changed whenever ++ * it becomes an issue... image I/O is not a bottleneck. ++ */ ++bool vmware3_image_t::sync() ++{ ++ if(current->synced) ++ return true; ++ ++ unsigned relative_offset = (current->offset - current->min_offset); ++ unsigned i = relative_offset >> FL_SHIFT; ++ unsigned j = (relative_offset & ~FL_MASK) / tlb_size; ++ ++ if (current->slb[i][j] == 0) ++ { ++ if (current->flb[i] == 0) ++ { ++ unsigned slb_size = slb_count * 4; ++ ++ /* Re-write the FLB */ ++ current->flb[i] = current->header.next_sector_to_allocate; ++ if(::lseek(current->fd, current->header.flb_offset_sectors * 512, SEEK_SET) < 0) ++ { ++ BX_DEBUG(("could not seek vmware3 COW image to flb on sync")); ++ return false; ++ } ++ if(::write(current->fd, current->flb, current->header.flb_count * 4) < 0) ++ { ++ BX_DEBUG(("could not re-write flb to vmware3 COW image on sync")); ++ return false; ++ } ++ current->header.next_sector_to_allocate += (slb_size / 512) + ((slb_size % 512) ? 1 : 0); ++ } ++ ++ /* Re-write the SLB */ ++ current->slb[i][j] = current->header.next_sector_to_allocate; ++ if(::lseek(current->fd, current->flb[i] * 512, SEEK_SET) < 0) ++ { ++ BX_DEBUG(("could not seek vmware3 COW image to slb on sync")); ++ return false; ++ } ++ if(::write(current->fd, current->slb[i], slb_count * 4) < 0) ++ { ++ BX_DEBUG(("could not re-write slb to vmware3 COW image on sync")); ++ return false; ++ } ++ current->header.next_sector_to_allocate += current->header.tlb_size_sectors; ++ ++ /* Update the header */ ++ if(::lseek(current->fd, 0, SEEK_SET) < 0) ++ { ++ BX_DEBUG(("could not seek to vmware3 COW image to offset 0 on sync")); ++ return false; ++ } ++ if(::write(current->fd, ¤t->header, sizeof(COW_Header)) < 0) ++ { ++ BX_DEBUG(("could not re-write header to vmware3 COW image on sync")); ++ return false; ++ } ++ } ++ if(::lseek(current->fd, current->slb[i][j] * 512, SEEK_SET) < 0) ++ { ++ BX_DEBUG(("could not seek vmware3 COW image to offset %d on sync", current->slb[i][j] * 512)); ++ return false; ++ } ++ if(::write(current->fd, current->tlb, tlb_size) < 0) ++ { ++ BX_DEBUG(("could not write tlb to vmware3 COW image on sync")); ++ return false; ++ } ++ current->synced = true; ++ return true; ++} ++ ++ssize_t vmware3_image_t::write(const void * buf, size_t count) ++{ ++ ssize_t total = 0; ++ while(count > 0) ++ { ++ off_t offset = perform_seek(); ++ if(offset == INVALID_OFFSET) ++ return -1; ++ unsigned bytes_remaining = tlb_size - offset; ++ unsigned amount = 0; ++ current->synced = false; ++ if(bytes_remaining > count) ++ { ++ memcpy(current->tlb + offset, buf, count); ++ amount = count; ++ } ++ else ++ { ++ memcpy(current->tlb + offset, buf, bytes_remaining); ++ if(!sync()) ++ { ++ BX_DEBUG(("failed to sync when writing %d bytes", count)); ++ return -1; ++ } ++ amount = bytes_remaining; ++ } ++ requested_offset += amount; ++ total += amount; ++ count -= amount; ++ } ++ return total; ++} ++ ++off_t vmware3_image_t::lseek(off_t offset, int whence) ++{ ++ if(whence == SEEK_SET) ++ requested_offset = offset; ++ else if (whence == SEEK_CUR) ++ requested_offset += offset; ++ else if (whence == SEEK_END) ++ requested_offset = (off_t)(current->header.total_sectors_in_disk * 512) + offset; ++ else ++ { ++ BX_DEBUG(("unknown 'whence' value (%d) when trying to seek vmware3 COW image", whence)); ++ return -1; ++ } ++ return requested_offset; ++} ++ ++void vmware3_image_t::close() ++{ ++ if(current == 0) ++ return; ++ ++ unsigned count = current->header.number_of_chains; ++ for(int i = 0; i < count; ++i) ++ { ++ current = &images[i]; ++ for(int j = 0; j < current->header.flb_count; ++j) ++ delete[] current->slb[j]; ++ delete[] current->flb; ++ delete[] current->slb; ++ delete[] current->tlb; ++ ::close(current->fd); ++ } ++ delete[] images; ++ current = 0; ++} +--- /dev/null Fri Oct 18 15:15:18 2002 ++++ iodev/vmware3.h Tue Mar 4 13:28:27 2003 +@@ -0,0 +1,95 @@ ++/* ++ * This file provides the interface for using VMWare's virtual ++ * disk image format under Bochs. ++ * ++ * Author: Sharvil Nanavati, for Net Integration Technologies, Inc. ++ * Contact: snrrrub@yahoo.com ++ * ++ * Copyright (C) 2003 Net Integration Technologies, Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#ifndef _COWDISK_H ++#define _COWDISK_H 1 ++ ++class vmware3_image_t : public device_image_t ++{ ++ public: ++ vmware3_image_t() : FL_SHIFT(25), FL_MASK(0xFE000000) ++ { }; ++ int open (const char* pathname); ++ void close(); ++ off_t lseek (off_t offset, int whence); ++ ssize_t read (void* buf, size_t count); ++ ssize_t write (const void* buf, size_t count); ++ ++ private: ++ static const off_t INVALID_OFFSET = (off_t)-1; ++ ++ typedef struct _COW_Header { ++ char id[4]; ++ unsigned header_version; ++ unsigned flags; ++ unsigned total_sectors; ++ unsigned tlb_size_sectors; ++ unsigned flb_offset_sectors; ++ unsigned flb_count; ++ unsigned next_sector_to_allocate; ++ unsigned cylinders; ++ unsigned heads; ++ unsigned sectors; ++ char PAD0[1016]; ++ unsigned last_modified_time; ++ char PAD1[572]; ++ unsigned last_modified_time_save; ++ char label[8]; ++ unsigned chain_id; ++ unsigned number_of_chains; ++ unsigned cylinders_in_disk; ++ unsigned heads_in_disk; ++ unsigned sectors_in_disk; ++ unsigned total_sectors_in_disk; ++ char PAD2[8]; ++ unsigned vmware_version; ++ char PAD3[364]; ++ } COW_Header __attribute__((packed)); ++ ++ struct COW_Image { ++ int fd; ++ COW_Header header; ++ unsigned * flb; ++ unsigned ** slb; ++ char * tlb; ++ off_t offset; ++ off_t min_offset; ++ off_t max_offset; ++ bool synced; ++ } * images, * current; ++ ++ char * generate_cow_name(const char * filename, unsigned chain); ++ bool is_valid_header(COW_Header & header); ++ off_t perform_seek(); ++ bool sync(); ++ ++ const unsigned FL_SHIFT; ++ const unsigned FL_MASK; ++ ++ off_t requested_offset; ++ unsigned slb_count; ++ unsigned tlb_size; ++}; ++ ++#endif