ftp://ftp.Plex86.org/pub/plex86/plex86-2000_0605b.tar.gz
I don't want to commit all this to CVS yet, until I get
a chance to clean some things up etc. But I thought
it would be useful to have people test my latest code mods,
and get back in the loop. Keep in mind I only tested this
with the cooperative guest. And depending on what version
of the compiler you use, the code generated for that cooperative
kernel, may be different, and thus may hit instructions I
have not yet implemented.
-Kevin
Here's from the Changelog, which I forgot to update until now:
- "Kevin P. Lawton" <[EMAIL PROTECTED]>: (plex86-2000_0605b:)
Added monitor log facility to use (printk like) to print
debug messages in either host or monitor space. Text
is redirected to the host kernel print facility.
Changed nexus functions to switch from host<-->monitor,
rather than host<-->guest. This gives us flexibility to
return to monitor code anywhere, including in the middle
of emulating an instruction.
Moved some fields out of nexus. Only data needed to
transition between host<-->monitor/guest context should be
in nexus. All other fields are easily accessible from either
space and should be in VM structure proper.
kernel/emulation.c now uses same fetchdecode function as
prescan code.
Totally recoded emulation.c, and split out emulation of
many functions into *.c files, which strangely mirror
the names of files in bochs. :^) Sorry, this helped
me keep things straight.
Added segmentation protection checks to data accesses,
control transfers, etc, in instruction emulation.
Added much protection model framework to instruction
emulation.
Paged guests are not supported yet, though much of the
new framework has been thought out with that in mind.
Likely only the cooperative guest works so far, as that's
the only one I've been working with, and I implemented
just enough to get it going.
Changed the user<-->host<-->monitor interface. The user
code does not participate in the emulation of instructions
any more, except to serve IO and other hardware requests.
SBE (Scan Before Execute = Prescan) logic is now an integral
part of plex86. In fact, both ring0 and ring3 code are
currently always controlled by SBE. Much thought went into
structuring the code, so that we can make a dynamic decision
to switch SBE off when running ring3 code, yet the emulation
functions will still work.
Lots of other doings...
NOTE: Things should and do run a _lot_ slower for the moment,
as everything is being controlled by SBE, and I'm not doing
some things very optimally. Things will speed up greatly
in the future.