Paradise WD90C11 and WD90C30: Fix banking regressions introduced with the previous fixes, fixes #5807.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user