- use this feature for floppy read and write operations. This does not mean that
the floppy now works faster than realtime, but it reduces the number of DMA
calls from the CPU.
- removed outdated file: patch.fast-dma-cbothamy
- TODO: implement this feature in the SB16 (8 and 16 bit)
- SIM->opt_plugin_ctrl() now can be used to verify the optional plugin
configuration when using the plugin name "*". The 'load' value 1 makes
sure that all plugins with the value 1 are loaded. The 'load' value 0
unloads all plugin with the value 0 (marked for removal).
- add the default set of plugins to the 'plugin_ctrl' list and load all these
pre-defined optional plugins before parsing the configuration.
- special wx case: verify plugin configuration before showing the plugin
control dialog and before initialising hardware.
- device plugins that have been loaded, but not configured now set their
plugin control value to 0. Added the plugin unload check before signalling reset.
- new gui method set_mouse_mode_absxy() should switch the gui to absolute
x/y mode
- new DEV_mouse_motion() argument 'absxy' indicates whether or not the gui
sends absolute x/y values
- USB tablet code prepared to use the new feature
- TODO: implement this feature for each gui (sdl, win32, wx, x, ...)
- fixed possible division by zero when calculating beep frequency (counter value
0x0000 means 0x10000)
- small code cleanup
- TODO: implement beep generator in the lowlevel sound interaface
- ne2k: replaced debugger command 'info ne2k' completely by a new version based
on 'info device' with additional arguments and removed all of the now obsolete
stuff (ne2k device stub, macro for print_info())
- pci: added option 'dump=full' for the debugger command 'info device' to show
the whole PCI config space
- TODO: some other devices could have support for additional options in
debug_dump()
- removed FILE parameter from print_info() (unused - since dbg_printf() doesn't
need it)
- converted tabs to spaces
- TODO: implement 'info device' with optional arguments to get rid of the
print_info() method
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()
- TODO:
add debug info for more devices without adding them to bx_devices_c and
without a macro in plugin. A register mechanism in the debugger code would
be nice. Currently it is only possible to show the devices state by
accessing the save/restore tree. The debug_dump() output should show
the operation mode and the most important registers.
- for sequencer reg #1 a screen update is required after changing bit #0, #3 and #5
- added new method skip_update() that checks the conditions to skip the screen update
and it is called after resizing the display
- clear screen request from the sequencer is now handled by the update() code
in the new method skip_update() instead of clearing display directly
- siminterface: don't create plugin parameter if it already exists
- wx: make sure all plugins are loaded when creating plugin control dialog
- USB HC's: fixed removal of parameters when unloading plugin
- bx_list_c: don't accept duplicate param names in list (except dependent lists
and special menus)
- added BX_PANIC for malloc() failure
- harddrv: fixed wrong variable found with bx_list_c changes
- 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
in the gui object. Now the gui doesn't need to include vga.h.
- TODO #1: win32.cc also shouldn't include vga.h
- TODO #2: replace BX_MAX_XRES / BX_MAX_YRES by variables that can be set
depending on the configuration
- 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
- TODO #1: update MSVC workspace files
- TODO #2: these 'device classes' could be moved to subdirectories, too:
- pci (when we have more than one chipset)
- display (when we have one more device and vga / cirrus cleaned up)
plugin system.The load order is important for these devices!
- load support plugins for networking, sound and usb only if at least one of the
related plugin devices is loaded.
- plugin_ctrl: added missing devices to the list in bochsrc sample
parsing to the plugin device code
- sb16: modified misc runtime menu creation to make the sb16 parameters optional
- ne2k: changed location of the init() method in file (now matches coding style
of other device plugins)
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
option parsing to the plugin device code
- added function bx_init_usb_options() to reduce code duplication
- added log function names for 'usb_ohci' and 'usb_uhci'
- documentation updates
the device code. Added panic message to force the user to enable the plugin
with 'plugin_ctrl'.
- moved config parameter creation and bochsrc option parsing for device
'usb_xhci' to the plugin device code
- added minimal documentation for the "log action per device" feature
- added log function name for 'usb_xhci'
- some more hidden / system directory fixes
- parse_directory() / write_file(): continue only if next cluster is valid
- TODO: fix VVFAT with Windows XP guest (unmodified FAT ?)
- unknown module names now cause a panic
- added log function names to some more devices
- TODO: find a way to configure log actions by device in the config interface
start menu (most of the devices do not exist at this point)
invalid module names, save log actions to bochsrc)
- added new member 'name' to the logfunctions class for the case the prefix
is too short. Added to some devices with longer names.
existing "iolight timer" code in the hard drive code. If an LED is registered
with the "auto-off" flag, the device only needs to turn on the LED to indicate
data transfer. The LED timer in the gui code turns it off after 0.5 seconds if
it is not actived by another transfer. Added this feature to all network
devices.
- TODO #1: implement this feature in the USB host controllers
- TODO #2: the unused timer in the hard drive code could be used for the
emulation of seek functions
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
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
- use 'pci_rom_size - 1' as the mask for the offset address
- ne2k: memory handlers must be disabled if compiled without PCI support
- svga_cirrus: check for the PCI ROM size to make VBE work correctly
- added BX_INFO to the mem write handlers
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.
- another temporary solution for host from/to little endian conversion
- changed some variable types to bx_bool
- some other small cleanups
- TODO: add boot ROM support to all network devices
- 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
memcpy(). The reason for the failure is unknown. Using writePhysicalPage()
is safe, but slower and it only works on little endian hosts. On big endian
hosts the data block would be copied in reverse order. We have to check
whether or not this behaviour is expected for blocks > 8 bytes.
* if the image provides a geometry, always use it.
* if the cylinder value is set to 0 and the image supports autodetection,
calculate the cylinder value from disk size, sectors and heads.
* in all other cases the specified geometry is used.
* a panic only occurs if the image size is too small for the geometry.
* extra data past the end of the disk now causes an info message.
- TODO #1: 'flat' mode hdimage: read disk size of raw devices on Linux
- TODO #2: 'flat' mode hdimage: use geometry from MBR on image if present
- TODO #1: move shared stuff (e.g. creating TOC for image file) to the base class
to fix the temporary code duplication
- TODO #2: remove ASPI code for raw cdrom access on Win 98/ME after release
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
with the host time. After using a runtime config dialog or save and restore
simulation, this behaviour makes the PIT clock and the VGA update timer
running way too fast until it's back in sync. Now the elapsed time is stored
in the variable 'real_time_delay' and it is used to let the PIT clock run at
realtime speed, even if it is out of sync.
- added new method get_vga_pixel() that read the color value from EGA/VGA memory layout (moved from
display update code and now also used for snapshots)
- minor code cleanups
'vga_update_interval' option. The screen update frequency is still based on
the emulated clock unless the realtime sync is enabled with the 'clock' option.
TODO: rewrite the virt_timer code to support realtime screen updates
independent from 'clock' setting.
- fixed changing parameter 'update_freq' at runtime (timer object and blink counter)
parameters (path + status) have been set. TODO: implement this feature for the floppy, too.
- call update_drive_status_buttons() from update_runtime_options() to reduce the number of calls.
Now call update_runtime_options() from the gui floppy / cdrom handlers after closing dialog.
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.
- don't add reserved bitfields to the save/restore tree
- some fixes for big endian machines
- TODO: init max_packet_size in USB devices, find test case, ...
- added main source file usb_xhci.cc
- TODO: finsh work in register_state()
- TODO: USB devices: initialize max_packet_size
- TODO: test case for xHCI wanted
- using the same init() method for all display adapters
- new method protected init_standard_vga() for the shared vga core
- new method init_vga_extension() implements the extended features
- moved loading of vgabios image for the ISA case from main.cc to the vga init code
Sebastian Herbszt). TODO list:
- modify LGPL'd VGABIOS to make it work with SeaBIOS
- modify Bochs BIOS to set up the legacy address 0xc0000
- implement PCI ROM support in the cirrus device
- move load_ROM calls to the display adapter code to handle the ISA case
* 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
each other. Devices can register a handler to update it's state after runtime
configuration. The new method update_runtime_options() executes all registered
device handlers before the simulation continues.
- USB host controllers now using the new mechanism to handle the runtime device
change (replaces the previous timer-based implementation). TODO: floppy and
cdrom could use this feature, too)
- improved USB device change messages
makes screen updates independant from the ips value if the realtime
synchronization is enabled ("clock: sync=[realtime|both]").
Thanks to Stanislav for pointing me to this direction.
must ignore writes to it (fixes "garbled W" bug in Win95 with Cirrus ISA)
- fixed "inverted transparent colorexpand" bug (pointed me to the above issue)
- TODO: IE 5.5 startup window is still not okay
foreground color. This fixes the "white text" bug in original Win95 (A) with
the Cirrus ISA driver.
TODO: fix the "garbled W" bug (related to "dword granularity").
The ACPI support is always automatically compiled in if PCI is compiled in.
The ACPI still could be disabled using .bochsrc 'plugin_ctrl' option.
Updated CHANGES and docs as well.
Upon investigation the problem is easily fixed in bx_serial_c::rx_timer_handler():
<snip>
ssize_t bytes = read(socketid, &chbuf, 1);
#endif
if (bytes)
{
BX_INFO((" -- COM %d : read byte [%d]", port+1, chbuf));
data_ready = 1;
}
<snip>
I think this means the extra check above will give no noticeable degradation of performance, so hopefully this can be applied to SVN. It would avoid screwing up a running instance of Bochs when a remote network client unexpectedly disconnects from the COM1 tcp port.
Also some cleanup in serial.cc code.