Minor memory optimisations.

This commit is contained in:
TomW 2014-06-07 15:57:57 +01:00
commit 9ba75bd910
5 changed files with 46 additions and 90 deletions

View file

@ -43,20 +43,20 @@ uint8_t readmemb(uint32_t a)
{
if (a!=(cs+pc)) memcycs+=4;
if (readlookup2[(a)>>12]==0xFFFFFFFF) return readmembl(a);
else return ram[readlookup2[(a)>>12]+((a)&0xFFF)];
else return *(uint8_t *)(readlookup2[(a) >> 12] + (a));
}
uint8_t readmembf(uint32_t a)
{
if (readlookup2[(a)>>12]==0xFFFFFFFF) return readmembl(a);
else return ram[readlookup2[(a)>>12]+((a)&0xFFF)];
else return *(uint8_t *)(readlookup2[(a) >> 12] + (a));
}
uint16_t readmemw(uint32_t s, uint16_t a)
{
if (a!=(cs+pc)) memcycs+=(8>>is8086);
if ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF)) return readmemwl(s,a);
else return *((uint16_t *)(&ram[readlookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]));
else return *(uint16_t *)(readlookup2[(s + a) >> 12] + s + a);
}
void refreshread() { /*pclog("Refreshread\n"); */FETCHCOMPLETE(); memcycs+=4; }
@ -73,20 +73,20 @@ void writememb(uint32_t a, uint8_t v)
{
memcycs+=4;
if (writelookup2[(a)>>12]==0xFFFFFFFF) writemembl(a,v);
else ram[writelookup2[(a)>>12]+((a)&0xFFF)]=v;
else *(uint8_t *)(writelookup2[a >> 12] + a) = v;
}
void writememwl(uint32_t seg, uint32_t addr, uint16_t val);
void writememw(uint32_t s, uint32_t a, uint16_t v)
{
memcycs+=(8>>is8086);
if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememwl(s,a,v);
else *((uint16_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v;
else *(uint16_t *)(writelookup2[(s + a) >> 12] + s + a) = v;
}
void writememll(uint32_t seg, uint32_t addr, uint32_t val);
void writememl(uint32_t s, uint32_t a, uint32_t v)
{
if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememll(s,a,v);
else *((uint32_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v;
else *(uint32_t *)(writelookup2[(s + a) >> 12] + s + a) = v;
}
@ -614,11 +614,6 @@ chdir(pcempath);
}
printf("Entries in readlookup : %i writelookup : %i\n",d,e);
x87_dumpregs();
/* for (c=0;c<1024*1024;c++)
{
if (mmucache[c]!=0xFFFFFFFF) d++;
}
printf("Entries in MMU cache : %i\n",d);*/
indump = 0;
}
@ -642,7 +637,6 @@ void resetx86()
idt.base = 0;
flags=2;
makeznptable();
initmmucache();
resetreadlookup();
makemod1table();
resetmcr();