Paradise WD90C11 and WD90C30: Fix banking regressions introduced with the previous fixes, fixes #5807.

This commit is contained in:
OBattler
2025-07-18 20:01:32 +02:00
parent 6e0fd424c1
commit 55008566de

View File

@@ -343,12 +343,12 @@ paradise_remap(paradise_t *paradise)
paradise->write_bank[3] = paradise->write_bank[2] + 0x8000;
} else if ((svga->gdcreg[6] & 0x0c) == 0x04) {
paradise->read_bank[0] = svga->gdcreg[0x0a] << 12;
paradise->read_bank[1] = svga->gdcreg[9] << 12;
paradise->read_bank[1] = (svga->gdcreg[9] << 12) + 0x8000;
paradise->read_bank[2] = paradise->read_bank[0];
paradise->read_bank[3] = paradise->read_bank[1];
paradise->write_bank[0] = svga->gdcreg[0x0a] << 12;
paradise->write_bank[1] = svga->gdcreg[9] << 12;
paradise->write_bank[1] = (svga->gdcreg[9] << 12) + 0x8000;
paradise->write_bank[2] = paradise->write_bank[0];
paradise->write_bank[3] = paradise->write_bank[1];
} else {
@@ -506,11 +506,11 @@ paradise_recalctimings(svga_t *svga)
if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) {
if ((svga->bpp >= 8) && !svga->lowres) {
svga->render = svga_render_8bpp_highres;
if (paradise->type != WD90C11)
if (paradise->type < WD90C11)
svga->vram_display_mask = (svga->crtc[0x2f] & 0x02) ? 0x3ffff : paradise->vram_mask;
}
}
if (paradise->type == WD90C11) switch (svga->crtc[0x2f] & 0x60) {
if (paradise->type >= WD90C11) switch (svga->crtc[0x2f] & 0x60) {
case 0x60: case 0x40:
svga->vram_display_mask = 0x3ffff;
break;
@@ -582,12 +582,11 @@ paradise_decode_addr(paradise_t *paradise, uint32_t addr, int write)
break;
}
if (memory_map_mode <= 1) {
if (write)
addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3];
else
addr = (addr & 0x7fff) + paradise->read_bank[(addr >> 15) & 3];
}
if (write)
addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3];
else
addr = (addr & 0x7fff) + paradise->read_bank[(addr >> 15) & 3];
return addr;
}
@@ -670,7 +669,7 @@ paradise_read(uint32_t addr, void *priv)
uint32_t prev_addr;
uint32_t prev_addr2;
addr = paradise_decode_addr(paradise, addr, 1);
addr = paradise_decode_addr(paradise, addr, 0);
if (addr == 0xffffffff)
return 0xff;
@@ -705,7 +704,7 @@ paradise_readw(uint32_t addr, void *priv)
uint32_t prev_addr;
uint32_t prev_addr2;
addr = paradise_decode_addr(paradise, addr, 1);
addr = paradise_decode_addr(paradise, addr, 0);
if (addr == 0xffffffff)
return 0xffff;