14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  Copyright (C) 2001  MandrakeSoft S.A.
24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    MandrakeSoft S.A.
44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    43, rue d'Aboukir
54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    75002 Paris - France
64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    http://www.linux-mandrake.com/
74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    http://www.mandrakesoft.com/
84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  This library is free software; you can redistribute it and/or
104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  modify it under the terms of the GNU Lesser General Public
114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  License as published by the Free Software Foundation; either
124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  version 2 of the License, or (at your option) any later version.
134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  This library is distributed in the hope that it will be useful,
154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  but WITHOUT ANY WARRANTY; without even the implied warranty of
164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  Lesser General Public License for more details.
184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  You should have received a copy of the GNU Lesser General Public
204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  License along with this library; if not, write to the Free Software
214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// config.h.in is distributed in the source TAR file.  When you run
254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// the configure script, it generates config.h with some changes
264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// according to your build environment.  For example, in config.h.in,
274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// SIZEOF_UNSIGNED_CHAR is set to 0.  When configure produces config.h
284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// it will change "0" to the detected value for your system.
294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// config.h contains ONLY preprocessor #defines and a few typedefs.
314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// It must be included by both C and C++ files, so it must not
324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// contain anything language dependent such as a class declaration.
334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifndef _BX_CONFIG_H_
364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define _BX_CONFIG_H_ 1
374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima///////////////////////////////////////////////////////////////////
394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// USER CONFIGURABLE OPTIONS : EDIT ONLY OPTIONS IN THIS SECTION //
404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima///////////////////////////////////////////////////////////////////
414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if 1
444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// quit_sim is defined in gui/siminterface.h
454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_EXIT(x)  SIM->quit_sim (x)
464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// provide the real main and the usual exit.
484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_EXIT(x)  ::exit(x)
494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// We have tested the following combinations:
524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  * processors=1, bootstrap=0, ioapic_id=1   (uniprocessor system)
534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  * processors=2, bootstrap=0, ioapic_id=2
544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//  * processors=4, bootstrap=0, ioapic_id=4
554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SMP 0
564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_BOOTSTRAP_PROCESSOR 0
574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_SMP_THREADS_SUPPORTED 8
584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// include in APIC models, required for a multiprocessor system.
604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_APIC 0
614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_SMP && !BX_SUPPORT_APIC)
634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error For multiprocessor simulation, BX_SUPPORT_APIC is required.
644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// if simulating Linux, this provides a few more debugging options
674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// such as tracing all system calls.
684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEBUG_LINUX 0
694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// adds support for the GNU readline library in the debugger command
714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// prompt.
724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_LIBREADLINE 0
734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_READLINE_HISTORY_H 0
744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Define to 1 if you have <locale.h>
764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_LOCALE_H 0
774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// I rebuilt the code which provides timers to IO devices.
794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Setting this to 1 will introduce a little code which
804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// will panic out if cases which shouldn't happen occur.
814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Set this to 0 for optimal performance.
824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_TIMER_DEBUG 0
834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Settable A20 line.  For efficiency, you can disable
854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// having a settable A20 line, eliminating conditional
864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// code for every physical memory access.  You'll have
874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// to tell your software not to mess with the A20 line,
884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// and accept it as always being on if you change this.
894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   1 = use settable A20 line. (normal)
904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   0 = A20 is like the rest of the address lines
914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_A20 1
934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Processor Instructions Per Second
954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// To find out what value to use for the 'ips' directive
964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// in your '.bochsrc' file, set BX_SHOW_IPS to 1, and
974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// run the software in bochs you plan to use most.  Bochs
984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// will print out periodic IPS ratings.  This will change
994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// based on the processor mode at the time, and various
1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// other factors.  You'll get a reasonable estimate though.
1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// When you're done, reset BX_SHOW_IPS to 0, do a
1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 'make all-clean', then 'make' again.
1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SHOW_IPS         0
1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SHOW_IPS) && (defined(__MINGW32__) || defined(_MSC_VER))
1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define        SIGALRM         14
1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Compile in support for DMA & FLOPPY IO.  You'll need this
1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// if you plan to use the floppy drive emulation.  But if
1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// you're environment doesn't require it, you can change
1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// it to 0.
1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DMA_FLOPPY_IO 1
1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Default number of Megs of memory to emulate.  The
1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 'megs:' directive in the '.bochsrc' file overrides this,
1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// allowing per-run settings.
1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEFAULT_MEM_MEGS 32
1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// CPU level emulation.  Default level is set in
1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// the configure script.  BX_CPU_LEVEL defines the CPU level
1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// to emulate.  BX_CPU_LEVEL_HACKED is a hack to define the
1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// level of some instructions, so they can be tested before
1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// the rest of the emulation is up to that level.
1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPU_LEVEL 0
1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPU_LEVEL_HACKED 0
1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// emulate x86-64 instruction set?
1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_X86_64 0
1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// emulate long physical address (>32 bit)
1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PHY_ADDRESS_LONG 0
1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SLEEP 0
1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_MSLEEP 0
1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_USLEEP 0
1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_NANOSLEEP 0
1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_ABORT 0
1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SOCKLEN_T 0
1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SOCKADDR_IN_SIN_LEN 0
1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_GETTIMEOFDAY 0
1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(WIN32)
1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_REALTIME_USEC 1
1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_REALTIME_USEC (BX_HAVE_GETTIMEOFDAY)
1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_MKSTEMP 0
1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SYS_MMAN_H 0
1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_XPM_H 0
1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_TIMELOCAL 0
1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_GMTIME 0
1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_MKTIME 0
1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_NET_IF_H 0
1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This turns on Roland Mainz's idle hack.  Presently it is specific to the X11
1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// and term gui. If people try to enable it elsewhere, give a compile error
1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// after the gui definition so that they don't waste their time trying.
1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_IDLE_HACK 0
1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Minimum Emulated IPS.
1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This is used in the realtime PIT as well as for checking the
1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// IPS value set in the config file.
1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_IPS 200000
1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Minimum and maximum values for SMP quantum variable. Defines
1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// how many instructions each CPU could execute execute in one
1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// shot (one cpu_loop call)
1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SMP_QUANTUM_MIN  1
1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SMP_QUANTUM_MAX 16
1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use Static Member Funtions to eliminate 'this' pointer passing
1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// If you want the efficiency of 'C', you can make all the
1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// members of the C++ CPU class to be static.
1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This defaults to 1 since it should improve performance, but when
1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// SMP mode is enabled, it will be turned off by configure.
1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_CPU_SMF 1
1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_MEM_SMF 1
1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use static member functions in IO DEVice emulation modules.
1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// For efficiency, use C like functions for IO handling,
1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// and declare a device instance at compile time,
1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// instead of using 'new' and storing the pointer.  This
1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// eliminates some overhead, especially for high-use IO
1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// devices like the disk drive.
1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   1 = Use static member efficiency (normal)
1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   0 = Use nonstatic member functions (use only if you need
1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//       multiple instances of a device class
1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_HD_SMF       1  // Hard drive
1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_BIOS_SMF     1  // BIOS
1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_CMOS_SMF     1  // CMOS
1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_DMA_SMF      1  // DMA
1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_FD_SMF       1  // Floppy
2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_KEY_SMF      1  // Keyboard
2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PAR_SMF      1  // Parallel
2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PIC_SMF      1  // PIC
2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PIT_SMF      1  // PIT
2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_SER_SMF      1  // Serial
2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_UM_SMF       1  // Unmapped
2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_VGA_SMF      1  // VGA
2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_SB16_SMF     1  // Sound (SB 16)
2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_DEV_SMF      1  // System Devices (port92)
2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PCI_SMF      1  // PCI
2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_P2I_SMF      1  // PCI-to-ISA bridge
2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PIDE_SMF     1  // PCI-IDE
2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PCIVGA_SMF   1  // PCI-VGA
2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PCIDEV_SMF   1  // PCI-DEV
2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_USB_UHCI_SMF 1  // USB UHCI hub
2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_USB_OHCI_SMF 1  // USB OHCI hub
2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_PCIPNIC_SMF  1  // PCI pseudo NIC
2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_NE2K_SMF     1  // NE2K
2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_EFI_SMF      1  // External FPU IRQ
2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_GAMEPORT_SMF 1  // Gameport
2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_CIRRUS_SMF   1  // SVGA Cirrus
2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_BUSM_SMF     1  // Bus Mouse
2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_ACPI_SMF     1  // ACPI
2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PLUGINS  0
2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_DLFCN_H 0
2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_PLUGINS && \
2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  (   !BX_USE_HD_SMF || !BX_USE_BIOS_SMF || !BX_USE_CMOS_SMF \
2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_DMA_SMF || !BX_USE_FD_SMF || !BX_USE_KEY_SMF \
2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_PAR_SMF || !BX_USE_PIC_SMF || !BX_USE_PIT_SMF \
2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_SER_SMF || !BX_USE_UM_SMF || !BX_USE_VGA_SMF \
2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_SB16_SMF || !BX_USE_DEV_SMF || !BX_USE_PCI_SMF \
2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_P2I_SMF || !BX_USE_PCIVGA_SMF || !BX_USE_USB_UHCI_SMF \
2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_USB_OHCI_SMF || !BX_USE_PCIPNIC_SMF || !BX_USE_PIDE_SMF \
2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_ACPI_SMF || !BX_USE_NE2K_SMF || !BX_USE_EFI_SMF \
2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   || !BX_USE_GAMEPORT_SMF || !BX_USE_PCIDEV_SMF || !BX_USE_CIRRUS_SMF)
2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#error You must use SMF to have plugins
2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SB16     0
2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_GAMEPORT 0
2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_SB16
2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use virtual methods for the sound output functions
2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_SOUND_VIRTUAL  1
2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Determines which sound output class is to be used.
2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Currently the following are available:
2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    bx_sound_linux_c      Output for Linux, to /dev/dsp and /dev/midi00
2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    bx_sound_windows_c    Output for Windows midi and wave mappers
2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//    bx_sound_output_c     Dummy functions, no output
2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SOUND_OUTPUT_C  bx_sound_output_c
2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use ALSA sound interface on Linux
2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_ALSASOUND  0
2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define USE_RAW_SERIAL 0
2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This enables writing to port 0xe9 and the output
2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// is sent to the console.  Reading from port 0xe9
2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// will return 0xe9 to let you know this is available.
2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Leave this 0 unless you have a reason to use it.
2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PORT_E9_HACK 0
2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_GDBSTUB 0
2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This option enables compressed (zlib) hd support
2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_COMPRESSED_HD_SUPPORT 0
2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_ZLIB 0
2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_COMPRESSED_HD_SUPPORT && !BX_HAVE_ZLIB
2714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error You must have zlib to enable compressed hd support
2724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
2734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This option defines the number of supported ATA channels.
2754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// There are up to two drives per ATA channel.
2764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_ATA_CHANNEL 4
2774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_MAX_ATA_CHANNEL>4 || BX_MAX_ATA_CHANNEL<1)
2794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "BX_MAX_ATA_CHANNEL should be between 1 and 4"
2804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
2814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// =================================================================
2834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BEGIN: OPTIONAL DEBUGGER SECTION
2844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
2854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// These options are only used if you compile in support for the
2864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// native command line debugging environment.  Typically, the debugger
2874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// is not used, and this section can be ignored.
2884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// =================================================================
2894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Compile in support for virtual/linear/physical breakpoints.
2914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Enable only those you need. Recommend using only linear
2924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// breakpoints, unless you need others. Less supported means
2934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// slightly faster execution time.
2944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DBG_MAX_VIR_BPOINTS 16
2954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DBG_MAX_LIN_BPOINTS 16
2964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DBG_MAX_PHY_BPOINTS 16
2974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DBG_MAX_WATCHPONTS  16
2994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// max file pathname size for debugger commands
3014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_PATH     256
3024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// max nesting level for debug scripts including other scripts
3034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_INFILE_DEPTH  10
3044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// use this command to include (nest) debug scripts
3054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_INCLUDE_CMD   "source"
3064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Make a call to command line debugger extensions.  If set to 1,
3084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// a call is made.  An external routine has a chance to process
3094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// the command.  If it does, than the debugger ignores the command.
3104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DBG_EXTENSIONS 0
3114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// =================================================================
3134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// END: OPTIONAL DEBUGGER SECTION
3144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// =================================================================
3154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//////////////////////////////////////////////////////////////////////
3174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// END OF USER CONFIGURABLE OPTIONS : DON'T EDIT ANYTHING BELOW !!! //
3184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// THIS IS GENERATED BY THE ./configure SCRIPT                      //
3194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//////////////////////////////////////////////////////////////////////
3204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_X11 0
3234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_BEOS 0
3244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_WIN32 0
3254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_MACOS 0
3264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_CARBON 0
3274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_NOGUI 0
3284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_TERM 0
3294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_RFB 0
3304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_AMIGAOS 0
3314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_SDL 0
3324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_SVGA 0
3334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_WITH_WX 0
3344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BX_USE_TEXTCONFIG should be set to 1 unless Bochs is compiled
3364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// for wxWidgets only.
3374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_USE_TEXTCONFIG 1
3384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// A certain functions must NOT be fastcall even if compiled with fastcall
3404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// option, and those are callbacks from Windows which are defined either 
3414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// as cdecl or stdcall. The entry point main() also has to remain cdecl.
3424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifndef CDECL
3434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(_MSC_VER)
3444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define CDECL __cdecl
3454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
3464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define CDECL
3474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// add special export symbols for win32 DLL building.  The main code must
3514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// have __declspec(dllexport) on variables, functions, or classes that the
3524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// plugins can access.  The plugins should #define PLUGGABLE which will
3534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// activate the __declspec(dllimport) instead.
3544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(WIN32) || defined(__CYGWIN__)
3554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  if BX_PLUGINS && defined(BX_PLUGGABLE)
3564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   #warning I will import DLL symbols from Bochs main program.
3574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#    define BOCHSAPI __declspec(dllimport)
3584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  elif BX_PLUGINS
3594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   #warning I will export DLL symbols.
3604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#    define BOCHSAPI __declspec(dllexport)
3614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  endif
3624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifndef BOCHSAPI
3644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BOCHSAPI
3654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(__CYGWIN__)
3684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Make BOCHSAPI_CYGONLY exactly the same as BOCHSAPI.  This symbol
3694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// will be used for any cases where Cygwin requires a special tag
3704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// but VC++ does not.
3714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BOCHSAPI_CYGONLY BOCHSAPI
3724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
3734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// define the symbol to be empty
3744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BOCHSAPI_CYGONLY /*empty*/
3754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(_MSC_VER)
3784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Make BOCHSAPI_MSVCONLY exactly the same as BOCHSAPI.  This symbol
3794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// will be used for any cases where VC++ requires a special tag
3804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// but Cygwin does not.
3814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BOCHSAPI_MSVCONLY BOCHSAPI
3824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
3834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// define the symbol to be empty
3844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BOCHSAPI_MSVCONLY /*empty*/
3854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEFAULT_CONFIG_INTERFACE "defined_by_configure"
3884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEFAULT_DISPLAY_LIBRARY "defined_by_configure"
3894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Roland Mainz's idle hack is presently specific to X11. If people try to
3914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// enable it elsewhere, give a compile error so that they don't waste their
3924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// time trying.
3934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_USE_IDLE_HACK && !BX_WITH_X11 && !BX_WITH_TERM)
3944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error IDLE_HACK will only work with the X11 or term gui. Correct configure args and retry.
3954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
3964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define WORDS_BIGENDIAN 0
3984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_UNSIGNED_CHAR      0
4004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_UNSIGNED_SHORT     0
4014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_UNSIGNED_INT       0
4024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_UNSIGNED_LONG      0
4034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_UNSIGNED_LONG_LONG 0
4044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define SIZEOF_INT_P              0
4054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_64BIT_CONSTANTS_USE_LL 1
4074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_64BIT_CONSTANTS_USE_LL
4084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// doesn't work on Microsoft Visual C++, maybe others
4094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CONST64(x)  (x##LL)
4104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif defined(_MSC_VER)
4114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CONST64(x)  (x##I64)
4124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CONST64(x)  (x)
4144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(WIN32)
4174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned char      Bit8u;
4184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed char      Bit8s;
4194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned short     Bit16u;
4204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed short     Bit16s;
4214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned int       Bit32u;
4224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed int       Bit32s;
4234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef __MINGW32__
4244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned long long Bit64u;
4254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed long long Bit64s;
4264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <sys/types.h>
4274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned __int64   Bit64u;
4294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed __int64   Bit64s;
4304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif BX_WITH_MACOS
4324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned char      Bit8u;
4334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed char      Bit8s;
4344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned short     Bit16u;
4354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed short     Bit16s;
4364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned int       Bit32u;
4374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed int       Bit32s;
4384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned long long Bit64u;
4394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed long long Bit64s;
4404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Unix like platforms
4434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if SIZEOF_UNSIGNED_CHAR != 1
4454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error "sizeof (unsigned char) != 1"
4464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned char Bit8u;
4484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed char Bit8s;
4494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if SIZEOF_UNSIGNED_SHORT != 2
4524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error "sizeof (unsigned short) != 2"
4534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned short Bit16u;
4554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed short Bit16s;
4564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if SIZEOF_UNSIGNED_INT == 4
4594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned int Bit32u;
4604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed int Bit32s;
4614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif SIZEOF_UNSIGNED_LONG == 4
4624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned long Bit32u;
4634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed long Bit32s;
4644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error "can't find sizeof(type) of 4 bytes!"
4664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if SIZEOF_UNSIGNED_LONG == 8
4694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned long Bit64u;
4704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed long Bit64s;
4714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif SIZEOF_UNSIGNED_LONG_LONG == 8
4724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef unsigned long long Bit64u;
4734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef   signed long long Bit64s;
4744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error "can't find data type of 8 bytes"
4764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define GET32L(val64) ((Bit32u)(((Bit64u)(val64)) & 0xFFFFFFFF))
4814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define GET32H(val64) ((Bit32u)(((Bit64u)(val64)) >> 32))
4824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// now that Bit32u and Bit64u exist, defined bx_address
4844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_X86_64
4854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef Bit64u bx_address;
4864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef Bit32u bx_address;
4884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// define physical and linear address types
4914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef bx_address bx_lin_address;
4924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_X86_64
4944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_LIN_ADDRESS_WIDTH 48
4954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
4964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_LIN_ADDRESS_WIDTH 32
4974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
4984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
4994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_PHY_ADDRESS_LONG
5004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef Bit64u bx_phy_address;
5014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PHY_ADDRESS_WIDTH 40
5024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
5034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef Bit32u bx_phy_address;
5044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PHY_ADDRESS_WIDTH 32
5054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// small sanity check
5084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_PHY_ADDRESS_LONG
5094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #if (BX_PHY_ADDRESS_WIDTH <= 32)
5104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    #error "BX_PHY_ADDRESS_LONG implies emulated physical address width > 32 bit"
5114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #endif
5124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PHY_ADDRESS_MASK ((((Bit64u)(1)) << BX_PHY_ADDRESS_WIDTH) - 1)
5154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PHY_ADDRESS_RESERVED_BITS \
5174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima      (~BX_PHY_ADDRESS_MASK & BX_CONST64(0xfffffffffffff))
5184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// technically, in an 8 bit signed the real minimum is -128, not -127.
5204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// But if you decide to negate -128 you tend to get -128 again, so it's
5214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// better not to use the absolute maximum in the signed range.
5224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT64U ( (Bit64u) -1           )
5234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT64U ( 0                     )
5244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT64S ( ((Bit64u) -1) >> 1    )
5254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT64S ( (Bit64s)-(((Bit64u) -1) >> 1) )
5264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT32U ( (Bit32u) -1           )
5274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT32U ( 0                     )
5284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT32S ( ((Bit32u) -1) >> 1    )
5294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT32S ( (Bit32s)-(((Bit32u) -1) >> 1) )
5304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT16U ( (Bit16u) -1           )
5314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT16U ( 0                     )
5324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT16S ( ((Bit16u) -1) >> 1    )
5334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT16S ( (Bit16s)-(((Bit16u) -1) >> 1) )
5344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT8U  ( (Bit8u) -1            )
5354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT8U  ( 0                     )
5364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MAX_BIT8S  ( ((Bit8u) -1) >> 1     )
5374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_MIN_BIT8S  ( (Bit8s)-(((Bit8u) -1) >> 1)  )
5384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// create an unsigned integer type that is the same size as a pointer.
5414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// You can typecast a pointer to a bx_pr_equiv_t without losing any
5424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// bits (and without getting the compiler excited).
5434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if SIZEOF_INT_P == 4
5444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef Bit32u bx_ptr_equiv_t;
5454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif SIZEOF_INT_P == 8
5464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  typedef Bit64u bx_ptr_equiv_t;
5474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
5484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  error "could not define bx_ptr_equiv_t to size of int*"
5494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use a boolean type that will not conflict with the builtin type
5524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// on any system.
5534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef Bit32u bx_bool;
5544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_WITH_MACOS
5564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define bx_ptr_t char *
5574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
5584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define bx_ptr_t void *
5594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(WIN32)
5624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_LITTLE_ENDIAN
5634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#elif BX_WITH_MACOS
5644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_BIG_ENDIAN
5654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
5664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if WORDS_BIGENDIAN
5674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_BIG_ENDIAN
5684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
5694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_LITTLE_ENDIAN
5704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif // defined(WIN32)
5724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
5744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_X86_64
5754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef BX_LITTLE_ENDIAN
5764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef
5774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  struct {
5784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u lo;
5794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u hi;
5804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         } Bit128u;
5814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef
5824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  struct {
5834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u lo;
5844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64s hi;
5854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         } Bit128s;
5864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else   // must be Big Endian
5874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef
5884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  struct {
5894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u hi;
5904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u lo;
5914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         } Bit128u;
5924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef
5934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  struct {
5944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64s hi;
5954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         Bit64u lo;
5964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima         } Bit128s;
5974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
5984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif  // #if BX_SUPPORT_X86_64
5994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// for now only term.cc requires a GUI sighandler.
6024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_GUI_SIGHANDLER (BX_WITH_TERM)
6034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_SIGACTION 1
6054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// configure will change the definition of "inline" to the value
6074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// that the C compiler allows.  It tests the following keywords to
6084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// see if any is permitted: inline, __inline__, __inline.  If none
6094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// is permitted, it defines inline to be empty.
6104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define inline inline
6114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// inline functions in headers that are compiled with C compiler
6134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// (e.g. fpu code) are declared with BX_C_INLINE macro.  Note that
6144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// the word "inline" itself may now be redefined by the above #define.
6154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Many compilers are known to work with "static inline".  If the
6164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// compiler can put the function inline, it does so and never creates
6174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// a symbol for the function.  If optimization is off, or inline is
6184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// defined to be empty, the static keyword causes the function to create
6194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// a symbol that's visible only to that .c file.  Each .c file that
6204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// includes the header will produde another local version of the
6214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BX_C_INLINE function (not ideal).  However without "static" you can
6224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// duplicate symbol problems which are even worse.
6234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_C_INLINE static inline
6244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Use BX_CPP_INLINE for all C++ inline functions.  Note that the
6264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// word "inline" itself may now be redefined by the above #define.
6274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_INLINE inline
6284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef __GNUC__
6304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Some helpful compiler hints for compilers that allow them; GCC for now.
6324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
6334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BX_CPP_AlignN(n):
6344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   Align a construct on an n-byte boundary.
6354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
6364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BX_CPP_AttrPrintf(formatArg, firstArg):
6374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   This function takes printf-like arguments, so the compiler can check
6384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   the consistency of the format string and the matching arguments.
6394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   'formatArg' is the parameter number (starting from 1) of the format
6404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   string argument.  'firstArg' is the parameter number of the 1st argument
6414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   to check against the string argument.  NOTE: For non-static member
6424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   functions, the this-ptr is argument number 1 but is invisible on
6434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   the function prototype declaration - but you still have to count it.
6444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//
6454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BX_CPP_AttrNoReturn():
6464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   This function never returns.  The compiler can optimize-out following
6474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//   code accordingly.
6484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AlignN(n) __attribute__ ((aligned (n)))
6504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AttrPrintf(formatArg, firstArg) \
6514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima                          __attribute__ ((format (printf, formatArg, firstArg)))
6524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AttrNoReturn() __attribute__ ((noreturn))
6534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
6554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AlignN(n) /* Not supported. */
6574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AttrPrintf(formatArg, firstArg)  /* Not supported. */
6584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPP_AttrNoReturn() /* Not supported. */
6594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
6614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEBUGGER     0
6634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DISASM       0
6644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_DEBUGGER_GUI 0
6654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_DEBUGGER == 1) && (BX_DISASM == 0)
6674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error Dissembler is required for BX_DEBUGGER !
6684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
6694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PROVIDE_CPU_MEMORY    1
6714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PROVIDE_DEVICE_MODELS 1
6724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_PROVIDE_MAIN       1
6744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_INSTRUMENTATION    0
6764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// enable BX_DEBUG/BX_ERROR/BX_INFO messages
6784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_NO_LOGGING 0
6794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// enable BX_ASSERT checks
6814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_ASSERT_ENABLE 0
6824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// limited i440FX PCI support
6844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PCI 0
6854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Bochs VBE display interface
6874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_VBE 0
6884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// CLGD54XX emulation
6904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_CLGD54XX 0
6914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// ACPI controller
6934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_ACPI 0
6944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_ACPI && !BX_SUPPORT_PCI)
6964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error To enable ACPI support, you must also enable PCI
6974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
6984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
6994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Experimental VGA on PCI
7004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PCIVGA 0
7014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Experimental host PCI device mapping
7034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PCIDEV 0
7044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_PCIDEV && !BX_SUPPORT_PCI)
7064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error To enable PCI host device mapping, you must also enable PCI
7074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// limited USB on PCI
7104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_USB_UHCI 0
7114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_USB_OHCI 0
7124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PCIUSB (BX_SUPPORT_USB_UHCI || BX_SUPPORT_USB_OHCI)
7134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_PCIUSB && !BX_SUPPORT_PCI)
7154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error To enable USB, you must also enable PCI
7164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Experimental bus mouse support
7194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_BUSMOUSE 0
7204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_ALIGNMENT_CHECK 0
7224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_FPU 0
7234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_MMX 0
7244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_3DNOW 0
7254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SSE 0
7264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SSE_EXTENSION 0
7274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SSE4A 0
7284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SSE5A 0
7294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_DAZ 0
7304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_MISALIGNED_SSE 0
7314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_SEP 0
7324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_VME 0
7334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_POPCNT 0
7344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_MONITOR_MWAIT 0
7354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_XSAVE 0
7364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_AES 0
7374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_MOVBE 0
7384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_VMX 0
7394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_MTRR 0
7414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_LARGE_PAGES 0
7424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_GLOBAL_PAGES 0
7434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PAE 0
7444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_1G_PAGES 0
7454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SupportRepeatSpeedups 0
7474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SupportHostAsms 0
7484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_ICACHE 0
7504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_TRACE_CACHE 0
7514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_TRACE_CACHE && BX_SUPPORT_ICACHE==0)
7534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error Trace cache optimization cannot be compiled without iCache!
7544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_3DNOW
7574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define BX_CPU_VENDOR_INTEL 0
7584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
7594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define BX_CPU_VENDOR_INTEL 1
7604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Maximum CPUID vendor and brand string lengths
7634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPUID_VENDOR_LEN 12
7644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CPUID_BRAND_LEN  48
7654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// if 1, don't do gpf on MSRs that we don't implement
7674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_IGNORE_BAD_MSR 0
7684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_CONFIGURE_MSRS 0
7704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// CLFLUSH was introduced together with SSE2 instruction set
7724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_SSE >= 2
7734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define BX_SUPPORT_CLFLUSH 1
7744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
7754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #define BX_SUPPORT_CLFLUSH 0
7764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_ALIGNMENT_CHECK && BX_CPU_LEVEL < 4)
7794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error Alignment exception check is not supported in i386 !
7804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CONFIGURE_MSRS && BX_CPU_LEVEL < 5)
7834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error MSRs are supported only with CPU level >= 5 !
7844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_VME && BX_CPU_LEVEL < 5)
7874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error With CPU level < 5, you must disable v8086 mode extensions !
7884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_MMX && BX_CPU_LEVEL < 5)
7914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error With CPU level < 5, you must disable MMX support !
7924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (!BX_SUPPORT_FPU && BX_CPU_LEVEL > 4)
7954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error With CPU level > 4, you must enable FPU support !
7964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
7974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
7984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_MMX && !BX_SUPPORT_FPU)
7994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "MMX cannot be compiled without FPU support !"
8004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_FPU && BX_CPU_LEVEL < 3)
8034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "FPU cannot be compiled without cpu level >= 3 !"
8044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_3DNOW && !BX_SUPPORT_MMX)
8074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "3DNow! cannot be compiled without MMX support !"
8084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_AES && !BX_SUPPORT_SSE)
8114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "AES cannot be compiled without SSE support !"
8124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_XSAVE && !BX_SUPPORT_SSE)
8154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "XSAVE cannot be compiled without SSE support !"
8164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_SSE && !BX_SUPPORT_MMX)
8194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "SSE cannot be compiled without FPU+MMX support !"
8204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_SSE)
8234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "SSE is only supported with CPU_LEVEL >= 6 !"
8244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_SEP)
8274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "SYSENTER/SYSEXIT only supported with CPU_LEVEL >= 6 !"
8284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_VMX)
8314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "VMX only supported with CPU_LEVEL >= 6 !"
8324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_VMX && !BX_SUPPORT_SEP)
8354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "SYSENTER/SYSEXIT is required for VMX support !"
8364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_SSE < 3) || (BX_SUPPORT_SSE == 3 && BX_SUPPORT_SSE_EXTENSION == 0)
8394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_MOVBE
8404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "MOVBE only supported with SSE3E !"
8414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_PAE)
8454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "Physical Address Extensions (PAE) only supported with CPU_LEVEL >= 6 !"
8464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_GLOBAL_PAGES)
8484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "Page Global Extension (PGE) only supported with CPU_LEVEL >= 6 !"
8494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<5 && BX_SUPPORT_LARGE_PAGES)
8514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "Page Size Extension (PSE) only supported with CPU_LEVEL >= 5 !"
8524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_CPU_LEVEL<6 && BX_SUPPORT_MTRR)
8544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "MTRRs only supported with CPU_LEVEL >= 6 !"
8554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_PAE && !BX_SUPPORT_LARGE_PAGES)
8584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "Physical Address Extensions (PAE) requires large pages support !"
8594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (!BX_SUPPORT_X86_64 && BX_SUPPORT_1G_PAGES)
8624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "1G only supported with x86-64 !"
8634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_X86_64
8664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Sanity checks to ensure that you cannot accidently use conflicting options.
8674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_CPU_LEVEL < 6
8694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "X86-64 requires cpu level 6 or greater !"
8704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_SSE<2)
8724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "X86-64 requires SSE2 !"
8734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if !BX_SUPPORT_PAE
8754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "X86-64 requires Physical Address Extensions (PAE) !"
8764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if !BX_SUPPORT_GLOBAL_PAGES
8784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "X86-64 requires Page Global Extension (PGE) !"
8794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if !BX_SUPPORT_LARGE_PAGES
8814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error "X86-64 requires Page Size Extension (PSE) !"
8824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
8844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_GETENV 0
8864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SETENV 0
8874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SELECT 0
8884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SNPRINTF 0
8894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_VSNPRINTF 0
8904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRTOULL 0
8914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRTOUQ 0
8924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRDUP 0
8934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRREV 0
8944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRICMP 0
8954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRCASECMP 0
8964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_STRUCT_TIMEVAL 0
8974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
8984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// used in term gui
8994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_COLOR_SET 0
9004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_MVHLINE 0
9014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_MVVLINE 0
9024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if your compiler does not permit an empty struct
9054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_NO_EMPTY_STRUCTS 0
9064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if your compiler does not understand __attribute__ after a struct
9084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_NO_ATTRIBUTES 0
9094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_NO_ATTRIBUTES
9104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define GCC_ATTRIBUTE(x) /* attribute not supported */
9114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
9124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define GCC_ATTRIBUTE __attribute__
9134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set to use fast function calls
9164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_FAST_FUNC_CALL 0
9174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// On gcc2.95+ x86 only
9194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_FAST_FUNC_CALL && defined(__i386__) && defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
9204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_USE_CPU_SMF == 1
9214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_CPP_AttrRegparmN(X) __attribute__((regparm(X)))
9224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
9234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// FIXME: BX_FAST_FUNC_CALL doesn't work with BX_USE_CPU_SMF = 0
9244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_CPP_AttrRegparmN(X) /* Not defined */
9254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
9274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define BX_CPP_AttrRegparmN(X) /* Not defined */
9284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if your compiler does not allow label at the end of a {} block
9314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_NO_BLANK_LABELS 0
9324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if you do have <hash_map>, used in bx_debug/dbg_main.c
9344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_HASH_MAP 0
9354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if you do have <hash_map.h>, used in bx_debug/dbg_main.c
9374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_HASH_MAP_H 0
9384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if you do have <set>, used in bx_debug/dbg_main.c
9404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SET 0
9414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// set if you do have <set.h>, used in bx_debug/dbg_main.c
9434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_HAVE_SET_H 0
9444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Support x86 hardware debugger registers and facilites.
9464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// These are the debug facilites offered by the x86 architecture,
9474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// not the optional built-in debugger.
9484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_X86_DEBUGGER 0
9494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_CDROM 0
9514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if BX_SUPPORT_CDROM
9534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   // This is the C++ class name to use if we are supporting
9544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   // low-level CDROM.
9554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define LOWLEVEL_CDROM cdrom_interface
9564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// NE2K network emulation
9594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_NE2K 0
9604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Pseudo PCI NIC
9624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_PCIPNIC 0
9634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if (BX_SUPPORT_PCIPNIC && !BX_SUPPORT_PCI)
9654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  #error To enable the PCI pseudo NIC, you must also enable PCI
9664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this enables the lowlevel stuff below if one of the NICs is present
9694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_NETWORKING 0
9704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_ETH_NULL_LOGGING 1
9724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_ETH_FBSD_LOGGING 1
9734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// determine which NE2K packet mover modules will be enabled
9754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// (this was moved from iodev/eth.h)
9764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define ETH_NULL  1
9774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef BX_USE_ETH_ARPBACK
9784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#  define ETH_ARPBACK 1
9794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__NetBSD_kernel__) || defined(__APPLE__)
9814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define ETH_FBSD  1
9824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(linux)
9844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define ETH_LINUX 1
9854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#if defined(WIN32)
9874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define ETH_WIN32 1
9884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
9894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this enables Ethertap packet mover; determined by configure script
9914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_ETHERTAP 0
9924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this enables TUN/TAP packet mover; determined by configure script
9944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_TUNTAP 0
9954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this enables VDE packet mover; determined by configure script
9974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define HAVE_VDE 0
9984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
9994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
10004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// I/O Interface to debug
10014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_SUPPORT_IODEBUG 0
10024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
10034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef WIN32
10044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_FLOPPY0_NAME "Floppy Disk A:"
10054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_FLOPPY1_NAME "Floppy Disk B:"
10064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else
10074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_FLOPPY0_NAME "Floppy Disk 0"
10084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define BX_FLOPPY1_NAME "Floppy Disk 1"
10094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif
10104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
10114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif  // _BX_CONFIG_H
1012