Cirrus: Added support for 4-bpp VBE modes with original VGABIOS.

This commit is contained in:
Volker Ruppert 2024-02-16 14:23:56 +01:00
parent e4d8ca494f
commit 75d76db967
3 changed files with 8 additions and 1 deletions

View File

@ -1740,11 +1740,16 @@ void bx_svga_cirrus_c::svga_write_crtc(Bit32u address, unsigned index, Bit8u val
BX_CIRRUS_THIS s.plane_shift = 19;
}
#endif
BX_CIRRUS_THIS s.memsize_mask = 0xfffff;
BX_CIRRUS_THIS s.ext_start_addr = ((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x01) << 16) |
((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x04) << 15);
BX_CIRRUS_THIS s.ext_offset = BX_CIRRUS_THIS bank_base[0];
} else {
#ifndef VGA_MEM_FIX
BX_CIRRUS_THIS s.plane_shift = 16;
#endif
BX_CIRRUS_THIS s.memsize_mask = 0x3ffff;
BX_CIRRUS_THIS s.ext_start_addr = 0;
BX_CIRRUS_THIS s.ext_offset = 0;
}
BX_CIRRUS_THIS svga_pitch = (BX_CIRRUS_THIS crtc.reg[0x13] << 3) | ((BX_CIRRUS_THIS crtc.reg[0x1b] & 0x10) << 7);

View File

@ -361,6 +361,7 @@ void bx_vgacore_c::vgacore_register_state(bx_list_c *parent)
#endif
new bx_shadow_num_c(list, "dac_shift", &BX_VGA_THIS s.dac_shift);
new bx_shadow_num_c(list, "ext_offset", &BX_VGA_THIS s.ext_offset);
new bx_shadow_num_c(list, "ext_start_addr", &BX_VGA_THIS s.ext_start_addr);
BXRS_PARAM_BOOL(list, ext_y_dblsize, BX_VGA_THIS s.ext_y_dblsize);
new bx_shadow_num_c(list, "last_xres", &BX_VGA_THIS s.last_xres);
new bx_shadow_num_c(list, "last_yres", &BX_VGA_THIS s.last_yres);
@ -1391,7 +1392,7 @@ void bx_vgacore_c::update(void)
unsigned long byte_offset;
unsigned xc, yc, xti, yti;
start_addr = BX_VGA_THIS s.CRTC.start_addr;
start_addr = BX_VGA_THIS s.CRTC.start_addr + BX_VGA_THIS s.ext_start_addr;
determine_screen_dimensions(&iHeight, &iWidth);
if((iWidth != BX_VGA_THIS s.last_xres) || (iHeight != BX_VGA_THIS s.last_yres) ||

View File

@ -268,6 +268,7 @@ protected:
#endif
Bit8u dac_shift;
Bit32u ext_offset;
Bit32u ext_start_addr;
bool ext_y_dblsize;
// last active resolution and bpp
Bit16u last_xres;