--- np2/i386c/memory.c 2004/03/09 16:31:18 1.17 +++ np2/i386c/memory.c 2004/03/10 23:01:08 1.19 @@ -813,6 +813,7 @@ REG8 MEMCALL i286_memoryread(UINT32 addr } #endif else { +// TRACEOUT(("out of mem (read8): %x", addr)); return(0xff); } } @@ -844,6 +845,7 @@ REG16 MEMCALL i286_memoryread_w(UINT32 a } #endif else { +// TRACEOUT(("out of mem (read16): %x", addr)); return(0xffff); } } @@ -902,6 +904,9 @@ void MEMCALL i286_memorywrite(UINT32 add mem9821_w(addr, value); } #endif + else { +// TRACEOUT(("out of mem (write8): %x", addr)); + } } else { memfn.wr8[(addr >> 15) & 0x1f](addr, value); @@ -929,6 +934,9 @@ void MEMCALL i286_memorywrite_w(UINT32 a mem9821_ww(addr, value); } #endif + else { +// TRACEOUT(("out of mem (write16): %x", addr)); + } } else { memfn.wr16[(addr >> 15) & 0x1f](addr, value); @@ -1087,18 +1095,31 @@ void MEMCALL memp_write(UINT32 address, static UINT32 physicaladdr(UINT32 addr) { + UINT32 a; UINT32 pde; UINT32 pte; if (CPU_STAT_PAGING) { - pde = i286_memoryread_d(CPU_STAT_PDE_BASE + ((addr >> 20) & 0xffc)); + a = CPU_STAT_PDE_BASE + ((addr >> 20) & 0xffc); + pde = i286_memoryread_d(a); if (!(pde & CPU_PDE_PRESENT)) { goto retdummy; } - pte = cpu_memoryread_d((pde & CPU_PDE_BASEADDR_MASK) + ((addr >> 10) & 0xffc)); +#if 0 + if (!(pde & CPU_PDE_ACCESS)) { + i286_memorywrite_d(a, pde | CPU_PDE_ACCESS); + } +#endif + a = (pde & CPU_PDE_BASEADDR_MASK) + ((addr >> 10) & 0xffc); + pte = cpu_memoryread_d(a); if (!(pte & CPU_PTE_PRESENT)) { goto retdummy; } +#if 0 + if (!(pte & CPU_PTE_ACCESS)) { + i286_memorywrite_d(a, pte | CPU_PTE_ACCESS); + } +#endif addr = (pte & CPU_PTE_BASEADDR_MASK) + (addr & 0x00000fff); } return(addr);