- Moved setup of default i/o register values to reset().
- Set up strapInfo register bits in init().
- Don't overwrite readonly bits in miscInit1 register.
- Set up subsystem ID in VGABIOS ROM in case it's > 32k (doesn't exist yet).
- Copy subsystem ID from ROM to PCI config registers in reset().
- Changed variable type of the plugin_t "type" member from enum to Bit16u.
- Added support for returning device flags with the new mode PLUGIN_FLAGS in
the plugin entry functions. It is currently only used for devices that can
be connected to a PCI slot.
- Code cleanup in core device plugins: checking type no longer necessary.
- The "non-plugin" mode now also uses the "loadtype" member of plugin_t.
TODO: Change PCI slot options to bx_param_enum_c and build the choices list
using the new capabilities of the plugin API.
- Added special mode to all plugin entry functions that returns the plugin type.
- The plugins search function now temporarily loads all available plugins and
reads the plugin type using the new mode PLUGIN_PROBE.
- Added "loadtype" to the plugin structure to store the type used for plugin
loading (currently only the voodoo plugin provides two types).
- bx_shadow_bool_c: removed unused bitnum feature and changed data type.
- Changed return type of memory handlers to bool.
- Modified virtual timer, PIC and PIT code.
- 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.
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).
- Banshee: Added colorkey support for host-to-screen blts without pattern.
- Clearing base address registers in reset is not okay. Maybe we have to
unregister i/o and memory regions here. This affects other devices, too.
- Some other small changes and typo fixes.
- Real fix for the Voodoo2 DirectX issue after CLUT pens implementation.
- Banshee hardware cursor now uses the CLUT pens for the background.
- Banshee hardware cursor now uses the same 3D start address as update().
video refresh in 16 bpp modes. The Banshee also uses this feature in 16 bpp
desktop mode in addition to 3D modes. The code for the pen calculation comes
from the original Voodoo patch for DOSBox. Since it was unused there, I had
disabled it when porting to Bochs.
- Fixed start address for the gui screen update in 3D overlay mode.
- Small optimization for drawing transparent monochrome bitmaps.
- In the restore case start the fifo thread in after_restore_state().
- Report unimplemented colorkey feature (test case missing).
- TODO: issues in some Windows guests still not fixed.
- Save/restore additions for 2D desktop mode.
- Fixed pitch in 3D overlay mode for hardware cursor.
- TODO list:
- Minor issues in explorer navigation bar of Win98SE.
- Ugly background pattern under software cursor and XP start menu.
- Segfault after switching to 3D mode at XP Direct3D test (Voodoo3 only).
- Serious display issues in 16 bpp modes of XP guest (Voodoo3 only).
- Don't set up and load pre-defined optional plugins in restore mode.
- Remove the save/restore registration in Voodoo destructors.
- TODO: Fix frozen SDL/SDL2 display after restore.
Using a temporary subsystem ID, since I haven't found a VGABIOS ROM image for
the PCI version and Bochs doesn't support AGP yet. After modifying Voodoo3.inf
the driver could be installed successfully in Win95/98 and the Voodoo3 works as
expected (same issues as the Banshee model).
Removed BX_ERROR message about setting undocumented srcXY register bits. They
seem to have no effect on the emulation and could be ignored.
- Added INT pin init to method init_pci_conf().
- Moved readonly register handling to the common PCI write handler.
- Moved IRQ line reporting to the common PCI write handler.
- Added new structure bx_pci_bar_t that contains all parameters related to the
PCI BARs (type, size, address and r/w handlers).
- Added new methods init_bar_io() and init_bar_mem() to set up the new structure
in the pci device init code.
- Added new method pci_write_handler_common() to handle writes to the normal
BARs and the ROM BAR. Writes to other registers are forwarded to the device
specific PCI write handlers. Removed BAR and ROM BAR handling from the
specific code.
- Added new method pci_bar_change_notify() to execute specific code after BAR
update (vga, ne2k).
- Moved normal BAR handling to method after_restore_pci_state().
- Store pointer to PCI device name in bx_pci_device_c and use it for i/o setup.
- Happy new year!
- Improved pixel format conversion in host-to-screen operations.
- Rewrite of the linear framebuffer read/write code fixes icons in 16 bpp mode.
- Don't flood log file when polling the 2D status register (similar to 3D one).
- FIXME list:
- Minor issues in all Banshee modes (e.g. forward/back buttons in explorer).
- Display errors in 16 bpp mode after leaving 3D mode.
- Display errors in 16 bpp mode in case debug messages are turned on (timing).
- Voodoo2 3D demo "donut" still fails.
- Bochs crashes on Windows host (MSVC in some cases, MSYS2 64-bit build also
reported, but not yet reproduced.
- TODO list:
- Remaining 2D stuff: polygon fill, stretching functions.
- Move Banshee stuff to separate files.
- Add Voodoo3 support (it's an improved Banshee card).
- Simplified register writes from CMDFIFO using new methods in the new classes.
- Started work on reset() and continued work on save/restore support.
- Mention the Banshee model in the Bochs documentation.
bx_voodoo_base_c that contains the shared code and the new classes
bx_voodoo_1_2_c and bx_banshee_c with the specific implementations. There are
not functional changes yet. TODO: The Banshee specific stuff could be moved to
separate files, but should still remain in the same plugin as Voodoo 1/2.
- Fixed alignment for unpacked monochrome source data in case the calculated
required amount of data for one row is more than the given source pitch.
In even rows the leftmost pixel comes from the LSB bit #7 as expected.
In odd rows the whole row is aligned to the next dword boundary (the rightmost
pixel comes from the MSB bit #0). This alternating alignment is not documented,
but fixes some bitmaps (e.g. Win95 login / logout dialogs).
- Fixed calculation of host-to-screen data size for the pixel alignment > 0 and
color depth > 8.
- Added minimal support for pixel format conversion (32/24 to 16).
- Also set the "Banshee busy" flag if one of the CMDFIFOs is busy.
- Fixed CMDFIFO error message condition.
- Tiled source pitch is only used for screen-to-screen operations.
- Use the CMDFIFO wakeup on vertical retrace only for the 3D mode.
- Report screen mode change (2D, 3D, mixed).
- Added BX_ERRORs for currently unsupported pixel format conversion.
- Only continue bitblt operation if width and height is > 0 after clipping.
- Temporary hack: Processing CMDFIFO packets directly after completion fixes
some display issues (FIXME: 3D mode should work like Voodoo2).
- Handling variable 'gui_update_pending' like Voodoo 1/2 fixes 3D display
flicker. Simplified first stage of the update() code. Some 3D display issues
still need to be investigated.
- Added missing 16-bit write support in 3D memory space.
- Added separate method for linear FB writes und use it for CMDFIFO packet type
5, destination code 0. Added minimal "byte disable" support in this code.
- Added Banshee specific registers in register_w() since they use the same
addresses as the Voodoo2 CMDFIFO config registers in register_w_common().
Now the fullscreen 3D mode is basicly working. The display flickers sometimes
and the desktop is possibly unusable after leaving 3D mode. This may be
caused by the still incorrect CMDFIFO implementation.
- Split the host-to-screen method in two ones: one for the pattern case (ternary
ROPs) and one optimized for the standard case (binary ROPs).
- Improved the foreground/background color handling for bitblt operations.
- Prepared update() code for 3D support (not yet working).
- Attempt to fix the LFB base address.
- CMDFIFO packet type 5: Added support for destination code 0 (linear FB).
- Always check if CMDFIFO is still enabled in the FIFO thread loop.
- Fixed offset for 3D register access (3D still not usable).
- Apply FBI mask when accessing memory in tiled desktop mode to avoid segfault.
- Added support for 16-bit writes to LFB.
- Don't access Voodoo2 CMDFIFO in Banshee mode.
- Set up the correct chipmask for Banshee (it has only one TMU).
- Fixed CMDFIFO enable message (using index #0 and #1).
dwords required for host-to-screen operations. There are no related error
messages in the log when I test 8, 24 and 32 bpp modes. There are still display
errors caused by buggy code, incorrect CMDFIFO implemenation or undocumented
features. The 16 bpp mode is still unusable possibly caused by CMDFIFO. 3D mode
testing cannot start before this mode is okay.
- Disabled voodoo_update() function completely and added the required code to
the vertical timer handler (Voodoo 1/2).
- Added new method banshee_blt_execute() to reduce code duplication.
- Added support for the pattern x/y start offset (Banshee).
- Fixed Voodoo2 usage after adding CMDFIFO RdPtr rollover detection. The end
address value is the address of the last valid 4k page.
- Added support for using 2 CMDFIFO streams (Banshee and later).
- Fixed BX_DEBUG messages in 3D register read/write functions for the Banshee
case.
- Forward read/write access to the intrCtrl register from the 2D to the 3D
register set. This register is still not implemented yet.