smb 97-98
bm 87-88
kage 83-84
smb 97-98
bm 87-88
kage 83-84
vtoggle=0;
PPU_status&=0x7F;
PPUGenLatch=ret;
vtoggle=0;
PPU_status&=0x7F;
PPUGenLatch=ret;
- dprintf("r [2002] %02x",ret);
+ //dprintf("r [2002] %02x",ret);
{
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();
//PPU_hook(0,-1);
//fprintf(stderr,"%3d: $%04x\n",scanline,RefreshAddr);
scanline++;
//PPU_hook(0,-1);
//fprintf(stderr,"%3d: $%04x\n",scanline,RefreshAddr);
scanline++;
+ if (scanline<240)
+ ResetRL();
+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)
{
uint32 scanlines_per_frame = PAL ? 312 : 262;
UpdateInput();
ApplyPeriodicCheats();
uint32 scanlines_per_frame = PAL ? 312 : 262;
UpdateInput();
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, 0x80, 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;
of this delay.
*/
if(FCEUGameInfo.type==GIT_NSF)
of this delay.
*/
if(FCEUGameInfo.type==GIT_NSF)
else if(VBlankON)
TriggerNMI();
else if(VBlankON)
TriggerNMI();
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);
{
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();
}
{
X6502_Run((256+85)*240);
}
{
X6502_Run((256+85)*240);
}
+ #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
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)
- //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);
}
if(netplay) NetplayUpdate(&joy[0],&joy[1]);
#endif
if (current < 0) FCEUMOV_AddJoy(joy);
if(netplay) NetplayUpdate(&joy[0],&joy[1]);
#endif
if (current < 0) FCEUMOV_AddJoy(joy);
+ else framecount++; // for debug
if(MMC5Hack) C = MMC5SPRVRAMADR(vadr);
else C = VRAMADR(vadr);
dst.ca[0]=C[0];
if(MMC5Hack) C = MMC5SPRVRAMADR(vadr);
else C = VRAMADR(vadr);
dst.ca[0]=C[0];
+ if(nosprites<8)
+ {
+ PPU_hook(0x2000);
+ PPU_hook(vadr);
+ }
dst.x=spr->x;
dst.atr=spr->atr;
dst.x=spr->x;
dst.atr=spr->atr;
+
+ if(nosprites>8) PPU_status|=0x20; /* Handle case when >8 sprites per
+ scanline option is enabled. */
+ else if(PPU_hook)
+ {
+ for(n=0;n<(8-nosprites);n++)
+ {
+ PPU_hook(0x2000);
+ PPU_hook(vofs);
+ }
+ }
+
V=(V&0xC0)>>6;
fcnt=0;
if(V&0x2)
V=(V&0xC0)>>6;
fcnt=0;
if(V&0x2)
fhcnt=fhinc;
X6502_IRQEnd(FCEU_IQFCOUNT);
SIRQStat&=~0x40;
fhcnt=fhinc;
X6502_IRQEnd(FCEU_IQFCOUNT);
SIRQStat&=~0x40;
+ //IRQFrameMode=V; // IRQFrameMode is PSG[0x17] upper bits
}
void SetNESSoundMap(void)
}
void SetNESSoundMap(void)
void FASTAPASS(1) X6502_IRQBegin_c(int w)
{
void FASTAPASS(1) X6502_IRQBegin_c(int w)
{
+ dprintf("IRQB %02x",w);
_IRQlow|=w;
}
void FASTAPASS(1) X6502_IRQEnd_c(int w)
{
_IRQlow|=w;
}
void FASTAPASS(1) X6502_IRQEnd_c(int w)
{
+ dprintf("IRQE %02x",w);