diff --git a/Makefile.pandora b/Makefile.pandora new file mode 100644 index 0000000000..d45220a7d3 --- /dev/null +++ b/Makefile.pandora @@ -0,0 +1,46 @@ +# Before using this Makefile, be sure to do: +# $ source /usr/local/angstrom/arm/environment-setup +# $ setprj retroarch + +PNDDIR=./pandora +BINDIR=$(PNDDIR)/bin + +all: retroarch + +pnd: retroarch.pnd + +install: $(BINDIR)/retroarch $(BINDIR)/retroarch-joyconfig $(PNDDIR)/readme.html + +retroarch: + ./configure --prefix=$PND_BASEDIR/$PRJ --disable-ffmpeg --disable-cg --disable-xml --disable-python --disable-libpng --disable-pulse --disable-opengl + make -f Makefile + +$(BINDIR)/retroarch: retroarch + cp retroarch $(BINDIR)/retroarch + +$(BINDIR)/retroarch-joyconfig: tools/retroarch-joyconfig + cp tools/retroarch-joyconfig $(BINDIR)/retroarch-joyconfig + +$(PNDDIR)/readme.html: README.md + markdown README.md > $(PNDDIR)/readme.html + +retroarch.pnd: install + pnd_make -p retroarch.pnd -d $(PNDDIR)/ -x $(PNDDIR)/PXML.xml -i $(PNDDIR)/icon.png + +clean: + rm -f *.o + rm -f audio/*.o + rm -f conf/*.o + rm -f gfx/*.o + rm -f gfx/fonts/*.o + rm -f gfx/context/*.o + rm -f gfx/py_state/*.o + rm -f compat/*.o + rm -f record/*.o + rm -f input/*.o + rm -f tools/*.o + rm -f $(BINDIR)/retroarch + rm -f $(BINDIR)/retroarch-joyconfig + rm -f $(PNDDIR)/readme.html + rm -f retroarch + diff --git a/pandora/PXML.xml b/pandora/PXML.xml new file mode 100644 index 0000000000..a75c462979 --- /dev/null +++ b/pandora/PXML.xml @@ -0,0 +1,32 @@ + + + + + + + RetroArch + + + + + + Frontend to libretro + + + + + + + + + + + + + + + + + + + diff --git a/pandora/icon.png b/pandora/icon.png new file mode 100644 index 0000000000..2c23350627 Binary files /dev/null and b/pandora/icon.png differ diff --git a/pandora/previews/retroarch.png b/pandora/previews/retroarch.png new file mode 100644 index 0000000000..0bad4e70e7 Binary files /dev/null and b/pandora/previews/retroarch.png differ diff --git a/pandora/retroarch/retroarch.cfg b/pandora/retroarch/retroarch.cfg new file mode 100644 index 0000000000..057dbfdc1e --- /dev/null +++ b/pandora/retroarch/retroarch.cfg @@ -0,0 +1,386 @@ +## Skeleton config file for RetroArch + +# Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ... +# This will be overridden by explicit command line options. +# savefile_directory = + +# Save all save states (*.state) to this directory. +# This will be overridden by explicit command line options. +# savestate_directory = + +# Automatically saves a savestate at the end of RetroArch's lifetime. +# The path is $SRAM_PATH.auto. +# RetroArch will automatically load any savestate with this path on startup. +# savestate_auto_save = false + +# Load libretro from a dynamic location for dynamically built RetroArch. +# This option is mandatory. +libretro_path = "/mnt/utmp/retroarch/lib/libretro-fceumm.so" + +# Environment variables internally in RetroArch. +# Implementations can tap into this user-specificed information to enable functionality +# that is deemed too obscure to expose directly. +# Some variables might be "standardized" at a later time if needed. +# The string is formatted as key value pairs delimited by a semicolon ';'. +# Any white space between the delimiter ';' and the '=' is significant. +# I.e.: "key1=value1;key2=value2;..." +# environment_variables = + +# Sets the "system" directory. +# Implementations can query for this directory to load BIOSes, system-specific configs, etc. +# system_directory = + +#### Video + +# Video driver to use. "gl", "xvideo", "sdl" or "ext" (external API driver) +video_driver = "sdl" + +# Path to external video driver using the RetroArch driver API. +# video_external_driver = + +# Windowed xscale and yscale +# (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale) +video_xscale = 1.0 +video_yscale = 1.0 + +# Fullscreen resolution. Resolution of 0 uses the resolution of the desktop. +# video_fullscreen_x = 0 +# video_fullscreen_y = 0 + +# Start in fullscreen. Can be changed at runtime. +#video_fullscreen = true + +# Force 16-bit colors. Apparently some video cards in use today have troubles with 32-bit ... +#video_force_16bit = true + +# Forcibly disable composition. Only works in Windows Vista/7 for now. +# video_disable_composition = false + +# Video vsync. +#video_vsync = false + +# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders. +video_smooth = false + +# Forces rendering area to stay equal to SNES aspect ratio 4:3 or as defined in video_aspect_ratio. +# video_force_aspect = true + +# A floating point value for video aspect ratio (width / height). +# If this is not set, aspect ratio is assumed to be automatic. +# Behavior then is defined by video_aspect_ratio_auto. +# video_aspect_ratio = + +# If this is true and video_aspect_ratio is not set, +# aspect ratio is decided by libretro implementation. +# If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set. +# video_aspect_ratio_auto = false + +# Forces cropping of overscanned frames. Crops away top 7 scanlines and 8 bottom scanlines. (15/15 for interlaced frames). +# video_crop_overscan = false + +# Path to Cg shader. +# video_cg_shader = "/path/to/cg/shader.cg" + +# Path to bSNES XML shader (GLSL only). If both Cg shader path and XML shader path are defined, +# Cg shader will take priority unless overridden in video_shader_type. +# video_bsnes_shader = "/path/to/bsnes/xml/shader.shader" + +# Which shader type to use. Valid values are "cg", "bsnes", "none" and "auto" +# video_shader_type = auto + +# Defines a directory where XML shaders are kept. +# video_shader_dir = + +# Render to texture first. Useful when doing multi-pass shaders or control the output of shaders better. +# video_render_to_texture = false + +# Defines the video scale of render-to-texture. +# The output FBO size is scaled by these amounts against the input size (typically 256 * 224 for SNES). +# video_fbo_scale_x = 2.0 +# video_fbo_scale_y = 2.0 + +# Define shader to use for second pass (needs render-to-texture). +# video_second_pass_shader = "/path/to/second/shader.{cg,shader}" + +# Defines if bilinear filtering is used during second pass (needs render-to-texture). +# video_second_pass_smooth = true + +# CPU-based filter. Path to a bSNES CPU filter (*.filter) +# video_filter = + +# Path to a TTF font used for rendering messages. This path must be defined to enable fonts. +# Do note that the _full_ path of the font is necessary! +# video_font_path = + +# Size of the TTF font rendered. +# video_font_size = 48 + +# Attempt to scale the font to fit better for multiple window sizes. +# video_font_scale = true + +# Enable usage of OSD messages. +# video_font_enable = true + +# Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. +# [0.0, 0.0] maps to the lower left corner of the screen. +# video_message_pos_x = 0.05 +# video_message_pos_y = 0.05 + +# Color for message. The value is treated as a hexadecimal value. +# It is a regular RGB hex number, i.e. red is "ff0000". +# video_message_color = ffffff + +# Video refresh rate of your monitor. +# Used to calculate a suitable audio input rate. +# video_refresh_rate = 59.95 + +# Allows libsnes cores to set rotation modes. +# Setting this to false will honor, but ignore this request. +# This is useful for vertically oriented games where one manually rotates the monitor. +# video_allow_rotate = true + +#### Audio + +# Enable audio. +# audio_enable = true + +# Audio output samplerate. +# audio_out_rate = 48000 + +# When altering audio_in_rate on-the-fly, define by how much each time. +# audio_rate_step = 0.25 + +# Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio and ext (external driver). +audio_driver = alsa + +# Path to external audio driver using the RetroArch audio driver API. +# audio_external_driver = + +# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ... +# audio_device = + +# External DSP plugin that processes audio before it's sent to the driver. +# audio_dsp_plugin = + +# Will sync (block) on audio. Recommended. +# audio_sync = true + +# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency. +# audio_latency = 64 + +# Enable experimental audio rate control. +# audio_rate_control = false + +# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically. +# Input rate = in_rate * (1.0 +/- audio_rate_control_delta) +# audio_rate_control_delta = 0.005 + +#### Input + +# Input driver. Depending on video driver, it might force a different input driver. +# input_driver = sdl + +# Defines axis threshold. Possible values are [0.0, 1.0] +# input_axis_threshold = 0.5 + +# Keyboard input. Will recognize normal keypresses and special keys like "left", "right", and so on. +# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, +# rather than relying on a default. +input_player1_a = end +input_player1_b = pagedown +input_player1_y = home +input_player1_x = pageup +input_player1_start = alt +input_player1_select = ctrl +input_player1_l = rshift +input_player1_r = rctrl +input_player1_left = left +input_player1_right = right +input_player1_up = up +input_player1_down = down +# input_player1_l2 = +# input_player1_r2 = +# input_player1_l3 = +# input_player1_r3 = + +# Two analog sticks (DualShock-esque). +# Bound as usual, however, if a real analog axis is bound, +# it can be read as a true analog. +# Positive X axis is right, Positive Y axis is down. +# input_player1_l_x_plus = +# input_player1_l_x_minus = +# input_player1_l_y_plus = +# input_player1_l_y_minus = +# input_player1_r_x_plus = +# input_player1_r_x_minus = +# input_player1_r_y_plus = +# input_player1_r_y_minus = + +# If desired, it is possible to override which joypads are being used for player 1 through 5. First joypad available is 0. +# input_player1_joypad_index = 0 +# input_player2_joypad_index = 1 +# input_player3_joypad_index = 2 +# input_player4_joypad_index = 3 +# input_player5_joypad_index = 4 +# Player 6-8 is not directly expected by libsnes API, but we'll futureproof it. +# input_player6_joypad_index = 5 +# input_player7_joypad_index = 6 +# input_player8_joypad_index = 7 + +# Joypad buttons. +# Figure these out by using RetroArch-Phoenix or ssnes-joyconfig. +# You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. +# E.g. "h0up" +# input_player1_a_btn = +# input_player1_b_btn = +# input_player1_y_btn = +# input_player1_x_btn = +# input_player1_start_btn = +# input_player1_select_btn = +# input_player1_l_btn = +# input_player1_r_btn = +# input_player1_left_btn = +# input_player1_right_btn = +# input_player1_up_btn = +# input_player1_down_btn = +# input_player1_l2_btn = +# input_player1_r2_btn = +# input_player1_l3_btn = +# input_player1_r3_btn = + +# Axis for SNES DPAD. +# Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. +# Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity. +# input_player1_left_axis = +# input_player1_right_axis = +# input_player1_up_axis = +# input_player1_down_axis = + +# This goes all the way to player 8 (*_player2_*, *_player3_*, etc), but omitted for clarity. + +# Toggles fullscreen. +# input_toggle_fullscreen = f + +# Saves state. +# input_save_state = f2 +# Loads state. +# input_load_state = f4 + +# State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline). +# When slot is != 0, path will be $path%d, where %d is slot number. +# input_state_slot_increase = f7 +# input_state_slot_decrease = f6 + +# Toggles between fast-forwarding and normal speed. +# input_toggle_fast_forward = space + +# Hold for fast-forward. Releasing button disables fast-forward. +# input_hold_fast_forward = l + +# Key to exit emulator cleanly. +# Killing it in any hard way (SIGTERM, SIGKILL, etc, will terminate emulator without saving RAM, etc.) +# input_exit_emulator = escape + +# Decrease/increase input sample rate on the fly. Amount to decrease/increase is defined by audio_rate_step. +# input_rate_step_up = kp_plus +# input_rate_step_down = kp_minus + +# Applies next and previous XML shader in directory. +# input_shader_next = m +# input_shader_prev = n + +# Hold button down to rewind. Rewinding must be enabled. +# input_rewind = r + +# Toggle between recording and not. +# input_movie_record_toggle = o + +# Toggle between paused and non-paused state +# input_pause_toggle = p + +# Frame advance when game is paused +# input_frame_advance = k + +# Reset the emulated SNES. +# input_reset = h + +# Configures DSP plugin +# input_dsp_config = c + +# Cheats. +# input_cheat_index_plus = y +# input_cheat_index_minus = t +# input_cheat_toggle = u + +# Mute/unmute audio +# input_audio_mute = f9 + +# Take screenshot +# input_screenshot = print_screen + +# Netplay flip players. +# input_netplay_flip_players = i + +# Hold for slowmotion. +# input_slowmotion = e + +#### Misc + +# Enable rewinding. This will take a performance hit when playing, so it is disabled by default. +# Do note that rewinding will only work properly when using bSNES libsnes core atm. +# rewind_enable = false + +# Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer. +# The buffer should be approx. 20MB per minute of buffer time. +# rewind_buffer_size = 20 + +# Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed. +# rewind_granularity = 1 + +# Pause gameplay when window focus is lost. +# pause_nonactive = true + +# Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise. +# The interval is measured in seconds. A value of 0 disables autosave. +# autosave_interval = + +# When being client over netplay, use keybinds for player 1. +# netplay_client_swap_input = false + +# Path to XML cheat database (as used by bSNES). +# cheat_database_path = + +# Path to XML cheat config, a file which keeps track of which +# cheat settings are used for individual games. +# If the file does not exist, it will be created. +# cheat_settings_path = + +# Directory to dump screenshots to. +# screenshot_directory = + +# Records video assuming video is hi-res. +# video_hires_record = false + +# Enables lossless RGB H.264 recording if possible (if not, FFV1 is used). +# video_h264_record = true + +# Records video after CPU video filter. +# video_post_filter_record = false + +# Block SRAM from being overwritten when loading save states. +# Might potentially lead to buggy games. +# block_sram_overwrite = false + +# When saving a savestate, save state index is automatically increased before +# it is saved. +# Also, when loading a ROM, the index will be set to the highest existing index. +# There is no upper bound on the index. +# savestate_auto_index = false + +# Slowmotion ratio. When slowmotion, game will slow down by factor. +# slowmotion_ratio = 3.0 + +# Enable network command interface. +# network_cmd_enable = false +# network_cmd_port = 55355 + diff --git a/pandora/scripts/retroarch.sh b/pandora/scripts/retroarch.sh new file mode 100755 index 0000000000..a78607c762 --- /dev/null +++ b/pandora/scripts/retroarch.sh @@ -0,0 +1,48 @@ +#!/bin/sh +export PATH="/mnt/utmp/retroarch/bin:${PATH:-"/usr/bin:/bin:/usr/local/bin"}" +export LD_LIBRARY_PATH="/mnt/utmp/retroarch/lib:${LD_LIBRARY_PATH:-"/usr/lib:/lib"}" +export HOME="/mnt/utmp/retroarch" XDG_CONFIG_HOME="/mnt/utmp/retroarch" + +if [ -d /mnt/utmp/retroarch/share ];then + export XDG_DATA_DIRS=/mnt/utmp/retroarch/share:$XDG_DATA_DIRS:/usr/share +fi +export SDL_OMAP_LAYER_SIZE="640x480" +export SDL_VIDEODRIVER="omapdss" +export SDL_AUDIODRIVER="alsa" + +cd /mnt/utmp/retroarch/lib +BACKEND=$(ls -1 libretro*.so | zenity --list --column=Backend) +cd $HOME + +if [ -z "$BACKEND" ] ; then + exit 0 +fi + +FILTER='All files (*)|*' +case "$BACKEND" in + libretro-fceu*.so) + FILTER='NES (*.nes)|*.nes' + ;; + libretro-pocketsnes.so | libretro-snes9x*.so) + FILTER='SNES (*.sfc)|*.sfc' + ;; + libretro-meteor.so | libretro-vba.so ) + FILTER='GBA (*.gba)|*.gba' + export SDL_OMAP_LAYER_SIZE="720x480" + ;; + libretro-gambatte.so) + FILTER='GBC (*.gb; *.gbc)|*.gb *.gbc' + export SDL_OMAP_LAYER_SIZE="534x480" + ;; + libretro-genplus.so) + FILTER='Genesis/MegaDrive (*.md; *.gen)|*.md *.gen' + ;; + libretro-prboom.so) + FILTER='Doom (*.wad)|*.wad' + ;; +esac + +ROM=$(zenity --file-selection --file-filter="${FILTER}") + +exec retroarch "${ROM}" -L "/mnt/utmp/retroarch/lib/${BACKEND}" "${@}" +