of the device specified in 'string'. Added register mechanism and chained
list to store the device name and pointer. Replace hardcoded debug info
implementations for pic, pci and vga by the new one.
- TODO #1: improve existing debug_dump() output and add more devices
- TODO #2: add support for additional arguments and replace the NE2k print_info()
- added new class bx_vgacore_c containing the core of the standard VGA
emulation. This is now the base class for both vga and cirrus.
- created 2 separate plugins 'vga' (for standard VGA and VBE) and 'svga_cirrus'
(Cirrus emulation). The vga extension option is used to select which plugin
should be loaded.
- TODO: move the pcivga code to the VGA/VBE code, add subdirectory for display
adapters, severak improvements and cleanups
- changed argument for the text mode info structure to a pointer
- added attribute controller palette to bx_vga_tminfo_t and removed the
previous implementation
- carbon.cc: attempt to fix the text mode colors (untested)
- x.cc: fixed warnings
- store memory type array in the memory object to avoid calling the pci plugin
frequently. The pci code calls a memory method to change the memory type in
case the PAM registers are modified.
- removed now obsolete code and minor cleanups
nearly all cases and plugins that depend on others. These plugins cannot be
managed with 'plugin_ctrl' (e.g. keyboard, harddrv, pci_ide). Store the plugin
type in the divice structure for compatiblity with the "no-plugin" compilation.
Call the device methods init(), reset() and after_restore_state() for each type
separately in the order: stanard, optional, user. This also affects the status
bar LED feature: now the keyboard and harddrv LEDs are always visible, but
those of optional plugins may be invisible if there is no space left.
- TODO #1: add the devices 'ne2k' and 'sb16' to 'plugin_ctrl'
- TODO #2: manage core plugins with the device plugin system
directly while parsing the bochsrc or command line. If plugin support is enabled,
the option could load all optional plugins, not only the ones supported before.
NOTE #1: The old option had all plugins enabled by default and gave the user
a chance to diable them. Now the plugins are only loaded if they
appear in the config line and they are set to "1".
NOTE #2: Loading a plugin that is controlled by a bochsrc option is possible,
but it currently leads to a panic, since the load command is still
present in devices.cc.
NOTE #3: The plugin init code creates the device object and registers the
optional plugin device. As an option, it can create config parameters
and register an option parser. The device init, register state and
reset is still handled in devices.cc, but in the order the devices
have been loaded with the plugin control.
NOTE #4: If plugin support is disabled, the plugin control only accepts the
devices listed in plugin.cc.
- plugin init of core plugins now fails if they are not loaded with the expected
type. For core plugins the load order is important and they cannot be handled
with the chained devices list (used for optional and user plugins).
- some additions for calling config.cc functions from a plugin device
- added plugin unload function and improved load function
- use new function in bx_unload_plugins()
- new macro BX_UNREGISTER_DEVICE_DEVMODEL for future enhancements
turned off. Removed workaround code from devices.cc.
- removed 'pci_ide' plugin from the optional plugin control, since it depends
on the presence of 'pci' and 'harddrv'.
- define types for plugin init/fini functions
For now it returns a flag that indicated that the device can receive data
from the eth module and flags for the device speed. TODO: Use this callback
in the eth modules before sending data to the device.
- TODO: add save/restore support, use Bochs function for host to little endian
data conversion, timers of networking modules 'vnet' and 'slirp' should use
the device speed instead of fixed 10 MBit
and the supported ethernet modules
- renamed eth.* files to netmod.*
- pseudo-device plugin implementation similar to 'soundmod'
- TODO: move sound, net and usb stuff to a separate subdirectory of iodev
duplicate log prefixes on Windows if both IDE and USB cdroms are used in plugin mode. Windows also
requires the cdrom base class and the init_cdrom() method to link and work correctly.
support compiles and links fine and the main object files for the plugin DLLs
are created. Since the gui and iodev makefiles are not ready yet, the link
stage must be done manually. Support for the search path defined in
LTDL_LIBRARY_PATH should be added when the DLL plugins compile and work.
* moved runtime handlers for cdrom from config.cc to the device object
* cd media status variable is now always of type bx_bool
* changed obsolete gui names like "cdromD" to "cdrom1"
* TODO: implement new runtime config mechanism similar to USB
DAC2 is sent to the lowlevel sound module. DAC1 and sound input (ADC) are not
yet supported. Also unsupported: CODEC (mixer), UART (MIDI) and legacy support.
Sound module selection in configure script now no longer depends on SB16 and
uses autodetection only.
- fixed segfault when saving bochsrc
* added new "pseudo device" for the USB device control (init, send message)
* moved register_state() call from the hubs to the common device init code
- fixed unresolved symbols in usb_msd code
code and the generic USB stuff. Up to now, in plugin mode each host controller
staticly links all this stuff with the plugin library. So it existed twice and
e.g. it wasn't possible to create a unique serial number for disks/cdroms
connected to different HCs. Some other sanity checks could be added now, too.
- Added a register mechanism for the USB device init function in the main
devices code.
- TODO: Some other device plugins could be fixed the same way: network devices
(sharing ethernet modules), harddrive & usb_msd (sharing hdimage and
cdrom)
the SF patch #1539417, but rewritten from scratch (patch too old). Differences
to the original version:
* internal parameter name "readonly"
* update parameter if floppy image is readonly
* wxWidgets support
* documentation updates
* no specific toolbar buttons
keyboard and usb_hid code to use them
- removed keyboard handling from the USB host controller code
- removed no longer needed USB stubs from the devices code
- converted removable mouse variables to a structure
by Ben Lunt will be tested and merged soon)
- renamed specific pciusb stuff to 'usb_uhci' (files, objects)
- minor USB-related changes
- TODO: changes in siminterface and bochsrc options
* initialize plugin system before parsing bochsrc and command line
* pass previous value to bx_param_string_c handler
* load / unload plugin in bx_param_string_handler()
* handle user plugins after optional ones in plugin device init, reset and
save/restore functions
* added new siminterface method unregister_user_option()
* removed first version of config option handling for user plugins
* added new parameter subtree for user-defined options
* added new bx_list_c method remove()
* removed unused bx_devmodel_c method init_mem()
* the "init" and "fini" functions of different user plugins can always have
the same name (tested on Linux and Windows)
* make sure that a plugin cannot be loaded twice
* fixed check for the presence of the "fini" function
* TODO: configuration and load mechanism for user plugins
Make save/restore default feature, the configure option for save/restore removed from configure script and save/restore made available forever. All code now assume it is exists. Bochs save/restore tree previosly called "save_restore" renamed to "bochs" tree and it will be havily used everywhere, starting from save/restore and ending by various bochs debugger functions. I am going to rework debugger code to get rid of debug CPU access functions and use this "bochs" param tree instead
The connection status is now only controlled by the USB port options (TODO:
device change support at runtime)
- a connected USB mouse now has the priority when sending mouse data from the
gui to the emulated mouse device.
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
- added exit() method to the devmodel object for devices that need to do special
cleanups on exit. Device plugins should call this method from their plugin_fini()
function. If Bochs is compiled without plugin support, for non-core plugins
the exit() method is called directly from bx_unload_plugins().
- exit() method implemented in the keyboard device
- wx "Show Keyboard" feature now only appear when the wxdebug keyboard subtree
is not empty
- cpu cleanup must be done before the devices cleanup
- moved PCI chipset dump call to the devices exit method
* register_state() will be called after init() and registers the device members
required for save/restore
* before_save_state() can do some work before the device state is saved by the
siminterface
* after_restore_state() can do some work after the device state has been
restored (updating dependant stuff)
- BM-DMA base address set to 0xc000 at reset (shoud be done by the PCI BIOS)
- BM-DMA status register write messages changed to BX_DEBUG
- fixed an MSVC warning in the harddrive code
#1079240 by Ben Lunt. There are still some problems:
- PS/2 mouse is always present (some code to emulate a disconnected mouse needed)
- PS/2 wheel mouse doesn't work properly
- serial wheel mouse detected as a standard mouse and doesn't work at all
* up to 5 slots can be specified with the 'i440fxsupport' config option
* the pci slot number are hardwired to pci device numbers
* the 'devfunc' value is returned the calling device (useful for multi-function
devices)
* the core of the i440FX chipset is hardwired to pci device 1 + 2; usb is still
optional and appears at device 1, function 2
- ne2k: enable pci features if connected to a pci slot
- ne2k: asic data port supports 32-bit access if ne2k-pci is active
- pci2isa: improved error messages for ELCR1 and ELCR2
Unallowed cases are now handled in devices.cc and cause a BX_ERROR.
- io_len mask fixed and unnecessary io_len checks removed in
* devices.cc
* extfpuirq.cc
* gameport.cc
* ne2k.cc
* pit.cc
* pit_wrap.cc (i/o register function calls replaced by DEV_* macro calls)
- TODO: implement this in all other devices
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.