revert core to 0.98.12

This commit is contained in:
dborth 2008-09-20 01:02:49 +00:00
parent e9f7c8dbd1
commit 1a2018def6
38 changed files with 3922 additions and 3045 deletions

View File

@ -34,7 +34,6 @@ SNES9x GX and Genesis Plus GX projects.
* Zapper now mapped to A and B
* Fixed auto-save feature
* Performance slowdowns on Gamecube should be fixed
* Update core to 0.98.13pre
* Will now attempt to load old save states with CRC filename
[What's New 2.0.1]

View File

@ -20,176 +20,331 @@
#include "mapinc.h"
#define CHRRAM (GameMemBlock)
static uint8 latche;
static uint8 latche, latcheinit;
static uint16 addrreg0, addrreg1;
static void(*WSync)(void);
DECLFW(CPROMWrite)
static DECLFW(LatchWrite)
{
latche=V&3;
setvram4(0x1000,CHRRAM+((V&3)<<12));
// FCEU_printf("bs %04x %02x\n",A,V);
latche=V;
WSync();
}
static void CPROMReset(void)
static void LatchPower(void)
{
setprg32(0x8000,0);
setvram8(0);
latche=latcheinit;
WSync();
SetReadHandler(0x8000,0xFFFF,CartBR);
SetWriteHandler(0x8000,0xffff,CPROMWrite);
SetWriteHandler(addrreg0,addrreg1,LatchWrite);
}
static void CPROMRestore(int version)
static void StateRestore(int version)
{
setvram4(0x1000,CHRRAM+((latche)<<12));
WSync();
}
static void Latch_Init(CartInfo *info, void (*proc)(void), uint8 init, uint16 adr0, uint16 adr1)
{
latcheinit=init;
addrreg0=adr0;
addrreg1=adr1;
WSync=proc;
info->Power=LatchPower;
GameStateRestore=StateRestore;
AddExState(&latche, 1, 0, "LATC");
}
//------------------ CPROM ---------------------------
static void CPROMSync(void)
{
setchr4(0x0000,0);
setchr4(0x1000,latche&3);
setprg16(0x8000,0);
setprg16(0xC000,1);
}
void CPROM_Init(CartInfo *info)
{
info->Power=CPROMReset;
GameStateRestore=CPROMRestore;
AddExState(&latche, 1, 0, "LATC");
Latch_Init(info, CPROMSync, 0, 0x8000, 0xFFFF);
}
DECLFW(CNROMWrite)
{
latche=V&3;
setchr8(V&3);
}
//------------------ Map 184 ---------------------------
static void CNROMReset(void)
static void M184Sync(void)
{
setchr4(0x0000,latche);
setchr4(0x1000,latche>>4);
setprg16(0x8000,0);
setprg16(0xC000,1);
SetReadHandler(0x8000,0xFFFF,CartBR);
SetWriteHandler(0x8000,0xffff,CNROMWrite);
}
static void CNROMRestore(int version)
void Mapper184_Init(CartInfo *info)
{
setchr8(latche);
Latch_Init(info, M184Sync, 0, 0x6000, 0x7FFF);
}
//------------------ CNROM ---------------------------
static void CNROMSync(void)
{
setchr8(latche&3);
setprg16(0x8000,0);
setprg16(0xC000,1);
}
void CNROM_Init(CartInfo *info)
{
info->Power=CNROMReset;
GameStateRestore=CNROMRestore;
AddExState(&latche, 1, 0, "LATC");
Latch_Init(info, CNROMSync, 0, 0x8000, 0xFFFF);
}
static void NROM128Reset(void)
//------------------ ANROM ---------------------------
static void ANROMSync()
{
setprg16(0x8000,0);
setprg16(0xC000,0);
setprg32(0x8000,latche&0xf);
setmirror(MI_0+((latche>>4)&1));
setchr8(0);
SetReadHandler(0x8000,0xFFFF,CartBR);
}
static void NROM256Reset(void)
void ANROM_Init(CartInfo *info)
{
setprg16(0x8000,0);
setprg16(0xC000,1);
setchr8(0);
SetReadHandler(0x8000,0xFFFF,CartBR);
Latch_Init(info, ANROMSync, 0, 0x8000, 0xFFFF);
}
void NROM128_Init(CartInfo *info)
//------------------ Map 70 ---------------------------
static void M70Sync()
{
info->Power=NROM128Reset;
setprg16(0x8000,latche>>4);
setprg16(0xc000,~0);
setchr8(latche&0xf);
}
void NROM256_Init(CartInfo *info)
void Mapper70_Init(CartInfo *info)
{
info->Power=NROM256Reset;
Latch_Init(info, M70Sync, 0, 0x8000, 0xFFFF);
}
static DECLFW(MHROMWrite)
//------------------ Map 152 ---------------------------
static void M152Sync()
{
setprg32(0x8000,V>>4);
setchr8(V);
latche=V;
setprg16(0x8000,(latche>>4)&7);
setprg16(0xc000,~0);
setchr8(latche&0xf);
setmirror(MI_0+((latche>>7)&1)); /* Saint Seiya...hmm. */
}
static void MHROMReset(void)
void Mapper152_Init(CartInfo *info)
{
setprg32(0x8000,0);
setchr8(0);
latche=0;
SetReadHandler(0x8000,0xFFFF,CartBR);
Latch_Init(info, M152Sync, 0, 0x8000, 0xFFFF);
}
static void MHROMRestore(int version)
//------------------ Map 78 ---------------------------
/* Should be two separate emulation functions for this "mapper". Sigh. URGE TO KILL RISING. */
static void M78Sync()
{
setprg32(0x8000,latche);
setchr8(latche);
SetWriteHandler(0x8000,0xffff,MHROMWrite);
setprg16(0x8000,(latche&7));
setprg16(0xc000,~0);
setchr8(latche>>4);
setmirror(MI_0+((latche>>3)&1));
}
void Mapper78_Init(CartInfo *info)
{
Latch_Init(info, M78Sync, 0, 0x8000, 0xFFFF);
}
//------------------ MHROM ---------------------------
static void MHROMSync(void)
{
setprg32(0x8000,latche>>4);
setchr8(latche&0xf);
}
void MHROM_Init(CartInfo *info)
{
info->Power=MHROMReset;
AddExState(&latche, 1, 0,"LATC");
PRGmask32[0]&=1;
CHRmask8[0]&=1;
GameStateRestore=MHROMRestore;
Latch_Init(info, MHROMSync, 0, 0x8000, 0xFFFF);
}
static void UNROMRestore(int version)
void Mapper140_Init(CartInfo *info)
{
setprg16(0x8000,latche);
Latch_Init(info, MHROMSync, 0, 0x6000, 0x7FFF);
}
static DECLFW(UNROMWrite)
void Mapper240_Init(CartInfo *info)
{
setprg16(0x8000,V);
latche=V;
Latch_Init(info, MHROMSync, 0, 0x4020, 0x5FFF);
// need SRAM.
}
static void UNROMReset(void)
//------------------ Map 87 ---------------------------
static void M87Sync(void)
{
setprg16(0x8000,0);
setprg16(0xC000,1);
setchr8(latche>>1);
}
void Mapper87_Init(CartInfo *info)
{
Latch_Init(info, M87Sync, ~0, 0x6000, 0xFFFF);
}
//------------------ Map 11 ---------------------------
static void M11Sync(void)
{
setprg32(0x8000,latche&0xf);
setchr8(latche>>4);
}
void Mapper11_Init(CartInfo *info)
{
Latch_Init(info, M11Sync, 0, 0x8000, 0xFFFF);
}
void Mapper144_Init(CartInfo *info)
{
Latch_Init(info, M11Sync, 0, 0x8001, 0xFFFF);
}
//------------------ UNROM ---------------------------
static void UNROMSync(void)
{
setprg16(0x8000,latche);
setprg16(0xc000,~0);
setvram8(CHRRAM);
SetWriteHandler(0x8000,0xffff,UNROMWrite);
SetReadHandler(0x8000,0xFFFF,CartBR);
latche=0;
setchr8(0);
}
void UNROM_Init(CartInfo *info)
{
info->Power=UNROMReset;
PRGmask16[0]&=7;
AddExState(&latche, 1, 0, "LATC");
AddExState(CHRRAM, 8192, 0, "CHRR");
GameStateRestore=UNROMRestore;
Latch_Init(info, UNROMSync, 0, 0x8000, 0xFFFF);
}
static void GNROMSync()
//------------------ Map 93 ---------------------------
static void SSUNROMSync(void)
{
setchr8(latche&3);
setprg32(0x8000,(latche>>4)&3);
setprg16(0x8000,latche>>4);
setprg16(0xc000,~0);
setchr8(0);
}
static DECLFW(GNROMWrite)
void SUNSOFT_UNROM_Init(CartInfo *info)
{
latche=V&0x33;
GNROMSync();
Latch_Init(info, SSUNROMSync, 0, 0x8000, 0xFFFF);
}
static void GNROMStateRestore(int version)
//------------------ Map 94 ---------------------------
static void M94Sync(void)
{
GNROMSync();
setprg16(0x8000,latche>>2);
setprg16(0xc000,~0);
setchr8(0);
}
static void GNROMReset(void)
void Mapper94_Init(CartInfo *info)
{
latche=0;
GNROMSync();
SetWriteHandler(0x8000,0xffff,GNROMWrite);
Latch_Init(info, M94Sync, 0, 0x8000, 0xFFFF);
}
//------------------ Map 180 ---------------------------
static void M180Sync(void)
{
setprg16(0x8000,0);
setprg16(0xc000,latche);
setchr8(0);
}
void Mapper180_Init(CartInfo *info)
{
Latch_Init(info, M180Sync, 0, 0x8000, 0xFFFF);
}
//------------------ Map 107 ---------------------------
static void M107Sync(void)
{
setprg32(0x8000,(latche>>1)&3);
setchr8(latche&7);
}
void Mapper107_Init(CartInfo *info)
{
Latch_Init(info, M107Sync, ~0, 0x8000, 0xFFFF);
}
//------------------ Map 113 ---------------------------
static void M113Sync(void)
{
setprg32(0x8000,(latche>>3)&7);
setchr8(((latche>>3)&8)|(latche&7));
// setmirror(latche>>7); // only for HES 6in1
}
void Mapper113_Init(CartInfo *info)
{
Latch_Init(info, M113Sync, 0, 0x4100, 0x7FFF);
}
//------------------ A65AS ---------------------------
// actually, there is two cart in one... First have extra mirroring
// mode (one screen) and 32K bankswitching, second one have only
// 16 bankswitching mode and normal mirroring... But there is no any
// correlations between modes and they can be used in one mapper code.
static void BMCA65ASSync(void)
{
if(latche&0x40)
setprg32(0x8000,(latche>>1)&0x0F);
else
{
setprg16(0x8000,((latche&0x30)>>1)|(latche&7));
setprg16(0xC000,((latche&0x30)>>1)|7);
}
setchr8(0);
if(latche&0x80)
setmirror(MI_0+(((latche>>5)&1)));
else
setmirror(((latche>>3)&1)^1);
}
void BMCA65AS_Init(CartInfo *info)
{
Latch_Init(info, BMCA65ASSync, 0, 0x8000, 0xFFFF);
}
//------------------ NROM ---------------------------
#ifdef DEBUG_MAPPER
static DECLFW(WriteHandler)
{
FCEU_printf("bs %04x %02x\n",A,V);
}
#endif
static void NROMPower(void)
{
setprg16(0x8000,0);
setprg16(0xC000,~0);
setchr8(0);
SetReadHandler(0x8000,0xFFFF,CartBR);
#ifdef DEBUG_MAPPER
SetWriteHandler(0x4020,0xFFFF,WriteHandler);
#endif
}
void GNROM_Init(CartInfo *info)
void NROM_Init(CartInfo *info)
{
info->Power=GNROMReset;
AddExState(&latche, 1, 0, "LATC");
GameStateRestore=GNROMStateRestore;
info->Power=NROMPower;
}

View File

@ -416,10 +416,7 @@ void FASTAPASS(1) setmirror(int t)
void SetupCartMirroring(int m, int hard, uint8 *extra)
{
if(m<4)
{
mirrorhard = 0;
setmirror(m);
}
else
{
vnapage[0]=NTARAM;
@ -428,7 +425,7 @@ void SetupCartMirroring(int m, int hard, uint8 *extra)
vnapage[3]=extra+0x400;
PPUNTARAM=0xF;
}
mirrorhard = hard;
mirrorhard=hard;
}
static uint8 *GENIEROM=0;

View File

@ -337,8 +337,8 @@ void FCEU_FlushGameCheats(FILE *override, int nosave)
FCEUD_PrintError("Error saving cheats.");
cheats=cheatsl=0;
}
else if(!override)
remove(fn);
//else if(!override)
// remove(fn);
if(!override)
free(fn);
}

