mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 06:47:45 -04:00
continuing input framework integration
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@631 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
54563d7189
commit
fce20e73e7
13 changed files with 252 additions and 457 deletions
|
@ -15,7 +15,11 @@
|
|||
#define PBTN_L GP2X_L
|
||||
#define PBTN_R GP2X_R
|
||||
|
||||
int wait_for_input(int interesting);
|
||||
/* menu nav */
|
||||
#define PBTN_MOK GP2X_B
|
||||
#define PBTN_MBACK GP2X_X
|
||||
#define PBTN_MENU GP2X_SELECT
|
||||
|
||||
void gp2x_pd_clone_buffer2(void);
|
||||
void menu_darken_bg(void *dst, int pixels, int darker);
|
||||
void menu_flip(void);
|
||||
|
@ -24,10 +28,6 @@ void menu_flip(void);
|
|||
#define SCREEN_HEIGHT 240
|
||||
#define SCREEN_BUFFER gp2x_screen
|
||||
|
||||
#define read_buttons(which) \
|
||||
wait_for_input(which)
|
||||
#define read_buttons_async(which) \
|
||||
(gp2x_joystick_read(0) & (which))
|
||||
#define menu_draw_begin() \
|
||||
gp2x_pd_clone_buffer2()
|
||||
#define clear_screen() \
|
||||
|
@ -48,7 +48,6 @@ void menu_flip(void);
|
|||
#define PBTN_WEST PBTN_REW
|
||||
#define PBTN_EAST PBTN_FWD
|
||||
|
||||
unsigned long wait_for_input(unsigned int interesting);
|
||||
void menu_draw_begin(int use_bgbuff);
|
||||
void menu_darken_bg(void *dst, const void *src, int pixels, int darker);
|
||||
void menu_draw_end(void);
|
||||
|
@ -59,9 +58,6 @@ void menu_draw_end(void);
|
|||
extern void *menu_screen;
|
||||
extern void *giz_screen;
|
||||
|
||||
#define read_buttons(which) \
|
||||
wait_for_input(which)
|
||||
#define read_buttons_async(which) 0
|
||||
#define menu_draw_begin() \
|
||||
menu_draw_begin(1)
|
||||
#define clear_screen() \
|
||||
|
@ -80,7 +76,6 @@ extern void *giz_screen;
|
|||
#define PBTN_WEST PBTN_SQUARE
|
||||
#define PBTN_EAST PBTN_CIRCLE
|
||||
|
||||
unsigned long wait_for_input(unsigned int interesting, int is_key_config);
|
||||
void menu_draw_begin(void);
|
||||
void menu_darken_bg(void *dst, const void *src, int pixels, int darker);
|
||||
void menu_draw_end(void);
|
||||
|
@ -89,10 +84,6 @@ void menu_draw_end(void);
|
|||
#define SCREEN_HEIGHT 272
|
||||
#define SCREEN_BUFFER psp_screen
|
||||
|
||||
#define read_buttons(which) \
|
||||
wait_for_input(which, 0)
|
||||
#define read_buttons_async(which) \
|
||||
(psp_pad_read(0) & (which))
|
||||
#define clear_screen() \
|
||||
memset(SCREEN_BUFFER, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2)
|
||||
#define darken_screen() \
|
||||
|
@ -102,10 +93,6 @@ void menu_draw_end(void);
|
|||
|
||||
#elif defined(PANDORA)
|
||||
|
||||
// TODO
|
||||
|
||||
#include "../gp2x/gp2x.h"
|
||||
|
||||
#define PBTN_UP (1 << 0)
|
||||
#define PBTN_DOWN (1 << 1)
|
||||
#define PBTN_LEFT (1 << 2)
|
||||
|
@ -118,19 +105,21 @@ void menu_draw_end(void);
|
|||
#define PBTN_L (1 << 8)
|
||||
#define PBTN_R (1 << 9)
|
||||
|
||||
unsigned long wait_for_input(unsigned long interesting);
|
||||
/* menu nav */
|
||||
#define PBTN_MOK PBTN_EAST
|
||||
#define PBTN_MBACK PBTN_SOUTH
|
||||
#define PBTN_MENU (1 << 10)
|
||||
|
||||
void gp2x_pd_clone_buffer2(void);
|
||||
void menu_darken_bg(void *dst, int pixels, int darker);
|
||||
void menu_flip(void);
|
||||
|
||||
extern void *gp2x_screen;
|
||||
|
||||
#define SCREEN_WIDTH 800
|
||||
#define SCREEN_HEIGHT 480
|
||||
#define SCREEN_BUFFER gp2x_screen
|
||||
|
||||
#define read_buttons(which) \
|
||||
wait_for_input(which)
|
||||
#define read_buttons_async(which) \
|
||||
(gp2x_joystick_read(0) & (which))
|
||||
#define menu_draw_begin() \
|
||||
gp2x_pd_clone_buffer2()
|
||||
#define clear_screen() \
|
||||
|
|
|
@ -209,16 +209,6 @@ static void custom_write(FILE *f, const menu_entry *me, int no_def)
|
|||
}
|
||||
|
||||
|
||||
#if PLAT_HAVE_JOY
|
||||
static const char *joyKeyNames[32] =
|
||||
{
|
||||
"UP", "DOWN", "LEFT", "RIGHT", "b1", "b2", "b3", "b4",
|
||||
"b5", "b6", "b7", "b8", "b9", "b10", "b11", "b12",
|
||||
"b13", "b14", "b15", "b16", "b17", "b19", "b19", "b20",
|
||||
"b21", "b22", "b23", "b24", "b25", "b26", "b27", "b28"
|
||||
};
|
||||
#endif
|
||||
|
||||
static void keys_write(FILE *fn, const char *bind_str, int dev_id, const int *binds, int no_defaults)
|
||||
{
|
||||
char act[48];
|
||||
|
@ -401,7 +391,7 @@ write:
|
|||
for (t = 0; t < IN_MAX_DEVS; t++)
|
||||
{
|
||||
const int *binds = in_get_dev_binds(t);
|
||||
const char *name = in_get_dev_name(t);
|
||||
const char *name = in_get_dev_name(t, 0);
|
||||
if (binds == NULL || name == NULL)
|
||||
continue;
|
||||
|
||||
|
@ -412,7 +402,7 @@ write:
|
|||
for (t = 0; t < IN_MAX_DEVS; t++)
|
||||
{
|
||||
const int *binds = in_get_dev_binds(t);
|
||||
const char *name = in_get_dev_name(t);
|
||||
const char *name = in_get_dev_name(t, 0);
|
||||
char strbind[16];
|
||||
int count;
|
||||
|
||||
|
@ -426,17 +416,6 @@ write:
|
|||
keys_write(fn, strbind, t, binds, no_defaults);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* old stuff */
|
||||
keys_write(fn, "bind", currentConfig.KeyBinds, defaultConfig.KeyBinds, keyNames, PLAT_MAX_KEYS, no_defaults);
|
||||
#if PLAT_HAVE_JOY
|
||||
keys_write(fn, "bind_joy0", currentConfig.JoyBinds[0], defaultConfig.JoyBinds[0], joyKeyNames, 32, 1);
|
||||
keys_write(fn, "bind_joy1", currentConfig.JoyBinds[1], defaultConfig.JoyBinds[1], joyKeyNames, 32, 1);
|
||||
keys_write(fn, "bind_joy2", currentConfig.JoyBinds[2], defaultConfig.JoyBinds[2], joyKeyNames, 32, 1);
|
||||
keys_write(fn, "bind_joy3", currentConfig.JoyBinds[3], defaultConfig.JoyBinds[3], joyKeyNames, 32, 1);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef PSP
|
||||
if (section == NULL)
|
||||
fprintf(fn, "Sound Volume = %i" NL, currentConfig.volume);
|
||||
|
@ -771,42 +750,6 @@ static void keys_parse(const char *key, const char *val, int dev_id)
|
|||
}
|
||||
|
||||
in_config_bind_key(dev_id, key, binds);
|
||||
/*
|
||||
for (t = 0; t < 32; t++)
|
||||
{
|
||||
if (names[t] && strcmp(names[t], var) == 0) break;
|
||||
}
|
||||
if (t == 32)
|
||||
{
|
||||
int len = strlen(var);
|
||||
if (len == 1) t = var[0];
|
||||
else if (len >= 4 && var[0] == '\\' && var[1] == 'x') {
|
||||
char *p;
|
||||
t = (int)strtoul(var + 2, &p, 16);
|
||||
if (*p != 0) t = max_keys; // parse failed
|
||||
}
|
||||
else
|
||||
t = max_keys; // invalid
|
||||
}
|
||||
if (t < 0 || t >= max_keys) {
|
||||
lprintf("unhandled bind \"%s\"\n", var);
|
||||
return;
|
||||
}
|
||||
|
||||
// unbind old, but only when key is first encountered
|
||||
if (t < 32 && binds == currentConfig.KeyBinds && !(keys_encountered & (1<<t))) {
|
||||
binds[t] = 0;
|
||||
keys_encountered |= 1<<t;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
#define try_joy_parse(num) { \
|
||||
if (strncasecmp(var, "bind_joy"#num " ", 10) == 0) { \
|
||||
keys_parse(var + 10, val, currentConfig.JoyBinds[num], joyKeyNames, 32); \
|
||||
return; \
|
||||
} \
|
||||
}
|
||||
|
||||
static int get_numvar_num(const char *var)
|
||||
|
@ -846,7 +789,7 @@ static void parse(const char *var, const char *val)
|
|||
if (num >= 0 && num < IN_MAX_DEVS)
|
||||
input_dev_map[num] = in_config_parse_dev(val);
|
||||
else
|
||||
printf("failed to parse: %s\n", var);
|
||||
lprintf("config: failed to parse: %s\n", var);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -855,13 +798,13 @@ static void parse(const char *var, const char *val)
|
|||
const char *p = var + 4;
|
||||
int num = get_numvar_num(p);
|
||||
if (num < 0 || num >= IN_MAX_DEVS) {
|
||||
printf("failed to parse: %s\n", var);
|
||||
lprintf("config: failed to parse: %s\n", var);
|
||||
return;
|
||||
}
|
||||
|
||||
num = input_dev_map[num];
|
||||
if (num < 0 || num >= IN_MAX_DEVS) {
|
||||
printf("invalid device id: %s\n", var);
|
||||
lprintf("config: invalid device id: %s\n", var);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -871,13 +814,6 @@ static void parse(const char *var, const char *val)
|
|||
return;
|
||||
}
|
||||
|
||||
#if 0//PLAT_HAVE_JOY
|
||||
try_joy_parse(0)
|
||||
try_joy_parse(1)
|
||||
try_joy_parse(2)
|
||||
try_joy_parse(3)
|
||||
#endif
|
||||
|
||||
for (t = 0; t < sizeof(cfg_opts) / sizeof(cfg_opts[0]) && ret == 0; t++)
|
||||
{
|
||||
me = cfg_opts[t];
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "input.h"
|
||||
#include "../linux/in_evdev.h"
|
||||
|
||||
|
@ -195,7 +196,7 @@ void in_set_blocking(int is_blocking)
|
|||
|
||||
menu_key_state = 0;
|
||||
/* flush events */
|
||||
in_update_keycode(NULL, NULL, 1);
|
||||
in_update_keycode(NULL, NULL, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -204,7 +205,7 @@ void in_set_blocking(int is_blocking)
|
|||
*/
|
||||
int in_update_keycode(int *dev_id_out, int *is_down_out, int timeout_ms)
|
||||
{
|
||||
int result = 0, dev_id, is_down, result_menu;
|
||||
int result = 0, dev_id = 0, is_down, result_menu;
|
||||
#ifdef IN_EVDEV
|
||||
void **data;
|
||||
int i, id = 0, count = 0;
|
||||
|
@ -229,7 +230,7 @@ int in_update_keycode(int *dev_id_out, int *is_down_out, int timeout_ms)
|
|||
#endif
|
||||
|
||||
/* keep track of menu key state, to allow mixing
|
||||
* in_update_keycode() and in_update_menu() calls */
|
||||
* in_update_keycode() and in_menu_wait_any() calls */
|
||||
result_menu = DRV(in_devices[dev_id].drv_id).menu_translate(result);
|
||||
if (result_menu != 0) {
|
||||
if (is_down)
|
||||
|
@ -245,10 +246,8 @@ int in_update_keycode(int *dev_id_out, int *is_down_out, int timeout_ms)
|
|||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* same as above, only return bitfield of BTN_*
|
||||
*/
|
||||
int in_update_menu(int timeout_ms)
|
||||
/* same as above, only return bitfield of PBTN_* */
|
||||
int in_menu_wait_any(int timeout_ms)
|
||||
{
|
||||
int keys_old = menu_key_state;
|
||||
|
||||
|
@ -259,7 +258,7 @@ int in_update_menu(int timeout_ms)
|
|||
code = in_update_keycode(&dev_id, &is_down, timeout_ms);
|
||||
code = DRV(in_devices[dev_id].drv_id).menu_translate(code);
|
||||
|
||||
if (timeout_ms != 0)
|
||||
if (timeout_ms >= 0)
|
||||
break;
|
||||
if (code == 0)
|
||||
continue;
|
||||
|
@ -270,6 +269,45 @@ int in_update_menu(int timeout_ms)
|
|||
return menu_key_state;
|
||||
}
|
||||
|
||||
/* wait for menu input, do autorepeat */
|
||||
int in_menu_wait(int interesting)
|
||||
{
|
||||
static int inp_prev = 0;
|
||||
static int repeats = 0, wait = 20;
|
||||
int ret = 0, release = 0, i;
|
||||
|
||||
if (repeats == 2) wait = 3;
|
||||
else if (repeats == 4) wait = 2;
|
||||
else if (repeats == 6) wait = 1;
|
||||
|
||||
for (i = 0; i < wait; i++) {
|
||||
ret = in_menu_wait_any(30);
|
||||
if (ret != inp_prev) break;
|
||||
if (i == 0) repeats++;
|
||||
}
|
||||
|
||||
while (!(ret & interesting)) {
|
||||
ret = in_menu_wait_any(-1);
|
||||
release = 1;
|
||||
}
|
||||
|
||||
if (release || ret != inp_prev) {
|
||||
repeats = 0;
|
||||
wait = 20;
|
||||
}
|
||||
if (wait > 6 && (ret & (PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT)))
|
||||
wait = 6;
|
||||
inp_prev = ret;
|
||||
|
||||
// we don't need diagonals in menus
|
||||
if ((ret & PBTN_UP) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret & PBTN_UP) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
if ((ret & PBTN_DOWN) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret & PBTN_DOWN) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const int *in_get_dev_binds(int dev_id)
|
||||
{
|
||||
if (dev_id < 0 || dev_id >= IN_MAX_DEVS)
|
||||
|
@ -297,11 +335,13 @@ int in_get_dev_bind_count(int dev_id)
|
|||
return in_bind_count(in_devices[dev_id].drv_id);
|
||||
}
|
||||
|
||||
const char *in_get_dev_name(int dev_id)
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active)
|
||||
{
|
||||
if (dev_id < 0 || dev_id >= IN_MAX_DEVS)
|
||||
return NULL;
|
||||
|
||||
if (must_be_active && !in_devices[dev_id].probed)
|
||||
return NULL;
|
||||
return in_devices[dev_id].name;
|
||||
}
|
||||
|
||||
|
@ -580,7 +620,7 @@ int main(void)
|
|||
}
|
||||
#else
|
||||
while (1) {
|
||||
ret = in_update_menu();
|
||||
ret = in_menu_wait_any();
|
||||
printf("%08x\n", ret);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -28,7 +28,8 @@ void in_probe(void);
|
|||
int in_update(void);
|
||||
void in_set_blocking(int is_blocking);
|
||||
int in_update_keycode(int *dev_id, int *is_down, int timeout_ms);
|
||||
int in_update_menu(int timeout_ms);
|
||||
int in_menu_wait_any(int timeout_ms);
|
||||
int in_menu_wait(int interesting);
|
||||
int in_get_dev_bind_count(int dev_id);
|
||||
void in_config_start(void);
|
||||
int in_config_parse_dev(const char *dev_name);
|
||||
|
@ -39,5 +40,5 @@ void in_debug_dump(void);
|
|||
|
||||
const int *in_get_dev_binds(int dev_id);
|
||||
const int *in_get_dev_def_binds(int dev_id);
|
||||
const char *in_get_dev_name(int dev_id);
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active);
|
||||
const char *in_get_key_name(int dev_id, int keycode);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "readpng.h"
|
||||
#include "lprintf.h"
|
||||
#include "common.h"
|
||||
#include "input.h"
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
@ -350,7 +351,7 @@ static void mplayer_loop(void)
|
|||
while (1)
|
||||
{
|
||||
PDebugZ80Frame();
|
||||
if (read_buttons_async(PBTN_NORTH)) break;
|
||||
if (in_menu_wait_any(0) & PBTN_NORTH) break;
|
||||
emu_waitSound();
|
||||
}
|
||||
|
||||
|
@ -429,8 +430,8 @@ void debug_menu_loop(void)
|
|||
}
|
||||
menu_draw_end();
|
||||
|
||||
inp = read_buttons(PBTN_EAST|PBTN_SOUTH|PBTN_WEST|PBTN_NORTH|PBTN_L|PBTN_R|PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT);
|
||||
if (inp & PBTN_SOUTH) return;
|
||||
inp = in_menu_wait(PBTN_EAST|PBTN_MBACK|PBTN_WEST|PBTN_NORTH|PBTN_L|PBTN_R|PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT);
|
||||
if (inp & PBTN_MBACK) return;
|
||||
if (inp & PBTN_L) { mode--; if (mode < 0) mode = 3; }
|
||||
if (inp & PBTN_R) { mode++; if (mode > 3) mode = 0; }
|
||||
switch (mode)
|
||||
|
@ -438,13 +439,13 @@ void debug_menu_loop(void)
|
|||
case 0:
|
||||
if (inp & PBTN_EAST) SekStepM68k();
|
||||
if (inp & PBTN_NORTH) {
|
||||
while (inp & PBTN_NORTH) inp = read_buttons_async(PBTN_NORTH);
|
||||
while (inp & PBTN_NORTH) inp = in_menu_wait_any(-1);
|
||||
mplayer_loop();
|
||||
}
|
||||
if ((inp & (PBTN_WEST|PBTN_LEFT)) == (PBTN_WEST|PBTN_LEFT)) {
|
||||
mkdir("dumps", 0777);
|
||||
PDebugDumpMem();
|
||||
while (inp & PBTN_WEST) inp = read_buttons_async(PBTN_WEST);
|
||||
while (inp & PBTN_WEST) inp = in_menu_wait_any(-1);
|
||||
dumped = 1;
|
||||
}
|
||||
break;
|
||||
|
@ -458,7 +459,7 @@ void debug_menu_loop(void)
|
|||
PicoSkipFrame = 1;
|
||||
PicoFrame();
|
||||
PicoSkipFrame = 0;
|
||||
while (inp & PBTN_EAST) inp = read_buttons_async(PBTN_EAST);
|
||||
while (inp & PBTN_EAST) inp = in_menu_wait_any(-1);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
|
|
@ -582,12 +582,8 @@ static void updateKeys(void)
|
|||
keys2 = keys;
|
||||
|
||||
#if 1
|
||||
{
|
||||
/* FIXME: combos */
|
||||
int acts = in_update();
|
||||
int pl = (acts >> 16) & 1;
|
||||
allActions[pl] |= acts;
|
||||
}
|
||||
/* FIXME: combos, player2 */
|
||||
allActions[0] = in_update();
|
||||
#else
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
|
|
284
gp2x/menu.c
284
gp2x/menu.c
|
@ -42,45 +42,6 @@ const char * const keyNames[] = {
|
|||
void menu_darken_bg(void *dst, int pixels, int darker);
|
||||
static void menu_prepare_bg(int use_game_bg);
|
||||
|
||||
/* wait for input, do autorepeat */
|
||||
int wait_for_input(int interesting)
|
||||
{
|
||||
static int inp_prev = 0;
|
||||
static int repeats = 0, wait = 20;
|
||||
int ret, release = 0, i;
|
||||
|
||||
if (repeats == 2) wait = 3;
|
||||
else if (repeats == 4) wait = 2;
|
||||
else if (repeats == 6) wait = 1;
|
||||
|
||||
for (i = 0; i < wait; i++) {
|
||||
ret = in_update_menu(30);
|
||||
if (ret != inp_prev) break;
|
||||
if (i == 0) repeats++;
|
||||
}
|
||||
|
||||
while (!(ret & interesting)) {
|
||||
ret = in_update_menu(0);
|
||||
release = 1;
|
||||
}
|
||||
|
||||
if (release || ret != inp_prev) {
|
||||
repeats = 0;
|
||||
wait = 20;
|
||||
}
|
||||
if (wait > 6 && (ret & (PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT)))
|
||||
wait = 6;
|
||||
inp_prev = ret;
|
||||
|
||||
// we don't need diagonals in menus
|
||||
if ((ret & PBTN_UP) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret & PBTN_UP) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
if ((ret & PBTN_DOWN) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret & PBTN_DOWN) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void menu_flip(void)
|
||||
{
|
||||
gp2x_video_flush_cache();
|
||||
|
@ -247,8 +208,8 @@ static void do_delete(const char *fpath, const char *fname)
|
|||
menu_flip();
|
||||
|
||||
|
||||
while (gp2x_joystick_read(1) & (GP2X_A|GP2X_SELECT)) usleep(50*1000);
|
||||
inp = wait_for_input(GP2X_Y|GP2X_X);
|
||||
while (in_menu_wait_any(50) & (PBTN_WEST|PBTN_MENU));
|
||||
inp = in_menu_wait(GP2X_Y|PBTN_MBACK); /* FIXME */
|
||||
if (inp & GP2X_Y)
|
||||
remove(fpath);
|
||||
}
|
||||
|
@ -298,14 +259,14 @@ rescan:
|
|||
for (;;)
|
||||
{
|
||||
draw_dirlist(curr_path, namelist, n, sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_L|GP2X_R|GP2X_A|GP2X_B|GP2X_X|GP2X_SELECT);
|
||||
if(inp & GP2X_UP ) { sel--; if (sel < 0) sel = n-2; }
|
||||
if(inp & GP2X_DOWN) { sel++; if (sel > n-2) sel = 0; }
|
||||
if(inp & GP2X_LEFT) { sel-=10; if (sel < 0) sel = 0; }
|
||||
if(inp & GP2X_L) { sel-=24; if (sel < 0) sel = 0; }
|
||||
if(inp & GP2X_RIGHT) { sel+=10; if (sel > n-2) sel = n-2; }
|
||||
if(inp & GP2X_R) { sel+=24; if (sel > n-2) sel = n-2; }
|
||||
if ((inp & GP2X_B) || (inp & (GP2X_SELECT|GP2X_A)) == (GP2X_SELECT|GP2X_A)) // enter dir/select || delete
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_WEST|PBTN_MOK|PBTN_MBACK|PBTN_MENU);
|
||||
if(inp & PBTN_UP ) { sel--; if (sel < 0) sel = n-2; }
|
||||
if(inp & PBTN_DOWN) { sel++; if (sel > n-2) sel = 0; }
|
||||
if(inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }
|
||||
if(inp & PBTN_L) { sel-=24; if (sel < 0) sel = 0; }
|
||||
if(inp & PBTN_RIGHT) { sel+=10; if (sel > n-2) sel = n-2; }
|
||||
if(inp & PBTN_R) { sel+=24; if (sel > n-2) sel = n-2; }
|
||||
if ((inp & PBTN_MOK) || (inp & (PBTN_MENU|PBTN_WEST)) == (PBTN_MENU|PBTN_WEST)) // enter dir/select || delete
|
||||
{
|
||||
again:
|
||||
if (namelist[sel+1]->d_type == DT_REG)
|
||||
|
@ -313,7 +274,7 @@ rescan:
|
|||
strcpy(romFileName, curr_path);
|
||||
strcat(romFileName, "/");
|
||||
strcat(romFileName, namelist[sel+1]->d_name);
|
||||
if (inp & GP2X_B) { // return sel
|
||||
if (inp & PBTN_MOK) { // return sel
|
||||
ret = romFileName;
|
||||
break;
|
||||
}
|
||||
|
@ -328,7 +289,7 @@ rescan:
|
|||
{
|
||||
int newlen;
|
||||
char *p, *newdir;
|
||||
if (!(inp & GP2X_B)) continue;
|
||||
if (!(inp & PBTN_MOK)) continue;
|
||||
newlen = strlen(curr_path) + strlen(namelist[sel+1]->d_name) + 2;
|
||||
newdir = malloc(newlen);
|
||||
if (strcmp(namelist[sel+1]->d_name, "..") == 0) {
|
||||
|
@ -367,7 +328,7 @@ rescan:
|
|||
}
|
||||
}
|
||||
}
|
||||
if(inp & GP2X_X) break; // cancel
|
||||
if(inp & PBTN_MBACK) break; // cancel
|
||||
}
|
||||
|
||||
if (n > 0) {
|
||||
|
@ -412,17 +373,17 @@ static void patches_menu_loop(void)
|
|||
for(;;)
|
||||
{
|
||||
draw_patchlist(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_L|GP2X_R|GP2X_B|GP2X_X);
|
||||
if(inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = PicoPatchCount; }
|
||||
if(inp & GP2X_DOWN) { menu_sel++; if (menu_sel > PicoPatchCount) menu_sel = 0; }
|
||||
if(inp &(GP2X_LEFT|GP2X_L)) { menu_sel-=10; if (menu_sel < 0) menu_sel = 0; }
|
||||
if(inp &(GP2X_RIGHT|GP2X_R)) { menu_sel+=10; if (menu_sel > PicoPatchCount) menu_sel = PicoPatchCount; }
|
||||
if(inp & GP2X_B) { // action
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_MOK|PBTN_MBACK);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = PicoPatchCount; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > PicoPatchCount) menu_sel = 0; }
|
||||
if(inp &(PBTN_LEFT|PBTN_L)) { menu_sel-=10; if (menu_sel < 0) menu_sel = 0; }
|
||||
if(inp &(PBTN_RIGHT|PBTN_R)) { menu_sel+=10; if (menu_sel > PicoPatchCount) menu_sel = PicoPatchCount; }
|
||||
if(inp & PBTN_MOK) { // action
|
||||
if (menu_sel < PicoPatchCount)
|
||||
PicoPatches[menu_sel].active = !PicoPatches[menu_sel].active;
|
||||
else return;
|
||||
}
|
||||
if(inp & GP2X_X) return;
|
||||
if(inp & PBTN_MBACK) return;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -532,18 +493,18 @@ static int savestate_menu_loop(int is_loading)
|
|||
for(;;)
|
||||
{
|
||||
draw_savestate_menu(menu_sel, is_loading);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_B|GP2X_X);
|
||||
if(inp & GP2X_UP ) {
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_MOK|PBTN_MBACK);
|
||||
if(inp & PBTN_UP ) {
|
||||
do {
|
||||
menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max;
|
||||
} while (!(state_slot_flags & (1 << menu_sel)) && menu_sel != menu_sel_max && is_loading);
|
||||
}
|
||||
if(inp & GP2X_DOWN) {
|
||||
if(inp & PBTN_DOWN) {
|
||||
do {
|
||||
menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0;
|
||||
} while (!(state_slot_flags & (1 << menu_sel)) && menu_sel != menu_sel_max && is_loading);
|
||||
}
|
||||
if(inp & GP2X_B) { // save/load
|
||||
if(inp & PBTN_MOK) { // save/load
|
||||
if (menu_sel < 10) {
|
||||
state_slot = menu_sel;
|
||||
if (emu_SaveLoadGame(is_loading, 0)) {
|
||||
|
@ -553,26 +514,12 @@ static int savestate_menu_loop(int is_loading)
|
|||
return 0;
|
||||
} else return 1;
|
||||
}
|
||||
if(inp & GP2X_X) return 1;
|
||||
if(inp & PBTN_MBACK) return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// -------------- key config --------------
|
||||
|
||||
static char *usb_joy_key_name(int joy, int num)
|
||||
{
|
||||
static char name[16];
|
||||
switch (num)
|
||||
{
|
||||
case 0: sprintf(name, "Joy%i UP", joy); break;
|
||||
case 1: sprintf(name, "Joy%i DOWN", joy); break;
|
||||
case 2: sprintf(name, "Joy%i LEFT", joy); break;
|
||||
case 3: sprintf(name, "Joy%i RIGHT", joy); break;
|
||||
default:sprintf(name, "Joy%i b%i", joy, num-3); break;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
static char *action_binds(int player_idx, int action_mask)
|
||||
{
|
||||
static char strkeys[32];
|
||||
|
@ -609,33 +556,6 @@ static char *action_binds(int player_idx, int action_mask)
|
|||
d_prev = d;
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
for (i = 0; i < 32; i++) // i is key index
|
||||
{
|
||||
if (currentConfig.KeyBinds[i] & action_mask)
|
||||
{
|
||||
if (player_idx >= 0 && ((currentConfig.KeyBinds[i] >> 16) & 3) != player_idx) continue;
|
||||
if (strkeys[0]) { strcat(strkeys, " + "); strcat(strkeys, keyNames[i]); break; }
|
||||
else strcpy(strkeys, keyNames[i]);
|
||||
}
|
||||
}
|
||||
for (joy = 0; joy < num_of_joys; joy++)
|
||||
{
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
if (currentConfig.JoyBinds[joy][i] & action_mask)
|
||||
{
|
||||
if (player_idx >= 0 && ((currentConfig.JoyBinds[joy][i] >> 16) & 3) != player_idx) continue;
|
||||
if (strkeys[0]) {
|
||||
strcat(strkeys, ", "); strcat(strkeys, usb_joy_key_name(joy + 1, i));
|
||||
break;
|
||||
}
|
||||
else strcpy(strkeys, usb_joy_key_name(joy + 1, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// limit..
|
||||
strkeys[20] = 0;
|
||||
|
@ -737,25 +657,25 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_
|
|||
for (;;)
|
||||
{
|
||||
draw_key_config(opts, opt_cnt, player_idx, sel, 0);
|
||||
mkey = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_SOUTH|PBTN_EAST);
|
||||
mkey = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_MBACK|PBTN_MOK);
|
||||
switch (mkey) {
|
||||
case PBTN_UP: sel--; if (sel < 0) sel = menu_sel_max; continue;
|
||||
case PBTN_DOWN: sel++; if (sel > menu_sel_max) sel = 0; continue;
|
||||
case PBTN_SOUTH:
|
||||
if (sel >= opt_cnt)
|
||||
return;
|
||||
continue;
|
||||
case PBTN_EAST:
|
||||
case PBTN_MBACK: return;
|
||||
case PBTN_MOK:
|
||||
if (sel >= opt_cnt)
|
||||
return;
|
||||
while (in_menu_wait_any(30) & PBTN_MOK);
|
||||
break;
|
||||
default:continue;
|
||||
}
|
||||
|
||||
draw_key_config(opts, opt_cnt, player_idx, sel, 1);
|
||||
//inp = wait_for_input_usbjoy(CONFIGURABLE_KEYS, &joy);
|
||||
for (is_down = 0; is_down == 0; )
|
||||
kc = in_update_keycode(&dev_id, &is_down, 0);
|
||||
|
||||
/* wait for some up event */
|
||||
for (is_down = 1; is_down; ) {
|
||||
kc = in_update_keycode(&dev_id, &is_down, -1);
|
||||
}
|
||||
|
||||
unbind = count_bound_keys(dev_id, opts[sel].mask, player_idx) >= 2;
|
||||
|
||||
|
@ -795,14 +715,16 @@ static void draw_kc_sel(int menu_sel)
|
|||
me_draw(ctrlopt_entries, ctrlopt_entry_count, tl_x, tl_y, NULL, NULL);
|
||||
|
||||
tl_x = 25;
|
||||
text_out16(tl_x, (y=130), "USB joys detected:");
|
||||
if (num_of_joys > 0) {
|
||||
for (i = 0; i < num_of_joys; i++) {
|
||||
strncpy(joyname, joy_name(joys[i]), 33); joyname[33] = 0;
|
||||
text_out16(tl_x, (y+=10), "%i: %s", i+1, joyname);
|
||||
}
|
||||
} else {
|
||||
text_out16(tl_x, (y+=10), "none");
|
||||
text_out16(tl_x, (y=130), "Input devices:");
|
||||
for (i = 0; i < IN_MAX_DEVS && y < 230; i++) {
|
||||
const char *tmp, *name = in_get_dev_name(i, 1);
|
||||
if (name == NULL)
|
||||
continue;
|
||||
tmp = strchr(name, ':');
|
||||
if (tmp != NULL)
|
||||
name = tmp + 1;
|
||||
strncpy(joyname, name, 33); joyname[33] = 0;
|
||||
text_out16(tl_x, (y+=10), "%i: %s", i, joyname);
|
||||
}
|
||||
|
||||
menu_flip();
|
||||
|
@ -839,13 +761,13 @@ static void kc_sel_loop(void)
|
|||
while (1)
|
||||
{
|
||||
draw_kc_sel(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_RIGHT|GP2X_LEFT|GP2X_B|GP2X_X);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_RIGHT|PBTN_LEFT|PBTN_MOK|PBTN_MBACK);
|
||||
selected_id = me_index2id(ctrlopt_entries, CTRLOPT_ENTRY_COUNT, menu_sel);
|
||||
if (inp & (GP2X_LEFT|GP2X_RIGHT)) // multi choise
|
||||
me_process(ctrlopt_entries, CTRLOPT_ENTRY_COUNT, selected_id, (inp&GP2X_RIGHT) ? 1 : 0);
|
||||
if (inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if (inp & GP2X_B) {
|
||||
if (inp & (PBTN_LEFT|PBTN_RIGHT)) // multi choise
|
||||
me_process(ctrlopt_entries, CTRLOPT_ENTRY_COUNT, selected_id, (inp&PBTN_RIGHT) ? 1 : 0);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if (inp & PBTN_MOK) {
|
||||
int is_6button = PicoOpt & POPT_6BTN_PAD;
|
||||
switch (selected_id) {
|
||||
case MA_CTRL_PLAYER1: key_config_loop(me_ctrl_actions, is_6button ? 15 : 11, 0); return;
|
||||
|
@ -856,7 +778,7 @@ static void kc_sel_loop(void)
|
|||
default: return;
|
||||
}
|
||||
}
|
||||
if (inp & GP2X_X) return;
|
||||
if (inp & PBTN_MBACK) return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -957,14 +879,14 @@ static void cd_menu_loop_options(void)
|
|||
for(;;)
|
||||
{
|
||||
draw_cd_menu_options(menu_sel, &bios_names);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_B|GP2X_X|GP2X_A|GP2X_START);
|
||||
if (inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_MOK|PBTN_MBACK|GP2X_START); /* FIXME */
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(cdopt_entries, CDOPT_ENTRY_COUNT, menu_sel);
|
||||
if (inp & (GP2X_LEFT|GP2X_RIGHT)) { // multi choise
|
||||
if (!me_process(cdopt_entries, CDOPT_ENTRY_COUNT, selected_id, (inp&GP2X_RIGHT) ? 1 : 0) &&
|
||||
if (inp & (PBTN_LEFT|PBTN_RIGHT)) { // multi choise
|
||||
if (!me_process(cdopt_entries, CDOPT_ENTRY_COUNT, selected_id, (inp&PBTN_RIGHT) ? 1 : 0) &&
|
||||
selected_id == MA_CDOPT_READAHEAD) {
|
||||
if (inp & GP2X_LEFT) {
|
||||
if (inp & PBTN_LEFT) {
|
||||
PicoCDBuffers >>= 1;
|
||||
if (PicoCDBuffers < 2) PicoCDBuffers = 0;
|
||||
} else {
|
||||
|
@ -974,7 +896,7 @@ static void cd_menu_loop_options(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (inp & GP2X_B) { // toggleable options
|
||||
if (inp & PBTN_MOK) { // toggleable options
|
||||
if (!me_process(cdopt_entries, CDOPT_ENTRY_COUNT, selected_id, 1) &&
|
||||
selected_id == MA_CDOPT_DONE) {
|
||||
return;
|
||||
|
@ -1007,7 +929,7 @@ static void cd_menu_loop_options(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (inp & (GP2X_X|GP2X_A)) return;
|
||||
if (inp & PBTN_MBACK) return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1071,29 +993,28 @@ static void amenu_loop_options(void)
|
|||
for(;;)
|
||||
{
|
||||
draw_amenu_options(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_B|GP2X_X|GP2X_A);
|
||||
if (inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_MOK|PBTN_MBACK);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(opt2_entries, OPT2_ENTRY_COUNT, menu_sel);
|
||||
if (inp & (GP2X_LEFT|GP2X_RIGHT)) { // multi choise
|
||||
if (!me_process(opt2_entries, OPT2_ENTRY_COUNT, selected_id, (inp&GP2X_RIGHT) ? 1 : 0) &&
|
||||
if (inp & (PBTN_LEFT|PBTN_RIGHT)) { // multi choise
|
||||
if (!me_process(opt2_entries, OPT2_ENTRY_COUNT, selected_id, (inp&PBTN_RIGHT) ? 1 : 0) &&
|
||||
selected_id == MA_OPT2_GAMMA) {
|
||||
while ((inp = gp2x_joystick_read(1)) & (GP2X_LEFT|GP2X_RIGHT)) {
|
||||
currentConfig.gamma += (inp & GP2X_LEFT) ? -1 : 1;
|
||||
while ((inp = in_menu_wait_any(20)) & (PBTN_LEFT|PBTN_RIGHT)) {
|
||||
currentConfig.gamma += (inp & PBTN_LEFT) ? -1 : 1;
|
||||
if (currentConfig.gamma < 1) currentConfig.gamma = 1;
|
||||
if (currentConfig.gamma > 300) currentConfig.gamma = 300;
|
||||
draw_amenu_options(menu_sel);
|
||||
usleep(18*1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (inp & GP2X_B) { // toggleable options
|
||||
if (inp & PBTN_MOK) { // toggleable options
|
||||
if (!me_process(opt2_entries, OPT2_ENTRY_COUNT, selected_id, 1) &&
|
||||
selected_id == MA_OPT2_DONE) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (inp & (GP2X_X|GP2X_A)) return;
|
||||
if (inp & PBTN_MBACK) return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1268,15 +1189,15 @@ static int menu_loop_options(void)
|
|||
while (1)
|
||||
{
|
||||
draw_menu_options(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_B|GP2X_X|GP2X_A);
|
||||
if (inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_MOK|PBTN_MBACK);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(opt_entries, OPT_ENTRY_COUNT, menu_sel);
|
||||
if (inp & (GP2X_LEFT|GP2X_RIGHT)) { // multi choice
|
||||
if (!me_process(opt_entries, OPT_ENTRY_COUNT, selected_id, (inp&GP2X_RIGHT) ? 1 : 0)) {
|
||||
if (inp & (PBTN_LEFT|PBTN_RIGHT)) { // multi choice
|
||||
if (!me_process(opt_entries, OPT_ENTRY_COUNT, selected_id, (inp&PBTN_RIGHT) ? 1 : 0)) {
|
||||
switch (selected_id) {
|
||||
case MA_OPT_RENDERER:
|
||||
if (inp & GP2X_LEFT) {
|
||||
if (inp & PBTN_LEFT) {
|
||||
if (PicoOpt&0x10) PicoOpt&= ~0x10;
|
||||
else if (!(currentConfig.EmuOpt &0x80))currentConfig.EmuOpt |= 0x80;
|
||||
else if ( currentConfig.EmuOpt &0x80) break;
|
||||
|
@ -1287,18 +1208,18 @@ static int menu_loop_options(void)
|
|||
}
|
||||
break;
|
||||
case MA_OPT_SOUND_QUALITY:
|
||||
if ((inp & GP2X_RIGHT) && PsndRate == 44100 && !(PicoOpt&0x08)) {
|
||||
if ((inp & PBTN_RIGHT) && PsndRate == 44100 && !(PicoOpt&0x08)) {
|
||||
PsndRate = 8000; PicoOpt|= 0x08;
|
||||
} else if ((inp & GP2X_LEFT) && PsndRate == 8000 && (PicoOpt&0x08)) {
|
||||
} else if ((inp & PBTN_LEFT) && PsndRate == 8000 && (PicoOpt&0x08)) {
|
||||
PsndRate = 44100; PicoOpt&=~0x08;
|
||||
} else PsndRate = sndrate_prevnext(PsndRate, inp & GP2X_RIGHT);
|
||||
} else PsndRate = sndrate_prevnext(PsndRate, inp & PBTN_RIGHT);
|
||||
break;
|
||||
case MA_OPT_REGION:
|
||||
region_prevnext(inp & GP2X_RIGHT);
|
||||
region_prevnext(inp & PBTN_RIGHT);
|
||||
break;
|
||||
case MA_OPT_CONFIRM_STATES: {
|
||||
int n = ((currentConfig.EmuOpt>>9)&1) | ((currentConfig.EmuOpt>>10)&2);
|
||||
n += (inp & GP2X_LEFT) ? -1 : 1;
|
||||
n += (inp & PBTN_LEFT) ? -1 : 1;
|
||||
if (n < 0) n = 0; else if (n > 3) n = 3;
|
||||
n |= n << 1; n &= ~2;
|
||||
currentConfig.EmuOpt &= ~0xa00;
|
||||
|
@ -1306,23 +1227,22 @@ static int menu_loop_options(void)
|
|||
break;
|
||||
}
|
||||
case MA_OPT_SAVE_SLOT:
|
||||
if (inp & GP2X_RIGHT) {
|
||||
if (inp & PBTN_RIGHT) {
|
||||
state_slot++; if (state_slot > 9) state_slot = 0;
|
||||
} else {state_slot--; if (state_slot < 0) state_slot = 9;
|
||||
}
|
||||
break;
|
||||
case MA_OPT_CPU_CLOCKS:
|
||||
while ((inp = gp2x_joystick_read(1)) & (GP2X_LEFT|GP2X_RIGHT)) {
|
||||
currentConfig.CPUclock += (inp & GP2X_LEFT) ? -1 : 1;
|
||||
while ((inp = in_menu_wait_any(50)) & (PBTN_LEFT|PBTN_RIGHT)) {
|
||||
currentConfig.CPUclock += (inp & PBTN_LEFT) ? -1 : 1;
|
||||
if (currentConfig.CPUclock < 1) currentConfig.CPUclock = 1;
|
||||
draw_menu_options(menu_sel);
|
||||
usleep(50*1000);
|
||||
}
|
||||
break;
|
||||
case MA_OPT_SAVECFG:
|
||||
case MA_OPT_SAVECFG_GAME:
|
||||
case MA_OPT_LOADCFG:
|
||||
config_slot += (inp&GP2X_RIGHT) ? 1 : -1;
|
||||
config_slot += (inp&PBTN_RIGHT) ? 1 : -1;
|
||||
if (config_slot > 9) config_slot = 0;
|
||||
if (config_slot < 0) config_slot = 9;
|
||||
me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);
|
||||
|
@ -1335,7 +1255,7 @@ static int menu_loop_options(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (inp & GP2X_B) {
|
||||
if (inp & PBTN_MOK) {
|
||||
if (!me_process(opt_entries, OPT_ENTRY_COUNT, selected_id, 1))
|
||||
{
|
||||
switch (selected_id)
|
||||
|
@ -1370,7 +1290,7 @@ static int menu_loop_options(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
if(inp & (GP2X_X|GP2X_A)) {
|
||||
if(inp & PBTN_MBACK) {
|
||||
menu_options_save();
|
||||
return 0; // done (update, no write)
|
||||
}
|
||||
|
@ -1464,28 +1384,28 @@ static void menu_loop_root(void)
|
|||
|
||||
/* make sure action buttons are not pressed on entering menu */
|
||||
draw_menu_root(menu_sel);
|
||||
while (gp2x_joystick_read(1) & (GP2X_B|GP2X_X|GP2X_SELECT)) usleep(50*1000);
|
||||
while (in_menu_wait_any(50) & (PBTN_MOK|PBTN_MBACK|PBTN_MENU));
|
||||
|
||||
for (;;)
|
||||
{
|
||||
draw_menu_root(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_B|GP2X_X|GP2X_SELECT|GP2X_L|GP2X_R);
|
||||
if(inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if((inp & (GP2X_L|GP2X_R)) == (GP2X_L|GP2X_R)) debug_menu_loop();
|
||||
if(inp &(GP2X_SELECT|GP2X_X)){
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_MOK|PBTN_MBACK|PBTN_MENU|PBTN_L|PBTN_R);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if((inp & (PBTN_L|PBTN_R)) == (PBTN_L|PBTN_R)) debug_menu_loop();
|
||||
if(inp &(PBTN_MENU|PBTN_MBACK)){
|
||||
if (rom_loaded) {
|
||||
while (gp2x_joystick_read(1) & (GP2X_SELECT|GP2X_X)) usleep(50*1000); // wait until select is released
|
||||
while (in_menu_wait_any(50) & (PBTN_MENU|PBTN_MBACK)); // wait until select is released
|
||||
engineState = PGS_Running;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(inp & GP2X_B) {
|
||||
if(inp & PBTN_MOK) {
|
||||
switch (me_index2id(main_entries, MAIN_ENTRY_COUNT, menu_sel))
|
||||
{
|
||||
case MA_MAIN_RESUME_GAME:
|
||||
if (rom_loaded) {
|
||||
while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);
|
||||
while (in_menu_wait_any(50) & PBTN_MOK);
|
||||
engineState = PGS_Running;
|
||||
return;
|
||||
}
|
||||
|
@ -1502,7 +1422,7 @@ static void menu_loop_root(void)
|
|||
if (rom_loaded) {
|
||||
if(savestate_menu_loop(1))
|
||||
continue;
|
||||
while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);
|
||||
while (in_menu_wait_any(50) & PBTN_MOK);
|
||||
engineState = PGS_Running;
|
||||
return;
|
||||
}
|
||||
|
@ -1510,7 +1430,7 @@ static void menu_loop_root(void)
|
|||
case MA_MAIN_RESET_GAME:
|
||||
if (rom_loaded) {
|
||||
emu_ResetGame();
|
||||
while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);
|
||||
while (in_menu_wait_any(50) & PBTN_MOK);
|
||||
engineState = PGS_Running;
|
||||
return;
|
||||
}
|
||||
|
@ -1546,7 +1466,7 @@ static void menu_loop_root(void)
|
|||
case MA_MAIN_CREDITS:
|
||||
draw_menu_credits();
|
||||
usleep(500*1000);
|
||||
inp = wait_for_input(GP2X_B|GP2X_X);
|
||||
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK);
|
||||
break;
|
||||
case MA_MAIN_EXIT:
|
||||
engineState = PGS_Quit;
|
||||
|
@ -1676,15 +1596,15 @@ int menu_loop_tray(void)
|
|||
|
||||
/* make sure action buttons are not pressed on entering menu */
|
||||
draw_menu_tray(menu_sel);
|
||||
while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);
|
||||
while (in_menu_wait_any(50) & PBTN_MOK);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
draw_menu_tray(menu_sel);
|
||||
inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_B);
|
||||
if(inp & GP2X_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if(inp & GP2X_B ) {
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_MOK);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if(inp & PBTN_MOK ) {
|
||||
switch (menu_sel) {
|
||||
case 0: // select image
|
||||
selfname = romsel_loop(curr_path);
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#define VERSION "1.51b"
|
||||
#define VERSION "1.52"
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ else
|
|||
use_cyclone = 1
|
||||
endif
|
||||
|
||||
DEFINC = -I../.. -I. -DARM -DPANDORA
|
||||
DEFINC = -I../.. -I. -DARM -DPANDORA -DIN_EVDEV
|
||||
COPT_COMMON = -Wall -Winline -mcpu=cortex-a8 -mtune=cortex-a8 -march=armv7-a -I$(LIBROOT)/include
|
||||
ifeq ($(DEBUG),)
|
||||
COPT_COMMON += -O2 # -ftracer -fstrength-reduce -fomit-frame-pointer -fstrict-aliasing -ffast-math
|
||||
|
@ -57,7 +57,8 @@ OBJS += pandora.o main.o emu.o asm_utils.o platform/gp2x/menu.o
|
|||
# common
|
||||
OBJS += platform/common/emu.o platform/common/menu.o platform/common/fonts.o platform/common/config.o \
|
||||
platform/common/arm_utils.o platform/common/mp3_helix.o platform/common/arm_linux.o \
|
||||
platform/common/readpng.o platform/linux/usbjoy.o platform/linux/sndout_oss.o
|
||||
platform/common/readpng.o platform/common/input.o platform/linux/in_evdev.o \
|
||||
platform/linux/sndout_oss.o
|
||||
|
||||
# Pico
|
||||
ifeq "$(amalgamate)" "1"
|
||||
|
@ -131,7 +132,7 @@ include ../common/common_arm.mak
|
|||
|
||||
PicoDrive : $(OBJS) ../common/helix/$(CROSS)helix-mp3.a
|
||||
@echo ">>>" $@
|
||||
$(CC) -o $@ $(CFLAGS) $^ -lm -Wl,-Map=PicoDrive.map -lpng -L$(LIBROOT)/lib
|
||||
$(CC) -o $@ $(CFLAGS) $^ -lm -Wl,-Map=PicoDrive.map -lpng -L$(LIBROOT)/lib -static
|
||||
ifeq ($(DEBUG),)
|
||||
$(STRIP) $@
|
||||
endif
|
||||
|
|
128
pandora/emu.c
128
pandora/emu.c
|
@ -16,12 +16,13 @@
|
|||
|
||||
#include "../gp2x/emu.h"
|
||||
#include "../gp2x/menu.h"
|
||||
#include "../gp2x/gp2x.h"
|
||||
#include "../common/arm_utils.h"
|
||||
#include "../common/fonts.h"
|
||||
#include "../common/emu.h"
|
||||
#include "../common/config.h"
|
||||
#include "../common/common.h"
|
||||
#include "../linux/usbjoy.h"
|
||||
#include "../common/input.h"
|
||||
#include "../linux/sndout_oss.h"
|
||||
#include "asm_utils.h"
|
||||
|
||||
|
@ -475,6 +476,7 @@ static void emu_msg_tray_open(void)
|
|||
gettimeofday(¬iceMsgTime, 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void RunEventsPico(unsigned int events, unsigned int gp2x_keys)
|
||||
{
|
||||
int ret, px, py, lim_x;
|
||||
|
@ -526,6 +528,7 @@ static void RunEventsPico(unsigned int events, unsigned int gp2x_keys)
|
|||
PicoPicohw.pen_pos[0] += 0x3c;
|
||||
PicoPicohw.pen_pos[1] = pico_inp_mode == 1 ? (0x2f8 + pico_pen_y) : (0x1fc + pico_pen_y);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void update_volume(int has_changed, int is_up)
|
||||
{
|
||||
|
@ -569,6 +572,7 @@ static void RunEvents(unsigned int which)
|
|||
if ( emu_checkSaveFile(state_slot) &&
|
||||
(( (which & 0x1000) && (currentConfig.EmuOpt & 0x800)) || // load
|
||||
(!(which & 0x1000) && (currentConfig.EmuOpt & 0x200))) ) { // save
|
||||
#if 0
|
||||
unsigned long keys;
|
||||
blit("", (which & 0x1000) ? "LOAD STATE? (Y=yes, X=no)" : "OVERWRITE SAVE? (Y=yes, X=no)");
|
||||
while ( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) )
|
||||
|
@ -577,6 +581,7 @@ static void RunEvents(unsigned int which)
|
|||
while ( gp2x_joystick_read(1) & (GP2X_X|GP2X_Y) ) // wait for release
|
||||
usleep(50*1024);
|
||||
clearArea(0);
|
||||
#endif
|
||||
}
|
||||
if (do_it) {
|
||||
osd_text(4, SCREEN_HEIGHT-16, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
||||
|
@ -625,63 +630,11 @@ static void RunEvents(unsigned int which)
|
|||
|
||||
static void updateKeys(void)
|
||||
{
|
||||
unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;
|
||||
unsigned int allActions[2] = { 0, 0 }, events;
|
||||
static unsigned int prevEvents = 0;
|
||||
int joy, i;
|
||||
|
||||
keys = gp2x_joystick_read(0);
|
||||
if (keys & GP2X_SELECT) {
|
||||
engineState = select_exits ? PGS_Quit : PGS_Menu;
|
||||
// wait until select is released, so menu would not resume game
|
||||
while (gp2x_joystick_read(1) & GP2X_SELECT) usleep(50*1000);
|
||||
}
|
||||
|
||||
keys &= CONFIGURABLE_KEYS;
|
||||
keys2 = keys;
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
if (keys2 & (1 << i))
|
||||
{
|
||||
int pl, acts = currentConfig.KeyBinds[i];
|
||||
if (!acts) continue;
|
||||
pl = (acts >> 16) & 1;
|
||||
if (kb_combo_keys & (1 << i))
|
||||
{
|
||||
int u = i+1, acts_c = acts & kb_combo_acts;
|
||||
// let's try to find the other one
|
||||
if (acts_c) {
|
||||
for (; u < 32; u++)
|
||||
if ( (keys2 & (1 << u)) && (currentConfig.KeyBinds[u] & acts_c) ) {
|
||||
allActions[pl] |= acts_c & currentConfig.KeyBinds[u];
|
||||
keys2 &= ~((1 << i) | (1 << u));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// add non-combo actions if combo ones were not found
|
||||
if (!acts_c || u == 32)
|
||||
allActions[pl] |= acts & ~kb_combo_acts;
|
||||
} else {
|
||||
allActions[pl] |= acts;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add joy inputs
|
||||
if (num_of_joys > 0)
|
||||
{
|
||||
usbjoy_update();
|
||||
for (joy = 0; joy < num_of_joys; joy++) {
|
||||
int btns = usbjoy_check2(joy);
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (btns & (1 << i)) {
|
||||
int acts = currentConfig.JoyBinds[joy][i];
|
||||
int pl = (acts >> 16) & 1;
|
||||
allActions[pl] |= acts;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* FIXME: combos, player2 */
|
||||
allActions[0] = in_update();
|
||||
|
||||
PicoPad[0] = allActions[0] & 0xfff;
|
||||
PicoPad[1] = allActions[1] & 0xfff;
|
||||
|
@ -703,8 +656,10 @@ static void updateKeys(void)
|
|||
|
||||
events &= ~prevEvents;
|
||||
|
||||
/*
|
||||
if (PicoAHW == PAHW_PICO)
|
||||
RunEventsPico(events, keys);
|
||||
*/
|
||||
if (events) RunEvents(events);
|
||||
if (movie_data) emu_updateMovie();
|
||||
|
||||
|
@ -785,10 +740,46 @@ static void simpleWait(int thissec, int lim_time)
|
|||
}
|
||||
}
|
||||
|
||||
void emu_startSound(void)
|
||||
{
|
||||
static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;
|
||||
int target_fps = Pico.m.pal ? 50 : 60;
|
||||
|
||||
PsndOut = NULL;
|
||||
|
||||
if (currentConfig.EmuOpt & 4)
|
||||
{
|
||||
int snd_excess_add;
|
||||
if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old)
|
||||
PsndRerate(Pico.m.frame_count ? 1 : 0);
|
||||
|
||||
snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps;
|
||||
printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n",
|
||||
PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal);
|
||||
sndout_oss_start(PsndRate, 16, (PicoOpt&8)>>3);
|
||||
sndout_oss_setvol(currentConfig.volume, currentConfig.volume);
|
||||
PicoWriteSound = updateSound;
|
||||
update_volume(0, 0);
|
||||
memset(sndBuffer, 0, sizeof(sndBuffer));
|
||||
PsndOut = sndBuffer;
|
||||
PsndRate_old = PsndRate;
|
||||
PicoOpt_old = PicoOpt;
|
||||
pal_old = Pico.m.pal;
|
||||
}
|
||||
}
|
||||
|
||||
void emu_endSound(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* wait until we can write more sound */
|
||||
void emu_waitSound(void)
|
||||
{
|
||||
// don't need to do anything, writes will block by themselves
|
||||
}
|
||||
|
||||
void emu_Loop(void)
|
||||
{
|
||||
static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;
|
||||
char fpsbuff[24]; // fps count c string
|
||||
struct timeval tval; // timing
|
||||
int pframes_done, pframes_shown, pthissec; // "period" frames, used for sync
|
||||
|
@ -811,28 +802,7 @@ void emu_Loop(void)
|
|||
target_frametime = 1000000/target_fps;
|
||||
reset_timing = 1;
|
||||
|
||||
// prepare sound stuff
|
||||
if (currentConfig.EmuOpt & 4)
|
||||
{
|
||||
int snd_excess_add;
|
||||
if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old)
|
||||
PsndRerate(Pico.m.frame_count ? 1 : 0);
|
||||
|
||||
snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps;
|
||||
printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n",
|
||||
PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal);
|
||||
sndout_oss_start(PsndRate, 16, (PicoOpt&8)>>3);
|
||||
sndout_oss_setvol(currentConfig.volume, currentConfig.volume);
|
||||
PicoWriteSound = updateSound;
|
||||
update_volume(0, 0);
|
||||
memset(sndBuffer, 0, sizeof(sndBuffer));
|
||||
PsndOut = sndBuffer;
|
||||
PsndRate_old = PsndRate;
|
||||
PicoOpt_old = PicoOpt;
|
||||
pal_old = Pico.m.pal;
|
||||
} else {
|
||||
PsndOut = NULL;
|
||||
}
|
||||
emu_startSound();
|
||||
|
||||
// prepare CD buffer
|
||||
if (PicoAHW & PAHW_MCD) PicoCDBufferInit();
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "../common/menu.h"
|
||||
#include "../common/emu.h"
|
||||
#include "../common/config.h"
|
||||
#include "../common/input.h"
|
||||
#include "../gp2x/emu.h"
|
||||
#include "../gp2x/version.h"
|
||||
|
||||
|
@ -77,10 +78,13 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
g_argv = argv;
|
||||
|
||||
in_init();
|
||||
emu_prepareDefaultConfig();
|
||||
emu_ReadConfig(0, 0);
|
||||
config_readlrom(PicoConfigFile);
|
||||
|
||||
in_probe();
|
||||
in_debug_dump();
|
||||
gp2x_init();
|
||||
emu_Init();
|
||||
menu_init();
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include <errno.h>
|
||||
|
||||
#include "../gp2x/gp2x.h"
|
||||
#include "../linux/usbjoy.h"
|
||||
#include "../linux/sndout_oss.h"
|
||||
#include "../common/arm_linux.h"
|
||||
|
||||
|
@ -87,22 +86,6 @@ void gp2x_pd_clone_buffer2(void)
|
|||
memset(gp2x_screen, 0, 800*480*2);
|
||||
}
|
||||
|
||||
|
||||
unsigned long gp2x_joystick_read(int allow_usb_joy)
|
||||
{
|
||||
unsigned long value = 0;
|
||||
int i;
|
||||
|
||||
if (allow_usb_joy && num_of_joys > 0) {
|
||||
// check the usb joy as well..
|
||||
usbjoy_update();
|
||||
for (i = 0; i < num_of_joys; i++)
|
||||
value |= usbjoy_check(i);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
#if 0
|
||||
static int touchcal[7] = { 6203, 0, -1501397, 0, -4200, 16132680, 65536 };
|
||||
|
@ -180,9 +163,6 @@ void gp2x_init(void)
|
|||
// snd
|
||||
sndout_oss_init();
|
||||
|
||||
/* init usb joys -GnoStiC */
|
||||
usbjoy_init();
|
||||
|
||||
printf("exitting init()\n"); fflush(stdout);
|
||||
}
|
||||
|
||||
|
@ -196,7 +176,6 @@ void gp2x_deinit(void)
|
|||
if (fbdev >= 0) close(fbdev);
|
||||
|
||||
sndout_oss_exit();
|
||||
usbjoy_deinit();
|
||||
|
||||
printf("all done");
|
||||
}
|
||||
|
|
68
psp/menu.c
68
psp/menu.c
|
@ -25,6 +25,7 @@
|
|||
#include "../common/emu.h"
|
||||
#include "../common/readpng.h"
|
||||
#include "../common/lprintf.h"
|
||||
#include "../common/input.h"
|
||||
#include "version.h"
|
||||
|
||||
#include <pico/pico_int.h>
|
||||
|
@ -49,49 +50,6 @@ static void menu_prepare_bg(int use_game_bg, int use_fg);
|
|||
|
||||
static unsigned int inp_prev = 0;
|
||||
|
||||
unsigned long wait_for_input(unsigned int interesting, int is_key_config)
|
||||
{
|
||||
unsigned int ret;
|
||||
static int repeats = 0, wait = 20;
|
||||
int release = 0, count, i;
|
||||
|
||||
if (!is_key_config)
|
||||
interesting |= (interesting & 0xf0) << 24; // also use analog
|
||||
|
||||
if (repeats == 2) wait = 3;
|
||||
else if (repeats == 4) wait = 2;
|
||||
else if (repeats == 6) wait = 1;
|
||||
|
||||
for (i = 0; i < wait && inp_prev == psp_pad_read(1); i++) {
|
||||
if (i == 0) repeats++;
|
||||
psp_msleep(30);
|
||||
}
|
||||
|
||||
for (count = 0; !((ret = psp_pad_read(1)) & interesting) && count < 100; count++) {
|
||||
psp_msleep(50);
|
||||
release = 1;
|
||||
}
|
||||
|
||||
if (release || ret != inp_prev) {
|
||||
repeats = 0;
|
||||
wait = 20;
|
||||
}
|
||||
inp_prev = ret;
|
||||
|
||||
if (!is_key_config)
|
||||
ret |= (ret & 0xf0000000) >> 24; // use analog as d-pad
|
||||
if (wait > 6 && (ret&(PBTN_UP|PBTN_LEFT|PBTN_DOWN|PBTN_RIGHT|PBTN_L|PBTN_R)))
|
||||
wait = 6;
|
||||
|
||||
// we don't need diagonals in menus
|
||||
if ((ret&PBTN_UP) && (ret&PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret&PBTN_UP) && (ret&PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
if ((ret&PBTN_DOWN) && (ret&PBTN_LEFT)) ret &= ~PBTN_LEFT;
|
||||
if ((ret&PBTN_DOWN) && (ret&PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void menu_draw_begin(void)
|
||||
{
|
||||
// short *src = (short *)bg_buffer, *dst = (short *)menu_screen;
|
||||
|
@ -384,7 +342,7 @@ static char *romsel_loop(char *curr_path)
|
|||
for (;;)
|
||||
{
|
||||
draw_dirlist(curr_path, namelist, n, sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if(inp & PBTN_UP ) { sel--; if (sel < 0) sel = n-2; }
|
||||
if(inp & PBTN_DOWN) { sel++; if (sel > n-2) sel = 0; }
|
||||
if(inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }
|
||||
|
@ -469,7 +427,7 @@ static void patches_menu_loop(void)
|
|||
for(;;)
|
||||
{
|
||||
draw_patchlist(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = PicoPatchCount; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > PicoPatchCount) menu_sel = 0; }
|
||||
if(inp &(PBTN_LEFT|PBTN_L)) { menu_sel-=10; if (menu_sel < 0) menu_sel = 0; }
|
||||
|
@ -599,7 +557,7 @@ static int savestate_menu_loop(int is_loading)
|
|||
for(;;)
|
||||
{
|
||||
draw_savestate_menu(menu_sel, is_loading);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if(inp & PBTN_UP ) {
|
||||
do {
|
||||
menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max;
|
||||
|
@ -713,7 +671,7 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_
|
|||
for (;;)
|
||||
{
|
||||
draw_key_config(opts, opt_cnt, player_idx, sel);
|
||||
inp = wait_for_input(CONFIGURABLE_KEYS|PBTN_SELECT, 1);
|
||||
inp = in_menu_wait(CONFIGURABLE_KEYS|PBTN_SELECT, 1);
|
||||
if (!(inp & PBTN_SELECT)) {
|
||||
prev_select = 0;
|
||||
if(inp & PBTN_UP ) { sel--; if (sel < 0) sel = menu_sel_max; continue; }
|
||||
|
@ -795,7 +753,7 @@ static void kc_sel_loop(void)
|
|||
while (1)
|
||||
{
|
||||
draw_kc_sel(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
selected_id = me_index2id(ctrlopt_entries, CTRLOPT_ENTRY_COUNT, menu_sel);
|
||||
if (inp & (PBTN_LEFT|PBTN_RIGHT)) // multi choise
|
||||
me_process(ctrlopt_entries, CTRLOPT_ENTRY_COUNT, selected_id, (inp&PBTN_RIGHT) ? 1 : 0);
|
||||
|
@ -918,7 +876,7 @@ static void cd_menu_loop_options(void)
|
|||
for (;;)
|
||||
{
|
||||
draw_cd_menu_options(menu_sel, &bios_names);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE|PBTN_START, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE|PBTN_START, 0);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(cdopt_entries, CDOPT_ENTRY_COUNT, menu_sel);
|
||||
|
@ -1081,7 +1039,7 @@ static void dispmenu_loop_options(void)
|
|||
for (;;)
|
||||
{
|
||||
draw_dispmenu_options(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(opt3_entries, OPT3_ENTRY_COUNT, menu_sel);
|
||||
|
@ -1195,7 +1153,7 @@ static void amenu_loop_options(void)
|
|||
for(;;)
|
||||
{
|
||||
draw_amenu_options(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(opt2_entries, OPT2_ENTRY_COUNT, menu_sel);
|
||||
|
@ -1375,7 +1333,7 @@ static int menu_loop_options(void)
|
|||
while (1)
|
||||
{
|
||||
draw_menu_options(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_X|PBTN_CIRCLE, 0);
|
||||
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
selected_id = me_index2id(opt_entries, OPT_ENTRY_COUNT, menu_sel);
|
||||
|
@ -1581,7 +1539,7 @@ static void menu_loop_root(void)
|
|||
for (;;)
|
||||
{
|
||||
draw_menu_root(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_X|PBTN_CIRCLE|PBTN_SELECT|PBTN_L|PBTN_R, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_X|PBTN_CIRCLE|PBTN_SELECT|PBTN_L|PBTN_R, 0);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if((inp & (PBTN_L|PBTN_R)) == (PBTN_L|PBTN_R)) debug_menu_loop();
|
||||
|
@ -1661,7 +1619,7 @@ static void menu_loop_root(void)
|
|||
psp_msleep(500);
|
||||
inp = 0;
|
||||
while (!(inp & (PBTN_X|PBTN_CIRCLE)))
|
||||
inp = wait_for_input(PBTN_X|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_X|PBTN_CIRCLE, 0);
|
||||
break;
|
||||
case MA_MAIN_EXIT:
|
||||
engineState = PGS_Quit;
|
||||
|
@ -1794,7 +1752,7 @@ int menu_loop_tray(void)
|
|||
for (;;)
|
||||
{
|
||||
draw_menu_tray(menu_sel);
|
||||
inp = wait_for_input(PBTN_UP|PBTN_DOWN|PBTN_CIRCLE, 0);
|
||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_CIRCLE, 0);
|
||||
if(inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = menu_sel_max; }
|
||||
if(inp & PBTN_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }
|
||||
if(inp & PBTN_CIRCLE) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue