build, odbeta and opendingux cleanup

This commit is contained in:
kub 2023-12-05 22:13:00 +01:00
parent 85174a6d8d
commit 58fc34b1d6
14 changed files with 185 additions and 78 deletions

View file

@ -180,6 +180,7 @@ void pemu_finalize_frame(const char *fps, const char *notice_msg);
void pemu_sound_start(void);
int plat_parse_arg(int argc, char *argv[], int *x);
void plat_early_init(void);
void plat_init(void);
void plat_finish(void);

View file

@ -3,6 +3,7 @@
#include "../libpicofe/input.h"
#include "../libpicofe/in_sdl.h"
#include "../libpicofe/plat.h"
#include "../common/input_pico.h"
#include "../common/plat_sdl.h"
@ -33,7 +34,7 @@ const struct in_default_bind in_sdl_defbinds[] = {
{ 0, 0, 0 }
};
const struct menu_keymap in_sdl_key_map[] = {
const struct menu_keymap _in_sdl_key_map[] = {
{ SDLK_UP, PBTN_UP },
{ SDLK_DOWN, PBTN_DOWN },
{ SDLK_LEFT, PBTN_LEFT },
@ -45,9 +46,10 @@ const struct menu_keymap in_sdl_key_map[] = {
{ SDLK_TAB, PBTN_R },
{ SDLK_BACKSPACE, PBTN_L },
};
const int in_sdl_key_map_sz = sizeof(in_sdl_key_map) / sizeof(in_sdl_key_map[0]);
const int in_sdl_key_map_sz = sizeof(_in_sdl_key_map) / sizeof(_in_sdl_key_map[0]);
const struct menu_keymap *in_sdl_key_map = _in_sdl_key_map;
const struct menu_keymap in_sdl_joy_map[] = {
const struct menu_keymap _in_sdl_joy_map[] = {
{ SDLK_UP, PBTN_UP },
{ SDLK_DOWN, PBTN_DOWN },
{ SDLK_LEFT, PBTN_LEFT },
@ -58,6 +60,11 @@ const struct menu_keymap in_sdl_joy_map[] = {
{ SDLK_WORLD_2, PBTN_MA2 },
{ SDLK_WORLD_3, PBTN_MA3 },
};
const int in_sdl_joy_map_sz = sizeof(in_sdl_joy_map) / sizeof(in_sdl_joy_map[0]);
const int in_sdl_joy_map_sz = sizeof(_in_sdl_joy_map) / sizeof(_in_sdl_joy_map[0]);
const struct menu_keymap *in_sdl_joy_map = _in_sdl_joy_map;
const char * const (*in_sdl_key_names)[SDLK_LAST] = NULL;
const char * const *in_sdl_key_names = NULL;
void plat_target_setup_input(void)
{
}

View file

@ -28,7 +28,7 @@ void parse_cmd_line(int argc, char *argv[])
{
int x, unrecognized = 0;
for (x = 1; x < argc; x++)
for (x = 1; x < argc && !unrecognized; x++)
{
if (argv[x][0] == '-')
{
@ -47,15 +47,13 @@ void parse_cmd_line(int argc, char *argv[])
if (x+2 < argc) { pdb_net_connect(argv[x+1], argv[x+2]); x += 2; }
}
else {
unrecognized = 1;
break;
unrecognized = plat_parse_arg(argc, argv, &x);
}
} else {
FILE *f = fopen(argv[x], "rb");
if (f) {
fclose(f);
rom_fname_reload = argv[x];
engineState = PGS_ReloadRom;
}
else
unrecognized = 1;
@ -95,12 +93,9 @@ int main(int argc, char *argv[])
emu_init();
engineState = PGS_Menu;
engineState = rom_fname_reload ? PGS_ReloadRom : PGS_Menu;
plat_video_menu_enter(0);
if (argc > 1)
parse_cmd_line(argc, argv);
if (engineState == PGS_ReloadRom)
{
plat_video_menu_begin();

View file

@ -28,10 +28,58 @@ static struct area { int w, h; } area;
static struct in_pdata in_sdl_platform_data = {
.defbinds = in_sdl_defbinds,
.key_map = in_sdl_key_map,
.joy_map = in_sdl_joy_map,
};
struct plat_target plat_target;
#if defined __MIYOO__
const char *plat_device = "miyoo";
#elif defined __GCW0__
const char *plat_device = "gcw0";
#elif defined __RETROFW__
const char *plat_device = "retrofw";
#elif defined __DINGUX__
const char *plat_device = "dingux";
#else
const char *plat_device = "";
#endif
int plat_parse_arg(int argc, char *argv[], int *x)
{
#if defined __OPENDINGUX__
if (*plat_device == '\0' && strcasecmp(argv[*x], "-device") == 0) {
plat_device = argv[++(*x)];
return 0;
}
#endif
return 1;
}
void plat_early_init(void)
{
}
int plat_target_init(void)
{
#if defined __ODBETA__
if (*plat_device == '\0') {
/* ODbeta should always have a device tree, get the model info from there */
FILE *f = fopen("/proc/device-tree/compatible", "r");
if (f) {
char buf[10];
int c = fread(buf, 1, sizeof(buf), f);
if (strncmp(buf, "gcw,", 4) == 0)
plat_device = "gcw0";
}
}
#endif
return 0;
}
void plat_target_finish(void)
{
}
/* YUV stuff */
static int yuv_ry[32], yuv_gy[32], yuv_by[32];
static unsigned char yuv_u[32 * 2], yuv_v[32 * 2];
@ -323,10 +371,6 @@ void plat_video_loop_prepare(void)
plat_video_set_buffer(g_screen_ptr);
}
void plat_early_init(void)
{
}
static void plat_sdl_resize(int w, int h)
{
// take over new settings
@ -392,9 +436,12 @@ void plat_init(void)
g_screen_ppitch = 320;
g_screen_ptr = shadow_fb;
plat_target_setup_input();
in_sdl_platform_data.kmap_size = in_sdl_key_map_sz,
in_sdl_platform_data.key_map = in_sdl_key_map,
in_sdl_platform_data.jmap_size = in_sdl_joy_map_sz,
in_sdl_platform_data.key_names = *in_sdl_key_names,
in_sdl_platform_data.joy_map = in_sdl_joy_map,
in_sdl_platform_data.key_names = in_sdl_key_names,
in_sdl_init(&in_sdl_platform_data, plat_sdl_event_handler);
in_probe();

View file

@ -1,9 +1,10 @@
extern const struct in_default_bind in_sdl_defbinds[];
extern const struct menu_keymap in_sdl_key_map[];
extern const struct menu_keymap *in_sdl_key_map;
extern const int in_sdl_key_map_sz;
extern const struct menu_keymap in_sdl_joy_map[];
extern const struct menu_keymap *in_sdl_joy_map;
extern const int in_sdl_joy_map_sz;
extern const char * const (*in_sdl_key_names)[SDLK_LAST];
extern const char * const *in_sdl_key_names;
extern const char *plat_device;
void linux_menu_init(void);

View file

@ -184,6 +184,11 @@ void *plat_mem_get_for_drc(size_t size)
return NULL;
}
int plat_parse_arg(int argc, char *argv[], int *x)
{
return 1;
}
void plat_early_init(void)
{
// just use gettimeofday until plat_init()

View file

@ -1,10 +1,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL_keysym.h>
#include "../libpicofe/input.h"
#include "../libpicofe/in_sdl.h"
#include "../libpicofe/plat.h"
#include "../common/input_pico.h"
#include "../common/plat_sdl.h"
#include "../common/emu.h"
const struct in_default_bind in_sdl_defbinds[] = {
{ SDLK_UP, IN_BINDTYPE_PLAYER12, GBTN_UP },
@ -24,26 +28,22 @@ const struct in_default_bind in_sdl_defbinds[] = {
{ 0, 0, 0 }
};
const struct menu_keymap in_sdl_key_map[] = {
struct menu_keymap _in_sdl_key_map[] = {
{ SDLK_UP, PBTN_UP },
{ SDLK_DOWN, PBTN_DOWN },
{ SDLK_LEFT, PBTN_LEFT },
{ SDLK_RIGHT, PBTN_RIGHT },
#if defined(__MIYOO__)
{ SDLK_LALT, PBTN_MOK },
{ SDLK_LCTRL, PBTN_MBACK },
#else
{ SDLK_LCTRL, PBTN_MOK },
{ SDLK_LALT, PBTN_MBACK },
#endif
{ SDLK_SPACE, PBTN_MA2 },
{ SDLK_LSHIFT, PBTN_MA3 },
{ SDLK_TAB, PBTN_L },
{ SDLK_BACKSPACE, PBTN_R },
};
const int in_sdl_key_map_sz = sizeof(in_sdl_key_map) / sizeof(in_sdl_key_map[0]);
const int in_sdl_key_map_sz = sizeof(_in_sdl_key_map) / sizeof(_in_sdl_key_map[0]);
const struct menu_keymap *in_sdl_key_map = _in_sdl_key_map;
const struct menu_keymap in_sdl_joy_map[] = {
const struct menu_keymap _in_sdl_joy_map[] = {
{ SDLK_UP, PBTN_UP },
{ SDLK_DOWN, PBTN_DOWN },
{ SDLK_LEFT, PBTN_LEFT },
@ -54,49 +54,81 @@ const struct menu_keymap in_sdl_joy_map[] = {
{ SDLK_WORLD_2, PBTN_MA2 },
{ SDLK_WORLD_3, PBTN_MA3 },
};
const int in_sdl_joy_map_sz = sizeof(in_sdl_joy_map) / sizeof(in_sdl_joy_map[0]);
const int in_sdl_joy_map_sz = sizeof(_in_sdl_joy_map) / sizeof(_in_sdl_joy_map[0]);
const struct menu_keymap *in_sdl_joy_map = _in_sdl_joy_map;
const char * const _in_sdl_key_names[SDLK_LAST] = {
const char * _in_sdl_key_names[SDLK_LAST] = {
/* common */
[SDLK_UP] = "UP",
[SDLK_DOWN] = "DOWN",
[SDLK_LEFT] = "LEFT",
[SDLK_RIGHT] = "RIGHT",
#if defined(__MIYOO__)
[SDLK_LALT] = "A",
[SDLK_LCTRL] = "B",
#else
[SDLK_LCTRL] = "A",
[SDLK_LALT] = "B",
#endif
#if defined(__GCW0__) || defined(__MIYOO__)
[SDLK_LSHIFT] = "X",
[SDLK_SPACE] = "Y",
#else
[SDLK_LSHIFT] = "Y",
[SDLK_SPACE] = "X",
#endif
[SDLK_RETURN] = "START",
[SDLK_ESCAPE] = "SELECT",
[SDLK_TAB] = "L1",
[SDLK_BACKSPACE] = "R1",
#if defined(__MIYOO__)
[SDLK_TAB] = "L1",
[SDLK_BACKSPACE] = "R1",
[SDLK_RALT] = "L2",
[SDLK_RSHIFT] = "R2",
[SDLK_RCTRL] = "RESET",
#elif defined(__GCW0__) || defined(__DINGUX__) || defined(__RETROFW__)
[SDLK_TAB] = "L",
[SDLK_BACKSPACE] = "R",
[SDLK_POWER] = "POWER",
[SDLK_PAUSE] = "LOCK",
#else
[SDLK_TAB] = "L1",
[SDLK_BACKSPACE] = "R1",
/* opendingux rg, gkd etc */
[SDLK_PAGEUP] = "L2",
[SDLK_PAGEDOWN] = "R2",
[SDLK_KP_DIVIDE] = "L3",
[SDLK_KP_PERIOD] = "R3",
[SDLK_HOME] = "POWER",
#endif
/* gcw0 */
[SDLK_POWER] = "POWER",
[SDLK_PAUSE] = "LOCK",
/* miyoo */
[SDLK_RALT] = "L2",
[SDLK_RSHIFT] = "R2",
[SDLK_RCTRL] = "RESET",
};
const char * const (*in_sdl_key_names)[SDLK_LAST] = &_in_sdl_key_names;
const char * const *in_sdl_key_names = _in_sdl_key_names;
static void nameset(int x1, const char *name)
{
_in_sdl_key_names[x1] = name;
}
static void nameswap(int x1, int x2)
{
const char **p = &_in_sdl_key_names[x1];
const char **q = &_in_sdl_key_names[x2];
const char *t = *p; *p = *q; *q = t;
}
static void keyswap(int k1, int k2)
{
int x1, x2, t;
for (x1 = in_sdl_key_map_sz-1; x1 >= 0; x1--)
if (_in_sdl_key_map[x1].key == k1) break;
for (x2 = in_sdl_key_map_sz-1; x2 >= 0; x2--)
if (_in_sdl_key_map[x2].key == k2) break;
if (x1 >= 0 && x2 >= 0) {
struct menu_keymap *p = &_in_sdl_key_map[x1];
struct menu_keymap *q = &_in_sdl_key_map[x2];
t = p->pbtn; p->pbtn = q->pbtn; q->pbtn = t;
}
}
void plat_target_setup_input(void)
{
if (strcmp(plat_device, "miyoo") == 0) {
/* swapped A/B and X/Y keys */
keyswap(SDLK_LALT, SDLK_LCTRL);
nameswap(SDLK_LALT, SDLK_LCTRL);
nameswap(SDLK_SPACE, SDLK_LSHIFT);
} else if (strcmp(plat_device, "gcw0") == 0) {
/* swapped X/Y keys, single L/R keys */
nameswap(SDLK_SPACE, SDLK_LSHIFT);
nameset(SDLK_TAB, "L"); nameset(SDLK_BACKSPACE, "R");
} else if (strcmp(plat_device, "retrofw") == 0 || strcmp(plat_device, "dingux") == 0) {
/* single L/R keys */
nameset(SDLK_TAB, "L"); nameset(SDLK_BACKSPACE, "R");
}
}

View file

@ -445,6 +445,11 @@ void *plat_mem_get_for_drc(size_t size)
return NULL;
}
int plat_parse_arg(int argc, char *argv[], int *x)
{
return 1;
}
void plat_early_init(void)
{
}

View file

@ -122,6 +122,12 @@ void plat_video_menu_leave(void)
plat_video_set_buffer(g_screen_ptr);
}
/* check arg at index x */
int plat_parse_arg(int argc, char *argv[], int *x)
{
return 1;
}
/* Preliminary initialization needed at program start */
void plat_early_init(void)
{

View file

@ -20,6 +20,11 @@ static unsigned short screen_buff[320 * 240];
const char *renderer_names[] = { NULL };
const char *renderer_names32x[] = { NULL };
int plat_parse_arg(int argc, char *argv[], int *x)
{
return 1;
}
void plat_init(void)
{
g_screen_ptr = (void *)screen_buff;