Commit Graph

2600 Commits

Author SHA1 Message Date
Volker Ruppert
d6166344eb Added ethernet module 'socket'. designed to connect two Bochs instances with
external program 'bxhub' (simulating a two port ethernet hub). It is based on
an old SF patch and it has been updated and extended:
- Windows support (tested with MinGW/MSYS and MSVC nmake).
- Command line arguments for 'bxhub' (base port number, MAC address, TFTP).
- Added support for DHCP, TFTP, ARP and ICMP echo (ping). It uses parts of the
  code for the 'vnet' module with some additions from the former "slirp backend".
- TODO: code cleanup to reduce duplication, rewrite of the networking plugins
  stuff similar to the work done with the sound drivers.
2017-02-27 22:26:43 +00:00
Volker Ruppert
5366be7030 USB HID devices need to support "clear EP halt" (tested with Win98SE). 2017-02-24 20:19:00 +00:00
Volker Ruppert
0456c1034f Rewrite of the "no-plugins" code for loading/unloading gui, optional and sound
plugins. Now the plugin type is stored in the structure, so we need only one
array and one load function for plugins of these types.
2017-02-24 19:45:23 +00:00
Volker Ruppert
d501190b73 Minor cleanups in the common sound driver code. 2017-02-23 16:53:17 +00:00
Volker Ruppert
449c8ae620 Some more fixes in the new sound plugins code.
- Builtin sound driver plugin support should depend on BX_SUPPORT_SOUNDLOW.
- Added some symbols required for the MSVC plugin of sound driver "file".
- Clean up threads and audio buffers only when shutting down the primary sound
  driver (pcm_callback_id >= 0). Fixes crash on exit with wavemode 3.
2017-02-21 21:12:17 +00:00
Volker Ruppert
8310d4f448 Fixed sound plugins support for MSVC
- Added special symbols required for building MSVC plugin DLLs.
- Updated plugin DLL list in makefile.
2017-02-20 22:19:44 +00:00
Volker Ruppert
cd90506fb0 Forgot to remove renamed files. 2017-02-20 18:24:35 +00:00
Volker Ruppert
60d24943c6 Rewrite of the sound driver plugin code.
- Renamed OSS sound driver files from soundlnx.cc/.h to soundoss.cc/.h.
- Removed "pseudo device plugin" containing common code and specific drivers.
- Moved common sound code, base classes of sound drivers and the dummy driver
  to the Bochs core. Now loading sound driver plugins in soundmod.cc.
- Created separate plugins for the platform/library specific drivers and the
  "file" driver.
