PCem

changeset 138:528f6c46c324

Tweaked ET4000/W32p blitter, no longer hangs in Windows NT.
author TomW
date Mon Jul 28 21:14:13 2014 +0100
parents 6f30fb98b7f2
children eee628bf93de
files src/vid_et4000w32.c
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line diff
     1.1 --- a/src/vid_et4000w32.c	Mon Jul 28 20:32:56 2014 +0100
     1.2 +++ b/src/vid_et4000w32.c	Mon Jul 28 21:14:13 2014 +0100
     1.3 @@ -351,6 +351,7 @@
     1.4          svga_t *svga = &et4000->svga;
     1.5          int bank;
     1.6  //        pclog("ET4K write %08X %02X %02X %04X(%08X):%08X\n",addr,val,et4000->acl.status,et4000->acl.internal.ctrl_routing,CS,cs,pc);
     1.7 +        et4000->acl.status |= ACL_RDST;
     1.8          switch (addr & 0x6000)
     1.9          {
    1.10                  case 0x0000: /*MMU 0*/
    1.11 @@ -499,9 +500,10 @@
    1.12                          case 0x7f13: return et4000->mmu.ctrl;
    1.13  
    1.14                          case 0x7f36:
    1.15 -//                                pclog("Read ACL status %02X\n",et4000->acl.status);
    1.16 +                        temp = et4000->acl.status;
    1.17 +                        et4000->acl.status &= ~ACL_RDST;
    1.18  //                        if (et4000->acl.internal.pos_x!=et4000->acl.internal.count_x || et4000->acl.internal.pos_y!=et4000->acl.internal.count_y) return et4000->acl.status | ACL_XYST;
    1.19 -                        return et4000->acl.status;
    1.20 +                        return temp;
    1.21                          case 0x7f80: return et4000->acl.internal.pattern_addr;
    1.22                          case 0x7f81: return et4000->acl.internal.pattern_addr >> 8;
    1.23                          case 0x7f82: return et4000->acl.internal.pattern_addr >> 16;
    1.24 @@ -559,7 +561,7 @@
    1.25          et4000->acl.dest_back   = et4000->acl.dest_addr;
    1.26          et4000->acl.internal.pos_x = et4000->acl.internal.pos_y = 0;
    1.27          et4000->acl.pattern_x = et4000->acl.source_x = et4000->acl.pattern_y = et4000->acl.source_y = 0;
    1.28 -        et4000->acl.status = ACL_XYST;
    1.29 +        et4000->acl.status |= ACL_XYST;
    1.30          if ((!(et4000->acl.internal.ctrl_routing & 7) || (et4000->acl.internal.ctrl_routing & 4)) && !(et4000->acl.internal.ctrl_routing & 0x40)) 
    1.31                  et4000->acl.status |= ACL_SSO;
    1.32          
    1.33 @@ -782,7 +784,7 @@
    1.34                                  if (et4000->acl.internal.pos_x > et4000->acl.internal.count_x ||
    1.35                                      et4000->acl.internal.pos_y > et4000->acl.internal.count_y)
    1.36                                  {
    1.37 -                                        et4000->acl.status = 0;
    1.38 +                                        et4000->acl.status &= ~(ACL_XYST | ACL_SSO);
    1.39  //                                        pclog("Blit line over\n");
    1.40                                          return;
    1.41                                  }
    1.42 @@ -865,7 +867,7 @@
    1.43                                  et4000->acl.internal.pos_x = 0;
    1.44                                  if (et4000->acl.internal.pos_y > et4000->acl.internal.count_y)
    1.45                                  {
    1.46 -                                        et4000->acl.status = 0;
    1.47 +                                        et4000->acl.status &= ~(ACL_XYST | ACL_SSO);
    1.48  //                                        pclog("Blit over\n");
    1.49                                          return;
    1.50                                  }