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
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
(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
* IRQ 0, 2 and 13 are usually not connected to the I/O APIC INTIN pins
* if the IRQ line is set to inactive, clear IRR bit (same as PIC, but that
needs to be checked)
* added symbols for I/O APIC input types according to the specs
* TODO: PIC INTR is connected to INTIN0, edge/level handling in I/O APIC and
APIC code, ...
bochs.h already not include iodev.h which reduces compilation dependences for almost all cpu and fpu files, now cpu files will not be recompiled if iodev includes was changed
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.
- fixed handling of rotate_on_autoeoi for master PIC in in IAC()
- removed old IRQ handling functions (trigger_irq / untrigger_irq)
- replaced BX_INFO in case of bx_dbg.pic by BX_DEBUG calls
- new functions raise_irq() and lower_irq()
- all trigger_irq() / untrigger_irq() calls are replaced by the new functions
- REMARK: timer IRQ handling is not correct but it works
- TODO: IOAPIC IRQ handling needs to be changed
probably been treated as ifdef instead, but a sun compiler doesn't like
them. Anyway, they were being used around a check for irq_num > 15.
This bounds check seems ok to do all the time, so I just removed the
#if BX_DEBUG lines and corresponding #endifs.
[ #468340 ] pic:slave: OCW3 not implemented
The service_master_pic() method supported special mask mode but
service_slave_pic() did not. I added the code to service_slave_pic(). I
have no clear way to test that this is actually working right. If I can put
a gdb breakpoint in the pic.cc code and then step through and watch it work,
I'll be more confident.