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 }
