Fixed crashes in fastread*()

This commit is contained in:
TomW 2015-02-16 20:00:16 +00:00
commit c11a771530

View file

@ -67,29 +67,35 @@ extern uint16_t ea_rseg;
static inline uint8_t fastreadb(uint32_t a) static inline uint8_t fastreadb(uint32_t a)
{ {
uint8_t *t;
if ((a >> 12) == pccache) if ((a >> 12) == pccache)
return *((uint8_t *)&pccache2[a]); return *((uint8_t *)&pccache2[a]);
pccache2 = getpccache(a); t = getpccache(a);
if (abrt) if (abrt)
return; return;
pccache = a >> 12; pccache = a >> 12;
pccache2 = t;
return *((uint8_t *)&pccache2[a]); return *((uint8_t *)&pccache2[a]);
} }
static inline uint16_t fastreadw(uint32_t a) static inline uint16_t fastreadw(uint32_t a)
{ {
uint32_t t; uint8_t *t;
uint16_t val;
if ((a&0xFFF)>0xFFE) if ((a&0xFFF)>0xFFE)
{ {
t=readmemb(0,a); val = readmemb(0, a);
t|=(readmemb(0,a+1)<<8); val |= (readmemb(0, a + 1) << 8);
return t; return val;
} }
if ((a>>12)==pccache) return *((uint16_t *)&pccache2[a]); if ((a>>12)==pccache) return *((uint16_t *)&pccache2[a]);
pccache2=getpccache(a); t = getpccache(a);
if (abrt) if (abrt)
return; return;
pccache=a>>12;
pccache = a >> 12;
pccache2 = t;
return *((uint16_t *)&pccache2[a]); return *((uint16_t *)&pccache2[a]);
} }
@ -102,7 +108,8 @@ static inline uint32_t fastreadl(uint32_t a)
if ((a>>12)!=pccache) if ((a>>12)!=pccache)
{ {
t = getpccache(a); t = getpccache(a);
if (abrt) return 0; if (abrt)
return 0;
pccache2 = t; pccache2 = t;
pccache=a>>12; pccache=a>>12;
//return *((uint32_t *)&pccache2[a]); //return *((uint32_t *)&pccache2[a]);