Commit Graph

274 Commits

Author SHA1 Message Date
Stanislav Shwartsman
3a1852ea23 take local APIC read/write access into CPU class from BX_MEM (needed for APIC virtualization later) 2009-02-17 19:20:47 +00:00
Volker Ruppert
e5eac65b59 - removed wrong character from FSF address (converted invisible and useless
2-byte character)
- updated FSF address in some files
- added license to some files
2009-02-08 09:05:52 +00:00
Stanislav Shwartsman
9929e6ed78 - updated FSF address 2009-01-16 18:18:59 +00:00
Volker Ruppert
501952efdd - removed unused logfunctions member 'type' and related method 'settype()'
- updated FSF address in copyright
2009-01-10 11:30:20 +00:00
Volker Ruppert
e12b21e647 - update all dependencies 2009-01-03 09:54:10 +00:00
Volker Ruppert
815dff019e - converted iodebug device to a plugin 2008-12-30 18:11:13 +00:00
Volker Ruppert
01b0ed241b - fixed endianness problems at PCI DMA block transfers using getHostMemAddr()
and memcpy()
- changes in getHostMemAddr() for the usage outside of the cpu
2008-12-13 11:03:36 +00:00
Stanislav Shwartsman
d7fa44d270 optimize code access detection 2008-12-05 22:34:42 +00:00
Stanislav Shwartsman
0f5f075e4d - Fixed theoretically possible pageWriteStamp overflow 2008-10-21 19:50:05 +00:00
Stanislav Shwartsman
d12c08f720 Typo fixed 2008-10-18 18:14:04 +00:00
Stanislav Shwartsman
ce425f02d9 Small fix towards 40-bit physical address emulated 2008-10-18 18:10:14 +00:00
Stanislav Shwartsman
f303d61cc1 Fixed 'dirty page' support in debugger 2008-07-26 14:44:26 +00:00
Stanislav Shwartsman
8d17e7b539 Fixed watchpoints handling 2008-05-31 20:59:38 +00:00
Stanislav Shwartsman
f6b7fecba2 For future 64-bit ph.addr 2008-05-10 21:36:55 +00:00
Stanislav Shwartsman
6ebae41ad7 print physcial address with special format - preparations for 64-bit physical address emu 2008-05-09 22:33:37 +00:00
Stanislav Shwartsman
11b564b2f0 Speed up memory access by devices 2008-05-02 23:18:51 +00:00
Stanislav Shwartsman
6225aa64f5 Move monitor check earlier - it should handle SMM as well 2008-05-01 20:46:00 +00:00
Stanislav Shwartsman
73d8bd3af4 Hide more memory variables 2008-05-01 20:28:36 +00:00
Stanislav Shwartsman
f5780a5f5c Hide some BX_MEM_C variables
Optimize resolve16 methods - by reducing their amount again - reduce chance for misspredictin
2008-05-01 20:08:37 +00:00
Stanislav Shwartsman
297087fea9 fixed memory handler params - use bx_phy_address data type 2008-04-29 22:14:23 +00:00
Stanislav Shwartsman
d8c77cc1ae Small cleanup for memory class 2008-04-17 20:20:43 +00:00
Stanislav Shwartsman
fda4d38959 32-bit systems have a problem to allocate large amount of physical memory for Bochs simulation which makes simulation with 4G address space virtually impossible. But in most of the cases when 4G physical address space defined - it is not touched by default on every run so it is possible to allocate only really accessed blocks. This commit made all necessary preparations for it. 2008-04-17 14:39:33 +00:00
Stanislav Shwartsman
fea49bb270 Fixed linear address wrap in legacy (not long64) mode 2008-04-07 18:39:17 +00:00
Stanislav Shwartsman
a459a64f3e whispace, tab2space, indent, dos2unix and other cleanups 2008-02-15 22:05:43 +00:00
Stanislav Shwartsman
25a9b9fef1 whitespace cleanup again 2008-02-03 20:27:06 +00:00
Stanislav Shwartsman
37fbb82baa Cleanups. Move bxInstruction_c definition to separate file instr.h 2008-01-29 17:13:10 +00:00
Stanislav Shwartsman
72d72c92d4 Fixed warnings of VC2008 2007-12-30 18:02:22 +00:00
Stanislav Shwartsman
838fb2a048 Fixing V2008 warnings - they found a bug in sse_pfp.cc ! 2007-12-23 17:21:28 +00:00
Stanislav Shwartsman
92f7a3a805 Fixed several compilation errors under OSX 2007-12-10 19:05:07 +00:00
Volker Ruppert
cc80157a94 - fixed compilation error 2007-11-02 23:30:07 +00:00
Stanislav Shwartsman
e137560b14 Complete MONITOR/MWAIT implemntation (including monitoring of memory range)
Fixed PANIC in read/write Cr/Dr - should #UD with unkown register used
2007-11-01 18:03:48 +00:00
Stanislav Shwartsman
a4e20e9d29 warnings fixed 2007-10-24 23:02:09 +00:00
Stanislav Shwartsman
42fdd8a3a1 During Bochs benchmarking I figured out that hostasm actually slow down the emulation ... so remove this ugly code which also doesn't help :)
speedup flags update for some instructions - idea was taken from DT patch by h.johansson
2007-10-21 22:07:33 +00:00
Stanislav Shwartsman
624a543c34 Fix compilation warning 2007-10-09 20:23:01 +00:00
Stanislav Shwartsman
071c5c1a26 A lot of changes but everything is really trivial.
Make save/restore default feature, the configure option for save/restore removed from configure script and save/restore made available forever. All code now assume it is exists. Bochs save/restore tree previosly called "save_restore" renamed to "bochs" tree and it will be havily used everywhere, starting from save/restore and ending by various bochs debugger functions. I am going to rework debugger code to get rid of debug CPU access functions and use this "bochs" param tree instead
2007-09-28 19:52:08 +00:00
Stanislav Shwartsman
476baaf1d8 ThiS patch makes watchpoints work even if they are triggered on CPUs other than CPU 0 during SMp.
Patch from developers mailing list
2007-09-27 16:10:45 +00:00
Stanislav Shwartsman
412eeeeb7c Get crregs definition to separate file from cpu.h 2007-09-10 16:00:15 +00:00
Stanislav Shwartsman
593f9d5f36 Fixed typo 2007-05-15 12:48:59 +00:00
Stanislav Shwartsman
b6c8275cfd remove old PIT model and always use Greg Alexander's new one 2007-04-08 21:57:06 +00:00
Stanislav Shwartsman
9d907b5f65 Try to specify everywhere the list size in bx_list_c constructor 2007-04-03 22:38:49 +00:00
Stanislav Shwartsman
97c0bc40a2 Bochs website tracker patch
shows where write outside of memory occurred
2006-12-29 08:02:35 +00:00
Volker Ruppert
0c827dcbf1 - implemented debugger access to SMRAM area 2006-10-02 17:40:20 +00:00
Volker Ruppert
aacc148f7c - initial revision of the 32-bit init code for the Bochs BIOS
* CPU, PCI, ACPI and SMM init
  * MP and ACPI table generation
- MP table generation hack in the Bochs memory code disabled (should be removed)
- don't test the checksum of large BIOS images (for now)
- existing 16-bit PCIBIOS init disabled for now
2006-09-28 19:01:04 +00:00
Volker Ruppert
0a804aeb18 - memory cleanup code moved to a separate method (called from bx_atexit())
- fixed memory handler init and cleanup code (memory leaks)
2006-09-15 17:02:52 +00:00
Volker Ruppert
a3908d6e86 - moved BX_USE_MEM_SMF to all the other SMF definitions in config.h.in (should
be set to 1, since there is only one address space present)
- fixed memory object member to support the static case (SMF)
2006-09-02 12:08:28 +00:00
Volker Ruppert
77217aa7b8 - fixed memory init code for restart support in wx (a lot more changes in other
parts of Bochs are needed to make it really work)
2006-09-01 18:14:13 +00:00
Stanislav Shwartsman
1deddb9f0e Fix linking problem with debugger enabled 2006-06-06 16:46:08 +00:00
Stanislav Shwartsman
fea15294b5 Fixed compilation error in init.cc
Move initialization of memory object to misc_mem.cc
2006-06-03 12:59:14 +00:00
Stanislav Shwartsman
d17eb99f76 fixed allocated physical memory limit check in memory.cc
Force eflags before saving them - register eflags using param handlers
2006-06-01 20:05:15 +00:00
Stanislav Shwartsman
b0cbaf70e0 Avoid double check for a20addr <= BX_MEM_THIS len 2006-05-31 20:23:58 +00:00
Stanislav Shwartsman
594b8cce47 Fixed segfault with bochs debugger but reported today 2006-05-31 17:20:52 +00:00
Stanislav Shwartsman
8b0df8e99b Merge SAVE_RESTORE branch to CVS 2006-05-27 15:54:49 +00:00
Stanislav Shwartsman
6a0d15ee31 Veto direct write to the 0x000C0000 to 0x000EFFFF area 2006-04-29 16:55:22 +00:00
Stanislav Shwartsman
41204ede1a Fixed compilation err with debugger ON 2006-04-06 16:43:36 +00:00
Volker Ruppert
05280a1eba - fixed handling of BIOS extensions with base address within the 0xe0000 segment
- fixed a warning
2006-04-05 16:58:22 +00:00
Stanislav Shwartsman
b271bcd9c6 Fixed compilaion problem on Linux gcc 3.3.4 2006-03-28 21:09:04 +00:00
Stanislav Shwartsman
4fd9bd53c3 Change Bit32u -> bx_phy_address in memory 2006-03-28 16:53:02 +00:00
Stanislav Shwartsman
da3d26d7f4 Preliminary implemntation of SMM save statei
Fixed fetchModeMask for load32bitOsStack
2006-03-27 18:02:07 +00:00
Stanislav Shwartsman
c7d142200f Implement SMRAM conrol register in i440fx chipset and all its functionality in memory class 2006-03-26 22:15:07 +00:00
Stanislav Shwartsman
f3ac069c90 initialize new BX_MEM_C member 2006-03-26 19:48:54 +00:00
Stanislav Shwartsman
b8be848943 Use access_type param in getHostMemAddr, less efficient but no copy-paste at least 2006-03-26 19:39:37 +00:00
Stanislav Shwartsman
5c3fba4399 Support access to SMRAM in memory object
Cleanup in CPU code
2006-03-26 18:58:01 +00:00
Stanislav Shwartsman
7b6c2587a9 Now devices could be compiled separatelly from CPU
Averything that required cpu.h include now has it explicitly and there are a lot of files not dependant by CPU at all which will compile a lot faster now ...
2006-03-06 22:03:16 +00:00
Stanislav Shwartsman
c0aeb1b073 Substitute NULL to BX_CPU_C parameter instead of BX_CPU(0) for memory ops originated by devices 2006-03-06 19:23:13 +00:00
Stanislav Shwartsman
7ed117f0e0 Add 8-byte memory access support, all 8-byte memory accesses executed byte-byte before. 2006-03-03 12:55:37 +00:00
Stanislav Shwartsman
e297df457a Roll back the try to move Local APIC memory access to CPU.
It was fast and fine but had serious correctness problems with RMW apic access
2006-03-02 23:16:13 +00:00
Stanislav Shwartsman
5fad793989 move local apic handling to the access_linear function for the memory class.
speedup the whole simulation by 2% !
2006-03-01 22:32:24 +00:00
Stanislav Shwartsman
dfeaf141f0 Register I/O APIC as memory handler, optimize memory handlers array 2006-02-27 19:04:01 +00:00
Volker Ruppert
6311fface8 - pci options rewritten to a parameter tree
- proposed parameter tree updated
- pci presence flag stored in the memory code
2006-02-19 21:35:50 +00:00
Volker Ruppert
7a48a576b5 - fixed ROM address range check 2006-02-11 09:35:54 +00:00
Stanislav Shwartsman
c7dd4185a7 Do not pass crc32 function as parameter to memory class - it is available as global function now 2006-01-28 16:16:03 +00:00
Stanislav Shwartsman
37eb82c69c Totally remove the cosimulation code from Bochs.
The Bochs anyway even doesn't compile if cosimulation configured enabled.
But in the same time the cosimulation code only disturbs to the future development of Bochs debugger, for example adding x86-64 functionality ...
For those of you who still may want to see the cosimulation code inside I put it in patch and upload it Bochs CVS patches folder. Read comments for the patch ! ----------------------------------------------------------------------
2006-01-25 22:20:00 +00:00
Stanislav Shwartsman
18afa9fd2d This is cumulative patch for bochs debugger, it is only very first step towards working debugger supporting all new simulator functionalitieS.
- move crc.cc from debugger to bochs folder and make it projct-wide and not local for debugger
 - added new 'info sse' command for debugger
 - extend 'modebp' command to break on any mode change
 - remove unimplemened 'info program' function, it is always printed fixed text
 - move debugger help to parser, cleanup and simplify it
