Applied all mainline commits; Moved all declarations to not be in the middle of code; SVGA linear reads and writes now account for linear base; Fixed a bug with the Compaq ATI 28800.

This commit is contained in:
OBattler
2016-08-01 19:14:54 +02:00
parent d50a7e9449
commit 114bbdfc6d
29 changed files with 305 additions and 171 deletions

View File

@@ -1027,8 +1027,8 @@ uint8_t svga_read(uint32_t addr, void *p)
addr &= svga->banked_mask;
addr += svga->read_bank;
// latch_addr = (addr << 2) % svga->vram_limit;
latch_addr = (addr << 2);
latch_addr = (addr << 2) % svga->vram_limit;
// latch_addr = (addr << 2);
// pclog("%05X %i %04X:%04X %02X %02X %i\n",addr,svga->chain4,CS,pc, vram[addr & 0x7fffff], vram[(addr << 2) & 0x7fffff], svga->readmode);
// pclog("%i\n", svga->readmode);
@@ -1097,6 +1097,7 @@ void svga_write_linear(uint32_t addr, uint8_t val, void *p)
if (svga_output) pclog("Write LFB %08X %02X ", addr, val);
if (!(svga->gdcreg[6] & 1))
svga->fullchange = 2;
addr -= svga->linear_base;
if (svga->chain4 || svga->fb_only)
{
writemask2=1<<(addr&3);
@@ -1281,6 +1282,8 @@ uint8_t svga_read_linear(uint32_t addr, void *p)
cycles_lost += video_timing_b;
egareads++;
addr -= svga->linear_base;
if (svga->chain4 || svga->fb_only)
{
@@ -1522,6 +1525,7 @@ void svga_writew_linear(uint32_t addr, uint16_t val, void *p)
if (svga_output) pclog("Write LFBw %08X %04X\n", addr, val);
// addr %= svga->vram_limit;
addr -= svga->linear_base;
if ((!svga->extvram) && (addr >= 0x10000)) return;
if (addr >= svga->vram_limit)
return;
@@ -1551,6 +1555,7 @@ void svga_writel_linear(uint32_t addr, uint32_t val, void *p)
if (svga_output) pclog("Write LFBl %08X %08X\n", addr, val);
// addr %= svga->vram_limit;
addr -= svga->linear_base;
if ((!svga->extvram) && (addr >= 0x10000)) return;
if (addr >= svga->vram_limit)
return;
@@ -1573,6 +1578,7 @@ uint16_t svga_readw_linear(uint32_t addr, void *p)
cycles_lost += video_timing_w;
// addr %= svga->vram_limit;
addr -= svga->linear_base;
if ((!svga->extvram) && (addr >= 0x10000)) return 0xffff;
if (addr >= svga->vram_limit) return 0xffff;
@@ -1594,6 +1600,7 @@ uint32_t svga_readl_linear(uint32_t addr, void *p)
cycles_lost += video_timing_l;
// addr %= svga->vram_limit;
addr -= svga->linear_base;
if ((!svga->extvram) && (addr >= 0x10000)) return 0xffffffff;
if (addr >= svga->vram_limit) return 0xffffffff;