notaz.gp2x.de
/
fceu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
removed 64bit stuff in sound.c
[fceu.git]
/
fce.c
diff --git
a/fce.c
b/fce.c
index
e36a86c
..
fb28572
100644
(file)
--- a/
fce.c
+++ b/
fce.c
@@
-48,10
+48,15
@@
#include "crc32.h"
#include "ppu.h"
#include "crc32.h"
#include "ppu.h"
+#include "palette.h"
#include "movie.h"
#include "dprintf.h"
#include "movie.h"
#include "dprintf.h"
+#ifdef GP2X
+#include "drivers/gp2x/asmutils.h"
+#endif
+
#define Pal (PALRAM)
#define Pal (PALRAM)
@@
-198,6
+203,9
@@
void FlushGenieRW(void)
ARead[x+0x8000]=AReadG[x];
BWrite[x+0x8000]=BWriteG[x];
}
ARead[x+0x8000]=AReadG[x];
BWrite[x+0x8000]=BWriteG[x];
}
+#ifdef ASM_6502
+ GenieSetPages(1);
+#endif
free(AReadG);
free(BWriteG);
AReadG=0;
free(AReadG);
free(BWriteG);
AReadG=0;
@@
-353,7
+361,7
@@
static DECLFR(A2002)
vtoggle=0;
PPU_status&=0x7F;
PPUGenLatch=ret;
vtoggle=0;
PPU_status&=0x7F;
PPUGenLatch=ret;
- dprintf("r [2002] %02x",ret);
+
//
dprintf("r [2002] %02x",ret);
return ret;
}
return ret;
}
@@
-554,7
+562,6
@@
void BGRender(uint8 *target)
}
#ifdef FRAMESKIP
}
#ifdef FRAMESKIP
-int FSkip_setting=-1; // auto
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
@@
-609,17
+616,24
@@
static void Loop6502(void)
for(x=63;x>=0;x--)
((uint32 *)target)[x]=((uint32*)target)[x]&0xF0F0F0F0;
}
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--)
if((PPU[1]>>5)==0x7)
for(x=63;x>=0;x--)
- ((uint32 *)target)[x]=(((uint32*)target)[x]
&0x3f3f3f3f)|0x4040404
0;
+ ((uint32 *)target)[x]=(((uint32*)target)[x]
)|0xc0c0c0c
0;
else if(PPU[1]&0xE0)
for(x=63;x>=0;x--)
else if(PPU[1]&0xE0)
for(x=63;x>=0;x--)
- ((uint32 *)target)[x]=((
uint32*)target)[x]|0xC0C0C0C
0;
+ ((uint32 *)target)[x]=((
(uint32*)target)[x]&0x3f3f3f3f)|0x4040404
0;
else
for(x=63;x>=0;x--)
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
#ifdef FRAMESKIP
}
#endif
@@
-959,7
+973,7
@@
static void DoHBlank(void)
{
if(ScreenON || SpriteON)
FetchSpriteData();
{
if(ScreenON || SpriteON)
FetchSpriteData();
- if(GameHBIRQHook && (ScreenON || SpriteON))
+ if(GameHBIRQHook && (ScreenON || SpriteON)
&& ((PPU[0]&0x38)!=0x18)
)
{
X6502_Run(6);
Fixit2();
{
X6502_Run(6);
Fixit2();
@@
-978,7
+992,8
@@
static void DoHBlank(void)
//PPU_hook(0,-1);
//fprintf(stderr,"%3d: $%04x\n",scanline,RefreshAddr);
scanline++;
//PPU_hook(0,-1);
//fprintf(stderr,"%3d: $%04x\n",scanline,RefreshAddr);
scanline++;
- ResetRL();
+ if (scanline<240)
+ ResetRL();
X6502_Run(16);
}
X6502_Run(16);
}
@@
-1031,7
+1046,7
@@
void CloseGame(void)
if(GameLoaded)
{
if(FCEUGameInfo.type!=GIT_NSF)
if(GameLoaded)
{
if(FCEUGameInfo.type!=GIT_NSF)
- F
lushGameCheats(
);
+ F
CEU_FlushGameCheats(0,0
);
#ifdef NETWORK
if(FSettings.NetworkPlay) KillNetplay();
#endif
#ifdef NETWORK
if(FSettings.NetworkPlay) KillNetplay();
#endif
@@
-1065,6
+1080,7
@@
void ResetGameLoaded(void)
}
char lastLoadedGameName [2048];
}
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 UNIFLoad(const char *name, int fp);
int iNESLoad(const char *name, int fp);
int FDSLoad(const char *name, int fp);
@@
-1076,7
+1092,8
@@
FCEUGI *FCEUI_LoadGame(char *name)
int have_movie = 0;
int fp;
int have_movie = 0;
int fp;
- Exit=1;
+ //Exit=1;
+ LoadGameLastError = 0;
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
@@
-1086,6
+1103,7
@@
FCEUGI *FCEUI_LoadGame(char *name)
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
+ LoadGameLastError = 1;
return 0;
}
return 0;
}
@@
-1098,16
+1116,17
@@
FCEUGI *FCEUI_LoadGame(char *name)
FCEU_fclose(fp);
*p = 0;
fp=FCEU_fopen(name2,"rb");
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");
if (!fp) {
printf("no ROM for movie\n");
+ LoadGameLastError = 2;
return 0;
}
have_movie = 1;
}
}
return 0;
}
have_movie = 1;
}
}
- strcpy(lastLoadedGameName, name2);
-
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
@@
-1120,6
+1139,8
@@
FCEUGI *FCEUI_LoadGame(char *name)
FCEU_PrintError("An error occurred while loading the file.");
FCEU_fclose(fp);
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:
return 0;
endlseq:
@@
-1138,8
+1159,8
@@
FCEUGI *FCEUI_LoadGame(char *name)
SaveStateRefresh();
if(FCEUGameInfo.type!=GIT_NSF)
{
SaveStateRefresh();
if(FCEUGameInfo.type!=GIT_NSF)
{
-
LoadGamePalette();
-
LoadGameCheats(
);
+
FCEU_
LoadGamePalette();
+
FCEU_LoadGameCheats(0
);
}
FCEU_ResetPalette();
}
FCEU_ResetPalette();
@@
-1147,6
+1168,9
@@
FCEUGI *FCEUI_LoadGame(char *name)
if (have_movie)
FCEUI_LoadMovie(name, 1);
if (have_movie)
FCEUI_LoadMovie(name, 1);
+
+ strcpy(lastLoadedGameName, name2);
+
return(&FCEUGameInfo);
}
return(&FCEUGameInfo);
}
@@
-1174,7
+1198,7
@@
void FCEU_ResetVidSys(void)
FSettings.FirstSLine=FSettings.UsrFirstSLine[0];
FSettings.LastSLine=FSettings.UsrLastSLine[0];
}
FSettings.FirstSLine=FSettings.UsrFirstSLine[0];
FSettings.LastSLine=FSettings.UsrLastSLine[0];
}
- printf("PAL = %i\n", PAL);
+ printf("
ResetVidSys:
PAL = %i\n", PAL);
SetSoundVariables();
}
SetSoundVariables();
}
@@
-1186,14
+1210,17
@@
int FCEUI_Initialize(void)
FSettings.UsrFirstSLine[0]=8;
FSettings.UsrFirstSLine[1]=0;
FSettings.UsrLastSLine[0]=FSettings.UsrLastSLine[1]=239;
FSettings.UsrFirstSLine[0]=8;
FSettings.UsrFirstSLine[1]=0;
FSettings.UsrLastSLine[0]=FSettings.UsrLastSLine[1]=239;
- FSettings.SoundVolume=
65535; // 100%
+ FSettings.SoundVolume=
100;
return 1;
}
return 1;
}
+void MMC5_hb(int); /* Ugh ugh ugh. */
static INLINE void Thingo(void)
{
Loop6502();
static INLINE void Thingo(void)
{
Loop6502();
+ if(MMC5Hack && (ScreenON || SpriteON)) MMC5_hb(scanline);
+
// check: Battletoads & Double Dragon
if(tosprite>=256)
{
// check: Battletoads & Double Dragon
if(tosprite>=256)
{
@@
-1215,21
+1242,20
@@
void EmLoop(void)
{
for(;;)
{
{
for(;;)
{
+ int x;
uint32 scanlines_per_frame = PAL ? 312 : 262;
UpdateInput();
uint32 scanlines_per_frame = PAL ? 312 : 262;
UpdateInput();
- ApplyPeriodicCheats();
+
FCEU_
ApplyPeriodicCheats();
// FCEUPPU_Loop:
if(ppudead) /* Needed for Knight Rider, possibly others. */
{
// FCEUPPU_Loop:
if(ppudead) /* Needed for Knight Rider, possibly others. */
{
-
memset(XBuf, 0x80, 256
*240);
+
//memset(XBuf, 0, 320
*240);
X6502_Run(scanlines_per_frame*(256+85));
ppudead--;
goto update;
}
X6502_Run(scanlines_per_frame*(256+85));
ppudead--;
goto update;
}
- //extern int asdc;
- //printf("asdc: %i\n", asdc);
- //asdc=0;
+
X6502_Run(256+85);
PPU[2]|=0x80;
X6502_Run(256+85);
PPU[2]|=0x80;
@@
-1242,7
+1268,7
@@
void EmLoop(void)
of this delay.
*/
if(FCEUGameInfo.type==GIT_NSF)
of this delay.
*/
if(FCEUGameInfo.type==GIT_NSF)
-
TriggerNMINSF
();
+
DoNSFFrame
();
else if(VBlankON)
TriggerNMI();
else if(VBlankON)
TriggerNMI();
@@
-1255,15
+1281,16
@@
void EmLoop(void)
X6502_Run(256+85);
}
// X6502_Run((scanlines_per_frame-242)*(256+85)-12);
X6502_Run(256+85);
}
// X6502_Run((scanlines_per_frame-242)*(256+85)-12);
-
PPU_status&=0x1f;
PPU_status&=0x1f;
-
X6502_Run(256);
X6502_Run(256);
+
{
if(ScreenON || SpriteON)
{
if(GameHBIRQHook)
GameHBIRQHook();
{
if(ScreenON || SpriteON)
{
if(GameHBIRQHook)
GameHBIRQHook();
+ if(PPU_hook)
+ for(x=0;x<42;x++) {PPU_hook(0x2000); PPU_hook(0);} // ugh
if(GameHBIRQHook2)
GameHBIRQHook2();
}
if(GameHBIRQHook2)
GameHBIRQHook2();
}
@@
-1283,7
+1310,9
@@
void EmLoop(void)
if(FCEUGameInfo.type==GIT_NSF)
{
if(FCEUGameInfo.type==GIT_NSF)
{
- X6502_Run((256+85)*240);
+ // run scanlines for asm core to fuction
+ for(scanline=0;scanline<240;scanline++)
+ X6502_Run(256+85);
}
else
{
}
else
{
@@
-1296,6
+1325,7
@@
void EmLoop(void)
deempcnt[deemp]++;
Thingo();
}
deempcnt[deemp]++;
Thingo();
}
+ if(MMC5Hack && (ScreenON || SpriteON)) MMC5_hb(scanline);
for(x=1,max=0,maxref=0;x<7;x++)
{
if(deempcnt[x]>max)
for(x=1,max=0,maxref=0;x<7;x++)
{
if(deempcnt[x]>max)
@@
-1305,8
+1335,6
@@
void EmLoop(void)
}
deempcnt[x]=0;
}
}
deempcnt[x]=0;
}
- //FCEU_DispMessage("%2x:%2x:%2x:%2x:%2x:%2x:%2x:%2x %d",deempcnt[0],deempcnt[1],deempcnt[2],deempcnt[3],deempcnt[4],deempcnt[5],deempcnt[6],deempcnt[7],maxref);
- //memset(deempcnt,0,sizeof(deempcnt));
SetNESDeemph(maxref,0);
}
SetNESDeemph(maxref,0);
}
@@
-1336,7
+1364,7
@@
update:
if(Exit)
{
if(Exit)
{
- CloseGame();
+
//
CloseGame();
break;
}
break;
}
@@
-1401,13
+1429,25
@@
static void PowerPPU(void)
void ResetNES(void)
{
void ResetNES(void)
{
- if(!GameLoaded
|| (FCEUGameInfo.type==GIT_NSF)
) return;
+ if(!GameLoaded) return;
GameInterface(GI_RESETM2);
ResetSound();
ResetPPU();
X6502_Reset();
}
GameInterface(GI_RESETM2);
ResetSound();
ResetPPU();
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;
void PowerNES(void)
{
if(!GameLoaded) return;
@@
-1417,12
+1457,20
@@
void PowerNES(void)
GeniePower();
GeniePower();
+#ifndef DEBUG_ASM_6502
+ FCEU_MemoryRand(RAM,0x800);
+#else
memset(RAM,0x00,0x800);
memset(RAM,0x00,0x800);
+#endif
ResetMapping();
GameInterface(GI_POWER);
PowerSound();
PowerPPU();
timestampbase=0;
ResetMapping();
GameInterface(GI_POWER);
PowerSound();
PowerPPU();
timestampbase=0;
+#ifdef ASM_6502
+ if (geniestage)
+ GenieSetPages(0);
+#endif
X6502_Power();
}
X6502_Power();
}