done by the object destructor (changes in cmos, hard drive and keyboard)
- bx_unload_plugins() now deletes the devmodel object in non-plugin mode
- CMOS device now prints the time on exit in human-readable format
(TODO: find a way to call plugin_fini() for non-core devices if plugins are
disabled)
- set the device pointers back to stubs after unloading plugins
- added debug message "Exit" in all device plugin destructors
- cmos image options renamed
- new cmos option controls the usage of the RTC values from image
- report time0 in use after handling the cmos image stuff
- MSVC warning fixed
- unsupported shutdown status values no longer cause a panic
- definition of BX_NUM_CMOS_REGS moved from config.h to cmos.h (TODO: get rid
of this and implement 128 registers)
- indent mode fixed in modified section
- 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
register values to a new timeval after date/time change. There is only a
BX_ERROR for now.
- added separate cases for the alarm time registers and a BX_DEBUG message that
reports the new alarm time.
Some devices already had one. Some I had to add an empty one.
I did a little cleaning of init() methods to make them more uniform
but generally I left them alone.
- I also put these exact diffs into a patch "patch.iodev-add-reset"
in case I want to revert these changes for some reason, for example
if they break an old patch. It should be deleted after a while.
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