Mach64 now disables VGA data processing on LFB writes. Windows 9x DOS boxes now rendered correctly.
This commit is contained in:
parent
7671f1e90d
commit
74793aaf99
3 changed files with 11 additions and 5 deletions
|
|
@ -630,7 +630,7 @@ void mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
|
|||
int mix;
|
||||
int dst_x = mach64->accel.dst_x + mach64->accel.dst_x_start;
|
||||
int dst_y = mach64->accel.dst_y + mach64->accel.dst_y_start;
|
||||
|
||||
|
||||
if (mach64->accel.source_host)
|
||||
{
|
||||
host_dat = cpu_dat;
|
||||
|
|
@ -1291,6 +1291,10 @@ void mach64_ext_writeb(uint32_t addr, uint8_t val, void *p)
|
|||
|
||||
case 0x1c: case 0x1d: case 0x1e: case 0x1f:
|
||||
WRITE8(addr, mach64->crtc_gen_cntl, val);
|
||||
if (((mach64->crtc_gen_cntl >> 24) & 3) == 3)
|
||||
svga->fb_only = 1;
|
||||
else
|
||||
svga->fb_only = 0;
|
||||
svga_recalctimings(&mach64->svga);
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -660,7 +660,7 @@ void svga_write(uint32_t addr, uint8_t val, void *p)
|
|||
addr += svga->write_bank;
|
||||
|
||||
if (!(svga->gdcreg[6] & 1)) svga->fullchange=2;
|
||||
if (svga->chain4)
|
||||
if (svga->chain4 || svga->fb_only)
|
||||
{
|
||||
writemask2=1<<(addr&3);
|
||||
addr&=~3;
|
||||
|
|
@ -836,7 +836,7 @@ uint8_t svga_read(uint32_t addr, void *p)
|
|||
|
||||
// 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);
|
||||
if (svga->chain4)
|
||||
if (svga->chain4 || svga->fb_only)
|
||||
{
|
||||
addr &= 0x7fffff;
|
||||
if (addr >= svga->vram_limit)
|
||||
|
|
@ -888,7 +888,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;
|
||||
if (svga->chain4)
|
||||
if (svga->chain4 || svga->fb_only)
|
||||
{
|
||||
writemask2=1<<(addr&3);
|
||||
addr&=~3;
|
||||
|
|
@ -1057,7 +1057,7 @@ uint8_t svga_read_linear(uint32_t addr, void *p)
|
|||
|
||||
egareads++;
|
||||
|
||||
if (svga->chain4)
|
||||
if (svga->chain4 || svga->fb_only)
|
||||
{
|
||||
addr &= 0x7fffff;
|
||||
if (addr >= svga->vram_limit)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ typedef struct svga_t
|
|||
|
||||
uint8_t plane_mask;
|
||||
|
||||
int fb_only;
|
||||
|
||||
int fast;
|
||||
uint8_t colourcompare, colournocare;
|
||||
int readmode, writemode, readplane;
|
||||
|
|
|
|||
Loading…
Reference in a new issue