Commit Graph

11947 Commits

Author SHA1 Message Date
Volker Ruppert
22fabb599a Started bx_bool to bool type changes in the Bochs core. 2021-01-30 15:16:00 +00:00
Stanislav Shwartsman
bc680908ba fix compilation with debugger enabled 2021-01-30 08:58:42 +00:00
Stanislav Shwartsman
f79d6df458 strip redundant info from tigerlake cpuid text file 2021-01-30 08:45:34 +00:00
Stanislav Shwartsman
1bf18b8aae ! CPUID: Added TigerLake CPU definition (features CET and CLWB support)
- CPU code refactor, remove uses of bx_bool datatype and use C++ classic bool instead.
  This enable better compiler optimizations and reduce binary size
2021-01-30 08:35:35 +00:00
Volker Ruppert
880ee1832a Some Bochs plugins support and VGA extension option changes.
- Changing VGA extension to "voodoo" did not work in the config interface.
  Moved plugin loading to the string parameter handler and added plugin
  unloading case.
- Unloading "voodoo" VGA plugin resets pluginVgaDevice to stubVga.
- pluginUnregisterDeviceDevmodel() now supports core plugins.
- Some other small plugin related changes.
2021-01-27 20:06:02 +00:00
Volker Ruppert
d46c80562e Some wx gui related changes.
- Moved wx gui plugin entry point to wx.cc, so we can use the macro
  PLUGIN_ENTRY_FOR_GUI_MODULE to be compatible with the other guis.
- Updated gui Makefile dependencies.
2021-01-26 07:22:58 +00:00
Volker Ruppert
3f760e2900 Some work on the Bochs plugins support.
- Improved macro definitions for plugin entry points.
- Forward declarations of plugin entry points are only required when plugin
  support is off.
- Improved panic message for the case when plugin entry point is not found.
2021-01-24 19:47:04 +00:00
Volker Ruppert
74deb16b44 Since externally developed optional device plugins (AKA "user plugins") can be
loaded in bochsrc with "plugin_ctrl" or with their own name, the user plugin
option and the special cases for PLUGTYPE_USER are no longer needed. Updated
example patch to make it work with the latest SVN code.
2021-01-24 10:16:22 +00:00
Volker Ruppert
8db0a2b001 Replaced the plugin init / fini functions with one single function called
plugin_entry(). The additional boolean argument "init" is used to select the
requested action. The entry points still have unique names for compatibility
with the "non-plugin" compilation. Added macros for setting up these names
(e.g. PLUGIN_ENTRY_FOR_MODULE for device plugins).
2021-01-23 12:06:11 +00:00
Volker Ruppert
e5c68dd4ac Rewrite of the optional plugin control feature.
- Now that we know about all available plugins at startup, the bx_list_c object
  "plugin_ctrl" contains a fixed number of bx_param_bool_c objects representing
  the requested status (1 = load). It is verified at simulation startup.
- The config interface creates two text lists (textconfig) or list boxes (win32,
  wx) from it to show the remaining available and the loaded plugins. Loading
  and unloading is performed immediately and plugins may install / uninstall
  options in other menus / dialogs.
- Modified the "non-plugin" code to make the optional plugin control work very
  similar in this mode.
2021-01-21 18:10:40 +00:00
Volker Ruppert
9e95491fb5 Some work on the Bochs plugin API.
- bx_load_plugin() now returns the status of the operation.
- Plugin load failures are now correctly handled by the plugin code (unloading
  if necessary, then panic).
2021-01-18 19:57:11 +00:00
Volker Ruppert
1733076e4f Fixed segfault in case Bochs app is terminated before starting simulation. 2021-01-17 17:33:49 +00:00
Volker Ruppert
81ecfcb10f Improved cross compiling support on Linux for Windows.
- In case of cross compiling of the win32 gui, use the environment variable
  WINDRES for the name of the resource compiler.
