diff --git a/src/vid_et4000.c b/src/vid_et4000.c index 25cb60d..6f2fdf2 100644 --- a/src/vid_et4000.c +++ b/src/vid_et4000.c @@ -71,6 +71,21 @@ void et4000_out(uint16_t addr, uint8_t val, void *p) et4000->banking = val; // pclog("Banking write %08X %08X %02X\n", svga->write_bank, svga->read_bank, val); return; + + case 0x3cf: + if ((svga->gdcaddr & 15) == 6) + { + old = svga->gdcreg[6]; + svga_out(addr, val, svga); + if ((old & 0xc) != 0 && (val & 0xc) == 0) + { + /*override mask - ET4000 supports linear 128k at A0000*/ + svga->banked_mask = 0x1ffff; + } + return; + } + break; + case 0x3D4: svga->crtcreg = val & 0x3f; return; diff --git a/src/vid_et4000w32.c b/src/vid_et4000w32.c index e8a8e8f..ae748ef 100644 --- a/src/vid_et4000w32.c +++ b/src/vid_et4000w32.c @@ -337,7 +337,7 @@ void et4000w32p_recalcmapping(et4000w32p_t *et4000) case 0x0: case 0x4: case 0x8: case 0xC: /*128k at A0000*/ mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); mem_mapping_disable(&et4000->mmu_mapping); - svga->banked_mask = 0xffff; + svga->banked_mask = 0x1ffff; break; case 0x1: /*64k at A0000*/ mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); diff --git a/src/vid_tvga.c b/src/vid_tvga.c index 59e11e3..6a42ac4 100644 --- a/src/vid_tvga.c +++ b/src/vid_tvga.c @@ -109,6 +109,15 @@ void tvga_out(uint16_t addr, uint8_t val, void *p) case 0x3CF: switch (svga->gdcaddr & 15) { + case 0x6: + old = svga->gdcreg[6]; + svga_out(addr, val, svga); + if ((old & 0xc) != 0 && (val & 0xc) == 0) + { + /*override mask - TVGA supports linear 128k at A0000*/ + svga->banked_mask = 0x1ffff; + } + return; case 0xE: svga->gdcreg[0xe] = val ^ 2; tvga->tvga_3d9 = svga->gdcreg[0xe] & 0xf;