Implement true 128k VGA mappings on ET4000 and TVGA cards (the only

cards I believe that support them). Fixes Majic 12 - Wish.
This commit is contained in:
SarahW 2020-11-27 16:27:54 +00:00
commit 1dbb94e989
3 changed files with 25 additions and 1 deletions

View file

@ -71,6 +71,21 @@ void et4000_out(uint16_t addr, uint8_t val, void *p)
et4000->banking = val; et4000->banking = val;
// pclog("Banking write %08X %08X %02X\n", svga->write_bank, svga->read_bank, val); // pclog("Banking write %08X %08X %02X\n", svga->write_bank, svga->read_bank, val);
return; 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: case 0x3D4:
svga->crtcreg = val & 0x3f; svga->crtcreg = val & 0x3f;
return; return;

View file

@ -337,7 +337,7 @@ void et4000w32p_recalcmapping(et4000w32p_t *et4000)
case 0x0: case 0x4: case 0x8: case 0xC: /*128k at A0000*/ case 0x0: case 0x4: case 0x8: case 0xC: /*128k at A0000*/
mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000);
mem_mapping_disable(&et4000->mmu_mapping); mem_mapping_disable(&et4000->mmu_mapping);
svga->banked_mask = 0xffff; svga->banked_mask = 0x1ffff;
break; break;
case 0x1: /*64k at A0000*/ case 0x1: /*64k at A0000*/
mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000);

View file

@ -109,6 +109,15 @@ void tvga_out(uint16_t addr, uint8_t val, void *p)
case 0x3CF: case 0x3CF:
switch (svga->gdcaddr & 15) 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: case 0xE:
svga->gdcreg[0xe] = val ^ 2; svga->gdcreg[0xe] = val ^ 2;
tvga->tvga_3d9 = svga->gdcreg[0xe] & 0xf; tvga->tvga_3d9 = svga->gdcreg[0xe] & 0xf;