Commit Graph

269 Commits

Author SHA1 Message Date
Volker Ruppert
0f738ed4ba Fixed crash of Windows 98 SE setup with BIOS-bochs-latest (issue #334).
Ported some lines of ACPI code from SeaBIOS.
2024-08-13 16:57:31 +02:00
Volker Ruppert
4d5d31170c BIOS: Fixed lslul helper function similar to lsrul. 2024-05-09 09:41:06 +02:00
Volker Ruppert
49736ddcf0 More accurate fix for the BIOS issue #268.
- lcmpul needs to preserve EAX and EBX, since the result is read from status flags.
- lsrul should not preserve EBX but ECX. The loword of the argument and result is in AX
  and the hiword in BX. Now doing the shift operation with the 16-bit registers
  (lsr bx / rcr ax).
- TODO: the other helper functions need to be reviewed.
2024-05-09 00:46:11 +02:00
Volker Ruppert
140e2e96ae Bochs BIOS: helper functions lcmpul and lsrul need to preserve EBX.
This fixes issue #268.
2024-05-06 16:28:48 +02:00
Volker Ruppert
aff2b42203 Added panic for legacy BIOS if there is no VGA ROM at C000:0000h.
This is a workaround for issue #155.
2024-03-28 18:55:04 +01:00
Volker Ruppert
9177c93e4e Preparing Bochs release 2.8. 2024-03-10 07:59:37 +01:00
Volker Ruppert
35c39e46c0 Added BIOS capabiölity to enter keycode with ALT + numeric keypad. 2023-12-10 10:05:54 +01:00
Stanislav Shwartsman
ffc722f4e8
Porting #SF patch #565 Real Time Clock /CMOS fix (#4)
by Michele Giacomone

Detailed description:

  -Observed issues

   Due to some limitations only dates between 1980 and 2038 can be
   used in a reliable way.
   Also, bochs incorrectly assumes a linear correspondence between
   the data returned by the <time.h> functions localtime() and
   mktime(), and isn't setting the latter properly.
   Bochs keeps its internal time value dependent to these functions
   after setup, assuming that their internal settings won't change
   on the go - which is not the case.
   In my OS, and in my timezone, this leads to incorrect startup values
   for 5 months each year and unreliable values if the simulation is
   kept going for a long time. (a feedback between localtime() and
   mktime() is created which keeps shifting back the time)
   Also, the RTC simulation is not realistic since the clock fixes
   itself across DST changes, without updating any DST related flag,
   a behavior that no guest OS expects.

  -Proposed fix

   This is implemented in such way that no bochs' previous behavior
   is changed, a part from the broken ones, with legacy in mind
   == the user can keep using bochs exactly as before knowing nothing
      of this patch

   +Make the internal s.timeval variable a Bit64s, so it can fit all
    values that the cmos can correctly represent, reported below:
    MIN     setting  -62167219200 =>  0000/01/01 SAT  0:00:00
    MAX BCD setting  253402300799 =>  9999/12/31 FRI 23:59:59
    MAX BIN setting  745690751999 => 25599/12/31 FRI 23:59:59
    And then fix each reference to these so it can handle such values
    And make bochs correctly wrap around for under/overflows, so that
    only the most significant bits of the century are lost.

   +Do the same thing to the bochs time0 parameter, so all the above
    values can be chosen at startup (despite being now legal values,
    1 and 2 will still be treated as "local" and "utc"). Note that
    normally only BCD settings are valid since bochs' CMOS defaults
    to such operating mode - the only way to use the binary range
    is by loading a cmos memory map.

   +Make the internal s.timeval variable independent from external
    factors. This means providing a small set of time handling
    functions, contained in "iodev/utctime.h", which must work in
    any environment in which bochs compiles, accessing no external
    resource. This also means that after startup, s.timeval will only
    be changed internally, and no call to the OS time functions will
    be made.

   +Make the internal s.timeval variable timezone independent, to
    have a linear correlation between its values and valid CMOS
    settings. To make it easier, s.timeval is gonna be treated as
    if the current timezone was UTC: so,
     - if the user selects UTC as time0, s.timeval will become current
       time(NULL)
     - if the user selects localtime, s.timeval will be computed as
       the value which will display the same broken down time as
       localtime(&now)
     - if the user inputs a time formatted string the proper s.timeval
       to displayed will be easily calculated,
     - if the user inputs a starting time value, s.timeval will be
       computed as the value which will display the same broken down
       time as localtime(&user_input) to ensure the same operation as
       before.
    A "tz=utc" is displayed when bochs prints out the current time
    value, to warn users about the difference in meaning between the
    internally kept time value and the value they can set through
    the "time0=" parameter. This might be changed to communicate
    instead the time value they can input to get the same setting,
    but performing such calculation (except for the startup time)
    suffers from all the mktime()/localtime() problems listed above
    so I did not do it.
    The range of "time0" is automatically adjusted so all users in
    all time zones can set any legal value despite "time0=" having a
    local meaning.

  A thorough explanation of what I did and why can be found in the
  "iodev/utctime.h" library header.

---------

Co-authored-by: Stanislav Shwartsman <sshwarts@users.sourceforge.net>
Co-authored-by: Volker Ruppert <Volker.Ruppert@t-online.de>
2023-12-01 22:55:35 +01:00
Volker Ruppert
50b0ab2895 Regenerated configure script and recompiled BIOS images for release. 2021-08-01 08:12:28 +00:00
Volker Ruppert
a216fc71a3 Recompiled BIOS images. 2021-07-14 16:11:51 +00:00
Volker Ruppert
89a0507703 Recompiled BIOS binaries to support i440BX chipset without AGP. 2021-06-27 14:53:44 +00:00
Volker Ruppert
e9eccadb82 Recompiled binaries. 2021-04-09 06:47:35 +00:00
Volker Ruppert
4650a59677 Recompiled BIOS images. 2020-10-13 08:10:05 +00:00
Volker Ruppert
08d8782810 Fixed PCI ROM init in case VGA adapter is ISA. 2020-07-26 12:05:21 +00:00
Volker Ruppert
48e07bcf7b Recompiled BIOS image for i586. 2020-01-15 17:55:14 +00:00
Volker Ruppert
fc5b1c6e50 Preparing release 2.6.11 2020-01-05 07:36:44 +00:00
Volker Ruppert
bce3c28bb5 Temporary fix for Bochs BIOS not working with CPU level < 6. Compiled BIOS on
a 32-bit Linux inside of Bochs. Now only i386 fails, newer CPUs are okay.
2020-01-03 15:48:20 +00:00
Volker Ruppert
b6c1a4a919 Regenerated configure script and recompiled BIOS images. 2019-12-30 13:18:39 +00:00
Volker Ruppert
74b9a0f6de Bochs BIOS fix and update.
- Added hack fix to make SeaVGABIOS work: init video mode if not done.
- Update rombios32 release date.
2019-12-29 19:40:42 +00:00
Volker Ruppert
9bd54cc380 Some work on the i440BX chipset AGP support in the Bochs BIOS.
- rombios.c: return maximum bus number #1 for i440BX.
- Now using different i/o and memory base address regions for PCI and AGP.
- Added some init code for the i440BX PCI/AGP bridge.
- Some code cleanups.
2018-05-03 17:55:17 +00:00
Volker Ruppert
92ce5c3846 Moved PIR table modification for the i440BX chipset from the memory code to the
BIOS init code and some related fixes and cleanups.
2018-05-01 07:05:28 +00:00
Volker Ruppert
e781a8f998 Some PCI IRQ roouting changes for i440BX chipset support.
- Bochs BIOS: Improved calculating PCI slot number from device number to handle
  the i440BX case correctly.
- Memory code: Detect and modify the PCI IRQ roouting table of the Bochs BIOS
  for the i440BX chipset (TODO: this could be done by the BIOS itself after
  copying to shadow RAM).
2018-04-29 16:22:44 +00:00
Volker Ruppert
69be05b2b5 Started preparing the Bochs BIOS for i440BX chipset support.
- Added symbols for the i440BX host bridge device ID.
- Probe and search for devices on PCI bus #1 (AGP).
- Set up memory and i/o regions only for header type 0.
- Set AGP aperture size to 64 MB.
- TODO: PCI IRQ routing, i440BX specific register setup.
2018-04-24 21:30:31 +00:00
Volker Ruppert
776e8270f6 Started preparing Bochs BIOS for the sector size option.
- Function ata_cmd_data_io: using fixed block size 512 only for 'identify'
  commands. For read/write commands the hard disk sector size must be used.
- Take account of sector size when calculating hard disk size in MBytes (TODO:
  calculation is not correct for not yet existing very big disks).
- updated comment.
2018-04-05 21:35:41 +00:00
Volker Ruppert
82f45f262a Small addition for the plug&play BIOS stub: added support for function 0x0000
(currently returning 0 for number of device nodes).
2018-01-28 11:59:29 +00:00
Volker Ruppert
e5370fa2ac Regenerated configure script and recompiled BIOS for HPET support. 2017-04-17 07:28:22 +00:00
Volker Ruppert
9b0abda1f5 Recompiled after MP table fix. 2017-03-02 18:39:35 +00:00
Volker Ruppert
67896c66ae Recompiled after adding "fastboot" option. 2017-02-16 21:45:07 +00:00
Volker Ruppert
35a19e4777 Fixed reading extended memory size from CMOS. 2017-02-11 08:53:17 +00:00
Volker Ruppert
02b6de6a61 Added byte/word reference macro to produce optimal code and understand
(SF patch #533 by Yeong-uk Jo).
2017-02-10 18:29:00 +00:00
Volker Ruppert
dca964c119 Some 8-bit register reference macro changes to produce more effective code
(SF patch #532 by Yeong-uk Jo).
2016-03-17 17:14:43 +00:00
Volker Ruppert
56a7b11ab5 Align PCI memory regions at 64k boundary to make Bochs memory handlers work
correctly (registering small MMIO regions of USB controllers could fail otherwise).
2015-11-02 17:00:24 +00:00
Volker Ruppert
f7726990f2 Fixed MTRR setup for memory size > 4 GB. 2015-08-22 06:19:13 +00:00
Volker Ruppert
f8264a7b38 The RSDT table may be detected incorrectly within the rombios32 string table.
Split copying signature and the check for in to parts to fix this ACPI issue.
2015-04-18 13:19:21 +00:00
Volker Ruppert
d01a6176a8 Fixed keyboard scancode processing after keyboard intercept using stack
manipulation (SF bug report #1193).
2014-12-26 10:32:26 +00:00
Volker Ruppert
366bbbba75 Fixed int74_function() for 4-byte (wheel mouse) packets.
Updated year and copyright.
2014-07-10 07:29:18 +00:00
Volker Ruppert
323aa782e0 Fixed $PCI service detection 2013-08-02 16:00:10 +00:00
Volker Ruppert
0658109479 Recompiled after PS/2 mouse function change 2013-06-15 21:49:10 +00:00
Volker Ruppert
e415cb9db8 recompiled after PCI changes 2012-11-11 09:10:28 +00:00
Volker Ruppert
6cc92b1e2c recompiled after ACPI changes 2012-11-04 18:25:54 +00:00
Volker Ruppert
45a7020f5d recompiled BIOS after latest changes 2012-10-28 19:41:04 +00:00
Volker Ruppert
78e29cc7eb - recompiled after latest changes 2012-10-27 06:40:21 +00:00
Volker Ruppert
ce3228eeda - recompiled for release 2012-08-21 21:03:22 +00:00
Volker Ruppert
3c707ee976 - recompiled after patch #5 2012-07-10 18:33:52 +00:00
Volker Ruppert
625991504b - recompiled after patch #4 2012-07-10 18:31:10 +00:00
Volker Ruppert
f0c3b2ad90 - recompiled after patch #3 2012-07-10 18:28:56 +00:00
Volker Ruppert
4f2b643aca - recompiled after patch #2 2012-07-10 18:26:45 +00:00
Volker Ruppert
748315591c - recompiled BIOS after patch #1 2012-07-10 18:22:57 +00:00
Volker Ruppert
9ead528c5a - recompiled after latest changes 2012-06-28 15:20:15 +00:00
Volker Ruppert
4e95f44873 - added missing MADT interrupt source override and fixed MP table
(patches by Sebastian Herbszt)
2012-05-13 20:07:32 +00:00