- Added default value for the video clock frequency to make sure that the
vertical timer works.
- Changing vidDesktopStartAddr register when the video processor is on now
forces a screen update.
- Fixed PCI BAR initialization (now using memset()).
- Fixed reset failure (set all PAM memory types to ROM).
- Added stub for the AGP aperture (register BAR #0, handle APSIZE and read
GART entry in read/write handlers).
- Added some more PCI register defaults and write masks.
- Fixed a warning in the ES1370 code.
- Voodoo Banshee: set up PCI subsystem ID depending on bus and model.
- Volatile BIOS write support must also be present in ISA BIOS memory.
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.
- Screen-to-screen blt: added support for expanding monochrome source data.
- Fixed calculation of the pitch for packed source data.
- Fixed repeated execution of some commands in non-immediate mode.
- PCI devices: fixed and improved BX_INFO / BX_DEBUG messages.
- 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.
- Added support for stippled lines.
- Fixed return values of the I2C interface with no VMI/decoder connected.
- Added some comments about current status of the Banshee code.
- Basic I2C implementation for DDC2B support.
- Added VESA EDID structure (values from a patch for the LGPL'd VGABIOS).
- Windows now detecting plug&play monitor "Bochs Screen" if an original VGABIOS
image is used (Cirrus PCI / Voodoo Banshee).
- TODO: Add this feature in the Cirrus version of the LGPL'd VGABIOS.
- 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.
- Implemented line / polyline commands (solid lines only). The algorithm comes
from the already removed unused draw_line() function.
- Implemented start bit/byte support for host-to-screen blts.
- Rewrite of the launchArea handling: added new method for setting up the
required size and handle all currently implemented command in launch mode.
- Fixed segfault when leaving tiled desktop mode.
- Temporarily disabled the CMDFIFO "hole count" feature. The current code makes
trouble and needs to be improved.
- Started implementing the CMDFIFO "hole count" support. It does not yet count
holes, but it handles the Amin and Amax values (except read pointer rollover
and JMP command). This is enough to get a usable desktop after Win95 guest
startup.
- Added read / write support for the desktop tile space.
- Fixed tiled desktop redraw after bitblt operation.
Banshee TODO list:
#1: Fix display errors caused by incorrect implementation and find out the
expected behaviour of the undocumented stuff.
#2: Make color depth > 8 work correctly.
#3: Screen resulution change not possible yet (only 640 x 480 works).
#4: Implement remaining 2D commands (line, polyline, polygon fill, stretchBlt).
#5: 3D core usablility, code cleanup, ...