Added support for reading VGA latches using CRTC register 0x22 (undocumented

for original VGA, documented for Cirrus and Voodoo Banshee).
This commit is contained in:
Volker Ruppert 2021-04-23 06:42:52 +00:00
parent 4e41530b8a
commit 77cc12cce5
3 changed files with 10 additions and 4 deletions

View File

@ -2905,7 +2905,9 @@ Bit32u bx_voodoo_vga_c::banshee_vga_read_handler(void *this_ptr, Bit32u address,
case 0x03b5:
case 0x03d5:
if (BX_VVGA_THIS s.CRTC.address > 0x18) {
if (BX_VVGA_THIS s.CRTC.address <= 0x26) {
if (BX_VVGA_THIS s.CRTC.address == 0x22) {
value = bx_vgacore_c::read_handler(BX_VVGA_THIS_PTR, address, io_len);
} else if (BX_VVGA_THIS s.CRTC.address <= 0x26) {
if ((v->banshee.io[io_vgaInit0] & 0x440) == 0x040) {
value = v->banshee.crtc[BX_VVGA_THIS s.CRTC.address];
BX_DEBUG(("read from banshee CRTC address 0x%02x value 0x%02x",

View File

@ -1531,11 +1531,13 @@ Bit8u bx_svga_cirrus_c::svga_read_crtc(Bit32u address, unsigned index)
case 0x1B:
case 0x1C:
case 0x1D:
case 0x22:
case 0x24:
case 0x25:
case 0x27:
break;
case 0x22:
return VGA_READ(address,1);
break;
case 0x26:
return (BX_CIRRUS_THIS s.attribute_ctrl.address & 0x3f);
default:

View File

@ -718,9 +718,11 @@ Bit32u bx_vgacore_c::read(Bit32u address, unsigned io_len)
case 0x03b5: /* CRTC Registers (monochrome emulation modes) */
case 0x03d5: /* CRTC Registers (color emulation modes) */
if (BX_VGA_THIS s.CRTC.address == 0x22) {
return BX_VGA_THIS s.graphics_ctrl.latch[BX_VGA_THIS s.graphics_ctrl.read_map_select];
}
if (BX_VGA_THIS s.CRTC.address > 0x18) {
BX_DEBUG(("io read: invalid CRTC register 0x%02x",
(unsigned) BX_VGA_THIS s.CRTC.address));
BX_DEBUG(("io read: invalid CRTC register 0x%02x", BX_VGA_THIS s.CRTC.address));
RETURN(0);
}
RETURN(BX_VGA_THIS s.CRTC.reg[BX_VGA_THIS s.CRTC.address]);