#include "fce.h"
#include "ppu098.h"
#include "nsf.h"
-#include "sound.h" // TODO 098?
+#include "sound.h"
#include "memory.h"
#include "cart.h"
#include "video.h"
#include "input.h"
+#ifdef GP2X
+#include "drivers/gp2x/asmutils.h"
+#endif
+
#define Pal (PALRAM)
static void FetchSpriteData098(void);
}
}
-// TODO: make this compatible with the new sound code
-#ifdef ASM_6502
+#if defined(ASM_6502) && !defined(DEBUG_ASM_6502)
static void asmcpu_update(int32 cycles)
{
// some code from x6502.c
{
// FCEU_printf("Trigger NMI, %d, %d\n",timestamp,ppudead);
// TriggerNMI2();
- TriggerNMI();
+ TriggerNMI(); // TODO?
}
PPU[0]=V;
TempAddr&=0xF3FF;
static void ResetRL(uint8 *target)
{
- memset(target,0xFF,256);
+ FCEU_dwmemset(target,0xffffffff,256);
if(InputScanlineHook)
InputScanlineHook(0,0,0,0);
Plinef=target;
void MMC5_hb(int); /* Ugh ugh ugh. */
static void DoLine(void)
{
+#ifndef GP2X
int x;
+#endif
uint8 *target=XBuf+scanline*320+32;
if(MMC5Hack && (ScreenON || SpriteON)) MMC5_hb(scanline);
if(SpriteON)
CopySprites098(target);
+#ifdef GP2X
+ if(ScreenON || SpriteON) // Yes, very el-cheapo.
+ {
+ if(PPU[1]&0x01)
+ block_and(target, 256, 0x30);
+ }
+ if((PPU[1]>>5)==0x7)
+ block_or(target, 256, 0xc0);
+ else if(PPU[1]&0xE0)
+ block_or(target, 256, 0x40);
+ else
+ block_andor(target, 256, 0x3f, 0x80);
+#else
if(ScreenON || SpriteON) // Yes, very el-cheapo.
{
if(PPU[1]&0x01)
else
for(x=63;x>=0;x--)
*(uint32 *)&target[x<<2]=((*(uint32*)&target[x<<2])&0x3f3f3f3f)|0x80808080;
+#endif
sphitx=0x100;
if(ppudead) /* Needed for Knight Rider, possibly others. */
{
//memset(XBuf, 0x80, 256*240);
- X6502_Run(scanlines_per_frame*(256+85));
+ //X6502_Run(scanlines_per_frame*(256+85));
+ int lines;
+ for (lines=scanlines_per_frame;lines;lines--)
+ X6502_Run(256+85);
ppudead--;
}
else
if(VBlankON)
TriggerNMI();
}
- X6502_Run((scanlines_per_frame-242)*(256+85)-12); //-12);
+ // Note: this is needed for asm core
+ {
+ int lines;
+ X6502_Run(256+85-12);
+ for (lines=scanlines_per_frame-242-1;lines;lines--)
+ X6502_Run(256+85);
+ }
PPU_status&=0x1f;
X6502_Run(256);
}
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(skip)
{
- int y;
+ int y, lines;
y=SPRAM[0];
y++;
}
else if(y<240)
{
- X6502_Run((256+85)*y);
+ for (lines=y;lines;lines--)
+ X6502_Run(256+85);
if(SpriteON) PPU_status|=0x40; // Quick and very dirty hack.
- X6502_Run((256+85)*(240-y));
+ for (lines=240-y;lines;lines--)
+ X6502_Run(256+85);
}
else
- X6502_Run((256+85)*240);
+ {
+ for (lines=240;lines;lines--)
+ X6502_Run(256+85);
+ }
}
#endif
else