panel. It gives the user the option of continue this time, continue
and never ask again for this type of log message, or die.
- the communication between control.cc and siminterface.cc is still
somewhat crude. I'm trying to implement it so that a network
protocol based on this interface will be simple. I'll get this cleaned
up soon.
BX_USE_CONTROL_PANEL is set. I put the #if...#endif thing around
the entire file in siminterface.cc and control.cc so that it's safe
to compile them in either case.
writes a bochsrc for you.
- since there were two options related to logging, I moved them both
into a new struct called bx_log_options. This follows the pattern
used by other devices.
- in control.cc: removed option 1 from main menu, the one that said
"Read options from bochsrc.txt." This was identical to choosing
the next option, "Read options from..." and only saved you one
keystroke, so I removed it.
an fpos_t, use ftell which returns an int. Without the patch,
Bochs gets an fpos_t and assumes it is an integer type, but
on some systems (like linux with newer glibc libraries) this
assumption is wrong. Malte Cornils <malte@cornils.net> first
reported this bug, and he warned me that ftell may not be portable
to some platforms which treat binary and ascii streams differently.
I haven't found any alternative yet.
gui/control.cc and the simulator. Now all communication between
the control panel and the rest of bochs goes through an object
called bx_simulator_interface_c.
[ #430472 ] DOS HIMEM "A20 line" error
All I've done is moved the call to print_bios_banner later in the
boot process, and the A20 problem goes away. I wanted it early so
that it would get printed before any panic or halt could happen.
Oh well.
- remove --enable-external-cpu-memory
- Neither of these options were compiling anymore, and Kevin suggested:
> My advice would be to scrap both of these options. I hadn't used
> those in some time. The way to implement 'external' devices
> would be via a modular plugin architecture, which both bochs
> and plex86 should implement.
by BCC generated data. This was pointed out by Tom Lindström
<tom@debet.shh.fi>, and I took his suggestion of moving the MP structures
to the end of the file.
I don't have to list them, and also apparantly fixes a mysterious problem
which occurred when Anders Nielsen was trying to build the RPM for
PPC: his rpm appears to gzip the man pages automatically, and then
complains that /usr/man/man1/bochs.1 is not found!
- start using autoconf/configure's standard of prefix, exec_prefix, bindir,
mandir to control where make install puts things
- added script install-x11-fonts
- make install no longer tries to install DLXlinux (since not everyone will
want it). Now you must do make install_dlx if you want it.
- renamed erase_install to uninstall
- in RPM spec file:
- run .conf.linux instead of .conf.linux-x86. This is just a name change.
- build directory hierarchy in the buildroot
- patch up broken symbolic links in buildroot (ugly)
- run font install script in %post
- clean up dlxlinux directory in %preun to avoid warning about not
removing /usr/local/bochs/dlxlinux/bochsout.txt
- remove /usr/local/bochs if nothing left in it
BX_CPU_C bx_cpu;
BX_MEM_C bx_mem;
and when more than one processor, use
BX_CPU_C *bx_cpu_array[BX_SMP_PROCESSORS];
BX_MEM_C *bx_mem_array[BX_ADDRESS_SPACES];
The changeover is controlled by BX_SMP_PROCESSORS, but there are only
a few code changes since nearly all code uses the BX_CPU(n) and BX_MEM(n)
macros.
- This turns out to make a 10% speed difference! With this revision,
the CVS version now gets 95% of the performance of the 3/25/2000
snapshot, which I've been using as my baseline.
is the first attempt to regain the performance of pre-SMP bochs
(1.1.2). When simulating only one processor, stay in cpu_loop forever
as pre-SMP versions did. The overhead of returning from cpu_loop over
and over was slowing us down.
- all bochsrc option names changed to lower case, since the uppercase
versions will not be recognized.
- BIOS is now named BIOS-bochs-latest instead of by date.
patch.linux-mouse can be applied to current CVS
patch.linux-mouse-for-1.1.2 is what Robb sent originally, which can
be applied to version 1.1.2 (bugfix3)
removed unused variables, initialized things that I had missed before,
added a missing arg to sprintf, and a return at the end of int main.
That's all.
- now the HALT macro in rombios.c writes to panic port but does not actually
execute a "hlt" instruction. This allows the .bochsrc to control
whether the BIOS panic is fatal or not.
His change log says:
- Makefile simplified - no longer uses tools86, dataseghack or ld86.
Also enables warnings (-w-) and checks for undefined labels (-u-).
- Macros used in place of multi-line #defines (so !!! conversion by
tools86 not needed).
- HALT() fixed [previously used ';' instead of '!!!']. Needs port 400 to
be added to iodev to be useful?
- isru removed - doesn't seem to be needed now.
- added UDIV16 (for use by bios_printf).
- bios_printf %d implemented.
- set_enable_a20 changed to use PS2 method, since bochs emulates this.
- Keyboard intercept (int 15h/42h) fixed - should set CF, not assume that
caller already has. [The DOS keyb driver for example doesn't!]
- Memory is scanned from C000 to F4000 for extension ROMs - this
picks up VGA BIOS as before, and allows others to be included.
- Comments improved for bios config table, and bit indicating RTC
present is now set.
- Int 9 (keyboard) now calls Int 15h/42h for key releases too.
[Again, this is what the DOS keyb driver does.]
tries to fix it. The shortcuts to register names such as AX and DL are
#defines in cpu/cpu.h, and they are defined in terms of BX_CPU_THIS_PTR.
When BX_USE_CPU_SMF=1, this works fine. (This is what bochs used for
a long time, and nobody used the SMF=0 mode at all.) To make SMP bochs
work, I had to get SMF=0 mode working for the CPU so that there could
be an array of cpus.
When SMF=0 for the CPU, BX_CPU_THIS_PTR is defined to be "this->" which
only works within methods of BX_CPU_C. Code outside of BX_CPU_C must
reference BX_CPU(num) instead.
- to try to enforce the correct use of AL/AX/DL/etc. shortcuts, they are
now only #defined when "NEED_CPU_REG_SHORTCUTS" is #defined. This is
only done in the cpu/*.cc code.
in BRANCH-smp-bochs revisions.
- The general task was to make multiple CPU's which communicate
through their APICs. So instead of BX_CPU and BX_MEM, we now have
BX_CPU(x) and BX_MEM(y). For an SMP simulation you have several
processors in a shared memory space, so there might be processors
BX_CPU(0..3) but only one memory space BX_MEM(0). For cosimulation,
you could have BX_CPU(0) with BX_MEM(0), then BX_CPU(1) with
BX_MEM(1). WARNING: Cosimulation is almost certainly broken by the
SMP changes.
- to simulate multiple CPUs, you have to give each CPU time to execute
in turn. This is currently implemented using debugger guards. The
cpu loop steps one CPU for a few instructions, then steps the
next CPU for a few instructions, etc.
- there is some limited support in the debugger for two CPUs, for
example printing information from each CPU when single stepping.
- change Makefile.in to "cvs-snapshot" information rather than printing
the release number, since in fact it's not the same as the release anymore
- use #defines to give the actions names (ACT_IGNORE, ACT_REPORT, ACT_FATAL)
- register all logfunctions as they call setio, and keep a list so that
we can change their settings more easily. I admit I used a static-sized
array to store them. Sorry.
- instead of printing a prefix [GEN ] for generic messages, just leave the
prefix blank [ ]. Otherwise you start wondering what does gen stand
for.
- avoid reentry into fatal, since fatal can call BX_INFO and friends.
This avoids a potential infinite recursion.
- now that files other than .bochsrc can be the rc file, print the
actual name of the file in error messages.
what action to take on panic, error, info, and debug. The lines don't
have any effect quite yet because of an initialization order problem
with the logfunctions.
support LBA. This builds okay, but I want to find a way to actually see that
it's making some difference before committing it. Anyway have an OS or
diagnostic program that tests if LBA is in use? What would LBA allow me to
do that I can't do without it, so that a test can be done?
sourceforge patch #423726. He writes:
> you'll find as attachment a little patch which make
> bochs support the double fault. currently, when 2 pages
> fault occur, bochs does not generate a double fault (as
> the Intel documentation says) but do
> generate a other page fault, which make a triple fault,
> and bochs will exit.
>
> this very little patch make bochs support this double
> fault, which is
> used in our OS in order to dynamically increse kernel
> level stacks.
To see the commit logs for this use either cvsweb or
cvs update -r BRANCH-io-cleanup and then 'cvs log' the various files.
In general this provides a generic interface for logging.
logfunctions:: is a class that is inherited by some classes, and also
. allocated as a standalone global called 'genlog'. All logging uses
. one of the ::info(), ::error(), ::ldebug(), ::panic() methods of this
. class through 'BX_INFO(), BX_ERROR(), BX_DEBUG(), BX_PANIC()' macros
. respectively.
.
. An example usage:
. BX_INFO(("Hello, World!\n"));
iofunctions:: is a class that is allocated once by default, and assigned
as the iofunction of each logfunctions instance. It is this class that
maintains the file descriptor and other output related code, at this
point using vfprintf(). At some future point, someone may choose to
write a gui 'console' for bochs to which messages would be redirected
simply by assigning a different iofunction class to the various logfunctions
objects.
More cleanup is coming, but this works for now. If you want to see alot
of debugging output, in main.cc, change onoff[LOGLEV_DEBUG]=0 to =1.
Comments, bugs, flames, to me: todd@fries.net
to plex86 on 5/14/2001 and said that it was okay:
> Yes, thanks to MandrakeSoft, the Elpin VGA BIOS 2.40 was licensed
> for use in _both_ plex86 and bochs. So you can distribute 2.40.
>
> Replace the text in 'bios/VGABIOS-elpin-LICENSE', with the
> same file from the plex86 CVS tree. Substitute bochs wherever
> plex86 occurs.
compile warnings with or without it on Linux, so it seems no longer
necessary. It may have been introduced to cope with the fabs symbol
conflict, which was already removed in rev1.3 of fpu_etc.c.