- Modified Bochs plugin system to support now plugin type PLUGTYPE_SOUND.
2017-02-20 18:21:19 +00:00
Volker Ruppert
4502478b50 Changed a lot of malloc() / free() calls to C++ style new / delete. 2017-02-18 11:13:56 +00:00
Volker Ruppert
a53b99f5e1 Implemented Bochs BIOS option "fastboot" for skipping the boot menu delay.
Prepared "biosdetect" option in the harddrv code.
TODO #1: Add support for a comma-separated list of BIOS options.
TODO #2: Implement support for at least "biosdetect=none" in the Bochs BIOS.
2017-02-16 21:43:52 +00:00
Volker Ruppert
90dc39eda7 Abort "format track" command if cylinder is out of range to avoid resizing
floppy disk image.
2017-02-15 22:27:34 +00:00
Volker Ruppert
72b2de2799 Clear DRQ line or NDMA mode bit if write command fails due to write protected
media (fixes SF bug #1338).
2017-02-10 21:28:05 +00:00
Volker Ruppert
f971dccddb Implemented SDL2 "wavein" service (Audio capture support is new in SDL 2.0.5
and does not yet work on all platforms).
2017-02-08 18:48:49 +00:00
Volker Ruppert
0b47bdd416 Fixed compilation on MSVC (define symbol O_ACCMODE if necessary). 2017-02-07 22:32:30 +00:00
Volker Ruppert
69dcf1c253 Fixed display in 8 bpp modes with doublescan enabled (fixes "Doom" on Win95). 2017-02-07 17:02:52 +00:00
Volker Ruppert
f844e846b7 Added PCM output data resampling in a separate thread. The resampler requires
either libsamplerate or the SoX resampler library installed. If not installed,
the data is only copied to the output buffer and sample rate of the output
driver is changed similar to legacy code. Related changes:
- Added check for libsamplerate or SoX resampler header files in configure
  script.
- Added functions for converting source format to float (requied by resampler)
  and float to output format.
- Added support for float type data in the audio buffer code. Buffer chain #0
  receives float data from sendwavepacket() and buffer #1 receives data for
  mixing and output in format "16-bit signed little endian stereo".
- ALSA: Disable builtin resampling feature if resampler is present to avoid
  doing it twice.
2017-02-05 08:33:03 +00:00
Volker Ruppert
59c828f3d3 Updated devices tree. 2017-02-01 22:03:38 +00:00
Volker Ruppert
3de865c753 Initialize 'pathname' pointer with NULL to avoid crash. 2017-01-30 22:09:13 +00:00
Volker Ruppert
7fd9194d81 Implemented lock mechanism for hard disk images (fixes SF bug #605).
- Create a file with image name plus extension ".lock" if an image is opened
  in read/write mode. This file will be deleted after closing the image.
- Check for a lock file before opening an image and fail if it exists.
- Check for a lock file before creating a undoable/volatile redolog file and
  fail if it exists.
2017-01-30 19:08:37 +00:00
Volker Ruppert
124f521797 Added support for changing the USB printer output file at runtime. 2017-01-29 08:48:08 +00:00
Volker Ruppert
458f747b48 Removed unused argc and argv parameters from plugin init functions. 2017-01-28 09:52:09 +00:00
Volker Ruppert
453991c437 Try opening output file only once to avoid flooding log file. 2017-01-27 16:53:59 +00:00
Volker Ruppert
ccdcb9cd1b Serial 'file' mode: added support for changing output file at runtime. 2017-01-27 16:20:04 +00:00
Volker Ruppert
c1c158c0a2 Added support for changing output file at runtime.
TODO: Do the same for the serial port 'file' mode and the USB printer.
2017-01-26 20:23:13 +00:00
Volker Ruppert
f59eaa2602 Simplified immediate shutdown code by using BX_FATAL. 2017-01-24 21:52:19 +00:00
Volker Ruppert
d0fbfb7d92 Checking the presence of the ACPI plugin makes the error message work again. 2017-01-15 13:31:11 +00:00
Volker Ruppert
400704d038 Added macro BX_FATAL() that works like BX_PANIC(), but with hardcoded action
"fatal". It can be used for all cases when there is no workaroud present to
avoid application crash or incorrect simulation behaviour. As a first step now
using BX_FATAL() for some data structure size and bit field errors.
2016-12-30 10:04:06 +00:00
Volker Ruppert
a3cbba7006 Some changes in the USB xHCI device
- The retry timer now calls process_transfer_ring() for enabled slots only.
- On USB3-only ports ignore device speed setup and try to enable super-speed mode.
2016-12-26 08:07:32 +00:00
Volker Ruppert
110a8d134e Implemented retry timer for NAK'ed transfers on xHCI. If a device returns NAK,
the transfer is retried with the given interval (stored in the endpoint context)
until it is successful. This fixes the HID device usage on xHCI.
2016-12-24 17:30:45 +00:00
Volker Ruppert
2712de0f19 Some changes in USB device descriptors depending on speed.
- Added support for HID devices in high-speed mode.
- Added separate descriptors for MSD devices in high-speed mode.
- NOTE: USB 2.0 values ported from Qemu / tested with USB EHCI.
2016-12-24 00:45:54 +00:00
Volker Ruppert
f828d3c23b Some changes in USB device speed setup
- Define minimum and maximum speed per device and panic if setting out of range.
- Allow speed value "full" for HID devices.
2016-12-21 18:35:38 +00:00
Volker Ruppert
e3e1665d6a Since all HCs now support asynchronous packet completion, we can enable the
async mode by default for all USB devices (used by disk, cdrom and floppy).
Whenever we implement a new HC model, it is still possible to set the async mode
to 0 until the async packet completion is working correctly.
2016-12-19 21:53:45 +00:00
Volker Ruppert
9cdf42d152 Asynchronous packet support implemented in the USB xHCI device. 2016-12-18 20:49:12 +00:00
Volker Ruppert
9377281239 Prepare async packet code for the usage with xHCI. 2016-12-17 08:14:04 +00:00
Volker Ruppert
c1eb6f9ff8 Fixed compilation error on MSVC. 2016-12-13 20:22:28 +00:00
Volker Ruppert
8edfb58c04 Updated makefile dependencies for USB EHCI (now complete and usable). 2016-12-11 18:54:01 +00:00
Volker Ruppert
35c61a8252 Create "Port Status Change" event only when the xHCI is initialized and running. 2016-12-11 18:27:12 +00:00
Volker Ruppert
cc1fa2bc61 Implemented USB remote wakeup mechanism in xHCI and the external hub. 2016-12-11 12:26:12 +00:00
Volker Ruppert
1f5222e096 Fixed string usage after delete. 2016-12-11 07:51:21 +00:00
Volker Ruppert
c3b608a3c9 Implemented USB remote wakeup mechanism.
- Extended USB callback definition to support different event types sent from
  device to HC. Currently we only have the two events "async completion" and
  "remote wakeup".
- Implemented event handlers in the UHCI, OHCI and EHCI. For the EHCI version
  we currently have no test case.
- The external USB hub now uses this feature at device connect/disconnect.
  Now the device change on the hub is correctly detected by the guest OS.
- TODO #1: remote wakeup and async completion for the xHCI.
- TODO #2: event handler for the external hub to make a USB device work on
  a chain of hubs.
- TODO #3: the event handler possibly could be used for the packet copy code.
2016-12-10 13:45:49 +00:00
Volker Ruppert
3fd323abc5 USB xHCI endianness and warning fixes
- use get_dwords() and put_dwords() from EHCI sources for reading / writing
  xHCI data structures as dword array. This fixes some endianness issues.
- simplified copying data from / to data structures since we can now use the
  dword array with the correct byte order directly.
- fixed all remaining "strict-aliasing" GCC warnings.
2016-12-04 18:54:51 +00:00
Volker Ruppert
91c58cffc3 Moved standard USB device request processing (set address, get status, get/set
configuration, get/set status, get descriptor) to the base class to reduce code
duplication. The device calls the common handle_control() method and then it
processes unhandled requests in it's specific code. (similar to Qemu).
2016-12-04 09:51:14 +00:00
Volker Ruppert
0d74aec48c Some more xHCI fixes by Ben Lunt (NAK handling, TRB type "No Op"). 2016-12-03 12:15:16 +00:00
Volker Ruppert
185ae80925 Some USB code changes by Ben Lunt
- USB xHCI NAK handling fix by Ben. Now openSUSE 13.2 boots without hang with
  hub connected to an xHCI port.
- Updated Ben's email address and year in some copyright headers.
2016-12-02 17:30:16 +00:00
Volker Ruppert
26af4f279b Modified xHCI packet handling similar to other HCs.
- Get rid of device_buffer and use packet init / cleanup functions.
- Read immediate data from memory location instead of possibly byte-swapped
  TRB parameter.
2016-11-29 19:19:05 +00:00
Volker Ruppert
a138f07fe1 Fixed OHCI ED / TD handling and removed hacks for async packet completion. 2016-11-27 18:16:06 +00:00
Volker Ruppert
a22e66ef13 Added support for multiple async packets on OHCI.
- Moved UHCI async packet functions to usb_common.h for using then on both
  UHCI and OHCI.
- Modified OHCI packet handling based on the UHCI implementation.
- Renamed EHCI helper function to avoid conflicts.
- TODO: async packet support on xHCI.
2016-11-27 12:18:37 +00:00
Volker Ruppert
ff3b20be1a Minor changes and comment additions in the EHCI emulation code.
- Added missing queue handling code for init, reset and device disconnect.
- Added EHCI status access methods for async and periodic state.
- Added a lot of comments (mostly from the original EHCI core code).
2016-11-27 09:19:55 +00:00
Volker Ruppert
ab69aae575 Zeroing out newly allocated structures fixes EHCI async packet support.
It has been tested successfully with USB disk in high speed mode.
2016-11-26 11:15:25 +00:00
Volker Ruppert
f6608938bf Some more small xHCI changes by Ben Lunt. 2016-11-25 13:15:27 +00:00
Volker Ruppert
1c8986f01f Return USB device status depending it's attributes.
- UFI/CBI floppy: bus-powered, no remote wakeup
- HID (mouse, tablet, keypad): bus-powered, remote wakeup
- MSD (disk, cdrom), printer: self-powered, no remote wakeup
TODO: Remote wakeup is not yet implemented. A device should be able to resume
it's upstream port if suspended.
2016-11-24 21:57:02 +00:00
Volker Ruppert
a5c2115d27 Two small xHCI changes by Ben Lunt. 2016-11-24 18:05:05 +00:00
Volker Ruppert
385ad83df3 Minor changes in the OHCI code.
- HcLSThreshold is writable, but it's usually not modified (same as Qemu).
- BX_ERROR should only occur on an attempt to change the number of ports.
- Don't register read-only items for save/restore.
2016-11-24 17:21:40 +00:00
Volker Ruppert
20e9d21fc7 Small changes in serial loopback mode
- The transmit FIFO is not used in loopback mode.
- Don't flood log file with error messages when Linux probes the FIFO.
2016-11-23 16:42:22 +00:00
Volker Ruppert
f82bb13f88 Added support for multiple async packets on UHCI (TODO: other HCs). 2016-11-22 18:06:44 +00:00
Volker Ruppert
666780dab5 Some work on the USB hub device emulation.
- Changed some device descriptor fields (using values from Qemu).
- Ported device reset code from Qemu.
- Check device speed setting on connect (only low/full speed supported yet).
- TODO: External hub doesn't work properly in some test cases (device change
  not detected by guest OS, openSUSE 13.2 hangs with hub on xHCI).
2016-11-20 20:39:32 +00:00
Volker Ruppert
72af99c372 Some more work on USB HID devices and related stuff
- Now really fixed NAK behaviour in UHCI.
- USB tablet now also returns NAK response when idle and there is no change.
2016-11-20 07:30:06 +00:00
Volker Ruppert
4660c7ad98 Some work on USB HID devices and related stuff
- USB mouse and keypad now return NAK response when idle and there is no change.
- Implemented HID commands for get/set idle duration.
- Fixed NAK behaviour in UHCI and OHCI.
TODO list: USB tablet should also return NAK (doesn't work yet), review xHCI for
the NAK behaviour, accurate implementation of the idle duration
2016-11-19 23:11:51 +00:00
Volker Ruppert
0192554c25 Started rewrite of USB packet handling required for full async packet support.
Step #1: Allocate buffer for data transfers dynamicly with the required size
(done in UHCI, OHCI and EHCI).
2016-11-18 21:27:43 +00:00
Volker Ruppert
de6ee1d7eb Added basic async packet support in the UHCI core. Only one async operation
is currently supported per hub at the same time (same as OHCI).
TODO #1: We should support at least one async operation per connected device.
TODO #2: Async packet support for EHCI and xHCI.
2016-11-16 16:49:57 +00:00
Volker Ruppert
21643ff419 Some work on the USB EHCI emulation
- added a hack to make EHCI work in Bochs, but without asynchronous packet
  support (tested with "high-speed" USB disk).
- added missing list for connected USB device state.
2016-11-13 20:57:57 +00:00
Volker Ruppert
b95ca006b8 Some work on the USB xHCI emulation
- fixed some of the endianness issues
- fixed some of the GCC warnings
- changed some BX_INFO to BX_DEBUG
- FIXME: non-bulk devices not yet working on xHCI. Linux guest hangs during boot
  when HID or hub device is connected.
2016-11-13 09:22:25 +00:00
Volker Ruppert
17b4e65bef The save/restore list for USB devices is now cleared by the device destructor
instead of the hub's remove_device() method. The external hub removes connected
devices before clearing it's own list. This fixes crash on exit when devices
are present on external hub.
2016-11-12 14:17:46 +00:00
Volker Ruppert
364bf9362c Changed handling of unsupported/invalid device speed setup. The UHCI core now
ignores connected high speed device (fixes panic with EHCI on guest OS init or
shutdown). The other HC's now panic and disconnect device if the user decides
to continue.
2016-11-11 16:11:52 +00:00
Volker Ruppert
6ba530e461 Ported most of the remaining EHCI methods to Bochs, including some ugly hacks.
Asynchronous transfers are not yet working properly (tested with USB disk device
in high speed mode). That's why the support for "speed:high" is still disabled.
Since we have no test case for the isosynchronous mode, I have not yet ported
the main code for it.
2016-11-07 21:57:56 +00:00
Volker Ruppert
5458e66f85 Added USB device method 'find_device' required for EHCI. No functional changes yet. 2016-08-20 14:20:07 +00:00
Volker Ruppert
cd68194269 Added Android host platform support to Bochs based on SF patch #534.
- added Android case to the configure script.
- renamed file memory.h to memory-bochs.h to fix conflict with NDK.
- fixed Android issues in some files.
2016-08-12 17:06:14 +00:00
Stanislav Shwartsman
7cf38247e4 fixed warnings and errors which pop up when compiling Bochs with TRUE bool as boolean type instead of Bit32u 2016-06-01 20:29:44 +00:00
Volker Ruppert
fc41b20dfe Applied current state of porting EHCI from Qemu. No functional changes yet. 2016-05-16 17:25:29 +00:00
Volker Ruppert
45232b1860 Added standard bus mouse support and inproved existing InPort mouse support
(Ben Lunt). Added new mouse type choice 'inport' for the existing one and changed
'bus' type to the new standard bus mouse,
2016-03-31 17:24:34 +00:00
Volker Ruppert
ce7afe050f Applied current state of porting EHCI from Qemu. No functional changes yet. 2016-02-09 17:11:59 +00:00
Volker Ruppert
60d5aaaacf Added QEMU queue macros (required for EHCI) as a separate file. Removed already
existing defines from the Slirp compatibility header.
2016-01-08 18:58:27 +00:00
Volker Ruppert
0ba744b9fe Started implementing USB EHCI support. The PCI and MMIO register behaviour is
almost implemented, the port owner handling and the UHCI companion controllers
are present. High speed devices are not yet supported, since the EHCI scheduler
code has not been written yet (e.g. porting from Qemu). Low and full speed
devices should be detected correctly and work after port ownership change to
UHCI. 6 ports are available and the bochsrc syntax is similar to other HCs.
2015-12-06 20:03:42 +00:00
Volker Ruppert
5e635a87bb Fixed IRQ sharing for multi-function PCI devices and removed workaround in the
UHCI core code.
2015-11-28 10:24:22 +00:00
Volker Ruppert
93f9584b1b Load USB core plugin before parsing bochsrc, since USB HC devices depend on
it's symbols. Unload this plugin in the devices init if unused.
TODO: Similar changes may be required for the networking and sound stuff.
2015-11-20 18:07:27 +00:00
Volker Ruppert
e19f28dad7 Call DEV_pci_set_irq() only if the IRQ level really changes. The Bochs IRQ
routing code is possibly buggy, since it can make multiple UHCI devices fail
in a multi-function device (like EHCI).
2015-11-12 21:45:44 +00:00
Volker Ruppert
2f94f55a82 Some work in the UHCI core for the usage as a companion controller of EHCI.
- added method to change port ownership.
- fixed UHCI reset and initialized device pointers.
- added symbol UHCI_FULL_DEBUG to reduce debug output if not set.
- renamed connection handling method.
2015-11-08 18:54:30 +00:00
Volker Ruppert
d455659bd1 Split the USB UHCI code in two parts: uhci_core.cc implements the device
emulation and usb_uhci.cc implements the setup for the PIIX3 chipset and the
runtime device change code. The UHCI core is required for the EHCI emulation,
since there can be multiple "companion" controllers for USB 1.1 device handling.
2015-11-05 21:20:54 +00:00
Volker Ruppert
aefccb14ab Added support for registering master PCI devices with function > 0 (required
for implementing EHCI).
2015-11-04 16:32:16 +00:00
Volker Ruppert
76c065dd89 Fixed usage of MSD device on xHCI hub.
- implemented xHCI TRB command "Reset Device".
- fixed SCSI read/write commands in non-async mode.
2015-11-02 21:36:38 +00:00
Volker Ruppert
c2b790809d Simplify xHCI code, since the capability registers are readonly.
- Moved initialization from reset_hc() to init().
- Removed save/restore registration.
- Removed extra debug output.
2015-11-01 08:55:03 +00:00
Volker Ruppert
be304bf4af Definition of maximum nuber of USB ports moved from bochs.h to device. 2015-10-31 15:12:36 +00:00
Volker Ruppert
234f10f159 The OHCI async support works fine in all tests, so some BX_INFO messages
can be changed now to BX_DEBUG.
2015-10-26 20:23:33 +00:00
Volker Ruppert
7cf7ee8293 Block device detection fixes for Linux.
- now using macro S_ISBLK() to detect block device (cdrom/hdimage).
- re-implemented recently removed check for block device in concat mode.
2015-10-25 17:02:12 +00:00
Volker Ruppert
cbd147fca3 Fixed and improved text mode CO40.
- vgacore: double font and screen width at half dot clock.
- X gui: improved font bitmap generation to support width > 9.
- win32 gui: adjust values to use existing stretching feature.
- guis rfb, sdl, sdl2, vncsrv and wx: double pixels if font width > 9.
2015-10-24 22:03:51 +00:00
Volker Ruppert
fcf9b8285b Added seek emulation for USB disk write commands (async mode required).
Fixed MSD status handling (required for seek emulation).
2015-10-22 18:13:59 +00:00
Volker Ruppert
3c7260a01b Improved panic message for unavailable image mode.
Removed disabled code in the 'sparse' section.
2015-10-18 07:13:56 +00:00
Volker Ruppert
2420ba499e Fixed 'concat' mode lseek() for whence != SEEK_SET. 2015-10-17 14:08:23 +00:00
Volker Ruppert
141aea5f1b Fixed and improved 'concat' disk image mode. 2015-10-17 10:06:36 +00:00
Volker Ruppert
c3397b15d7 Fixed read() and write() methods of most disk images modes to support multiple
sector transfers (buffer pointer update was missing). Multiple sectors transfers
could for the USB disk emulation and for image conversion with bximage.
2015-10-15 17:21:34 +00:00
Volker Ruppert
708e946cb8 As a workaround for possibly buggy hdimage code, read() and write() calls
transfer only one disk sector. Moved disk write code to the seek_complete()
method (seek emulation for write commands is not ready yet).
2015-10-13 19:49:09 +00:00
Volker Ruppert
b22023838c Completed save/restore support for the USB xHCI device.
TODO: reduce size of saved file (find a way to skip unused slots).
2015-10-11 17:07:18 +00:00
Volker Ruppert
3fc71ec131 Now using BXRS_* macros for all USB devices.
TODO: This should be used everywhere in register_state() if possible.
2015-10-11 07:33:22 +00:00
Volker Ruppert
eed2bb15b8 Simplified register_state() for for small byte arrays in remaining i/o devices. 2015-10-06 18:20:16 +00:00
Volker Ruppert
9bc8651328 Extended functionality of class bx_shadow_data_c to simplify saving small byte
arrays. Changed register_state() code in a few devices to use this feature.
TODO: Use this feature in all devices with small byte arrays.
2015-10-05 18:09:58 +00:00
Volker Ruppert
12915a48f2 Added missing update of 'curr_lba' for the harddisk read seek emulation.
Added comments to the MSD / SCSI members similar to usb_cbi.
Now using BXRS_* macros for save/restore.
2015-10-04 08:54:36 +00:00
Volker Ruppert
b754d72ab2 Some work on the USB disk/cdrom emulation.
- More accurate seek emulation for read commands.
- Moved status indicator code to the SCSI layer.
- Fixed dump size for async packets.
TODO: Seek emulation for disk write commands.
2015-10-03 07:19:48 +00:00
Volker Ruppert
256fd99d12 USB floppy "format unit" timing implemented similar to read/write timing.
Added latency time for the "implied seek" of read/write/format commands. Both
features can be used when asynchronous packet handling is available. Some
related changes in the non-async read and write code.
2015-09-28 18:15:18 +00:00
Volker Ruppert
71774c57bb Some work on the USB floppy emulation.
- Added support for changing image mode at runtime (flat <-> vvfat).
- Added device buffer to save/restore list.
2015-09-27 15:02:38 +00:00
Volker Ruppert
b22a57d4df Some work on the USB floppy emulation.
- Added missing update of the write protection flag after runtime config.
- Added sense codes for invalid cases of some commands.
- Added buffer pointer save/restore handling and use BXRS macros now.
2015-09-27 08:32:54 +00:00
Volker Ruppert
e8d045ad30 USB floppy sector write timing implemented similar to read timing. It can be
used when asynchronous packet handling is available. Some changes in the
non-async read and write code.
TODO: seek timing (similar to legacy floppy).
2015-09-26 09:19:56 +00:00
Volker Ruppert
2232dd23d6 USB floppy sector read timing implemented based on the drive speed 300 RPM.
It can be used when asynchronous packet handling is available. Some changes in
the non-async read and write code.
TODO: sector write timing, seek timing (similar to legacy floppy).
2015-09-20 10:53:16 +00:00
Volker Ruppert
6cbd6e247a USB floppy command FORMAT UNIT implemented and read commands fixed. Formatting
media in USB floppy works now with XP guest.
2015-09-19 12:45:54 +00:00
Volker Ruppert
12cace4c5a Some work on async packet and seek emulation support.
- deactivate seek timer when operation is cancelled.
- set async packet mode with a separate method at connection time.
- renamed some variables and prepared seek emulation for USB disk writes.
2015-09-16 17:08:50 +00:00
Volker Ruppert
0b432b313f Added seek emulation support for USB harddisk reads and cleaned up the
MSD / SCSI code.
TODO list (async packet and seek support):
- seek emulation for USB harddisk write commands
- seek emulation for floppy
- async packet support for UHCI and xHCI
- improve and clean up OHCI async packet code
2015-09-15 17:55:32 +00:00
Volker Ruppert
491dc311ca Some work for asynchronus USB packet handling (needed by disk/cdrom seek emulation).
- Common USB code prepared for async USB packet handling (ported from an earlier
  Qemu version).
- Added simple async packet handling to OHCI (partly ported from earlier Qemu).
- Implemented USB cdrom seek emulation for hubs with async packet support. The
  legacy code is still present for hubs without this feature.
- For UHCI and xHCI the callback is set to NULL to force the usage of the
  legacy cdrom read code.
TODO: clean up OHCI code, async support for UHCI and xHCI, seek emulation for
USB harddisk and floppy.
2015-09-13 20:04:41 +00:00
Volker Ruppert
6dbd4c37a9 Some USB debug output (packet dump) changes
- rewrite of usb_dump_packet(), execute code only if debug output is enabled.
- OHCI: removed packet dump, it should be done in the devices code if necessary.
2015-09-06 06:54:07 +00:00
Volker Ruppert
a536aa8286 Fixed format capacities list for the "no medium" case. 2015-09-05 11:35:05 +00:00
Volker Ruppert
f54feb5b91 Some variables should not be handled by the xHCI internal save/restore, moving
them out of the hub structure.
Fixed a warning.
2015-09-05 07:23:25 +00:00
Volker Ruppert
b69e40d584 The USB host controllers have no asynchronus packet completion support yet.
TODO: implement this feature (useful for cdrom, disk and floppy devices).
2015-09-05 06:30:28 +00:00
Volker Ruppert
4b83f9e899 If the debug mode is enabled for usb_msd, turn it on for the SCSI device, too,
Don't try to insert cdrom media if device/image path is empty.
2015-09-03 18:54:51 +00:00
Volker Ruppert
44d0e8f911 Added media change support for the USB floppy. 2015-08-31 20:51:54 +00:00
Volker Ruppert
c136fa1618 Added framework for USB floppy media change support based on the USB cdrom
code (not yet functional).
Minor related changes in the USB cdrom code.
2015-08-30 08:37:27 +00:00
Volker Ruppert
2dbfae1b1c Fixes and improvements for the USB cdrom runtime options.
- Add a special list to the MSD state and add pointers to the runtime-only
  options for the cdrom. The restore handler of this list calls runtime_config()
  to make sure the media path and status are correctly updated.
- Registering a runtime config handler for the USB cdrom is not necessary since
  runtime_config() is always called from the hub it is connected to.
- Restore a string parameter value only if it's different from the initial one.
2015-08-29 14:02:13 +00:00
Volker Ruppert
946a6bf50e Fixed USB device disconnect: clear save/restore list before deleting device
(bug found with valgrind).
2015-08-28 18:52:54 +00:00
Volker Ruppert
7da8cfa4b0 Fixed save/restore support of the USB subsystem when using an external hub
with devices conected at runtime.
- Added restore handler support for the bx_list_c class. If a handler is
  registered, it will be called after restoring all of the list's members.
- USB hub: add special lists to the port state and add pointers to the
  runtime-only options for each port. The restore handler of this list calls
  init_device() to make sure all connected devices can be restored.
- Call restore_logopts() after restoring hardware to make sure all saved
  modules have been created.
- TODO: the USB cdrom also needs a fix for it's runtime-only options.
2015-08-28 17:37:38 +00:00
Volker Ruppert
cc3020ab53 Added support for connecting USB floppy without media present.
Fixed status indicator activity.
TODO: add media change support without disconnect.
2015-08-24 20:26:08 +00:00
Volker Ruppert
38fbdaa7e8 Added runtime config handler for the USB cdrom and modified parameter handling
similar to the ATAPI implementation (including locked tray case).
Fixed status indicator activity and minor other changes.
2015-08-23 16:09:24 +00:00
Volker Ruppert
1df014a8ae Implemented unregister mechanism for runtime config handlers.
TODO: use it for removable devices with removable media (USB floppy / cdrom).
2015-08-23 07:04:56 +00:00
Volker Ruppert
1ac159ba52 Modified sleep rate in conversion thread to get more continuous output. 2015-08-18 17:26:25 +00:00
Volker Ruppert
792c5bdec2 Set default device speed for floppy, cdrom and disk to 'full'. 2015-08-16 16:15:46 +00:00
Volker Ruppert
823ba769fb Some work on the USB floppy emulation.
- Removed USB device type handling from constructor and init code, since we
  only the 'floppy' type here.
- Write commands now using the device buffer for one sector.
TODO: support for starting without media and runtime media change.
2015-08-16 06:44:16 +00:00
Volker Ruppert
5bc1717adc Removed the data tranfer limit for read/write commands.
- The read buffer is now limited to 16 sectors and the read commands can fill
  it multiple times until all sectors have been read.
- The write commands are currently not using the device buffer, so no panic
  should happen here.
2015-08-14 17:43:25 +00:00
Volker Ruppert
16fb8317bd Fixed parameter handler issues found with runtime changes while cdrom tray locked.
- bx_param_num_c: set the value returned from the handler.
- bx_param_string_c: set the new value after processing the handler.
- harddrv param handler: check lock state of cdrom and modify value if true.
2015-08-10 18:44:16 +00:00
Volker Ruppert
8a1e31ef08 Added common USB device option "debug" to turn on BX_DEBUG reporting at
connection time.
Fixed USB floppy capacity entries for 1.44 MB (last LBA, not LBA count).
2015-07-31 19:01:09 +00:00
Volker Ruppert
46d2c0adad Started implementing save/restore support for the USB floppy.
Fixed status indicator handling in case of connect failure.
2015-07-28 18:44:08 +00:00
Volker Ruppert
5e714cdd34 Handle illegal and unimplemented cases of the 'verify' command. 2015-07-26 06:48:55 +00:00
Volker Ruppert
fa5353698d CMOS boot setup moved to the floppy init code to make Bochs BIOS boot work in
case no harddrv plugin is loaded (no ata controller enabled). The floppy and
boot parameters are only set up if no CMOS image is enabled.
2015-07-26 06:48:33 +00:00
Volker Ruppert
20aeed208b Fixed some panics when Bochs is used without the harddrv plugin (ata* disabled).
TODO: Fix Bochs BIOS for that case (SeaBIOS is okay).
2015-07-15 10:20:22 +00:00
Volker Ruppert
87d40fe673 Some work on the status LED support for removable devices.
- Force a status bar update after unregistering an item.
- Added status indicators for USB disk and cdrom.
- Handle USB device disconnect in the runtime config handler, too.
2015-07-13 21:57:09 +00:00
Volker Ruppert
3986a0b703 Extended status bar LED feature to support dynamic indicators for removable
devices like USB disk, cdrom or floppy. Using this feature for the new USB
floppy. Removed static indicators for port activity from the USB HC code.
TODO: Implement status LEDs for USB disk and cdrom.
2015-07-13 16:56:06 +00:00
Volker Ruppert
6161ffea73 Added initial version of UFI/CBI floppy disk storage device support written
by Ben Lunt. To connect a USB floppy you can use the 'floppy' device with the
path to the image separated with a colon. VVFAT is also supported.
FIXME: The device detection fails on some recent Linux distributions.
FIXME: Only 1.44M media format is currently supported.
TODO: Media change without disconnect is not implemented yet.
2015-07-13 08:37:45 +00:00
Volker Ruppert
9b0af67606 Added static variable 'vvfat_count' for generating a unique FAT ID. 2015-07-12 14:46:00 +00:00
Volker Ruppert
16358f9c54 Added missing hdimage->close() in destructor. 2015-07-12 14:45:34 +00:00
Volker Ruppert
98bc3bdf16 Small OHCI fix by Ben Lunt. 2015-07-12 06:53:01 +00:00
Volker Ruppert
3b87e71346 Minor bugfix and small additions by Ben Lunt. 2015-06-29 20:32:56 +00:00
Volker Ruppert
dcae254157 The Device Qualifier request must fail on non high-speed devices (patch by Ben Lunt). 2015-06-17 20:15:53 +00:00
Volker Ruppert
ee6bfaa4c4 Added separate thread for the PCM data conversion. Only in case of dual output
sendwavepacket() directly calls the conversion method and output(). In all other
cases it puts the unmodified data into a buffer and the conversion thread is
doing the main job and puts the data into the output buffer chain.
TODO: resampling could also be done by the new thread.
2015-06-04 08:58:02 +00:00
Volker Ruppert
377d920956 Created a new class for the audio buffer handling to make multiple buffers
chains possible.
TODO: the lowlevel sound code should bbe rewritten with an additional
conversion thread.
2015-05-15 20:18:47 +00:00
Volker Ruppert
119971182b Include pthreads library header in soundlow.h (fixes SF bug #1373). 2015-05-09 08:31:49 +00:00
Volker Ruppert
2bfee2aeb2 Added new log function for the ATAPI CDROM and macro BX_DEBUG_ATAPI to avoid
flooding logfile with hard disk messages when only the cdrom ones are wanted.
ATAPI DMA: don't copy more data than actually present in buffer.
2015-05-09 07:44:36 +00:00
Volker Ruppert
7e86e7956f Fixed PCI IDE controller DMA start (found with a recent Linux version:
"mode sense" command executed in DMA mode).
Updated output of "mode sense" page 0x2a (still reporting CD-ROM drive).
2015-05-05 20:10:43 +00:00
Volker Ruppert
fd690a3a31 Fixed compilation errors found on Cygwin64
- The 'Bits' type used in the opl files is incompatible with Bit64s. Modified
  typedef to fix this issue.
- On Windows use Sleep() directly, since msleep() doesn't exist in Cygwin.
2015-05-05 18:06:05 +00:00
Volker Ruppert
9d4ef351e7 Preparing Bochs release 2.6.8 2015-05-03 06:36:30 +00:00
Volker Ruppert
29d54ac8b8 Fixed some compilation errors / warnings found on Mac OSX (SF bug #1371). 2015-05-02 08:42:44 +00:00
Volker Ruppert
722274fd09 Enabling non-blocking mode can cause socket connection failures (at least when
compiled with VS2013).
TODO: slirp should use separate threads for input and output.
2015-05-01 19:41:08 +00:00
Volker Ruppert
a76a232115 Fixed crash on exit caused by physical drive without media present. Now setting
fd to -1 if there is no readable media found.
2015-04-28 17:01:41 +00:00
Volker Ruppert
506dd623f6 Using "read toc" to get the media size doesn't work correctly for DVDs on Linux.
Now using BLKGETSIZE64 ioctl seems to fix the reported capacity.
2015-04-26 15:59:08 +00:00
Volker Ruppert
a32bc18d9e Renamed SB16 parameters "midi" to "midifile" and "wave" to "wavefile" (same
as ES1370). Legacy parameter names are still supported.
2015-04-17 18:37:51 +00:00
Volker Ruppert
d416daf51b SB16 register_state(): we have to use a constant here. 2015-04-17 11:58:15 +00:00
Volker Ruppert
92f48fa92f Implemented MIDI output support for the ES1370 soundcard. Data written to the
UART data port is sent to file or device similar to the SB16.
Minor cleanups in the SB16 code.
2015-04-16 21:18:42 +00:00
Volker Ruppert
091e01d96c Fixed UART register address in condition and added default status return value. 2015-04-12 10:48:02 +00:00
Volker Ruppert
035b133bac Improved error messages for unsupported internal memory access.
ES1370 is no longer "experimental".
2015-04-11 09:03:17 +00:00
Volker Ruppert
d8ca04c79f The current frame count registers are readable as word (not mentioned in specs).
This fixes the Win98 explorer crash.
Added BX_ERROR for the still unsupported dual output mode.
2015-04-10 21:31:44 +00:00
Volker Ruppert
bad6c96fc7 Fixed possible compilation failure caused by container_of definition (part of
the mixing6 patch by Dawn Teschendorf).
2015-04-10 20:40:25 +00:00
Volker Ruppert
696c1a6e55 Some Bochs features are still called "experimental". The bus mouse, USB OHCI,
USB UHCI and the E1000 NIC are known to work fine on some guest systems, so
it's safe to remove this attribute.
TODO: Some other Bochs features need to be reviewed for this.
2015-04-07 16:57:36 +00:00
Volker Ruppert
a52bcdfa88 Minor fixes and cleanups in the SB16 code (no functional changes).
- the "remaplist" has 256 entries, but the limit was too high (4096).
- the "patchtable" had 4096 entries, but the index was never > 15.
- removed disabled / outdated code.
2015-04-06 16:03:04 +00:00
Volker Ruppert
72dfda5ee9 Fixed frame register writes (bug in rev. 12705) using QEMU-like code.
TODO: Win98 guest crash after wave output still not fixed.
2015-04-06 12:18:52 +00:00
Volker Ruppert
a256414d32 Some work on the ES1370 emulation.
- Undocumented "legacy" register at offset 0x1b is used to probe for the ES1370
  interrupt by the Win9x driver. Using bit #0 to control the IRQ line fixes
  driver installation.
- Added more detailed BX_ERROR messages for the UART registers.
- Small code cleanup in the write handler.
- TODO: fix possible bluescreen in Win98 guest after wave playback.
2015-04-05 11:48:44 +00:00
Volker Ruppert
79278be63f Volume control fixes and improvements
- OPL3: apply FM volume control to the output data.
- SB16: fixed missing volume update after mixer reset.
- soundlow: fixed application of the volume control to the PCM output.
2015-04-03 12:18:53 +00:00
Volker Ruppert
7ce7c70f6d Adjust DAC output timer interval depending on real packet size (fixes output
with XP guest).
2015-04-02 23:21:04 +00:00
Volker Ruppert
10d79f2e9a SB16: fixed output volume calculation.
ES1370: fixed and improved output volume calculation similar to SB16.
TODO: apply volume control to the FM output.
2015-03-31 18:01:52 +00:00
Volker Ruppert
72cbbe9e8b Fixed incorrect calls of virtual functions in constructor/destructor.
- Removed useless set_pcm_params() call in base class contructor.
- SDL waveout destructor needs to call the unregister_wave_callback() method
  of the SDL stuff, since the base class destructor doesn't do that.
2015-03-29 15:53:56 +00:00
Volker Ruppert
3e54ff2e36 Added Oracle(tm) VM VirtualBox image support (VDI version 1.1). Patch written
by Ben Lunt plus some additions (bximage fixes, big endian support).
TODO: update MSVC workspace files.
2015-03-29 14:27:32 +00:00
Volker Ruppert
601493c89a Moved output volume calculation to a separate method and prepared volume
control for the FM output.
TODO #1: handle volume control in the opl code.
TODO #2: check if the output level calculation is correct.
2015-03-27 15:49:40 +00:00
Volker Ruppert
422a06652d Fixed bximage compilation on big endian hosts. 2015-03-20 18:01:52 +00:00
Volker Ruppert
49e265f5f8 Added save/restore support for the OPL3 waveform selection. 2015-03-19 16:47:25 +00:00
Volker Ruppert
3ab5b052a1 Sound driver 'win': changed output rate to 20 packets per second. 2015-03-17 20:55:51 +00:00
Volker Ruppert
927e55f077 Improved mixer thread mutex handling.
- Moved BX_INIT_MUTEX() call to start_mixer_thread() to reduce code duplication.
- Call BX_FINI_MUTEX() only when the mixer thread and mutex was really used.
2015-03-16 19:02:31 +00:00
Volker Ruppert
8bf10dc15c Fixed compilation error caused by #endif location. 2015-03-16 18:28:29 +00:00
Volker Ruppert
7c351a16dc Cleaned up speaker output mode handling (no functional changes). 2015-03-15 06:58:59 +00:00
Volker Ruppert
924201f694 Added capability to handle floating point values with save/restore.
Improved OPL3 save/restore support.
2015-03-13 21:28:40 +00:00
Volker Ruppert
8fe902686c Separated sound lowlevel base class from dummy driver. The base class returns
NULL for all services and the dummy driver provides the stubs. Now falling
back to the dummy driver if the wavein or midiout services are not provided
by the selected driver.
2015-03-10 20:56:44 +00:00
Volker Ruppert
327f987a18 Added the capability to set up the sound driver per service. The global
sound option for setting up one driver for all services is still available.
2015-03-06 22:54:30 +00:00
Volker Ruppert
cbfbaaacb7 Added BX_HAVE_SOUND_* definitions to simplify code. 2015-02-23 21:32:34 +00:00
Volker Ruppert
3135e6a4eb Changed sound driver parameter type to bx_param_enum_c.
TODO: Add sound driver selection per service (waveout, wavein, midiout).
2015-02-22 20:29:58 +00:00
Volker Ruppert
9493a63e7a Fixes and updates in the lowlevel sound code and related stuff.
- soundlow: fixed possible segfault on exit.
- soundfile: added symbol required for win32 DLL plugins.
- bochsrc sample: fixed typo.
- VS2013Ex workspaces: partial update (sound stuff only).
2015-02-20 22:39:55 +00:00
Volker Ruppert
27c773d8b5 Fixed possible segfault on exit. 2015-02-20 22:33:06 +00:00
Volker Ruppert
46b21a8373 Some failure case fixes and cleanups in the sound code.
- sound 'file' driver: added failure handling in the file open methods.
- soundmod: initialize default driver with NULL to avoid crash on failure.
- SB16: Fixed crash if no driver is present / removed unused members.
2015-02-20 16:36:26 +00:00
Volker Ruppert
16d2957cd4 Rewrite of the ES1370 wave output code and related changes.
- Implemented wave output using the 'soundfile' driver including dual wave
  output in wavemode 3. Removed now obsolete output file handling and other
  cleanups. The wave input (recording) feature is not affected by the
  wavemode setting.
- Moved VOC file handling to the soundfile code.
- Updated iodev makefile dependencies.
2015-02-19 21:31:18 +00:00
Volker Ruppert
050795ac44 Rewrite of the SB16 midi and wave output code.
- Implemented wave and midi output using the 'soundfile' driver.
- Implemented dual midi/wave output in midimode/wavemode 3.
- Removed now obsolete output file handling and other cleanups.
- The wave input (recording) and OPL3 output features are not affected by
  the wavemode setting.
- TODO: Similar rewrite of ES1370 wave output and related cleanups.
2015-02-19 18:45:43 +00:00
Volker Ruppert
b052ddcc32 Prepared lowlevel sound code for the usage with the 'wavemode' parameter.
- soundlow: use direct output if no PCM callback is registered.
- soundlow/soundfile: re-implemented openwaveoutput() method to support
  runtime changes of wave mode or file (only implemented in the 'file'
  driver, stub for others).
- soundfile: don't initialize mixer thread and PCM callback if thread is
  already running / no output() delay in that case.
2015-02-18 16:34:53 +00:00
Volker Ruppert
b1e8a6369c Some work on the sound module handling and the SB16 midi file output.
- Added the capability to load up to 4 sound drivers and added methods to
  get pointers to the waveout, wavein and midiout services of a driver.
- Rewrite of the SB16 midi file output code. In midimode 2 and 3 the midiout
  service of the 'file' driver is used. Removed obsolete midi file handling.
- Re-implemented the closemidioutput() method to make runtime changes of the
  midi setup work with the new code.
2015-02-17 18:28:25 +00:00
Volker Ruppert
c8207c7a10 Some work on the soundfile 'driver' and the sound configuration.
- waveout: added support for RIFF WAVE format and raw output. The formats
  'voc' and 'wav' are detected by file extension, raw output is used otherwise.
- midiout: added support for raw midi output (no header, no deltatime).
  The 'mid' format is detected by file extension, raw output is used otherwise.
- Added 'midiout' parameter to the global sound option to specify the device
  if necessary. The related SB16 parameter now only specifies the output file.
- TODO: Rewrite of the sound configuration and output code to support dual
  output (device and file).
2015-02-17 08:33:07 +00:00
Volker Ruppert
de08a6ba55 Added initial version of a sound "driver" that writes to file(s).
- New code is based on the dummy sound driver and file output code from SB16.
- The midiout feature supports the MIDI file format.
- The waveout feature currently only supports the VOC format.
TODO:
- Add support for a more detailed sound configuration (waveout to device,
  midiout to a file.
- The waveout feature should support WAV and RAW file formats.
- Move VOC file handling from soundmod.cc to soundfile.cc.
- Finally remove file handling code from sound devices.
2015-02-16 15:47:17 +00:00
Volker Ruppert
f19e91e2f5 Moved speaker beep generator to the speaker code. 2015-02-16 08:48:11 +00:00
Volker Ruppert
3ac8362523 Bugfix for the 'dummy' sound driver: don't add wave packet to the buffer queue
if PCM callback is not active.
2015-02-16 07:36:32 +00:00
Volker Ruppert
79058610d7 Moved midi output support to a separate C++ class. The lowlevel sound module
creates the object and returns a pointer to it. TODO: Rewrite of the sound
configuration to support a more detailed setup (e.g. waveout with alsa,
dummy wavein, midiout to a file).
2015-02-15 18:32:36 +00:00
Volker Ruppert
f84439f8e8 Moved wave input support to a separate C++ class. The lowlevel sound module
creates the object and returns a pointer to it. TODO: Do the same with the
midiout feature.
2015-02-14 17:25:39 +00:00
Volker Ruppert
0e73185efd Moved wave output support to a separate C++ class. The lowlevel sound module
creates the object and returns a pointer to it. TODO: The wavein and midiout
components should also move to separate classes. When finished, it should be
possible to configure the sound support more detailed (e.g. waveout with sdl,
midiout with alsa and the dummy driver for wavein). Creating a separate
module for the output to file(s) is also possible.
2015-02-13 11:30:46 +00:00
Volker Ruppert
52b4c20992 Fixed allocated memory and some cleanup after latest changes. 2015-02-08 10:33:12 +00:00
Volker Ruppert
739d18c48d Changed startwaverecord() to use structure bx_pcm_param_t, too. 2015-02-08 08:53:20 +00:00
Volker Ruppert
fafc153a30 Implemented support for the new mixer thread in the lowlevel sound module 'osx'
(untested). Started code cleanup in the Bochs sound code.
2015-02-07 22:15:22 +00:00
Volker Ruppert
9c1070cbed Implemented support for the new mixer thread in the lowlevel sound module
'alsa'. Cleaned up the code a little bit.
TODO #1: Implement mixer thread support in the OSX sound driver.
TODO #2: Code cleanups in the Bochs sound code.
TODO #3: Resampling support and improvements in the wave recording code.
2015-02-07 18:49:09 +00:00
Volker Ruppert
bfb5ec8cf9 Moved unregister_wave_callback() to the base class (only sdl has special code).
Some cleanups in the soundlow.* code.
2015-02-07 10:50:35 +00:00
Volker Ruppert
1ccd82ab0f Implemented support for the new mixer thread in the lowlevel sound module 'oss'.
Renamed class to bx_sound_oss_c.
2015-02-06 21:31:30 +00:00
Volker Ruppert
d27972cc42 Implemented support for the new mixer thread in the lowlevel sound module 'win'.
- removed disabled code for the sndPlaySound() function.
- removed now obsolete buffer ring for wave output.
- The new mothod waveout() is driven by the mixer thread. For the best results
  you need to disable the 'realtime' sychronization and to find out a usable
  IPS vaöue. The mixer also polls data from the speaker beep generator and
  the OPL3 FM generator.
- TODO: Code cleanup in soundwin.cc, implementation in other sound modules.
2015-02-06 15:57:26 +00:00
Volker Ruppert
1e52f0cbe0 Implemented simple mixing support (addition and clipping).
Fixed minimum value of signed data types.
TODO: Use the mixer thread support in the sound modules (alsa, oss, osx, win).
2015-02-02 21:11:31 +00:00
Volker Ruppert
a0971f02f8 Some more work on the mixer thread framework.
TODO #1: Implement simple mixing (additon and clipping).
TODO #2: Use this feature in the sound modules.
2015-02-01 20:50:20 +00:00
Volker Ruppert
542e55a06b Method startwaveplayback() now completely replaced by set_pcm_params(). 2015-02-01 12:33:21 +00:00
Volker Ruppert
7dbb5185bf ALSA / OSS sound modules: startwaveplayback() rewritten to set_pcm_params()
and some related cleanups.
TODO: Replace startwaveplayback() completely.
2015-01-31 10:48:22 +00:00
Volker Ruppert
d2a85e576f Some work on the lowlevel sound code
- Moved audio buffer code and the pcm_callback function to soundlow.cc.
- Added framework for the mixer thread.
2015-01-30 22:52:56 +00:00
Volker Ruppert
38f85eaacb PCM volume now applied to the output packet in the format conversion code. 2015-01-27 19:33:28 +00:00
Volker Ruppert
12d60f5aaf Some work on the lowlevel sound code.
- soundlow: prepared code for 2 pcm parameter sets:
            emulated: requested by sendwavepacket()
            real: used for the sound output
- soundsdl: startwaveplayback() rewritten to set_pcm_data().
- soundmod: some beep init code fixes.
2015-01-26 21:10:51 +00:00
Stanislav Shwartsman
b5a603c8c7 fixed %d->%u format found by cppcheck (patch by Maxim Derbasov) 2015-01-25 21:24:13 +00:00
Volker Ruppert
23ea69f1b2 Rewrite of the audio buffer handling and small code reorganization. 2015-01-25 20:03:11 +00:00
Volker Ruppert
10cf06afbd Added pcm format conversion support to the win32 and OSX sound modules.
Changed name of the pcm conversion method and minor cleanups.
2015-01-25 11:45:13 +00:00
Volker Ruppert
2c621601cb Moved wave format conversion code to the sound lowlevel base class and added
format conversion support to the ALSA and OSS sound modules.
2015-01-24 21:01:45 +00:00
Volker Ruppert
e37498025e Some small changes in the SDL sound module.
- Store conversion multiplier in the C++ class.
- Moved wave callback structure to soundlow.h for future use.
- Removed unused methods.
2015-01-23 19:10:49 +00:00
Volker Ruppert
add5b1e61d Some work on the Bochs sound support.
- OPL3: Added support to change the samplerate of the generator.
- SDL sound: convert wave packet to 16 Bit signed stereo format.
- Increased the maximum size of a single wave packet for playbck/recording.
2015-01-22 20:28:14 +00:00
Volker Ruppert
3dca0bd8cf Some work in the soundmod beep code and multithreading improvements.
- Beep thread now only started one per simulation.
- Added some more multithreading macros and use them in rfb, vncsrv and soundmod.
- TODO: implement mixer thread and remove beep thread.
2015-01-17 19:53:03 +00:00
Volker Ruppert
dd56a4d1d3 OPL3: improved save/restore support and added SVN Id line. 2015-01-16 18:55:25 +00:00
Volker Ruppert
cf888edf81 Removed most of the incomplete legacy FM OPL emulation part of the SB16.
Only keep the OPL timer code required for chip detection. Started implementing
save/restore support in the OPL3 code ported from DOSBox.
2015-01-15 20:25:27 +00:00
Volker Ruppert
fb265dc532 Ported OPL3 emulation from DOSBox.
The code currently only works with the SDL sound output module and at 44100 Hz,
with 16 bit stereo signed little endian format. FM volume control and
save/restore support are not implemented yet. The legacy code for generating
MIDI notes still works and will be removed when mixing support is implemented
in all sound modules.
2015-01-12 21:20:18 +00:00
Volker Ruppert
f9ff6ece2d Applied some parts of the floppy patch by Ben Lunt.
- The "Read ID" command must return an error when reading with non-existant head.
- Some BX_DEBUG improvements and minor other changes.
2015-01-12 18:52:39 +00:00
Volker Ruppert
fe49c73a6b Some work on the lowlevel sound support.
- Define new structure bx_pcm_param_t and use it as a parameter for the method
  sendwavepacket(). The method startwavepacket() is now called from
  sendwavepacket() in case of a parameter change (temporary solution).
- soundsdl: Replaced waveready() call by some more accurate code for buffer
            space check in sendwavepacket().
- soundsdl: Moved code for reading from audio buffer to a new function.
- soundsdl: Temporarily increase the audio buffer size.
- Preparing the SB16 code for the OPL emulation port from DOSBox.
2015-01-11 20:13:50 +00:00
Volker Ruppert
7bd5eeaa87 Mix the wave input using SDL_MixAudio() (addition and clipping).
NOTE: This function is not correct in case of more than 2 active sources.
2015-01-11 07:57:35 +00:00
Volker Ruppert
15ccdef0d1 Fixed register/unregister wave callback (found while testing OPL code). 2015-01-10 19:36:50 +00:00
Volker Ruppert
fe953485b1 Some more work in the lowlevel sound code.
- Reworked wave callback code to support 2 input sources (no mixing yet).
- Fixed SDL sound output.
- Beep generator fixes.
- Prepared the SB16 code for FM OPL output support (to be ported from DOSBox).
2015-01-08 19:12:01 +00:00
Stanislav Shwartsman
055da948a0 fixed problems found by cppcheck tool (patch by Maxim Derbasov) - second round 2015-01-07 16:17:40 +00:00
Volker Ruppert
2ca192eef7 Some more work in the lowlevel sound code.
- Renamed wavedata callback type.
- Handle sample rate in the beep generator (TODO: handle data format).
- Don't call waveready() in the SB16 code.
- Attempt to fix SDL2 wave output using SDL_LockAudio() / SDL_UnlockAudio().
- SDL specific code in the beep thread no longer needed.
2015-01-05 22:07:03 +00:00
Volker Ruppert
0c205fce26 Some work in the lowlevel sound code.
- Added framework for polling wave data and use it for beep output in sdl.
- Some work in the beep thread code (to be continued).
- Moved macros required for multithreading to bochs.h.
2015-01-04 21:12:41 +00:00
Stanislav Shwartsman
1f4d3e7194 fixed problems found by cppcheck tool (patch by Maxim Derbasov) 2015-01-03 13:53:52 +00:00
Volker Ruppert
c7c92bb62b Fixed OPL chip detection.
- Increment timer counter before checking for overflow.
- Implemented ISA bus delay in the pc_system code and use it for the SB16.
  This makes OPL chip detection work at ips values > 4 Mips.
TODO: OPL chip should use wave output instead of MIDI (maybe port from DOSBox).
TODO: Use isa_bus_delay() for other legacy devices if required.
2014-12-31 12:27:32 +00:00
Volker Ruppert
ee5a416228 Now build rules for all gui and device plugins supported by MSVC nmake depend
on the related configure options.
2014-12-28 19:13:02 +00:00
Volker Ruppert
65d2bb11eb Release all pressed keys when the Bochs window gets back the keyboard focus.
- feature implemented in the wxWidgets gui
- feature not required for legacy SDL (releases keys on focus change)
- removed duplicate code in keyboard.cc
- TODO: implement feature in the win32 gui if required
2014-12-27 09:43:05 +00:00
Volker Ruppert
227da0c6de Release all pressed keys when the simulation window gets back the keyboard
focus. This change will fix some keyboard-related bug reports (DONE for the
x and sdl2 guis / TODO for all others).
2014-12-26 20:25:27 +00:00
Volker Ruppert
e5e535dad2 Fixed slirp compilation on OpenBSD.
TODO: fix slirp support compiled with VS2013.
2014-12-25 17:58:26 +00:00
Volker Ruppert
f0b38ff643 Restore VGA core before the PCI / VBE stuff to avoid crash due to wrong dimension. 2014-12-24 19:44:47 +00:00
Volker Ruppert
88d9ad57bf Attempt to fix the win32 raw serial receive support using a critical section
(untested - code should be enabled after successful testing).
2014-12-23 17:13:29 +00:00
Volker Ruppert
c3b025e224 Fixed possible crash when compiled with VS2013.
TODO: fix slirp support compiled with VS2013.
2014-12-22 14:26:47 +00:00
Volker Ruppert
2ec57b8a6b Fixed some more C++11 warnings. 2014-12-18 17:52:40 +00:00
Volker Ruppert
22665b3225 Re-enable "bulk I/O" repeat speedups extension that has been accidently disabled
about 3 years ago.
2014-12-16 02:26:55 +00:00
Volker Ruppert
3d228c4f61 Fixed some other overlapping memcpy() issues. 2014-12-16 02:26:00 +00:00
Volker Ruppert
f35b9b23c8 Bugfix: use memmove() if source and destination range can overlap (found with valgrind). 2014-12-14 18:53:16 +00:00
Volker Ruppert
c8ef526143 Fixed some warnings. 2014-12-01 17:06:00 +00:00
Volker Ruppert
fba9145f66 Moved sources of the sound lowlevel base class ('dummy' driver) to separate files. 2014-11-24 18:25:14 +00:00
Volker Ruppert
7330f3a61c Changed to way to determine the default lowlevel sound driver (part of the
mixing3.patch by Dawn Teschendorf).
2014-11-22 11:43:40 +00:00
Volker Ruppert
9805324c42 Minor changes in the sound lowlevel code. 2014-11-21 23:03:19 +00:00
Volker Ruppert
524ba46c3d Added the capability to select the operation mode of the VGA update timer.
The realtime mode is enabled by default (patch by Dawn Teschendorf).
2014-11-15 10:22:27 +00:00
Volker Ruppert
3a1bb1f476 Bugfix: sound driver 'sdl' wasn't available if Bochs was compiled with SDL2 gui.
FIXME: wave output doesn't work properly in case of SDL2.
2014-11-14 18:25:37 +00:00
Volker Ruppert
59f5a03af6 Rewrite of the virtual timer code to support both modes at the same timer.
The timers now have a new member 'realtime' and they are driven by the
selected engine. The VGA update timer and the status LED timer now always use
the realtime mode, but the PIT and CMOS RTC depend on the clock options.
2014-10-19 08:54:16 +00:00
Volker Ruppert
3393a17c8f Fixed crash when using a "fixed" type VPC image. 2014-10-14 21:39:05 +00:00
Volker Ruppert
63665aa773 Removed unused define.
TODO: improve virtual timer to make operate in both modes at the same time.
The vga update code should always use the realtime mode and the pit timing
should depend on the clock option.
2014-10-13 18:34:21 +00:00
Volker Ruppert
cebff45fef Fixed two fields in xmit_seg() 2014-10-13 17:09:14 +00:00
Volker Ruppert
bb1def0ad2 Fixed WinPCap function declaration and assignment for MSVC using CDECL and
now using typedefs similar to the niclist utility.
2014-10-04 17:31:57 +00:00
Volker Ruppert
c1e54bcfbf Added USB port specific option 'size' for VVFAT disks (range 128M ... 128G).
If the size is not specified or invalid, it defaults to 504M.
2014-09-29 17:48:30 +00:00
Volker Ruppert
d012670927 Applied the usb_xhci part of the USB patch by Ben Lunt.
Notes by Ben:
This emulates a NEC/Renesas uPD720202 2-port (2 socket, 4-port register sets)
Root Hub xHCI Host Controller.
Many, many thanks to Renesas for their work and effort in helping my research.

I have tested in with my own tests and WinXP Home Edition SP3.

Use port1 and port2 to emulate a Super-speed device, and use port3 and port4
to emulate Low-, Full-, or High-speed devices.

NOTE: The Windows driver for this device uses a proprietary detection
mechanism and we don't have the permission to implement it. That's why it only
works fine with non-Windows guests.
2014-09-28 14:21:22 +00:00
Volker Ruppert
b8a633d0db Setting cylinders to 0 fixes runtime connecting an USB disk with 'vvfat' mode
(disk size is always set to 504M / could be a vvfat specific option).
2014-09-25 19:31:01 +00:00
Volker Ruppert
50e96fa1cd - applied parts of the new USB patch by Ben Lunt
- removed max_packet_size member from USB device structure
- usb_uhci: improved speed info
- updated USB-related documentation
- TODO: review and test the main part of the xHCI changes by Ben
2014-09-22 19:49:39 +00:00
Volker Ruppert
4f3189d5e5 Updated xHCI files to match the latest spec version 1.10 (patch by Ben Lunt) 2014-09-07 18:18:41 +00:00
Volker Ruppert
9b3b792c73 Gui debugger: handle some more settings in INI file
Slirp: fixed copy-and-paste error
2014-08-30 07:14:19 +00:00
Volker Ruppert
7ba82cab9f Write enhanced debugger gui settings to config file on exit and read them in
the init code. Started with the SeeReg[] array values. Some other setting could
be added later. The parser code is based on the slirp config parser.
Slirp: fixed possible segfault if the value for a parameter is missing.
2014-08-24 14:28:42 +00:00
Volker Ruppert
73d5f6e626 Attempt to fix a compilation error on OSX. 2014-08-23 14:46:31 +00:00
Volker Ruppert
494ed30e95 Some fixes for plugin support with VS2013Ex
- creating extra manifest for bochs.exe no longer needed
- cleaning up temporary manifest files no longer necessary
2014-07-26 06:54:34 +00:00
Volker Ruppert
e44e9c57d6 Fixed possible crash on Windows (double free()) 2014-07-09 23:49:53 +00:00
Stanislav Shwartsman
e2e549c675 fixed MSVCPP warning 2014-07-09 15:39:47 +00:00
Volker Ruppert
3c0ad43092 Continued preparing Bochs for SDL2 support
- added new symbol BX_WITH_SDL2 and prepared build system
- TODO #1: add new option --with-sdl2 to configure script
- TODO #2: add new file sdl2.cc (porting seems hard to do - writing from scratch
  might be better)
2014-06-23 19:37:58 +00:00
Volker Ruppert
6f75ceadbc Removed sources of legacy tools bxcommit and bximage_old and updated MSVC workspaces 2014-06-19 08:57:28 +00:00
Volker Ruppert
e0ece92d06 Fixed hdimage mode 'dll' for MSVC with /Gr option set 2014-06-09 07:14:23 +00:00
Volker Ruppert
773ac518b3 Fixed broken MSVC plugins support (many CDECL additions required)
TODO: check for remaining CDECL issues (hdimage mode 'dll') and update project files
2014-06-08 08:40:08 +00:00
Stanislav Shwartsman
84bb623af8 speedup visual studio build by almost 20% by adding /Gr compiler option 2014-06-04 19:46:21 +00:00
Volker Ruppert
353e34f338 Fixed possible segfault when accessing BXPN_SOUND_WAVEIN with base argument
(patch by Dawn Teschendorf)
Added partial summary to CHANGES
2014-05-26 19:39:15 +00:00
Volker Ruppert
42afaef2ba Load floppy plugin after the display plugin and simplified related init gui code. 2014-05-26 17:04:02 +00:00
Volker Ruppert
aa7db4ba08 SB16: fixed audio distortion when playing stereo WAV files (patch by Dawn Teschendorf) 2014-05-23 21:39:03 +00:00
Volker Ruppert
10a39662b8 Turn on beep after restore if necessary. 2014-05-10 06:50:06 +00:00
Volker Ruppert
425688d014 Using bx_param_string_c method isempty() simplifies code and fixes panic in NE2000 ISA. 2014-05-09 13:49:42 +00:00
Volker Ruppert
ed41df332a Support for compiling plugin version of Bochs with MSVC nmake now complete.
- embedding combined manifest makes BOCHS.EXE usable
- list of DLL plugins now depends on the pci and debugger options
- 'make clean' now removes the generated manifest files
- renamed variable for external rules
- documentation update
2014-05-03 10:58:10 +00:00
Volker Ruppert
95585bf719 Initial version of nmake DLL plugin support in iodev. The plugin DLL set is now
complete and usable with the BOCHS.EXE built with the IDE.
TODO #1: fix BOCHS.EXE built with nmake (manifest issue)
TODO #2: make the currently fixed DLL plugin list variable
2014-05-02 17:14:16 +00:00
Volker Ruppert
9c8e43b75c Added failure handling to beep_on() and the ALSA PCM output methods (patch by
Dawn Teschendorf)
2014-05-02 06:38:49 +00:00
Volker Ruppert
c7a72484c8 Execute this code only if the wx gui is selected. 2014-05-01 08:42:04 +00:00
Volker Ruppert
900c0fddc4 Temporarily added targets for MSVC nmake plugins in network, sound and usb
sections. A better solution must be found for the basic set of device plugins
in iodev that don't require special rules.
Switched back to the original gui macro naming for linking plugins.
2014-04-27 07:46:33 +00:00
Volker Ruppert
95346323af Added MSVC nmake support for the gui plugins nogui, rfb and win32.
Updated comments about DLL plugins in makefiles
2014-04-25 16:07:26 +00:00
Volker Ruppert
92b529ee75 The floppy plugin needs a special rule for MSVC nmake
Temporarily added a voodoo plugin rule to have the iodev/display section complete.
2014-04-24 20:10:55 +00:00
Volker Ruppert
1169076fc0 Fixed possible floating point exception in the beep thread. Instead of setting
'beep_bytes' to 0, now using new 'beep_control' variable (2 = run beep loop,
1 = request beep loop exit, 0 = beep loop has ended).
2014-04-24 17:36:13 +00:00
Volker Ruppert
04d1cae754 Fixed "nmake clean" for the slirp stuff.
Added *.exp and *.lib to "clean" targets.
2014-04-22 16:50:11 +00:00
Volker Ruppert
eb484919fe Next step for plugin support with MSVC nmake: device plugins that need special
rules can be built now (keyboard, pit, gameport, serial, vga, svga_cirrus,
hdimage, netmod, soundmod, usb_common). The generated DLLs are usable with the
BOCHS.EXE built with the IDE, but the nmake won't work at all yet.
2014-04-21 18:43:22 +00:00
Volker Ruppert
87b6149ed0 First step for compiling plugin DLLs with MSVC nmake. The hdimage plugin
(bx_hdimage.dll) can be built now. All plugins that require special rules
could be fixed for nmake in a similar way.
TODO: find a way to compile plugins with standard rules (GNU make uses bx_%.dll
in that case, but MSVC nmake doesn't support this syntax).
2014-04-21 06:58:15 +00:00
Volker Ruppert
2d63afca12 Slirp: added support for up to 5 'hostfwd' redirection rules.
Fixed MSVC compilation error.
2014-04-18 17:14:32 +00:00
Volker Ruppert
a5c687dfb0 Slirp: added host forwarding feature for host-to-guest access.
TODO: add support for multiple port redirections
2014-04-18 09:27:48 +00:00
Volker Ruppert
16e0130753 Switch back to the original 'vnet' ARP implementation.
Improved Slirp documentation.
2014-04-13 13:32:52 +00:00
Volker Ruppert
2777ac0dc5 Added separate target for MSVC plugins (causing an error for now) 2014-04-06 07:22:16 +00:00
Volker Ruppert
777fcd8372 Fixed timestamp of "growing" mode base images with an "undoable" redolog. 2014-04-04 19:14:32 +00:00
Volker Ruppert
fcc6d01a18 Removed default constructor and initialize member in the specific one (fixes
possible segfault found on Windows).
2014-04-04 18:44:57 +00:00
Volker Ruppert
64385beaa4 Renamed "slirp_new" to "slirp" (source file, symbols, classes, docs) 2014-04-02 17:38:09 +00:00
Volker Ruppert
fee79a2837 Removed the "slirp backend" networking module from the Bochs sources. It had
required an external binary and it couldn't be ported to Windows. Now the new
builtin and portable slirp support based on Qemu's implementation is almost
stable and all the 'vnet' DHCP and TFTP features have been ported to the new
slirp module.
TODO: rename all the "slirp_new" stuff to "slirp"
2014-04-01 18:18:04 +00:00
Volker Ruppert
892cb61dc7 Some work on the Slirp DHCP support
- removed obsolete local variables that made the hostname and bootfile options fail
- store requested hostname as a string to simplify the code
- check free space while processing the parameter list
- setting the max. DHCP message size is not supported yet (send error to log)
2014-03-31 20:58:29 +00:00
Volker Ruppert
061339b57b Rewrite of the DHCP option handling including support for a parameter list,
host name, lease time and other options (ported from Bochs 'vnet' DHCP server).
2014-03-30 18:54:50 +00:00
Volker Ruppert
3e280ae594 Fixed MSVC warnings 2014-03-29 15:23:49 +00:00
Volker Ruppert
31e10bb527 TFTP session handling now using pointers for allocate and find. 2014-03-28 20:08:56 +00:00
Volker Ruppert
6b8d425a7f Some work on the Slirp TFTP server
- copied some defines from osdep.h to fix compilation on all Windows build systems
- ported TFTP option handling from the Bochs 'vnet' TFTP server
2014-03-27 21:09:09 +00:00
Volker Ruppert
5257e253ae Added broadcast IP address and server name "slirp" to DHCP reply.
TODO: port more features from the Bochs 'vnet' DHCP server to Slirp.
2014-03-26 17:01:07 +00:00
Stanislav Shwartsman
ae936e086f fixed compilation err under cygwin 2014-03-25 20:09:48 +00:00
Volker Ruppert
eb3f567f4a Added basic write support to the Slirp TFTP server.
TODO #1: implement all features of the existing (vnet) TFTP support in Slirp.
TODO #2: make the slirp DHCP server work like the vnet one.
TODO #3: finally remove the slirp backend and rename the new one to "slirp".
2014-03-24 20:36:50 +00:00
Volker Ruppert
5ca0a003b6 Configure script and config.h.in reorganization: put all device-related config
options in one section and added busmouse option.
2014-03-23 12:00:58 +00:00
Volker Ruppert
8159a00b3e Added access() check before detecting image mode to get an accurate panic
message in case of failure.
2014-03-23 09:19:44 +00:00
Volker Ruppert
9052c65049 Added support to specify the IP address of the SMB server.
Handle special value "none" for the slirp.conf to avoid error message.
2014-03-21 18:47:14 +00:00
Volker Ruppert
159228db5d Slirp: added SMB support for non-Windows platforms. The new slirp.conf option
'smb_export' can be used to set up shared folder. TODO: the location of 'smbd'
and IP address of the SMB server is currently hardcoded.
2014-03-20 18:02:44 +00:00
Volker Ruppert
798596c4c0 Slirp: added sanity check for correctly packed networking structures.
Cygwin shortcut script: option -mno-cygwin is obsolete and -mno-ms-bitfields is
required for Bochs as of GCC version 4.7.
2014-03-16 12:13:52 +00:00
Volker Ruppert
4a78dffb24 Cleaned up disk sector offset variables used for the seek latency feature. Now
using names similar to the cdrom ones.
2014-03-11 18:29:32 +00:00