Minor memory optimisations.
This commit is contained in:
parent
a66dddfb43
commit
9ba75bd910
5 changed files with 46 additions and 90 deletions
20
src/386.c
20
src/386.c
|
|
@ -55,16 +55,14 @@ int cgate32;
|
|||
#undef writememb
|
||||
|
||||
|
||||
#define readmemb(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF)?readmemb386l(s,a):ram[readlookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)])
|
||||
#define readmemb(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF)?readmemb386l(s,a): *(uint8_t *)(readlookup2[((s)+(a))>>12] + (s) + (a)) )
|
||||
|
||||
#define writememb(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememb386l(s,a,v); else ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]=v
|
||||
#define writememb(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememb386l(s,a,v); else *(uint8_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
|
||||
#define writememw(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE) writememwl(s,a,v); else *((uint16_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v
|
||||
#define writememl(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC) writememll(s,a,v); else *((uint32_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v
|
||||
#define writememw(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE) writememwl(s,a,v); else *(uint16_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
#define writememl(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC) writememll(s,a,v); else *(uint32_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
|
||||
|
||||
uint32_t mmucache[0x100000];
|
||||
|
||||
uint8_t romext[32768];
|
||||
uint8_t *ram,*rom;
|
||||
uint16_t biosmask;
|
||||
|
|
@ -194,7 +192,7 @@ static inline uint32_t geteal_mem()
|
|||
return readmeml(easeg,eaaddr);
|
||||
}
|
||||
|
||||
#define seteab(v) if (mod!=3) { /*if (eal_w) *(uint8_t *)eal_w=v; else */writememb386l(easeg,eaaddr,v); } else if (rm&4) regs[rm&3].b.h=v; else regs[rm].b.l=v
|
||||
#define seteab(v) if (mod!=3) { if (eal_w) *(uint8_t *)eal_w=v; else writememb386l(easeg,eaaddr,v); } else if (rm&4) regs[rm&3].b.h=v; else regs[rm].b.l=v
|
||||
#define seteaw(v) if (mod!=3) { if (eal_w) *(uint16_t *)eal_w=v; else writememwl(easeg,eaaddr,v); } else regs[rm].w=v
|
||||
#define seteal(v) if (mod!=3) { if (eal_w) *eal_w=v; else writememll(easeg,eaaddr,v); } else regs[rm].l=v
|
||||
|
||||
|
|
@ -269,9 +267,9 @@ static inline void fetch_ea_32_long(uint32_t rmdat)
|
|||
if (easeg != 0xFFFFFFFF && ((easeg + eaaddr) & 0xFFF) <= 0xFFC)
|
||||
{
|
||||
if ( readlookup2[(easeg + eaaddr) >> 12] != 0xFFFFFFFF)
|
||||
eal_r = (uint32_t *)&ram[ readlookup2[(easeg + eaaddr) >> 12] + ((easeg + eaaddr) & 0xFFF)];
|
||||
eal_r = (uint32_t *)(readlookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr);
|
||||
if (writelookup2[(easeg + eaaddr) >> 12] != 0xFFFFFFFF)
|
||||
eal_w = (uint32_t *)&ram[writelookup2[(easeg + eaaddr) >> 12] + ((easeg + eaaddr) & 0xFFF)];
|
||||
eal_w = (uint32_t *)(writelookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -307,9 +305,9 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
|||
if (easeg != 0xFFFFFFFF && ((easeg + eaaddr) & 0xFFF) <= 0xFFC)
|
||||
{
|
||||
if ( readlookup2[(easeg + eaaddr) >> 12] != 0xFFFFFFFF)
|
||||
eal_r = (uint32_t *)&ram[ readlookup2[(easeg + eaaddr) >> 12] + ((easeg + eaaddr) & 0xFFF)];
|
||||
eal_r = (uint32_t *)(readlookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr);
|
||||
if (writelookup2[(easeg + eaaddr) >> 12] != 0xFFFFFFFF)
|
||||
eal_w = (uint32_t *)&ram[writelookup2[(easeg + eaaddr) >> 12] + ((easeg + eaaddr) & 0xFFF)];
|
||||
eal_w = (uint32_t *)(writelookup2[(easeg + eaaddr) >> 12] + easeg + eaaddr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
18
src/808x.c
18
src/808x.c
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ int writelnext;
|
|||
|
||||
extern int mmu_perm;
|
||||
|
||||
#define readmemb(a) ((readlookup2[(a)>>12]==0xFFFFFFFF)?readmembl(a):ram[readlookup2[(a)>>12]+((a)&0xFFF)])
|
||||
#define readmemw(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE)?readmemwl(s,a):*((uint16_t *)(&ram[readlookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)])))
|
||||
#define readmeml(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC)?readmemll(s,a):*((uint32_t *)(&ram[readlookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)])))
|
||||
#define readmemb(a) ((readlookup2[(a)>>12]==0xFFFFFFFF)?readmembl(a):*(uint8_t *)(readlookup2[(a) >> 12] + (a)))
|
||||
#define readmemw(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE)?readmemwl(s,a):*(uint16_t *)(readlookup2[((s)+(a))>>12]+(s)+(a)))
|
||||
#define readmeml(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC)?readmemll(s,a):*(uint32_t *)(readlookup2[((s)+(a))>>12]+(s)+(a)))
|
||||
|
||||
//#define writememb(a,v) if (writelookup2[(a)>>12]==0xFFFFFFFF) writemembl(a,v); else ram[writelookup2[(a)>>12]+((a)&0xFFF)]=v
|
||||
//#define writememw(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememwl(s,a,v); else *((uint16_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v
|
||||
|
|
|
|||
84
src/mem.c
84
src/mem.c
|
|
@ -424,20 +424,8 @@ int loadbios()
|
|||
|
||||
|
||||
|
||||
uint32_t mmucache[0x100000];
|
||||
int mmucaches[64];
|
||||
int mmunext=0;
|
||||
int abrt=0;
|
||||
|
||||
void initmmucache()
|
||||
{
|
||||
int c;
|
||||
// if (output) pclog("initmmucache\n");
|
||||
memset(mmucache,0xFF,sizeof(mmucache));
|
||||
for (c=0;c<64;c++) mmucaches[c]=0xFFFFFFFF;
|
||||
mmunext=0;
|
||||
}
|
||||
|
||||
void resetreadlookup()
|
||||
{
|
||||
int c;
|
||||
|
|
@ -488,15 +476,6 @@ void flushmmucache()
|
|||
// memset(writelookup,0xFF,sizeof(writelookup));
|
||||
// memset(writelookup2,0xFF,1024*1024*4);
|
||||
/* if (!(cr0>>31)) return;*/
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
if (mmucaches[c]!=0xFFFFFFFF)
|
||||
{
|
||||
mmucache[mmucaches[c]]=0xFFFFFFFF;
|
||||
mmucaches[c]=0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
// pclog("Flush MMU cache\n");
|
||||
|
||||
/* for (c = 0; c < 1024*1024; c++)
|
||||
{
|
||||
|
|
@ -531,15 +510,6 @@ void flushmmucache_nopc()
|
|||
writelookup[c]=0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
mmuflush++;
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
if (mmucaches[c]!=0xFFFFFFFF)
|
||||
{
|
||||
mmucache[mmucaches[c]]=0xFFFFFFFF;
|
||||
mmucaches[c]=0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void flushmmucache_cr3()
|
||||
|
|
@ -559,15 +529,6 @@ void flushmmucache_cr3()
|
|||
writelookup[c]=0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
if (mmucaches[c]!=0xFFFFFFFF)
|
||||
{
|
||||
mmucache[mmucaches[c]]=0xFFFFFFFF;
|
||||
mmucaches[c]=0xFFFFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
/* for (c = 0; c < 1024*1024; c++)
|
||||
{
|
||||
if (readlookup2[c] != 0xFFFFFFFF)
|
||||
|
|
@ -586,8 +547,10 @@ void flushmmucache_cr3()
|
|||
}
|
||||
|
||||
extern int output;
|
||||
#define mmutranslate(addr,rw) mmutranslatereal(addr,rw)
|
||||
//#define mmutranslate(addr,rw) ((mmucache[addr>>12]!=0xFFFFFFFF)?(mmucache[addr>>12]+(addr&0xFFF)):mmutranslatereal(addr,rw))
|
||||
|
||||
#define mmutranslate_read(addr) mmutranslatereal(addr,0)
|
||||
#define mmutranslate_write(addr) mmutranslatereal(addr,1)
|
||||
|
||||
int pctrans=0;
|
||||
|
||||
extern uint32_t testr[9];
|
||||
|
|
@ -596,6 +559,7 @@ uint32_t mmutranslatereal(uint32_t addr, int rw)
|
|||
{
|
||||
uint32_t addr2;
|
||||
uint32_t temp,temp2,temp3;
|
||||
|
||||
if (abrt)
|
||||
{
|
||||
// pclog("Translate recursive abort\n");
|
||||
|
|
@ -707,7 +671,7 @@ void addreadlookup(uint32_t virt, uint32_t phys)
|
|||
readlookup2[readlookup[readlnext]]=0xFFFFFFFF;
|
||||
// readlnum--;
|
||||
}
|
||||
readlookup2[virt>>12]=phys&~0xFFF;
|
||||
readlookup2[virt>>12] = (uint32_t)&ram[(phys & ~0xFFF) - (virt & ~0xfff)];
|
||||
readlookupp[readlnext]=mmu_perm;
|
||||
readlookup[readlnext++]=virt>>12;
|
||||
readlnext&=(cachesize-1);
|
||||
|
|
@ -748,7 +712,7 @@ void addwritelookup(uint32_t virt, uint32_t phys)
|
|||
writelookup2[writelookup[writelnext]]=0xFFFFFFFF;
|
||||
// writelnum--;
|
||||
}
|
||||
writelookup2[virt>>12]=phys&~0xFFF;
|
||||
writelookup2[virt>>12] = (uint32_t)&ram[(phys & ~0xFFF) - (virt & ~0xfff)];
|
||||
writelookupp[writelnext]=mmu_perm;
|
||||
writelookup[writelnext++]=virt>>12;
|
||||
writelnext&=(cachesize-1);
|
||||
|
|
@ -764,7 +728,7 @@ uint8_t *getpccache(uint32_t a)
|
|||
{
|
||||
// if (output==3) pclog("Translate GetPCCache %08X\n",a);
|
||||
pctrans=1;
|
||||
a=mmutranslate(a,0);
|
||||
a = mmutranslate_read(a);
|
||||
pctrans=0;
|
||||
// if (output==3) pclog("GetPCCache output %08X\n",a);
|
||||
if (a==0xFFFFFFFF) return ram;
|
||||
|
|
@ -816,7 +780,7 @@ uint8_t readmembl(uint32_t addr)
|
|||
mem_logical_addr = addr;
|
||||
if (cr0 >> 31)
|
||||
{
|
||||
addr = mmutranslate(addr, 0);
|
||||
addr = mmutranslate_read(addr);
|
||||
if (addr == 0xFFFFFFFF) return 0xFF;
|
||||
}
|
||||
addr &= rammask;
|
||||
|
|
@ -832,7 +796,7 @@ void writemembl(uint32_t addr, uint8_t val)
|
|||
|
||||
if (cr0 >> 31)
|
||||
{
|
||||
addr = mmutranslate(addr,1);
|
||||
addr = mmutranslate_write(addr);
|
||||
if (addr == 0xFFFFFFFF) return;
|
||||
}
|
||||
addr &= rammask;
|
||||
|
|
@ -857,7 +821,7 @@ uint8_t readmemb386l(uint32_t seg, uint32_t addr)
|
|||
|
||||
if (cr0 >> 31)
|
||||
{
|
||||
addr = mmutranslate(addr, 0);
|
||||
addr = mmutranslate_read(addr);
|
||||
if (addr == 0xFFFFFFFF) return 0xFF;
|
||||
}
|
||||
|
||||
|
|
@ -880,7 +844,7 @@ void writememb386l(uint32_t seg, uint32_t addr, uint8_t val)
|
|||
mem_logical_addr = addr = addr + seg;
|
||||
if (cr0 >> 31)
|
||||
{
|
||||
addr = mmutranslate(addr, 1);
|
||||
addr = mmutranslate_write(addr);
|
||||
if (addr == 0xFFFFFFFF) return;
|
||||
}
|
||||
|
||||
|
|
@ -900,8 +864,8 @@ uint16_t readmemwl(uint32_t seg, uint32_t addr)
|
|||
{
|
||||
if (cr0>>31)
|
||||
{
|
||||
if (mmutranslate(addr2, 0) == 0xffffffff) return 0xffff;
|
||||
if (mmutranslate(addr2+1, 0) == 0xffffffff) return 0xffff;
|
||||
if (mmutranslate_read(addr2) == 0xffffffff) return 0xffff;
|
||||
if (mmutranslate_read(addr2+1) == 0xffffffff) return 0xffff;
|
||||
}
|
||||
if (is386) return readmemb386l(seg,addr)|(readmemb386l(seg,addr+1)<<8);
|
||||
else return readmembl(seg+addr)|(readmembl(seg+addr+1)<<8);
|
||||
|
|
@ -914,7 +878,7 @@ uint16_t readmemwl(uint32_t seg, uint32_t addr)
|
|||
}
|
||||
if (cr0>>31)
|
||||
{
|
||||
addr2=mmutranslate(addr2,0);
|
||||
addr2 = mmutranslate_read(addr2);
|
||||
if (addr2==0xFFFFFFFF) return 0xFFFF;
|
||||
}
|
||||
|
||||
|
|
@ -938,8 +902,8 @@ void writememwl(uint32_t seg, uint32_t addr, uint16_t val)
|
|||
{
|
||||
if (cr0>>31)
|
||||
{
|
||||
if (mmutranslate(addr2, 1) == 0xffffffff) return;
|
||||
if (mmutranslate(addr2+1, 1) == 0xffffffff) return;
|
||||
if (mmutranslate_write(addr2) == 0xffffffff) return;
|
||||
if (mmutranslate_write(addr2+1) == 0xffffffff) return;
|
||||
}
|
||||
if (is386)
|
||||
{
|
||||
|
|
@ -962,7 +926,7 @@ void writememwl(uint32_t seg, uint32_t addr, uint16_t val)
|
|||
}
|
||||
if (cr0>>31)
|
||||
{
|
||||
addr2=mmutranslate(addr2,1);
|
||||
addr2 = mmutranslate_write(addr2);
|
||||
if (addr2==0xFFFFFFFF) return;
|
||||
}
|
||||
|
||||
|
|
@ -993,8 +957,8 @@ uint32_t readmemll(uint32_t seg, uint32_t addr)
|
|||
{
|
||||
if (cr0>>31)
|
||||
{
|
||||
if (mmutranslate(addr2, 0) == 0xffffffff) return 0xffffffff;
|
||||
if (mmutranslate(addr2+3, 0) == 0xffffffff) return 0xffffffff;
|
||||
if (mmutranslate_read(addr2) == 0xffffffff) return 0xffffffff;
|
||||
if (mmutranslate_read(addr2+3) == 0xffffffff) return 0xffffffff;
|
||||
}
|
||||
return readmemwl(seg,addr)|(readmemwl(seg,addr+2)<<16);
|
||||
}
|
||||
|
|
@ -1008,7 +972,7 @@ uint32_t readmemll(uint32_t seg, uint32_t addr)
|
|||
|
||||
if (cr0>>31)
|
||||
{
|
||||
addr2=mmutranslate(addr2,0);
|
||||
addr2 = mmutranslate_read(addr2);
|
||||
if (addr2==0xFFFFFFFF) return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
|
|
@ -1032,8 +996,8 @@ void writememll(uint32_t seg, uint32_t addr, uint32_t val)
|
|||
{
|
||||
if (cr0>>31)
|
||||
{
|
||||
if (mmutranslate(addr2, 1) == 0xffffffff) return;
|
||||
if (mmutranslate(addr2+3, 1) == 0xffffffff) return;
|
||||
if (mmutranslate_write(addr2) == 0xffffffff) return;
|
||||
if (mmutranslate_write(addr2+3) == 0xffffffff) return;
|
||||
}
|
||||
writememwl(seg,addr,val);
|
||||
writememwl(seg,addr+2,val>>16);
|
||||
|
|
@ -1047,7 +1011,7 @@ void writememll(uint32_t seg, uint32_t addr, uint32_t val)
|
|||
}
|
||||
if (cr0>>31)
|
||||
{
|
||||
addr2=mmutranslate(addr2,1);
|
||||
addr2 = mmutranslate_write(addr2);
|
||||
if (addr2==0xFFFFFFFF) return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@
|
|||
#undef readmemb
|
||||
#undef writememb
|
||||
|
||||
#define readmemb(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF)?readmemb386l(s,a):ram[readlookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)])
|
||||
#define writememb(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememb386l(s,a,v); else ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]=v
|
||||
#define readmemb(s,a) ((readlookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF)?readmemb386l(s,a): *((uint8_t *)readlookup2[((s)+(a))>>12]+ (s) + (a)) )
|
||||
#define writememb(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF) writememb386l(s,a,v); else *(uint8_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
|
||||
#define writememw(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE) writememwl(s,a,v); else *((uint16_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v
|
||||
#define writememl(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC) writememll(s,a,v); else *((uint32_t *)(&ram[writelookup2[((s)+(a))>>12]+(((s)+(a))&0xFFF)]))=v
|
||||
#define writememw(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE) writememwl(s,a,v); else *(uint16_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
#define writememl(s,a,v) if (writelookup2[((s)+(a))>>12]==0xFFFFFFFF || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC) writememll(s,a,v); else *(uint32_t *)(writelookup2[((s) + (a)) >> 12] + (s) + (a)) = v
|
||||
|
||||
static inline uint8_t geteab()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue