#include "../../state.h"
#include "../../general.h"
+#include "../../input.h"
+#include "../../svga.h"
+#include "../../video.h"
+#include "usbjoy.h"
/* UsrInputType[] is user-specified. InputType[] is current
(game loading can override user settings)
{
int soundvolIndex;
static char soundvolmeter[24];
+ static int prev_snd_on = 0;
+
+ if ((!!soundvolume) ^ prev_snd_on)
+ {
+ FCEUI_Sound(Settings.sound_rate);
+ prev_snd_on = !!soundvolume;
+ }
// draw on screen :D
gp2x_sound_volume(soundvolume, soundvolume);
if (acts & (3 << 30))
{
+ unsigned long keys;
+ int do_it = 1;
if (acts & (1 << 30))
{
- FCEUI_LoadState();
+ if (Settings.sstate_confirm & 2)
+ {
+ FCEU_DispMessage("LOAD STATE? (Y=yes, X=no)");
+ FCEU_PutImage();
+ FCEUD_Update(XBuf+8,NULL,0);
+ while( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) ) usleep(50*1024);
+ if (keys & GP2X_X) do_it = 0;
+ FCEU_CancelDispMessage();
+ }
+ if (do_it) FCEUI_LoadState();
}
else
{
- FCEUI_SaveState();
+ if (Settings.sstate_confirm & 1)
+ {
+ char *fname = FCEU_MakeFName(FCEUMKF_STATE,CurrentState,0);
+ FILE *st=fopen(fname,"rb");
+ free(fname);
+ if (st)
+ {
+ fclose(st);
+ FCEU_DispMessage("OVERWRITE SAVE? (Y=yes, X=no)");
+ FCEU_PutImage();
+ FCEUD_Update(XBuf+8,NULL,0);
+ while( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) ) usleep(50*1024);
+ if (keys & GP2X_X) do_it = 0;
+ FCEU_CancelDispMessage();
+ }
+ }
+ if (do_it) FCEUI_SaveState();
}
+ RefreshThrottleFPS();
}
- else if (acts & (1 << 29))
+ else if (acts & (3 << 28)) // state slot next/prev
{
FILE *st;
char *fname;
- CurrentState++;
+ CurrentState += (acts & (1 << 29)) ? 1 : -1;
if (CurrentState > 9) CurrentState = 0;
+ if (CurrentState < 0) CurrentState = 9;
fname = FCEU_MakeFName(FCEUMKF_STATE,CurrentState,0);
st=fopen(fname,"rb");
FCEU_DispMessage("[%s] State Slot %i", st ? "USED" : "FREE", CurrentState);
if (st) fclose(st);
}
+ else if (acts & (1 << 27)) // FDS insert/eject
+ {
+ if(FCEUGameInfo.type == GIT_FDS)
+ FCEU_DoSimpleCommand(FCEUNPCMD_FDSINSERT);
+ }
+ else if (acts & (1 << 26)) // FDS select
+ {
+ if(FCEUGameInfo.type == GIT_FDS)
+ FCEU_DoSimpleCommand(FCEUNPCMD_FDSSELECT);
+ }
+ else if (acts & (1 << 25)) // VS Unisystem insert coin
+ {
+ if(FCEUGameInfo.type == GIT_VSUNI)
+ FCEU_DoSimpleCommand(FCEUNPCMD_VSUNICOIN);
+ }
+}
+
+
+#define down(b) (keys & GP2X_##b)
+static void do_fake_mouse(unsigned long keys)
+{
+ static int x=256/2, y=240/2;
+ int speed = 3;
+
+ if (down(A)) speed = 1;
+ if (down(Y)) speed = 5;
+
+ if (down(LEFT))
+ {
+ x -= speed;
+ if (x < 0) x = 0;
+ }
+ else if (down(RIGHT))
+ {
+ x += speed;
+ if (x > 255) x = 255;
+ }
+
+ if (down(UP))
+ {
+ y -= speed;
+ if (y < 0) y = 0;
+ }
+ else if (down(DOWN))
+ {
+ y += speed;
+ if (y > 239) y = 239;
+ }
+
+ MouseData[0] = x;
+ MouseData[1] = y;
+ MouseData[2] = 0;
+ if (down(B)) MouseData[2] |= 1;
+ if (down(X)) MouseData[2] |= 2;
}
-void FCEUD_UpdateInput(void)
+static void FCEUD_UpdateInput(void)
{
static int volpushed_frames = 0;
- static int turbo_rate_cnt_a = 0, turbo_rate_cnt_b = 0;
+ static int turbo_rate_cnt_a[2] = {0,0}, turbo_rate_cnt_b[2] = {0,0};
unsigned long keys = gp2x_joystick_read(0);
- uint32 all_acts = 0;
+ uint32 all_acts[2] = {0,0};
int i;
- #define down(b) (keys & GP2X_##b)
- if ((down(VOL_DOWN) && down(VOL_UP)) || (keys & (GP2X_L|GP2X_L|GP2X_START)) == (GP2X_L|GP2X_L|GP2X_START))
+ if ((down(VOL_DOWN) && down(VOL_UP)) || (keys & (GP2X_L|GP2X_START)) == (GP2X_L|GP2X_START))
{
Exit = 1;
return;
volpushed_frames = 0;
}
-
JSreturn = 0; // RLDU SEBA
+ if (InputType[1] != SI_GAMEPAD)
+ {
+ /* try to feed fake mouse there */
+ do_fake_mouse(keys);
+ }
+
for (i = 0; i < 32; i++)
{
if (keys & (1 << i))
}
if (u != 32) acts &= combo_acts; // other combo key pressed
else acts &= ~combo_acts;
- all_acts |= acts;
+ all_acts[(acts>>16)&1] |= acts;
}
}
- JSreturn |= all_acts & 0xff;
- if (all_acts & 0x100) { // A turbo
- turbo_rate_cnt_a += Settings.turbo_rate_add;
- JSreturn |= (turbo_rate_cnt_a >> 24) & 1;
+ // add joy inputs
+ if (num_of_joys > 0)
+ {
+ int joy;
+ gp2x_usbjoy_update();
+ for (joy = 0; joy < num_of_joys; joy++) {
+ int keys = gp2x_usbjoy_check2(joy);
+ for (i = 0; i < 32; i++) {
+ if (keys & (1 << i)) {
+ int acts = Settings.JoyBinds[joy][i];
+ all_acts[(acts>>16)&1] |= acts;
+ }
+ }
+ }
+ }
+
+ // player 1
+ JSreturn |= all_acts[0] & 0xff;
+ if (all_acts[0] & 0x100) { // A turbo
+ turbo_rate_cnt_a[0] += Settings.turbo_rate_add;
+ JSreturn |= (turbo_rate_cnt_a[0] >> 24) & 1;
}
- if (all_acts & 0x200) { // B turbo
- turbo_rate_cnt_b += Settings.turbo_rate_add;
- JSreturn |= (turbo_rate_cnt_b >> 23) & 2;
+ if (all_acts[0] & 0x200) { // B turbo
+ turbo_rate_cnt_b[0] += Settings.turbo_rate_add;
+ JSreturn |= (turbo_rate_cnt_b[0] >> 23) & 2;
}
- do_emu_acts(all_acts);
-
-
- //JSreturn=(JS&0xFF000000)|(JS&0xFF)|((JS&0xFF0000)>>8)|((JS&0xFF00)<<8);
-
- // JSreturn=(JSreturn&0xFF000000)|(JSreturn&0xFF)|((JSreturn&0xFF0000)>>8)|((JSreturn&0xFF00)<<8);
- // TODO: make these bindable, use new interface
- /*
- if(gametype==GIT_FDS)
- {
- if ((pad & GP2X_PUSH) && (!(pad & GP2X_SELECT)) && (!(pad & GP2X_L)) && (!(pad & GP2X_R)) && (!(lastpad2 & GP2X_PUSH)))
- {
- DriverInterface(DES_FDSSELECT,0);
- }
- else if ((pad & GP2X_L) && (!(pad & GP2X_SELECT)) && (!(pad & GP2X_PUSH)) && (!(pad & GP2X_R))&& (!(lastpad2 & GP2X_L)))
- {
- DriverInterface(DES_FDSINSERT,0);
- }
- else if ((pad & GP2X_R) && (!(pad & GP2X_SELECT)) && (!(pad & GP2X_L)) && (!(pad & GP2X_PUSH)) && (!(lastpad2 & GP2X_R)))
- {
- DriverInterface(DES_FDSEJECT,0);
- }
- }
- return;
- */
+ // player 2
+ JSreturn |= (all_acts[1] & 0xff) << 16;
+ if (all_acts[1] & 0x100) { // A turbo
+ turbo_rate_cnt_a[1] += Settings.turbo_rate_add;
+ JSreturn |= (turbo_rate_cnt_a[1] >> 8) & 0x10000;
+ }
+ if (all_acts[1] & 0x200) { // B turbo
+ turbo_rate_cnt_b[1] += Settings.turbo_rate_add;
+ JSreturn |= (turbo_rate_cnt_b[1] >> 7) & 0x20000;
+ }
+
+ do_emu_acts(all_acts[0]|all_acts[1]);
}
int x;
int attrib;
+ printf("InitOtherInput: InputType[0]: %i, InputType[1]: %i, InputTypeFC: %i\n",
+ InputType[0], InputType[1], InputTypeFC);
+
for(t=0,x=0;x<2;x++)
{
attrib=0;
}
}
+ combo_acts &= ~0x00030000; // don't take player_id bits
+
// find combo_keys
for (act = 1; act; act <<= 1)
{
}
}
- printf("generated combo_acts: %08x, combo_keys: %08x\n", combo_acts, combo_keys);
+ // printf("generated combo_acts: %08x, combo_keys: %08x\n", combo_acts, combo_keys);
}