- Added example shortcut script for cross compiling on Linux for Windows.
2021-01-17 10:54:18 +00:00
Volker Ruppert
d61e3eca9b Moved image creation code for sparse, growing, vmware4 and vpc mode images from
the main bximage code to the device_image_t class / file it belongs to (enabled
in the BXIMAGE case only).
2021-01-16 12:47:02 +00:00
Volker Ruppert
59ee157575 Some work on the hdimage code for bximage support.
- Enabled self registering code for the bximage case to simplify mode detection.
- Fixed vpc image format check for mode detection case.
2021-01-10 10:18:23 +00:00
Volker Ruppert
38a04afe8e Some work on the bximage utility.
- The selected / detected disk image mode is now stored as a string constant to
  simplify code (same as Bochs core).
- Changed command line option to select operation mode to "-func=X" to avoid
  confusion with disk image mode.
- Documentation updates.
2021-01-09 16:51:52 +00:00
Volker Ruppert
afcda20b83 Some work on the hdimage mode detection code.
- In plugin mode make sure all hdimage plugins are loaded for mode detection.
- Implemented image mode detection via hdimage_locator_c.
- TODO: use the new code for bximage, too.
2021-01-08 21:17:47 +00:00
Volker Ruppert
04c767d240 Some fixes for wx "second run" support. 2021-01-08 19:46:31 +00:00
Volker Ruppert
127fd003cc Some more work on the Bochs plugins support.
- Added support for loading all plugins of one type using wildcard "*".
- Unloading no longer removes the plugin object. Now the member "loaded" is
  set to 0 and the type of a device plugin is reset.
- Added plugin_cleanup() function to remove plugin objects on Bochs exit.
- Some other related cleanups in the plugins code.
2021-01-08 19:04:41 +00:00
Volker Ruppert
3602ec1cd7 Added support for converting VDI images to another format with bximage. 2021-01-08 13:19:08 +00:00
Volker Ruppert
7c8748a661 Removed stub for the "external" disk image mode. It was designed for
implementing disk image support with an external C++ class. With the new code
it's now easier to implement support for additional disk images formats, so we
don't need the old stub anymore.
2021-01-07 20:50:34 +00:00
Volker Ruppert
30519781eb Fixed deadlock in GTK debugger gui pointed out in SF patch #557. 2021-01-06 12:18:35 +00:00
Volker Ruppert
5ffb319df1 Rewrite of the disk image mode handling. Disk image modes are now stored as
string constants instead of hardcoded values. Available modes are detected at
Bochs startup and stored in a string array before initializing options. In the
plugins case additional modes are read from the plugins list. If plugins are
off, the hdimage_locator_c registry is used. Related changes in all parts of
Bochs that need the hdimage stuff.
TODO #1: Network and sound drivers could be handled in a similar way.
TODO #2: Make disk image mode detection work again in plugins mode.
2021-01-05 21:57:13 +00:00
Volker Ruppert
d48ca7e2a4 Fixed compilation with plugin support disabled. 2021-01-02 21:05:56 +00:00
Volker Ruppert
2ee6a0b0bf Regenerated configure script. 2021-01-02 20:50:37 +00:00
Volker Ruppert
4f311f0618 Some work on the Bochs plugins support.
- Added suffix "_gui" to the base name of display library plugins.
- Added new function plugins_search() that browses the plugin folder(s) and
  detects the type from the library name. Plugins with no prefix or suffix are
  treated as i/o device plugins. The plugin_load() function uses this database.
