- Fixed missing bx_gui->flush() call after non-VGA update().
- Fixed a BX_DEBUG message in the Voodoo code.
- Re-define LOG_THIS for messages in the "Voodoo VGA" code.
currently only implements an ISA standard VGA adapter with the selected Voodoo
model as it's extension. The methods of the "Voodoo VGA" device only call the
required methods of the Voodoo or VGA core.
TODO: Start implementing the Voodoo Banshee chipset based on this code.
- Moved VGA timer handler to the VGA core and handle the non-VGA case there.
It calls the specific update() code and finally bx_gui->flush().
- Moved the VGA update frequency parameter handler and the refresh_disply()
method to the VGA core.
- Store the VGA extension parameter in the VGA core.
- Voodoo: Fixed graphics snapshot.
- voodoo_init() must be called after initializing FIFO mutex.
- The 'op_pending' counter must be reset after resetting FIFOs.
- Fixed an MSVC warning and removed obsolete comment.
- FIXME: There are still some conditions that can freeze the Voodoo display.
it's 64 entries is still not present, since it makes the emulation a few
percent slower due to the overhead of the FIFO code. The memory FIFO has 64k
entries and makes a speedup of around 75 % possible.
- Now using float type for the 'clk0_freq' variable.
- DAC register 6 can switch to half pixel clock (ported from PCem).
- Writing value 0xf8 to PLL register 0x0e completes clock #0 setup.
non-WIN32 platforms instead of BX_MSLEEP(). The donut demo is once again a
little bit slower, but on other tests the IPS values are still okay. Cleaned
up the code a little bit and added save/restore stuff for the new code.
packets and then always sleep for 1 millisecond.
TODO: The first tests with pthread_cond_* stuff showed a slowdown of approx.
10 % compared with the IPS value of the current code.
command and execute it when there is enough data present (code partly ported
from voodoo.h.txt).
TODO: Use "wait for event / condition" functions instead of msleep() if there
is a performance improvement with it.
- Modified win32 thread macros to use the handle instead of the id.
- Added new macro BX_THREAD_KILL to terminate threads.
Voodoo thread changes:
- Let the cmdfifo_thread sleep while the CMDFIFO is disabled.
- Kill the cmdfifo_thread in destructor and removed old thread control code.
- Added capability to save/restore float type values in paramtree / siminterface.
- Added Voodoo2 triangle generator data to save/restore list.
- Implemented bitBLT function "SGRAM fill".
- Minor other changes and cleanups.
- TODO: remaining bitBLT functions, thread handling improvements.
- Added CMDFIFO thread similar to the sound output thread.
- split register write function in 2 functions: register_w_common() handles
the CMDFIFO writes and valid registers in CMDFIFO mode. It forwards write
accesses to other registers to register_w() (Voodoo1 and non-CMDFIFO mode).
The CMDFIFO thread also calls register_w() when processing data.
- The CMDFIFO thread processes all data, but it does not yet execute type 3
requests (extended triangle generator missing).
- TODO #1: implement Voodoo2 specific triangle functions (for CMDFIFO).
- TODO #2: implement 2D bitblt engine.
- Zero out voodoo device state in init().
- Added the CMDFIFO state to save/restore list.
- Added CMDFIFO register handling in read/write functions.
- Added new function cmdfifo_put().
- TODO: CMDFIFO thread.
valid. The hRetrace value can be set now, since Bochs no longer crashes.
TODO: Implement enough of the FIFO stuff to make the Win9x driver for the
Voodoo2 work.
- Voodoo: Use the VGA/Cirrus timers to drive the gui screen update.
The vertical retrace emulation is still driven by a separate timer.
- VGA/Cirrus: Since we are using the virtual timer, we also have to read
time_usec() from it.
- vgacore: removed unused timer methods.
- prepared hRetrace value implementation (cannot be enabled yet, since the
driver passes this test and gets confused in next stage (segfault).
- Detect CMDFIFO access (not present yet).
- Report disabling Voodoo graphics mode.
- TODO #1: Fix Voodoo2 to make it usable.
- TODO #2: Split update code and drive gui screen updates from the VGA timer
(finally remove new realtime option again).
- Since we are using the virtual timer, so we have to read time_usec()
from it, too (TODO: realtime mode is hardcoded, maybe add an option).
- Voodoo1 and Voodoo2 have different timing register widths.
- Fixed vertical retrace value returned by get_retrace().
- Prepared separate hvRetrace register (TODO: hRetrace).
- Store the Voodoo model in structure bx_voodoo_t.
- The PCI initEnable register of the Voodoo2 model has a read-only secondary
revision ID in bits 12..15. Now the Voodoo2 is correctly detected by the
Windows driver, but display is not yet working (blank screen).
- Reset now disables VGA override.
- PCI: Moved PCI device base class methods to the end of file devices.cc and
re-define LOG_THIS to use the correct log module and prefix.
- Since the pci_read_handler() method is identical in most devices, move it
to the base class to reduce code duplication. Only the 'pcidev' device has
it's own implementation (NOTE: it is not maintained yet).
- Minor other fixes and cleanups in some PCI devices.
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.
- fixed clock values (assigned to wrong model)
- LFB read/write: don't limit y values to 1023 (4MB now usable this way)
- additional Voodoo2 fbiInit* register writes now handled like the Voodoo1 ones
- destructor: free memory only when initialized
- parameter 'enabled' must be initialized with 1 (TODO: fix other plugins)
- PCI register fixes (Voodoo2 now detected, but not usable)
- fixed pluginlog init in non-plugin mode
- reduced logprefix length limit and use it for the related string parameter
- increase the device prefix size to 6
- TODO: change some more device prefixes
- renamed trigger_timer() methods to refresh_display()
- new argument 'redraw' added to force a refresh of the entire screen
(used in snapshot mode)
- siminterface method refresh_vga() now checks if the Bochs gui init is complete
- use SIM->refresh_vga() in some more cases
- graphics_tile_info() split into a common and specific part
- store snapshot mode in structure bx_svga_tileinfo_t
- in snapshot mode, display adapters copy raw data to buffer
- rewrite of the trigger_timer() code to make it work in all cases
- added new class bx_nonvga_device_c to make forwarding refresh requests to the
Voodoo adapter possible
- don't enable Voodoo mode if hSync or vSync are still 0 to avoid Bochs crash
(division by zero error)
- handle PCI register 0x40 (initEnable)
- fixed reported display size
is based on a patch originally designed for DOSBox. Currently only the Voodoo1
adapter model can be emulation. The emulation is currently slow, but we intend
to clean up and optimize the code. Running the 3D engine in a separate thread
is also planned. To compile with Voodoo support the configure option
"--enable-voodoo" must be used. Then the device can be activated with
"plugin_ctrl: voodoo=1" in bochsrc or on the command line. The device will be
assigned automatically to a PCI slot unless you do that manually. A specific bochsrc
option to select the adapter model will be added when the code has support for it.