--- ./man/bxmount.1.00	2007-10-13 16:02:22.000000000 +0200
+++ ./man/bxmount.1	2007-10-13 15:59:14.000000000 +0200
@@ -0,0 +1,48 @@
+.TH bxmount 1 "February 2005" "bxmount 1.0"
+.\"SKIP_SECTION"
+.SH NAME
+bxmount \- mount a partition of a bochs-hd-image
+.\"SKIP_SECTION"
+.SH SYNOPSIS
+.B bxmount
+.B \|[ options \|]
+.I image-name partition
+.I mount-point
+.\"SKIP_SECTION"
+.SH DESCRIPTION
+.\"DONT_SPLIT"
+.LP
+bxmount mounts a partition of a bochs-hd-image.
+.\"DONT_SPLIT"
+.SH OPTIONS
+.TP
+.BI \-h/--help
+.I Show options and parameters
+.TP
+.BI \-p
+.I \|[filename\|]
+Prints the partition table of the harddisk image [filename].
+.TP
+.BI \-m
+.I \|[filename\|]  \|[partition #\|]  \|[directory\|]
+Mounts \|[partition #\|] of the harddisk image \|[filename\|] to \|[directory\|].
+.TP
+.BI \-u
+.I \|[directory\|]
+Dismounts \|[directory\|].
+See
+.B mount(1)
+for details.
+.\"SKIP_SECTION"
+.SH Example
+To mount the first partition of the hd-image woody.img, use the command:
+  # bxmount woody.img 1 /mnt
+.\"SKIP_SECTION"
+.SH LICENSE
+This program  is distributed  under the terms of the  GNU
+General Public License as published  by  the  Free
+Software  Foundation.
+.\"SKIP_SECTION"
+.SH SEE ALSO
+mount(1)
+
--- ./src/Makefile.bxmount.00	2007-10-13 14:21:00.000000000 +0200
+++ ./src/Makefile.bxmount	2007-10-13 15:18:39.000000000 +0200
@@ -0,0 +1,34 @@
+# -----------------------------------------------------------------------------
+#
+# Makefile for bxtptinfo: dump partition/geometry info
+# 
+# $Author: bablokb $
+# $Revision: 1.7 $
+#
+# License: GPL2
+# -----------------------------------------------------------------------------
+
+CFLAGS := -Wall -O2
+ifeq ($(LFS),true)
+CFLAGS += -D_FILE_OFFSET_BITS=64
+endif
+
+
+TARGET := ../bin/bxmount
+
+SOURCES := bxmount.c
+
+OBJECTS := $(SOURCES:.c=.o)
+
+$(TARGET): $(OBJECTS)
+	$(CC) $(OBJECTS) $(LIBPATH) -o $@
+
+bxmount.o: bxmount.c bxmount.h
+	$(CC) $(INCLUDES) $(CFLAGS) -c $<
+
+clean:
+	rm -f $(OBJECTS)
+	rm -f ../bin/bxmount
+
+distclean: clean
+	rm -f $(TARGET)
--- ./src/bxmount.c.00	2007-10-13 13:51:49.000000000 +0200
+++ ./src/bxmount.c	2007-10-13 14:53:51.000000000 +0200
@@ -0,0 +1,325 @@
+/*
+ * misc/bxmount.c
+ * $Id: bxmount.c,v 1.0 2005/02/20 Mathis Exp $
+ *
+ * Print partitions or mount a specific partition of a harddisk image.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdint.h>
+#include "bxmount.h"
+
+#include <string.h>
+
+#define SECTOR_SIZE    512
+
+const struct PartitionType {
+  unsigned char number;
+  char *name;
+} partition_type[];
+extern const unsigned int partition_type_count;
+
+char *rcsid = "$Id: bxmount.c,v 1.0 2005/02/20 Mathis Exp $";
+char *divider = "========================================================================";
+
+/* stolen from main.cc */
+void bx_center_print (FILE *file, char *line, int maxwidth)
+{
+  int imax;
+  int i;
+  imax = (maxwidth - strlen(line)) >> 1;
+  for (i=0; i<imax; i++) fputc (' ', file);
+  fputs (line, file);
+}
+
+void
+print_banner ()
+{
+  fprintf (stderr, "%s\n", divider);
+  bx_center_print (stderr, "bxmount\n", 72);
+  bx_center_print (stderr, "Harddisk Image Partition Mount Tool for Bochs\n", 72);
+  bx_center_print (stderr, rcsid, 72);
+  fprintf (stderr, "\n%s\n", divider);
+}
+
+void
+print_version ()
+{
+  bx_center_print (stderr, "bxmount for Bochs\n version: 1.0", 72);
+}
+
+int print_partitiontable(char *filename) {
+  FILE *image;
+  size_t ret = 0;
+  unsigned int n = 0;
+  Bit8u data[SECTOR_SIZE];
+  
+  image = fopen(filename, "rb");
+  if(image == NULL) {
+    fprintf(stderr, "%s: %s.\n", filename, strerror(errno));
+    return -1;
+  }
+  ret = fread(data, SECTOR_SIZE, 1, image);
+  if(ret != 1) {
+    fprintf(stderr, "%s: %s.\n", filename, strerror(errno));
+    return -1;
+  }
+  fclose(image);
+  
+  // check bootsector ID, not present = no partition table present
+  if((data[0x1FE] != 0x55) && (data[0x1FE] != 0xAA)) {
+    fprintf(stderr, "%s: No partition-table detected.\n", filename);
+    return -2;
+  }
+  
+  print_banner();
+  fprintf(stderr, "Harddisk image: %s\n", filename);
+  fprintf(stderr, "  boot\t sector start\tsize\ttype\n");
+  for(n = 0; n < 4; n++) {
+    // calculate position of partition record (n) in table
+    Bit8u *p = &data[0x1BE + (16 * n)];
+    Bit8u bootable = p[0x00];	// 0x80 = bootable, 0x00 = not bootable
+    Bit8u type = p[0x04];
+    Bit32u start = *((Bit32u *)&p[0x08]);
+    Bit32u size  = *((Bit32u *)&p[0x0C]);
+    unsigned int c;
+    
+    // print partition number
+    fprintf(stderr, "%d.  ", (n + 1));
+    
+    // print '*' if partition is bootable
+    if(bootable) fprintf(stderr, "*\t "); else fprintf(stderr, "\t ");
+    
+    // print start of partition in sectors
+    fprintf(stderr, "%12u", start);
+    
+    // print size of partition in sectors
+    size = (size >> 1) / 1024;
+    if(size > (4 * 1024))
+      fprintf(stderr, "%6uG\t", (size / 1024));
+    else
+      fprintf(stderr, "%6uM\t", size);
+    
+    for(c = 0; c < partition_type_count; c++)
+      if(partition_type[c].number == type)
+        break;
+    if(c >= partition_type_count)
+      fprintf(stderr, "%02X (unknown)", type);
+    else
+      fprintf(stderr, "%s", partition_type[c].name);
+    
+    fprintf(stderr, "\n");
+  }
+  
+  return 0;
+}
+
+int dismount_partition(char *mount_directory) {
+  char *argv[] = { "umount", mount_directory, NULL };
+  return execvp("umount", argv);
+}
+
+int mount_partition(char *filename, unsigned int partition_number, char *mount_directory) {
+  FILE *image;
+  size_t ret = 0;
+  Bit8u data[SECTOR_SIZE];
+  char arg[50];
+  char *argv[] = { "mount", filename, mount_directory, "-o", arg, NULL };
+  
+  image = fopen(filename, "rb");
+  if(image == NULL) {
+    fprintf(stderr, "%s: %s.\n", filename, strerror(errno));
+    return -1;
+  }
+  ret = fread(data, SECTOR_SIZE, 1, image);
+  if(ret != 1) {
+    fprintf(stderr, "%s: %s.\n", filename, strerror(errno));
+    return -1;
+  }
+  fclose(image);
+  
+  if((data[0x1FE] != 0x55) && (data[0x1FE] != 0xAA)) {
+    fprintf(stderr, "%s: No partition-table detected.\n", filename);
+    return -2;
+  }
+  
+  {
+    // calculate byte offset of partition
+    Bit8u *p = &data[0x1BE + (16 * partition_number)];
+    Bit32u start_sector = *((Bit32u *)&p[0x08]);
+    unsigned int byte[8] = { 0, 0, 0, 0 };
+    char buffer[40000];
+    int n;
+    
+    if(start_sector == 0) {
+      fprintf(stderr, "%s:%d: No partition entry. Aborted.\n", filename, partition_number);
+      return -2;
+    }
+    
+    for(n = 0; n < 8; n++) {
+      byte[n] += ((start_sector & 0xFF) * SECTOR_SIZE);
+      if(byte[n] > 0xFF)
+      byte[n + 1] = (byte[n] >> 8);
+      byte[n] &= 0xFF;
+      start_sector >>= 8;
+    }
+    sprintf(arg, "loop=/dev/loop3,offset=0x");
+    for(n = 7; n >= 0; --n) {
+      sprintf(buffer, "%02X", byte[n]);
+      strcat(arg, buffer);
+    }
+  }
+  
+  return execvp("mount", argv);
+}
+
+int print_usage() {
+  print_banner();
+  print_help();
+  return 0;
+}
+
+int print_help() {
+  fprintf(stderr, 
+    "bxmount 1.0 usage:\n"
+    "bxmount -p [filename]\n"
+    "\tPrints the partition table of the harddisk image [filename].\n"
+    "sudo bxmount -m [filename] [partition #1-4] [directory]\n"
+    "\tMounts [partition #] of the harddisk image [filename] to [directory].\n"
+    "sudo bxmount -u [directory]\n"
+    "\tDismounts [directory].\n"
+    "\n"
+    "Example:\n"
+    "sudo bxmount -m /path/to/harddisk.img 1 /mnt\n"
+    "\tMounts partition #1 in harddisk image '/path/to/harddisk.img'\n"
+    "\tto directory '/mnt'. If you are not logged in as root, you will be\n"
+    "\tprompted for the superuser password.\n"
+    "\n"
+    "Note:\n"
+    "\tYou must be logged in as root, because only the superuser can mount.\n"
+    "\tOr use the prefix sudo.\n"
+  );
+  return 0;
+}
+int main(int argc, char *argv[]) {
+  if((argc == 2) && (strcmp(argv[1], "-h") == 0))
+    return print_help();
+  else if((argc == 2) && (strcmp(argv[1], "--help") == 0))
+    return print_help();
+  else if((argc == 3) && (strcmp(argv[1], "-p") == 0))
+    return print_partitiontable(argv[2]);
+  else if((argc == 3) && (strcmp(argv[1], "-u") == 0))
+    return dismount_partition(argv[2]);
+  else if((argc == 5) && (strcmp(argv[1], "-m") == 0)) {
+    unsigned int n;
+    
+    sscanf(argv[3], "%d", &n); if(n == 0) return print_usage();
+    return mount_partition(argv[2], (n - 1), argv[4]);
+  } else
+  return print_usage();
+  
+  return 0;
+}
+
+
+const struct PartitionType partition_type[] = {
+  { 0x00, "Empty"                 },
+  { 0x01, "FAT12"                 },
+  { 0x02, "XENIX root"            },
+  { 0x03, "XENIX usr"             },
+  { 0x04, "FAT16 <32M"            },
+  { 0x05, "Extended"              },
+  { 0x06, "FAT16"                 },
+  { 0x07, "HPFS/NTFS"             },
+  { 0x08, "AIX"                   },
+  { 0x09, "AIX bootable"          },
+  { 0x0a, "OS/2 Boot Manager"     },
+  { 0x0b, "W95 FAT32"             },
+  { 0x0c, "W95 FAT32 (LBA)"       },
+  { 0x0e, "W95 FAT16 (LBA)"       },
+  { 0x0f, "W95 Ext'd (LBA)"       },
+  { 0x10, "OPUS"                  },
+  { 0x11, "Hidden FAT12"          },
+  { 0x12, "Compaq diagnostics"    },
+  { 0x14, "Hidden FAT16 <3M"      },
+  { 0x16, "Hidden FAT16"          },
+  { 0x17, "Hidden HPFS/NTF"       },
+  { 0x18, "AST SmartSleep"        },
+  { 0x1b, "Hidden W95 FAT32"      },
+  { 0x1c, "Hidden W95 FAT32"      },
+  { 0x1e, "Hidden W95 FAT16"      },
+  { 0x24, "NEC DOS"               },
+  { 0x39, "Plan 9"                },
+  { 0x3c, "PartitionMagic"        },
+  { 0x40, "Venix 80286"           },
+  { 0x41, "PPC PReP Boot"         },
+  { 0x42, "SFS"                   },
+  { 0x4d, "QNX4.x"                },
+  { 0x4e, "QNX4.x 2nd part"       },
+  { 0x4f, "QNX4.x 3rd part"       },
+  { 0x50, "OnTrack DM"            },
+  { 0x51, "OnTrack DM6 Aux"       },
+  { 0x52, "CP/M"                  },
+  { 0x53, "OnTrack DM6 Aux"       },
+  { 0x54, "OnTrackDM6"            },
+  { 0x55, "EZ-Drive"              },
+  { 0x56, "Golden Bow"            },
+  { 0x5c, "Priam Edisk"           },
+  { 0x61, "SpeedStor"             },
+  { 0x63, "GNU HURD or System V"  },
+  { 0x64, "Novell Netware"        },
+  { 0x65, "Novell Netware"        },
+  { 0x70, "DiskSecure Multi-Boot" },
+  { 0x75, "PC/IX"                 },
+  { 0x80, "Old Minix"             },
+  { 0x81, "Minix / old Linux"     },
+  { 0x82, "Linux swap / Solaris"  },
+  { 0x83, "Linux ext2/3"          },
+  { 0x84, "OS/2 hidden C:"        },
+  { 0x85, "Linux extended"        },
+  { 0x86, "NTFS volume set"       },
+  { 0x87, "NTFS volume set"       },
+  { 0x8e, "Linux LVM"             },
+  { 0x93, "Amoeba"                },
+  { 0x94, "Amoeba BBT"            },
+  { 0x9f, "BSD/OS"                },
+  { 0xa0, "IBM Thinkpad high"     },
+  { 0xa5, "FreeBSD"               },
+  { 0xa6, "OpenBSD"               },
+  { 0xa7, "NeXTSTEP"              },
+  { 0xa8, "Darwin UFS"            },
+  { 0xa9, "NetBSD"                },
+  { 0xab, "Darwin boot"           },
+  { 0xb7, "BSDI fs"               },
+  { 0xb8, "BSDI swap"             },
+  { 0xbb, "Boot Wizard hidden"    },
+  { 0xbe, "Solaris boot"          },
+  { 0xc1, "DRDOS/sec (FAT-12)"    },
+  { 0xc4, "DRDOS/sec (FAT-16)"    },
+  { 0xc6, "DRDOS/sec (FAT-32)"    },
+  { 0xc7, "Syrinx"                },
+  { 0xda, "Non-FS data"           },
+  { 0xdb, "CP/M / CTOS"           },
+  { 0xde, "Dell Utility"          },
+  { 0xdf, "BootIt"                },
+  { 0xe1, "DOS access"            },
+  { 0xe3, "DOS R/O"               },
+  { 0xe4, "SpeedStor"             },
+  { 0xeb, "BeOS fs"               },
+  { 0xee, "EFI GPT"               },
+  { 0xef, "EFI (FAT-12/16/32)"    },
+  { 0xf0, "Linux/PA-RISC boot"    },
+  { 0xf1, "SpeedStor"             },
+  { 0xf4, "SpeedStor"             },
+  { 0xf2, "DOS secondary"         },
+  { 0xfd, "Linux raid auto"       },
+  { 0xfe, "LANstep"               },
+  { 0xff, "BBT"                   }
+}; const unsigned int partition_type_count = (sizeof(partition_type) / sizeof(struct PartitionType));
--- ./src/bxmount.h.00	2007-10-13 13:51:59.000000000 +0200
+++ ./src/bxmount.h	2007-10-13 15:12:18.000000000 +0200
@@ -0,0 +1,980 @@
+/* config.h.  Generated from config.h.in by configure.  */
+//  Copyright (C) 2001  MandrakeSoft S.A.
+//
+//    MandrakeSoft S.A.
+//    43, rue d'Aboukir
+//    75002 Paris - France
+//    http://www.linux-mandrake.com/
+//    http://www.mandrakesoft.com/
+//
+//  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 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
+
+//
+// config.h.in is distributed in the source TAR file.  When you run
+// the configure script, it generates config.h with some changes
+// according to your build environment.  For example, in config.h.in,
+// SIZEOF_UNSIGNED_CHAR is set to 0.  When configure produces config.h
+// it will change "0" to the detected value for your system.
+// 
+// config.h contains ONLY preprocessor #defines and a few typedefs.
+// It must be included by both C and C++ files, so it must not
+// contain anything language dependent such as a class declaration.
+//
+
+#ifndef _BX_CONFIG_H_
+#define _BX_CONFIG_H_ 1
+
+#define VERSION		1.0
+///////////////////////////////////////////////////////////////////
+// USER CONFIGURABLE OPTIONS : EDIT ONLY OPTIONS IN THIS SECTION //
+///////////////////////////////////////////////////////////////////
+
+
+#if 1
+// quit_sim is defined in gui/siminterface.h
+#define BX_EXIT(x)  SIM->quit_sim (x)
+#else
+// provide the real main and the usual exit.
+#define BX_EXIT(x)  ::exit(x)
+#endif
+
+// We have tested the following combinations:
+//  * processors=1, bootstrap=0, ioapic_id=1   (uniprocessor system)
+//  * processors=2, bootstrap=0, ioapic_id=2
+//  * processors=4, bootstrap=0, ioapic_id=4
+#define BX_SUPPORT_SMP 0
+#define BX_BOOTSTRAP_PROCESSOR 0
+#define BX_MAX_SMP_THREADS_SUPPORTED 8
+
+// Controls how many instances of BX_MEM_C are created. For
+// SMP, use several processors with one shared memory space.
+#define BX_ADDRESS_SPACES 1
+
+#if BX_ADDRESS_SPACES != 1
+#error "Support for several address spaces still not implemented"
+#endif
+
+// include in APIC models, required for a multiprocessor system.
+#define BX_SUPPORT_APIC 0
+
+#if (BX_SUPPORT_SMP && !BX_SUPPORT_APIC)
+#error For multiprocessor simulation, BX_SUPPORT_APIC is required.
+#endif
+
+// if simulating Linux, this provides a few more debugging options
+// such as tracing all system calls.
+#define BX_DEBUG_LINUX 0
+
+// adds support for the GNU readline library in the debugger command 
+// prompt.
+#define HAVE_LIBREADLINE 0
+#define HAVE_READLINE_HISTORY_H 1
+
+// Define to 1 if you have <locale.h>
+#define HAVE_LOCALE_H 0
+
+// I rebuilt the code which provides timers to IO devices.
+// Setting this to 1 will introduce a little code which
+// will panic out if cases which shouldn't happen occur.
+// Set this to 0 for optimal performance.
+#define BX_TIMER_DEBUG 1
+
+// Settable A20 line.  For efficiency, you can disable
+// having a settable A20 line, eliminating conditional
+// code for every physical memory access.  You'll have
+// to tell your software not to mess with the A20 line,
+// and accept it as always being on if you change this.
+//   1 = use settable A20 line. (normal)
+//   0 = A20 is like the rest of the address lines
+
+#define BX_SUPPORT_A20 1
+
+// Processor Instructions Per Second
+// To find out what value to use for the 'ips' directive
+// in your '.bochsrc' file, set BX_SHOW_IPS to 1, and
+// run the software in bochs you plan to use most.  Bochs
+// will print out periodic IPS ratings.  This will change
+// based on the processor mode at the time, and various
+// other factors.  You'll get a reasonable estimate though.
+// When you're done, reset BX_SHOW_IPS to 0, do a
+// 'make all-clean', then 'make' again.
+
+#define BX_SHOW_IPS 0
+
+
+#if (BX_SHOW_IPS) && (defined(__MINGW32__) || defined(_MSC_VER))
+#define        SIGALRM         14
+#endif
+
+// Paging Options:
+// ---------------
+// Support Paging mechanism.
+//   0 = don't support paging at all (DOS & Minix don't require it)
+//   1 = support paging.  (Most other OS's require paging)
+// Use Translation Lookaside Buffer (TLB) for caching
+// paging translations.  This will make paging mode
+// more efficient.  If you're OS doesn't use paging,
+// then you won't need either.
+//   1 = Use a TLB for effiency
+//   0 = don't use a TLB, walk the page tables for every access
+// BX_TLB_SIZE: Number of entries in TLB
+// BX_TLB_INDEX_OF(lpf): This macro is passed the linear page frame
+//   (top 20 bits of the linear address.  It must map these bits to
+//   one of the TLB cache slots, given the size of BX_TLB_SIZE.
+//   There will be a many-to-one mapping to each TLB cache slot.
+//   When there are collisions, the old entry is overwritten with
+//   one for the newest access.
+
+#define BX_USE_TLB 1
+
+#define BX_TLB_SIZE 1024
+#define BX_TLB_MASK ((BX_TLB_SIZE-1) << 12)
+#define BX_TLB_INDEX_OF(lpf) (((lpf) & BX_TLB_MASK) >> 12)
+
+#define BX_USE_QUICK_TLB_INVALIDATE 0
+
+// Compile in support for DMA & FLOPPY IO.  You'll need this
+// if you plan to use the floppy drive emulation.  But if
+// you're environment doesn't require it, you can change
+// it to 0.
+
+#define BX_DMA_FLOPPY_IO 1
+
+
+// Default number of Megs of memory to emulate.  The
+// 'megs:' directive in the '.bochsrc' file overrides this,
+// allowing per-run settings.
+
+#define BX_DEFAULT_MEM_MEGS 32
+
+
+// CPU level emulation.  Default level is set in
+// the configure script.  BX_CPU_LEVEL defines the CPU level
+// to emulate.  BX_CPU_LEVEL_HACKED is a hack to define the
+// level of some integer instructions, so they can be tested
+// before the rest of the emulation is up to that level.
+
+#define BX_CPU_LEVEL 5
+#define BX_CPU_LEVEL_HACKED 5
+
+// emulate x86-64 instruction set?
+#define BX_SUPPORT_X86_64 0
+
+// make it configurable through configuration interface
+#ifdef BX_SUPPORT_X86_64
+  #define BX_CPU_VECTOR_INTEL 0
+#else
+  #define BX_CPU_VECTOR_INTEL 1
+#endif
+
+#define BX_SUPPORT_V8086_MODE 1
+
+#define BX_HAVE_SLEEP 1
+#define BX_HAVE_MSLEEP 0
+#define BX_HAVE_USLEEP 1
+#define BX_HAVE_NANOSLEEP 1
+#define BX_HAVE_ABORT 1
+#define BX_HAVE_SOCKLEN_T 1
+#define BX_HAVE_SOCKADDR_IN_SIN_LEN 0
+#define BX_HAVE_GETTIMEOFDAY 1
+#if defined(WIN32)
+#define BX_HAVE_REALTIME_USEC 1
+#else
+#define BX_HAVE_REALTIME_USEC (BX_HAVE_GETTIMEOFDAY)
+#endif
+#define BX_HAVE_MKSTEMP 1
+#define BX_HAVE_SYS_MMAN_H 1
+#define BX_HAVE_XPM_H 1
+#define BX_HAVE_TIMELOCAL 1
+#define BX_HAVE_GMTIME 1
+#define BX_HAVE_MKTIME 1
+#define BX_HAVE_NET_IF_H 0
+
+// This turns on Roland Mainz's idle hack.  Presently it is specific to the X11
+// and term gui. If people try to enable it elsewhere, give a compile error
+// after the gui definition so that they don't waste their time trying.
+#define BX_USE_IDLE_HACK 0
+
+// Minimum Emulated IPS.
+// This is used in the realtime PIT as well as for checking the
+// IPS value set in the config file.
+#define BX_MIN_IPS 200000
+
+// Minimum and maximum values for SMP quantum variable. Defines
+// how many instructions each CPU could execute execute in one 
+// shot (one cpu_loop call)
+#define BX_SMP_QUANTUM_MIN  1
+#define BX_SMP_QUANTUM_MAX 16
+
+// Use Static Member Funtions to eliminate 'this' pointer passing
+// If you want the efficiency of 'C', you can make all the
+// members of the C++ CPU class to be static.
+// This defaults to 1 since it should improve performance, but when
+// SMP mode is enabled, it will be turned off by configure.
+#define BX_USE_CPU_SMF 1
+
+#define BX_USE_MEM_SMF 0
+
+// Use static member functions in IO DEVice emulation modules.
+// For efficiency, use C like functions for IO handling,
+// and declare a device instance at compile time,
+// instead of using 'new' and storing the pointer.  This
+// eliminates some overhead, especially for high-use IO
+// devices like the disk drive.
+//   1 = Use static member efficiency (normal)
+//   0 = Use nonstatic member functions (use only if you need
+//       multiple instances of a device class
+
+#define BX_USE_HD_SMF       1  // Hard drive
+#define BX_USE_BIOS_SMF     1  // BIOS
+#define BX_USE_CMOS_SMF     1  // CMOS
+#define BX_USE_DMA_SMF      1  // DMA
+#define BX_USE_FD_SMF       1  // Floppy
+#define BX_USE_KEY_SMF      1  // Keyboard
+#define BX_USE_PAR_SMF      1  // Parallel
+#define BX_USE_PIC_SMF      1  // PIC
+#define BX_USE_PIT_SMF      1  // PIT
+#define BX_USE_SER_SMF      1  // Serial
+#define BX_USE_UM_SMF       1  // Unmapped
+#define BX_USE_VGA_SMF      1  // VGA
+#define BX_USE_SB16_SMF     1  // Sound (SB 16)
+#define BX_USE_DEV_SMF      1  // System Devices (port92)
+#define BX_USE_PCI_SMF      1  // PCI
+#define BX_USE_P2I_SMF      1  // PCI-to-ISA bridge
+#define BX_USE_PIDE_SMF     1  // PCI-IDE
+#define BX_USE_PCIVGA_SMF   1  // PCI-VGA
+#define BX_USE_PCIDEV_SMF   1  // PCI-DEV
+#define BX_USE_PCIUSB_SMF   1  // USB hub
+#define BX_USE_PCIPNIC_SMF  1  // PCI pseudo NIC
+#define BX_USE_NE2K_SMF     1  // NE2K
+#define BX_USE_EFI_SMF      1  // External FPU IRQ
+#define BX_USE_GAMEPORT_SMF 1  // Gameport
+#define BX_USE_CIRRUS_SMF   1  // SVGA Cirrus
+#define BX_USE_BUSM_SMF     1  // Bus Mouse
+#define BX_USE_ACPI_SMF     1  // ACPI
+
+#define BX_PLUGINS 0
+#define BX_HAVE_DLFCN_H 1
+
+#if BX_PLUGINS && \
+  (   !BX_USE_HD_SMF || !BX_USE_BIOS_SMF || !BX_USE_CMOS_SMF \
+   || !BX_USE_DMA_SMF || !BX_USE_FD_SMF || !BX_USE_KEY_SMF \
+   || !BX_USE_PAR_SMF || !BX_USE_PIC_SMF || !BX_USE_PIT_SMF \
+   || !BX_USE_SER_SMF || !BX_USE_UM_SMF || !BX_USE_VGA_SMF \
+   || !BX_USE_SB16_SMF || !BX_USE_DEV_SMF || !BX_USE_PCI_SMF \
+   || !BX_USE_P2I_SMF || !BX_USE_PCIVGA_SMF || !BX_USE_PCIUSB_SMF \
+   || !BX_USE_PCIPNIC_SMF || !BX_USE_PIDE_SMF || !BX_USE_ACPI_SMF \
+   || !BX_USE_NE2K_SMF || !BX_USE_EFI_SMF || !BX_USE_GAMEPORT_SMF \
+   || !BX_USE_PCIDEV_SMF || !BX_USE_CIRRUS_SMF)
+#error You must use SMF to have plugins
+#endif
+
+#define BX_SUPPORT_SB16 0
+#define BX_SUPPORT_GAMEPORT 0
+
+#if BX_SUPPORT_SB16
+// Use virtual methods for the sound output functions
+#define BX_USE_SOUND_VIRTUAL  1
+// Determines which sound output class is to be used.
+// Currently the following are available:
+//    bx_sound_linux_c      Output for Linux, to /dev/dsp and /dev/midi00
+//    bx_sound_windows_c    Output for Windows midi and wave mappers
+//    bx_sound_output_c     Dummy functions, no output
+#define BX_SOUND_OUTPUT_C  bx_sound_output_c
+#endif
+
+#define USE_RAW_SERIAL 0
+
+// This enables writing to port 0xe9 and the output
+// is sent to the console.  Reading from port 0xe9
+// will return 0xe9 to let you know this is available.
+// Leave this 0 unless you have a reason to use it.
+#define BX_PORT_E9_HACK 1
+
+#define BX_GDBSTUB 0
+
+// This option enables compressed (zlib) hd support
+#define BX_COMPRESSED_HD_SUPPORT 0
+#define BX_HAVE_ZLIB 1
+
+#if BX_COMPRESSED_HD_SUPPORT && !BX_HAVE_ZLIB
+#error You must have zlib to enable compressed hd support
+#endif
+
+// This option defines the number of supported ATA channels.
+// There are up to two drives per ATA channel.
+#define BX_MAX_ATA_CHANNEL 4
+
+#if (BX_MAX_ATA_CHANNEL>4 || BX_MAX_ATA_CHANNEL<1)
+#  error "BX_MAX_ATA_CHANNEL should be between 1 and 4"
+#endif
+
+// =================================================================
+// BEGIN: OPTIONAL DEBUGGER SECTION
+//
+// These options are only used if you compile in support for the
+// native command line debugging environment.  Typically, the debugger
+// is not used, and this section can be ignored.
+// =================================================================
+
+// Compile in support for virtual/linear/physical breakpoints.
+// Set to 1, only those you need.  Recommend using only linear
+// breakpoints, unless you need others.  Less supported means
+// slightly faster execution time.
+#define BX_DBG_SUPPORT_VIR_BPOINT 1
+#define BX_DBG_SUPPORT_LIN_BPOINT 1
+#define BX_DBG_SUPPORT_PHY_BPOINT 1
+
+// max number of virtual/linear/physical breakpoints handled
+#define BX_DBG_MAX_VIR_BPOINTS 10
+#define BX_DBG_MAX_LIN_BPOINTS 10
+#define BX_DBG_MAX_PHY_BPOINTS 10
+
+// max file pathname size for debugger commands
+#define BX_MAX_PATH     256
+// max nesting level for debug scripts including other scripts
+#define BX_INFILE_DEPTH  10
+// use this command to include (nest) debug scripts
+#define BX_INCLUDE_CMD   "source"
+
+// Make a call to command line debugger extensions.  If set to 1,
+// a call is made.  An external routine has a chance to process
+// the command.  If it does, than the debugger ignores the command.
+#define BX_DBG_EXTENSIONS 0
+
+// =================================================================
+// END: OPTIONAL DEBUGGER SECTION
+// =================================================================
+
+
+//////////////////////////////////////////////////////////////////////
+// END OF USER CONFIGURABLE OPTIONS : DON'T EDIT ANYTHING BELOW !!! //
+// THIS IS GENERATED BY THE ./configure SCRIPT                      //
+//////////////////////////////////////////////////////////////////////
+
+
+#define BX_WITH_X11 1
+#define BX_WITH_BEOS 0
+#define BX_WITH_WIN32 0
+#define BX_WITH_MACOS 0
+#define BX_WITH_CARBON 0
+#define BX_WITH_NOGUI 0
+#define BX_WITH_TERM 0
+#define BX_WITH_RFB 0
+#define BX_WITH_AMIGAOS 0
+#define BX_WITH_SDL 0
+#define BX_WITH_SVGA 0
+#define BX_WITH_WX 0
+
+// BX_USE_TEXTCONFIG should be set to 1 unless Bochs is compiled
+// for wxWidgets only.
+#define BX_USE_TEXTCONFIG 1
+
+// add special export symbols for win32 DLL building.  The main code must
+// have __declspec(dllexport) on variables, functions, or classes that the
+// plugins can access.  The plugins should #define PLUGGABLE which will 
+// activate the __declspec(dllimport) instead.
+#if defined(WIN32) || defined(__CYGWIN__)
+#  if BX_PLUGINS && defined(BX_PLUGGABLE)
+//   #warning I will import DLL symbols from Bochs main program.
+#    define BOCHSAPI __declspec(dllimport) 
+#  elif BX_PLUGINS
+//   #warning I will export DLL symbols.
+#    define BOCHSAPI __declspec(dllexport) 
+#  endif
+#endif
+#ifndef BOCHSAPI
+#  define BOCHSAPI
+#endif
+
+#if defined(__CYGWIN__)
+// Make BOCHSAPI_CYGONLY exactly the same as BOCHSAPI.  This symbol
+// will be used for any cases where Cygwin requires a special tag
+// but VC++ does not.
+#define BOCHSAPI_CYGONLY BOCHSAPI
+#else
+// define the symbol to be empty
+#define BOCHSAPI_CYGONLY /*empty*/
+#endif
+
+#if defined(_MSC_VER)
+// Make BOCHSAPI_MSVCONLY exactly the same as BOCHSAPI.  This symbol
+// will be used for any cases where VC++ requires a special tag
+// but Cygwin does not.
+#define BOCHSAPI_MSVCONLY BOCHSAPI
+#else
+// define the symbol to be empty
+#define BOCHSAPI_MSVCONLY /*empty*/
+#endif
+
+#define BX_DEFAULT_CONFIG_INTERFACE "defined_by_configure"
+#define BX_DEFAULT_DISPLAY_LIBRARY "defined_by_configure"
+
+// Roland Mainz's idle hack is presently specific to X11. If people try to
+// enable it elsewhere, give a compile error so that they don't waste their
+// time trying.
+#if (BX_USE_IDLE_HACK && !BX_WITH_X11 && !BX_WITH_TERM)
+#  error IDLE_HACK will only work with the X11 or term gui. Correct configure args and retry.
+#endif
+
+#define WORDS_BIGENDIAN 0
+
+#define SIZEOF_UNSIGNED_CHAR 1
+#define SIZEOF_UNSIGNED_SHORT 2
+#define SIZEOF_UNSIGNED_INT 4
+#define SIZEOF_UNSIGNED_LONG 4
+#define SIZEOF_UNSIGNED_LONG_LONG 8
+#define SIZEOF_INT_P 4
+
+#define BX_64BIT_CONSTANTS_USE_LL 1
+#if BX_64BIT_CONSTANTS_USE_LL
+// doesn't work on Microsoft Visual C++, maybe others
+#define BX_CONST64(x)  (x##LL)
+#else
+#define BX_CONST64(x)  (x)
+#endif
+
+#if defined(WIN32)
+  typedef unsigned char      Bit8u;
+  typedef   signed char      Bit8s;
+  typedef unsigned short     Bit16u;
+  typedef   signed short     Bit16s;
+  typedef unsigned int       Bit32u;
+  typedef   signed int       Bit32s;
+#ifdef __MINGW32__
+  typedef unsigned long long Bit64u;
+  typedef   signed long long Bit64s;
+#include <sys/types.h>
+#else
+  typedef unsigned __int64   Bit64u;
+  typedef   signed __int64   Bit64s;
+#endif
+#elif BX_WITH_MACOS
+  typedef unsigned char      Bit8u;
+  typedef   signed char      Bit8s;
+  typedef unsigned short     Bit16u;
+  typedef   signed short     Bit16s;
+  typedef unsigned int       Bit32u;
+  typedef   signed int       Bit32s;
+  typedef unsigned long long Bit64u;
+  typedef   signed long long Bit64s;
+#else
+
+// Unix like platforms
+
+#if SIZEOF_UNSIGNED_CHAR != 1
+#  error "sizeof (unsigned char) != 1"
+#else
+  typedef unsigned char Bit8u;
+  typedef   signed char Bit8s;
+#endif
+
+#if SIZEOF_UNSIGNED_SHORT != 2
+#  error "sizeof (unsigned short) != 2"
+#else
+  typedef unsigned short Bit16u;
+  typedef   signed short Bit16s;
+#endif
+
+#if SIZEOF_UNSIGNED_INT == 4
+  typedef unsigned int Bit32u;
+  typedef   signed int Bit32s;
+#elif SIZEOF_UNSIGNED_LONG == 4
+  typedef unsigned long Bit32u;
+  typedef   signed long Bit32s;
+#else
+#  error "can't find sizeof(type) of 4 bytes!"
+#endif
+
+#if SIZEOF_UNSIGNED_LONG == 8
+  typedef unsigned long Bit64u;
+  typedef   signed long Bit64s;
+#elif SIZEOF_UNSIGNED_LONG_LONG == 8
+  typedef unsigned long long Bit64u;
+  typedef   signed long long Bit64s;
+#else
+#  error "can't find data type of 8 bytes"
+#endif
+
+#endif
+
+#define GET32L(val64) ((Bit32u)(((Bit64u)(val64)) & 0xFFFFFFFF))
+#define GET32H(val64) ((Bit32u)(((Bit64u)(val64)) >> 32))
+
+// now that Bit32u and Bit64u exist, defined bx_address
+#if BX_SUPPORT_X86_64
+typedef Bit64u bx_address;
+#else
+typedef Bit32u bx_address;
+#endif
+
+// define physical and linear address types
+typedef Bit32u     bx_phy_address;
+typedef bx_address bx_lin_address;
+
+#define BX_PHY_ADDRESS_WIDTH 32
+#if BX_SUPPORT_X86_64
+#define BX_LIN_ADDRESS_WIDTH 48
+#else
+#define BX_LIN_ADDRESS_WIDTH 32
+#endif
+
+// technically, in an 8 bit signed the real minimum is -128, not -127.
+// But if you decide to negate -128 you tend to get -128 again, so it's
+// better not to use the absolute maximum in the signed range.
+#define BX_MAX_BIT64U ( (Bit64u) -1           )
+#define BX_MIN_BIT64U ( 0                     )
+#define BX_MAX_BIT64S ( ((Bit64u) -1) >> 1    )
+#define BX_MIN_BIT64S ( (Bit64s)-(((Bit64u) -1) >> 1) )
+#define BX_MAX_BIT32U ( (Bit32u) -1           )
+#define BX_MIN_BIT32U ( 0                     )
+#define BX_MAX_BIT32S ( ((Bit32u) -1) >> 1    )
+#define BX_MIN_BIT32S ( (Bit32s)-(((Bit32u) -1) >> 1) )
+#define BX_MAX_BIT16U ( (Bit16u) -1           )
+#define BX_MIN_BIT16U ( 0                     )
+#define BX_MAX_BIT16S ( ((Bit16u) -1) >> 1    )
+#define BX_MIN_BIT16S ( (Bit16s)-(((Bit16u) -1) >> 1) )
+#define BX_MAX_BIT8U  ( (Bit8u) -1            )
+#define BX_MIN_BIT8U  ( 0                     )
+#define BX_MAX_BIT8S  ( ((Bit8u) -1) >> 1     )
+#define BX_MIN_BIT8S  ( (Bit8s)-(((Bit8u) -1) >> 1)  )
+
+
+// create an unsigned integer type that is the same size as a pointer.
+// You can typecast a pointer to a bx_pr_equiv_t without losing any 
+// bits (and without getting the compiler excited).  This is used in
+// the FPU emulation code, where pointers and integers are often 
+// used interchangeably.
+#if SIZEOF_INT_P == 4
+  typedef Bit32u bx_ptr_equiv_t;
+#elif SIZEOF_INT_P == 8
+  typedef Bit64u bx_ptr_equiv_t;
+#else
+#  error "could not define bx_ptr_equiv_t to size of int*"
+#endif
+
+// Use a boolean type that will not conflict with the builtin type
+// on any system.
+typedef Bit32u bx_bool;
+
+#if BX_WITH_MACOS
+#  define bx_ptr_t char *
+#else
+#  define bx_ptr_t void *
+#endif
+
+#if defined(WIN32)
+#  define BX_LITTLE_ENDIAN
+#elif BX_WITH_MACOS
+#  define BX_BIG_ENDIAN
+#else
+#if WORDS_BIGENDIAN
+#  define BX_BIG_ENDIAN
+#else
+#  define BX_LITTLE_ENDIAN
+#endif
+#endif // defined(WIN32)
+
+
+#if BX_SUPPORT_X86_64
+#ifdef BX_LITTLE_ENDIAN
+typedef
+  struct {
+         Bit64u lo;
+         Bit64u hi;
+         } Bit128u;
+typedef
+  struct {
+         Bit64u lo;
+         Bit64s hi;
+         } Bit128s;
+#else   // must be Big Endian
+typedef
+  struct {
+         Bit64u hi;
+         Bit64u lo;
+         } Bit128u;
+typedef
+  struct {
+         Bit64s hi;
+         Bit64u lo;
+         } Bit128s;
+#endif
+#endif  // #if BX_SUPPORT_X86_64
+
+
+// for now only term.cc requires a GUI sighandler.
+#define BX_GUI_SIGHANDLER (BX_WITH_TERM)
+
+#define HAVE_SIGACTION 1
+
+// configure will change the definition of "inline" to the value
+// that the C compiler allows.  It tests the following keywords to
+// see if any is permitted: inline, __inline__, __inline.  If none
+// is permitted, it defines inline to be empty.
+#define inline inline
+
+// inline functions in headers that are compiled with C compiler
+// (e.g. fpu code) are declared with BX_C_INLINE macro.  Note that
+// the word "inline" itself may now be redefined by the above #define.
+// Many compilers are known to work with "static inline".  If the 
+// compiler can put the function inline, it does so and never creates
+// a symbol for the function.  If optimization is off, or inline is
+// defined to be empty, the static keyword causes the function to create
+// a symbol that's visible only to that .c file.  Each .c file that 
+// includes the header will produde another local version of the 
+// BX_C_INLINE function (not ideal).  However without "static" you can
+// duplicate symbol problems which are even worse.
+#define BX_C_INLINE static inline
+
+// Use BX_CPP_INLINE for all C++ inline functions.  Note that the
+// word "inline" itself may now be redefined by the above #define.
+#define BX_CPP_INLINE inline
+
+#ifdef __GNUC__
+
+// Some helpful compiler hints for compilers that allow them; GCC for now.
+//
+// BX_CPP_AlignN(n):
+//   Align a construct on an n-byte boundary.
+//
+// BX_CPP_AttrPrintf(formatArg, firstArg):
+//   This function takes printf-like arguments, so the compiler can check
+//   the consistency of the format string and the matching arguments.
+//   'formatArg' is the parameter number (starting from 1) of the format
+//   string argument.  'firstArg' is the parameter number of the 1st argument
+//   to check against the string argument.  NOTE: For non-static member
+//   functions, the this-ptr is argument number 1 but is invisible on
+//   the function prototype declaration - but you still have to count it.
+//
+// BX_CPP_AttrNoReturn():
+//   This function never returns.  The compiler can optimize-out following
+//   code accordingly.
+
+#define BX_CPP_AlignN(n) __attribute__ ((aligned (n)))
+#define BX_CPP_AttrPrintf(formatArg, firstArg) \
+                          __attribute__ ((format (printf, formatArg, firstArg)))
+#define BX_CPP_AttrNoReturn() __attribute__ ((noreturn))
+
+#else
+
+#define BX_CPP_AlignN(n) /* Not supported. */
+#define BX_CPP_AttrPrintf(formatArg, firstArg)  /* Not supported. */
+#define BX_CPP_AttrNoReturn() /* Not supported. */
+
+#endif
+
+#define BX_DEBUGGER 0
+#define BX_DISASM 1
+
+#if (BX_DEBUGGER == 1) && (BX_DISASM == 0)
+#error "Dissembler is required for BX_DEBUGGER !"
+#endif
+
+#define BX_PROVIDE_CPU_MEMORY 1
+#define BX_PROVIDE_DEVICE_MODELS 1
+
+#define BX_PROVIDE_MAIN       1
+
+#define BX_INSTRUMENTATION 0
+
+// limited i440FX PCI support
+#define BX_SUPPORT_PCI 0
+
+// Bochs VBE display interface
+#define BX_SUPPORT_VBE 1
+
+// CLGD54XX emulation
+#define BX_SUPPORT_CLGD54XX 0
+
+// CLGD54XX PCI emulation
+#define BX_SUPPORT_CLGD54XX_PCI 0
+
+#if (BX_SUPPORT_CLGD54XX_PCI && !BX_SUPPORT_PCI)
+#error To enable CL-GD54xx PCI support, you must also enable PCI
+#endif
+
+// ACPI controller
+#define BX_SUPPORT_ACPI 0
+
+#if (BX_SUPPORT_ACPI && !BX_SUPPORT_PCI)
+#error To enable ACPI support, you must also enable PCI
+#endif
+
+// Experimental VGA on PCI
+#define BX_SUPPORT_PCIVGA 0
+
+// Experimental host PCI device mapping
+#define BX_SUPPORT_PCIDEV 0
+	
+#if (BX_SUPPORT_PCIDEV && !BX_SUPPORT_PCI)
+#error To enable PCI host device mapping, you must also enable PCI
+#endif
+
+// limited USB on PCI
+#define BX_SUPPORT_PCIUSB 0
+
+#if (BX_SUPPORT_PCIUSB && !BX_SUPPORT_PCI)
+#error To enable USB, you must also enable PCI
+#endif
+
+#define BX_SUPPORT_BUSMOUSE 0
+
+#define BX_SUPPORT_ALIGNMENT_CHECK 0
+#define BX_SUPPORT_FPU 1
+#define BX_SUPPORT_MMX 1
+#define BX_SUPPORT_3DNOW 0
+#define BX_SUPPORT_SSE 0
+#define BX_SUPPORT_SSE_EXTENSION 0
+#define BX_SUPPORT_DAZ 0
+#define BX_SUPPORT_MISALIGNED_SSE 0
+#define BX_SUPPORT_SEP 0
+#define BX_SUPPORT_VME 1
+
+#define BX_SUPPORT_4MEG_PAGES 1
+#define BX_SUPPORT_GLOBAL_PAGES 0
+#define BX_SUPPORT_PAE 0
+
+#define BX_SupportGuest2HostTLB 0
+#define BX_SupportRepeatSpeedups 0
+#define BX_SupportHostAsms 1
+#define BX_SupportHostAsmsFpu 0
+
+#define BX_SUPPORT_ICACHE 0
+
+// save/restore support
+#define BX_SUPPORT_SAVE_RESTORE 1
+
+// if 1, don't do gpf on MSRs that we don't implement
+#define BX_IGNORE_BAD_MSR 1
+
+// CLFLUSH was introduced together with SSE2 instruction set
+#if BX_SUPPORT_SSE >= 2
+  #define BX_SUPPORT_CLFLUSH 1
+#else
+  #define BX_SUPPORT_CLFLUSH 0
+#endif
+
+#if (BX_SUPPORT_ALIGNMENT_CHECK && BX_CPU_LEVEL < 4)
+#error Alignment exception check is not supported in i386 !
+#endif
+
+#if (BX_SUPPORT_VME && BX_CPU_LEVEL < 5)
+#error With CPU level < 5, you must disable v8086 mode extensions !
+#endif
+
+#if (BX_SUPPORT_VME && !BX_SUPPORT_V8086_MODE)
+#error You must enable v8086 mode support to use v8086 mode extensions !
+#endif
+
+#if (BX_SUPPORT_MMX && BX_CPU_LEVEL < 5)
+#error With CPU level < 5, you must disable MMX support !
+#endif
+
+#if (!BX_SUPPORT_FPU && BX_CPU_LEVEL >= 5)
+#error With CPU level >= 5, you must enable FPU support !
+#endif
+
+#if (BX_SUPPORT_MMX && !BX_SUPPORT_FPU)
+#error "MMX cannot be compiled without FPU support !"
+#endif
+
+#if (BX_SUPPORT_FPU && BX_CPU_LEVEL < 3)
+#error "FPU cannot be compiled without cpu level >= 3 !"
+#endif
+
+#if (BX_SUPPORT_3DNOW && !BX_SUPPORT_MMX)
+#error "3DNow! cannot be compiled without MMX support !"
+#endif
+
+#if (BX_SUPPORT_SSE && !BX_SUPPORT_MMX)
+#error "SSE cannot be compiled without FPU+MMX support !"
+#endif
+
+#if (BX_CPU_LEVEL<6 && BX_SUPPORT_SSE)
+#error "SSE is only supported with CPU_LEVEL >= 6 !"
+#endif
+
+#if (BX_CPU_LEVEL<6 && BX_SUPPORT_SEP)
+#error "SYSENTER/SYSEXIT only supported with CPU_LEVEL >= 6 !"
+#endif
+
+#if (BX_CPU_LEVEL<6 && BX_SUPPORT_PAE)
+#error "Physical Address Extensions (PAE) only supported with CPU_LEVEL >= 6 !"
+#endif
+#if (BX_CPU_LEVEL<6 && BX_SUPPORT_GLOBAL_PAGES)
+#error "Page Global Extension (PGE) only supported with CPU_LEVEL >= 6 !"
+#endif
+#if (BX_CPU_LEVEL<5 && BX_SUPPORT_4MEG_PAGES)
+#error "Page Size Extension (PSE) only supported with CPU_LEVEL >= 5 !"
+#endif
+
+#if BX_SUPPORT_X86_64
+// Sanity checks to ensure that you cannot accidently use conflicting options.
+
+#if BX_CPU_LEVEL < 6
+#error "X86-64 requires cpu level 6 or greater !"
+#endif
+#if (BX_SUPPORT_SSE<2)
+#error "X86-64 requires SSE2 !"
+#endif
+#if !BX_SUPPORT_PAE
+#error "X86-64 requires Physical Address Extensions (PAE) !"
+#endif
+#if !BX_SUPPORT_GLOBAL_PAGES
+#error "X86-64 requires Page Global Extension (PGE) !"
+#endif
+#if !BX_SUPPORT_4MEG_PAGES
+#error "X86-64 requires Page Size Extension (PSE) !"
+#endif
+#endif
+
+#define BX_HAVE_GETENV 1
+#define BX_HAVE_SETENV 1
+#define BX_HAVE_SELECT 1
+#define BX_HAVE_SNPRINTF 1
+#define BX_HAVE_VSNPRINTF 1
+#define BX_HAVE_STRTOULL 1
+#define BX_HAVE_STRTOUQ 1
+#define BX_HAVE_STRDUP 1
+#define BX_HAVE_STRREV 0
+#define BX_HAVE_STRUCT_TIMEVAL 1
+
+// used in term gui
+#define BX_HAVE_COLOR_SET 0  
+#define BX_HAVE_MVHLINE 0
+#define BX_HAVE_MVVLINE 0
+
+
+// set if your compiler does not permit an empty struct
+#define BX_NO_EMPTY_STRUCTS 0
+
+// set if your compiler does not understand __attribute__ after a struct
+#define BX_NO_ATTRIBUTES 0
+#if BX_NO_ATTRIBUTES
+#define GCC_ATTRIBUTE(x) /* attribute not supported */
+#else
+#define GCC_ATTRIBUTE __attribute__
+#endif
+
+// set to use fast function calls
+#define BX_FAST_FUNC_CALL 0
+
+// On gcc2.95+ x86 only
+#if BX_FAST_FUNC_CALL && defined(__i386__) && defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
+#if BX_USE_CPU_SMF == 1
+#  define BX_CPP_AttrRegparmN(X) __attribute__((regparm(X)))
+#else
+// FIXME: BX_FAST_FUNC_CALL doesn't work with BX_USE_CPU_SMF = 0
+#  define BX_CPP_AttrRegparmN(X) /* Not defined */
+#endif
+#else
+#  define BX_CPP_AttrRegparmN(X) /* Not defined */
+#endif
+
+// set if your compiler does not allow label at the end of a {} block
+#define BX_NO_BLANK_LABELS 1
+
+// set if you do have <hash_map>, used in bx_debug/dbg_main.c
+#define BX_HAVE_HASH_MAP 0
+
+// set if you do have <hash_map.h>, used in bx_debug/dbg_main.c
+#define BX_HAVE_HASH_MAP_H 1
+
+// set if you do have <set>, used in bx_debug/dbg_main.c
+#define BX_HAVE_SET 1
+
+// set if you do have <set.h>, used in bx_debug/dbg_main.c
+#define BX_HAVE_SET_H 1
+
+// Support x86 hardware debugger registers and facilites.
+// These are the debug facilites offered by the x86 architecture,
+// not the optional built-in debugger.
+#define BX_X86_DEBUGGER 0
+
+#define BX_SUPPORT_CDROM 1
+
+#if BX_SUPPORT_CDROM
+   // This is the C++ class name to use if we are supporting
+   // low-level CDROM.
+#  define LOWLEVEL_CDROM cdrom_interface
+#endif
+
+// NE2K network emulation
+#define BX_SUPPORT_NE2K 0
+
+// Pseudo PCI NIC
+#define BX_SUPPORT_PCIPNIC 0
+
+#if (BX_SUPPORT_PCIPNIC && !BX_SUPPORT_PCI)
+#error To enable the PCI pseudo NIC, you must also enable PCI
+#endif
+
+// this enables the lowlevel stuff below if one of the NICs is present
+#define BX_NETWORKING 0
+
+#define BX_ETH_NULL_LOGGING 1
+#define BX_ETH_FBSD_LOGGING 1
+
+// determine which NE2K packet mover modules will be enabled
+// (this was moved from iodev/eth.h)
+#define ETH_NULL  1
+#ifdef BX_USE_ETH_ARPBACK
+#  define ETH_ARPBACK 1
+#endif
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__APPLE__)
+#define ETH_FBSD  1
+#endif
+#if defined(linux)
+#define ETH_LINUX 1
+#endif
+#if defined(WIN32)
+#define ETH_WIN32 1
+#endif
+
+// this enables Ethertap packet mover; determined by configure script
+#define HAVE_ETHERTAP 0
+
+// this enables TUN/TAP packet mover; determined by configure script
+#define HAVE_TUNTAP 0
+
+// this enables VDE packet mover; determined by configure script
+#define HAVE_VDE 0
+
+
+// I/O Interface to debug
+#define BX_SUPPORT_IODEBUG 0
+
+// External Debugger
+#define BX_EXTERNAL_DEBUGGER 0
+
+// Magic breakpoints
+#define BX_MAGIC_BREAKPOINT 0
+
+#ifdef WIN32
+#define BX_FLOPPY0_NAME "Floppy Disk A:"
+#define BX_FLOPPY1_NAME "Floppy Disk B:"
+#else
+#define BX_FLOPPY0_NAME "Floppy Disk 0"
+#define BX_FLOPPY1_NAME "Floppy Disk 1"
+#endif
+
+// This is handy for certain performance testing purposes, but otherwise
+// totally useless.  If you define BX_SCHEDULED_DIE_TIME then it enables code
+// in bx_pit_c::periodic that will cause Bochs to exit() after a certain number
+// of instructions.
+//#define BX_SCHEDULED_DIE_TIME 1162230000   // end of redhat6.0 boot
+
+#endif  // _BX_CONFIG_H
--- ./Makefile.00	2004-02-21 15:34:36.000000000 +0100
+++ ./Makefile	2007-10-13 16:19:06.000000000 +0200
@@ -11,7 +11,7 @@
 
 .PHONY: default install install-bin install-man upd-funcs commit-version \
 	clean distclean src-dist dist bins rpm \
-        inc-dist-major inc-dist-minor inc-dist-pl
+        inc-dist-major inc-dist-minor inc-dist-pl uninstall
 
 export 
 include version.inc
@@ -22,7 +22,7 @@
 DIST_STUFF := $(wildcard README* NEWS TODO ChangeLog COPYING) Makefile \
 	      version.inc bin man src etc
 
-PREFIX    = /usr/local
+PREFIX    = /usr
 BINDIR    = $(PREFIX)/bin
 MANDIR    = $(PREFIX)/man
 MAN1DIR   = $(MANDIR)/man1
@@ -32,9 +32,15 @@
 
 LFS := true
 
+BINS = "bxtptinfo bxmount"
+SCRIPTS = "bxtclone bxtcreate bxtfuncs.inc bxtmkfs bxtsfdisk \
+	bxtactivate bxtcopy bxtdd bxtlilo bxtmount bxtsettype bxtstar"
+MANS = bxt-synopsis.1 bxtclone.1 bxtcreate.1 bxtmkfs.1 bxtsfdisk.1 bxtptinfo.1 bxmount.1 \
+	bxtactivate.1 bxtcopy.1 bxtdd.1 bxtlilo.1 bxtmount.1 bxtsettype.1 bxtstart.1
+
 # targets ---------------------------------------------------------------------
 
-default:
+default: bins
 	@echo "   make install installs the bochs-tools to $(PREFIX)"
 	@echo "   make install PREFIX=foo installs the bochs-tools to foo"
 
@@ -43,6 +49,7 @@
 install-bin:
 	install -d $(DESTDIR)$(BINDIR)
 	install bin/bxt* $(DESTDIR)$(BINDIR)
+	install bin/bxmount $(DESTDIR)$(BINDIR)
 	@[ -e $(DESTDIR)$(BINDIR)/bxtinstall ] && \
 	            rm -f $(DESTDIR)$(BINDIR)/bxtinstall || :
 
@@ -57,10 +64,12 @@
 
 bins:
 	$(MAKE) -C src
+	$(MAKE) -C src -f Makefile.bxmount
 
 clean:
 	rm -fr bochstools-*.tar.bz2 bochstools-*.rpm $(RPM_BASE)
 	$(MAKE) -C src clean
+	$(MAKE) -C src -f Makefile.bxmount clean
 
 distclean:
 	rm -fr bochstools-*.tar.bz2
