X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=fce.c;h=a5cc4b0eb6111efe00cdcc5db4d61281a83bb556;hp=d50c201a2c02d7deeefb178db79eb0a025283062;hb=0b65fdb3548fd54670265adfb80706e63da6b641;hpb=ea80a45b1dbd9f2c46567e18a2e18fcbb6e55c8d diff --git a/fce.c b/fce.c index d50c201..a5cc4b0 100644 --- a/fce.c +++ b/fce.c @@ -48,10 +48,15 @@ #include "crc32.h" #include "ppu.h" +#include "palette.h" #include "movie.h" #include "dprintf.h" +#ifdef GP2X +#include "drivers/gp2x/asmutils.h" +#endif + #define Pal (PALRAM) @@ -609,17 +614,24 @@ static void Loop6502(void) 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 @@ -1032,7 +1044,7 @@ void CloseGame(void) if(GameLoaded) { if(FCEUGameInfo.type!=GIT_NSF) - FlushGameCheats(); + FCEU_FlushGameCheats(0,0); #ifdef NETWORK if(FSettings.NetworkPlay) KillNetplay(); #endif @@ -1139,8 +1151,8 @@ FCEUGI *FCEUI_LoadGame(char *name) SaveStateRefresh(); if(FCEUGameInfo.type!=GIT_NSF) { - LoadGamePalette(); - LoadGameCheats(); + FCEU_LoadGamePalette(); + FCEU_LoadGameCheats(0); } FCEU_ResetPalette(); @@ -1175,7 +1187,7 @@ void FCEU_ResetVidSys(void) FSettings.FirstSLine=FSettings.UsrFirstSLine[0]; FSettings.LastSLine=FSettings.UsrLastSLine[0]; } - printf("PAL = %i\n", PAL); + printf("ResetVidSys: PAL = %i\n", PAL); SetSoundVariables(); } @@ -1187,7 +1199,7 @@ int FCEUI_Initialize(void) FSettings.UsrFirstSLine[0]=8; FSettings.UsrFirstSLine[1]=0; FSettings.UsrLastSLine[0]=FSettings.UsrLastSLine[1]=239; - FSettings.SoundVolume=65535; // 100% + FSettings.SoundVolume=100; return 1; } @@ -1222,12 +1234,12 @@ void EmLoop(void) int x; uint32 scanlines_per_frame = PAL ? 312 : 262; UpdateInput(); - ApplyPeriodicCheats(); + FCEU_ApplyPeriodicCheats(); // 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; @@ -1287,39 +1299,10 @@ void EmLoop(void) 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); } - #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; @@ -1435,7 +1418,7 @@ static void PowerPPU(void) void ResetNES(void) { - if(!GameLoaded || (FCEUGameInfo.type==GIT_NSF)) return; + if(!GameLoaded) return; GameInterface(GI_RESETM2); ResetSound(); ResetPPU();