diff --git a/src/386.c b/src/386.c index 6007e13..20ba4c7 100644 --- a/src/386.c +++ b/src/386.c @@ -125,10 +125,11 @@ static inline void fetch_ea_32_long(uint32_t rmdat) } if (easeg != 0xFFFFFFFF && ((easeg + eaaddr) & 0xFFF) <= 0xFFC) { - if ( readlookup2[(easeg + eaaddr) >> 12] != -1) - eal_r = (uint32_t *)(readlookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr); - if (writelookup2[(easeg + eaaddr) >> 12] != -1) - eal_w = (uint32_t *)(writelookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr); + uint32_t addr = easeg + eaaddr; + if ( readlookup2[addr >> 12] != -1) + eal_r = (uint32_t *)(readlookup2[addr >> 12] + addr); + if (writelookup2[addr >> 12] != -1) + eal_w = (uint32_t *)(writelookup2[addr >> 12] + addr); } } @@ -166,10 +167,11 @@ static inline void fetch_ea_16_long(uint32_t rmdat) } if (easeg != 0xFFFFFFFF && ((easeg + eaaddr) & 0xFFF) <= 0xFFC) { - if ( readlookup2[(easeg + eaaddr) >> 12] != -1) - eal_r = (uint32_t *)(readlookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr); - if (writelookup2[(easeg + eaaddr) >> 12] != -1) - eal_w = (uint32_t *)(writelookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr); + uint32_t addr = easeg + eaaddr; + if ( readlookup2[addr >> 12] != -1) + eal_r = (uint32_t *)(readlookup2[addr >> 12] + addr); + if (writelookup2[addr >> 12] != -1) + eal_w = (uint32_t *)(writelookup2[addr >> 12] + addr); } } diff --git a/src/mem.c b/src/mem.c index 316edcb..223eb98 100644 --- a/src/mem.c +++ b/src/mem.c @@ -495,13 +495,13 @@ void flushmmucache() { if (readlookup[c]!=0xFFFFFFFF) { - readlookup2[readlookup[c]]=0xFFFFFFFF; + readlookup2[readlookup[c]] = -1; readlookup[c]=0xFFFFFFFF; } if (writelookup[c] != 0xFFFFFFFF) { page_lookup[writelookup[c]] = NULL; - writelookup2[writelookup[c]] = 0xffffffff; + writelookup2[writelookup[c]] = -1; writelookup[c] = 0xFFFFFFFF; } } @@ -543,13 +543,13 @@ void flushmmucache_nopc() { if (readlookup[c]!=0xFFFFFFFF) { - readlookup2[readlookup[c]]=0xFFFFFFFF; + readlookup2[readlookup[c]] = -1; readlookup[c]=0xFFFFFFFF; } if (writelookup[c] != 0xFFFFFFFF) { page_lookup[writelookup[c]] = NULL; - writelookup2[writelookup[c]] = 0xffffffff; + writelookup2[writelookup[c]] = -1; writelookup[c] = 0xFFFFFFFF; } } @@ -563,13 +563,13 @@ void flushmmucache_cr3() { if (readlookup[c]!=0xFFFFFFFF)// && !readlookupp[c]) { - readlookup2[readlookup[c]]=0xFFFFFFFF; + readlookup2[readlookup[c]] = -1; readlookup[c]=0xFFFFFFFF; } if (writelookup[c] != 0xFFFFFFFF)// && !writelookupp[c]) { page_lookup[writelookup[c]] = NULL; - writelookup2[writelookup[c]] = 0xffffffff; + writelookup2[writelookup[c]] = -1; writelookup[c] = 0xFFFFFFFF; } } @@ -607,7 +607,7 @@ void mem_flush_write_page(uint32_t addr, uint32_t virt) if (writelookup2[writelookup[c]] == target || page_lookup[writelookup[c]] == page_target) { // pclog(" throw out %02x %p %p\n", writelookup[c], (void *)page_lookup[writelookup[c]], (void *)writelookup2[writelookup[c]]); - writelookup2[writelookup[c]] = 0xffffffff; + writelookup2[writelookup[c]] = -1; page_lookup[writelookup[c]] = NULL; writelookup[c] = 0xffffffff; } @@ -735,7 +735,7 @@ void addreadlookup(uint32_t virt, uint32_t phys) if (virt == 0xffffffff) return; - if (readlookup2[virt>>12]!=0xFFFFFFFF) + if (readlookup2[virt>>12] != -1) { /* if (readlookup2[virt>>12] != phys&~0xfff) { @@ -760,7 +760,7 @@ void addreadlookup(uint32_t virt, uint32_t phys) if (readlookup[readlnext]!=0xFFFFFFFF) { - readlookup2[readlookup[readlnext]]=0xFFFFFFFF; + readlookup2[readlookup[readlnext]] = -1; // readlnum--; } readlookup2[virt>>12] = (uintptr_t)&ram[(uintptr_t)(phys & ~0xFFF) - (uintptr_t)(virt & ~0xfff)]; @@ -799,10 +799,10 @@ void addwritelookup(uint32_t virt, uint32_t phys) } cycles-=memwaitstate; - if (writelookup[writelnext] != 0xFFFFFFFF) + if (writelookup[writelnext] != -1) { page_lookup[writelookup[writelnext]] = NULL; - writelookup2[writelookup[writelnext]]=0xFFFFFFFF; + writelookup2[writelookup[writelnext]] = -1; // writelnum--; } // if (page_lookup[virt >> 12] && (writelookup2[virt>>12] != 0xffffffff))