2990 Commits

Author SHA1 Message Date
Volker Ruppert
5b6872168a Banshee: Attempt to implement 8 and 16 byte writes to CMDFIFO.
- The mem_write_handler() splits 16 bytes writes in two 8 bytes writes.
- In mem_write() the 8 byte writes to CMDFIFO are split in two 32-bit writes.
2024-01-12 18:56:49 +01:00
Volker Ruppert
b8054277cb Fixed compilation with PCI disabled.
When switching to Voodoo 1/2 update timer only if update_mode_vsync is enabled.
Still TODO: update docs.
2024-01-11 18:30:39 +01:00
Volker Ruppert
fc6703a2f7 VGA update timer using vertical frequency now supported by Voodoo devices.
TODO: update docs.
2024-01-11 17:48:11 +01:00
Shwartsman
77bbdca17a change from USB Debugger branch by Ben, rename variable 2024-01-10 21:25:03 +02:00
Volker Ruppert
cfa7276cb9 Added support for driving the VGA display update timer with VSYNC.
- Using the special value of 0 enables this feature. In that case the vertical
  frequency is used for the display updates. The update() method is called at
  the "vertical retrace end" time and sets the time of the display start. This
  value is used to set the vertical retrace indicator in VGA register 0x03da.
- This feature is not yet enabled if Voodoo support is present. The Voodoo device
  has it's own vertical timer and needs some more testing and possibly some changes.
