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:
parent
97dd2aa4bf
commit
1dbb94e989
3 changed files with 25 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue