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.
value be the application's directory, no matter where it gets
installed. This is consistent with installing the bioses and
keymaps/* into the same directory as bochs.app.
Authors: Br'fin, Bryce
- for MacOSX/Carbon, if you start the app by double clicking in the finder,
there is no text console. So in logfunctions::fatal(), display the
final message in a Carbon dialog instead of using fprintf.
- in the text-mode config interface, return an error code if the
user tries to use the text menus when there's no text console.
Back in bxmain() this error code causes a panic
"Bochs needed the text console, but it was not usable"
- if a config file was not found, normally we turn off quick start
and drop into the text menus. However in the no-console case the
text menus won't work, so we added a panic: Unable to start Bochs
without a bochsrc.txt and without a text console. This is a much
more useful error than the generic one above.
- removed ensure_text_console() which was making matters worse instead
of better.
Modified Files:
logio.cc main.cc gui/siminterface.cc gui/siminterface.h gui/textconfig.cc
completely ignored and Bochs has always been returning 0. Now Bochs should
exit with the proper exit code.
- implementation: BX_EXIT(exitcode) calls SIM->quit_sim(exitcode).
quit_sim stores the exit code in the SIM object, then uses longjmp
to unwind the stack and return to main(). main() calls
SIM->get_exit_code() to retrieve the exit code and returns it.
- If you are wondering why we don't just call exit(exitcode), it is
because in the wxWindows interface all of the CPU simulation runs as one
thread while the user interface runs as another thread. With the longjmp
technique the simulation thread ends cleanly and it is possible to
start a new simulation thread without making a new process.
be used for more things than just the BIOS. Also the keymaps need to
be located relative to the share path, and maybe other things like
graphics and icons, later.
eject, insert, eject, etc. several extra times before allowing you to
actually change the CD. The extra insert/eject cycles were coming from the
param handlers for cdrom status and for the cdrom pathname. To fix this, I
changed wxdialog.cc and textconfig.cc to only call set() on parameters if
they are different from the original value. Now it generally does what you
would expect.
- to change physical CD: change the Bochs CD status to "ejected". On some OSes
that will actually eject it, but on others it will simply close the file so
that the eject button will actually work. Then put the new CD into the
drive, and change the Bochs CD status to "inserted".
Modified Files:
main.cc gui/siminterface.cc gui/siminterface.h
gui/textconfig.cc gui/wxdialog.cc
This fixes bug #614724: SDL can get stuck in full-screen mode, and provides
a framework for fixing the problem on other full-screen display libraries
such as term, svga, etc.
- add virtual method bx_gui::set_display_mode(mode) which can be overridden
by each display library class, if appropriate. This method is primarily
used when you run Bochs full screen, to tell the gui to switch from full
screen back to a mode where you can use the text console.
- There are two display modes: config and simulation. The mode is changed to
config mode during logfunctions::ask, during the runtime configuration menu,
and before displaying a debugger prompt. It is changed back to simulation
mode whenever instructions are running.
- Instead of being called directly through the global bx_gui pointer, the
bx_gui_c::set_display_mode() method is almost always accessed through
siminterface, like this:
SIM->set_display_mode (DISP_MODE_CONFIG);
SIM->set_display_mode (DISP_MODE_SIM);
Of course siminterface just passes the call on to bx_gui::set_display_mode().
I added it to siminterface so that the config interfaces could call it.
(They don't #include bochs.h so they can't access bx_gui.)
Modified Files:
logio.cc main.cc debug/dbg_main.cc gui/gui.h gui/sdl.cc
gui/siminterface.cc gui/siminterface.h
there is one more option in the configuration file "debugger_log"
if the debugger is compiled in, all debugger output will be also
written to this file. Note: wxWindow config interface is not updated yet
- removed the code for changing the console screen buffer size
- BUG: the gui window receives all keypresses from the console when it gets back
the focus. We have eliminate all keypresses before the simulation continues.
Bryce wrote:
This untested patch shows how and where to call RedirectIOToConsole() when
compiling with SDL on win32. I believe this, or something like it, will
fix the problem of having no console window on SDL.
- enable RedirectIOToConsole() when compiling with SDL on win32, so that
it can be called in main().
- move main() down below the definition of RedirectIOToConsole(), and
add a call to RedirectIOToConsole()
- in WinMain, Bochs always asked the user to press ENTER before exiting.
I moved that code to main() with #ifdef WIN32...#endif around it.
(Maybe this should only be done when Bochs explictly creates a console
window, though.)
- if BXBIOS is not defined, set it to a default value that is produced
in the makefile. This allows us to make disk image TAR packages that
look for the bios images in the $BXBIOS directory. These packages
will be able find the current images for future Bochs versions, without
any modifications.
text config interface. This function does not have any contents yet...
the contents need to be filled in for those platforms which sometimes
have no stdin/stdout. The default case, in which stdin/stdout is
usable, is to just return. But if stdin/stdout is NOT usable, this
function should display a warning dialog and quit.
add SVGALIB display library by Igor Popik <igipop@wsfiz.edu.pl>
While it's running, you can press F12 to escape into the runtime config
menu, and then you can change disks or quit or whatever.
Better not try it with the bochs debugger...you could get stuck.
Modified Files:
Makefile.in config.h.in configure configure.in main.cc
plugin.h gui/Makefile.in
Added Files:
gui/svga.cc
Removed Files:
patches/patch.svgalib-gui patches/patch.svgalib-gui-f12
Before when the debugger was enabled, the update function was called
before hardware init leading to a panic.
Modified Files:
main.cc debug/dbg_main.cc
- configure script adds -DBX_PLUGIN_PATH="${plugdir}" to CFLAGS/CXXFLAGS
in the Makefile.
- in main.cc, if plugins enabled and the environment variable LTDL_LIBRARY_PATH
is not set, then it gets set to the value supplied by BX_PLUGIN_PATH.
Modified Files:
main.cc Makefile.in configure.in config.h.in configure
- argc was returning the wrong number of args. Now I treat null and space
the same way, except that null causes the loop to exit.
- change "extern "C" int WinMain" to "int WINAPI WinMain".
- in WinMain pause for the user to read the screen before making it disappear.
This is very useful when there was an error during startup because otherwise
you can't read it. However we'll probably want to disable it when the
user actually asked for Bochs to quit.
it's easier to find. The other one is for wxWindows on win32 only.
- for wxWindows on win32, I added a function called RedirectIOToConsole() from
an article in the Windows Developers Journal that creates a console window
and sets up stdin,stdout,stderr to operate on the console. This works,
except for a console freezing problem that I described on the mailing list
earlier today.
- Once it is working better, we may want to use the WinMain definition for
other types of compiles on win32, and maybe even for all win32 compiles. In
particular when we compile with SDL we should create a console window too.
- comment out some debug output from the command line parser, add \n's in
a few places. (I'm using stderr instead of BX_PANIC because I don't think
the logging system is ready to be used at this early stage.)
the bochsrc is loaded by default.
- if you asked for quick start, but the config file could not be loaded,
print a warning "Switching off quick start, because no configuration file
was found".
- now the behavior looks like this:
. no command line arg (most common)
-> .bochsrc is loaded
-> if found defaults to "5. Begin simulation"
-> if not found defaults to "2. Read options from..."
. command line arg -q (user want to quick start from .bochsrc)
-> .bochsrc is loaded
-> if found, run the simulation
-> if not found defaults to "2. Read options from..."
. command line arg -f (user specifies which conf file to load)
-> conf file is loaded
-> if found defaults to "5. Begin simulation"
-> if not found, print error message on console:
>>PANIC<< reading from bochsrc2.txt failed
. command line arg -qf (user want to quick start from a conf file)
-> conf file is loaded
-> if found, run the simulation
-> if not found, print error message on console:
>>PANIC<< reading from other failed
. after selection of "2. Read options from..."
-> defaults to "5. Begin simulation"
. if user wants to create a new conf file:
-> run bochs with no args
-> .bochsrc is loaded by default
-> choose 1. Restore factory default configuration
-> default is changed to "3. Edit options"
- See bug #625696 "text config menu: default can be wrong" for
more discussion of this issue.
. if BX_GUI_SIGHANDLER is true and the term gui is selected at run time,
a new global boolean (bx_gui_sighandler) variable is set to true.
Special signal handling is done if bx_gui_sighandler is true.
. if BX_GUI_SIGHANDLER is not true, bx_gui_sighandler is not compiled in.
New behaviour is:
. No command line arg (user want to load or create a new conf file)
-> no .bochsrc is loaded
-> defaults to "2. Read options from..."
. command line arg -q (user want to quick start from .bochsrc)
-> .bochsrc is loaded
-> if found Run the simulation
-> if not found defaults to "2. Read options from..."
. command line arg -f (user want to edit a conf file)
-> conf file is loaded
-> if found defaults to "3. Edit options"
-> if not found defaults to "2. Read options from..."
. command line arg -qf (user want to quick start from a conf file)
-> conf file is loaded
-> if found Run the simulation
-> if not found defaults to "2. Read options from..."
. After selection of "2. Read options from..."
-> defaults to "5. Begin simulation"
- fix "enable-control-panel" behaviour in configure.in.
- check if a romimage was supplied in the conf file.
If not, print a hint about a missing/corrupt conf file.
I hope I did not break anything, notably the Carbon gui