From c11a771530e5d08ae70505936110d7bfc0fd5fcc Mon Sep 17 00:00:00 2001 From: TomW Date: Mon, 16 Feb 2015 20:00:16 +0000 Subject: [PATCH] Fixed crashes in fastread*() --- src/386_common.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/386_common.h b/src/386_common.h index f5cf73b..e8c8c06 100644 --- a/src/386_common.h +++ b/src/386_common.h @@ -67,29 +67,35 @@ extern uint16_t ea_rseg; static inline uint8_t fastreadb(uint32_t a) { + uint8_t *t; + if ((a >> 12) == pccache) return *((uint8_t *)&pccache2[a]); - pccache2 = getpccache(a); + t = getpccache(a); if (abrt) return; pccache = a >> 12; + pccache2 = t; return *((uint8_t *)&pccache2[a]); } static inline uint16_t fastreadw(uint32_t a) { - uint32_t t; + uint8_t *t; + uint16_t val; if ((a&0xFFF)>0xFFE) { - t=readmemb(0,a); - t|=(readmemb(0,a+1)<<8); - return t; + val = readmemb(0, a); + val |= (readmemb(0, a + 1) << 8); + return val; } if ((a>>12)==pccache) return *((uint16_t *)&pccache2[a]); - pccache2=getpccache(a); + t = getpccache(a); if (abrt) return; - pccache=a>>12; + + pccache = a >> 12; + pccache2 = t; return *((uint16_t *)&pccache2[a]); } @@ -102,7 +108,8 @@ static inline uint32_t fastreadl(uint32_t a) if ((a>>12)!=pccache) { t = getpccache(a); - if (abrt) return 0; + if (abrt) + return 0; pccache2 = t; pccache=a>>12; //return *((uint32_t *)&pccache2[a]);