2006-01-24 19:03:55 +00:00
Stanislav Shwartsman
aacabd00f9 Generate MP tables only when APIC enabled 2006-01-18 19:11:05 +00:00
Stanislav Shwartsman
f2fc4bbe5a Generate MP tables even for single CPU configurations 2006-01-17 18:15:49 +00:00
Stanislav Shwartsman
3dbf0f3b97 Bochs supports only ONE memory address space anyway so the code sould be optimized for this case a little (mainly in SMP configuration) 2006-01-15 19:35:39 +00:00
Stanislav Shwartsman
96c074f87b Fix MP table generated by Bochs 2006-01-10 18:33:27 +00:00
Volker Ruppert
28853fe54c - calculate BIOS ROM start address from image size if no address parameter is
used or address is set to 0.
2005-12-27 16:59:27 +00:00
Volker Ruppert
81dd23c68f - create SMP specific tables dynamicly ("backported" from qemu - already mentioned
in our TODO list items 9.1 and 9.2)
2005-12-25 19:30:48 +00:00
Volker Ruppert
dd384f68ed - report checksum error only if the original Bochs BIOS is used
- prepared dynamicly created SMP tables (should be at F000:B000, so we can get
  rid of the SMP specific BIOS images)
- MSVC warning fixed
2005-12-19 20:48:51 +00:00
Stanislav Shwartsman
0f8c8c85ed indent changes 2005-11-27 19:40:56 +00:00
Volker Ruppert
f8d7f31f89 - always use BX_N_OPTROM_IMAGES as the maximum number for RAM & ROM
- reset code for RAM & ROM simplified
- fixed some typos and warnings
2005-10-28 06:33:53 +00:00
Kevin Lawton
641650e7e1 Added optramimage directive for .bochsrc files, with same syntax as
optromimage.  You can load up to 4 arbitrary binary images into RAM.
  I didn't do any checking on the addresses, so it's up to you to make
  sure they don't collide with anything else.  Should only be used for
  placing files into standard RAM.
2005-10-28 00:12:27 +00:00
Volker Ruppert
dab91288a9 - a rom extension starting in the 0xdxxxx space must end at max. 0xdffff
- don't create a checksum for BIOS extensions without signature at 0xe0000
2005-10-25 19:12:54 +00:00
Volker Ruppert
9d3cbbdb76 - accept an optional rom image in the 0xe0000 area and load them into BIOS memory 2005-10-25 08:33:55 +00:00
Stanislav Shwartsman
469358aaf9 Move SHOW_IPS action to bx_gui object, may be some GUI will be able to print IPS online in the simulation window status bar ...
Small code cleanup
2005-10-13 16:22:21 +00:00
Volker Ruppert
0e2f0a4392 - support for large BIOS images with up to 512k size added (initial patch by magicfox) 2005-10-12 17:11:44 +00:00
Volker Ruppert
9a89ad7b07 - make debugger watchpoints in device memory work again (SF patch #1309763 by
Nickolai Zeldovich)
2005-10-01 09:52:35 +00:00
Volker Ruppert
2cb4d376fd - only panic if the VGABIOS checksum is wrong 2005-07-07 16:57:53 +00:00
Volker Ruppert
69fe0b00d4 - some more warnings in MSVC fixed 2005-06-07 19:26:21 +00:00
Stanislav Shwartsman
1755589376 Separate pageWriteStamp from ICACHE. The pageWriteStamp has totally independant structure and could be used in future with icache structure. Also it could be significantly speeded up using BX_SMF analog constructions. 2005-04-10 19:42:48 +00:00
Volker Ruppert
780bcd3579 - fixed getHostMemAddr() for memory regions assigned to a memory handler
(e.g. PCI PnP memory)
2005-01-29 23:29:08 +00:00
Stanislav Shwartsman
f3e4681ab7 Commit change from Christian Neubert
Allow to APIC address space to be in any page inside or outside of physical address space
2005-01-15 13:10:15 +00:00
Volker Ruppert
02ae558db8 - removed old unused code designed for a save/restore feature
- fixed pcidev targets in iodev/Makefile.in
- updated all Makefile dependencies using a default setup (.conf.linux).
  TODO: dependencies should be generated at compile time since they depend on
  the config settings
