#include "svga.h"
#include "input.h"
+#include "state.h"
#include "movie.h"
+#include "fds.h"
+#include "vsuni.h"
#include "dprintf.h"
extern INPUTC *FCEU_InitZapper(int w);
-extern INPUTC *FCEU_InitPowerpad(int w);
+extern INPUTC *FCEU_InitPowerpadA(int w);
extern INPUTC *FCEU_InitArkanoid(int w);
extern INPUTCFC *FCEU_InitArkanoidFC(void);
extern INPUTCFC *FCEU_InitSpaceShadow(void);
extern INPUTCFC *FCEU_InitFKB(void);
static uint8 joy_readbit[2];
-static uint16 joy[4]={0,0,0,0};
-
-extern int coinon;
+static uint8 joy[4]={0,0,0,0};
+static uint8 LastStrobe;
static int FSDisable=0; /* Set to 1 if NES-style four-player adapter is disabled. */
static int JPAttrib[2]={0,0};
static int JPTypeFC=0;
static void *InputDataPtrFC;
-void (*InputScanlineHook)(uint8 *buf, int line);
+void (*InputScanlineHook)(uint8 *bg, uint8 *spr, uint32 linets, int final);
static INPUTC DummyJPort={0,0,0,0,0};
static INPUTC *JPorts[2]={&DummyJPort,&DummyJPort};
static INPUTCFC *FCExp=0;
+/* This function is a quick hack to get the NSF player to use emulated gamepad
+ input.
+*/
+uint8 FCEU_GetJoyJoy(void)
+{
+ return(joy[0]|joy[1]|joy[2]|joy[3]);
+}
+
static uint8 FP_FASTAPASS(1) ReadGPVS(int w)
{
uint8 ret=0;
ret=FCExp->Read(A&1,ret);
ret|=X.DB&0xC0;
- dprintf("JPRead %02x", ret);
+ dprintf("JPRead %i %02x", A&1, ret);
return(ret);
}
if(JPorts[1]->Write)
JPorts[1]->Write(V&1);
- if((PSG[0x16]&1) && (!(V&1)))
+ if((LastStrobe&1) && (!(V&1)))
{
/* This strobe code is just for convenience. If it were
with the code in input / *.c, it would more accurately represent
if(FCExp->Strobe)
FCExp->Strobe();
}
- PSG[0x16]=V;
+ LastStrobe=V&1;
}
static void FP_FASTAPASS(1) StrobeGP(int w)
if(netplay) NetplayUpdate(&joy[0],&joy[1]);
#endif
if (current < 0) FCEUMOV_AddJoy(joy);
- FlushCommandQueue();
+ else framecount++; // for debug
+ //FlushCommandQueue();
}
static DECLFR(VSUNIRead0)
return ret;
}
-static void SLHLHook(uint8 *buf, int line)
+static void SLHLHook(uint8 *bg, uint8 *spr, uint32 linets, int final)
{
int x;
for(x=0;x<2;x++)
if(JPorts[x]->SLHook)
- JPorts[x]->SLHook(x,buf,line);
+ JPorts[x]->SLHook(x,bg,spr,linets,final);
if(FCExp)
if(FCExp->SLHook)
- FCExp->SLHook(buf,line);
+ FCExp->SLHook(bg,spr,linets,final);
}
static void CheckSLHook(void)
break;
case SI_ARKANOID:JPorts[x]=FCEU_InitArkanoid(x);break;
case SI_ZAPPER:JPorts[x]=FCEU_InitZapper(x);break;
- case SI_POWERPAD:JPorts[x]=FCEU_InitPowerpad(x);break;
+ case SI_POWERPADA:JPorts[x]=FCEU_InitPowerpadA(x);break;
case SI_NONE:JPorts[x]=&DummyJPort;break;
}
{
memset(joy_readbit,0,sizeof(joy_readbit));
memset(joy,0,sizeof(joy));
+ LastStrobe=0;
if(FCEUGameInfo.type==GIT_VSUNI)
{
InputDataPtrFC=ptr;
SetInputStuffFC();
}
+
+void FCEU_DoSimpleCommand(int cmd)
+{
+ printf("FCEU_DoSimpleCommand: %i\n", cmd);
+ switch(cmd)
+ {
+ case FCEUNPCMD_FDSINSERT: FCEU_FDSInsert();break;
+ case FCEUNPCMD_FDSSELECT: FCEU_FDSSelect();break;
+// case FCEUNPCMD_FDSEJECT: FCEU_FDSEject();break;
+ case FCEUNPCMD_VSUNICOIN: FCEU_VSUniCoin(); break;
+ case FCEUNPCMD_VSUNIDIP0 ... (FCEUNPCMD_VSUNIDIP0 + 7): FCEU_VSUniToggleDIP(cmd - FCEUNPCMD_VSUNIDIP0);break;
+ case FCEUNPCMD_POWER: PowerNES();break;
+ case FCEUNPCMD_RESET: ResetNES();break;
+ default: printf("FCEU_DoSimpleCommand: can't handle cmd %i\n", cmd); break;
+ }
+}
+
+void FCEU_QSimpleCommand(int cmd)
+{
+// if(FCEUnetplay)
+// FCEUNET_SendCommand(cmd, 0);
+// else
+ {
+ // totally wrong:
+// if(!FCEUMOV_IsPlaying())
+// FCEU_DoSimpleCommand(cmd);
+// else
+// FCEUMOV_AddCommand(cmd);
+
+ FCEU_DoSimpleCommand(cmd);
+// if(FCEUMOV_IsRecording())
+// FCEUMOV_AddCommand(cmd);
+ }
+}
+
+void FCEUI_FDSSelect(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_FDSSELECT);
+}
+
+int FCEUI_FDSInsert(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_FDSINSERT);
+ return(1);
+}
+
+/*
+int FCEUI_FDSEject(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_FDSEJECT);
+ return(1);
+}
+*/
+void FCEUI_VSUniToggleDIP(int w)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_VSUNIDIP0 + w);
+}
+
+void FCEUI_VSUniCoin(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_VSUNICOIN);
+}
+
+void FCEUI_ResetNES(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_RESET);
+}
+
+void FCEUI_PowerNES(void)
+{
+ FCEU_QSimpleCommand(FCEUNPCMD_POWER);
+}
+
+
+
+SFORMAT FCEUCTRL_STATEINFO[]={
+ { joy_readbit, 2, "JYRB"},
+ { joy, 4, "JOYS"},
+ { &LastStrobe, 1, "LSTS"},
+ { 0 }
+};
+
+