From d4bea61c8f1e5fb1a68c401610bd424c052ef636 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Mon, 7 Oct 2013 21:06:54 +0200 Subject: [PATCH] Add support for the OpenDingux platform --- .gitignore | 3 + Makefile | 17 +++++- configure | 11 +++- platform/common/plat_sdl.c | 3 + platform/libpicofe | 2 +- platform/opendingux/data/default.gcw0.desktop | 9 +++ platform/opendingux/data/megadrive.png | Bin 0 -> 1524 bytes platform/opendingux/data/skin/background.png | Bin 0 -> 16170 bytes platform/opendingux/data/skin/font.png | Bin 0 -> 11264 bytes platform/opendingux/data/skin/readme.txt | 7 +++ platform/opendingux/data/skin/skin.txt | 3 + platform/opendingux/inputmap.c | 55 ++++++++++++++++++ 12 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 platform/opendingux/data/default.gcw0.desktop create mode 100644 platform/opendingux/data/megadrive.png create mode 100644 platform/opendingux/data/skin/background.png create mode 100644 platform/opendingux/data/skin/font.png create mode 100644 platform/opendingux/data/skin/readme.txt create mode 100644 platform/opendingux/data/skin/skin.txt create mode 100644 platform/opendingux/inputmap.c diff --git a/.gitignore b/.gitignore index 9f71eb9..b7ef852 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ mds/ cfg/ libs/ obj/ +.opk_data +PicoDrive +PicoDrive.opk diff --git a/Makefile b/Makefile index 67ba86f..0df793e 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,21 @@ asm_cdpico = 0 asm_cdmemory = 0 endif -# frontend +ifeq "$(PLATFORM)" "opendingux" +opk: $(TARGET).opk + +$(TARGET).opk: $(TARGET) + $(RM) -rf .opk_data + cp -r platform/opendingux/data .opk_data + cp $< .opk_data/PicoDrive + $(STRIP) .opk_data/PicoDrive + mksquashfs .opk_data $@ -all-root -noappend -no-exports -no-xattrs + +OBJS += platform/opendingux/inputmap.o + +# OpenDingux is a generic platform, really. +PLATFORM := generic +endif ifeq "$(PLATFORM)" "generic" OBJS += platform/linux/emu.o platform/linux/blit.o # FIXME OBJS += platform/common/plat_sdl.o @@ -156,6 +170,7 @@ target_: $(TARGET) clean: $(RM) $(TARGET) $(OBJS) + $(RM) -r .opk_data $(TARGET): $(OBJS) $(CC) -o $@ $(CFLAGS) $^ $(LDFLAGS) $(LDLIBS) diff --git a/configure b/configure index 453d530..29b45e1 100755 --- a/configure +++ b/configure @@ -31,7 +31,7 @@ check_define() # setting options to "yes" or "no" will make that choice default, # "" means "autodetect". -platform_list="generic pandora gp2x" +platform_list="generic pandora gp2x opendingux" platform="generic" sound_driver_list="oss alsa sdl" sound_drivers="" @@ -51,6 +51,7 @@ optimize_arm920="no" CC="${CC-${CROSS_COMPILE}gcc}" CXX="${CXX-${CROSS_COMPILE}g++}" AS="${AS-${CROSS_COMPILE}as}" +STRIP="${STRIP-${CROSS_COMPILE}strip}" SDL_CONFIG="`$CC --print-sysroot`/usr/bin/sdl-config" MAIN_LDLIBS="$LDLIBS -lm" config_mak="config.mak" @@ -68,6 +69,9 @@ set_platform() case "$platform" in generic) ;; + opendingux) + sound_drivers="sdl" + ;; pandora) sound_drivers="oss alsa" optimize_cortexa8="yes" @@ -111,7 +115,7 @@ if [ "$show_help" = "yes" ]; then echo " --sound-drivers=LIST sound output drivers [guessed]" echo " available: $sound_driver_list" echo "influential environment variables:" - echo " CROSS_COMPILE CC CXX AS CFLAGS ASFLAGS LDFLAGS LDLIBS" + echo " CROSS_COMPILE CC CXX AS STRIP CFLAGS ASFLAGS LDFLAGS LDLIBS" exit 1 fi @@ -225,7 +229,7 @@ arm*) esac case "$platform" in -generic) +generic | opendingux) need_sdl="yes" ;; esac @@ -361,6 +365,7 @@ echo >> $config_mak echo "CC = $CC" >> $config_mak echo "CXX = $CXX" >> $config_mak echo "AS = $AS" >> $config_mak +echo "STRIP = $STRIP" >> $config_mak echo "CFLAGS += $CFLAGS" >> $config_mak echo "ASFLAGS += $ASFLAGS" >> $config_mak echo "LDFLAGS += $LDFLAGS" >> $config_mak diff --git a/platform/common/plat_sdl.c b/platform/common/plat_sdl.c index 63039d4..4404691 100644 --- a/platform/common/plat_sdl.c +++ b/platform/common/plat_sdl.c @@ -72,12 +72,15 @@ const struct menu_keymap in_sdl_joy_map[] __attribute__((weak)) = { SDLK_WORLD_3, PBTN_MA3 }, }; +extern const char * const in_sdl_key_names[] __attribute__((weak)); + static const struct in_pdata in_sdl_platform_data = { .defbinds = in_sdl_defbinds, .key_map = in_sdl_key_map, .kmap_size = sizeof(in_sdl_key_map) / sizeof(in_sdl_key_map[0]), .joy_map = in_sdl_joy_map, .jmap_size = sizeof(in_sdl_joy_map) / sizeof(in_sdl_joy_map[0]), + .key_names = in_sdl_key_names, }; /* YUV stuff */ diff --git a/platform/libpicofe b/platform/libpicofe index c19e28f..d685ce4 160000 --- a/platform/libpicofe +++ b/platform/libpicofe @@ -1 +1 @@ -Subproject commit c19e28f62660cdaed26698234cff9c084517b34c +Subproject commit d685ce4625e9f3b25b0852d31960cb429da06a9d diff --git a/platform/opendingux/data/default.gcw0.desktop b/platform/opendingux/data/default.gcw0.desktop new file mode 100644 index 0000000..80458bd --- /dev/null +++ b/platform/opendingux/data/default.gcw0.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Picodrive +Comment=A megadrive/genesis emulator +Exec=PicoDrive +Terminal=false +Type=Application +StartupNotify=true +Icon=megadrive +Categories=emulators; diff --git a/platform/opendingux/data/megadrive.png b/platform/opendingux/data/megadrive.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bc5f8d4edadb7c42935eb2d79ec5da1ce586f0 GIT binary patch literal 1524 zcmV3d)L)W7Pp4_halYjr6s z^upbT56t&)&iQ`$!uOmxL%`6tRzYG8uxwAel^tPN#!q zSv-02gqJU0^7{2_-oAay>FFtdZMTWXEk?>ge& zl1`_Yo}Nb6b^dba4qIDW?CtH@5-(o7;OOXxt4oQ*yZ+ zx~|)M9UL4C1Y}vJ*=*8mHrd?Vbi`*g8VzP=XOU$YS(X_eA14q95C{YqA0Nl>_dD?U zeB8KkgVE7Z_V@R(EQ@lvjIQf6n@zgi?m%FAdiorVM#F)kD9q2#qiGs`zaL4G5Cq}B zB1sY>BO`qH@PS+|N2OAs(P*%@w>J2>_?(RS! z6bhZgFbtbgse~ws$g)hKP(af(DwPVgS`A&-(RH2WcCjpr=g*(hYPFDMnNq35_V)HbAQ%juqgJcgoF$)|n?q3)R8^%^ zDp4+%9n~-l1Jg8VHk+)kuXE>9o9^!JVp$fAMgvKb$mMcuZEXz%5{U$wrlDyX%gf7- zSkp8_Q6v_N5sgNXB#BHWgQ}_&i$yd|vnyp72FuIKtgNiCzP`@t>M9!>8?@VPc6WEV zefzdu#dfL$+Zr!>?BoZMS zjgrsjX|-Adfti^Z3WdU@gu`K5A`*$Pu&{t6N%(v|e)+kFk`d|db@=7y9^JhTKA(?j zwaVh+BC;%#NFKXH8WE5|3l zqU-uVz~}RkN~MU!VqYYcN|DRuNG6k{QmOw5wOY;D1z$Q1&zPK?Boc{SI_Gm@v6%hm z`=vM#2p|Z;Kwx-ym}}Rr*@QwNve~R->}xnn8jHnnyWNiXY|ilT@P7op`McnE@iO{D a3;Y|Ox_VreIEYFB0000g$mJ literal 0 HcmV?d00001 diff --git a/platform/opendingux/data/skin/background.png b/platform/opendingux/data/skin/background.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc2bb6653f81e839f0303fb194a86da1d444984 GIT binary patch literal 16170 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 literal 0 HcmV?d00001 diff --git a/platform/opendingux/data/skin/font.png b/platform/opendingux/data/skin/font.png new file mode 100644 index 0000000000000000000000000000000000000000..707a5b433f25537a1514c1c6b71bbd1e0a92daf3 GIT binary patch literal 11264 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 +#include + +#include "../libpicofe/input.h" +#include "../libpicofe/in_sdl.h" +#include "../common/input_pico.h" + +const struct in_default_bind in_sdl_defbinds[] = { + { SDLK_UP, IN_BINDTYPE_PLAYER12, GBTN_UP }, + { SDLK_DOWN, IN_BINDTYPE_PLAYER12, GBTN_DOWN }, + { SDLK_LEFT, IN_BINDTYPE_PLAYER12, GBTN_LEFT }, + { SDLK_RIGHT, IN_BINDTYPE_PLAYER12, GBTN_RIGHT }, + { SDLK_LSHIFT, IN_BINDTYPE_PLAYER12, GBTN_A }, + { SDLK_LALT, IN_BINDTYPE_PLAYER12, GBTN_B }, + { SDLK_LCTRL, IN_BINDTYPE_PLAYER12, GBTN_C }, + { SDLK_RETURN, IN_BINDTYPE_PLAYER12, GBTN_START }, + { SDLK_ESCAPE, IN_BINDTYPE_EMU, PEVB_MENU }, + { SDLK_TAB, IN_BINDTYPE_EMU, PEVB_PICO_PPREV }, + { SDLK_BACKSPACE, IN_BINDTYPE_EMU, PEVB_PICO_PNEXT }, + { SDLK_BACKSPACE, IN_BINDTYPE_EMU, PEVB_STATE_SAVE }, + { SDLK_TAB, IN_BINDTYPE_EMU, PEVB_STATE_LOAD }, + { SDLK_SPACE, IN_BINDTYPE_EMU, PEVB_FF }, + { 0, 0, 0 } +}; + +const struct menu_keymap in_sdl_key_map[] = +{ + { SDLK_UP, PBTN_UP }, + { SDLK_DOWN, PBTN_DOWN }, + { SDLK_LEFT, PBTN_LEFT }, + { SDLK_RIGHT, PBTN_RIGHT }, + { SDLK_LCTRL, PBTN_MOK }, + { SDLK_LALT, PBTN_MBACK }, + { SDLK_SPACE, PBTN_MA2 }, + { SDLK_LSHIFT, PBTN_MA3 }, + { SDLK_TAB, PBTN_L }, + { SDLK_BACKSPACE, PBTN_R }, +}; + +const char * const in_sdl_key_names[SDLK_LAST] = { + [SDLK_UP] = "UP", + [SDLK_DOWN] = "DOWN", + [SDLK_LEFT] = "LEFT", + [SDLK_RIGHT] = "RIGHT", + [SDLK_LCTRL] = "A", + [SDLK_LALT] = "B", + [SDLK_LSHIFT] = "X", + [SDLK_SPACE] = "Y", + [SDLK_TAB] = "L", + [SDLK_BACKSPACE] = "R", + [SDLK_RETURN] = "START", + [SDLK_ESCAPE] = "SELECT", + [SDLK_POWER] = "POWER", + [SDLK_PAUSE] = "LOCK", +}; -- 2.39.2