- 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.
ES1370 emulation to use it.
TODO #1: implement real sound input in the lowlevel sound modules
TODO #2: implement sound input in the SB16
TODO #3: rewrite sound output code to use the same API
- es1370: fixed transfer size for the ADC channel
- es1370: call startwaveplayback() when the DAC2 channel is activated
- added missing change to BX_SUPPORT_SOUNDLOW
- changed type of variable "stereo" to bx_bool
- minor other changes
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
--enable-vbe is now deprecated and the symbols BX_SUPPORT_VBE and
BX_SUPPORT_PCIVGA have been removed. To enable VBE support, the bochsrc option
"vga: extension=" must be set to "vbe". If PCI is present, you can assign the
"pcivga" device to a PCI slot.
buffers are not large enough for the maximum sector count in LBA48 mode. Now
resetting buffer pointers after processing a PRD (and move remaining data if
necessary). This should fix the SF bug items #3190970 and #3077616.
recent version of Slirp with Debian patches applied. On a Linux host the
guest OS can access the internet without running Bochs with root privileges.
TODO:
* rewrite the DHCP part of eth_vnet.cc that it can be used here, too
* Slirp doesn't compile on 64-bit Linux with GCC 4.5
* WIN32 is not supported yet
an own header file for the basic sound output class. When ready we should
have a separate 'soundmod' plugin that could be used by other soundcard
implementations.
connected device. For now this feature is only used by the 'disk' device to
specify an alternative redolog filename of some image modes.
- added new methods set_option() and timer() to the base class usb_device_c.
The timer() method is periodicly called from the HC's frame timer code.
- moved runtime device change stuff from the parameter handler to the end of
timer() methods of all hubs. This makes sure that all parameters for the
device have been set at connect time. TODO: this technique could also be used
for the floppy and cdrom media change.
down and the vvfat image has been modied, the user is asked if the vvfat
directory should also be modified. Currently not handled: remove non-empty
directories, system-reserved clusters and file attributes.
- some small related changes
successful reads and writes (required for vvfat write support)
- added multiple sector read / write support to the undoable and volatile disk
image mode (required for USB MSD)
of the bootsector and the "FS info sector" (required for FAT32)
- implemented a more accurate way to calculate the number of clusters and the
corresponding FAT size
- some other small fixes
- check the root entries limit of FAT16
- some work on the FAT32 support (not yet complete)
- report volume creation date and time
- some other small fixes
- several fixes related to configurable geometry (some more tests required)
- skip MBR and boot sector image files when reading directory (still unused)
- support overriding cylinder value with 0 in the command line
- don't return failure value when reading unused sectors
- increment buffer pointer when reading more than one sector
* ported the read part of the Qemu vvfat block driver
* added win32 specific directory functions (required for MSVC)
* TODO: write support, FAT32 support, read MBR and boot sector from file
- HDIMAGE_HAS_GEOMETRY flag added to vmware3 & vmware4 modes (these modes use
the CHS values from image file)
- harddrv: renamed pointer to hdimage object
* 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
- siminterface: added helper method hdimage_get_mode()
- moved hdimage related stuff from harddrv.cc to the hdimage code
- changed hdimage related names
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)
- new USB device class method get_info() for improved device connect BX_INFOs
- USB printer: output file creation failure now causes BX_ERROR and disconnect
instead of BX_PANIC (similar to usb_msd)
- removed obsolete include statements
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
to the device and process TD repeatedly until CC is modified (fixes MSD
connected to OHCI with Linux guest)
- fixed CBP calculation and split transfer to memory when crossing the 4k
boundary (makes 8k transfers work according to the specs: fixes Win98 guest crash)
- don't enable the status bar i/o indicator if it's ID is not valid (no space
left in status bar)
- minor debug message fixes
- removed full device name from debug messages, since the device is specified
by it's prefix. Full name is only required in a BX_INFO() in init().
- removed BX_PANIC messages that will never happen
belongs to. This is important when we want to implement other network devices
or add support for multiple devices of the same type.
- improved some info messages / removed references to ne2k
- code cleanup: removed unnecessary spaces, changed tabs to spaces
to access non-static devices from static parameter handlers.
- removed USB hub register mechanism and use the new device pointer parameter
methods instead
- minor changes in SCSI command 0x23 (this command is designed for USB floppy
support - we have to check if it is really needed for flash sticks and
external hard drives)
- usb_msd: fixed indention
* removed old win32 runtime config dialog since the property sheet isn't
compatible with the win32 ParamDialog
* reorganized runtime parameter lists (usb and cdrom setup in device init)
* renamed win32 StartMenuDialog() to MainMenuDialog() and some related name
changes
* added runtime support to the MainMenuDialog
- win32 start/runtime menu: set keyboard focus to the start/continue button
- win32paramdlg: SetParamList() now checks for list size changes to avoid crash
non-empty path
- floppy devtype parameter now uses CMOS values and drive type names
- related changes in the floppy code
- simplified floppy parameter handlers
- some floppy parameter label changes
- added enable handler for the floppy path parameter
- update dependent params after setting the dependent bitmap of enum parameter
- win32paramdlg: fixed setting parameters at runtime
- fixed win32 ParamDialog return value for close/cancel
- runtime dialog for the first cdrom drive on win32 is now created as a win32
ParamDialog (removed old cdrom1 dialog stuff)
- minor fixes in x11 string dialog for the cdrom path & status case
- added file extension support for bx_param_filname_c
- fixed showing of tab control child lists
- added special disk menu for the win32 ParamDialog
- on win32 use the ParamDialog instead of textconfig submenus (TODO: gui dialog
replacement for the start menus
- create config parameters for USB depending of the defined number of ports
- removed obsolete comment
- bx_param_num_c flag USE_SPIN_CONTROL now available for all config interfaces
* added cdrom support in the usb_msd code (already present in the SCSI code)
* added code for deferring packets in usb_msd and the common USB code (TODO:
cancel packets by the host controller)
* added SCSI cdrom drive lock flag
- clean up SCSI request queues in destructor
- changed type of cdrom path/device parameter to const char
- moved the shared init device code to a common function
- reset hub count if the last external hub has been removed
* ported generic hub code from Qemu
* devices can be connected at runtime only with textconfig
* FIXME: wx ParamDialog doesn't like removing runtime parameters on disconnect
* TODO #1: dynanamic runtime dialog for USB on Windows
* TODO #2: code cleanup: USB code should have one static function only for
most of the init_device() code
* USB runtime options moved to a new dynamic menu
* USB host controllers create own submenus in init()
* USB runtime parameter handlers simplified
* TODO: related changes in the wx and win32dialog code
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
- initialize device pointers in init()
- don't delete connected devices in reset()
- update status if a device is connected during reset(), otherwise try to
connect devices
- some more registers converted from struct to Bit16u / Bit32u
- some progress with save/restore support
- small interrupt handling rewrite
- report misaligned read/write access
- initialize device pointers in init()
- only connect devices in reset() if not NULL
- don't delete devices in reset_hc() to avoid segfault (update connect status
instead)
- fixed port number calculation in read handler
- fixed enabling interrupts
is already done in reset()
- init_device(): check for device connected to port before creating a new one
(OHCI and UHCI)
- update irq level after clearing status and masking interrupt (same behaviour
as the Qemu implementation)
* use default value for screen width if update() is called before VGABIOS init
* set minimum value for vga_update_interval to 40000 (default value: 50000)
* no longer accept ips values smaller than BX_MIN_IPS and default value
changed to 4000000
* 'usb_uhci' bochsrc option replaces 'usb1'
* minor changes in the USB code
* removed old VBE i/o port registration (they were incompatible with USB)
* updated FSF address
- fixed saving user plugin options
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
bochsrc option (e.g. biosdev, speaker, gameport)
* the "unmapped device" is now an optional plugin, the builtin default handlers
no longer cause panics
* speaker stub calls the related gui methods for beep on/off
* load all optional plugins before starting init of core plugins
* 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()
* added support for memory above the PCI hole (Izik Eidus)
* smp_probe: instead of timimg out, wait until all cpus are up (Avi Kivity)
* Bochs BIOS changes to support HPET in Qemu (Beth Kon)
- added documentation about CMOS registers set by Qemu
* cut model string on boot screen if larger than 36 characters to make one
"ata" message fit in one line
* config parameter for model string needs one more byte
* harddrive: terminate model string with null
* don't panic if byte count is zero in PACKET-DMA mode (the specs say that
byte count is used for PIO modes. The behaviour in DMA mode is not
mentioned, but seems to be ignored in that case.)
* pci_ide: initialize sector size with the BM-DMA byte count (disk read
commands will overwrite this value, some ATAPI commands are using the
original one.)
* non-disk-read ATAPI commands simply copy the buffer in DMA mode