From 34c0db9c10c46596e4fe24587c219e6fb0e4685a Mon Sep 17 00:00:00 2001 From: TomW Date: Sat, 8 Aug 2015 11:25:16 +0100 Subject: [PATCH] Masked off the lower 12 bits of CR3. DESQview/X now works. --- src/mem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mem.c b/src/mem.c index d56c074..1bf325a 100644 --- a/src/mem.c +++ b/src/mem.c @@ -717,7 +717,7 @@ uint32_t mmutranslatereal(uint32_t addr, int rw) if (addr==0x77f61000) output = 3; if (addr==0x77f62000) { dumpregs(); exit(-1); } if (addr==0x77f9a000) { dumpregs(); exit(-1); }*/ - addr2=(cr3+((addr>>20)&0xFFC)); + addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc)); temp=temp2=((uint32_t *)ram)[addr2>>2]; // if (output == 3) pclog("Do translate %08X %i %08X\n", addr, rw, temp); if (!(temp&1))// || (CPL==3 && !(temp&4) && !cpl_override) || (rw && !(temp&2) && (CPL==3 || cr0&WP_FLAG))) @@ -779,7 +779,7 @@ uint32_t mmutranslate_noabrt(uint32_t addr, int rw) if (abrt) return -1; - addr2=(cr3+((addr>>20)&0xFFC)); + addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc)); temp=temp2=((uint32_t *)ram)[addr2>>2]; if (!(temp&1))