From 2bc2bbc93903498d14bae599b0268b5770b96cc7 Mon Sep 17 00:00:00 2001 From: TomW Date: Wed, 27 Jan 2016 21:05:28 +0000 Subject: [PATCH] Cached results of MMU lookup in get_phys(). --- src/mem.c | 2 ++ src/mem.h | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/mem.c b/src/mem.c index 6696726..01a7df7 100644 --- a/src/mem.c +++ b/src/mem.c @@ -1919,3 +1919,5 @@ void mem_a20_recalc() // pclog("rammask now %08X\n", rammask); mem_a20_state = state; } + +uint32_t get_phys_virt,get_phys_phys; diff --git a/src/mem.h b/src/mem.h index b6a926d..59a681a 100644 --- a/src/mem.h +++ b/src/mem.h @@ -118,13 +118,23 @@ extern page_t *pages; extern page_t **page_lookup; uint32_t mmutranslate_noabrt(uint32_t addr, int rw); - +extern uint32_t get_phys_virt,get_phys_phys; static inline get_phys(uint32_t addr) { - if (!(cr0 >> 31)) - return addr & rammask; + if (!((addr ^ get_phys_virt) & ~0xfff)) + return get_phys_phys | (addr & 0xfff); + + get_phys_virt = addr; - return mmutranslatereal(addr, 0) & rammask; + if (!(cr0 >> 31)) + { + get_phys_phys = (addr & rammask) & ~0xfff; + return addr & rammask; + } + + get_phys_phys = (mmutranslatereal(addr, 0) & rammask) & ~0xfff; + return get_phys_phys | (addr & 0xfff); +// return mmutranslatereal(addr, 0) & rammask; } static inline get_phys_noabrt(uint32_t addr)