#include "dprintf.h"
+#ifdef GP2X
+#include "drivers/gp2x/asmutils.h"
+#endif
+
#define Pal (PALRAM)
ARead[x+0x8000]=AReadG[x];
BWrite[x+0x8000]=BWriteG[x];
}
+#ifdef ASM_6502
+ GenieSetPages(1);
+#endif
free(AReadG);
free(BWriteG);
AReadG=0;
}
#ifdef FRAMESKIP
-int FSkip_setting=-1; // auto
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
for(x=63;x>=0;x--)
((uint32 *)target)[x]=((uint32*)target)[x]&0xF0F0F0F0;
}
+#ifdef GP2X
+ if((PPU[1]>>5)==0x7) block_or(target, 256, 0xc0);
+ else if(PPU[1]&0xE0) block_andor(target, 256, 0x3f, 0x40);
+ else block_andor(target, 256, 0x3f, 0x80);
+#else
if((PPU[1]>>5)==0x7)
for(x=63;x>=0;x--)
- ((uint32 *)target)[x]=(((uint32*)target)[x]&0x3f3f3f3f)|0x40404040;
+ ((uint32 *)target)[x]=(((uint32*)target)[x])|0xc0c0c0c0;
else if(PPU[1]&0xE0)
for(x=63;x>=0;x--)
- ((uint32 *)target)[x]=((uint32*)target)[x]|0xC0C0C0C0;
+ ((uint32 *)target)[x]=(((uint32*)target)[x]&0x3f3f3f3f)|0x40404040;
else
for(x=63;x>=0;x--)
- ((uint32 *)target)[x]=((uint32*)target)[x]&0x3f3f3f3f;
- FCEU_dwmemset(target- 8,0x3f3f3f3f,8);
- FCEU_dwmemset(target+256,0x3f3f3f3f,8);
+ ((uint32 *)target)[x]=(((uint32*)target)[x]&0x3f3f3f3f)|0x80808080;
+#endif
+ // black borders
+ ((uint32 *)target)[-2]=((uint32 *)target)[-1]=0;
+ ((uint32 *)target)[64]=((uint32 *)target)[65]=0;
#ifdef FRAMESKIP
}
#endif
}
char lastLoadedGameName [2048];
+int LoadGameLastError = 0;
int UNIFLoad(const char *name, int fp);
int iNESLoad(const char *name, int fp);
int FDSLoad(const char *name, int fp);
int have_movie = 0;
int fp;
- Exit=1;
+ //Exit=1;
+ LoadGameLastError = 0;
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
+ LoadGameLastError = 1;
return 0;
}
FCEU_fclose(fp);
*p = 0;
fp=FCEU_fopen(name2,"rb");
+ if (!fp && p - name2 > 2) p[-2] = 0;
+ fp=FCEU_fopen(name2,"rb");
if (!fp) {
printf("no ROM for movie\n");
+ LoadGameLastError = 2;
return 0;
}
have_movie = 1;
}
}
- strcpy(lastLoadedGameName, name2);
-
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
FCEU_PrintError("An error occurred while loading the file.");
FCEU_fclose(fp);
+ // format handlers may set LoadGameLastError themselves.
+ if (LoadGameLastError == 0) LoadGameLastError = 3;
return 0;
endlseq:
if (have_movie)
FCEUI_LoadMovie(name, 1);
+
+ strcpy(lastLoadedGameName, name2);
+
return(&FCEUGameInfo);
}
FSettings.FirstSLine=FSettings.UsrFirstSLine[0];
FSettings.LastSLine=FSettings.UsrLastSLine[0];
}
- printf("PAL = %i\n", PAL);
+ printf("ResetVidSys: PAL = %i\n", PAL);
SetSoundVariables();
}
// FCEUPPU_Loop:
if(ppudead) /* Needed for Knight Rider, possibly others. */
{
- memset(XBuf, 0x80, 320*240);
+ //memset(XBuf, 0, 320*240);
X6502_Run(scanlines_per_frame*(256+85));
ppudead--;
goto update;
if(FCEUGameInfo.type==GIT_NSF)
{
+ // run scanlines for asm core to fuction
for(scanline=0;scanline<240;scanline++)
X6502_Run(256+85);
}
- #ifdef FRAMESKIP
- else if(FSkip)
- {
- int y;
-
- y=SPRAM[0];
- y++;
-
- PPU_status|=0x20; // Fixes "Bee 52". Does it break anything?
- if(GameHBIRQHook)
- {
- X6502_Run(256);
- for(scanline=0;scanline<240;scanline++)
- {
- if(ScreenON || SpriteON)
- GameHBIRQHook();
- if(scanline==y && SpriteON) PPU_status|=0x40;
- X6502_Run((scanline==239)?85:(256+85));
- ResetRL(); // ??
- }
- }
- else if(y<240)
- {
- X6502_Run((256+85)*y);
- if(SpriteON) PPU_status|=0x40; // Quick and very dirty hack.
- X6502_Run((256+85)*(240-y));
- }
- else
- X6502_Run((256+85)*240);
- }
- #endif
else
{
int x,max,maxref;
if(Exit)
{
- CloseGame();
+ //CloseGame();
break;
}
X6502_Reset();
}
+static void FCEU_MemoryRand(uint8 *ptr, uint32 size)
+{
+ int x=0;
+ while(size)
+ {
+ *ptr=(x&4)?0xFF:0x00;
+ x++;
+ size--;
+ ptr++;
+ }
+}
+
void PowerNES(void)
{
if(!GameLoaded) return;
GeniePower();
+#ifndef DEBUG_ASM_6502
+ FCEU_MemoryRand(RAM,0x800);
+#else
memset(RAM,0x00,0x800);
+#endif
ResetMapping();
GameInterface(GI_POWER);
PowerSound();
PowerPPU();
timestampbase=0;
+#ifdef ASM_6502
+ if (geniestage)
+ GenieSetPages(0);
+#endif
X6502_Power();
}