* 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.
- function userbutton_handler(): stop parsing the shortcut string if the
key name is invalid
- function userbutton_handler(): incrementing variable 'len' simplified
- function snapshot_checker(): fixed a warning
> CPU_ID is defined as
> #define CPU_ID (BX_CPU_THIS_PTR local_apic.get_id())
> This is not true when the APIC name is changed (true in Linux). Please
> change this to:
> #define CPU_ID (BX_CPU_THIS - BX_CPU(0))
and improved by Christophe Bothamy and Volker Ruppert)
Comment from the author:
Attached is a "patch" file detailing what you need to do
to add USB support (UHCI only for now) to your existing
Bochs (2.0.xx) source code.
I use Win32 and VC++ but the source and modifications
should be platform and compiler independant.
Please let me know if this patch some how breaks the
build process of your compilation (Bochs 2.0.0 or above
only).
I would also like any feedback on how this code works
(or doesn't work) on your platform and within your
images. If you explain in as much detail as you can on
how it did or did not work, I will try to add to the source
to help it work on all platforms and images.
- 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
- new symbol BX_USE_PCIVGA_SMF for the experimental PCI VGA device
- pcivga.cc: removed unnecessary include statement
- pcivga.cc: fixed two warnings
- pcivga.h: removed unnecessary symbol BX_IODEV_PCIVGA_H
From the author:
I've implemented functions ALOb(), ObAL(), YbAL(),
ALXb() and eAXXv() from dis_groups.cc.
I've also changed dis_decode.cc to print cmpsd if code
is 32 bits and cmpsw if code is 16 bits. The same with
stosd, lodsd and scasd.
appears with the right dimensions. Font sizes other than 16 are working now.
The maximum font height in text mode is 32.
- the text mode cursor is now drawn with the right colors
The 64 bit variant of MOVNTI was not decoded. The proper fix for this is to work on
fetchdecode64.cc to call a 64 bit variant of SSE instructions or fail it with a
invalid op. A careful check needs to be done with the AMD manuals to determine if
there are any other SSE instructions that have a special 64 bit decoding.
into the host-specific files and wrapped access to them
with atomic operations since that's a structure global to
all the VMs. I think all the other globals are SMP clean
since they are only written once during module init time,
and read thereafter my all VMs.
Renamed all host OS specific functions to hostOS*(). All host
independent functions to host*().
I'd like to rename all monitor space functions to mon*() next.
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/).
all the memory it needs, and the plex86 kernel module uses
get_user_pages() from the Linux kernel to get at them and
pin the few that are needed statically (and later up to
a watermark of pages that are needed dynamically).
Guest physical memory pages are now dynamically pinned/unpinned.
For now, I use a hard limit of 4Megs of pinned pages and
a really primitive algorithm to decide which one to unpin
when the limit is reached and one needs to be bumped. Seems
to work. Though I haven't run into the limit yet since I'm using
just a small test program.
and pinning user pages from the plex86 kernel module. The
guest physical memory array is no longer mmap()'d from kernel
space where it used to be allocated.
in the plex86 module and mmap()'ing it into user space (bochs),
to letting bochs malloc() it normally and using the
Linux kernel facility get_user_pages() to get the associated
physical pages and pin them in memory. I only have code for
Linux kernel 2.4.20 and up, as that's the first version to
export the get_user_pages() symbol so modules can use it.