2004-12-13 19:10:38 +00:00
Volker Ruppert
b9ba811da4 - fixed memory limit check 2004-12-04 13:48:53 +00:00
Volker Ruppert
2da42331ff - missing break statement added in function getHostMemAddr() 2004-11-28 08:54:59 +00:00
Stanislav Shwartsman
02fc33a86b Fix CS.base register after #RESET
update changes
2004-11-16 19:19:13 +00:00
Volker Ruppert
82ea615428 - getHostMemAddr() now returns a pointer to a 4k memory array filled with 0xff
if an unexisting memory address is requested
- rom array initialized with 0xff
- fixed access to aliased bios rom in dbg_fetch_mem()
2004-11-16 18:50:21 +00:00
Volker Ruppert
229ff0195a - 128k BIOS ROM space now aliased on memory top 2004-11-14 14:06:43 +00:00
Volker Ruppert
d3d33d3e7a - unaligned shadow RAM array replaced by an aligned ROM array. Shadow RAM is now
normal RAM and the ROMs are stored in the ROM array. TODO: alias BIOS on
  memory top.
2004-11-11 20:55:29 +00:00
Stanislav Shwartsman
a9022ac5cb Fixed compilation prroblem reported in bug
[ bochs-Bugs-913418 ] compiler errors with --enable-external-debugger option
Remove code duplication
2004-10-29 21:15:48 +00:00
Stanislav Shwartsman
5e23909c7c prepations for NX bit implementation 2004-10-21 18:20:40 +00:00
Volker Ruppert
03b5797db9 - rom image size check (multiple 512) enabled again
- rom checksum test added (TODO: checksum test in rombios)
2004-09-02 18:24:50 +00:00
Volker Ruppert
9a6a7ec2fd - rom address space check added to avoid overlapping rom images
- vgaromimage option now compatible with the other rom options. Old style syntax
  (without 'file=...") is still supported.
- load order for the rom images fixed (system, vga, other)
- rom images sizes not multiple 512 cause a BX_INFO for now. The original check
  will be enabled after updating the vgabios files
- optromimage error messages fixed
- some updates of the bochsrc sample
2004-09-01 18:12:23 +00:00
Stanislav Shwartsman
016207b222 Commented problematic check in misc_mem.cc
Implemnted lazy-flags and undocumented flags handling for IMUL instructions
2004-08-30 21:47:24 +00:00
Volker Ruppert
1b2769e73a - added some sanity checks in function load_ROM()
- removed unused and obsolete stuff from the memory code
2004-08-26 07:58:33 +00:00
Volker Ruppert
d06c80cee3 - changed all iodev config macros to BX_SUPPORT_xxx
- removed incorrect SDL/ prefix from include paths (patch from Robin KAY)
2004-08-06 15:49:55 +00:00
Stanislav Shwartsman
f9bd2b74be 1. Fixed bug in FSUB instruction
2. Fixed bug

[ 989478 ] I-Cache and undefined Instruktions

The L4 microkernel uses an undefined instruction to
trap for a special requests into the kernel (LOCK NOP).
The handler fixes this up and gives the user a special
code page with syscall stubs. If you're not using the
I-Cache optimization everthing works find on bochs. But
if you enable the I-Cache (--enable-icache), then the
undefined opcode exception is thrown only once for ever
virtual address it occurs. See the demodisk of the
L4KA::pistachio
(http://www.l4ka.org/projects/pistachio/download.php).
In this case the pingpong benchmark of this demo is of
interest. Everything runs fine until the program tries
to spawn a new task for its measurements. This new task
shares the code of the creating program. But the new
task stops executing at the undefined instruction
explained above and no exception is thrown.
2004-07-29 20:15:19 +00:00
Volker Ruppert
f24f8a4c77 - VGA memory now registered using DEV_register_memory_handlers (static VGA
memory handling in memory.cc removed)
- CRTC write protection implemented
- 16-bit read access to some VGA registers added
- memory handler code now conciders the status of the A20 line
2004-07-18 19:40:51 +00:00
Stanislav Shwartsman
5873b26a82 Speed up compilation process.
bochs.h already not include iodev.h which reduces compilation dependences for almost all cpu and fpu files, now cpu files will not be recompiled if iodev includes was changed
2004-06-19 15:20:15 +00:00
Volker Ruppert
36d7f60c21 - VBE LFB memory now registered using DEV_register_memory_handlers (static LFB
memory handling in memory.cc removed)
- type of memory handlers changed to bx_bool
- misc_mem.cc: fixed a warning
2004-06-06 17:01:19 +00:00
Daniel Gimpelevich
6c26e6a65f Introduced Frank Cornelis's PCIDEV patch. 2004-01-15 02:08:37 +00:00
Daniel Gimpelevich
fff74a6f83 Fixed incompatibility with gcc3.3, I think. 2003-11-28 15:07:29 +00:00
Volker Ruppert
88667a4759 - removed obsolete symbols (hard disk and cdrom names, dynamic translation)
- symbol BX_PROVIDE_BIOS_HOOKS removed and "romimage" description updated
- symbol BX_SUPPORT_VGA removed (VGA support is always present)
2003-09-10 16:34:56 +00:00
Christophe Bothamy
42ad2eaa1e - fix Bochs failing to panic when BIOS images can not be loaded 2003-08-06 08:24:14 +00:00
Christophe Bothamy
575287a144 -fix segfault bhen running with smp enabled 2003-08-05 13:19:35 +00:00
Volker Ruppert
d1652093ac - applied some parts of the patch from Andrew Zabolotny <zap@cobra.ru>
* changed all %ll format descriptions to FMT_LL macro so that
    Microsoft Visual C works correctly (it uses %I64)
  * missing type conversions added
  * cdrom.cc: variable types for win32 fixed
  * removed some unused variables in eth_win32.cc and harddrv.cc
  * added missing includes in make_cmos_image.c and niclist.c
2003-06-07 19:16:55 +00:00
Volker Ruppert
6b184eb3b5 - better error handling in function load_ROM():
* cause a BX_PANIC if the path of the system BIOS or VGA BIOS is empty
  * open() and fstat() now cause a BX_ERROR if the rom image is optional
2003-04-02 17:03:34 +00:00
Christophe Bothamy
50efc3b8c7 - apply Conn Clark's patch.perf-regparm-cclark :
- it works only on x86 with gcc2.95+
  - uses the GCC function atribute "regparm(n)" to declare that certain
    functions use the register calling convention
  - performance improvement is about 6%
2003-03-02 23:59:12 +00:00
Stanislav Shwartsman
cdfc3cbce4 instrumentation enchancements:
* renamed CPU_ID to BX_CPU_ID.
  with this new name there is no possibility for name contentions and BX_CPU_ID
  definition could be moved out to NEED_CPU_REG_SHORTCUTS block

* returned back `unsigned BX_CPU::which_cpu(void)` function

* added BX_CPU_ID parameter for
	BX_INSTR_PHY_READ(a20addr, len);
	BX_INSTR_PHY_WRITE(a20addr, len);
    now it will be
	BX_INSTR_PHY_READ(cpu_id, a20addr, len);
	BX_INSTR_PHY_WRITE(cpu_id, a20addr, len);
2003-02-13 15:04:11 +00:00
Christophe Bothamy
b2dbcdb993 - apply Zwane's patch.highmem patch
It can be easily removed if things go wrong on win32
2003-01-29 15:01:16 +00:00
Bryce Denney
3edf45a1d9 - regenerate makefile dependencies 2002-11-25 15:05:51 +00:00
Volker Ruppert
2deef745e6 - added new DEV_* macros for PCI functions in plugin.h
- memory code: direct PCI memtype function calls replaced by DEV_* macros
- PCI devices: direct i/o register function calls replaced by DEV_* macros
2002-11-03 17:17:11 +00:00
Bryce Denney
a6aa9afd67 - rename "control" to "textconfig". It was named when we called it
a control panel, but now we're calling it a text configuration interface.

Modified:
    .bochsrc Makefile.in bochs.h main.cc cpu/Makefile.in
    debug/Makefile.in disasm/Makefile.in fpu/Makefile.in
    gui/Makefile.in iodev/Makefile.in memory/Makefile.in
2002-10-29 20:18:32 +00:00
Bryce Denney
cec9135e9f - Apply patch.replace-Boolean rev 1.3. Every "Boolean" is now changed to a
"bx_bool" which is always defined as Bit32u on all platforms.  In Carbon
  specific code, Boolean is still used because the Carbon header files
  define it to unsigned char.
- this fixes bug [ 623152 ] MacOSX: Triple Exception Booting win95.
  The bug was that some code in Bochs depends on Boolean to be a
  32 bit value.  (This should be fixed, but I don't know all the places
  where it needs to be fixed yet.)  Because Carbon defined Boolean as
  an unsigned char, Bochs just followed along and used the unsigned char
  definition to avoid compile problems.  This exposed the dependency
  on 32 bit Boolean on MacOS X only and led to major simulation problems,
  that could only be reproduced and debugged on that platform.
- On the mailing list we debated whether to make all Booleans into "bool" or
  our own type.  I chose bx_bool for several reasons.
  1. Unlike C++'s bool, we can guarantee that bx_bool is the same size on all
     platforms, which makes it much less likely to have more platform-specific
     simulation differences in the future.  (I spent hours on a borrowed
     MacOSX machine chasing bug 618388 before discovering that different sized
     Booleans were the problem, and I don't want to repeat that.)
  2. We still have at least one dependency on 32 bit Booleans which must be
     fixed some time, but I don't want to risk introducing new bugs into the
     simulation just before the 2.0 release.

Modified Files:
    bochs.h config.h.in gdbstub.cc logio.cc main.cc pc_system.cc
    pc_system.h plugin.cc plugin.h bios/rombios.c cpu/apic.cc
    cpu/arith16.cc cpu/arith32.cc cpu/arith64.cc cpu/arith8.cc
    cpu/cpu.cc cpu/cpu.h cpu/ctrl_xfer16.cc cpu/ctrl_xfer32.cc
    cpu/ctrl_xfer64.cc cpu/data_xfer16.cc cpu/data_xfer32.cc
    cpu/data_xfer64.cc cpu/debugstuff.cc cpu/exception.cc
    cpu/fetchdecode.cc cpu/flag_ctrl_pro.cc cpu/init.cc
    cpu/io_pro.cc cpu/lazy_flags.cc cpu/lazy_flags.h cpu/mult16.cc
    cpu/mult32.cc cpu/mult64.cc cpu/mult8.cc cpu/paging.cc
    cpu/proc_ctrl.cc cpu/segment_ctrl_pro.cc cpu/stack_pro.cc
    cpu/tasking.cc debug/dbg_main.cc debug/debug.h debug/sim2.cc
    disasm/dis_decode.cc disasm/disasm.h doc/docbook/Makefile
    docs-html/cosimulation.html fpu/wmFPUemu_glue.cc
    gui/amigaos.cc gui/beos.cc gui/carbon.cc gui/gui.cc gui/gui.h
    gui/keymap.cc gui/keymap.h gui/macintosh.cc gui/nogui.cc
    gui/rfb.cc gui/sdl.cc gui/siminterface.cc gui/siminterface.h
    gui/term.cc gui/win32.cc gui/wx.cc gui/wxmain.cc gui/wxmain.h
    gui/x.cc instrument/example0/instrument.cc
    instrument/example0/instrument.h
    instrument/example1/instrument.cc
    instrument/example1/instrument.h
    instrument/stubs/instrument.cc instrument/stubs/instrument.h
    iodev/cdrom.cc iodev/cdrom.h iodev/cdrom_osx.cc iodev/cmos.cc
    iodev/devices.cc iodev/dma.cc iodev/dma.h iodev/eth_arpback.cc
    iodev/eth_packetmaker.cc iodev/eth_packetmaker.h
    iodev/floppy.cc iodev/floppy.h iodev/guest2host.h
    iodev/harddrv.cc iodev/harddrv.h iodev/ioapic.cc
    iodev/ioapic.h iodev/iodebug.cc iodev/iodev.h
    iodev/keyboard.cc iodev/keyboard.h iodev/ne2k.h
    iodev/parallel.h iodev/pci.cc iodev/pci.h iodev/pic.h
    iodev/pit.cc iodev/pit.h iodev/pit_wrap.cc iodev/pit_wrap.h
    iodev/sb16.cc iodev/sb16.h iodev/serial.cc iodev/serial.h
    iodev/vga.cc iodev/vga.h memory/memory.h memory/misc_mem.cc
2002-10-25 11:44:41 +00:00
Bryce Denney
5e520261db Add plugin support to Bochs by merging all the changes from the
BRANCH_PLUGINS branch!

Authors:
  Bryce Denney
  Christophe Bothamy
  Kevin Lawton (we grabbed a lot of plugin code from plex86)
Testing help from:
  Volker Ruppert
  Don Becker (Psyon)
  Jeremy Parsons (Br'fin)

The change log is too long to paste in here.  To read the change log, do
  cvs log patches/patch.final-from-BRANCH_PLUGINS.gz

All the changes and a detailed description are contained in a patch
called patch.final-from-BRANCH_PLUGINS.gz.  To look at the complete
patch, do
  cvs upd -r1.1 patches/patch.final-from-BRANCH_PLUGINS.gz

Then you will have a local copy of the patch, which you can gunzip and
play with however you want.

Modified Files:
    .bochsrc Makefile.in aclocal.m4 bochs.h config.h.in configure
    configure.in gdbstub.cc logio.cc main.cc pc_system.cc
    pc_system.h state_file.h bios/Makefile.in bios/rombios.c
    cpu/Makefile.in cpu/access.cc cpu/apic.cc cpu/arith16.cc
    cpu/arith32.cc cpu/arith8.cc cpu/cpu.cc cpu/cpu.h
    cpu/ctrl_xfer32.cc cpu/exception.cc cpu/fetchdecode.cc
    cpu/fetchdecode64.cc cpu/flag_ctrl.cc cpu/flag_ctrl_pro.cc
    cpu/init.cc cpu/io.cc cpu/logical16.cc cpu/logical32.cc
    cpu/logical8.cc cpu/paging.cc cpu/proc_ctrl.cc
    cpu/protect_ctrl.cc cpu/segment_ctrl_pro.cc cpu/shift16.cc
    cpu/shift32.cc cpu/stack64.cc cpu/string.cc cpu/tasking.cc
    debug/Makefile.in debug/dbg_main.cc disasm/Makefile.in
    doc/docbook/user/user.dbk dynamic/Makefile.in fpu/Makefile.in
    gui/Makefile.in gui/amigaos.cc gui/beos.cc gui/carbon.cc
    gui/control.cc gui/control.h gui/gui.cc gui/gui.h
    gui/keymap.cc gui/keymap.h gui/macintosh.cc gui/nogui.cc
    gui/rfb.cc gui/sdl.cc gui/sdlkeys.h gui/siminterface.cc
    gui/siminterface.h gui/term.cc gui/win32.cc gui/wx.cc
    gui/wxdialog.cc gui/wxdialog.h gui/wxmain.cc gui/wxmain.h
    gui/x.cc gui/keymaps/sdl-pc-de.map gui/keymaps/sdl-pc-us.map
    gui/keymaps/x11-pc-de.map instrument/example0/instrument.h
    instrument/example1/instrument.h
    instrument/stubs/instrument.cc instrument/stubs/instrument.h
    iodev/Makefile.in iodev/biosdev.cc iodev/biosdev.h
    iodev/cdrom.cc iodev/cmos.cc iodev/cmos.h iodev/devices.cc
    iodev/dma.cc iodev/dma.h iodev/eth_fbsd.cc iodev/eth_linux.cc
    iodev/eth_null.cc iodev/eth_tap.cc iodev/floppy.cc
    iodev/floppy.h iodev/guest2host.cc iodev/guest2host.h
    iodev/harddrv.cc iodev/harddrv.h iodev/iodebug.cc
    iodev/iodebug.h iodev/iodev.h iodev/keyboard.cc
    iodev/keyboard.h iodev/ne2k.cc iodev/ne2k.h iodev/parallel.cc
    iodev/parallel.h iodev/pci.cc iodev/pci.h iodev/pci2isa.cc
    iodev/pci2isa.h iodev/pic.cc iodev/pic.h iodev/pit.cc
    iodev/pit.h iodev/pit_wrap.cc iodev/pit_wrap.h iodev/sb16.cc
    iodev/sb16.h iodev/scancodes.cc iodev/scancodes.h
    iodev/serial.cc iodev/serial.h iodev/slowdown_timer.cc
    iodev/slowdown_timer.h iodev/unmapped.cc iodev/unmapped.h
    iodev/vga.cc iodev/vga.h memory/Makefile.in memory/memory.cc
    memory/memory.h memory/misc_mem.cc misc/bximage.c
    misc/niclist.c
Added Files:
    README-plugins extplugin.h ltdl.c ltdl.h ltdlconf.h.in
    ltmain.sh plugin.cc plugin.h
2002-10-24 21:07:56 +00:00
Bryce Denney
3fe65ab230 - enable dbg_fetch_mem and dbg_set_mem when compiling for GDB stub 2002-10-03 05:15:28 +00:00
Bryce Denney
4c9776fb96 - add -lwinmm to the link lines anytime you use --enable-sb16=win. Now
instead of winmm being a part of GUI_LINK_OPTS_WIN32 only, it is
  placed in @DEVICE_LINE_OPTS@ so that it will be used for sdl, rfb, wx,
  etc.
- solve compile problems when building bximage, niclist, and any other
  console based program.  The compile flags returned by wx-config and
  sdl-config did strange things to these console programs, for example
  redefining main to SDL_main.  Because I wanted to use the
  configure-generated CFLAGS to compile the programs, but I wanted to
  avoid including GUI specific compile options, I split up the configure's
  @CFLAGS@ variable into @CFLAGS@ and @GUI_CFLAGS@, and split
  @CXXFLAGS@ into @CXXFLAGS@ and @GUI_CXXFLAGS@.  All programs in the
  Bochs binary will use both, but the console programs will just use
  @CFLAGS@ or @CXXFLAGS@.
- gui/Makefile.in, I no longer use the gui specific CFLAGS variables,
  SDL_CFLAGS and WX_CXXFLAGS.  These values are included in CFLAGS and
  CXXFLAGS now.
- modified: configure.in, configure, all Makefile.in's
2002-10-01 23:37:50 +00:00
Kevin Lawton
b742ccec7e Changed eflags accessors for get_?F() to use (val32 & (1<<N)) instead
of (1 & (val32>>N)), and added a getB_?F() accessor for special
  cases which need a strict binary value (exactly 0 or 1).  Most
  code only needed a value for logical comparison.  I modified the
  special cases which do need a binary number for shifting and
  comparison between flags, to use the special getB_?F() accessor.

Cleaned up memory.cc functions a little, now that all accesses
  are within a single page.

Fixed a (not very likely encountered) bug in fetchdecode.cc (and
  fetchdecode64.cc) where a 2-byte opcode starting with a prefix
  starts at the last offset on a page.  There were no checks
  on the segment overrides for a boundary condition.  I added them.

The eflags enhancements added just a tiny bit of performance.
2002-09-22 18:22:24 +00:00
Jeroen Janssen
53723a8569 hopefully solved bugreport [ 612741 ] VBE mem conflicts w/ local APIC address 2002-09-22 11:31:48 +00:00
Kevin Lawton
0cd7346b9c - Added an instruction cache. Size is fixed for the moment,
but if you hand edit cpu/cpu.h, and change BxICacheEntries,
  you can try different sizes.  I'll make this more flexible
  with configure.  For now, use "--enable-icache" with no parameters.

- Modified fetchdecode.cc/fetchdecode64.cc just enough so that
  instructions which encode a direct address now use a memory
  resolution function which just sticks the immediate address
  into rm_addr.  With cached instructions we need this.
2002-09-19 19:17:20 +00:00
Bryce Denney
4e091e37ea - the constructors for BX_MEM_C did not always init vector and actual_vector
to NULL.  If actual_vector points to junk when alloc_vector_aligned
  is called, it will try to free the junk, leading to memory corruption
  or crashes.
2002-09-18 05:28:55 +00:00
Kevin Lawton
f0c9896964 Now, when you compile with --enable-guest2host-tlb, non-paged
mode uses the notion of the guest-to-host TLB.  This has the
benefit of allowing more uniform and streamlined acceleration
code in access.cc which does not have to check if CR0.PG
is set, eliminating a few instructions per guest access.
Shaved just a little off execution time, as expected.

Also, access_linear now breaks accesses which span two pages,
into two calls the the physical memory routines, when paging
is off, just like it always has for paging on.  Besides
being more uniform, this allows the physical memory access
routines to known the complete data item is contained
within a single physical page, and stop reapplying the
A20ADDR() macro to pointers as it increments them.
Perhaps things can be optimized a little more now there too...
I renamed the routines to {read,write}PhysicalPage() as
a reminder that these routines now operate on data
solely within one page.

I also added a little code so that the paging module is
notified when the A20 line is tweaked, so it can dump
whatever mappings it wants to.
2002-09-05 02:31:24 +00:00
Bryce Denney
7b157bbf43 - remove panic condition "memory not suitably aligned" and replace with
an allocation scheme that is guaranteed to return a block that is
  aligned correctly.
- Kevin asked me to go ahead and align the memory to 4k page boundaries,
  so I did.  If we need to change this, just change BX_MEM_VECTOR_ALIGN
  in memory/memory.h (now 4096).
2002-09-04 02:11:33 +00:00
Bryce Denney
31b30d562e - if ROM image could not be opened, we were doing a BX_INFO and then
a BX_EXIT.  I changed it to BX_PANIC followed by a return (just in case
  the user continues) to be more consistent with how everything else works.
2002-09-03 16:44:33 +00:00
Kevin Lawton
3d8e5f8b61 Removed the BX_FETCHDECODE_CACHE mods, and the patch that
Bryce created for use of ensuring all mods were removed
cleanly.
2002-09-01 23:02:36 +00:00
Kevin Lawton
3a5f338419 Integrated patches for:
- Paging code rehash.  You must now use --enable-4meg-pages to
    use 4Meg pages, with the default of disabled, since we don't well
    support 4Meg pages yet.  Paging table walks model a real CPU
    more closely now, and I fixed some bugs in the old logic.
  - Segment check redundancy elimination.  After a segment is loaded,
    reads and writes are marked when a segment type check succeeds, and
    they are skipped thereafter, when possible.
  - Repeated IO and memory string copy acceleration.  Only some variants
    of instructions are available on all platforms, word and dword
    variants only on x86 for the moment due to alignment and endian issues.
    This is compiled in currently with no option - I should add a configure
    option.
  - Added a guest linear address to host TLB.  Actually, I just stick
    the host address (mem.vector[addr] address) in the upper 29 bits
    of the field 'combined_access' since they are unused.  Convenient
    for now.  I'm only storing page frame addresses.  This was the
    simplest for of such a TLB.  We can likely enhance this.  Also,
    I only accelerated the normal read/write routines in access.cc.
    Could also modify the read-modify-write versions too.  You must
    use --enable-guest2host-tlb, to try this out.  Currently speeds
    up Win95 boot time by about 3.5% for me.  More ground to cover...
  - Minor mods to CPUI/MOV_CdRd for CMOV.
  - Integrated enhancements from Volker to getHostMemAddr() for PCI
    being enabled.
2002-09-01 20:12:09 +00:00
Volker Ruppert
e1d8d30e4c - meaning of the memory type values changed (0 = ROM, 1 = Shadow RAM)
- the functions mapRead() and mapWrite() are no longer necessary
2002-08-31 15:35:51 +00:00
Volker Ruppert
38666a2cfb - PCI memory handling moved to bx_mem_c
* shadow RAM array and fetch function are now a part of the memory code
  * removed unnecessary PCI macros and functions load_ROM() and mem_read()
2002-08-31 12:24:41 +00:00
Volker Ruppert
86969b7892 - macro BX_PCI_MEM_READ() must be used in function dbg_fetch_mem() too 2002-08-18 08:53:26 +00:00
Volker Ruppert
18dc3833a9 - reverted a change in the 'else' section of the load_ROM() function 2002-08-17 09:46:27 +00:00
Volker Ruppert
46093f8a88 - i440fx structure is now a private member of bx_pci_c
- PCI configuration space of the host bridge renamed from array[] to pci_conf[]
- new functions load_ROM() and mem_read() for ROM access
- macros for PCI functions defined in bochs.h
2002-08-17 09:23:42 +00:00
Mike Lerwill
b941089156 Minor change to allow load to be called with an empty path (and do nothing) 2002-07-03 17:13:29 +00:00
Gregory Alexander
5d7c6627fd I botched the linked list implementation pretty badly.
Kudos to TLD for fixing it for me.
2002-06-06 23:03:09 +00:00
Gregory Alexander
1be5b1d46c Added a linked list to further speed up icache invalidates.
These should be pretty snappy now.  It's time to generate
some actual statistics.

 Modified Files:
 	cpu/cpu.cc cpu/cpu.h cpu/init.cc memory/memory.cc
2002-06-05 21:51:30 +00:00
Gregory Alexander
c41505e342 Added a RPN directory for the cache to help make invalidates
faster.  Hopefully this won't slow things down too much.

 	config.h.in cpu/cpu.cc cpu/cpu.h memory/memory.cc
2002-06-05 03:59:31 +00:00
Gregory Alexander
fda1b874e9 Check in FETCHDECODE Caching, with changes.
Specific changes from the patch:

1.) renamed fdcache_eip to fdcache_ip, as it is using
the RIP instead of the EIP.

2.) added a Boolean array fdcache_is32 which uses is32
to determine icache hits.  Otherwise we could run 32-bit
code as 16-bit or vice versa.


 Modified Files:
 	config.h.in cpu/cpu.cc cpu/cpu.h memory/memory.cc
2002-06-03 22:39:11 +00:00
Bryce Denney
30aaf4088e - commit patch.wxwindows.gz in the main branch. Now you can try out
the wxwindows interface by just "configure --with-wx; make"

  Modified Files:
    Makefile.in bochs.h config.h.in configure configure.in
    load32bitOShack.cc logio.cc main.cc cpu/cpu.cc cpu/cpu.h
    debug/dbg_main.cc gui/Makefile.in gui/control.cc gui/gui.cc
    gui/siminterface.cc gui/siminterface.h gui/x.cc iodev/cdrom.cc
    iodev/keyboard.cc memory/misc_mem.cc
  Added Files:
    README-wxWindows wxbochs.rc gui/wx.cc gui/wxmain.cc
    gui/wxmain.h gui/bitmaps/cdromd.xpm
    gui/bitmaps/configbutton.xpm gui/bitmaps/copy.xpm
    gui/bitmaps/floppya.xpm gui/bitmaps/floppyb.xpm
    gui/bitmaps/mouse.xpm gui/bitmaps/paste.xpm
    gui/bitmaps/power.xpm gui/bitmaps/reset.xpm
    gui/bitmaps/snapshot.xpm
  Removed Files:
    patches/patch.wxwindows.gz
2002-04-18 00:22:20 +00:00
Bryce Denney
dcc6df2f1e - fixed several instances where we had "delete array" but we needed
"delete [] array".  This led to memory leaks.  Thanks, valgrind.
2002-04-09 20:12:39 +00:00
Jeroen Janssen
8cfa8a3bba - applying patches/patch.vbe-lfb to bochs cvs tree 2002-04-03 16:48:15 +00:00