2024-01-09 21:48:19 +01:00
Shwartsman
e5ef6d6a47 According to documentation (8254.pdf), mode 6 is the same as mode 2 and mode 7 is the same as mode 3. 2024-01-08 20:27:59 +02:00
Volker Ruppert
f06346afcb Voodoo Banshee: added missing type cast in mem_write(). 2024-01-07 22:05:41 +01:00
Volker Ruppert
9dbca8951e Fixed Banshee read from ROM and mem_write() for any size and endianness. 2024-01-07 19:33:58 +01:00
Volker Ruppert
a566b1e69d PCI MMIO space is not disabled if the Cirrus card is in VGA mode. 2024-01-07 13:55:43 +01:00
Volker Ruppert
c13ef56378 Increase maximum VGA update frequency to 75 and default to 10.
Small cleanups in the VGA code.
2024-01-07 11:15:04 +01:00
Volker Ruppert
080cf72f5f Fixed CGA address wrap. 2024-01-06 16:31:04 +01:00
Volker Ruppert
c9c0237af3 Fixed start address in emulated CGA mode. 2024-01-06 15:05:33 +01:00
Volker Ruppert
6d433ec44b Missing horizontal pel panning support added in modeX.
Added error messages for unsupported features (EGA only ?).
TODO: horizontal pel panning support missing or incorrectly implemented in other
graphics.
2024-01-06 11:29:39 +01:00
Volker Ruppert
3a73e8a0b2 Fixed address wrap in non-chain4 256-color VGA mode called modeX.
There were blinking dotted lines visible in old DOS games (#205/#206).
2024-01-05 14:36:42 +01:00
Volker Ruppert
1f8eb7b608 First step to fix the timer code for speaker sound output.
There is some output now, but not really music yet.
2024-01-04 19:26:27 +01:00
Volker Ruppert
071f5c72f7 Reduce VGA vertical screen size if blanking starts before display end. 2024-01-03 23:48:24 +01:00
Volker Ruppert
210ea89b36 Voodoo Banshee / Voodoo3 hardware cursor fixes (#202 / #203).
- Fixed crash in "half mode" (line doubling).
- Fixed redraw_area() values (must be unsigned).
2024-01-02 21:30:28 +01:00
Volker Ruppert
f48acd833f Some speaker output fixes.
- Increase buffer size and allocate buffer dynamicly.
- Make sure the beep_level is correctly set up in dsp_generator().
- TODO: fix timer code for usable sound output with the speaker.
2024-01-01 19:43:33 +01:00
Volker Ruppert
10811e13ed SB16: added 16-bit write support for even i/o addresses. 2023-12-31 16:05:20 +01:00
Volker Ruppert
1699f30d64 Reduce default keyboard serial delay to 150 to avoid timeouts.
Some cleanups in the keyboard code.
2023-12-31 10:47:10 +01:00
Volker Ruppert
63ab5ea24a Align SB16 DMA buffer size to 4 to avoid crash in 16-bit stereo mode. 2023-12-29 19:49:58 +01:00
Volker Ruppert
be1baa295c Implemented secondary VGA charmap support.
All guis with 'new_text_api' and the graphical text snapshot working with it.
2023-12-29 17:47:44 +01:00
Volker Ruppert
a1872535ca Voodoo: fixed randomly missing color palette updates. 2023-12-29 15:18:06 +01:00
Volker Ruppert
157d3a9189 Next attempt to fix the Voodoo hang on exit.
It occurred with the pthreads library only and should be fixed now.
2023-12-29 10:25:38 +01:00
Volker Ruppert
29fbdb48da Set default value for SB16 dmatimer to 1000000 and updated docs. 2023-12-28 20:32:14 +01:00
Volker Ruppert
917ac4c79d Fixed some Voodoo issues.
Temporarily disable fifo_reset() in recompute_video_memory(). FIFO handling must
be observed and a better solution must be found.
Fixed hang after pressing power button: destructor modification was required since
the swapbuffer command can depend on vertical retrace.
2023-12-28 19:04:20 +01:00
Volker Ruppert
9d1df2915c VGA mem_write(): added missing update flag in chain4 mode. 2023-12-27 23:24:46 +01:00
Volker Ruppert
aa23a09afd VGA mem_write(): moved and fixed CGA specific code.
Removed disabled BX_DEBUG code and VGA_TRACE_FEATURE symbol.
Some other small fixes and cleanups.
TODO #1: review MAP13 addressing in case start address > 0.
TODO #2: review chain4 code in medm_write().
2023-12-26 11:16:59 +01:00
Volker Ruppert
de4876e2c4 VGA mem_write(): in text mode don't mark graphics tiles for update.
TODO: Check special cases code in mem_write() for correctness.
2023-12-25 21:03:53 +01:00
Vort
aed0c5e954
Prevent output of fraction of sample (#193)
Fixes #134.
2023-12-25 12:00:31 +02:00
Volker Ruppert
8a4941f670 Some cleanups in the recently fixed code. 2023-12-24 14:41:47 +01:00
Volker Ruppert
e3eb603ad4 Some fixes for the VGA mode 0x13 (issue #188 and discussion #108).
- Shift start address by 2 in update() code and mem_write().
- Added split screen support for this mode.
- Some code cleanups.
2023-12-23 21:37:08 +01:00
Volker Ruppert
b63b1225a8 Fixed backward screen-to-screen copy operation for > 8 bpp modes. 2023-12-21 10:53:13 +01:00
Vort
75ea1c2222
Prevent crash in get_retrace (#185)
Fixes #184.
2023-12-20 13:35:51 +02:00
Vort
ee528baa03
Expand maximum resolution for Banshee and Voodoo 3 from 1600x1280 to 1920x1440 (#175)
Fixes #174.
2023-12-16 16:51:18 +02:00
Shwartsman
cd350d8548 adopting hack listed in https://github.com/bochs-emu/Bochs/issues/147 to solve hang 2023-12-16 08:45:53 +02:00
Vort
02704120a3
Implement Voodoo 3 writes with length 8 (#173)
Fixes #172

Co-authored-by: Stanislav Shwartsman <stlintel@gmail.com>
2023-12-16 08:28:59 +02:00
Shwartsman
0fbf559276 fix bx_banshee_c::mem_read unknown access length warning 2023-12-16 08:24:08 +02:00
Shwartsman
e67fb33443 fix potentially un-initialized value warning 2023-12-15 22:49:34 +02:00
Shwartsman
438fd787c3 attempt to warn (BX_ERROR) for unsupported read/write size 2023-12-15 22:31:49 +02:00
Vort
30db11d271
Fix memory corruption when reading Voodoo ROM (#169)
Fixes #131.
2023-12-15 22:24:57 +02:00
Volker Ruppert
5fec28cb17 Partly fixed display errors found in game Prehistorik 2 (issue #166).
- Fixes in MAP13 disabled mode (VGA mode 6): half dot clock, color support
- Modified method get_vga_pixel(): now using row start address as an argument
2023-12-13 17:15:09 +01:00
Volker Ruppert
7641d13614 E1000: Added support for i/o mapped register access to make DOS driver work. 2023-12-11 21:21:34 +01:00
Volker Ruppert
54aeba83d3 Moved CMOS image runtime options setup to cmos.cc. 2023-12-05 18:16:24 +01:00
Volker Ruppert
7fcf4a419a Added support for saving CMOS image at runtime.
- Added CMOS image options to runtime menu (except RTC init).
- Fixed default size of Bochs CMOS RAM (s.max_reg).
- Fixed bochsrc parse to make 'rtc_init' parameter work.
- In textconfig now using SERIES_ASK for CMOS image options.
2023-12-04 20:39:24 +01:00
Volker Ruppert
c8b370d206 Added split screen support to the 256-color VGA mode called "modeX". 2023-12-03 19:42:05 +01:00
Volker Ruppert
7f420fc260 Added modeless message box in the restore code and some related fixes.
- Show message box while restoring hardware state.
- Set modeless message box handle to NULL after destroying it.
- Reset all config options to default before restoring config.
- Fixed CMOS RTC value after restore if in 12-hour-mode.
- Fixed possible segfault in the plugins code caused by Voodoo plugin in VGA mode
  (found at restore code testing).
2023-12-03 12:34:03 +01:00
Stanislav Shwartsman
fcea81a042 fixed compilation in cmos.cc 2023-12-02 08:43:56 +02: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
Shwartsman
4de6c097a4 use true/false instead of 0/1 for boolean variables
cleanups in code
2023-12-01 23:01:11 +02:00