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.
- add int75_handler, for msdos compatbility fpu exception
This handler calls int 2 (nmi). The NMI handler should really be aware
of this and should iret in case of FPU exception (to be implemented)
a region of virtual memory. Now the same one works for getting
the pages of the kernel driver and memory objects allocated via
vmalloc().
Converted to using Linux interfaces to walk the page tables to
get at the physical memory addresses above. The old code was
digging up this info starting with looking at CR3. Linux has
functions/macros to do this, which can handle 2/3-level cases.
Wrapped the page table walk with proper locks. A spin lock
for new Linuxes, a big kernel lock for old ones.
- implementation of the UIP bit using a new timer handler. The one_second_timer()
function only sets the UIP bit and starts the UIP timer. The uip_timer()
function handles the date / time update, the alarm check and finally clears
the UIP bit.
- writing to control register A doesn't change the UIP bit
Here are comments from the anonymous patch author :
I found bug when using the FPU in 16 bit protected
mode. When using the fsave command the 32bit
structures were used instead of the 16bit ones.
It now distinguishes between 16 and 32 bit protected mode
which wasn't the case before.
Now Ultima8 runs fine:)
new experimental stripped-down version of plex86, which is now
a user-code-only VM. I ripped out all the fancy stuff in plex86,
such that under that right conditions, user-code (protection level 3)
can run at near native speeds inside the plex86 VM.
The general idea is that bochs emulates all the initial real-mode code,
and guest kernel code (protection level 0). When it senses the
right conditions (like the context switches to user-code), a shim
is called to execute the guest inside the plex86 VM. All guest-generated
faults/exceptions are then forwarded back to bochs to be handled in
the emulator.
Actually, I'm not yet adding the mods to the bochs code (other than
the shim code which is in a separate file), until I hear that we're
back in a more development mode with bochs after the 2.0 release.
The plex86 subdirectory is really a separate project. It's just more
convenient to co-develop it with bochs for now. Both projects are
currently LGPL, but each should be taken to be a separate project,
and have their own license file. Plex86 (it's only a kernel driver
now) could ultimately be used with other projects, as it's modular.
I talked with Bryce, and we both agreed it's OK to keep plex86 as
a subdir in bochs for now.
PSRAW_PqQq (MMX)
PSRAD_PqQq (MMX)
PSRAW_PqIb (MMX)
PSRAD_PqIb (MMX)
PSRAW_VdqWdq (SSE)
PSRAD_VdqWdq (SSE)
PSRAW_PdqIb (SSE)
PSRAD_PdqIb (SSE)
When register was shifted by 0 bits the result produced was incorrect.
Now Bochs fully passes MMX test provided by
Hentai Yagi [hentai_yagi@yahoo.com.au] !
the icon problem on Win2000. RegisterClassEx() would be required if we want
to specify a special mini icon.
- the win32 gui now uses the new function/macro DEV_vga_actl_pal_idx() to
determine the text mode colors.
palette - it's an index to the attribute controller palette index.
The new function get_actl_palette_idx() now returns the real DAC index.
The guis sdl, wx and x11 are using the new function. TODO: Fix this bug in
all other guis.
- FAQ - sound question: added FreeBSD to the list of supported platforms
- list of configure shortcut files updated
- compiling footnote: file locations updated
- replaced reference to sound.html (old docs) by a reference to the
"sb16-emulation" section
- compiling instructions for BeOS updated
- keyboard mapping: supported guis added
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.
- move configure options section right after Standard Compile. It
was buried at the end of the section and hard to find before.
- fix section issue for sb16
- fix typo in pit description
- fix some FIXMEs
- move documentation section to the top
- move wxWindows after config interface and display library sections
- remove the massive list of SF bugs,features,etc. since they have
(mostly) been covered above
- erase to-do list since it's done