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