mirror of
https://github.com/86Box/86Box.git
synced 2026-02-21 17:15:32 -07:00
Cirrus Logic: Reintroduce the thunks to SVGA reads/writes removed in build 5479, fixes E-Ten Chinese System.
This commit is contained in:
@@ -2288,8 +2288,14 @@ gd54xx_write(uint32_t addr, uint8_t val, void *priv)
|
||||
|
||||
xga_write_test(addr, val, svga);
|
||||
|
||||
if (!(svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) || !(svga->gdcreg[5] & 0x40)) {
|
||||
svga_write(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
|
||||
addr &= svga->banked_mask;
|
||||
addr = (addr & 0x7fff) + svga->extra_banks[(addr >> 15) & 1];
|
||||
|
||||
svga_write_linear(addr, val, svga);
|
||||
}
|
||||
|
||||
@@ -2312,6 +2318,11 @@ gd54xx_writew(uint32_t addr, uint16_t val, void *priv)
|
||||
xga_write_test(addr, val, svga);
|
||||
xga_write_test(addr + 1, val >> 8, svga);
|
||||
|
||||
if (!(svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) || !(svga->gdcreg[5] & 0x40)) {
|
||||
svga_writew(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
|
||||
addr &= svga->banked_mask;
|
||||
addr = (addr & 0x7fff) + svga->extra_banks[(addr >> 15) & 1];
|
||||
|
||||
@@ -2346,6 +2357,11 @@ gd54xx_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
xga_write_test(addr + 2, val >> 16, svga);
|
||||
xga_write_test(addr + 3, val >> 24, svga);
|
||||
|
||||
if ((svga->seqregs[0x07] & 0x01) == 0) {
|
||||
svga_writel(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
|
||||
addr &= svga->banked_mask;
|
||||
addr = (addr & 0x7fff) + svga->extra_banks[(addr >> 15) & 1];
|
||||
|
||||
@@ -2898,6 +2914,9 @@ gd54xx_read(uint32_t addr, void *priv)
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
gd54xx_t *gd54xx = (gd54xx_t *) svga->local;
|
||||
|
||||
if (!(svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) || !(svga->gdcreg[5] & 0x40))
|
||||
return svga_read(addr, svga);
|
||||
|
||||
if (gd54xx->countminusone && gd54xx->blt.ms_is_dest &&
|
||||
!(gd54xx->blt.status & CIRRUS_BLT_PAUSED))
|
||||
return gd54xx_mem_sys_dest_read(gd54xx, 0);
|
||||
@@ -2916,6 +2935,9 @@ gd54xx_readw(uint32_t addr, void *priv)
|
||||
gd54xx_t *gd54xx = (gd54xx_t *) svga->local;
|
||||
uint16_t ret;
|
||||
|
||||
if (!(svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) || !(svga->gdcreg[5] & 0x40))
|
||||
return svga_readw(addr, svga);
|
||||
|
||||
if (gd54xx->countminusone && gd54xx->blt.ms_is_dest &&
|
||||
!(gd54xx->blt.status & CIRRUS_BLT_PAUSED)) {
|
||||
ret = gd54xx_read(addr, svga);
|
||||
@@ -2938,6 +2960,9 @@ gd54xx_readl(uint32_t addr, void *priv)
|
||||
gd54xx_t *gd54xx = (gd54xx_t *) svga->local;
|
||||
uint32_t ret;
|
||||
|
||||
if (!(svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) || !(svga->gdcreg[5] & 0x40))
|
||||
return svga_readl(addr, svga);
|
||||
|
||||
if (gd54xx->countminusone && gd54xx->blt.ms_is_dest &&
|
||||
!(gd54xx->blt.status & CIRRUS_BLT_PAUSED)) {
|
||||
ret = gd54xx_read(addr, svga);
|
||||
|
||||
Reference in New Issue
Block a user