- Some related fixes and cleanups.
2021-01-02 20:49:39 +00:00
Stanislav Shwartsman
b7855153a0 new disasm: print branch target in 32-bit mode as 32-bit value 2021-01-02 16:48:13 +00:00
Stanislav Shwartsman
e15012cfcf fix code duplication in <limiting max cpuid leaf to 0x02 for winnt> feature 2021-01-02 16:28:51 +00:00
Stanislav Shwartsman
c33308731e fixed disasm of shift/rotate with implicit shift count=1 2021-01-02 15:12:29 +00:00
Stanislav Shwartsman
1a20dbc7f7 fixed bug in new disasm 2021-01-02 14:32:52 +00:00
Stanislav Shwartsman
5755328ff1 fixed compilation warnings in bxdisasm.cc 2021-01-02 14:27:11 +00:00
Stanislav Shwartsman
62511c3101 allow dbg_fetch_mem function in broader scope 2021-01-02 14:19:28 +00:00
Stanislav Shwartsman
980cfc1903 fixed compilation with no debugger configured in 2021-01-02 14:09:03 +00:00
Stanislav Shwartsman
bea432dacb fixed compilation with no debugger configured in 2021-01-02 14:04:35 +00:00
Stanislav Shwartsman
154c06b11b regen configure script 2021-01-02 13:48:17 +00:00
Stanislav Shwartsman
11fd7a369c update CHANGES 2021-01-02 13:46:55 +00:00
Stanislav Shwartsman
41ea50ba22 complete transition to new disasm, remove old disasm from source code 2021-01-02 13:43:10 +00:00
Stanislav Shwartsman
2cbf3577ce update CHANGES 2021-01-02 12:33:04 +00:00
Stanislav Shwartsman
a8e066ede7 remove debugger command for disasm constant hex print mode, was not used and new disasm doesn't support it 2021-01-02 12:12:02 +00:00
Stanislav Shwartsman
2f3adf849c enable syntax switch with new disasm also in GUI debugger, switch to new disasm by default everywhere 2021-01-02 12:04:52 +00:00
Stanislav Shwartsman
bc2e9fb177 rename old disasm methods: use GAS (GNU assembly) for AT&T syntax naming 2021-01-02 11:55:51 +00:00
Stanislav Shwartsman
22774a0534 support for AT&T (GAS) disasm style in new disassembler 2021-01-02 11:12:23 +00:00
Volker Ruppert
578d40e301 Fixed include file name. 2020-12-30 17:58:51 +00:00
Volker Ruppert
c99bd49f34 Some work on the hdimage plugin support.
- Renamed vpc-img.* files to vpc.* and removed hack for image mode name conversion.
- Added suffix "_img" to all disk image mode plugin base names. This is important
  for the future implementation of a plugin enumeration at Bochs startup.
