running on a 32 bit host. The problem was that the FPU code uses native pointers to
represent addresses. The assumption that an emulated address is the same size as a
native pointer breaks down when emulating 64 bit addresses on a 32 bit host. The
patch replaces the occurrences of such an address with a bx_address type.
Once this patch has been reviewed by other developers, it will be committed to the
main cvs branch.
* 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);
It uses special gcc attribute regparm, available on gcc3.2 on x86.
I get about 7% increase when booting windows 95.
The patch still need some integration work before being included
in the main code.
- added "ioaddr" and "irq" to the "usb1" bochsrc option
- number of ports is limited to 2 for a USB UHCI root hub
- the PCI configuration space is now a part of the usb hub structure
bablokb says in [ 664926 ]
please remove the patch patches/patch.bochs.sh. This
patch was developed for 1.4.x and does not work
anymore with 2.0.x.
It has been superseded by bxtstart in Bochs-Tools (see
http://www.bablokb.de/bochs-tools/).
the current code page's mode. It was &'ing against fetchModeMask:
((pageWriteStamp & fetchModeMask) == fetchModeMask)
instead of against a constant mask which populates all the
relevant bits:
((pageWriteStamp & ICacheFetchModeMask) == fetchModeMask)
* Moved the check above to ::prefetch(), since nothing should change
between calls to that function. I added some code to functions
which load CS to make sure that is the case.
* Commented out several calls to invalidate_prefetch_q() in
ctrl_xfer{16,32,64}.cc. Changes to only EIP (i.e. CS is not
modified) don't matter any more. If EIP lands outside the
window of the current code page, ::prefetch() is called.
* These changes add a few percent of performance.