PCem

changeset 51:8e106d6280de

Mach64 now disables VGA data processing on LFB writes. Windows 9x DOS boxes now rendered correctly.
author TomW
date Sun Dec 15 14:29:52 2013 +0000
parents 35566d85aeeb
children 91b90b67515a
files src/vid_ati_mach64.c src/vid_svga.c src/vid_svga.h
diffstat 3 files changed, 11 insertions(+), 5 deletions(-) [+]
line diff
     1.1 --- a/src/vid_ati_mach64.c	Sat Dec 14 11:31:37 2013 +0000
     1.2 +++ b/src/vid_ati_mach64.c	Sun Dec 15 14:29:52 2013 +0000
     1.3 @@ -630,7 +630,7 @@
     1.4                          int mix;
     1.5                          int dst_x = mach64->accel.dst_x + mach64->accel.dst_x_start;
     1.6                          int dst_y = mach64->accel.dst_y + mach64->accel.dst_y_start;
     1.7 -                
     1.8 +
     1.9                          if (mach64->accel.source_host)
    1.10                          {
    1.11                                  host_dat = cpu_dat;
    1.12 @@ -1291,6 +1291,10 @@
    1.13  
    1.14                  case 0x1c: case 0x1d: case 0x1e: case 0x1f:
    1.15                  WRITE8(addr, mach64->crtc_gen_cntl, val);
    1.16 +                if (((mach64->crtc_gen_cntl >> 24) & 3) == 3)
    1.17 +                        svga->fb_only = 1;
    1.18 +                else
    1.19 +                        svga->fb_only = 0;
    1.20                  svga_recalctimings(&mach64->svga);
    1.21                  break;
    1.22  
     2.1 --- a/src/vid_svga.c	Sat Dec 14 11:31:37 2013 +0000
     2.2 +++ b/src/vid_svga.c	Sun Dec 15 14:29:52 2013 +0000
     2.3 @@ -660,7 +660,7 @@
     2.4          addr += svga->write_bank;
     2.5  
     2.6          if (!(svga->gdcreg[6] & 1)) svga->fullchange=2;
     2.7 -        if (svga->chain4)
     2.8 +        if (svga->chain4 || svga->fb_only)
     2.9          {
    2.10                  writemask2=1<<(addr&3);
    2.11                  addr&=~3;
    2.12 @@ -836,7 +836,7 @@
    2.13  
    2.14  //        pclog("%05X %i %04X:%04X %02X %02X %i\n",addr,svga->chain4,CS,pc, vram[addr & 0x7fffff], vram[(addr << 2) & 0x7fffff], svga->readmode);
    2.15  //        pclog("%i\n", svga->readmode);
    2.16 -        if (svga->chain4) 
    2.17 +        if (svga->chain4 || svga->fb_only) 
    2.18          { 
    2.19                  addr &= 0x7fffff;
    2.20                  if (addr >= svga->vram_limit)
    2.21 @@ -888,7 +888,7 @@
    2.22          if (svga_output) pclog("Write LFB %08X %02X ", addr, val);
    2.23          if (!(svga->gdcreg[6] & 1)) 
    2.24                  svga->fullchange = 2;
    2.25 -        if (svga->chain4)
    2.26 +        if (svga->chain4 || svga->fb_only)
    2.27          {
    2.28                  writemask2=1<<(addr&3);
    2.29                  addr&=~3;
    2.30 @@ -1057,7 +1057,7 @@
    2.31  
    2.32          egareads++;
    2.33          
    2.34 -        if (svga->chain4) 
    2.35 +        if (svga->chain4 || svga->fb_only) 
    2.36          { 
    2.37                  addr &= 0x7fffff;
    2.38                  if (addr >= svga->vram_limit)
     3.1 --- a/src/vid_svga.h	Sat Dec 14 11:31:37 2013 +0000
     3.2 +++ b/src/vid_svga.h	Sun Dec 15 14:29:52 2013 +0000
     3.3 @@ -25,6 +25,8 @@
     3.4          
     3.5          uint8_t plane_mask;
     3.6          
     3.7 +        int fb_only;
     3.8 +        
     3.9          int fast;
    3.10          uint8_t colourcompare, colournocare;
    3.11          int readmode, writemode, readplane;