2020-12-30 17:56:27 +00:00
Stanislav Shwartsman
c8eec65f04 fix code indentation 2020-12-30 17:23:12 +00:00
Stanislav Shwartsman
a4a2562c8d fixed compilation with no debugger enabled - will be cleaned up later 2020-12-30 16:58:17 +00:00
Stanislav Shwartsman
d2896bbd2a fixed compilation with no debugger enabled 2020-12-30 14:48:34 +00:00
Stanislav Shwartsman
bb568997c9 use new disasm wrapper method in more place 2020-12-30 14:09:25 +00:00
Stanislav Shwartsman
72db10d766 fix symbols display within disasm for new disassember, integrate new disasm with GUI debugger properly 2020-12-30 12:23:19 +00:00
Stanislav Shwartsman
79db3896d4 enable symbols for branch targets and JMP/CALL direct ptr instructions in new disassembler (still to be tested), attempt to use new disassembler in GUI debugger 2020-12-30 11:36:33 +00:00
Volker Ruppert
b880fb2975 Rewrite of the hdimage plugin code.
- Common hdimage code, lowlevel cdrom code and the classes for the Bochs "own"
  image modes (e.g. flat, sparse, growing") are now a part of the Bochs core.
- All classes for image modes present in separate files are now built as
  plugins with the same self register mechanism as network, sound and usb
  modules. Defined new plugin type PLUGTYPE_HDIMAGE.
- Temporarily disabled the base image format detection of the undoable/volatile
  modes for the "external" modes in the plugins case.
- TODO: Bochs should know about all of the available plugins and their
  capabilities right after startup, but before the configuration stage.
2020-12-27 17:26:33 +00:00
Stanislav Shwartsman
d1d65ce49f fixed disasm of adcq instruction 2020-12-26 18:36:22 +00:00
Volker Ruppert
269d4dd30d Removed unnecessary include. 2020-12-26 08:53:06 +00:00
Volker Ruppert
b0cee9a038 Added the sample config file for the 'vnet' networking module to install list. 2020-12-26 08:31:16 +00:00
Volker Ruppert
518cedb602 Some more USB device fixes.
- Removed not functional secondary interface from USB keyboard / keypad.
- Fixed mouse wheel function of the USB tablet.
2020-12-23 16:07:06 +00:00
Volker Ruppert
66dfa8fc90 Two small USB device changes.
- Changing LOG_THIS symbol fixes USB device logging.
- USB HID: removed unused variable.
2020-12-22 14:09:57 +00:00
Volker Ruppert
14baa621c5 Some USB mouse fixes.
- Now all mouse events create a mouse packet in buffer (fixes slow movement).
- Fixed a warning.
2020-12-21 11:39:33 +00:00
Volker Ruppert
a96e1779ed Added buffer for mouse / tablet button events to make sure all changes are sent
to the guest. Double click are now recognized.
2020-12-21 08:31:49 +00:00
Volker Ruppert
68dd8e6e75 Some work on the USB keyboard / keypad support
- Added USB HID idle timer.
- Don't modify status indicators by default keyboard if owned by removable one.
2020-12-20 09:07:49 +00:00
Volker Ruppert
fc39da7d55 Moved paste feature and keyboard / mouse runtime handlers to the devices code.
The paste feature now basically works with the USB keyboard.
Prepared improvements for the keyboard indicator handling.
2020-12-19 11:00:36 +00:00
Stanislav Shwartsman
47f72f5ff7 fixed disasm of symbolic labels when target print is not required 2020-12-19 06:35:02 +00:00
Volker Ruppert
c644b826f5 Some changes for the USB keyboard support.
- Added buffer for maximum 16 key events.
- PS/2 keyboard now sets the changed indicators only.
- Added support for the yellow status indicator in the win32 gui.
2020-12-16 20:04:47 +00:00
Volker Ruppert
0660b7e313 Some USB keyboard related changes.
- Added HID code for the menu key.
- Added support for the yellow status indicator in the rfb and vncsrv guis.
- Cleaned up status indicator code in SDL, SDL2 and X guis.
2020-12-16 12:24:35 +00:00
Stanislav Shwartsman
e6822c81a1 fixed behavior of MMX PSRAW/PSRAD instructions when shift count is zero - still has to invalidate x87 tags for dest register 2020-12-15 20:05:54 +00:00
Volker Ruppert
4c81e496b6 Some work on the USB keyboard / keypad emulation.
- Unified USB keyboard and keypad code. Removed the keypad lookup table.
- Moved keyboard indicator stuff to the devices code and use it for both the
  USB and legacy keyboard device. In the USB case a different color is used.
- In the SDL, SDL2 and X guis added new status indicator color yellow. It is
  designed to be used by the USB keyboard (write flag 1 and "auto_off" flag 0).
- Added missing sysmbol to the German X11 keymap table.
2020-12-15 11:29:36 +00:00
Volker Ruppert
250215b2f7 Added USB keyboard support as an extension to the numeric keypad.
TODO #1; Add some missing HID key codes.
TODO #2: Add key event queue to avoid losing events.
TODO #3: Unify keyboard and keypad code.
TODO #4: Support multiple non-modifier keys pressed at the same time.
TODO #5: Share keyboard indicators with the legacy PS/2 keyboard.
2020-12-14 16:33:20 +00:00
Volker Ruppert
2b5ef99a56 Some work on the USB keypad support.
- Added NUMLOCK to the table of supported keys.
- Temporarily added status bar item for the keypad NUMLOCK indicator.
- TODO: Add new HID device "keyboard" with all keys supported.
2020-12-13 20:35:41 +00:00
Volker Ruppert
8dc51f2cb7 Fixed PS/2 keyboard usage. 2020-12-13 16:30:42 +00:00
Volker Ruppert
520ca1459e Some keyboard related changes.
- Added new devices method register_default_keyboard() and handle keyboard
  events similar to the mouse stuff.
- Prepared removable keyboard support for the "paste bytes" feature.
- Store keyboard type in device object to avoid reading parameter at runtime.
- Related code cleanups.
- TODO #1: Extend USB keypad to full featured keyboard.
- TODO #2: Paste bytes support for USB keyboard.
2020-12-12 21:27:43 +00:00
Volker Ruppert
575ebe9cad Simplified floppy / cdrom toolbar button handlers and related cleanups. 2020-12-12 12:32:26 +00:00
Volker Ruppert
4d6a88ec94 Fixed dbg_fetch_mem() and dbg_set_mem() similar to other memory access methods.
- Always apply the A20 setting to the requested address.
- Fixed the conditions for SMRAM access.
- Added support for memory handlers and removed direct VGA memory access.
- Added support for reading from BIOS flash memory.
2020-12-08 19:52:39 +00:00
Volker Ruppert
4e23b04d15 Accessing function bx_split_option_list() via siminterface method fixes MSVC
plugins compilation.
2020-12-04 21:09:18 +00:00
Volker Ruppert
c12c8324dc Added config parameter to set up advanced PCI options as comma-separated
values. Now it is possible to disable ACPI or HPET in case the i440FX chipset
is selected.
2020-12-04 17:04:40 +00:00
Volker Ruppert
6692664a3b Added helper function bx_split_option_list() to reduce code duplication.
It creates an array of strings from a string containing a comma separated list
of options. Now using this function for display library options, USB port
options and ROM image options.
2020-12-03 20:30:10 +00:00
Volker Ruppert
1ae98a9f66 Unified code for mapping PCI slot to device number. By default the first slot
is mapped to device number #2, but for the i440BX chipset we are using #8
(expected by real BIOS when testing and some timer later added support for it
in Bochs BIOS).
2020-12-01 19:47:27 +00:00
Volker Ruppert
6d55094650 Fixed ROM checksum code: added missing check for the upper 64k of Bochs BIOS. 2020-11-30 18:08:29 +00:00
Volker Ruppert
87d660e652 Fixed some MSVC warnings. 2020-11-30 08:50:22 +00:00
Volker Ruppert
90dc9f7468 Setting up options without specifying display library is now also supported. 2020-11-29 13:37:07 +00:00
Volker Ruppert
11318c98f3 Improved flash memory support for the BIOS EEPROM (now emulating Intel(tm)
flash chips.
- 28F001BX-T for 128k BIOS image (two 4k parameter blocks below boot block)
- 28F002BC-T for 256k BIOS image (two 8k parameter blocks below boot block)
- Only tested updating ESCD by external BIOS images. Bochs BIOS currently
  writes configuration to shadow RAM.
2020-11-29 08:47:13 +00:00
Volker Ruppert
aaf8c9d4e4 Removed "svga" display library designed for the obsolete Linux SVGALib.
The latest release is from 2001 and it will not work on modern Linux systems.
Parts of the SVGALib code have been moved to the Linux kernel and the X11 and
SDL libraries are using it as a video driver.
2020-11-25 07:56:32 +00:00
Volker Ruppert
d357de7baf Some work on the term gui.
- Now cursor can appear in two different modes (if supported by terminal)
- Simplified text cursor handling.
- Show a status bar if terminal has enough lines for it. Added "show IPS" output
  there unless display library option "hideIPS" is used.
2020-11-23 10:14:13 +00:00
Volker Ruppert
08b120c5f8 Some code cleanup after implementing new text update API. 2020-11-22 09:02:38 +00:00
Volker Ruppert
db02efc65f Some small changes in the floppy emulation.
- Reading data register without result present returns the last byte of the
  previous result and enters result phase just like an invalid command.
- Changed name of bit #7 of MSR to RQM (from spec) and some small cleanups.
2020-11-21 17:32:06 +00:00
Volker Ruppert
4309c7afa6 Implemented new text update API in the win32 gui. 2020-11-19 16:32:22 +00:00
Volker Ruppert
fd27f21940 Implemented new text update API in the sdl, sdl2 and wx guis. 2020-11-17 15:48:15 +00:00
Volker Ruppert
45507705bf Implemented new text update API in the X gui and some related fixes.
- The X gui behaviour should be unchanged.
- RFB / vncsrv: cursor shape fixes.
- Changed format of the font parameters to fix "double width" characters.
- Restore guest charmap after leaving gui console.
2020-11-16 15:39:35 +00:00
Volker Ruppert
b94fff0501 Implemented new text update API in the vncsrv gui and console cursor fix.
- Now the vncsrv gui supports the VGA features split screen and h/v pel panning.
- Fixed new API cursor blinking in the gui console.
2020-11-15 16:16:14 +00:00
Volker Ruppert
6202244991 Implemented a new text update API in the common gui code and enabled it for RFB.
- Now using text_update_common() for the new text update API in addition to the
  graphical text snapshot feature.
- Drawing to snapshot buffer moved to new method draw_char_common().
- A gui using the new text update API only needs to implement the new method
  draw_char(). The method set_font() is optional and it can be used to update
  font bitmaps / pixmaps.
- Modified the RFB gui to use the new API. Now the VGA features split screen
  and h/v pel panning are supported by the RFB gui. The legacy text_update()
  method is now empty but it must be present for compatiblity.
- TODO: Implement new API in some other guis to reduce code duplication.
2020-11-15 09:55:38 +00:00
Volker Ruppert
1209ec7d5a It's enough to set the refresh flag once in flush(). 2020-11-13 08:27:51 +00:00
Volker Ruppert
e6f0e7f328 Fixed another issue reported by valgrind and some tab2space changes. 2020-11-11 08:14:02 +00:00
Volker Ruppert
0c24af112d Fixed two issues found with valgrind: Since runtime parameters are revoved by
the destructor, the main parameters must be removed after deleting device object.
2020-11-08 09:58:15 +00:00
Volker Ruppert
691461df4d Some work on the flash memory emulation for the BIOS ROM EEPROM. According to
the flashrom project a JEDEC chip needs to be emulated here. Tests with BIOS
images designed for the i440FX chipset are okay, but for the i440BX chipset
some more commands need to implemented.
2020-11-07 16:31:46 +00:00
Volker Ruppert
6395c52286 Remove newly created packet if the TD PID is invalid. 2020-11-03 18:54:29 +00:00
Volker Ruppert
b91f907a1c Some BIOS ROM related changes in the memory code.
- Store BIOS ROM start address and use it instead of hardcoded BIOS_MASK.
- Added stub for BIOS ROM access switches.
- Verify checksum of legacy Bochs BIOS, too.
2020-11-01 16:13:38 +00:00
Volker Ruppert
2293308afe BIOS ROM write support requires a suitable flash memory emulation for the
selected PCI chipset. When testing Bochs with a real BIOS image the programming
sequence for the ESCD unexpectedly overwrites some BIOS locations and it fails
to reboot. For the i440BX AGP chipset development it is required to test with
a real BIOS image, but currently reporting "unknown flash type". For now I have
added two stubs with unmodified behaviour.
2020-10-30 17:34:12 +00:00
Volker Ruppert
e9fa62f44f Added BX_ERROR for the currently unsupported BIOS ROM enable switches (not used
by Bochs BIOS).
2020-10-30 16:21:23 +00:00
Volker Ruppert
bab68dbb2b Some small changes on the Voodoo Banshee emulation.
- Access to VGA registers via Banshee address space is not memory mapped.
- Added BX_ERRORs for unimplemented unaligned access to i/o registers.
- Access to the unimplemented YUV address space now causes BX_ERROR.
- Removed some TODO comments.
2020-10-26 18:22:15 +00:00
Volker Ruppert
f8024d3819 Added win32 gui feature "autoscale" for the fullscreen mode, too (including
some fullscreen fixes and cleanups).
2020-10-25 16:23:42 +00:00
Volker Ruppert
bed49deb86 Added win32 display library option "autoscale" to scale a small simulation
window by 2, 4 or 8 depending in desktop window size (window mode only).
Modified special stretching case for the CO40 text mode.
2020-10-23 13:14:34 +00:00
Volker Ruppert
f62baaa7fd Small fixes and cleanups in the text_update() code. 2020-10-20 16:20:33 +00:00