View File

@ -60,8 +60,6 @@ void FCEUI_LoadMem(const char *fname, uint32 start, int hl)
fclose(fp);
}
#ifdef FCEUDEF_DEBUGGER
static char *fstrings[12]=
{
"#$%02X", // immediate
@ -520,4 +518,3 @@ void FCEUI_SetCPUCallback(void (*callb)(X6502 *X))
CPUHook=callb;
X6502_Debug(CPUHook,BreakPoints?ReadHandler:0,BreakPoints?WriteHandler:0);
}
#endif

View File

@ -1,7 +1,3 @@
void FCEUI_DumpMem(const char *fname, uint32 start, uint32 end);
void FCEUI_LoadMem(const char *fname, uint32 start, int hl);
#ifdef FCEUDEF_DEBUGGER
/* Type attributes, you can OR them together. */
#define BPOINT_READ 1
@ -10,6 +6,8 @@ void FCEUI_LoadMem(const char *fname, uint32 start, int hl);
#include "x6502struct.h"
void FCEUI_DumpMem(const char *fname, uint32 start, uint32 end);
void FCEUI_LoadMem(const char *fname, uint32 start, int hl);
void FCEUI_SetCPUCallback(void (*callb)(X6502 *X));
int FCEUI_DeleteBreakPoint(uint32 w);
int FCEUI_ListBreakPoints(int (*callb)(int type, unsigned int A1, unsigned int A2,
@ -20,4 +18,3 @@ int FCEUI_SetBreakPoint(uint32 w, int type, unsigned int A1, unsigned int A2,
void (*Handler)(X6502 *, int type, unsigned int A));
int FCEUI_AddBreakPoint(int type, unsigned int A1, unsigned int A2,
void (*Handler)(X6502 *, int type, unsigned int A));
#endif

View File

@ -186,8 +186,8 @@ static void CloseGame(void)
{
if(FCEUGameInfo)
{
if(FCEUnetplay)
FCEUD_NetworkClose();
//if(FCEUnetplay)
// FCEUD_NetworkClose();
if(FCEUGameInfo->name)
{
free(FCEUGameInfo->name);
@ -197,7 +197,7 @@ static void CloseGame(void)
FCEU_FlushGameCheats(0,0);
GameInterface(GI_CLOSE);
ResetExState(0,0);
CloseGenie();
//CloseGenie();
free(FCEUGameInfo);
FCEUGameInfo = 0;
}
@ -326,7 +326,6 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski
ssize=FlushEmulateSound();
timestampbase += timestamp;
timestamp = 0;
*pXBuf=skip?0:XBuf;

View File

@ -287,7 +287,9 @@ FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext
{
int fd;
/*** REMOVED GCV1.0
fd = dup(fileno( (FILE *)t));
REMOVED GCV1.0 ***/
fclose(t);

View File

@ -58,6 +58,7 @@ void SexyFilter(int32 *in, int32 *out, int32 count)
int64 ino=(int64)*in*vmul;
acc1+=((ino-acc1)*mul1)>>16;
acc2+=((ino-acc1-acc2)*mul2)>>16;
//printf("%d ",*in);
*in=0;
{
int32 t=(acc1-ino+acc2)>>16;
@ -133,7 +134,6 @@ int32 NeoFilterSound(int32 *in, int32 *out, uint32 inlen, int32 *leftover)
out++;
count++;
}
mrindex=x-max;
if(FSettings.soundq==2)

View File

@ -84,7 +84,7 @@ char *FCEU_MakeFName(int type, int id1, char *cd1)
{
char *ret=0;
#ifndef NGC
/*** REMOVED GC V1.0
struct stat tmpstat;
switch(type)
@ -164,7 +164,8 @@ char *FCEU_MakeFName(int type, int id1, char *cd1)
asprintf(&ret,"%s"PSS"gameinfo"PSS"%s.pal",BaseDirectory,FileBase);
break;
}
#endif
REMOVED GC V1.0 ***/
return(ret);
}

View File

@ -1,37 +0,0 @@
{ 0xecf78d8a13a030a6LL, "Ai Sensei no Oshiete", INESB_HACKED },
{ 0x10f90ba5bd55c22eLL, "Alien Syndrome", INESB_HACKED },
{ 0x4712856d3e12f21fLL, "Akumajou Densetsu", INESB_HACKED },
{ 0x0d69ab3ad28ad1c2LL, "Banana", INESB_INCOMPLETE },
{ 0x85d2c348a161cdbfLL, "Bio Senshi Dan", INESB_HACKED },
{ 0x18fdb7c16aa8cb5cLL, "Bucky O'Hare", INESB_CORRUPT },
{ 0xe27c48302108d11bLL, "Chibi Maruko Chan", INESB_HACKED },
{ 0x9d1f505c6ba507bfLL, "Contra", INESB_HACKED },
{ 0x60936436d3ea0ab6LL, "Crisis Force", INESB_HACKED },
{ 0xcf31097ddbb03c5dLL, "Crystalis (Prototype)", INESB_CORRUPT },
{ 0x92080a8ce94200eaLL, "Digital Devil Story II", INESB_HACKED },
{ 0x97f133d8bc1c28dbLL, "Dragon Ball", INESB_HACKED },
{ 0x6c2a2f95c2fe4b6eLL, "Dragon Ball", INESB_HACKED },
{ 0x767aaff62963c58fLL, "Dragon Ball", INESB_HACKED },
{ 0x500b267abb323005LL, "Dragon Warrior 4", INESB_CORRUPT },
{ 0x02bdcf375704784bLL, "Erika to Satoru no Yume Bouken", INESB_HACKED },
{ 0xd4fea9d2633b9186LL, "Famista 91", INESB_HACKED },
{ 0xfdf8c812839b61f0LL, "Famista 92", INESB_HACKED },
{ 0xb5bb1d0fb47d0850LL, "Famista 93", INESB_HACKED },
{ 0x30471e773f7cdc89LL, "Famista 94", INESB_HACKED },
{ 0x76c5c44ffb4a0bd7LL, "Fantasy Zone", INESB_HACKED },
{ 0x27da2b0c500dc346LL, "Fire Emblem", INESB_HACKED },
{ 0xb470bfb90e2b1049LL, "Fire Emblem Gaiden", INESB_HACKED },
{ 0x23214fe456fba2ceLL, "Ganbare Goemon 2", INESB_HACKED },
{ 0xbf8b22524e8329d9LL, "Ganbare Goemon Gaiden", INESB_HACKED },
{ 0xa97041c3da0134e3LL, "Gegege no Kitarou 2", INESB_INCOMPLETE },
{ 0x805db49a86db5449LL, "Goonies", INESB_HACKED },
{ 0xc5abdaa65ac49b6bLL, "Gradius 2", INESB_HACKED },
{ 0x04afae4ad480c11cLL, "Gradius 2", INESB_HACKED },
{ 0x9b4bad37b5498992LL, "Gradius 2", INESB_HACKED },
{ 0xb068d4ac10ef848eLL, "Highway Star", INESB_HACKED },
{ 0xbf5175271e5019c3LL, "Kaiketsu Yanchamaru 3", INESB_HACKED },
{ 0xfb4b508a236bbba3LL, "Salamander", INESB_HACKED },
{ 0x3716c4bebf885344LL, "Super Mario Bros.", INESB_HACKED },
{ 0x1895afc6eef26c7dLL, "Super Mario Bros.", INESB_HACKED },
{ 0x103fc85d978b861bLL, "Sweet Home", INESB_CORRUPT },
{ 0xfffda4407d80885aLL, "Sweet Home", INESB_CORRUPT },

View File

@ -1,191 +0,0 @@
{0x9cbadc25,5,8}, /* JustBreed */
{0x6e68e31a,16,8}, /* Dragon Ball 3*/
{0x3f15d20d,153,8}, /* Famicom Jump 2 */
{0x983d8175,157,8}, /* Datach Battle Rush */
{0x894efdbc,157,8}, /* Datach Crayon Shin Chan */
{0x19e81461,157,8}, /* Datach DBZ */
{0xbe06853f,157,8}, /* Datach J-League */
{0x0be0a328,157,8}, /* Datach SD Gundam Wars */
{0x5b457641,157,8}, /* Datach Ultraman Club */
{0xf51a7f46,157,8}, /* Datach Yuu Yuu Hakusho */
{0xe62e3382,71,-1}, /* Mig-29 Soviet Fighter */
{0x21a653c7,4,-1}, /* Super Sky Kid */
{0xdd4d9a62,209,-1}, /* Shin Samurai Spirits 2 */
{0x063b1151,209,-1}, /* Power Rangers 4 */
{0xdd8ced31,209,-1}, /* Power Rangers 3 */
{0x60bfeb0c,90,-1}, /* MK 2*/
{0x0c47946d,210,-1}, /* Chibi Maruko Chan */
{0xbd523011,210,-1}, /* Dream Master */
{0xc247cc80,210,-1}, /* Family Circuit '91 */
{0x6ec51de5,210,-1}, /* Famista '92 */
{0xadffd64f,210,-1}, /* Famista '93 */
{0x429103c9,210,-1}, /* Famista '94 */
{0x81b7f1a8,210,-1}, /* Heisei Tensai Bakabon */
{0x2447e03b,210,-1}, /* Top Striker */
{0x1dc0f740,210,-1}, /* Wagyan Land 2 */
{0xd323b806,210,-1}, /* Wagyan Land 3 */
{0x07eb2c12,208,-1}, /* Street Fighter IV */
{0x96ce586e,189,8}, /* Street Fighter 2 YOKO */
{0x7678f1d5,207,8}, /* Fudou Myouou Den */
{0x276237b3,206,0}, /* Karnov */
{0x4e1c1e3c,206,0}, /* Karnov */
/* Some entries to sort out the minor 33/48 mess. */
{0xaebd6549,48,8}, /* Bakushou!! Jinsei Gekijou 3 */
{0x6cdc0cd9,48,8}, /* Bubble Bobble 2 */
//{0x10e24006,48,8}, /* Flintstones 2 - bad dump? */
{0x40c0ad47,48,8}, /* Flintstones 2 */
{0xa7b0536c,48,8}, /* Don Doko Don 2 */
{0x99c395f9,48,8}, /* Captain Saver */
{0x1500e835,48,8}, /* Jetsons (J) */
{0x637134e8,193,1}, /* Fighting Hero */
{0xcbf4366f,158,8}, /* Alien Syndrome (U.S. unlicensed) */
{0xb19a55dd,64,8}, /* Road Runner */
//{0x3eafd012,116,-1}, /* AV Girl Fighting */
{0x1d0f4d6b,2,1}, /* Black Bass thinging */
{0xf92be3ec,64,-1}, /* Rolling Thunder */
{0x345ee51a,245,-1}, /* DQ4c */
{0xf518dd58,7,8}, /* Captain Skyhawk */
{0x7ccb12a3,43,-1}, /* SMB2j */
{0x6f12afc5,235,-1}, /* Golden Game 150-in-1 */
{0xccc03440,156,-1},
{0xc9ee15a7,3,-1}, /* 3 is probably best. 41 WILL NOT WORK. */
{0x3e1271d5,79,1}, /* Tiles of Fate */
{0x8eab381c,113,1}, /* Death Bots */
{0xd4a76b07,79,0}, /* F-15 City Wars*/
{0xa4fbb438,79,0},
{0x1eb4a920,79,1}, /* Double Strike */
{0x345d3a1a,11,1}, /* Castle of Deceit */
{0x62ef6c79,232,8}, /* Quattro Sports -Aladdin */
{0x5caa3e61,144,1}, /* Death Race */
{0xd2699893,88,0}, /* Dragon Spirit */
{0x2f27cdef,155,8}, /* Tatakae!! Rahmen Man */
{0xcfd4a281,155,8}, /* Money Game. Yay for money! */
{0xd1691028,154,8}, /* Devil Man */
{0xc68363f6,180,0}, /* Crazy Climber */
{0xbe939fce,9,1}, /* Punchout*/
{0x5e66eaea,13,1}, /* Videomation */
{0xaf5d7aa2,-1,0}, /* Clu Clu Land */
{0xc2730c30,34,0}, /* Deadly Towers */
{0x932ff06e,34,1}, /* Classic Concentration */
{0x4c7c1af3,34,1}, /* Caesar's Palace */
{0x15141401,4,8}, /* Asmik Kun Land */
{0x59280bec,4,8}, /* Jackie Chan */
{0x4cccd878,4,8}, /* Cat Ninden Teyandee */
{0x9eefb4b4,4,8}, /* Pachi Slot Adventure 2 */
{0x5337f73c,4,8}, /* Niji no Silk Road */
{0x7474ac92,4,8}, /* Kabuki: Quantum Fighter */
{0xbb7c5f7a,89,8}, /* Mito Koumon or something similar */
/* Probably a Namco MMC3-workalike */
{0xa5e6baf9,4,1|4}, /* Dragon Slayer 4 */
{0xe40b4973,4,1|4}, /* Metro Cross */
{0xd97c31b0,4,1|4}, /* Rasaaru Ishii no Childs Quest */
{0x84382231,9,0}, /* Punch Out (J) */
{0xe28f2596,0,1}, /* Pac Land (J) */
{0xfcdaca80,0,0}, /* Elevator Action */
{0xe492d45a,0,0}, /* Zippy Race */
{0x32fa246f,0,0}, /* Tag Team Pro Wrestling */
{0xc05a365b,0,0}, /* Exed Exes (J) */
{0xb3c30bea,0,0}, /* Xevious (J) */
{0x804f898a,2,1}, /* Dragon Unit */
{0xe1b260da,2,1}, /* Argos no Senshi */
{0x6d65cac6,2,0}, /* Terra Cresta */
{0x9ea1dc76,2,0}, /* Rainbow Islands */
{0x28c11d24,2,1}, /* Sukeban Deka */
{0x02863604,2,1}, /* Sukeban Deka */
{0x2bb6a0f8,2,1}, /* Sherlock Holmes */
{0x55773880,2,1}, /* Gilligan's Island */
{0x419461d0,2,1}, /* Super Cars */
{0x6e0eb43e,2,1}, /* Puss n Boots */
{0x266ce198,2,1}, /* City Adventure Touch */
{0x48349b0b,1,8}, /* Dragon Quest 2 */
{0xd09b74dc,1,8}, /* Great Tank (J) */
{0xe8baa782,1,8}, /* Gun Hed (J) */
{0x970bd9c2,1,8}, /* Hanjuku Hero */
{0xcd7a2fd7,1,8}, /* Hanjuku Hero */
{0x63469396,1,8}, /* Hokuto no Ken 4 */
{0x291bcd7d,1,8}, /* Pachio Kun 2 */
{0xf74dfc91,1,-1}, /* Win, Lose, or Draw */
{0x3f56a392,1,8}, /* Captain Ed (J) */
{0x078ced30,1,8}, /* Choujin - Ultra Baseball */
{0x391aa1b8,1,8}, /* Bloody Warriors (J) */
{0x61a852ea,1,8}, /* Battle Stadium - Senbatsu Pro Yakyuu */
{0xfe364be5,1,8}, /* Deep Dungeon 4 */
{0xd8ee7669,1,8}, /* Adventures of Rad Gravity */
{0xa5e8d2cd,1,8}, /* Breakthru */
{0xf6fa4453,1,8}, /* Bigfoot */
{0x37ba3261,1,8}, /* Back to the Future 2 and 3 */
{0x934db14a,1,-1}, /* All-Pro Basketball */
{0xe94d5181,1,8}, /* Mirai Senshi - Lios */
{0x7156cb4d,1,8}, /* Muppet Adventure Carnival thingy */
{0x5b6ca654,1,8}, /* Barbie rev X*/
{0x57c12280,1,8}, /* Demon Sword */
{0x70f67ab7,1,8}, /* Musashi no Bouken */
{0xa9a4ea4c,1,8}, /* Satomi Hakkenden */
{0xcc3544b0,1,8}, /* Triathron */
{0x1d41cc8c,3,1}, /* Gyruss */
{0xd8eff0df,3,1}, /* Gradius (J) */
{0xdbf90772,3,0}, /* Alpha Mission */
{0xd858033d,3,0}, /* Armored Scrum Object */
{0xcf322bb3,3,1}, /* John Elway's Quarterback */
{0x9bde3267,3,1}, /* Adventures of Dino Riki */
{0x02cc3973,3,1}, /* Ninja Kid */
{0xb5d28ea2,3,1}, /* Mystery Quest - mapper 3?*/
{0xbc065fc3,3,1}, /* Pipe Dream */
{0x5b837e8d,1,8}, /* Alien Syndrome */
{0x283ad224,32,8}, /* Ai Sensei no Oshiete */
{0x5555fca3,32,8}, /* "" "" */
{0x243a8735,32,0x10|4}, /* Major League */
{0x6bc65d7e,66,1}, /* Youkai Club*/
{0xc2df0a00,66,1}, /* Bio Senshi Dan(hacked) */
{0xbde3ae9b,66,1}, /* Doraemon */
{0xd26efd78,66,1}, /* SMB Duck Hunt */
{0x811f06d9,66,1}, /* Dragon Power */
{0x3293afea,66,1}, /* Mississippi Satsujin Jiken */
{0xe84274c5,66,1}, /* "" "" */
{0x9552e8df,66,1}, /* Dragon Ball */
{0xba51ac6f,78,2},
{0x3d1c3137,78,8}, /* Uchuusen - Cosmo Carrier */
{0xbda8f8e4,152,8}, /* Gegege no Kitarou 2 */
{0x026c5fca,152,8}, /* Saint Seiya Ougon Densetsu */
{0x0f141525,152,8}, /* Arkanoid 2 (Japanese) */
{0xb1a94b82,152,8}, /* Pocket Zaurus */
{0xbba58be5,70,-1}, /* Family Trainer - Manhattan Police */
{0x370ceb65,70,-1}, /* Family Trainer - Meiro Dai Sakusen */
{0xdd8ed0f7,70,1}, /* Kamen Rider Club */
{0x90c773c1,118,-1}, /* Goal! 2 */
{0xb9b4d9e0,118,-1}, /* NES Play Action Football */
{0x78b657ac,118,-1}, /* Armadillo */
{0x37b62d04,118,-1}, /* Ys 3 */
{0x07d92c31,118,-1}, /* RPG Jinsei Game */
{0x2705eaeb,234,-1}, /* Maxi 15 */
{0x404b2e8b,4,2}, /* Rad Racer 2 */
{0xa912b064,51|0x800,8}, /* 11-in-1 Ball Games(has CHR ROM when it shouldn't) */
{0,-1,-1}

View File

@ -62,7 +62,7 @@ static int NewiNES_Init(int num);
void (*MapClose)(void);
void (*MapperReset)(void);
int MapperNo;
int MapperNo = 0;
iNES_HEADER head;
@ -104,7 +104,7 @@ static void iNESGI(int h)
break;
case GI_CLOSE:
{
FCEU_SaveGameSave(&iNESCart);
//FCEU_SaveGameSave(&iNESCart);
if(iNESCart.Close) iNESCart.Close();
if(ROM) {free(ROM);ROM=0;}
@ -143,7 +143,7 @@ static void SetInput(void)
{0xaf4010ea,SI_GAMEPAD,SI_POWERPADB,-1}, /* World Class Track Meet */
{0xd74b2719,SI_GAMEPAD,SI_POWERPADB,-1}, /* Super Team Games */
{0x61d86167,SI_GAMEPAD,SI_POWERPADB,-1}, /* Street Cop */
{0x6435c095,SI_GAMEPAD,SI_POWERPADB,-1}, /* Short Order/Eggsplode */
// Bad dump? {0x23040fc4,SI_GAMEPAD,SI_POWERPADB,-1}, /* Short Order/Eggsplode */
{0x47232739,SI_GAMEPAD,SI_GAMEPAD,SIFC_TOPRIDER}, /* Top Rider */
@ -179,8 +179,6 @@ static void SetInput(void)
{0xbeb8ab01,-1,SI_ZAPPER,0}, /* Gumshoe */
{0xde8fd935,-1,SI_ZAPPER,0}, /* To the Earth */
{0xedc3662b,-1,SI_ZAPPER,0}, /* Operation Wolf */
{0x2a6559a1,-1,SI_ZAPPER,0}, /* Operation Wolf (J) */
{0x23d17f5e,SI_GAMEPAD,SI_ZAPPER,0}, /* The Lone Ranger */
{0xb8b9aca3,-1,SI_ZAPPER,0}, /* Wild Gunman */
{0x5112dc21,-1,SI_ZAPPER,0}, /* Wild Gunman */
@ -193,7 +191,6 @@ static void SetInput(void)
{0xd89e5a67,-1,-1,SIFC_ARKANOID}, /* Arkanoid (J) */
{0x0f141525,-1,-1,SIFC_ARKANOID}, /* Arkanoid 2(J) */
{0x912989dc,-1,-1,SIFC_FKB}, /* Playbox BASIC */
{0xf7606810,-1,-1,SIFC_FKB}, /* Family BASIC 2.0A */
{0x895037bc,-1,-1,SIFC_FKB}, /* Family BASIC 2.1a */
{0xb2530afc,-1,-1,SIFC_FKB}, /* Family BASIC 3.0 */
@ -214,41 +211,6 @@ static void SetInput(void)
}
}
#define INESB_INCOMPLETE 1
#define INESB_CORRUPT 2
#define INESB_HACKED 4
struct BADINF {
uint64 md5partial;
char *name;
uint32 type;
};
static struct BADINF BadROMImages[]=
{
#include "ines-bad.h"
};
void CheckBad(uint64 md5partial)
{
int x;
x=0;
//printf("0x%llx\n",md5partial);
while(BadROMImages[x].name)
{
if(BadROMImages[x].md5partial == md5partial)
{
FCEU_PrintError("The copy game you have loaded, \"%s\", is bad, and will not work properly on FCE Ultra.", BadROMImages[x].name);
return;
}
x++;
}
}
struct CHINF {
uint32 crc32;
int32 mapper;
@ -317,7 +279,180 @@ static void CheckHInfo(void)
static struct CHINF moo[]=
{
#include "ines-correct.h"
{0x9cbadc25,5,8}, /* JustBreed */
// {0x5f6e8a07,66,0},
{0x983d8175,157,8}, /* Datach Battle Rush */
{0x894efdbc,157,8}, /* Datach Crayon Shin Chan */
{0x19e81461,157,8}, /* Datach DBZ */
{0xbe06853f,157,8}, /* Datach J-League */
{0x0be0a328,157,8}, /* Datach SD Gundam Wars */
{0x5b457641,157,8}, /* Datach Ultraman Club */
{0xf51a7f46,157,8}, /* Datach Yuu Yuu Hakusho */
{0x60bfeb0c,90,-1}, /* MK 2*/
{0xe62e3382,71,-1}, /* Mig-29 Soviet Fighter */
{0x21a653c7,4,-1}, /* Super Sky Kid */
{0xdd4d9a62,209,-1}, /* Shin Samurai Spirits 2 */
{0x063b1151,209,-1}, /* Power Rangers 4 */
{0xdd8ced31,209,-1}, /* Power Rangers 3 */
{0x0c47946d,210,-1}, /* Chibi Maruko Chan */
{0xbd523011,210,-1}, /* Dream Master */
{0xc247cc80,210,-1}, /* Family Circuit '91 */
{0x6ec51de5,210,-1}, /* Famista '92 */
{0xadffd64f,210,-1}, /* Famista '93 */
{0x429103c9,210,-1}, /* Famista '94 */
{0x81b7f1a8,210,-1}, /* Heisei Tensai Bakabon */
{0x2447e03b,210,-1}, /* Top Striker */
{0x1dc0f740,210,-1}, /* Wagyan Land 2 */
{0xd323b806,210,-1}, /* Wagyan Land 3 */
{0x07eb2c12,208,-1}, /* Street Fighter IV */
{0x96ce586e,189,8}, /* Street Fighter 2 YOKO */
{0x7678f1d5,207,8}, /* Fudou Myouou Den */
{0x276237b3,206,0}, /* Karnov */
{0x4e1c1e3c,206,0}, /* Karnov */
/* Some entries to sort out the minor 33/48 mess. */
{0x40c0ad47,48,8}, /* Flintstones 2 */
{0xa7b0536c,48,8}, /* Don Doko Don 2 */
{0x99c395f9,48,8}, /* Captain Saver */
{0x637134e8,193,1}, /* Fighting Hero */
{0xcbf4366f,158,8}, /* Alien Syndrome (U.S. unlicensed) */
{0xb19a55dd,64,8}, /* Road Runner */
//{0x3eafd012,116,-1}, /* AV Girl Fighting */
{0x1d0f4d6b,2,1}, /* Black Bass thinging */
{0xf92be3ec,64,-1}, /* Rolling Thunder */
{0x345ee51a,245,-1}, /* DQ4c */
{0xf518dd58,7,8}, /* Captain Skyhawk */
{0x7ccb12a3,43,-1}, /* SMB2j */
{0x6f12afc5,235,-1}, /* Golden Game 150-in-1 */
{0xccc03440,156,-1},
{0xc9ee15a7,3,-1}, /* 3 is probably best. 41 WILL NOT WORK. */
{0x3e1271d5,79,1}, /* Tiles of Fate */
{0x8eab381c,113,1}, /* Death Bots */
{0xd4a76b07,79,0}, /* F-15 City Wars*/
{0xa4fbb438,79,0},
{0x1eb4a920,79,1}, /* Double Strike */
{0x345d3a1a,11,1}, /* Castle of Deceit */
{0x62ef6c79,232,8}, /* Quattro Sports -Aladdin */
{0x5caa3e61,144,1}, /* Death Race */
{0xd2699893,88,0}, /* Dragon Spirit */
{0x2f27cdef,155,8}, /* Tatakae!! Rahmen Man */
{0xcfd4a281,155,8}, /* Money Game. Yay for money! */
{0xd1691028,154,8}, /* Devil Man */
{0xc68363f6,180,0}, /* Crazy Climber */
{0xbe939fce,9,1}, /* Punchout*/
{0x5e66eaea,13,1}, /* Videomation */
{0xaf5d7aa2,-1,0}, /* Clu Clu Land */
{0xc2730c30,34,0}, /* Deadly Towers */
{0x932ff06e,34,1}, /* Classic Concentration */
{0x4c7c1af3,34,1}, /* Caesar's Palace */
{0x9ea1dc76,2,0}, /* Rainbow Islands */
{0x9eefb4b4,4,8}, /* Pachi Slot Adventure 2 */
{0x5337f73c,4,8}, /* Niji no Silk Road */
{0x7474ac92,4,8}, /* Kabuki: Quantum Fighter */
{0x970bd9c2,1,8}, /* Hanjuku Hero */
{0xbb7c5f7a,89,8}, /* Mito Koumon or something similar */
/* Probably a Namco MMC3-workalike */
{0xa5e6baf9,4,1|4}, /* Dragon Slayer 4 */
{0xe40b4973,4,1|4}, /* Metro Cross */
{0xd97c31b0,4,1|4}, /* Rasaaru Ishii no Childs Quest */
{0x84382231,9,0}, /* Punch Out (J) */
{0xfcdaca80,0,0}, /* Elevator Action */
{0xe492d45a,0,0}, /* Zippy Race */
{0x32fa246f,0,0}, /* Tag Team Pro Wrestling */
{0x6d65cac6,2,0}, /* Terra Cresta */
{0x28c11d24,2,1}, /* Sukeban Deka */
{0x02863604,2,1}, /* Sukeban Deka */
{0x2bb6a0f8,2,1}, /* Sherlock Holmes */
{0x55773880,2,1}, /* Gilligan's Island */
{0x419461d0,2,1}, /* Super Cars */
{0x6e0eb43e,2,1}, /* Puss n Boots */
{0x291bcd7d,1,8}, /* Pachio Kun 2 */
{0xf74dfc91,1,-1}, /* Win, Lose, or Draw */
{0x59280bec,4,8}, /* Jackie Chan */
{0xfe364be5,1,8}, /* Deep Dungeon 4 */
{0xd8ee7669,1,8}, /* Adventures of Rad Gravity */
{0xa5e8d2cd,1,8}, /* Breakthru */
{0xf6fa4453,1,8}, /* Bigfoot */
{0x37ba3261,1,8}, /* Back to the Future 2 and 3 */
{0x934db14a,1,-1}, /* All-Pro Basketball */
{0xe94d5181,1,8}, /* Mirai Senshi - Lios */
{0x7156cb4d,1,8}, /* Muppet Adventure Carnival thingy */
{0x5b6ca654,1,8}, /* Barbie rev X*/
{0x57c12280,1,8}, /* Demon Sword */
{0xdbf90772,3,0}, /* Alpha Mission */
{0xd858033d,3,0}, /* Armored Scrum Object */
{0xcf322bb3,3,1}, /* John Elway's Quarterback */
{0x9bde3267,3,1}, /* Adventures of Dino Riki */
{0x02cc3973,3,1}, /* Ninja Kid */
{0xb5d28ea2,3,1}, /* Mystery Quest - mapper 3?*/
{0xbc065fc3,3,1}, /* Pipe Dream */
{0x5b837e8d,1,8}, /* Alien Syndrome */
{0x283ad224,32,8}, /* Ai Sensei no Oshiete */
{0x5555fca3,32,8}, /* "" "" */
{0x243a8735,32,0x10|4}, /* Major League */
{0x6bc65d7e,66,1}, /* Youkai Club*/
{0xc2df0a00,66,1}, /* Bio Senshi Dan(hacked) */
{0xbde3ae9b,66,1}, /* Doraemon */
{0xd26efd78,66,1}, /* SMB Duck Hunt */
{0x811f06d9,66,1}, /* Dragon Power */
{0x3293afea,66,1}, /* Mississippi Satsujin Jiken */
{0xe84274c5,66,1}, /* "" "" */
{0x9552e8df,66,1}, /* Dragon Ball */
{0x6e68e31a,16,8}, /* Dragon Ball 3*/
{0xba51ac6f,78,2},
{0x3d1c3137,78,8}, /* Uchuusen - Cosmo Carrier */
{0xbda8f8e4,152,8}, /* Gegege no Kitarou 2 */
{0x026c5fca,152,8}, /* Saint Seiya Ougon Densetsu */
{0x0f141525,152,8}, /* Arkanoid 2 (Japanese) */
{0xb1a94b82,152,8}, /* Pocket Zaurus */
{0x3f15d20d,153,8}, /* Famicom Jump 2 */
{0xbba58be5,70,-1}, /* Family Trainer - Manhattan Police */
{0x370ceb65,70,-1}, /* Family Trainer - Meiro Dai Sakusen */
{0xdd8ed0f7,70,1}, /* Kamen Rider Club */
{0x90c773c1,118,-1}, /* Goal! 2 */
{0xb9b4d9e0,118,-1}, /* NES Play Action Football */
{0x78b657ac,118,-1}, /* Armadillo */
{0x37b62d04,118,-1}, /* Ys 3 */
{0x07d92c31,118,-1}, /* RPG Jinsei Game */
{0x2705eaeb,234,-1}, /* Maxi 15 */
{0x404b2e8b,4,2}, /* Rad Racer 2 */
{0xa912b064,51|0x800,8}, /* 11-in-1 Ball Games(has CHR ROM when it shouldn't) */
{0,-1,-1}
};
int tofix=0;
int x;
@ -328,7 +463,6 @@ static void CheckHInfo(void)
partialmd5 |= (uint64)iNESCart.MD5[15-x] << (x*8);
//printf("%16llx\n",partialmd5);
}
CheckBad(partialmd5);
x=0;
@ -711,8 +845,8 @@ void (*MapInitTab[256])(void)=
0,
0,Mapper2_init,Mapper3_init,0,
0,Mapper6_init,Mapper7_init,Mapper8_init,
Mapper9_init,Mapper10_init,Mapper11_init,0,
Mapper13_init,0,Mapper15_init,Mapper16_init,
Mapper9_init,Mapper10_init,0,0,
Mapper13_init,0,0,Mapper16_init,
Mapper17_init,Mapper18_init,0,0,
Mapper21_init,Mapper22_init,Mapper23_init,Mapper24_init,
Mapper25_init,Mapper26_init,0,0,
@ -723,33 +857,33 @@ void (*MapInitTab[256])(void)=
0,Mapper46_init,0,Mapper48_init,0,Mapper50_init,Mapper51_init,0,
0,0,0,0,Mapper57_init,Mapper58_init,Mapper59_init,Mapper60_init,
Mapper61_init,Mapper62_init,0,Mapper64_init,
Mapper65_init,Mapper66_init,Mapper67_init,Mapper68_init,
Mapper69_init,Mapper70_init,Mapper71_init,Mapper72_init,
Mapper65_init,Mapper66_init,Mapper67_init,0,
Mapper69_init,0,Mapper71_init,Mapper72_init,
Mapper73_init,0,Mapper75_init,Mapper76_init,
Mapper77_init,Mapper78_init,Mapper79_init,Mapper80_init,
Mapper77_init,0,Mapper79_init,Mapper80_init,
0,Mapper82_init,Mapper83_init,0,
Mapper85_init,Mapper86_init,Mapper87_init,Mapper88_init,
Mapper85_init,Mapper86_init,0,Mapper88_init,
Mapper89_init,0,Mapper91_init,Mapper92_init,
Mapper93_init,Mapper94_init,0,Mapper96_init,
Mapper93_init,0,0,Mapper96_init,
Mapper97_init,0,Mapper99_init,0,
0,0,0,0,0,0,Mapper107_init,0,
0,0,0,Mapper112_init,Mapper113_init,Mapper114_init,0,0,
Mapper117_init,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,Mapper112_init,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,Mapper140_init,
0,0,0,Mapper144_init,0,0,0,0,
0,0,Mapper151_init,Mapper152_init,Mapper153_init,Mapper154_init,0,Mapper156_init,
0,0,0,0,0,0,0,0,
0,0,Mapper151_init,0,Mapper153_init,Mapper154_init,0,Mapper156_init,
Mapper157_init,Mapper158_init,Mapper159_init,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,Mapper180_init,
0,Mapper182_init,0,Mapper184_init,Mapper185_init,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,Mapper185_init,0,0,0,
Mapper189_init,0,0,0,Mapper193_init,0,0,0,
0,0,0,Mapper200_init,Mapper201_init,Mapper202_init,Mapper203_init,0,
0,0,Mapper207_init,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,Mapper225_init,Mapper226_init,Mapper227_init,Mapper228_init,
Mapper229_init,Mapper230_init,Mapper231_init,Mapper232_init,0,Mapper234_init,Mapper235_init,0,
0,0,0,Mapper240_init,Mapper241_init,Mapper242_init,0,Mapper244_init,
0,0,0,0,Mapper241_init,0,0,Mapper244_init,
0,Mapper246_init,0,Mapper248_init,0,0,0,0,0,0,Mapper255_init
};
@ -886,13 +1020,56 @@ static BMAPPING bmap[] = {
{155, Mapper155_Init},
{164, Mapper164_Init},
{187, Mapper187_Init},
{188, Mapper188_Init},
{206, Mapper206_Init},
{208, Mapper208_Init},
{210, Mapper210_Init},
{245, Mapper245_Init},
{249, Mapper249_Init},
{250, Mapper250_Init},
//¦Û©wmmc3
{205, Mapper205_Init},
{215, Mapper215_Init},
{254, Mapper254_Init},
{198, Mapper198_Init},
{217, Mapper217_Init},
{195, Mapper195_Init},
{194, Mapper194_Init},
{192, Mapper192_Init},
{191, Mapper191_Init},
{182, Mapper182_Init},
{165, Mapper165_Init},
{114, Mapper114_Init},
{37, Mapper37_Init},
//simple
{78, Mapper78_Init},
{70, Mapper70_Init},
{152, Mapper152_Init},
{87, Mapper87_Init},
{11, Mapper11_Init},
{144, Mapper144_Init},
{94, Mapper94_Init},
{180, Mapper180_Init},
{107, Mapper107_Init},
{113, Mapper107_Init},
//199.c
{199, Mapper199_Init},
{240, Mapper240_Init},
//164.c
{164, Mapper164_Init},
{163, Mapper163_Init},
//15.c
{15, Mapper15_init},
//subor.c //warning message
{166, Mapper166_init},
{167, Mapper167_init},
//27.c
{27, Mapper27_init},
//242.c
{242, Mapper242_init},
//252.c
{252, Mapper252_Init},
{0,0}
};
@ -923,7 +1100,6 @@ static int NewiNES_Init(int num)
return(0);
}
/****************************************************************************
** GC V1.0
**
@ -1079,3 +1255,4 @@ int iNESMemLoad(char *nesrom)
GameInterface=iNESGI;
return 1;
}

View File

@ -162,7 +162,7 @@ void Mapper64_init(void);
void Mapper65_init(void);
void Mapper66_init(void);
void Mapper67_init(void);
void Mapper68_init(void);
//void Mapper68_init(void);
void Mapper69_init(void);
void Mapper70_init(void);
void Mapper71_init(void);
@ -363,7 +363,6 @@ void Mapper74_Init(CartInfo *);
void Mapper90_Init(CartInfo *);
void Mapper165_Init(CartInfo *);
void Mapper209_Init(CartInfo *);
void Mapper95_Init(CartInfo *);
void Mapper105_Init(CartInfo *);
void Mapper115_Init(CartInfo *);
@ -373,7 +372,6 @@ void Mapper119_Init(CartInfo *);
void Mapper155_Init(CartInfo *);
void Mapper164_Init(CartInfo *);
void Mapper187_Init(CartInfo *);
void Mapper188_Init(CartInfo *);
void Mapper206_Init(CartInfo *);
void Mapper208_Init(CartInfo *);
void Mapper209_Init(CartInfo *);
@ -381,3 +379,41 @@ void Mapper210_Init(CartInfo *);
void Mapper245_Init(CartInfo *);
void Mapper249_Init(CartInfo *);
void Mapper250_Init(CartInfo *);
//
void Mapper205_Init(CartInfo *);
void Mapper215_Init(CartInfo *);
void Mapper254_Init(CartInfo *);
void Mapper78_Init(CartInfo *);
void Mapper184_Init(CartInfo *);
void Mapper70_Init(CartInfo *);
void Mapper152_Init(CartInfo *);
void Mapper87_Init(CartInfo *);
void Mapper11_Init(CartInfo *);
void Mapper144_Init(CartInfo *);
void Mapper94_Init(CartInfo *);
void Mapper180_Init(CartInfo *);
void Mapper107_Init(CartInfo *);
void Mapper113_Init(CartInfo *);
void Mapper199_Init(CartInfo *);
void Mapper198_Init(CartInfo *);
void Mapper217_Init(CartInfo *);
void Mapper195_Init(CartInfo *);
void Mapper194_Init(CartInfo *);
void Mapper192_Init(CartInfo *);
void Mapper191_Init(CartInfo *);
void Mapper182_Init(CartInfo *);
void Mapper165_Init(CartInfo *);
void Mapper114_Init(CartInfo *);
void Mapper37_Init(CartInfo *);
void Mapper240_Init(CartInfo *);
void Mapper164_Init(CartInfo *);
void Mapper163_Init(CartInfo *);
void Mapper15_Init(CartInfo *);
void Mapper166_Init(CartInfo *);
void Mapper167_Init(CartInfo *);
void Mapper27_Init(CartInfo *);
void Mapper242_Init(CartInfo *);
void Mapper252_Init(CartInfo *);

View File

@ -285,20 +285,17 @@ static void M185Sync(int version)
{
int x;
//printf("%02x\n",mapbyte1[0]);
//if((mapbyte1[0]&3)==3)
if(VROM_size == 1)
// DumpMem("out",0x8000,0xFFFF);
// exit(1);
// if(mapbyte1[0]==0x15)
if(!(mapbyte1[0]&3))
// if(!(mapbyte1[0]==0x21))
{
if((mapbyte1[0]&3) == 1)
setchr8(0);
for(x=0;x<8;x++)
setchr1r(0x10,x<<10,0);
}
else
setchr8r(0x10,0);
}
else if(VROM_size == 2)
{
if((mapbyte1[0]&2)) setchr8(mapbyte1[0]&1);
else setchr8r(0x10,0);
}
setchr8(0);
}
static DECLFW(Mapper185_write)
@ -310,15 +307,12 @@ static DECLFW(Mapper185_write)
void Mapper185_init(void)
{
int x;
for(x=0;x<8192;x++)
MapperExRAM[x]=0xFF;
//memset(MapperExRAM,0xFF,1024);
memset(MapperExRAM,0xFF,1024);
MapStateRestore=M185Sync;
mapbyte1[0]=0;
M185Sync(0);
SetupCartCHRMapping(0x10,MapperExRAM,8192,0);
SetupCartCHRMapping(0x10,MapperExRAM,1024,0);
SetWriteHandler(0x8000,0xFFFF,Mapper185_write);
}

View File

@ -0,0 +1,69 @@
#include "mapinc.h"
static uint32 regchr[9];
static DECLFW(Mapper27_write)
{
A&=0xF00F;
int regnum;
if((A>=0xB000) && (A<=0xE003)) {
regnum=((((A>>12)+1)&0x03)<<1)|((A&0x02)>>1);
if(A&1)
regchr[regnum]=(regchr[regnum]&0x00F)|(V<<4);
else
regchr[regnum]=(regchr[regnum]&0x1F0)|(V&0xF);
VROM_BANK1(regnum<<10,regchr[regnum]);
}
switch(A)
{
case 0x8000: ROM_BANK8(0x8000|((regchr[8]&2)<<13),V); break;
case 0xA000: ROM_BANK8(0xa000,V); break;
case 0x9000: switch(V&3){
case 0:setmirror(MI_V);break;
case 1:setmirror(MI_H);break;
case 2:setmirror(MI_0);break;
case 3:setmirror(MI_1);break;
}
case 0x9002: regchr[8]=V; break;
case 0xF000: //X6502_IRQEnd(FCEU_IQEXT);
IRQLatch=(IRQLatch&0xF0)|(V&0x0F);
break;
case 0xF001: //X6502_IRQEnd(FCEU_IQEXT);
IRQLatch=(IRQLatch&0x0F)|((V&0xF)<<4);
break;
case 0xF003: IRQa=((IRQa&0x1)<<1)|(IRQa&0x1);
X6502_IRQEnd(FCEU_IQEXT);
break;
case 0xF002: IRQa=V&3;
if(IRQa&0x02) IRQCount=IRQLatch-1;
// X6502_IRQEnd(FCEU_IQEXT);
break;
}
// if((A&0xF000)==0xF000) FCEU_printf("$%04x:$%02x, %d\n",A,V, scanline);
}
static void Mapper27_hb(void)
{
// FCEU_printf("%02x-%d,%d,%d\n",scanline,IRQa,IRQCount,IRQLatch);
if(IRQa&0x2){
if(IRQCount==0xFF){
X6502_IRQBegin(FCEU_IQEXT);
IRQCount=IRQLatch+1;
} else {
IRQCount++;
}
}
}
void Mapper27_init(void)
{
int i;
for (i=0; i<9; i++) {
regchr[i]=0;
}
IRQa=0;
IRQCount=IRQLatch=0;
SetWriteHandler(0x8000,0xffff,Mapper27_write);
GameHBIRQHook=Mapper27_hb;
}

View File

@ -24,9 +24,8 @@ static int is48;
static DECLFW(Mapper33_write)
{
//printf("%04x:%02x, %d\n",A,V,scanline);
A&=0xF003;
if(A>=0xA000 && A<=0xA003)
VROM_BANK1(0x1000+((A&3)<<10),V);
else switch(A)

View File

@ -27,9 +27,9 @@ DECLFW(Mapper86_write)
VROM_BANK8((V&3)|((V>>4)&4));
ROM_BANK32((V>>4)&3);
}
//else
else
//if(A!=0x6000)
// printf("$%04x:$%02x\n",A,V);
printf("$%04x:$%02x\n",A,V);
}
void Mapper86_init(void)
{

View File

@ -0,0 +1,79 @@
#include "mapinc.h"
static uint8 mode;
static uint8 DRegs[4];
static SFORMAT StateRegs[]=
{
{DRegs, 4, "DREG"},
{0}
};
static void Sync(void)
{
int base, bank;
base = ((DRegs[0]^DRegs[1])&0x10)<<1;
bank = (DRegs[2]^DRegs[3])&0x1f;
if(DRegs[1]&0x08)
{
bank &= 0xfe;
if(mode==0)
{
setprg16(0x8000,base+bank+1);
setprg16(0xC000,base+bank+0);
}
else
{
setprg16(0x8000,base+bank+0);
setprg16(0xC000,base+bank+1);
}
}
else
{
if(DRegs[1]&0x04)
{
setprg16(0x8000,0x1f);
setprg16(0xC000,base+bank);
}
else
{
setprg16(0x8000,base+bank);
if(mode==0)
setprg16(0xC000,0x20);
else
setprg16(0xC000,0x07);
}
}
}
static DECLFW(Mapper167_write)
{
DRegs[(A>>13)&0x03]=V;
Sync();
}
static void StateRestore(int version)
{
Sync();
}
void Mapper166_init(void)
{
mode=1;
DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0;
Sync();
SetWriteHandler(0x8000,0xFFFF,Mapper167_write);
GameStateRestore=StateRestore;
AddExState(&StateRegs, ~0, 0, 0);
}
void Mapper167_init(void)
{
mode=0;
DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0;
Sync();
SetWriteHandler(0x8000,0xFFFF,Mapper167_write);
GameStateRestore=StateRestore;
AddExState(&StateRegs, ~0, 0, 0);
}

View File

@ -22,7 +22,6 @@
static uint8 cmd;
static uint8 DRegs[8];
static SFORMAT StateRegs[]=
{
{&cmd, 1, "CMD"},
@ -32,8 +31,8 @@ static SFORMAT StateRegs[]=
static void Sync(void)
{
setprg32(0x8000,(DRegs[0]<<4)|(DRegs[1]&0xF));
setchr8(0);
}
static void StateRestore(int version)
@ -43,11 +42,21 @@ static void StateRestore(int version)
static DECLFW(Write)
{
if((A&0x7300)==0x5000)
setprg32(0x8000,V);
//else
//if(A==0x5200)
// printf("$%04x:$%02x\n",A,V);
switch (A&0x7300)
{
case 0x5100: DRegs[0]=V; Sync(); break;
case 0x5000: DRegs[1]=V; Sync(); break;
}
}
static DECLFW(Write2)
{
// FCEU_printf("bs %04x %02x\n",A,V);
switch (A&0x7300)
{
case 0x5200: DRegs[0]=V; Sync(); break;
case 0x5000: DRegs[1]=V; Sync(); break;
}
}
static uint8 WRAM[8192];
@ -63,17 +72,34 @@ static DECLFW(BWRAM)
static void Power(void)
{
setchr8(0);
setprg32(0x8000,~0);
cmd=0;
memset(DRegs,0,8);
Sync();
DRegs[1]=0xFF;
cmd=0;
SetReadHandler(0x8000,0xFFFF,CartBR);
SetWriteHandler(0x4020,0xFFFF,Write);
SetWriteHandler(0x4020,0x5FFF,Write);
SetReadHandler(0x6000,0x7FFF,AWRAM);
SetWriteHandler(0x6000,0x7FFF,BWRAM);
Sync();
}
static void M163HB(void)
{
if(scanline==127&&DRegs[1]&0x80)
setchr4(0x0000,1);
}
static void Power2(void)
{
memset(DRegs,0,8);
DRegs[1]=0xFF;
cmd=0;
SetReadHandler(0x8000,0xFFFF,CartBR);
SetWriteHandler(0x4020,0x5FFF,Write2);
SetReadHandler(0x6000,0x7FFF,AWRAM);
SetWriteHandler(0x6000,0x7FFF,BWRAM);
Sync();
}
void Mapper164_Init(CartInfo *info)
{
@ -81,3 +107,11 @@ void Mapper164_Init(CartInfo *info)
GameStateRestore=StateRestore;
AddExState(&StateRegs, ~0, 0, 0);
}
void Mapper163_Init(CartInfo *info)
{
info->Power=Power2;
GameHBIRQHook=M163HB;
GameStateRestore=StateRestore;
AddExState(&StateRegs, ~0, 0, 0);
}

View File

@ -0,0 +1,95 @@
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2006 CaH4e3
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Dragon Ball Z 2 - Gekishin Freeza! (C)
* Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (C)
* San Guo Zhi 2 (C)
*
*/
#include "mapinc.h"
#include "mmc3.h"
static void M199PW(uint32 A, uint8 V)
{
setprg8(A,V);
setprg8(0xC000,EXPREGS[0]);
setprg8(0xE000,EXPREGS[1]);
}
static void M199CW(uint32 A, uint8 V)
{
setchr1r((V<8)?0x10:0x00,A,V);
setchr1r((DRegBuf[0]<8)?0x10:0x00,0x0000,DRegBuf[0]);
setchr1r((EXPREGS[2]<8)?0x10:0x00,0x0400,EXPREGS[2]);
setchr1r((DRegBuf[1]<8)?0x10:0x00,0x0800,DRegBuf[1]);
setchr1r((EXPREGS[3]<8)?0x10:0x00,0x0c00,EXPREGS[3]);
}
static void M199MW(uint8 V)
{
// FCEU_printf("%02x\n",V);
switch(V&3)
{
case 0: setmirror(MI_V); break;
case 1: setmirror(MI_H); break;
case 2: setmirror(MI_0); break;
case 3: setmirror(MI_1); break;
}
}
static DECLFW(M199Write)
{
if((A==0x8001)&&(MMC3_cmd&8))
{
// FCEU_printf("%02x=>%02x\n",MMC3_cmd,V);
EXPREGS[MMC3_cmd&3]=V;
FixMMC3PRG(MMC3_cmd);
FixMMC3CHR(MMC3_cmd);
}
else
if(A<0xC000)
MMC3_CMDWrite(A,V);
else
MMC3_IRQWrite(A,V);
}
static void M199Power(void)
{
EXPREGS[0]=~1;
EXPREGS[1]=~0;
EXPREGS[2]=1;
EXPREGS[3]=3;
GenMMC3Power();
SetWriteHandler(0x8000,0xFFFF,M199Write);
}
void Mapper199_Init(CartInfo *info)
{
GenMMC3_Init(info, 512, 256, 8, info->battery);
cwrap=M199CW;
pwrap=M199PW;
mwrap=M199MW;
info->Power=M199Power;
int CHRRAMSize=1024*8;
CHRRAM=(uint8*)FCEU_gmalloc(CHRRAMSize);
SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSize, 1);
AddExState(CHRRAM, CHRRAMSize, 0, "CHRR");
AddExState(EXPREGS, 4, 0, "EXPR");
}

View File

@ -0,0 +1,95 @@
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2006 CaH4e3
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Dragon Ball Z 2 - Gekishin Freeza! (C)
* Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (C)
* San Guo Zhi 2 (C)
*
*/
#include "mapinc.h"
#include "mmc3.h"
static void M252PW(uint32 A, uint8 V)
{
setprg8(A,V);
setprg8(0xC000,EXPREGS[0]);
setprg8(0xE000,EXPREGS[1]);
}
static void M252CW(uint32 A, uint8 V)
{
setchr1r((V<8)?0x10:0x00,A,V);
setchr1r((DRegBuf[0]<8)?0x10:0x00,0x0000,DRegBuf[0]);
setchr1r((EXPREGS[2]<8)?0x10:0x00,0x0400,EXPREGS[2]);
setchr1r((DRegBuf[1]<8)?0x10:0x00,0x0800,DRegBuf[1]);
setchr1r((EXPREGS[3]<8)?0x10:0x00,0x0c00,EXPREGS[3]);
}
static void M252MW(uint8 V)
{
// FCEU_printf("%02x\n",V);
switch(V&3)
{
case 0: setmirror(MI_V); break;
case 1: setmirror(MI_H); break;
case 2: setmirror(MI_0); break;
case 3: setmirror(MI_1); break;
}
}
static DECLFW(M252Write)
{
if((A==0x8001)&&(MMC3_cmd&8))
{
// FCEU_printf("%02x=>%02x\n",MMC3_cmd,V);
EXPREGS[MMC3_cmd&3]=V;
FixMMC3PRG(MMC3_cmd);
FixMMC3CHR(MMC3_cmd);
}
else
if(A<0xC000)
MMC3_CMDWrite(A,V);
else
MMC3_IRQWrite(A,V);
}
static void M252Power(void)
{
EXPREGS[0]=~1;
EXPREGS[1]=~0;
EXPREGS[2]=1;
EXPREGS[3]=3;
GenMMC3Power();
SetWriteHandler(0x8000,0xFFFF,M252Write);
}
void Mapper252_Init(CartInfo *info)
{
GenMMC3_Init(info, 256, 128, 8, info->battery);
cwrap=M252CW;
pwrap=M252PW;
mwrap=M252MW;
info->Power=M252Power;
int CHRRAMSize=1024*8;
CHRRAM=(uint8*)FCEU_gmalloc(CHRRAMSize);
SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSize, 1);
AddExState(CHRRAM, CHRRAMSize, 0, "CHRR");
AddExState(EXPREGS, 4, 0, "EXPR");
}

View File

@ -1,80 +0,0 @@
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2002 Xodnizel
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "mapinc.h"
static uint8 DReg;
static SFORMAT StateRegs[]=
{
{&DReg, 1, "DREG"},
{0}
};
static void Sync(void)
{
//if(!DReg)
//printf("%02x\n",DReg);
if(DReg)
{
if(DReg & 0x10)
setprg16(0x8000, (DReg & 0x7));
else
setprg16(0x8000, (DReg&0x7) | 0x8);
}
else
setprg16(0x8000, 0x7);
}
static void StateRestore(int version)
{
Sync();
}
static DECLFW(M188Write)
{
DReg = V;
Sync();
}
static DECLFR(testr)
{
return(3);
}
static void Power(void)
{
setchr8(0);
setprg8(0xc000,0xE);
setprg8(0xe000,0xF);
DReg = 0;
Sync();
SetReadHandler(0x6000,0x7FFF,testr);
SetReadHandler(0x8000,0xFFFF,CartBR);
SetWriteHandler(0x8000,0xFFFF,M188Write);
}
void Mapper188_Init(CartInfo *info)
{
info->Power=Power;
GameStateRestore=StateRestore;
AddExState(&StateRegs, ~0, 0, 0);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
extern uint8 MMC3_cmd;
extern uint8 *WRAM;
extern uint8 *CHRRAM;
extern uint8 EXPREGS[8];
extern uint8 DRegBuf[8];
#undef IRQCount
#undef IRQLatch
#undef IRQa
extern uint8 IRQCount,IRQLatch,IRQa;
extern uint8 IRQReload;
extern void (*pwrap)(uint32 A, uint8 V);
extern void (*cwrap)(uint32 A, uint8 V);
extern void (*mwrap)(uint8 V);
void GenMMC3Power(void);
void GenMMC3Restore(int version);
void MMC3RegReset(void);
void FixMMC3PRG(int V);
void FixMMC3CHR(int V);
DECLFW(MMC3_CMDWrite);
DECLFW(MMC3_IRQWrite);
void GenMMC3_Init(CartInfo *info, int prg, int chr, int wram, int battery);

View File

@ -114,7 +114,6 @@ cartdata MMC5CartList[MMC5_NOCARTS]=
int DetectMMC5WRAMSize(uint32 crc32)
{
int x;
for(x=0;x<MMC5_NOCARTS;x++)
if(crc32==MMC5CartList[x].crc32)
{
@ -127,15 +126,14 @@ int DetectMMC5WRAMSize(uint32 crc32)
static void BuildWRAMSizeTable(void)
{
int x;
for(x=0;x<8;x++)
{
switch(MMC5WRAMsize)
{
case 0:MMC5WRAMIndex[x]=255;break;
case 1:MMC5WRAMIndex[x]=(x>3)?255:0;break;
case 2:MMC5WRAMIndex[x]=(x&4)>>2;break;
case 4:MMC5WRAMIndex[x]=(x>3)?255:(x&3);break;
case 0: MMC5WRAMIndex[x]=255; break;
case 1: MMC5WRAMIndex[x]=(x>3)?255:0; break;
case 2: MMC5WRAMIndex[x]=(x&4)>>2; break;
case 4: MMC5WRAMIndex[x]=(x>3)?255:(x&3); break;
}
}
}
@ -145,15 +143,15 @@ static void MMC5CHRA(void)
int x;
switch(mmc5vsize&3)
{
case 0:setchr8(CHRBanksA[7]);
case 0: setchr8(CHRBanksA[7]);
MMC5SPRVROM_BANK8(CHRBanksA[7]);
break;
case 1:setchr4(0x0000,CHRBanksA[3]);
case 1: setchr4(0x0000,CHRBanksA[3]);
setchr4(0x1000,CHRBanksA[7]);
MMC5SPRVROM_BANK4(0x0000,CHRBanksA[3]);
MMC5SPRVROM_BANK4(0x1000,CHRBanksA[7]);
break;
case 2:setchr2(0x0000,CHRBanksA[1]);
case 2: setchr2(0x0000,CHRBanksA[1]);
setchr2(0x0800,CHRBanksA[3]);
setchr2(0x1000,CHRBanksA[5]);
setchr2(0x1800,CHRBanksA[7]);
@ -162,8 +160,7 @@ static void MMC5CHRA(void)
MMC5SPRVROM_BANK2(0x1000,CHRBanksA[5]);
MMC5SPRVROM_BANK2(0x1800,CHRBanksA[7]);
break;
case 3:
for(x=0;x<8;x++)
case 3: for(x=0;x<8;x++)
{
setchr1(x<<10,CHRBanksA[x]);
MMC5SPRVROM_BANK1(x<<10,CHRBanksA[x]);
@ -177,20 +174,15 @@ static void MMC5CHRB(void)
int x;
switch(mmc5vsize&3)
{
case 0:
setchr8(CHRBanksB[3]);
case 0: setchr8(CHRBanksB[3]);
MMC5BGVROM_BANK8(CHRBanksB[3]);
break;
case 1:
setchr4(0x0000,CHRBanksB[3]);
case 1: setchr4(0x0000,CHRBanksB[3]);
setchr4(0x1000,CHRBanksB[3]);
MMC5BGVROM_BANK4(0x0000,CHRBanksB[3]);
MMC5BGVROM_BANK4(0x1000,CHRBanksB[3]);
break;
case 2:
setchr2(0x0000,CHRBanksB[1]);
case 2: setchr2(0x0000,CHRBanksB[1]);
setchr2(0x0800,CHRBanksB[3]);
setchr2(0x1000,CHRBanksB[1]);
setchr2(0x1800,CHRBanksB[3]);
@ -199,8 +191,7 @@ static void MMC5CHRB(void)
MMC5BGVROM_BANK2(0x1000,CHRBanksB[1]);
MMC5BGVROM_BANK2(0x1800,CHRBanksB[3]);
break;
case 3:
for(x=0;x<8;x++)
case 3: for(x=0;x<8;x++)
{
setchr1(x<<10,CHRBanksB[x&3]);
MMC5BGVROM_BANK1(x<<10,CHRBanksB[x&3]);
@ -225,18 +216,15 @@ static void FASTAPASS(2) MMC5WRAM(uint32 A, uint32 V)
static void MMC5PRG(void)
{
int x;
switch(mmc5psize&3)
{
case 0:
MMC5ROMWrProtect[0]=MMC5ROMWrProtect[1]=
case 0: MMC5ROMWrProtect[0]=MMC5ROMWrProtect[1]=
MMC5ROMWrProtect[2]=MMC5ROMWrProtect[3]=1;
setprg32(0x8000,((PRGBanks[1]&0x7F)>>2));
for(x=0;x<4;x++)
MMC5MemIn[1+x]=1;
break;
case 1:
if(PRGBanks[1]&0x80)
case 1: if(PRGBanks[1]&0x80)
{
MMC5ROMWrProtect[0]=MMC5ROMWrProtect[1]=1;
setprg16(0x8000,(PRGBanks[1]>>1));
@ -252,8 +240,7 @@ static void MMC5PRG(void)
MMC5ROMWrProtect[2]=MMC5ROMWrProtect[3]=1;
setprg16(0xC000,(PRGBanks[3]&0x7F)>>1);
break;
case 2:
if(PRGBanks[1]&0x80)
case 2: if(PRGBanks[1]&0x80)
{
MMC5MemIn[1]=MMC5MemIn[2]=1;
MMC5ROMWrProtect[0]=MMC5ROMWrProtect[1]=1;
@ -266,15 +253,21 @@ static void MMC5PRG(void)
MMC5WRAM(0xA000,(PRGBanks[1]&7&0xFE)+1);
}
if(PRGBanks[2]&0x80)
{MMC5ROMWrProtect[2]=1;MMC5MemIn[3]=1;setprg8(0xC000,PRGBanks[2]&0x7F);}
{
MMC5ROMWrProtect[2]=1;
MMC5MemIn[3]=1;
setprg8(0xC000,PRGBanks[2]&0x7F);
}
else
{MMC5ROMWrProtect[2]=0;MMC5WRAM(0xC000,PRGBanks[2]&7);}
{
MMC5ROMWrProtect[2]=0;
MMC5WRAM(0xC000,PRGBanks[2]&7);
}
MMC5MemIn[4]=1;
MMC5ROMWrProtect[3]=1;
setprg8(0xE000,PRGBanks[3]&0x7F);
break;
case 3:
for(x=0;x<3;x++)
case 3: for(x=0;x<3;x++)
if(PRGBanks[x]&0x80)
{
MMC5ROMWrProtect[x]=1;
@ -295,7 +288,7 @@ static void MMC5PRG(void)
static DECLFW(Mapper5_write)
{
if(A >= 0x5120 && A<=0x5127)
if(A>=0x5120&&A<=0x5127)
{
ABMode = 0;
CHRBanksA[A&7]=V;
@ -303,11 +296,7 @@ static DECLFW(Mapper5_write)
}
else switch(A)
{
default:
//printf("$%04x, $%02x\n",A,V);
break;
case 0x5105:
{
case 0x5105: {
int x;
for(x=0;x<4;x++)
{
@ -322,32 +311,29 @@ static DECLFW(Mapper5_write)
}
NTAMirroring=V;
break;
case 0x5113:WRAMPage=V;MMC5WRAM(0x6000,V&7);break;
case 0x5100:mmc5psize=V;MMC5PRG();break;
case 0x5101:mmc5vsize=V;
case 0x5113: WRAMPage=V;MMC5WRAM(0x6000,V&7);break;
case 0x5100: mmc5psize=V;MMC5PRG();break;
case 0x5101: mmc5vsize=V;
if(!ABMode)
{MMC5CHRB();MMC5CHRA();}
{ MMC5CHRB();MMC5CHRA();}
else
{MMC5CHRA();MMC5CHRB();}
{ MMC5CHRA();MMC5CHRB();}
break;
case 0x5114:
case 0x5115:
case 0x5116:
case 0x5117:
PRGBanks[A&3]=V;MMC5PRG();break;
case 0x5117: PRGBanks[A&3]=V;MMC5PRG();break;
case 0x5128:
case 0x5129:
case 0x512a:
case 0x512b:ABMode=1;
case 0x512b: ABMode=1;
CHRBanksB[A&3]=V;
MMC5CHRB();
break;
case 0x5102:WRAMMaskEnable[0]=V;break;
case 0x5103:WRAMMaskEnable[1]=V;break;
case 0x5104:CHRMode=V;MMC5HackCHRMode=V&3;break;
case 0x5106:if(V!=NTFill)
case 0x5102: WRAMMaskEnable[0]=V;break;
case 0x5103: WRAMMaskEnable[1]=V;break;
case 0x5104: CHRMode=V;MMC5HackCHRMode=V&3;break;
case 0x5106: if(V!=NTFill)
{
uint32 t;
t=V|(V<<8)|(V<<16)|(V<<24);
@ -355,7 +341,7 @@ static DECLFW(Mapper5_write)
}
NTFill=V;
break;
case 0x5107:if(V!=ATFill)
case 0x5107: if(V!=ATFill)
{
unsigned char moop;
uint32 t;
@ -365,13 +351,13 @@ static DECLFW(Mapper5_write)
}
ATFill=V;
break;
case 0x5200:MMC5HackSPMode=V;break;
case 0x5201:MMC5HackSPScroll=(V>>3)&0x1F;break;
case 0x5202:MMC5HackSPPage=V&0x3F;break;
case 0x5203:X6502_IRQEnd(FCEU_IQEXT);IRQScanline=V;break;
case 0x5204:X6502_IRQEnd(FCEU_IQEXT);IRQEnable=V&0x80;break;
case 0x5205:mul[0]=V;break;
case 0x5206:mul[1]=V;break;
case 0x5200: MMC5HackSPMode=V;break;
case 0x5201: MMC5HackSPScroll=(V>>3)&0x1F;break;
case 0x5202: MMC5HackSPPage=V&0x3F;break;
case 0x5203: X6502_IRQEnd(FCEU_IQEXT);IRQScanline=V;break;
case 0x5204: X6502_IRQEnd(FCEU_IQEXT);IRQEnable=V&0x80;break;
case 0x5205: mul[0]=V;break;
case 0x5206: mul[1]=V;break;
}
}
@ -386,11 +372,9 @@ static DECLFR(MMC5_ReadROMRAM)
static DECLFW(MMC5_WriteROMRAM)
{
if(A>=0x8000)
if(MMC5ROMWrProtect[(A-0x8000)>>13])
return;
if(MMC5ROMWrProtect[(A-0x8000)>>13]) return;
if(MMC5MemIn[(A-0x6000)>>13])
if(((WRAMMaskEnable[0]&3)|((WRAMMaskEnable[1]&3)<<2)) == 6)
Page[A>>11][A]=V;
if(((WRAMMaskEnable[0]&3)|((WRAMMaskEnable[1]&3)<<2)) == 6) Page[A>>11][A]=V;
}
static DECLFW(MMC5_ExRAMWr)
@ -412,8 +396,7 @@ static DECLFR(MMC5_read)
{
switch(A)
{
//default:printf("$%04x\n",A);break;
case 0x5204:X6502_IRQEnd(FCEU_IQEXT);
case 0x5204: X6502_IRQEnd(FCEU_IQEXT);
{
uint8 x;
x=MMC5IRQR;
@ -421,8 +404,8 @@ static DECLFR(MMC5_read)
MMC5IRQR&=0x40;
return x;
}
case 0x5205:return (mul[0]*mul[1]);
case 0x5206:return ((mul[0]*mul[1])>>8);
case 0x5205: return (mul[0]*mul[1]);
case 0x5206: return ((mul[0]*mul[1])>>8);
}
return(X.DB);
}
@ -471,15 +454,12 @@ void MMC5Synco(void)
void MMC5_hb(int scanline)
{
//printf("%d:%d, ",scanline,MMC5LineCounter);
if(scanline==240)
{
// printf("\n%d:%d\n",scanline,MMC5LineCounter);
MMC5LineCounter=0;
MMC5IRQR=0x40;
return;
}
if(MMC5LineCounter<240)
{
if(MMC5LineCounter==IRQScanline)
@ -490,7 +470,6 @@ void MMC5_hb(int scanline)
}
MMC5LineCounter++;
}
// printf("%d:%d\n",MMC5LineCounter,scanline);
if(MMC5LineCounter==240)
MMC5IRQR=0;
}
@ -507,9 +486,7 @@ typedef struct {
uint8 running;
uint8 raw;
uint8 rawcontrol;
int32 dcount[2];
int32 BC[3];
int32 vcount[2];
} MMC5APU;
@ -560,7 +537,7 @@ static DECLFW(Mapper5_SW)
MMC5Sound.env[A>>2]=V;
break;
case 0x2:
case 0x6:if(sfun) sfun(A>>2);
case 0x6: if(sfun) sfun(A>>2);
MMC5Sound.wl[A>>2]&=~0x00FF;
MMC5Sound.wl[A>>2]|=V&0xFF;
break;

View File

@ -191,7 +191,6 @@ void FCEUMOV_AddJoy(uint8 *js)
tmp &= 0x3;
ti=0;
{
int tmpfix = tmp;
while(tmp--) { nextts |= fgetc(slots[-1 - current]) << (ti * 8); ti++; }
@ -205,8 +204,6 @@ void FCEUMOV_AddJoy(uint8 *js)
framets = 0;
nextd = d;
}
}
memcpy(js,joop,4);
}
else /* Recording */

View File

@ -173,7 +173,9 @@ static FILE *FetchFile(uint32 remlen)
if(!FCEUD_RecvData(cbuf, clen))
{
NetError();
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
fclose(fp);
free(cbuf);
free(fn);
@ -184,7 +186,9 @@ static FILE *FetchFile(uint32 remlen)
if(len > 500000) // Another sanity check
{
NetError();
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
fclose(fp);
free(cbuf);
free(fn);
@ -196,7 +200,9 @@ static FILE *FetchFile(uint32 remlen)
fwrite(buf, 1, len, fp);
free(buf);
fseek(fp, 0, SEEK_SET);
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
free(fn);
return(fp);
}
@ -283,18 +289,24 @@ void NetplayUpdate(uint8 *joyp)
fclose(fp);
if(!FCEUNET_SendFile(FCEUNPCMD_LOADSTATE, fn))
{
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
free(fn);
return;
}
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
free(fn);
}
else
{
fclose(fp);
FCEUD_PrintError("File error. (K)ill, (M)aim, (D)estroy? Now!");
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
free(fn);
return;
}

View File

@ -350,22 +350,22 @@ case 0xAB: LD_IM(_A|=0xEE;AND;_X=_A);
case 0xCB: LD_IM(AXS);
/* DCP */
case 0xC7: RMW_ZP(DEC;CMP);
case 0xD7: RMW_ZPX(DEC;CMP);
case 0xCF: RMW_AB(DEC;CMP);
case 0xDF: RMW_ABX(DEC;CMP);
case 0xDB: RMW_ABY(DEC;CMP);
case 0xC3: RMW_IX(DEC;CMP);
case 0xD3: RMW_IY(DEC;CMP);
case 0xC7: LD_ZP(DEC;CMP);
case 0xD7: LD_ZPX(DEC;CMP);
case 0xCF: LD_AB(DEC;CMP);
case 0xDF: LD_ABX(DEC;CMP);
case 0xDB: LD_ABY(DEC;CMP);
case 0xC3: LD_IX(DEC;CMP);
case 0xD3: LD_IY(DEC;CMP);
/* ISB */
case 0xE7: RMW_ZP(INC;SBC);
case 0xF7: RMW_ZPX(INC;SBC);
case 0xEF: RMW_AB(INC;SBC);
case 0xFF: RMW_ABX(INC;SBC);
case 0xFB: RMW_ABY(INC;SBC);
case 0xE3: RMW_IX(INC;SBC);
case 0xF3: RMW_IY(INC;SBC);
/* ISC */
case 0xE7: LD_ZP(INC;SBC);
case 0xF7: LD_ZPX(INC;SBC);
case 0xEF: LD_AB(INC;SBC);
case 0xFF: LD_ABX(INC;SBC);
case 0xFB: LD_ABY(INC;SBC);
case 0xE3: LD_IX(INC;SBC);
case 0xF3: LD_IY(INC;SBC);
/* DOP */

View File

@ -153,10 +153,7 @@ static DECLFR(A2002)
FCEUPPU_LineUpdate();
ret = PPU_status;
ret|=PPUGenLatch&0x1F;
#ifdef FCEUDEF_DEBUGGER
if(!fceuindbg)
#endif
{
vtoggle=0;
PPU_status&=0x7F;
@ -205,9 +202,7 @@ static DECLFR(A2007)
ret=VRAMBuffer;
#ifdef FCEUDEF_DEBUGGER
if(!fceuindbg)
#endif
{
if(PPU_hook) PPU_hook(tmp);
PPUGenLatch=VRAMBuffer;
@ -220,9 +215,7 @@ static DECLFR(A2007)
VRAMBuffer=vnapage[(tmp>>10)&0x3][tmp&0x3FF];
}
}
#ifdef FCEUDEF_DEBUGGER
if(!fceuindbg)
#endif
{
if (INC32) RefreshAddr+=32;
else RefreshAddr++;
@ -381,7 +374,6 @@ static int tofix=0;
static void ResetRL(uint8 *target)
{
memset(target,0xFF,256);
if(InputScanlineHook)
InputScanlineHook(0,0,0,0);
Plinef=target;
@ -396,10 +388,7 @@ static uint8 sprlinebuf[256+8];
void FCEUPPU_LineUpdate(void)
{
#ifdef FCEUDEF_DEBUGGER
if(!fceuindbg)
#endif
if(Pline)
if(Pline && !fceuindbg)
{
int l=GETLASTPIXEL;
RefreshLine(l);
@ -473,20 +462,14 @@ static void CheckSpriteHit(int p)
int x;
if(sphitx==0x100) return;
for(x=sphitx;x<(sphitx+8) && x<l;x++)
{
if((sphitdata&(0x80>>(x-sphitx))) && !(Plinef[x]&64))
{
PPU_status|=0x40;
//printf("Ha: %d, %d, Hita: %d, %d, %d, %d, %d\n",p,p&~7,scanline,GETLASTPIXEL-16,&Plinef[x],Pline,Pline-Plinef);
//printf("%d\n",GETLASTPIXEL-16);
//if(Plinef[x] == 0xFF)
//printf("PL: %d, %02x\n",scanline, Plinef[x]);
sphitx=0x100;
break;
}
}
}
static int spork=0; /* spork the world. Any sprites on this line?
Then this will be set to 1. Needed for zapper
@ -514,16 +497,6 @@ static void FASTAPASS(1) RefreshLine(int lastpixel)
function. */
if(norecurse) return;
if(sphitx != 0x100 && !(PPU_status&0x40))
{
if((sphitx < (lastpixel-16)) && !(sphitx < ((lasttile - 2)*8)))
{
//printf("OK: %d\n",scanline);
lasttile++;
}
}
if(lasttile>34) lasttile=34;
numtiles=lasttile-firsttile;
@ -687,11 +660,7 @@ static void FASTAPASS(1) RefreshLine(int lastpixel)
tofix=0;
}
//CheckSpriteHit(lasttile*8); //lasttile*8); //lastpixel);
CheckSpriteHit(lastpixel); /* This only works right because
of a hack earlier in this function.
*/
CheckSpriteHit(lasttile*8); //lasttile*8); //lastpixel);
if(InputScanlineHook && (lastpixel-16)>=0)
{
InputScanlineHook(Plinef,spork?sprlinebuf:0,linestartts,lasttile*8-16);
@ -999,14 +968,8 @@ static void RefreshSprites(void)
for(n=numsprites;n>=0;n--,spr--)
{
//#ifdef C80x86
//register uint32 pixdata asm ("eax");
//register uint8 J, atr;
//#else
register uint32 pixdata;
register uint8 J,atr;
//#endif
int x=spr->x;
uint8 *C;
uint8 *VB;
@ -1122,7 +1085,6 @@ static void CopySprites(uint8 *target)
spork=0;
if(rendis & 1) return; /* User asked to not display sprites. */
loopskie:
{
uint32 t=*(uint32 *)(sprlinebuf+n);
@ -1132,25 +1094,25 @@ static void CopySprites(uint8 *target)
#ifdef LSB_FIRST
if(!(t&0x80))
{
if(!(t&0x40) || (P[n]&0x40)) // Normal sprite || behind bg sprite
if(!(t&0x40) || (P[n]&64)) // Normal sprite || behind bg sprite
P[n]=sprlinebuf[n];
}
if(!(t&0x8000))
{
if(!(t&0x4000) || (P[n+1]&0x40)) // Normal sprite || behind bg sprite
if(!(t&0x4000) || (P[n+1]&64)) // Normal sprite || behind bg sprite
P[n+1]=(sprlinebuf+1)[n];
}
if(!(t&0x800000))
{
if(!(t&0x400000) || (P[n+2]&0x40)) // Normal sprite || behind bg sprite
if(!(t&0x400000) || (P[n+2]&64)) // Normal sprite || behind bg sprite
P[n+2]=(sprlinebuf+2)[n];
}
if(!(t&0x80000000))
{
if(!(t&0x40000000) || (P[n+3]&0x40)) // Normal sprite || behind bg sprite
if(!(t&0x40000000) || (P[n+3]&64)) // Normal sprite || behind bg sprite
P[n+3]=(sprlinebuf+3)[n];
}
#else

View File

@ -21,60 +21,6 @@
pixdata|=ppulut3[XOffset|(atlatch<<3)];
//printf("%02x ",ppulut3[XOffset|(atlatch<<3)]);
#ifdef C80x86
asm volatile(
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, (%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 1(%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 2(%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 3(%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 4(%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 5(%%edi)\n\t"
"movl %%ebx,%%eax\n\t"
"andl $15,%%eax\n\t"
"movb (%%esi,%%eax),%%cl\n\t"
"shrl $4, %%ebx\n\t"
"movb %%cl, 6(%%edi)\n\t"
//"movl %%ebx,%%eax\n\t"
//"andl $15,%%eax\n\t"
//"movb (%%esi,%%eax),%%cl\n\t"
//"movb %%cl, 7(%%edi)\n\t"
"movb (%%esi, %%ebx),%%cl\n\t"
"movb %%cl, 7(%%edi)\n\t"
:
: "S" (S), "D" (P), "b" (pixdata)
: "eax", "cl" );
#else
P[0]=S[pixdata&0xF];
pixdata>>=4;
P[1]=S[pixdata&0xF];
@ -90,7 +36,6 @@
P[6]=S[pixdata&0xF];
pixdata>>=4;
P[7]=S[pixdata&0xF];
#endif
P+=8;
}

View File

@ -826,7 +826,7 @@ static void RDoTriangleNoisePCMLQ(void)
totalout = wlookup2[tcout+noiseout+RawDALatch];
} /* noiseacc<=0 */
} /* for(V=... */
}
}
else if(inie[0])
{
for(V=start;V<end;V++)
@ -930,7 +930,7 @@ static void RDoNoise(void)
ChannelBC[3]=SOUNDTS;
}
static DECLFW(Write_IRQFM)
DECLFW(Write_IRQFM)
{
V=(V&0xC0)>>6;
fcnt=0;

View File

@ -79,6 +79,11 @@ SFORMAT SFCPUC[]={
{ 0 }
};
void cleanSFMDATA()
{
memset(&SFMDATA[0], 0, sizeof(SFMDATA) * 64 );
}
static int SubWrite(FILE *st, SFORMAT *sf)
{
uint32 acc=0;
@ -446,7 +451,9 @@ void FCEUI_LoadState(char *fname)
FCEUNET_SendFile(FCEUNPCMD_LOADSTATE, fn);
}
else fclose(fp);
/*** REMOVED GC V1.0
unlink(fn);
REMOVED GC V1.0 ***/
}
free(fn);
}
@ -461,7 +468,3 @@ void FCEU_DrawSaveStates(uint8 *XBuf)
StateShow--;
}
void cleanSFMDATA()
{
memset(&SFMDATA[0], 0, sizeof(SFMDATA) * 64 );
}

View File

@ -41,6 +41,7 @@ typedef uint32_t uint32;
typedef long long int64;
#define INLINE inline
#define GINLINE inline
#define PSS_STYLE 3
#elif MSVC
typedef __int64 int64;
typedef unsigned __int64 uint64;

View File

@ -371,12 +371,14 @@ static BMAPPING bmap[] = {
{ "CPROM", CPROM_Init,0},
{ "CNROM", CNROM_Init,0},
{ "GNROM", GNROM_Init,0},
{ "NROM", NROM256_Init,0 },
{ "RROM", NROM128_Init,0 },
{ "RROM-128", NROM128_Init,0 },
{ "NROM-128", NROM128_Init,0 },
{ "NROM-256", NROM256_Init,0 },
//{ "GNROM", GNROM_Init,0},
//{ "NROM", NROM256_Init,0 },
//{ "RROM", NROM128_Init,0 },
//{ "RROM-128", NROM128_Init,0 },
//{ "NROM-128", NROM128_Init,0 },
//{ "NROM-256", NROM256_Init,0 },
{ "MHROM", MHROM_Init,0},
{ "UNROM", UNROM_Init,0},
{ "MARIO1-MALEE2", MALEE_Init,0},

View File

@ -27,9 +27,7 @@
X6502 X;
#ifdef FCEUDEF_DEBUGGER
void (*X6502_Run)(int32 cycles);
#endif
uint32 timestamp;
void FP_FASTAPASS(1) (*MapIRQHook)(int a);
@ -65,7 +63,6 @@ static INLINE void WrMemNorm(unsigned int A, uint8 V)
BWrite[A](A,V);
}
#ifdef FCEUDEF_DEBUGGER
X6502 XSave; /* This is getting ugly. */
//#define RdMemHook(A) ( X.ReadHook?(_DB=X.ReadHook(&X,A)):(_DB=ARead[A](A)) )
//#define WrMemHook(A,V) { if(X.WriteHook) X.WriteHook(&X,A,V); else BWrite[A](A,V); }
@ -85,7 +82,6 @@ static INLINE void WrMemHook(unsigned int A, uint8 V)
else
BWrite[A](A,V);
}
#endif
//#define RdRAMFast(A) (_DB=RAM[(A)])
//#define WrRAMFast(A,V) RAM[(A)]=(V)
@ -133,8 +129,8 @@ static uint8 ZNTable[256];
if(cond) \
{ \
uint32 tmp; \
int32 disp; \
disp=(int8)RdMem(_PC); \
int8 disp; \
disp=RdMem(_PC); \
_PC++; \
ADDCYC(1); \
tmp=_PC; \
@ -145,7 +141,6 @@ static uint8 ZNTable[256];
else _PC++; \
}
#define LDA _A=x;X_ZN(_A)
#define LDX _X=x;X_ZN(_X)
#define LDY _Y=x;X_ZN(_Y)
@ -398,7 +393,6 @@ void TriggerNMI2(void)
_IRQlow|=FCEU_IQNMI2;
}
#ifdef FCEUDEF_DEBUGGER
/* Called from debugger. */
void FCEUI_NMI(void)
{
@ -410,6 +404,11 @@ void FCEUI_IRQ(void)
_IRQlow|=FCEU_IQTEMP;
}
void X6502_Reset(void)
{
_IRQlow=FCEU_IQRESET;
}
void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi)
{
fceuindbg=1;
@ -422,14 +421,8 @@ void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi)
*irq|=RdMemNorm(0xFFFF)<<8;
fceuindbg=0;
}
static int debugmode;
#endif
void X6502_Reset(void)
{
_IRQlow=FCEU_IQRESET;
}
void X6502_Init(void)
{
int x;
@ -439,9 +432,7 @@ void X6502_Init(void)
if(!x) ZNTable[x]=Z_FLAG;
else if (x&0x80) ZNTable[x]=N_FLAG;
else ZNTable[x]=0;
#ifdef FCEUDEF_DEBUGGER
X6502_Debug(0,0,0);
#endif
}
void X6502_Power(void)
@ -451,7 +442,6 @@ void X6502_Power(void)
X6502_Reset();
}
#ifdef FCEUDEF_DEBUGGER
static void X6502_RunDebug(int32 cycles)
{
#define RdRAM RdMemHook
@ -575,9 +565,6 @@ static void X6502_RunDebug(int32 cycles)
}
static void X6502_RunNormal(int32 cycles)
#else
void X6502_Run(int32 cycles)
#endif
{
#define RdRAM RdRAMFast
#define WrRAM WrRAMFast
@ -663,13 +650,15 @@ void X6502_Run(int32 cycles)
_PI=_P;
b1=RdMem(_PC);
//printf("$%04x, $%02x\n",_PC,b1);
ADDCYC(CycTable[b1]);
//PPUHack();
temp=_tcount;
_tcount=0;
if(MapIRQHook) MapIRQHook(temp);
FCEU_SoundCPUHook(temp);
//printf("%04x\n",X.PC);
X.PC=pbackus;
_PC++;
@ -686,7 +675,6 @@ void X6502_Run(int32 cycles)
#undef WrRAM
}
#ifdef FCEUDEF_DEBUGGER
void X6502_Debug(void (*CPUHook)(X6502 *),
uint8 (*ReadHook)(X6502 *, unsigned int),
void (*WriteHook)(X6502 *, unsigned int, uint8))
@ -701,5 +689,3 @@ void X6502_Debug(void (*CPUHook)(X6502 *),
else
X6502_Run=X6502_RunDebug;
}
#endif

View File

@ -22,18 +22,13 @@
#include "x6502struct.h"
#ifdef FCEUDEF_DEBUGGER
void X6502_Debug(void (*CPUHook)(X6502 *),
uint8 (*ReadHook)(X6502 *, unsigned int),
void (*WriteHook)(X6502 *, unsigned int, uint8));
extern void (*X6502_Run)(int32 cycles);
#else
void X6502_Run(int32 cycles);
#endif
extern uint32 timestamp;
extern X6502 X;
extern void (*X6502_Run)(int32 cycles);
#define N_FLAG 0x80
#define V_FLAG 0x40

View File

@ -14,13 +14,9 @@ typedef struct __X6502 {
uint8 DB; /* Data bus "cache" for reads from certain areas */
int preexec; /* Pre-exec'ing for debug breakpoints. */
#ifdef FCEUDEF_DEBUGGER
void (*CPUHook)(struct __X6502 *);
uint8 (*ReadHook)(struct __X6502 *, unsigned int);
void (*WriteHook)(struct __X6502 *, unsigned int, uint8);
#endif
} X6502;
#define _X6502STRUCTH
#endif