Start cleaning this mess up.
This commit is contained in:
parent
d337fd792e
commit
6a95870443
|
@ -152,15 +152,15 @@ extern UINT8 global_opcode;
|
|||
extern INT32 cycles;
|
||||
|
||||
/*Memory*/
|
||||
extern UINT8 *ram;
|
||||
extern UINT8 *rom;
|
||||
extern UINT8 *SNES_ram;
|
||||
extern UINT8 *SNES_rom;
|
||||
extern UINT8 *memlookup[2048];
|
||||
extern UINT8 memread[2048],memwrite[2048];
|
||||
extern UINT8 accessspeed[2048];
|
||||
extern UINT8 *memread;
|
||||
extern UINT8 *memwrite;
|
||||
extern UINT8 *accessspeed;
|
||||
|
||||
extern INT32 lorom;
|
||||
UINT8 readmeml(unsigned long adress);
|
||||
void writememl(unsigned long adress, unsigned char v);
|
||||
|
||||
|
||||
unsigned char snes_readmem(unsigned long adress);
|
||||
void snes_writemem(unsigned long ad, unsigned char v);
|
||||
|
@ -240,10 +240,10 @@ void resetsnem();
|
|||
void execframe();
|
||||
void loadrom(char *fn);
|
||||
|
||||
void initmem();
|
||||
void snes_mapmem();
|
||||
void freemem();
|
||||
extern unsigned short srammask;
|
||||
extern unsigned char *sram;
|
||||
extern unsigned char *SNES_sram;
|
||||
extern INT32 spctotal;
|
||||
|
||||
// snes_main.cpp
|
||||
|
|
|
@ -8,14 +8,312 @@ INT32 oldnmi=0;
|
|||
INT32 spcclck;
|
||||
double spcclck2,spcclck3;
|
||||
|
||||
extern int pal;
|
||||
UINT16 srammask=0;
|
||||
|
||||
|
||||
static UINT8 *AllMem;
|
||||
static UINT8 *MemEnd;
|
||||
static UINT8 *AllRam;
|
||||
static UINT8 *RamEnd;
|
||||
|
||||
UINT8 *SNES_sram;
|
||||
UINT8 *SNES_ram;
|
||||
UINT8 *SNES_rom;
|
||||
UINT8 *memlookup[2048];
|
||||
UINT8 *memread;
|
||||
UINT8 *memwrite;
|
||||
UINT8 *accessspeed;
|
||||
INT32 lorom;
|
||||
|
||||
|
||||
static INT32 MemIndex(UINT32 cart_size)
|
||||
{
|
||||
UINT8 *Next; Next = AllMem;
|
||||
|
||||
SNES_rom = Next; Next += cart_size;
|
||||
// Technically these are not ram but need to be saved with machine state but not reset with machine
|
||||
memread = Next; Next += 0x800;
|
||||
memwrite = Next; Next += 0x800;
|
||||
accessspeed = Next; Next += 0x800;
|
||||
AllRam = Next;
|
||||
// but these really are ram
|
||||
SNES_ram = Next; Next += 0x20000;
|
||||
SNES_sram = Next; Next += 0x2000;
|
||||
RamEnd = Next;
|
||||
MemEnd = Next;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void freemem()
|
||||
{
|
||||
for (int i=0;i<2048;i++)
|
||||
{
|
||||
memlookup[i]=NULL;
|
||||
}
|
||||
BurnFree (AllMem);
|
||||
}
|
||||
|
||||
|
||||
void __cdecl snemlog(TCHAR *format,...)
|
||||
{
|
||||
bprintf(0,format);
|
||||
}
|
||||
|
||||
void snes_mapmem()
|
||||
{
|
||||
|
||||
int c,d;
|
||||
for (c=0;c<0x800;c++)
|
||||
{
|
||||
memread[c]=0;
|
||||
memwrite[c]=0;
|
||||
}
|
||||
if (lorom)
|
||||
{
|
||||
for (c=0;c<96;c++)
|
||||
{
|
||||
for (d=0;d<4;d++)
|
||||
{
|
||||
memread[(c<<3)|(d+4)]=1;
|
||||
memlookup[(c<<3)|(d+4)]=&SNES_rom[((d*0x2000)+(c*0x8000))&0x3FFFFF];
|
||||
memread[(c<<3)|(d+4)|0x400]=1;
|
||||
memlookup[(c<<3)|(d+4)|0x400]=&SNES_rom[((d*0x2000)+(c*0x8000))&0x3FFFFF];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0]=memwrite[(c<<3)|0]=1;
|
||||
memlookup[(c<<3)|0]=SNES_ram;
|
||||
}
|
||||
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0x400]=memwrite[(c<<3)|0x400]=1;
|
||||
memlookup[(c<<3)|0x400]=SNES_ram;
|
||||
}
|
||||
|
||||
for (c=0;c<8;c++)
|
||||
{
|
||||
memread[(0x7E<<3)|c]=memwrite[(0x7E<<3)|c]=1;
|
||||
memlookup[(0x7E<<3)|c]=&SNES_ram[c*0x2000];
|
||||
memread[(0x7F<<3)|c]=memwrite[(0x7F<<3)|c]=1;
|
||||
memlookup[(0x7F<<3)|c]=&SNES_ram[(c*0x2000)+0x10000];
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
for (c=0;c<2048;c++)
|
||||
{
|
||||
memread[c]=1;
|
||||
memwrite[c]=0;
|
||||
memlookup[c]=&SNES_rom[(c*0x2000)&0x3FFFFF];
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
for (d=1;d<4;d++)
|
||||
{
|
||||
memread[(c<<3)+d]=memwrite[(c<<3)+d]=0;
|
||||
memread[(c<<3)+d+1024]=memwrite[(c<<3)+d+1024]=0;
|
||||
}
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0]=memwrite[(c<<3)|0]=1;
|
||||
memlookup[(c<<3)|0]=SNES_ram;
|
||||
memread[(c<<3)|1024]=memwrite[(c<<3)|1024]=1;
|
||||
memlookup[(c<<3)|1024]=SNES_ram;
|
||||
}
|
||||
for (c=0;c<8;c++)
|
||||
{
|
||||
memread[(0x7E<<3)|c]=memwrite[(0x7E<<3)|c]=1;
|
||||
memlookup[(0x7E<<3)|c]=&SNES_ram[c*0x2000];
|
||||
memread[(0x7F<<3)|c]=memwrite[(0x7F<<3)|c]=1;
|
||||
memlookup[(0x7F<<3)|c]=&SNES_ram[(c*0x2000)+0x10000];
|
||||
}
|
||||
for (c=0;c<16;c++)
|
||||
{
|
||||
memread[(0x70<<3)+c]=memwrite[(0x70<<3)+c]=1;
|
||||
memlookup[(0x70<<3)+c]=SNES_sram;
|
||||
}
|
||||
}
|
||||
/*Set up access speed table*/
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
accessspeed[(c<<3)|0]=8;
|
||||
accessspeed[(c<<3)|1]=6;
|
||||
accessspeed[(c<<3)|2]=6;
|
||||
accessspeed[(c<<3)|3]=6;
|
||||
accessspeed[(c<<3)|4]=accessspeed[(c<<3)|5]=8;
|
||||
accessspeed[(c<<3)|6]=accessspeed[(c<<3)|7]=8;
|
||||
}
|
||||
for (c=64;c<128;c++)
|
||||
{
|
||||
for (d=0;d<8;d++)
|
||||
{
|
||||
accessspeed[(c<<3)|d]=8;
|
||||
}
|
||||
}
|
||||
for (c=128;c<192;c++)
|
||||
{
|
||||
accessspeed[(c<<3)|0]=8;
|
||||
accessspeed[(c<<3)|1]=6;
|
||||
accessspeed[(c<<3)|2]=6;
|
||||
accessspeed[(c<<3)|3]=6;
|
||||
accessspeed[(c<<3)|4]=accessspeed[(c<<3)|5]=8;
|
||||
accessspeed[(c<<3)|6]=accessspeed[(c<<3)|7]=8;
|
||||
}
|
||||
for (c=192;c<256;c++)
|
||||
{
|
||||
for (d=0;d<8;d++)
|
||||
{
|
||||
accessspeed[(c<<3)|d]=8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char snes_readmem(unsigned long addr)
|
||||
{
|
||||
cycles-=accessspeed[(addr>>13)&0x7FF];
|
||||
clockspc(accessspeed[(addr>>13)&0x7FF]);
|
||||
if (memread[(addr>>13)&0x7FF])
|
||||
{
|
||||
return memlookup[(addr>>13)&0x7FF][addr&0x1FFF];
|
||||
}
|
||||
|
||||
addr&=~0xFF000000;
|
||||
|
||||
if (((addr>>16)&0x7F)<0x40)
|
||||
{
|
||||
switch (addr&0xF000)
|
||||
{
|
||||
case 0x2000:
|
||||
return readppu(addr);
|
||||
case 0x4000:
|
||||
if ((addr&0xE00)==0x200)
|
||||
{
|
||||
return readio(addr);
|
||||
}
|
||||
if ((addr&0xFFFE)==0x4016)
|
||||
{
|
||||
return readjoyold(addr);
|
||||
}
|
||||
//snemlog(L"Bad Read %06X\n",addr);
|
||||
return 0;
|
||||
case 0x6000:
|
||||
case 0x7000:
|
||||
if (!lorom)
|
||||
{
|
||||
return SNES_sram[addr&srammask];
|
||||
}
|
||||
default:
|
||||
//snemlog(L"Bad read %06X\n",addr);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
if ((addr>>16)>=0xD0 && (addr>>16)<=0xFE)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x70)
|
||||
{
|
||||
if (srammask)
|
||||
{
|
||||
return SNES_sram[addr&srammask];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x60)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//snemlog(L"Bad read %06X\n",addr);
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void snes_writemem(unsigned long addr, unsigned char val)
|
||||
{
|
||||
cycles-=accessspeed[(addr>>13)&0x7FF];
|
||||
clockspc(accessspeed[(addr>>13)&0x7FF]);
|
||||
if (memwrite[(addr>>13)&0x7FF])
|
||||
{
|
||||
memlookup[(addr>>13)&0x7FF][(addr)&0x1FFF]=val;
|
||||
return;
|
||||
}
|
||||
|
||||
addr&=~0xFF000000;
|
||||
if (((addr>>16)&0x7F)<0x40)
|
||||
{
|
||||
switch (addr&0xF000)
|
||||
{
|
||||
|
||||
case 0x2000:
|
||||
writeppu(addr,val);
|
||||
return;
|
||||
|
||||
case 0x3000:
|
||||
return;
|
||||
|
||||
case 0x4000:
|
||||
if ((addr&0xE00)==0x200)
|
||||
writeio(addr,val);
|
||||
if ((addr&0xFFFE)==0x4016)
|
||||
writejoyold(addr,val);
|
||||
return;
|
||||
|
||||
case 0x5000:
|
||||
return;
|
||||
|
||||
case 0x6000:
|
||||
case 0x7000:
|
||||
if (!lorom)
|
||||
{
|
||||
SNES_sram[addr&srammask]=val;
|
||||
}
|
||||
return;
|
||||
case 0x8000:
|
||||
case 0x9000:
|
||||
case 0xA000:
|
||||
case 0xB000:
|
||||
case 0xC000:
|
||||
case 0xD000:
|
||||
case 0xE000:
|
||||
case 0xF000:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
//snemlog(L"Bad write %06X %02X\n",addr,val);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ((addr>>16)>=0xD0 && (addr>>16)<=0xFE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x70)
|
||||
{
|
||||
SNES_sram[addr&srammask]=val;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SnesReset()
|
||||
{
|
||||
memset (AllRam, 0, RamEnd - AllRam);
|
||||
resetppu();
|
||||
resetspc();
|
||||
reset65816();
|
||||
|
@ -29,8 +327,18 @@ INT32 SnesInit()
|
|||
char name[22];
|
||||
INT32 len;
|
||||
UINT16 temp,temp2;
|
||||
|
||||
allocmem();
|
||||
|
||||
struct BurnRomInfo ri;
|
||||
BurnDrvGetRomInfo(&ri, 0);
|
||||
UINT32 length = ri.nLen;
|
||||
|
||||
AllMem = NULL;
|
||||
MemIndex(length);
|
||||
INT32 nLen = MemEnd - (UINT8 *)0;
|
||||
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
||||
memset(AllMem, 0, nLen);
|
||||
MemIndex(length);
|
||||
|
||||
initppu();
|
||||
initspc();
|
||||
makeopcodetable();
|
||||
|
@ -41,12 +349,12 @@ INT32 SnesInit()
|
|||
|
||||
spccycles=-10000;
|
||||
|
||||
rom=(UINT8*)BurnMalloc(4096*1024);
|
||||
BurnLoadRom(rom,0,0);
|
||||
|
||||
BurnLoadRom(SNES_rom,0,0);
|
||||
|
||||
|
||||
temp=rom[0x7FDC]|(rom[0x7FDD]<<8);
|
||||
temp2=rom[0x7FDE]|(rom[0x7FDF]<<8);
|
||||
temp=SNES_rom[0x7FDC]|(SNES_rom[0x7FDD]<<8);
|
||||
temp2=SNES_rom[0x7FDE]|(SNES_rom[0x7FDF]<<8);
|
||||
if ((temp|temp2)==0xFFFF)
|
||||
{
|
||||
lorom=1;
|
||||
|
@ -56,12 +364,12 @@ INT32 SnesInit()
|
|||
lorom=0;
|
||||
}
|
||||
|
||||
initmem();
|
||||
snes_mapmem();
|
||||
|
||||
if (((snes_readmem(0xFFFD)<<8)|snes_readmem(0xFFFC))==0xFFFF)
|
||||
{
|
||||
lorom^=1;
|
||||
initmem();
|
||||
snes_mapmem();
|
||||
}
|
||||
|
||||
len=counter;//-0x10000;
|
||||
|
@ -89,10 +397,10 @@ INT32 SnesInit()
|
|||
|
||||
if (srammask)
|
||||
{
|
||||
memset(sram,0,srammask+1);
|
||||
memset(SNES_sram,0,srammask+1);
|
||||
}
|
||||
|
||||
memset(ram,0x55,128*1024);
|
||||
memset(SNES_ram,0x55,128*1024);
|
||||
|
||||
SnesReset();
|
||||
|
||||
|
|
|
@ -1,298 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include "snes.h"
|
||||
|
||||
extern int pal;
|
||||
UINT16 srammask=0;
|
||||
|
||||
UINT8 *sram;
|
||||
UINT8 *ram;
|
||||
UINT8 *rom;
|
||||
UINT8 *memlookup[2048];
|
||||
UINT8 memread[2048];
|
||||
UINT8 memwrite[2048];
|
||||
UINT8 accessspeed[2048];
|
||||
INT32 lorom;
|
||||
|
||||
void allocmem()
|
||||
{
|
||||
ram=(UINT8*)BurnMalloc(128*1024);
|
||||
memset(ram,0x55,128*1024);
|
||||
sram=(UINT8*)BurnMalloc(8192);
|
||||
memset(sram,0,8192);
|
||||
}
|
||||
|
||||
void freemem()
|
||||
{
|
||||
for (int i=0;i<2048;i++)
|
||||
{
|
||||
memlookup[i]=NULL;
|
||||
memread[i]=0;
|
||||
memwrite[i]=0;
|
||||
accessspeed[i]=0;
|
||||
|
||||
}
|
||||
if (ram !=NULL)
|
||||
{
|
||||
BurnFree(ram);
|
||||
}
|
||||
if (sram!=NULL)
|
||||
{
|
||||
BurnFree(sram);
|
||||
}
|
||||
if (rom!=NULL)
|
||||
{
|
||||
BurnFree(rom);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void initmem()
|
||||
{
|
||||
|
||||
int c,d;
|
||||
for (c=0;c<256;c++)
|
||||
{
|
||||
for (d=0;d<8;d++)
|
||||
{
|
||||
memread[(c<<3)|d]=memwrite[(c<<3)|d]=0;
|
||||
}
|
||||
}
|
||||
if (lorom)
|
||||
{
|
||||
for (c=0;c<96;c++)
|
||||
{
|
||||
for (d=0;d<4;d++)
|
||||
{
|
||||
memread[(c<<3)|(d+4)]=1;
|
||||
memlookup[(c<<3)|(d+4)]=&rom[((d*0x2000)+(c*0x8000))&0x3FFFFF];
|
||||
memread[(c<<3)|(d+4)|0x400]=1;
|
||||
memlookup[(c<<3)|(d+4)|0x400]=&rom[((d*0x2000)+(c*0x8000))&0x3FFFFF];
|
||||
}
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0]=memwrite[(c<<3)|0]=1;
|
||||
memlookup[(c<<3)|0]=ram;
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0x400]=memwrite[(c<<3)|0x400]=1;
|
||||
memlookup[(c<<3)|0x400]=ram;
|
||||
}
|
||||
for (c=0;c<8;c++)
|
||||
{
|
||||
memread[(0x7E<<3)|c]=memwrite[(0x7E<<3)|c]=1;
|
||||
memlookup[(0x7E<<3)|c]=&ram[c*0x2000];
|
||||
memread[(0x7F<<3)|c]=memwrite[(0x7F<<3)|c]=1;
|
||||
memlookup[(0x7F<<3)|c]=&ram[(c*0x2000)+0x10000];
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
for (c=0;c<2048;c++)
|
||||
{
|
||||
memread[c]=1;
|
||||
memwrite[c]=0;
|
||||
memlookup[c]=&rom[(c*0x2000)&0x3FFFFF];
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
for (d=1;d<4;d++)
|
||||
{
|
||||
memread[(c<<3)+d]=memwrite[(c<<3)+d]=0;
|
||||
memread[(c<<3)+d+1024]=memwrite[(c<<3)+d+1024]=0;
|
||||
}
|
||||
}
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
memread[(c<<3)|0]=memwrite[(c<<3)|0]=1;
|
||||
memlookup[(c<<3)|0]=ram;
|
||||
memread[(c<<3)|1024]=memwrite[(c<<3)|1024]=1;
|
||||
memlookup[(c<<3)|1024]=ram;
|
||||
}
|
||||
for (c=0;c<8;c++)
|
||||
{
|
||||
memread[(0x7E<<3)|c]=memwrite[(0x7E<<3)|c]=1;
|
||||
memlookup[(0x7E<<3)|c]=&ram[c*0x2000];
|
||||
memread[(0x7F<<3)|c]=memwrite[(0x7F<<3)|c]=1;
|
||||
memlookup[(0x7F<<3)|c]=&ram[(c*0x2000)+0x10000];
|
||||
}
|
||||
for (c=0;c<16;c++)
|
||||
{
|
||||
memread[(0x70<<3)+c]=memwrite[(0x70<<3)+c]=1;
|
||||
memlookup[(0x70<<3)+c]=sram;
|
||||
}
|
||||
}
|
||||
/*Set up access speed table*/
|
||||
for (c=0;c<64;c++)
|
||||
{
|
||||
accessspeed[(c<<3)|0]=8;
|
||||
accessspeed[(c<<3)|1]=6;
|
||||
accessspeed[(c<<3)|2]=6;
|
||||
accessspeed[(c<<3)|3]=6;
|
||||
accessspeed[(c<<3)|4]=accessspeed[(c<<3)|5]=8;
|
||||
accessspeed[(c<<3)|6]=accessspeed[(c<<3)|7]=8;
|
||||
}
|
||||
for (c=64;c<128;c++)
|
||||
{
|
||||
for (d=0;d<8;d++)
|
||||
{
|
||||
accessspeed[(c<<3)|d]=8;
|
||||
}
|
||||
}
|
||||
for (c=128;c<192;c++)
|
||||
{
|
||||
accessspeed[(c<<3)|0]=8;
|
||||
accessspeed[(c<<3)|1]=6;
|
||||
accessspeed[(c<<3)|2]=6;
|
||||
accessspeed[(c<<3)|3]=6;
|
||||
accessspeed[(c<<3)|4]=accessspeed[(c<<3)|5]=8;
|
||||
accessspeed[(c<<3)|6]=accessspeed[(c<<3)|7]=8;
|
||||
}
|
||||
for (c=192;c<256;c++)
|
||||
{
|
||||
for (d=0;d<8;d++)
|
||||
{
|
||||
accessspeed[(c<<3)|d]=8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned char readmeml(unsigned long addr)
|
||||
{
|
||||
addr&=~0xFF000000;
|
||||
|
||||
if (((addr>>16)&0x7F)<0x40)
|
||||
{
|
||||
switch (addr&0xF000)
|
||||
{
|
||||
case 0x2000:
|
||||
return readppu(addr);
|
||||
case 0x4000:
|
||||
if ((addr&0xE00)==0x200)
|
||||
{
|
||||
return readio(addr);
|
||||
}
|
||||
if ((addr&0xFFFE)==0x4016)
|
||||
{
|
||||
return readjoyold(addr);
|
||||
}
|
||||
//snemlog(L"Bad Read %06X\n",addr);
|
||||
return 0;
|
||||
case 0x6000:
|
||||
case 0x7000:
|
||||
if (!lorom)
|
||||
{
|
||||
return sram[addr&srammask];
|
||||
}
|
||||
default:
|
||||
//snemlog(L"Bad read %06X\n",addr);
|
||||
return 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
if ((addr>>16)>=0xD0 && (addr>>16)<=0xFE)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x70)
|
||||
{
|
||||
if (srammask)
|
||||
{
|
||||
return sram[addr&srammask];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x60)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//snemlog(L"Bad read %06X\n",addr);
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void writememl(unsigned long addr, unsigned char val)
|
||||
{
|
||||
addr&=~0xFF000000;
|
||||
if (((addr>>16)&0x7F)<0x40)
|
||||
{
|
||||
switch (addr&0xF000)
|
||||
{
|
||||
|
||||
case 0x2000:
|
||||
writeppu(addr,val);
|
||||
return;
|
||||
|
||||
case 0x3000:
|
||||
return;
|
||||
|
||||
case 0x4000:
|
||||
if ((addr&0xE00)==0x200)
|
||||
writeio(addr,val);
|
||||
if ((addr&0xFFFE)==0x4016)
|
||||
writejoyold(addr,val);
|
||||
return;
|
||||
|
||||
case 0x5000:
|
||||
return;
|
||||
|
||||
case 0x6000:
|
||||
case 0x7000:
|
||||
if (!lorom) sram[addr&srammask]=val;
|
||||
return;
|
||||
case 0x8000:
|
||||
case 0x9000:
|
||||
case 0xA000:
|
||||
case 0xB000:
|
||||
case 0xC000:
|
||||
case 0xD000:
|
||||
case 0xE000:
|
||||
case 0xF000:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
//snemlog(L"Bad write %06X %02X\n",addr,val);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ((addr>>16)>=0xD0 && (addr>>16)<=0xFE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((addr>>16)==0x70)
|
||||
{
|
||||
sram[addr&srammask]=val;
|
||||
return;
|
||||
}
|
||||
|
||||
//snemlog(L"Bad write %06X %02X\n",addr,val);
|
||||
|
||||
}
|
||||
|
||||
unsigned char snes_readmem(unsigned long adress)
|
||||
{
|
||||
cycles-=accessspeed[(adress>>13)&0x7FF];
|
||||
clockspc(accessspeed[(adress>>13)&0x7FF]);
|
||||
if (memread[(adress>>13)&0x7FF])
|
||||
{
|
||||
return memlookup[(adress>>13)&0x7FF][adress&0x1FFF];
|
||||
}
|
||||
return readmeml(adress);
|
||||
}
|
||||
|
||||
void snes_writemem(unsigned long ad, unsigned char v)
|
||||
{
|
||||
cycles-=accessspeed[(ad>>13)&0x7FF];
|
||||
clockspc(accessspeed[(ad>>13)&0x7FF]);
|
||||
if (memwrite[(ad>>13)&0x7FF])
|
||||
memlookup[(ad>>13)&0x7FF][(ad)&0x1FFF]=v;
|
||||
else
|
||||
writememl(ad,v);
|
||||
}
|
Loading…
Reference in New Issue