This commit is contained in:
meancoot 2013-02-11 17:13:31 -05:00
commit 19fb2fe8f4
89 changed files with 2729 additions and 368 deletions

View File

@ -27,6 +27,8 @@ OBJ = retroarch.o \
gfx/image.o \
gfx/fonts/fonts.o \
gfx/fonts/bitmapfont.o \
audio/hermite.o \
audio/resampler.o \
performance.o
JOYCONFIG_OBJ = tools/retroarch-joyconfig.o \
@ -298,8 +300,6 @@ ifeq ($(HAVE_SINC), 1)
ifeq ($(HAVE_NEON),1)
OBJ += audio/sinc_neon.o
endif
else
OBJ += audio/hermite.o
endif
OBJ += audio/utils.o
ifeq ($(HAVE_NEON),1)

View File

@ -1,7 +1,4 @@
###
##
# Makefile for RetroArch GameCube.
##
RARCH_VERSION = "0.9.8.3"
DEBUG = 0
HAVE_LOGGER = 1
@ -56,7 +53,7 @@ CFLAGS += -DHAVE_FILE_LOGGER
CFLAGS += -Iconsole/logger
endif
CFLAGS += -std=gnu99 -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RMENU -DHAVE_RGUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RARCH_EXEC -DGEKKO -DHAVE_ZLIB -DWANT_RZLIB -DHAVE_RARCH_MAIN_WRAP -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DPACKAGE_VERSION=\"0.9.8.2\" -Dmain=rarch_main -Wno-char-subscripts
CFLAGS += -std=gnu99 -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RMENU -DHAVE_RGUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RARCH_EXEC -DGEKKO -DHAVE_ZLIB -DWANT_RZLIB -DHAVE_RARCH_MAIN_WRAP -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -Wno-char-subscripts
ifeq ($(DEBUG), 1)
CFLAGS += -O0 -g

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.8.1"
RARCH_VERSION = "0.9.8.3"
#which compiler to build with - GCC or SNC
#set to GCC for debug builds for use with debugger
@ -109,7 +109,7 @@ PPU_LDLIBS = $(FONT_LIBS) $(GL_LIBS) $(WHOLE_START) -lretro_ps3 $(WHOLE_END) -l
PPU_RANLIB = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ranlib.exe
DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RMENU -DHAVE_RMENU_GUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_OPENGLES1 -DHAVE_PSGL -DHAVE_CG -DHAVE_CG_RUNTIME_COMPILER -DHAVE_FILEBROWSER -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -DWANT_RZLIB -D__CELLOS_LV2__ -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)
DEFINES += -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RMENU -DHAVE_RMENU_GUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_HEADSET -DHAVE_VID_CONTEXT -DHAVE_OPENGLES -DHAVE_OPENGLES1 -DHAVE_PSGL -DHAVE_CG -DHAVE_CG_RUNTIME_COMPILER -DHAVE_FILEBROWSER -DHAVE_FBO -DHAVE_RARCH_MAIN_WRAP -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RSOUND -DHAVE_ZLIB -DWANT_RZLIB -DHAVE_SINC -DSINC_LOWER_QUALITY -D__CELLOS_LV2__ -DHAVE_NETPLAY=1 -DHAVE_SOCKET_LEGACY=1 -DHAVE_OSKUTIL -DHAVE_MOUSE -DHAVE_GRIFFIN=1 -DHAVE_MULTIMAN=1 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)
ifeq ($(DEBUG), 1)
PPU_OPTIMIZE_LV := -O0 -g

View File

@ -1,8 +1,4 @@
###
##
# Makefile for RetroArch PSL1GHT.
##
RARCH_VERSION = "0.9.8"
RARCH_VERSION = "0.9.8.3"
DEBUG = 0
HAVE_LOGGER = 0

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.8"
RARCH_VERSION = "0.9.8.3"
HAVE_FILE_LOGGER = 1

View File

@ -1,7 +1,4 @@
###
##
# Makefile for RetroArch Wii.
##
RARCH_VERSION = "0.9.8.3"
DEBUG = 0
HAVE_LOGGER = 0
@ -69,7 +66,7 @@ CFLAGS += -Iconsole/logger
endif
CFLAGS += -std=gnu99 -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RGUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RARCH_EXEC -DHAVE_RMENU -DGEKKO -DHAVE_ZLIB -DWANT_RZLIB -DHAVE_RARCH_MAIN_WRAP -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DPACKAGE_VERSION=\"0.9.8.2\" -Dmain=rarch_main -Wno-char-subscripts
CFLAGS += -std=gnu99 -DHAVE_SINC -DSINC_LOWER_QUALITY -DHAVE_DEFAULT_RETROPAD_INPUT -DHAVE_RGUI -DHAVE_THREAD -DRARCH_CONSOLE -DHAVE_LIBRETRO_MANAGEMENT -DHAVE_RARCH_EXEC -DHAVE_RMENU -DGEKKO -DHAVE_ZLIB -DWANT_RZLIB -DHAVE_RARCH_MAIN_WRAP -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Dmain=rarch_main -Wno-char-subscripts
ifeq ($(DEBUG), 1)
CFLAGS += -O0 -g -DDEBUG

View File

@ -30,6 +30,8 @@ OBJ = retroarch.o \
gfx/fonts/fonts.o \
gfx/fonts/bitmapfont.o \
gfx/image.o \
audio/hermite.o \
audio/resampler.o \
performance.o
JOBJ := conf/config_file.o \
@ -208,8 +210,7 @@ endif
ifeq ($(HAVE_SINC), 1)
OBJ += audio/sinc.o
else
OBJ += audio/hermite.o
DEFINES += -DHAVE_SINC
endif
ifneq ($(V), 1)

View File

@ -1,9 +1,4 @@
###
##
# Makefile for RetroArch libxenon.
##
###
##
RARCH_VERSION = "0.9.8.3"
DEBUG = 0
@ -21,7 +16,7 @@ INCDIRS = -I. -I$(DEVKITXENON)/usr/include
OBJ = console/griffin/griffin.o
LIBS = -lretro_xenon360 -lxenon -lm -lc
DEFINES = -std=gnu99 -DPACKAGE_VERSION=\"0.9.8\" -DRARCH_CONSOLE -DHAVE_THREAD -DHAVE_GETOPT_LONG=1 -DHAVE_GRIFFIN -Dmain=rarch_main
DEFINES = -std=gnu99 -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -DRARCH_CONSOLE -DHAVE_THREAD -DHAVE_GETOPT_LONG=1 -DHAVE_GRIFFIN -Dmain=rarch_main
DEFINES += -maltivec -mhard-float -m32 -mpowerpc64 -mcpu=cell -mtune=cell -fno-pic -g -Wall -DXENON $(INCDIRS) -Wno-char-subscripts
DEFINES += -u read -u _start -u exc_base

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.8"
RARCH_VERSION = "0.9.8.3"
LOCAL_PATH := $(call my-dir)
PERF_TEST := 0
HAVE_NEON := 1
@ -27,7 +27,7 @@ ifeq ($(HAVE_SINC),1)
ifeq ($(HAVE_NEON),1)
LOCAL_SRC_FILES += ../../../audio/sinc_neon.S.neon
endif
LOCAL_CFLAGS += -DHAVE_SINC
LOCAL_CFLAGS += -DHAVE_SINC -DSINC_LOWER_QUALITY
endif
LOCAL_CFLAGS += -DANDROID_ARM_V7

View File

@ -172,10 +172,16 @@ static void android_input_poll(void *data)
action == AMOTION_EVENT_ACTION_CANCEL || action == AMOTION_EVENT_ACTION_POINTER_UP) ||
(source == AINPUT_SOURCE_MOUSE && action != AMOTION_EVENT_ACTION_DOWN);
int max = min(AMotionEvent_getPointerCount(event), MAX_TOUCH);
for (motion_pointer = 0; motion_pointer < max; motion_pointer++)
if (keyup && motion_pointer < MAX_TOUCH)
{
if (!keyup)
memmove(pointer + motion_pointer, pointer + motion_pointer + 1, (MAX_TOUCH - motion_pointer - 1) * sizeof(struct input_pointer));
if (pointer_count > 0)
pointer_count--;
}
else
{
int pointer_max = min(AMotionEvent_getPointerCount(event), MAX_TOUCH);
for (motion_pointer = 0; motion_pointer < pointer_max; motion_pointer++)
{
x = AMotionEvent_getX(event, motion_pointer);
y = AMotionEvent_getY(event, motion_pointer);
@ -186,12 +192,6 @@ static void android_input_poll(void *data)
pointer_count = max(pointer_count, motion_pointer + 1);
}
else
{
memmove(pointer + motion_pointer, pointer + motion_pointer + 1, (MAX_TOUCH - motion_pointer - 1) * sizeof(struct input_pointer));
if (pointer_count > 0)
pointer_count--;
}
}
}

View File

@ -178,6 +178,34 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
}
}
else if (strstr(name_buf, "TTT THT Arcade console 2P USB Play"))
{
/* same as Rumblepad 2 - merge? */
keycode_lut[AKEYCODE_BUTTON_1] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_2] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_5] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_6] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_BUTTON_7] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_8] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
/* unsure about pad 2 still */
shift = 8 + ((port + 1) * 8);
keycode_lut[AKEYCODE_BUTTON_11] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_12] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_13] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_14] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_15] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_16] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_C] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
}
else if (strstr(name_buf, "Madcatz"))
{
if (strstr(name_buf, "PC USB Wired Stick"))
@ -218,17 +246,60 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
}
}
else if (strstr(name_buf, "HuiJia USB GamePad"))
else if (strstr(name_buf, "Zeemote"))
{
if (strstr(name_buf, "Steelseries free"))
{
keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_Y] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_MODE] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
keycode_lut[AKEYCODE_BUTTON_L1] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
}
}
else if (strstr(name_buf, "HuiJia USB GamePad") ||
strstr(name_buf, "Smartjoy Family Super Smartjoy 2"))
{
keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
if (strstr(name_buf, "Smartjoy Family Super Smartjoy 2"))
{
keycode_lut[AKEYCODE_BUTTON_5] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_6] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
}
else if (strstr(name_buf, "HuiJia USB GamePad"))
{
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
}
keycode_lut[AKEYCODE_BUTTON_2] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_1] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_7] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_8] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
}
else if (strstr(name_buf, "Jess Tech Dual Analog Rumble Pad"))
{
/* Saitek Rumble P480 */
keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_1] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_2] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_5] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_7] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_BUTTON_6] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_8] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_11] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift);
keycode_lut[AKEYCODE_BUTTON_12] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift);
}
else if (strstr(name_buf, "Microsoft"))
{
if (strstr(name_buf, "Dual Strike"))
@ -243,7 +314,8 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
keycode_lut[AKEYCODE_BUTTON_8] |= ((RETRO_DEVICE_ID_JOYPAD_R) << shift);
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_L2) << shift);
}
else if (strstr(name_buf, "SideWinder") || strstr(name_buf, "X-Box"))
else if (strstr(name_buf, "SideWinder") || strstr(name_buf, "X-Box") ||
strstr(name_buf, "Xbox 360 Wireless Receiver"))
{
if (strstr(name_buf, "SideWinder"))
{
@ -254,7 +326,8 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
keycode_lut[AKEYCODE_BUTTON_Z] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_BUTTON_C] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
}
else if (strstr(name_buf, "X-Box 360") || strstr(name_buf, "X-Box"))
else if (strstr(name_buf, "X-Box 360") || strstr(name_buf, "X-Box")
|| strstr(name_buf, "Xbox 360 Wireless Receiver"))
{
/* TODO: left and right triggers for Xbox 1*/
keycode_lut[AKEYCODE_BUTTON_SELECT] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
@ -406,6 +479,18 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
keycode_lut[AKEYCODE_BUTTON_THUMBL] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift);
keycode_lut[AKEYCODE_BUTTON_THUMBR] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift);
}
else if (strstr(name_buf, "2-Axis , 8 -Button"))
{
/* Genius MaxFire G-08XU */
keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_C] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_Y] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_Z] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_BUTTON_L1] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
}
else if (strstr(name_buf, "USB,2-axis 8-button gamepad") ||
strstr(name_buf, "BUFFALO BGC-FC801"))
{
@ -556,36 +641,57 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
}
else if (strstr(name_buf, "Broadcom Bluetooth HID"))
{
/* TODO: unsure about Select button here */
/* TODO: hookup right stick
* RStick Up: 37
* RStick Down: 39
* RStick Left:38
* RStick Right: 40 */
if ((g_settings.input.icade_count +1) < 4)
{
g_settings.input.icade_count++;
/* Red Samurai */
keycode_lut[AKEYCODE_W] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_S] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_A] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
keycode_lut[AKEYCODE_D]|= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift);
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
keycode_lut[AKEYCODE_DPAD_RIGHT]|= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift);
keycode_lut[AKEYCODE_BACK] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_ENTER] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
keycode_lut[AKEYCODE_9] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift);
keycode_lut[AKEYCODE_0] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift);
keycode_lut[AKEYCODE_5] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_6] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_7] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_8] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
switch(g_settings.input.icade_profile[g_settings.input.icade_count])
{
case ICADE_PROFILE_RED_SAMURAI:
/* TODO: unsure about Select button here */
/* TODO: hookup right stick
* RStick Up: 37
* RStick Down: 39
* RStick Left:38
* RStick Right: 40 */
/* unsure if the person meant the SNES-mapping here or whether it's the pad */
keycode_lut[AKEYCODE_1] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_2] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_3] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_4] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
/* Red Samurai */
keycode_lut[AKEYCODE_W] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_S] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_A] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
keycode_lut[AKEYCODE_D]|= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift);
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
keycode_lut[AKEYCODE_DPAD_RIGHT]|= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift);
keycode_lut[AKEYCODE_BACK] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_ENTER] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
keycode_lut[AKEYCODE_9] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift);
keycode_lut[AKEYCODE_0] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift);
keycode_lut[AKEYCODE_5] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_6] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift);
keycode_lut[AKEYCODE_7] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_8] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
/* unsure if the person meant the SNES-mapping here or whether it's the pad */
keycode_lut[AKEYCODE_1] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_2] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_3] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_4] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
break;
case ICADE_PROFILE_IPEGA_PG9017:
/* Todo: diagonals - patchy? */
keycode_lut[AKEYCODE_BUTTON_1] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift);
keycode_lut[AKEYCODE_BUTTON_2] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift);
keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift);
keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift);
keycode_lut[AKEYCODE_BUTTON_5] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift);
keycode_lut[AKEYCODE_BUTTON_6] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
keycode_lut[AKEYCODE_BUTTON_9] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift);
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
break;
}
}
}
else if (strstr(name_buf, "USB Gamepad") || strstr(name_buf, "DragonRise"))
{

View File

@ -21,6 +21,11 @@
#define AKEY_EVENT_NO_ACTION 255
enum {
ICADE_PROFILE_RED_SAMURAI = 0,
ICADE_PROFILE_IPEGA_PG9017,
} icade_profile_enums;
enum {
AKEYCODE_META_FUNCTION_ON = 8,
AKEYCODE_ESCAPE = 111,

View File

@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.retroarch"
android:versionCode="10"
android:versionName="0.9.8.1" >
android:versionCode="11"
android:versionName="0.9.8.3" >
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
<uses-sdk
@ -21,7 +21,10 @@
</intent-filter>
</activity>
<activity android:name="org.retroarch.browser.DisplayRefreshRateTest"></activity>
<activity android:name="org.retroarch.browser.RefreshRateSetOS"></activity>
<activity android:name="org.retroarch.browser.SettingsActivity"></activity>
<activity android:name="org.retroarch.browser.HelpActivity"></activity>
<activity android:name="org.retroarch.browser.DirectoryActivity"></activity>
<activity android:name="org.retroarch.browser.ROMActivity"></activity>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="Enabling rewind will double the system requirements of a core (conservative ballpark figure here). It is NOT recommended that you turn on rewind with any core unless you know your device is capable of running said core at twice (or more) its full (realtime) speed.\n\n " />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="NOTE: The original version of Cave Story/Doukutsu Monogatari was released as freeware back in 2004.\n\nGo to this repository: https://github.com/libretro/nxengine-libretro\n\nDownload the entire 'datafiles' directory there and copy it to your device. Select 'NXEngine (Cave Story)' from the 'Select a Libretro Core' screen and select 'doukutsu.exe' (this file should be in the root of the datafiles directory that you just copied over). On first boot-up it will extract needed files from the EXE file to disk - this will be a one-time procedure and will take slightly longer than all subsequent boots. After this is done you can play." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="NOTE: To run Prboom, you need to load a Doom WAD file. However, to run any Doom WAD file with Prboom, you'll also need a special WAD file in that folder called prboom.wad\n\nGo to this repository: https://github.com/libretro/libretro-prboom\n\nCopy the prboom.wad file to your device and put it in the same directory as the Doom WAD you're trying to play." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="Neo Geo games should be played with the Final Burn Alpha core. To run any Neo Geo games, you will need a BIOS file placed in the same directory as the game you want to play. The name of the BIOS file is 'neogeo.zip'. If it still doesn't work even with this BIOS file placed in the same directory, then either your ROM files are outdated or your Neo-Geo BIOS file is." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="If Neo Geo games start up with a 'VIDEO RAM ERROR', then this indicates that rewind is enabled. Neo Geo games with the Final Burn Alpha core can't currently be played with rewind enabled. If you have the Rewinding option enabled, disable it in the Settings menu and then try the game again." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="NOTE: To play PC Engine CD games, you will need a BIOS file called 'syscard3.pce' placed in the same directory as the game you want to play."/>
</LinearLayout>

View File

@ -0,0 +1,14 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="Tegra 2 CPUs don't have NEON SIMD capabilities. Because of that, PCSX ReARMed will use an 'inferior' graphics plugin that doesn't look as good as the NEON GPU plugin. Nothing can be done about this other than get yourself a newer device so that you can enjoy the NEON version of PCSX ReARMed. Note - the NEON version of PCSX ReARMed is only shown in the list on devices that have a CPU with NEON support."
/>
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="If a game doesn't work with the PS1 emulator (PCSX ReARMed), you should be aware that there are two modes of operation -\n\n* HLE BIOS - If you do NOT have any BIOS files placed in the same directory as the game you're trying to load, then PCSX ReARMed will be in this mode. In this mode, you don't need a BIOS but game compatibility will be lower and some games will simply not play.\n\n* REAL BIOS - If you have BIOS files placed in the same directory as the game you're trying to load, then PCSX ReARMed will be in this mode. With a real BIOS, most games that previously didn't work before or had problems should work properly.\n\nNOTE: The BIOS files that it looks for are:\n\nscph1001.bin\n\nscph5500.bin\n\nscph5501.bin\n\nscph5502.bin\n\nscph7502.bin" />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="NOTE: To play Sega CD/Mega CD games, you will need to have BIOS files placed in the same directory as the game you want to play. They should be named as follows:\n\n* bios_CD_E.bin\n\n* bios_CD_U.bin\n\n* bios_CD_J.bin\n\nIn case it needs any explaining, bios_CD_E.bin is the Mega CD EU BIOS, bios_CD_U.bin is the Sega CD US BIOS, and bios_CD_J.bin is the Mega CD Japanese BIOS."/>
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="There can be two reasons for this:\n\na) Either your device is not powerful enough to run the core you've selected at fullspeed.\n\nb) The refresh rate of the screen that your device reports is wrong. More on b) below.\n\n== REFRESH RATES AND RETROARCH ==\n\nUnlike other emulators, RetroArch does not use frameskipping. To get smooth gameplay and sound that are remotely close to the original hardware, RetroArch Android uses static synchronization. If you notice any skipping music or 'jerkiness' - rest assured it's not our code - it's likely that your device reports a wrong refreshrate to the OS (Android in this case). For instance, certain devices like the Note 2 have refresh rates below 60Hz.\n\nTo get any decent audio and video out of any application, you will have to synchronize the game's refresh rate with that of your screen - if the refresh rate cannot be properly synchronized, you will get bad audio pops and video glitchiness.\n\nThe problem is that a good many Android devices 'report' the wrong refresh rate to Android. The Samsung Galaxy S3 is known for doing this - it reports a 60Hz refresh rate when it isn't (the Note 2 for instance has a 58Hz screen but at least reports it correctly). So, because it 'reports' a wrong refresh rate, RetroArch will not yield good results.\n\nIf you experience any audio pops on cores that should be running fullspeed on your device, you should go with manual synchronization. To do this, you can start by calcuating your screens refresh rate with the 'Calibrate refresh rate' setting. This option can give a good guess, but for best results you should edit the value it returns in the 'Forced refresh rate (Hz)' option and set it manually - start at the value it returns and if it still audio pops/crackles, raise or lower the value (0.01 intervals is a good place to start) until you hit a sweet spot.\n\nIf you think your device reports the correct value, you can use that instead by selecting the 'Set OS-reported refresh rate' option instead.\n\nWith a bit of experimentation you can get this right easily - I am running games on a single-core Cortex A8 device (1.2GHz - Allwinner A10) and I get no sound pops or any video glitchiness at all in most cores. So this is entirely a refresh rate issue that you can overcome easily on most devices by doing what I state above." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="The following pads have been added to the autodetection list:\n\n* Logitech/Logicool Rumblepad 2\n* Microsoft Sidewinder USB (ISSUE - diagonals not working).\n* Microsoft Xbox 360 Wired/Wireless (ISSUE - diagonals not working).\n* PS3 Sixaxis/DualShock 3 (using either USB or Dancingpixelstudios' IME app)\n* MOGA (using either 'root' gamepad mode or official IME app)\n* JXD S5110\n* Snakebyte idroid\n* Logitech Dual Action\n* Mayflash Super Joy Box 3 Pro\n*RetroUSB SNES RetroPort\n*RetroUSB NES RetroPad\n*Buffalo SNES Pad\n* Elecom PS1/PS2 to USB\n* Archos gamepad\n* Xbox 1 (Titanium X-Joy Converter) (ISSUE - diagonals not working).\n* Red Samurai (IME app Bluetooth or gamepad mode\n* Xperia Play\n* Trust Raptor\n* Logitech F710\n* DragonRise USB\n* Madcatz PS3 fighting stick (TODO - TEST)\n* iPega (iCade profile)\n* PC2JAMMA-USB (TODO - TEST)\n* Genius MaxFire G-08XU\n* Zeemote Steelseries\n* Saitek Rumblepad\n* Super Smart Joy\n* Groupwise PS2 to USB converter\n* Toodles 2008 Chimp\n* Sega Saturn USB pad\n*Mayflash Wii Classic\n* Mayflash PS2 to USB\n* Nintendo Wii (using ccpcreations.WiiUse IME app)\n* Nyko Playpad Pro" />
</LinearLayout>

View File

@ -0,0 +1,28 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="The system requirements differ per Libretro core. The recommended system requirements mentioned below are for reaching fullspeed in most games (if you get any audio pops/crackles, then please read 'Why do games sound choppy on my device?'): \n
* SNES9X Next [Super Nintendo] : Dual-core ARM Cortex A9 CPU or higher. Yoshi's Island and other SuperFX games might need higher system requirements.\n
* VBA Next [Game Boy Advance] : At least a dual-core ARM Cortex A9 CPU or higher.\n
* FCEUmm [Nintendo NES] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* NEStopia [Nintendo NES] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* Gambatte [GameBoy/Game Boy Color] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* Final Burn Alpha [Arcade] : Performance varies based on the game you want to play. Systems like CPS2 and Neogeo have been tested to run at fullspeed on an ARM Cotex A8 single-core CPU. CPS3 games need a dual-core ARM Cortex A9-based CPU. Your mileage with other games may vary.\n
* Genesis Plus GX [Sega Genesis/Sega CD/Master System/SG-1000] : Has been tested o run at fullspeed on an ARM Cortex A8 single-core CPU for most games. Virtua Racing will need a dual-core ARM Cortex A9-based CPU.\n
* NX Engine [Cave Story] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU. Note - sound is currently imperfect in this core.\n
* PCSX ReARMed [PlayStation1] : Most games will run fullspeed on an ARM Cortex A8 single-core CPU. Higher-resolution interlaced games (such as Tekken 3, Tobal 2, Dead or Alive 1) will need at least a dual-core ARM Cortex A9 CPU and up.\n
* Prboom [DOOM] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* Mednafen NGP [NeoGeo Pocket Color] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* Mednafen WonderSwan [WonderSwan] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
* Mednafen Virtual Boy [Virtual Boy] : Dual-core ARM Cortex A9 CPU or higher.\n
* Mednafen PC Engine [PC Engine] : Has been tested to run at fullspeed on an ARM Cortex A8 single-core CPU.\n
" />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="In layman's terms, a 'Libretro core' is something you use to either:\n\na) Play games meant for a specific 'simulated' system (i.e. an emulator)\n\nb) Play games meant for a specific game engine (ie. Doom [Prboom], Cave Story [NXEngine]).\n\nLibretro cores will not play any games by themselves - just like how a games console needs a DVD or a cartridge to play a game, so too does a Libretro core either need 'ROM files' or a 'CD ISO' image in order to play games with it." />
</LinearLayout>

View File

@ -0,0 +1,104 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="
r11 (Feb 11, 2013)\n\n
* [FBA core] Various changes/fixes\n
- Hook up Armed Police Batrider controls\n
- Afterburner - make fire buttons work\n
- Hook up Bad Dudes controls\n
- Hook up Cyberbots controls\n
- Hook up 1942 controls\n
- Add missing Chase HQ controls\n
- Add missing WWF Wrestlefest controls\n
- EEPROM save should now work (tested with EEPROM-based system such as Capcom CPS2)\n
- Samples are now looked for - should be in 'samples' subdirectory\n
- Hiscore files should now be read from/written to.\n
* [SNES9x Next] Added big speed hack for Star Fox 1 - makes it fast enough for it to run at fullspeed on the Wii.\n
* New 'Calibrate Refresh Rate' option - use this to get an accurate estimation of your screen refresh rate. NOTE: Touch the screen at all times during calibration for more accurate measurements. You might have to slightly tweak the value later on for the best results.\n
* Added a 'Set OS-reported refresh rate' which should do the same as what 'Sync refreshrate to Screen' previously did. Note 2 users might get better results with this than they will with 'Calibrate refresh rate'.\n
* Added a built-in help system that should answer a lot of the frequently asked questions.\n
* Add iCade profiles - two added for now - iPega and Red Samurai\n
* [Android] Audio resampler now faster\n
* Input autodetection expanded -\n
- PC2JAMMA-USB (needs to be tested)\n
- Genius MaxFire G-08XU\n
- Zeemote Steelseries\n
- Saitek Rumblepad\n
- Super Smart Joy\n
\n
r10 (Feb 5, 2013)\n\n
* [NXEngine / Cave Story] Fixed bug where moving blocks would not move in Labyrinth levels\n
* Add new psx and GBA overlays by user boxs.\n
* Should fix some touchscreen control issues.\n
\n
r9 (Feb 4, 2013)\n\n
* Better multi-touch controls.\n
* Ability to set opacity of overlays.\n
* Shaders bundled (NOTE: need Tegra 4/Exynos5-class GPU for good results).\n
* Input autodetection expanded -\n
- Xperia Play (now properly tested on an r800i)\n
- Madcatz PS3 fighting stick\n
- Moga IME app (previously would work only on rooted devices with gamepad mode)\n
* Doesn't extract the assets everytime you go to the menu but only when you first install the new APK - was causing lots of garbage collector overhead.\n
* FBA core - fixed a serious bug causing graphic glitches.\n
* Nestopia core - use mono sound like the real NES.\n
* Genesis Plus GX - Lunar Eternal Blue (JP) works again.\n
\n
r8 (Jan 30, 2013) - VERSION 0.9.8.1\n\n
* Is now compatible with Android version 2.3 and up.\n
* Back button issues with certain gamepads should now be fixed.\n
* Wonderswan core was broken (Mednafen Wonderswan) - is now fixed.\n
* 'Detect' button for manual input binding for touchless devices.\n
* Old overlays are back and put into a directory called 'Low-resolution' for devices with slower CPUs - the higher-resolution ones are somewhat more demanding than the original 256x256 ones.\n
* Input autodetection expanded -\n
- DragonRise USB Gamepad\n
\n
r6 (Jan 29, 2013)\n\n
* PlayStation1 [PCSX ReARMed] core fixes (from notaz)\n
- Fixes 50Hz PAL games (were running with sound being too fast and other irregularities before)\n
- Should fix emu crashing on some devices due to memory mapping issues.\n
* New system-specific overlays added - on new installs only these new ones will be there and the old bad ones will no longer be there. On pre-existing installs - just use the new ones - they should be much better. If you're still unsatisfied, nothing is stopping you from editing these files yourself with a text editor and an image editor - it's really simple to do.\n
* New 'custom binding' when you turn off 'Configuration Autodetect Enable' - allows you to manually put in button mapping in case we don't support your pad. Note - it's probably more reliable right now to select the 'keycode' from the dropdown list instead of pressing the button on the pad.\n
- Input autodetection expanded -\n
- Trust Raptor\n
- Should fix Logitech F710/Elecom/RetroUSB NES/etc\n
\n
r5 (Jan 28, 2013)\n\n
* Input autodetection expanded\n
- Archos gamepad\n
- Xperia Play\n
- Xbox 1 (Titanium X-JoyConverter)\n
- Xbox 360 (wired)\n
- Red Samurai Bluetooth\n
- Another variant of Mayflash Wii Classic\n
- RetroUSB SNES RetroPort\n
- RetroUSB NES RetroPad\n
- Buffalo SNES Pad\n
- Logicool F710 (Japanese Logitech F710)\n
- Elecom PS1/PS2 to USB\n
\n
r4 (Jan 27, 2013)\n\n
* Input autodetection expanded\n
- Nyko Playpad Pro\n
* Fixed bug where device name would not be onscreen for long enough - useful for reporting input name\n
\n
r3 (Jan 26, 2013)\n\n
* More user-friendly core selection names\n
* Input autodetection expanded\n
- Added Mayflash Super Joy Box 3 Pro\n
- Added JXD S5110\n
- Added Logitech Dual Action\n
- Added Snakebyte idroid\n
\n
r2\n\n
* Initial release." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="RetroArch Android is not a 'game'. What it is, however, is an 'engine' that allows you to run emulators and game engines.\n\nEmulators can play games that were made for the systems the emulator tries to simulate. For example, a SNES emulator can play SNES games in the form of files that are commonly referred to as 'ROM images'.\n\nDue to legalese, RetroArch Android does NOT come with ROMs or copyrighted material of any kind. Said material must be provided by yourself. DO NOT REQUEST WHERE TO GET ROMS. ANY E-MAILS RE: ROM REQUESTS WILL BE IGNORED.\n\nGame engine ports allow you to play specific games - for instance, prBoom is a game engine for the DOOM games, while NX-Engine is a game engine that can play Cave Story. To play these games, you must often provide the original datafiles of the game or else they will not work. The instructions as to how to play these 'game engines' differ per core." />
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="All these shaders came from the RetroArch versions on PlayStation3, Xbox 360 and PC. Compared to those systems, the GPUs in Android devices are very, very weak.\n\nThis problem will solve itself as Android devices will start getting more powerful GPUs. An example of a SoC that might handle most shaders at fullspeed would be the Tegra 4 with its 72-core GPU."/>
</LinearLayout>

View File

@ -0,0 +1,57 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="NOTE: Prboom only supports MP3 soundtracks right now. To have the game use MP3 files, the files must be correctly named and should be placed in the same directry as the WAD file.\n\nHere is a listing of the files that are looked for by Prboom when trying to playback music in-game.\n\n== FOR DOOM 1/ULTIMATE DOOM ==\n\ne1m1.mp3\n\ne1m2.mp3\n\ne1m3.mp3\n\ne1m4.mp3\n\ne1m5.mp3\n\ne1m6.mp3\n\ne1m7.mp3\n\ne1m8.mp3\n\ne1m9.mp3\n\n
e2m1.mp3\n\n
e2m2.mp3\n\n
e2m3.mp3\n\n
e2m4.mp3\n\n
e2m5.mp3\n\n
e2m6.mp3\n\n
e2m7.mp3\n\n
e2m8.mp3\n\n
e2m9.mp3\n\n
e3m1.mp3\n\n
e3m2.mp3\n\n
e3m3.mp3\n\n
e3m4.mp3\n\n
e3m5.mp3\n\n
e3m6.mp3\n\n
e3m7.mp3\n\n
e3m8.mp3\n\n
intermid1.mp3\n\n
intro.mp3\n\n
bunny.mp3\n\n
victor.mp3\n\n
\n\n
== FOR DOOM 2 ==\n\n
stalks.mp3\n\n
runnin.mp3\n\n
countd.mp3\n\n
betwee.mp3
doom.mp3\n\n
the_da.mp3\n\n
shawn.mp3\n\n
ddtblu.mp3\n\n
in_cit.mp3\n\n
dead.mp3\n\n
romero.mp3\n\n
messag.mp3\n\n
ampie.mp3\n\n
tense.mp3\n\n
openin.mp3\n\n
evil.mp3\n\n
ultima.mp3\n\n
read_m.mp3\n\n
dm2ttl.mp3\n\n
dm2int.mp3"
/>
</LinearLayout>

View File

@ -0,0 +1,21 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="Most likely reason is that it hasn't been added yet to the autodetection list. You can help us out with this by doing the following steps:\n\n
1. Go back to the main menu, bring up the popup menu. Select 'Settings' and go to 'Input Settings'.\n\n
2. Make sure that 'Debug Input Reporting Enable' is disabled.\n\n
3. After that, start up a game with any emu (doesn't matter which). The first thing I need to know exactly is the message that appears when you first press a button on the pad. It should say something like -\n\n'HID %somename here%'\n\n
3b. IF 3 FAILS - Another way you can give us the name of the pad is to do 'adb logcat' on the commandline from your PC (or for developers, use Eclipse). Connect a USB/BT/whatever device and it should show something like this (example here with a Rumblepad 2:\n\nI/EventHub( 175): New device: id=6, fd=106, path='/dev/input/event2', name='Logitech Logitech RumblePad 2 USB', classes=0x80000141, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false\n\nI/InputReader( 175): Device added: id=6, name='Logitech Logitech RumblePad 2 USB', sources=0x01000511\n\n
4. (EXTRA STEP IN CASE YOU ARE USING A BLUETOOTH PAD) - Go to the main menu, bring up the Popup menu and click on 'Report IME'. Write down what it says in the dialog box. We will be needing this information from you.\n\n
4. Enable 'Debug Input Reporting Enable'.\n\n
5. The next few things I need to know is the keycode that each button on your pad will now report 'onscreen'. Every time you press a button, it will show you a message onscreen with the keycode for each button.\n\n
6. Send your results to libretro@gmail.com. MAKE SURE THAT YOU HAVE FOLLOWED ALL PREVIOUS STEPS. If you have provided all the information we need, somebody can then add it to the autodetection list.\n\nIn the meantime, in case your pad is not added yet to the autodetection list, you could try manually setting up controls. To do this, you will need to disable 'Configuration Autodetect' in Settings -> Input Settings." />
</LinearLayout>

View File

@ -0,0 +1,14 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="If the PS1 emulator [PCSX ReARMed] does not show up in the Main Menu, then chances are that your Android device has an MIPS or x86-based CPU. PCSX ReARMed is exclusive to ARM-based Android devices (which happens to be the vast majority of all devices out)."
/>
</LinearLayout>

View File

@ -0,0 +1,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40px"
android:text="VBA Next is an emulator that is based on VBA-M. This is a more accurate emulator than most, but it's also much slower. Unfortunately, while VBA Next seems to run very well even on a Nintendo Wii, it seems that as of this minute even medium heavyweight Android devices can't compete with a Nintendo Wii in terms of runtime performance.\n\nThere will be another Game Boy Advance core added shortly that will be a lot faster than VBA Next and will compete directly with Gameboid and other emus of this ilk. NOTE - Gameboid and those 'other emus' are based on the open-source emulator gpSP - which is also the emulator we will be basing this new faster core on." />
</LinearLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/rarch_settings" android:title="@string/rarch_settings" android:showAsAction="ifRoom" />
<item android:id="@+id/help" android:title="@string/help"></item>
<item android:id="@+id/input_method_select" android:title="@string/input_method" android:showAsAction="ifRoom" />
<item android:id="@+id/report_ime" android:title="@string/report_ime"></item>
<item android:id="@+id/report_refreshrate" android:title="@string/report_refreshrate"></item>

View File

@ -19,6 +19,16 @@
<item>1.60000</item>
<item>1.14286</item>
</string-array>
<string-array name="icade_profiles">
<item>Red Samurai</item>
<item>iPega PG-9017</item>
</string-array>
<string-array name="icade_profiles_values">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="fbo_scales">
<item>1.0x</item>
@ -249,4 +259,4 @@
<item>MUSIC</item>
<item>CALCULATOR</item>
</string-array>
</resources>
</resources>

View File

@ -4,7 +4,7 @@
<string name="input_method">Input Method</string>
<string name="file_type_icon">File type icon</string>
<string name="video_settings">Video Settings</string>
<string name="rarch_settings">RetroArch Settings</string>
<string name="rarch_settings">Settings</string>
<string name="audio_settings">Audio Settings</string>
<string name="input_settings">Input Settings</string>
<string name="general_settings">General Settings</string>
@ -14,6 +14,7 @@
<string name="overlay_guide">Overlay How-to Guide</string>
<string name="key_bind_title">Select the button to use</string>
<string name="key_bind_clear">Unbind</string>
<string name="help">Help</string>
<string name="report_ime">Report IME</string>
<string name="report_refreshrate">Report Refresh Rate</string>
<string name="key_bind_detect">Detect</string>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Help" >
<PreferenceScreen android:title="What's New?" >
<PreferenceCategory android:title="What's New?" android:layout="@layout/faq_whats_new" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Where are the games?" >
<PreferenceCategory android:title="Where are the games?" android:layout="@layout/faq_where_are_the_games" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="What is a 'Libretro core'?" >
<PreferenceCategory android:title="What is a 'Libretro core'?" android:layout="@layout/faq_what_is_a_libretro_core" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Libretro core system requirements" >
<PreferenceCategory android:title="Libretro core system requirements" android:layout="@layout/faq_system_requirements" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why do games sound choppy on my device?" >
<PreferenceCategory android:title="Games sound choppy on my device?" android:layout="@layout/faq_sound_choppy" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why are the shaders so slow on my device?" >
<PreferenceCategory android:title="Why are the shader so slow on my device?" android:layout="@layout/faq_why_are_the_shaders_so_slow" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Games are slow with rewind. Why?" >
<PreferenceCategory android:title="With rewind enabled, games are slow. Why?" android:layout="@layout/faq_games_are_slow_with_rewind_why" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why doesn't it autodetect my gamepad?" >
<PreferenceCategory android:title="Why doesn't it autodetect my gamepad?" android:layout="@layout/faq_why_doesnt_it_autodetect_my_gamepad" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="How do I run Prboom/DOOM?" >
<PreferenceCategory android:title="How do I run Prboom/DOOM?" android:layout="@layout/faq_how_do_i_run_prboom" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="How do I run NXEngine/Cave Story?" >
<PreferenceCategory android:title="How do I run NXEngine/Cave Story?" android:layout="@layout/faq_how_do_i_run_cave_story" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why does DOOM have no music?" >
<PreferenceCategory android:title="Why does DOOM have no music?" android:layout="@layout/faq_why_does_prboom_have_no_music" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why doesn't my Neo Geo game work in Final Burn Alpha?" >
<PreferenceCategory android:title="Why doesn't my PS1 game work?" android:layout="@layout/faq_neo_geo_game_doesnt_work" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Neo Geo game in FBA shows Video RAM error. Why?" >
<PreferenceCategory android:title="Neo Geo game in FBA shows Video RAM error. Why?" android:layout="@layout/faq_neo_geo_game_in_fba_shows_video_ram_err_why" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why doesn't the PS1 core [PCSX ReARMed] show up in the list?" >
<PreferenceCategory android:title="Why doesn't the PS1 core [PCSX ReARMed] show up in the list?" android:layout="@layout/faq_why_doesnt_the_ps1_core_show_up_in_the_list" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="PS1 core looks bad on my Tegra 2, why?" >
<PreferenceCategory android:title="PS1 core looks bad on my Tegra 2, why?" android:layout="@layout/faq_ps1_core_looks_bad_on_my_tegra_2_why" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why doesn't my PS1 game work?" >
<PreferenceCategory android:title="Why doesn't my PS1 game work?" android:layout="@layout/faq_ps1_game_doesnt_work" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why doesn't my Sega CD game work?" >
<PreferenceCategory android:title="Why doesn't my Sega CD game work?" android:layout="@layout/faq_sega_cd_game_doesnt_work" >
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Why is VBA Next/Game Boy Advance so slow compared to other emus ?" >
<PreferenceCategory android:title="Why is VBA Next/Game Boy Advance so slow compared to other emus?" android:layout="@layout/faq_why_is_gba_so_slow" >
</PreferenceCategory>
</PreferenceScreen>
</PreferenceScreen>

View File

@ -18,7 +18,8 @@
android:key="savefile_directory_enable"
android:defaultValue="false"/>
<Preference android:title="Savefile directory"
android:summary="Sets directory where to save and load game save files.">
android:summary="Sets directory where to save and load game save files."
android:dependency="savefile_directory_enable">
<intent
android:targetClass="org.retroarch.browser.SRMDirActivity"
android:targetPackage="org.retroarch" />
@ -30,7 +31,8 @@
android:key="savestate_directory_enable"
android:defaultValue="false"/>
<Preference android:title="Save state directory"
android:summary="Sets directory where to save and load game save states.">
android:summary="Sets directory where to save and load game save states."
android:dependency="savestate_directory_enable">
<intent
android:targetClass="org.retroarch.browser.StateDirActivity"
android:targetPackage="org.retroarch" />
@ -65,16 +67,6 @@
android:key="video_vsync"
android:summary="When set to enabled, prevents screen tearing."
android:title="VSync" />
<CheckBoxPreference
android:defaultValue="true"
android:key="video_sync_refreshrate_to_screen"
android:summary="Synchronize RetroArch's refresh rate to the screen's refresh rate (recommended - some screens have refresh rates below 59.95Hz and need this enabled to get good audio/video sync)."
android:title="Sync refreshrate to screen" />
<EditTextPreference
android:key="video_refresh_rate"
android:summary="Force a specific refresh rate to be detected. Only use if auto-detection of refresh rate reports wrong refresh rate."
android:title="Forced refresh rate (Hz)"
android:numeric="decimal" />
<CheckBoxPreference
android:defaultValue="true"
android:key="video_allow_rotate"
@ -88,6 +80,28 @@
android:summary="Aspect ratio to enforce."
android:title="Aspect ratio" />
</PreferenceCategory>
<PreferenceCategory android:title="Synchronization" >
<EditTextPreference
android:key="video_refresh_rate"
android:numeric="decimal"
android:summary="Force a specific refresh rate to be detected. Only set manually if calibration reports wrong refresh rate."
android:title="Forced refresh rate (Hz)" />
<Preference
android:summary="Attempts to find the true refresh rate of monitor. Updates value in &apos;Force refresh rate (Hz)&apos; option. To help ensure accuracy, make sure no intense background services are running, and avoid triggering screensaver."
android:title="Calibrate refresh rate" >
<intent
android:targetClass="org.retroarch.browser.DisplayRefreshRateTest"
android:targetPackage="org.retroarch" />
</Preference>
<Preference
android:summary="Sets refresh rate equal to OS-reported value. This might not be accurate for your phone."
android:title="Set OS-reported refresh rate" >
<intent
android:targetClass="org.retroarch.browser.RefreshRateSetOS"
android:targetPackage="org.retroarch" />
</Preference>
</PreferenceCategory>
<PreferenceCategory android:title="Shaders (1st pass)" >
<CheckBoxPreference
android:defaultValue="true"
@ -95,14 +109,15 @@
android:summary="Applies Bilinear filtering, smooths out edges (settings still apply even if no shader is selected)."
android:title="Bilinear filter" />
<CheckBoxPreference
android:summary="Enable first pass shader (WARNING: recommended system requirements for these shaders is a Tegra 4/Exynos5 class GPU and/or higher)."
android:summary="Enable first pass shader (WARNING: recommended system requirements for these shaders is a Tegra 4/Exynos5 class GPU and/or higher)."
android:defaultValue="false"
android:key="video_shader_enable"
android:title="Enable" />
<Preference
android:summary="Sets GLES2 style XML shader."
android:title="XML shader" >
android:summary="Sets GLES2 style XML shader."
android:title="XML shader"
android:dependency="video_shader_enable" >
<intent
android:targetClass="org.retroarch.browser.ShaderActivity"
android:targetPackage="org.retroarch" />
@ -117,12 +132,13 @@
<CheckBoxPreference
android:defaultValue="false"
android:key="video_second_pass_shader_enable"
android:summary="Enable custom shader for use after rendering to FBO (WARNING: recommended system requirements for these shaders is a Tegra 4/Exynos5 class GPU and/or higher)."
android:summary="Enable custom shader for use after rendering to FBO (WARNING: recommended system requirements for these shaders is a Tegra 4/Exynos5 class GPU and/or higher)."
android:title="Enable shader #2" />
<Preference
android:summary="Sets shader to use for second pass."
android:title="XML shader (2nd pass)" >
android:title="XML shader (2nd pass)"
android:dependency="video_second_pass_shader_enable" >
<intent
android:targetClass="org.retroarch.browser.Shader2Activity"
android:targetPackage="org.retroarch" />
@ -157,7 +173,8 @@
android:defaultValue="true"
android:key="audio_rate_control"
android:summary="Enable dynamic rate control (recommended)."
android:title="Dynamic Rate Control" />
android:title="Dynamic Rate Control"
android:dependency="audio_enable" />
</PreferenceCategory>
</PreferenceScreen>
<PreferenceScreen android:title="Input Settings" >
@ -168,6 +185,34 @@
android:summary="This will attempt to preconfigure various gamepads and/or IME apps that you connect."
android:title="Enable"
android:disableDependentsState="true" />
<PreferenceScreen android:title="List of autodetected devices" >
<PreferenceCategory android:title="Configuration Autodetect - Supported Pads" android:layout="@layout/faq_supported_pads" >
</PreferenceCategory>
</PreferenceScreen>
<ListPreference
android:entries="@array/icade_profiles"
android:entryValues="@array/icade_profiles_values"
android:key="input_autodetect_icade_profile_pad0"
android:summary="Select the iCade profile to use for controller 1."
android:title="iCade profile Pad 1" />
<ListPreference
android:entries="@array/icade_profiles"
android:entryValues="@array/icade_profiles_values"
android:key="input_autodetect_icade_profile_pad1"
android:summary="Select the iCade profile to use for controller 2."
android:title="iCade profile Pad 2" />
<ListPreference
android:entries="@array/icade_profiles"
android:entryValues="@array/icade_profiles_values"
android:key="input_autodetect_icade_profile_pad2"
android:summary="Select the iCade profile to use for controller 3."
android:title="iCade profile Pad 3" />
<ListPreference
android:entries="@array/icade_profiles"
android:entryValues="@array/icade_profiles_values"
android:key="input_autodetect_icade_profile_pad3"
android:summary="Select the iCade profile to use for controller 4."
android:title="iCade profile Pad 4" />
</PreferenceCategory>
<PreferenceCategory android:title="Debug input reporting" >
<CheckBoxPreference
@ -185,7 +230,8 @@
<Preference
android:summary="Sets touchscreen overlay config."
android:title="Input overlay" >
android:title="Input overlay"
android:dependency="input_overlay_enable" >
<intent
android:targetClass="org.retroarch.browser.OverlayActivity"
android:targetPackage="org.retroarch" />
@ -193,7 +239,8 @@
<org.retroarch.browser.SeekbarPreference
android:summary="Set the opacity of the touch overlay."
android:title="Overlay opacity"
android:key="input_overlay_opacity" />
android:key="input_overlay_opacity"
android:dependency="input_overlay_enable" />
</PreferenceCategory>
<PreferenceCategory android:title="Custom Binds">
<PreferenceScreen

View File

@ -0,0 +1,126 @@
package org.retroarch.browser;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.SharedPreferences;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
public class DisplayRefreshRateTest extends Activity {
private class Renderer implements GLSurfaceView.Renderer {
private static final String TAG = "GLESRenderer";
private static final double WARMUP_SECONDS = 2.0;
private static final double TEST_SECONDS = 10.0;
// Test states
private static final int STATE_START = 0;
private static final int STATE_WARMUP = 1;
private static final int STATE_TEST = 2;
private static final int STATE_DONE = 3;
private static final int STATE_DEAD = 4;
private int mState = STATE_START;
private double mStartTime = 0.0;
private int mNumFrames = 0;
private Activity activity;
public Renderer(Activity activity) {
this.activity = activity;
}
private void setFPSSetting(double fps) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit = prefs.edit();
edit.putString("video_refresh_rate", Double.valueOf(fps).toString());
edit.commit();
}
@Override
public void onDrawFrame(GL10 gl) {
double t = System.nanoTime() * 1.0e-9;
switch (mState) {
case STATE_START:
mStartTime = t;
mState = STATE_WARMUP;
break;
case STATE_WARMUP:
if ((t - mStartTime) >= WARMUP_SECONDS) {
mStartTime = t;
mNumFrames = 0;
mState = STATE_TEST;
}
break;
case STATE_TEST:
mNumFrames++;
double elapsed = t - mStartTime;
if (elapsed >= TEST_SECONDS) {
double fps = (double)mNumFrames / elapsed;
Log.i(TAG, "Measured FPS to: " + fps);
setFPSSetting(fps);
mState = STATE_DONE;
}
break;
case STATE_DONE:
activity.runOnUiThread(new Runnable() {
public void run() {
finish();
}
});
mState = STATE_DEAD;
break;
case STATE_DEAD:
break;
}
float luma = (float)Math.sin((double)mNumFrames * 0.10);
luma *= 0.2f;
luma += 0.5f;
GLES20.glClearColor(luma, luma, luma, 1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// TODO Auto-generated method stub
}
}
private GLSurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "Touch the screen with your fingers for more accurate measurements.", Toast.LENGTH_LONG).show();
surfaceView = new GLSurfaceView(this);
surfaceView.setEGLConfigChooser(false);
surfaceView.setEGLContextClientVersion(2);
surfaceView.setRenderer(new Renderer(this));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setTitle("Refresh rate calibration");
setContentView(surfaceView);
}
@Override
protected void onDestroy() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String fps = prefs.getString("video_refresh_rate", "ERROR");
Toast.makeText(this, "Refresh rate measured to: " + fps + " Hz.", Toast.LENGTH_LONG).show();
super.onDestroy();
}
}

View File

@ -0,0 +1,17 @@
package org.retroarch.browser;
import org.retroarch.R;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
public class HelpActivity extends PreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.help);
PreferenceManager.setDefaultValues(this, R.xml.help, false);
}
}

View File

@ -0,0 +1,29 @@
package org.retroarch.browser;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
public class RefreshRateSetOS extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
final Display display = wm.getDefaultDisplay();
double rate = display.getRefreshRate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit = prefs.edit();
edit.putString("video_refresh_rate", Double.valueOf(rate).toString());
edit.commit();
Toast.makeText(this, "Using OS-reported refresh rate of: " + rate + " Hz.", Toast.LENGTH_LONG).show();
finish();
}
}

View File

@ -66,9 +66,16 @@ public class RetroArch extends Activity implements
private ConfigFile core_config;
private final double getDisplayRefreshRate() {
// Android is *very* likely to screw this up.
// It is rarely a good value to use, so make sure it's not
// completely wrong. Some phones return refresh rates that are completely bogus
// (like 0.3 Hz, etc), so try to be very conservative here.
final WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
final Display display = wm.getDefaultDisplay();
return display.getRefreshRate();
double rate = display.getRefreshRate();
if (rate > 61.0 || rate < 58.0)
rate = 59.95;
return rate;
}
private final double getRefreshRate() {
@ -176,10 +183,19 @@ public class RetroArch extends Activity implements
}
//extractAssets(assets, cacheDir, "", 0);
Log.i("ASSETS", "Extracting shader assets now...");
extractAssets(assets, cacheDir, "Shaders", 1);
Log.i("ASSETS", "Extracting overlay assets now...");
extractAssets(assets, cacheDir, "Overlays", 1);
Log.i("ASSETS", "Extracting shader assets now ...");
try {
extractAssets(assets, cacheDir, "Shaders", 1);
} catch (IOException e) {
Log.i("ASSETS", "Failed to extract shaders ...");
}
Log.i("ASSETS", "Extracting overlay assets now ...");
try {
extractAssets(assets, cacheDir, "Overlays", 1);
} catch (IOException e) {
Log.i("ASSETS", "Failed to extract overlays ...");
}
DataOutputStream outputCacheVersion = new DataOutputStream(new FileOutputStream(cacheVersion, false));
outputCacheVersion.writeInt(version);
@ -192,7 +208,6 @@ public class RetroArch extends Activity implements
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
config = new ConfigFile(new File(getDefaultConfigPath()));
@ -269,11 +284,37 @@ public class RetroArch extends Activity implements
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
this.registerForContextMenu(findViewById(android.R.id.content));
}
}
@Override
protected void onStart() {
super.onStart();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
if (!prefs.getBoolean("first_time_refreshrate_calculate", false)) {
prefs.edit().putBoolean("first_time_refreshrate_calculate", true).commit();
AlertDialog.Builder alert = new AlertDialog.Builder(this)
.setTitle("Calculate Refresh Rate")
.setMessage("It is highly recommended you run the refresh rate calibration test before you use RetroArch. Do you want to run it now?\n\nIf you choose No, you can run it at any time in the video preferences.")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i = new Intent(getBaseContext(), DisplayRefreshRateTest.class);
startActivity(i);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alert.show();
}
}
@Override
public void onItemClick(AdapterView<?> aListView, View aView,
@ -324,16 +365,12 @@ public class RetroArch extends Activity implements
config.setBoolean("video_vsync", prefs.getBoolean("video_vsync", true));
config.setBoolean("input_autodetect_enable", prefs.getBoolean("input_autodetect_enable", true));
config.setBoolean("input_debug_enable", prefs.getBoolean("input_debug_enable", false));
config.setInt("input_autodetect_icade_profile_pad1", prefs.getInt("input_autodetect_icade_profile_pad1", 0));
config.setInt("input_autodetect_icade_profile_pad2", prefs.getInt("input_autodetect_icade_profile_pad2", 0));
config.setInt("input_autodetect_icade_profile_pad3", prefs.getInt("input_autodetect_icade_profile_pad3", 0));
config.setInt("input_autodetect_icade_profile_pad4", prefs.getInt("input_autodetect_icade_profile_pad4", 0));
if (prefs.getBoolean("video_sync_refreshrate_to_screen", true)
&& (getRefreshRate() < 59.95)) {
Log.i(TAG,
"Refresh rate of screen lower than 59.95Hz, adjusting to screen.");
config.setDouble("video_refresh_rate", getRefreshRate());
} else {
Log.i(TAG, "Refresh rate set to 59.95Hz (default).");
config.setDouble("video_refresh_rate", 59.95);
}
config.setDouble("video_refresh_rate", getRefreshRate());
String aspect = prefs.getString("video_aspect_ratio", "auto");
if (aspect.equals("full")) {
@ -489,13 +526,17 @@ public class RetroArch extends Activity implements
Intent rset = new Intent(this, SettingsActivity.class);
startActivity(rset);
return true;
case R.id.help:
Intent help = new Intent(this, HelpActivity.class);
startActivity(help);
return true;
case R.id.report_ime:
String current_ime = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
new AlertDialog.Builder(this).setMessage(current_ime).setNeutralButton("Close", null).show();
return true;
case R.id.report_refreshrate:
String current_rate = "Screen Refresh Rate: " + new Double(report_refreshrate).toString();
String current_rate = "Screen Refresh Rate: " + Double.valueOf(report_refreshrate).toString();
new AlertDialog.Builder(this).setMessage(current_rate).setNeutralButton("Close", null).show();
return true;

View File

@ -27,11 +27,11 @@
#define CHANNELS 2
struct rarch_resampler
typedef struct rarch_hermite_resampler
{
float chan_data[CHANNELS][4];
double r_frac;
};
} rarch_hermite_resampler_t;
static inline float hermite_kernel(float mu1, float a, float b, float c, float d)
{
@ -51,14 +51,17 @@ static inline float hermite_kernel(float mu1, float a, float b, float c, float d
return (a0 * b) + (a1 * m0) + (a2 * m1) + (a3 * c);
}
rarch_resampler_t *resampler_new(void)
void *resampler_hermite_new(void)
{
#ifndef RESAMPLER_TEST
RARCH_LOG("Hermite resampler [C]\n");
return (rarch_resampler_t*)calloc(1, sizeof(rarch_resampler_t));
#endif
return calloc(1, sizeof(rarch_hermite_resampler_t));
}
void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
static void resampler_hermite_process(void *re_, struct resampler_data *data)
{
rarch_hermite_resampler_t *re = (rarch_hermite_resampler_t*)re_;
double r_step = 1.0 / data->ratio;
size_t processed_out = 0;
@ -99,8 +102,15 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
data->output_frames = processed_out;
}
void resampler_free(rarch_resampler_t *re)
static void resampler_hermite_free(void *re)
{
free(re);
}
const rarch_resampler_t hermite_resampler = {
resampler_hermite_new,
resampler_hermite_process,
resampler_hermite_free,
"hermite",
};

View File

@ -14,6 +14,7 @@
*/
#include "../driver.h"
#include "../general.h"
#ifdef __APPLE__
#include <OpenAL/al.h>
@ -30,29 +31,50 @@
#include <windows.h>
#endif
#define BUFSIZE 128
#define BUFSIZE 1024
typedef struct al
{
ALuint source;
ALuint *buffers;
ALuint *res_buf;
int res_ptr;
size_t res_ptr;
ALenum format;
int num_buffers;
size_t num_buffers;
int rate;
int queue;
uint8_t tmpbuf[BUFSIZE];
int tmpbuf_ptr;
size_t tmpbuf_ptr;
ALCdevice *handle;
ALCcontext *ctx;
bool nonblock;
} al_t;
static void al_free(void *data)
{
al_t *al = (al_t*)data;
if (!al)
return;
alSourceStop(al->source);
alDeleteSources(1, &al->source);
if (al->buffers)
alDeleteBuffers(al->num_buffers, al->buffers);
free(al->buffers);
free(al->res_buf);
alcMakeContextCurrent(NULL);
if (al->ctx)
alcDestroyContext(al->ctx);
if (al->handle)
alcCloseDevice(al->handle);
free(al);
}
static void *al_init(const char *device, unsigned rate, unsigned latency)
{
(void)device;
@ -72,7 +94,13 @@ static void *al_init(const char *device, unsigned rate, unsigned latency)
al->rate = rate;
al->num_buffers = (latency * rate * 2 * 2) / (1000 * BUFSIZE);
// We already use one buffer for tmpbuf.
al->num_buffers = (latency * rate * 2 * sizeof(int16_t)) / (1000 * BUFSIZE) - 1;
if (al->num_buffers < 2)
al->num_buffers = 2;
RARCH_LOG("[OpenAL]: Using %u buffers of %u bytes.\n", (unsigned)al->num_buffers, BUFSIZE);
al->buffers = (ALuint*)calloc(al->num_buffers, sizeof(ALuint));
al->res_buf = (ALuint*)calloc(al->num_buffers, sizeof(ALuint));
if (al->buffers == NULL || al->res_buf == NULL)
@ -87,19 +115,7 @@ static void *al_init(const char *device, unsigned rate, unsigned latency)
return al;
error:
if (al)
{
alcMakeContextCurrent(NULL);
if (al->ctx)
alcDestroyContext(al->ctx);
if (al->handle)
alcCloseDevice(al->handle);
if (al->buffers)
free(al->buffers);
if (al->res_buf)
free(al->res_buf);
free(al);
}
al_free(al);
return NULL;
}
@ -121,14 +137,8 @@ static bool al_unqueue_buffers(al_t *al)
static bool al_get_buffer(al_t *al, ALuint *buffer)
{
if (al->res_ptr == 0)
if (!al->res_ptr)
{
#ifndef _WIN32
struct timespec tv = {0};
tv.tv_sec = 0;
tv.tv_nsec = 1000000;
#endif
for (;;)
{
if (al_unqueue_buffers(al))
@ -137,11 +147,8 @@ static bool al_get_buffer(al_t *al, ALuint *buffer)
if (al->nonblock)
return false;
#ifdef _WIN32
Sleep(1);
#else
nanosleep(&tv, NULL);
#endif
// Must sleep as there is no proper blocking method. :(
rarch_sleep(1);
}
}
@ -151,28 +158,31 @@ static bool al_get_buffer(al_t *al, ALuint *buffer)
static size_t al_fill_internal_buf(al_t *al, const void *buf, size_t size)
{
size_t read_size = (BUFSIZE - al->tmpbuf_ptr > (ssize_t)size) ? size : (BUFSIZE - al->tmpbuf_ptr);
size_t read_size = min(BUFSIZE - al->tmpbuf_ptr, size);
memcpy(al->tmpbuf + al->tmpbuf_ptr, buf, read_size);
al->tmpbuf_ptr += read_size;
return read_size;
}
static ssize_t al_write(void *data, const void *buf, size_t size)
static ssize_t al_write(void *data, const void *buf_, size_t size)
{
al_t *al = (al_t*)data;
const uint8_t *buf = (const uint8_t*)buf_;
size_t written = 0;
while (written < size)
while (size)
{
size_t rc = al_fill_internal_buf(al, (const char*)buf + written, size - written);
size_t rc = al_fill_internal_buf(al, buf, size);
written += rc;
buf += rc;
size -= rc;
if (al->tmpbuf_ptr != BUFSIZE)
break;
ALuint buffer;
if (!al_get_buffer(al, &buffer))
return 0;
break;
alBufferData(buffer, AL_FORMAT_STEREO16, al->tmpbuf, BUFSIZE, al->rate);
al->tmpbuf_ptr = 0;
@ -189,7 +199,7 @@ static ssize_t al_write(void *data, const void *buf, size_t size)
return -1;
}
return size;
return written;
}
static bool al_stop(void *data)
@ -210,24 +220,17 @@ static bool al_start(void *data)
return true;
}
static void al_free(void *data)
static size_t al_write_avail(void *data)
{
al_t *al = (al_t*)data;
if (al)
{
alSourceStop(al->source);
alDeleteSources(1, &al->source);
if (al->buffers)
{
alDeleteBuffers(al->num_buffers, al->buffers);
free(al->buffers);
free(al->res_buf);
}
}
alcMakeContextCurrent(NULL);
alcDestroyContext(al->ctx);
alcCloseDevice(al->handle);
free(al);
al_unqueue_buffers(al);
return al->res_ptr * BUFSIZE + (BUFSIZE - al->tmpbuf_ptr);
}
static size_t al_buffer_size(void *data)
{
al_t *al = (al_t*)data;
return (al->num_buffers + 1) * BUFSIZE; // Also got tmpbuf.
}
const audio_driver_t audio_openal = {
@ -238,6 +241,8 @@ const audio_driver_t audio_openal = {
al_set_nonblock_state,
al_free,
NULL,
"openal"
"openal",
al_write_avail,
al_buffer_size,
};

66
audio/resampler.c Normal file
View File

@ -0,0 +1,66 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2013 - Hans-Kristian Arntzen
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#include "resampler.h"
#include <string.h>
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include "../general.h"
static const rarch_resampler_t *backends[] = {
#ifdef HAVE_SINC
&sinc_resampler,
#endif
&hermite_resampler,
};
bool rarch_resampler_realloc(void **re, const rarch_resampler_t **backend, const char *ident)
{
if (*re && *backend)
(*backend)->free(*re);
*re = NULL;
*backend = NULL;
if (ident)
{
for (unsigned i = 0; i < ARRAY_SIZE(backends); i++)
{
if (strcmp(backends[i]->ident, ident) == 0)
{
*backend = backends[i];
break;
}
}
}
else
*backend = backends[0];
if (!*backend)
return false;
*re = (*backend)->init();
if (!*re)
{
*backend = NULL;
return false;
}
return true;
}

View File

@ -24,13 +24,13 @@
#include <stddef.h>
#include <stdint.h>
#include <math.h>
#include "../boolean.h"
// M_PI is left out of ISO C99 :(
#ifndef M_PI
#define M_PI 3.14159265358979323846264338327
#endif
typedef struct rarch_resampler rarch_resampler_t;
typedef float sample_t;
struct resampler_data
@ -44,9 +44,33 @@ struct resampler_data
double ratio;
};
rarch_resampler_t *resampler_new(void);
void resampler_process(rarch_resampler_t *re, struct resampler_data *data);
void resampler_free(rarch_resampler_t *re);
typedef struct rarch_resampler
{
void *(*init)(void);
void (*process)(void *re, struct resampler_data *data);
void (*free)(void *re);
const char *ident;
} rarch_resampler_t;
extern const rarch_resampler_t hermite_resampler;
extern const rarch_resampler_t sinc_resampler;
// Reallocs resampler. Will free previous handle before allocating a new one.
// If ident is NULL, first resampler will be used.
bool rarch_resampler_realloc(void **re, const rarch_resampler_t **backend, const char *ident);
// Convenience macros.
// freep makes sure to set handles to NULL to avoid double-free in rarch_resampler_realloc.
#define rarch_resampler_freep(backend, handle) do { \
if (*(backend) && *(handle)) \
(*backend)->free(*handle); \
*backend = NULL; \
*handle = NULL; \
} while(0)
#define rarch_resampler_process(backend, handle, data) do { \
(backend)->process(handle, data); \
} while(0)
#endif

View File

@ -33,25 +33,36 @@
#include <xmmintrin.h>
#endif
#ifdef SINC_LOWER_QUALITY
#define PHASE_BITS 12
#define SIDELOBES 4
#define ENABLE_AVX 0
#elif defined(SINC_HIGHER_QUALITY)
#define PHASE_BITS 16
#define SIDELOBES 32
#define ENABLE_AVX 1
#else
#define PHASE_BITS 16
#define SIDELOBES 8
#define ENABLE_AVX 0
#endif
// For the little amount of taps we're using,
// SSE1 is faster than AVX for some reason.
// AVX code is kept here though as by increasing number
// of sinc taps, the AVX code is clearly faster than SSE1.
#define ENABLE_AVX 0
#if defined(__AVX__) && ENABLE_AVX
#include <immintrin.h>
#endif
#define PHASE_BITS 16
#define SUBPHASE_BITS 10
#define PHASES (1 << (PHASE_BITS + SUBPHASE_BITS))
#define SIDELOBES 8
#define TAPS (SIDELOBES * 2)
#define CUTOFF 0.98
struct rarch_resampler
typedef struct rarch_sinc_resampler
{
sample_t phase_table[1 << PHASE_BITS][TAPS];
sample_t buffer_l[2 * TAPS];
@ -59,7 +70,7 @@ struct rarch_resampler
unsigned ptr;
uint32_t time;
};
} rarch_sinc_resampler_t;
static inline double sinc(double val)
{
@ -74,7 +85,7 @@ static inline double lanzcos(double index)
return sinc(index);
}
static void init_sinc_table(rarch_resampler_t *resamp)
static void init_sinc_table(rarch_sinc_resampler_t *resamp)
{
// Sinc phases: [..., p + 3, p + 2, p + 1, p + 0, p - 1, p - 2, p - 3, p - 4, ...]
for (int i = 0; i < (1 << PHASE_BITS); i++)
@ -110,7 +121,7 @@ static void aligned_free__(void *ptr)
free(p[-1]);
}
static inline void process_sinc_C(rarch_resampler_t *resamp, float *out_buffer)
static inline void process_sinc_C(rarch_sinc_resampler_t *resamp, float *out_buffer)
{
float sum_l = 0.0f;
float sum_r = 0.0f;
@ -133,7 +144,7 @@ static inline void process_sinc_C(rarch_resampler_t *resamp, float *out_buffer)
#if defined(__AVX__) && ENABLE_AVX
#define process_sinc_func process_sinc
static void process_sinc(rarch_resampler_t *resamp, float *out_buffer)
static void process_sinc(rarch_sinc_resampler_t *resamp, float *out_buffer)
{
__m256 sum_l = _mm256_setzero_ps();
__m256 sum_r = _mm256_setzero_ps();
@ -169,7 +180,7 @@ static void process_sinc(rarch_resampler_t *resamp, float *out_buffer)
}
#elif defined(__SSE__)
#define process_sinc_func process_sinc
static void process_sinc(rarch_resampler_t *resamp, float *out_buffer)
static void process_sinc(rarch_sinc_resampler_t *resamp, float *out_buffer)
{
__m128 sum_l = _mm_setzero_ps();
__m128 sum_r = _mm_setzero_ps();
@ -212,12 +223,15 @@ static void process_sinc(rarch_resampler_t *resamp, float *out_buffer)
_mm_store_ss(out_buffer + 1, _mm_movehl_ps(sum, sum));
}
#elif defined(HAVE_NEON)
// Need to make this function pointer as Android doesn't have built-in targets
// for NEON and plain ARMv7a.
static void (*process_sinc_func)(rarch_resampler_t *resamp, float *out_buffer);
static void (*process_sinc_func)(rarch_sinc_resampler_t *resamp, float *out_buffer);
void process_sinc_neon_asm(float *out, const float *left, const float *right, const float *coeff);
static void process_sinc_neon(rarch_resampler_t *resamp, float *out_buffer)
// Assumes that taps >= 8, and that taps is a multiple of 8.
void process_sinc_neon_asm(float *out, const float *left, const float *right, const float *coeff, unsigned taps);
static void process_sinc_neon(rarch_sinc_resampler_t *resamp, float *out_buffer)
{
const float *buffer_l = resamp->buffer_l + resamp->ptr;
const float *buffer_r = resamp->buffer_r + resamp->ptr;
@ -225,14 +239,16 @@ static void process_sinc_neon(rarch_resampler_t *resamp, float *out_buffer)
unsigned phase = resamp->time >> SUBPHASE_BITS;
const float *phase_table = resamp->phase_table[phase];
process_sinc_neon_asm(out_buffer, buffer_l, buffer_r, phase_table);
process_sinc_neon_asm(out_buffer, buffer_l, buffer_r, phase_table, TAPS);
}
#else // Plain ol' C99
#define process_sinc_func process_sinc_C
#endif
void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
static void resampler_sinc_process(void *re_, struct resampler_data *data)
{
rarch_sinc_resampler_t *re = (rarch_sinc_resampler_t*)re_;
// If data->ratio is < 1, we are downsampling.
// The sinc table is not set up for this, as it always assumes upsampling.
// Downsampling will work, but with some added noise due to aliasing might be present.
@ -267,14 +283,14 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
data->output_frames = out_frames;
}
void resampler_free(rarch_resampler_t *re)
static void resampler_sinc_free(void *re)
{
aligned_free__(re);
}
rarch_resampler_t *resampler_new(void)
static void *resampler_sinc_new(void)
{
rarch_resampler_t *re = (rarch_resampler_t*)aligned_alloc__(1024, sizeof(*re));
rarch_sinc_resampler_t *re = (rarch_sinc_resampler_t*)aligned_alloc__(128, sizeof(*re));
if (!re)
return NULL;
@ -295,6 +311,15 @@ rarch_resampler_t *resampler_new(void)
RARCH_LOG("Sinc resampler [C]\n");
#endif
RARCH_LOG("SINC params (%u phase bits, %u taps).\n", PHASE_BITS, TAPS);
return re;
}
const rarch_resampler_t sinc_resampler = {
resampler_sinc_new,
resampler_sinc_process,
resampler_sinc_free,
"sinc",
};

View File

@ -1,5 +1,5 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
* Copyright (C) 2010-2013 - Hans-Kristian Arntzen
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
@ -16,37 +16,39 @@
.arm
.align 4
.global process_sinc_neon_asm
# void process_sinc_neon(float *out, const float *left, const float *right, const float *coeff)
# Hardcoded to 16 taps.
# void process_sinc_neon(float *out, const float *left, const float *right, const float *coeff, unsigned taps)
# Assumes taps is >= 8, and a multiple of 8.
process_sinc_neon_asm:
push {r4, lr}
vmov.f32 q0, #0.0
vmov.f32 q8, #0.0
# Taps argument (r4) goes on stack in armeabi.
ldr r4, [sp, #8]
1:
# Left
vld1.f32 {q0-q1}, [r1]!
vld1.f32 {q2-q3}, [r1]!
vld1.f32 {q2-q3}, [r1]!
# Right
vld1.f32 {q8-q9}, [r2]!
vld1.f32 {q10-q11}, [r2]!
# Coeff
vld1.f32 {q12-q13}, [r3, :128]!
vld1.f32 {q14-q15}, [r3, :128]!
# Left
vmul.f32 q0, q0, q12
vmul.f32 q1, q1, q13
vmla.f32 q0, q2, q14
vmla.f32 q1, q3, q15
# Left / Right
vmla.f32 q0, q2, q12
vmla.f32 q8, q10, q12
vmla.f32 q0, q3, q13
vmla.f32 q8, q11, q13
# Right
vmul.f32 q8, q8, q12
vmul.f32 q9, q9, q13
vmla.f32 q8, q10, q14
vmla.f32 q9, q11, q15
subs r4, r4, #8
bne 1b
# Add everything together
vadd.f32 q0, q0, q1
vadd.f32 q8, q8, q9
vadd.f32 d0, d0, d1
vadd.f32 d16, d16, d17
vpadd.f32 d0, d0, d16
vst1.f32 d0, [r0]
bx lr
pop {r4, pc}

View File

@ -5,18 +5,24 @@ LDFLAGS += -lm
all: $(TESTS)
test-hermite: ../hermite.o ../utils.o main.o
test-hermite: ../hermite.o ../utils.o main.o resampler-hermite.o
$(CC) -o $@ $^ $(LDFLAGS)
test-sinc: ../sinc.o ../utils.o main.o
test-sinc: ../sinc.o ../utils.o main.o ../hermite.o resampler-sinc.o
$(CC) -o $@ $^ $(LDFLAGS)
test-snr-sinc: ../sinc.o ../utils.o snr.o
test-snr-sinc: ../sinc.o ../utils.o snr.o ../hermite.o resampler-sinc.o
$(CC) -o $@ $^ $(LDFLAGS)
test-snr-hermite: ../hermite.o ../utils.o snr.o
test-snr-hermite: ../hermite.o ../utils.o snr.o resampler-hermite.o
$(CC) -o $@ $^ $(LDFLAGS)
resampler-sinc.o: ../resampler.c
$(CC) -c -o $@ $< $(CFLAGS) -DHAVE_SINC
resampler-hermite.o: ../resampler.c
$(CC) -c -o $@ $< $(CFLAGS)
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)

View File

@ -45,8 +45,9 @@ int main(int argc, char *argv[])
return 1;
}
rarch_resampler_t *resamp = resampler_new();
if (!resamp)
const rarch_resampler_t *resampler = NULL;
void *re = NULL;
if (!rarch_resampler_realloc(&re, &resampler, NULL))
{
fprintf(stderr, "Failed to allocate resampler ...\n");
return 1;
@ -66,7 +67,7 @@ int main(int argc, char *argv[])
.ratio = ratio,
};
resampler_process(resamp, &data);
rarch_resampler_process(resampler, re, &data);
size_t output_samples = data.output_frames * 2;
@ -76,6 +77,6 @@ int main(int argc, char *argv[])
break;
}
resampler_free(resamp);
rarch_resampler_freep(&resampler, &re);
}

View File

@ -270,8 +270,10 @@ int main(int argc, char *argv[])
assert(input);
assert(output);
rarch_resampler_t *re = resampler_new();
assert(re);
void *re = NULL;
const rarch_resampler_t *resampler = NULL;
if (!rarch_resampler_realloc(&re, &resampler, NULL))
return 1;
test_fft();
@ -289,7 +291,7 @@ int main(int argc, char *argv[])
.ratio = ratio,
};
resampler_process(re, &data);
rarch_resampler_process(resampler, re, &data);
unsigned out_samples = data.output_frames * 2;
assert(out_samples >= fft_samples * 2);
@ -307,7 +309,7 @@ int main(int argc, char *argv[])
res.alias_freq[2] / (float)in_rate, res.alias_power[2]);
}
resampler_free(re);
rarch_resampler_freep(&resampler, &re);
free(input);
free(output);
free(butterfly_buf);

View File

@ -1,5 +1,5 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
* Copyright (C) 2010-2013 - Hans-Kristian Arntzen
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-

View File

@ -317,6 +317,13 @@ static const int out_latency = 64;
// Will sync audio. (recommended)
static const bool audio_sync = true;
// Default resampler
#ifdef HAVE_SINC
static const char *audio_resampler = "sinc";
#else
static const char *audio_resampler = "hermite";
#endif
// Experimental rate control
#if defined(GEKKO) || !defined(RARCH_CONSOLE)
static const bool rate_control = true;

View File

@ -275,13 +275,13 @@ FIFO BUFFER
#include "../../fifo_buffer.c"
/*============================================================
AUDIO HERMITE
AUDIO RESAMPLER
============================================================ */
#include "../../audio/resampler.c"
#ifdef HAVE_SINC
#include "../../audio/sinc.c"
#else
#include "../../audio/hermite.c"
#endif
#include "../../audio/hermite.c"
/*============================================================
RSOUND

View File

@ -1,4 +1,5 @@
#!/bin/sh
RARCH_VERSION=0.9.8.3
make -C ../ -f Makefile.ps3.salamander clean || exit 1
make -C ../ -f Makefile.ps3.rgl clean || exit 1
@ -29,4 +30,4 @@ make -C ../ -f Makefile.shaders deploy-ps3
make_self_wc ../retroarch-salamander_ps3.elf ../ps3/pkg/USRDIR/EBOOT.BIN
rm -rf ../retroarch-salamander_ps3.elf
python2 ../ps3/ps3py/pkg.py --contentid UP0001-SSNE10000_00-0000000000000001 ../ps3/pkg/ retroarch-ps3-cfw-0.9.8.1.pkg
python2 ../ps3/ps3py/pkg.py --contentid UP0001-SSNE10000_00-0000000000000001 ../ps3/pkg/ retroarch-ps3-cfw-$RARCH_VERSION.pkg

View File

@ -0,0 +1,201 @@
------------------------------------------------------------------------------
RETROARCH 360 - 0.9.8.3
------------------------------------------------------------------------------
RetroConsole Level: 2
Author: Themaister, Squarepusher/Twin Aphex
------------------------------------------------------------------------------
------------------------------------------------------------------------------
HOW TO INSTALL THIS
------------------------------------------------------------------------------
Copy the entire folder to your harddrive.
ROMs go into the 'roms' directory, or some subdirectory in the RetroArch-360
directory.
------------------------------------------------------------------------------
HOW TO USE THIS
------------------------------------------------------------------------------
On first startup, RetroArch will select one of the dozen or so
emulator/game cores. The name of the core currently loaded will be
shown at the bottom side of the screen.
You can now select a ROM that this core supports and load it in the Filebrowser.
To select a different core - go to 'Change Libretro core' in the Main Menu.
Press A to go to a filebrowser where you can select a different core. Press A
to switch to the emulator/game core.
------------------------------------------------------------------------------
INGAME CONTROLS
------------------------------------------------------------------------------
During ingame operation you can do some extra actions:
Right Thumb Stick - Down - Fast-forwards the game
Right Thumb Stick - Up - Rewinds the game in real-time
('Rewind' has to be enabled in the 'Settings'
screen - warning - comes at a slight
performance decrease but will be worth it
if you love this feature)
RStick Left + RT - Decrease save state slot
Rtick Right + RT - Increase save state slot
RStick Up + RT - Load selected save state slot
RStick Down + RT - Save selected save state slot
Right Thumb + Left Thumb - Go back to 'Menu'/'Quick Menu'
------------------------------------------------------------------------------
WHAT IS RETROARCH?
------------------------------------------------------------------------------
RetroArch is a modular multi-system emulator system that is designed to
be fast, lightweight and portable. It has features few other emulator
frontends have, such as real-time rewinding and game-aware shading.
------------------------------------------------------------------------------
WHAT IS LIBRETRO?
------------------------------------------------------------------------------
Libretro is the API that RetroArch uses. It makes it easy to port games
and emulators to a single core backend, such as RetroArch.
For the user, this means - more ports to play with, more crossplatform
portability, less worrying about developers having to reinvent the wheel
writing boilerplate UI/port code - so that they can get busy with writing
the emulator/porting the emulator/game.
------------------------------------------------------------------------------
WHAT'S THE BIG DEAL?
------------------------------------------------------------------------------
Right now it's unique in that it runs the same emulator cores on
multiple systems (such as Xbox 360, PS3, PC, Wii, etc).
For each emulator 'core', RetroArch makes use of a library API that we
like to call 'libretro'.
Think of libretro as an interface for emulator and game ports. You can
make a libretro port once and expect the same code to run on all the
platforms that RetroArch supports. It's designed with simplicity and
ease of use in mind so that the porter can worry about the port at hand
instead of having to wrestle with an obfuscatory API.
The purpose of libretro is to help ease the work of the emulator/game
porter by giving him an API that allows him to target multiple platforms
at once without having to redo any code. He doesn't have to worry about
writing input/video/audio drivers - all of that is supplied to him by
RetroArch. All he/she has to do is to have the emulator port hook
into the libretro API and that's it - we take care of the rest.
------------------------------------------------------------------------------
XBOX 360 PORT
------------------------------------------------------------------------------
The Xbox 360 port of RetroArch has the following features:
- Real-time rewinding
- Switching between emulator cores seamlessly, and ability to install
new libretro cores
Included with RetroArch 360 are a bunch of shaders - including the latest
version of the popular xBR shader. It is possible to use two shaders
simultaneously to get the best possible graphical look.
------------------------------------------------------------------------------
EMULATOR/GAME CORES BUNDLED WITH XBOX 360 PORT
------------------------------------------------------------------------------
The following emulators/games have been ported to RetroArch and are included in
the Xbox 360 release of RetroArch.
For more information about them, see the included
'retroarch-libretro-README.txt' file.
- Final Burn Alpha (Arcade - various) [version 0.2.97.28]
- FCEUmm (Nintendo Entertainment System) [recent SVN version]
- NEStopia (Nintendo Entertainment System) [1.44]
- Gambatte (Game Boy | Super Game Boy | Game Boy Color) [version 0.5.0 WIP]
- Genesis Plus GX (Sega SG-1000 | Master System | Game Gear | Genesis/Mega Drive |
Sega CD) [version 1.7.3]
- SNES9x Next (Super Nintendo/Super Famicom)
- VBA Next (Game Boy Advance)
- Prboom (for playing Doom 1/Doom 2/Ultimate Doom/Final Doom)
- Mednafen PCE Fast (PC Engine/PC Engine CD/Turbografx 16)
- Mednafen Wonderswan (WonderSwan/WonderSwan Color/WonderSwan Crystal)
- Mednafen NGP (Neo Geo Pocket Color)
All of the emulators listed above are the latest versions currently
available. Most of them have been specifically optimized so that
they will run better on 360 (some games would not reach fullspeed
without these optimizations).
------------------------------------------------------------------------------
WHAT EXTENSIONS ARE SUPPORTED BY EACH CORE
------------------------------------------------------------------------------
- Prboom WAD|wad
- SNES9x Next smc|fig|sfc|gd3|gd7|dx2|bsx|swc|zip|SMC|FIG|SFC|BSX|GD3|
GD7|DX2|SWC
- Genesis Plus GX md|smd|bin|gen|zip|MD|SMD|bin|GEN|ZIP|sms|SMS|gg|GG|sg|SG|
cue|CUE
- VBA Next GBA|gba
- FCEUmm nes|NES|unif|UNIF
- NEStopia nes|NES|fds|FDS
- Gambatte gb|gbc|dmg|zip|GB|GBC|DMG|ZIP
- Final Burn Alpha zip|ZIP
- Mednafen PCE pce|PCE|cue|CUE
- Mednafen Wonderswan ws|WS|wsc|WSC
- Mednafen NGP ngp|NGP
------------------------------------------------------------------------------
ZIP SUPPORT
------------------------------------------------------------------------------
Selecting a ZIP file will temporarily unzip that file to the harddrive. The
temporary file will be deleted as soon as the game gets unloaded and/or when
you quit RetroArch.
NOTE: For the FBA core (and other cores that have 'block_extract' set to
true) - selecting a ZIP file from the Filebrowser will load that game
directly.
------------------------------------------------------------------------------
Troubleshooting
------------------------------------------------------------------------------
If you find that RetroArch no longer works for whatever reason, there is
a way to get it back to work -
- Remove retroarch.cfg from the 'Retroarch-360' folder, then start up again.
The Libretro management service in RetroArch should automatically pick a
random libretro core and write this to the config file.
------------------------------------------------------------------------------
What can you expect in the future?
------------------------------------------------------------------------------
- Do a Blackberry Playbook/Blackberry 10 RetroArch port
- Do an iOS port of RetroArch (will need hardware for this - gifts appreciated)
- Make the libxenon port release-worthy.
- Add console-friendly features (nicely formatted names for FBA, some better
way to do core switching, etc)
- Fix NxEngine issues on consoles
- Finish up MAME 0.72 port
- Finish up ScummVM port
- Port of VICE to libretro
- More emulators, more games that will run on RetroArch
- Lots of other crazy ideas that might or might not pan out
------------------------------------------------------------------------------
Credits
------------------------------------------------------------------------------
- Mudlord for his Waterpaint/Noise shaders.
- Hyllian for the xBR shader.
- Opium2k for the nice manual shaders (bundled with PS3 release).
- Deank for assistance with RetroArch Salamander on CFW PS3s and
Multiman interoperability.
- FBA devs for adopting the libretro port.
- Ekeeke for help with the Genesis Plus GX port.
- ToadKing for having done a lot of work on RetroArch Wii.
- Freakdave for helping out with the Xbox 1 port.
------------------------------------------------------------------------------
Websites
------------------------------------------------------------------------------
Twitter: http://twitter.com/libretro
Source: http://github.com/libretro
Homepage: http://www.libretro.org
IRC: #retroarch (freenode)
------------------------------------------------------------------------------

View File

@ -0,0 +1,124 @@
RETROARCH CONSOLE
------------------------------------------------------------------------------
v0.9.8.3
------------------------------------------------------------------------------
* [FBA core] Various changes/fixes
- Hook up Armed Police Batrider controls
- Afterburner - make fire buttons work
- Hook up Bad Dudes controls
- Hook up Cyberbots controls
- Hook up 1942 controls
- Add missing Chase HQ controls
- Add missing WWF Wrestlefest controls
- EEPROM save should now work (tested with EEPROM-based system such as Capcom CPS2)
- Samples are now looked for - should be in 'samples' subdirectory
- Hiscore files should now be read from/written to.
* [SNES9x Next] Added big speed hack for Star Fox 1 - makes it fast enough for it to run at fullspeed on the Wii.
* [Genesis Plus GX] Set samplerate back to 44Khz.
* [Android] New 'Calibrate Refresh Rate' option - use this to get an accurate estimation of your screen refresh rate. NOTE: Touch the screen at all times during calibration for more accurate measurements. You might have to slightly tweak the value later on for the best results.
* [Android] Added a 'Set OS-reported refresh rate' which should do the same as what 'Sync refreshrate to Screen' previously did. Note 2 users might get better results with this than they will with 'Calibrate refresh rate'.
* [Android] Added a built-in help system that should answer a lot of the frequently asked questions.
* ]Android] Add iCade profiles - two added for now - iPega and Red Samurai
* [Android] Audio resampler now faster
* [Android] Input autodetection expanded -
* [CONSOLES] Audio resampler is now adjustable - can choose between Sinc resampler (new) and Hermite resampler (old). Sinc is now selected by default, is superior audio-quality wise and will fix a lot of sound issues.
* [PS3] Save Preset fixed
* [PS3] Starting with Dual Shader/Custom Scaling mode OFF and then turning it ON works now
* [Wii] Numerous Wii video mode fixes - including PAL modes that went beyond the internal framebuffer bounds
- PC2JAMMA-USB (needs to be tested)
- Genius MaxFire G-08XU
- Zeemote Steelseries
- Saitek Rumblepad
- Super Smart Joy
------------------------------------------------------------------------------
v0.9.8.1
------------------------------------------------------------------------------
- (Android) Lots of changes - too numerous to list
- [FBA] Fixed serious bug that would cause a lot of games to get stuck
in service mode or to display graphical corruption (CPS1).
- [NEStopia] Now outputs in mono sound mode.
- [FCEUmm] Uses RGB565 now - should no longer flicker on RMenu.
- [Mednafen PC Engine Fast] Fixed libretro issue where certain games
had totally wrong pitch
- [Mednafen Wonderswan] Core fixed, works again.
- [Genesis Plus GX] Set audio samplerate at 48KHz (from 44KHz).
- [PS3] Fixed serious bugs where it could get 'stuck' or the app could
'hang' while toggling between ingame and quickmenu/file browser.
- [PS3] Added 'Menu Skins' to 'Retro Settings' - will allow you to
select a different background for the menu. Captain CPS-X's menu skin
is also included.
- [Wii] Fixes serious analog stick issues with CC Pro/CC.
- [Wii] Added additional resolutions - 304x224, 576x224, 608x224
- [Wii] More natural way to switch between cores
------------------------------------------------------------------------------
v0.9.8
------------------------------------------------------------------------------
- (Android) Initial release of RetroArch Android.
- [LIBRETRO] Added Mednafen NGP and Mednafen VB.
- [LIBRETRO] Added NEStopia Undead (1.44).
- [LIBRETRO] Updated Mednafen PCE Fast and Mednafen Wonderswan to 0.9.28.
- [LIBRETRO] Added PCSX ReARMed for RetroArch Android.
- [FBA] Updated Final Burn Alpha to 0.9.27.28.
- [Gambatte] Updated Gambatte (now has built-in GBC BIOS color palettes).
- [SNES9x Next] Updated SNES9x Next (fixes numerous bugs).
- [FCEUmm] Updated FCEUmm to latest version.
- [Genesis Plus GX] Updated Genesis Plus GX to latest version.
- (360) Gamma correction can now be applied on-the-fly - no longer requires
reboots
- (360) Added new shaders - mudlord-oldtvshader-variant, crt-curved, and
others
- (360) Added 'SRAM dir Enable' option - allows you to save all your SRAM to
game:/sram instead of the ROM directory
- (360) Added 'SRAM dir Enable' option - allows you to save all your states to
game:/savestates
- (RARCH_CONSOLE) Various stability fixes
- (RARCH_CONSOLE) More sane unzipping mode - will temporarily extract file to
HDD and then instantly delete it when it's done with it (ie. when another ROM
gets loaded or when RetroArch shuts down)
- (RARCH_CONSOLE) All console ports now use 59.94Hz for synchronization on
the RetroArch side instead of 59.92Hz as before. All consoles use 59.94Hz
so this agrees better with them.
- (PS3) Added PAL60 temporal PAL mode
- (PS3) Fixed a lot of path issues - SRAM/savestate dir enable now work,
'Default ROM directory' should now work, etc.
- (PS3) Added rewind granularity options
- (PS3) Rewrote video driver from scratch (RGL v2). Faster blitting.
- (PS3) Onscreen keyboard should work again.
- (WII) Made a custom wiiuse input driver and built it in. Slimmed down
and should give better results. Also rejigged input in general.
- (WII) Added rewind option. NOTE: This feature is CPU intensive - a core
might need to at least run at double realtime FPS in order for this option
to be useful.
- (WII) Button combos can now be done ingame. You can do rewinding, fast
forwarding, selecting save state slots and 'save state load/save state save'
all ingame without first going to the menu. For more information, read the
README.txt for the Wii release.
------------------------------------------------------------------------------
v0.9.7.1
------------------------------------------------------------------------------
- (FBAcores CPS1) Sound crackling/popping fixed
- (FBACores CPS2) Sound crackling/popping fixed
- (FBACores NeoGeo) Sound crackling/popping fixed
- (WII) Fixed left/right audio channels being in reverse issue
- (WII) Filebrowser now filters by core supported extensions
- (WII) Fixed filebrowser performance issues in v0.9.7
------------------------------------------------------------------------------
v0.9.7
------------------------------------------------------------------------------
- (XBOX 1/Wii) Made an Xbox 1/Wii port.
- (LIBRETRO) Added Mednafen PCE FAST, and Mednafen Wonderswan cores
- (360) Added Genesis Plus GX to official 360 release
- (Genesis Plus GX) Updated to v1.7.0
- (PS3) Improved GUI
- (360) Improved UI
- (ALL) Improved stability / error trapping
- (ALL) ZIP extract modes expanded - it can extract the contents of a ZIP file to
the current directory, and/or extract to current dir and immediately load the
first ROM/game file.
- Too many things to mention
------------------------------------------------------------------------------
v0.9.6
------------------------------------------------------------------------------
- (PS3/360) Initial release of RetroArch PS3/360.

View File

@ -0,0 +1,237 @@
------------------------------------------------------------------------------
RETROARCH PS3 - 0.9.8.3
------------------------------------------------------------------------------
RetroConsole Level: 2
Author: Themaister, Squarepusher/Twin Aphex
------------------------------------------------------------------------------
------------------------------------------------------------------------------
HOW TO INSTALL THIS
------------------------------------------------------------------------------
------------------------------------------------------------------------------
ON DEBUG (DEX) PS3
------------------------------------------------------------------------------
Put the PKG file 'retroarch-ps3-v0.9.8.3-dex.pkg' on your
USB stick, put it in your PS3. Go to the PS3 XMB - go to the
Game tab - Select 'Install Packages', and install the PKG file.
------------------------------------------------------------------------------
ON CFW P3
------------------------------------------------------------------------------
Put the PKG file 'retroarch-ps3-v0.9.8.3-cfw.pkg' on your
USB stick. Put it in your CFW PS3. Go to the PS3 XMB - go to the
Game tab - select 'Install Packages', and install the PKG file.
NOTE: The official release no longer supports Geohot/Wutangzra
CFWs. If you must use them, you have to do pkg_finalize on the PKG
to install it.
------------------------------------------------------------------------------
HOW TO USE THIS
------------------------------------------------------------------------------
On first startup, RetroArch will select one of the dozen or
so emulator/game cores. The name of the core currently loaded will
be shown at the top side of the screen.
You can now select a ROM that this core supports and load it in
the Filebrowser.
To select a different core in the menu - press Select to go to the
Settings screen. From here, go to the 'Retro tab', and select
'Default emulator core'. Press X to go to a filebrowser where you
can select a different core. Press X to confirm, then exit
RetroArch. Start up again to boot up to the new emulator core.
To change to a different core ingame - press R3 to bring up
the 'Quick Menu'. Select 'Change libretro core'. Press X to
go to a filebrowser where you can select a different core.
------------------------------------------------------------------------------
INGAME CONTROLS
------------------------------------------------------------------------------
During ingame operation you can do some extra actions:
Right Thumb Stick - Down - Fast-forwards the game
Right Thumb Stick - Up - Rewinds the game in real-time
('Rewind' has to be enabled in the
'Settings' menu - warning - comes at a
performance decrease but will be worth it
if you love this feature)
RStick Left + R2 - Decrease save state slot
Rtick Right + R2 - Increase save state slot
RStick Up + R2 - Load selected save state slot
RStick Down + R2 - Save selected save state slot
L3 + R3 - Go back to 'Menu'/'Quick Menu'
------------------------------------------------------------------------------
WHAT IS RETROARCH?
------------------------------------------------------------------------------
RetroArch is a modular multi-system emulator system that is
designed to be fast, lightweight and portable. It has features
few other emulator frontends have, such as real-time rewinding
and game-aware shading.
------------------------------------------------------------------------------
WHAT IS LIBRETRO?
------------------------------------------------------------------------------
Libretro is the API that RetroArch uses. It makes it easy to
port games and emulators to a single core backend, such as
RetroArch.
For the user, this means - more ports to play with, more
crossplatform portability, less worrying about developers having
to reinvent the wheel writing boilerplate UI/port code - so that
they can get busy with writing the emulator/porting the emulator/game.
------------------------------------------------------------------------------
WHAT'S THE BIG DEAL?
------------------------------------------------------------------------------
Right now it's unique in that it runs the same emulator cores on
multiple systems (such as Xbox 360, PS3, PC, Wii, Xbox 1, etc).
For each emulator 'core', RetroArch makes use of a library API that
we like to call 'libretro'.
Think of libretro as an interface for emulator and game ports. You
can make a libretro port once and expect the same code to run on all
the platforms that RetroArch supports. It's designed with simplicity
and ease of use in mind so that the porter can worry about the port
at hand instead of having to wrestle with an obfuscatory API.
The purpose of libretro is to help ease the work of the emulator/game
porter by giving him an API that allows him to target multiple
platforms at once without having to redo any code. He doesn't have
to worry about writing input/video/audio drivers - all of that is
supplied to him by RetroArch. All he has to do is to have the emulator
port hook into the libretro API and that's it - we take care of the rest.
------------------------------------------------------------------------------
PLAYSTATION3 PORT
------------------------------------------------------------------------------
The PS3 port of RetroArch is one of the most developed console ports
of RetroArch.
A couple of unique features RetroArch PS3 boasts that is not commonly
found anywhere else:
- Game-aware shading in every emulator now (*)
- Real-time rewinding
- More shader features (motion blurring, etc)
- Switching between emulator cores seamlessly, and ability to install new
libretro cores
Included with RetroArch PS3 are a bunch of shaders - including the
latest versions of the popular xBR shader. It is possible to use two
shaders simultaneously to get the best possible graphical look.
* Check out Opium2k's manual shaders for Zelda 3 and others - you can
find DLC packs for RetroArch at this site:
https://code.google.com/p/retro-arch/
------------------------------------------------------------------------------
EMULATOR/GAME CORES BUNDLED WITH PS3 PORT
------------------------------------------------------------------------------
The following emulators have been ported to RetroArch and are included
in the PS3 release of RetroArch.
For more information about them, see the included
'retroarch-libretro-README.txt' file.
- Final Burn Alpha (Arcade - various) [version 0.2.97.28]
- FCEUmm (Nintendo Entertainment System) [recent SVN version]
- NEStopia (Nintendo Entertainment System) [1.44]
- Gambatte (Game Boy | Super Game Boy | Game Boy Color) [version 0.5.0 WIP]
- Genesis Plus GX (Sega SG-1000 | Master System | Game Gear | Genesis/Mega Drive |
Sega CD) [version 1.7.3]
- SNES9x Next (Super Nintendo/Super Famicom)
- VBA Next (Game Boy Advance)
- Prboom (for playing Doom 1/Doom 2/Ultimate Doom/Final Doom)
- Mednafen PCE Fast (PC Engine/PC Engine CD/Turbografx 16)
- Mednafen Wonderswan (WonderSwan/WonderSwan Color/WonderSwan Crystal)
- Mednafen NGP (Neo Geo Pocket Color)
- Mednafen VB (Virtual Boy)
All of the emulators listed above are the latest versions currently
available. Most of them have been specifically optimized so that they
will run better on PS3 (some games would not reach fullspeed without these optimizations).
------------------------------------------------------------------------------
WHAT EXTENSIONS ARE SUPPORTED BY EACH CORE
------------------------------------------------------------------------------
- Prboom WAD|wad
- SNES9x Next smc|fig|sfc|gd3|gd7|dx2|bsx|swc|zip|SMC|FIG|SFC|BSX|GD3|
GD7|DX2|SWC
- Genesis Plus GX md|smd|bin|gen|zip|MD|SMD|bin|GEN|ZIP|sms|SMS|gg|GG|sg|SG|
cue|CUE
- VBA Next GBA|gba
- FCEUmm nes|NES|unif|UNIF
- NEStopia nes|NES|fds|FDS
- Gambatte gb|gbc|dmg|zip|GB|GBC|DMG|ZIP
- Final Burn Alpha zip|ZIP
- Mednafen PCE pce|PCE|cue|CUE
- Mednafen Wonderswan ws|WS|wsc|WSC
- Mednafen NGP ngp|NGP
- Mednafen VB vb|VB
------------------------------------------------------------------------------
ZIP SUPPORT
------------------------------------------------------------------------------
Selecting a ZIP file will temporarily unzip that file to the harddrive. The
temporary file will be deleted as soon as the game gets unloaded and/or when
you quit RetroArch.
NOTE: For the FBA core (and other cores that have 'block_extract' set to
true) - selecting a ZIP file from the Filebrowser will load that game
directly.
------------------------------------------------------------------------------
Troubleshooting
------------------------------------------------------------------------------
If you find that RetroArch no longer works for whatever reason, there is
a way to get it back to work -
- Remove retroarch.cfg from the 'SSNE100000' folder, then start up again.
The Libretro management service in RetroArch should automatically pick a
random libretro core and write this to the config file.
------------------------------------------------------------------------------
What can you expect in the future?
------------------------------------------------------------------------------
- Do a Blackberry Playbook/Blackberry 10 RetroArch port
- Do an iOS port of RetroArch (will need hardware for this - gifts appreciated)
- Make the libxenon port release-worthy.
- Add console-friendly features (nicely formatted names for FBA, some better
way to do core switching, etc)
- Fix NxEngine issues on consoles
- Finish up MAME 0.72 port
- Finish up ScummVM port
- Port of VICE to libretro
- More emulators, more games that will run on RetroArch
- Lots of other crazy ideas that might or might not pan out
------------------------------------------------------------------------------
Credits
------------------------------------------------------------------------------
- Mudlord for his Waterpaint/Noise shaders.
- Hyllian for the xBR shader.
- Opium2k for the nice manual shaders (bundled with PS3 release).
- Deank for assistance with RetroArch Salamander on CFW PS3s and
Multiman interoperability.
- FBA devs for adopting the libretro port.
- Ekeeke for help with the Genesis Plus GX port.
- ToadKing for having done a lot of work on RetroArch Wii.
- Freakdave for helping out with the Xbox 1 port.
------------------------------------------------------------------------------
Websites
------------------------------------------------------------------------------
Twitter: http://twitter.com/libretro
Source: http://github.com/libretro
Homepage: http://www.libretro.org
Opium2K DLC for RetroArch: https://code.google.com/p/retro-arch/
IRC: #retroarch (freenode)
------------------------------------------------------------------------------

View File

@ -0,0 +1,237 @@
------------------------------------------------------------------------------
RETROARCH WII - 0.9.8.3
------------------------------------------------------------------------------
RetroConsole Level: 1
Author: Themaister, Toad King, Squarepusher/Twin Aphex
------------------------------------------------------------------------------
------------------------------------------------------------------------------
HOW TO INSTALL THIS
------------------------------------------------------------------------------
Copy the entire directory (retroarch-wii) to your SD card in your 'apps'
directory. Start up the Homebrew Channel and start up RetroArch Wii from
there.
On first startup, RetroArch will create a folder in the root of your storage
device called 'retroarch'. All RetroArch configuration files are stored here.
------------------------------------------------------------------------------
HOW TO USE THIS
------------------------------------------------------------------------------
On first startup, RetroArch will select one of the dozen or so
emulator/game cores. The name of the core currently loaded will be
shown at the bottom side of the screen.
You can now select a ROM that this core supports and load it in the Filebrowser.
To select a different core - go to the Settings menu (see 'Ingame controls').
Select the option 'Core' and hit the A button. A filebrowser will appear
where you can select a different core. Press A to switch to the
emulator/game core.
After doing so, select 'Restart RetroArch' to load the newly selected core.
------------------------------------------------------------------------------
CONTROLS
------------------------------------------------------------------------------
RetroArch Wii will create a new input config file for each core you load.
All input settings will be saved when RetroArch exits.
NOTE: When starting up a new core for the first time, you might have to first
initialize the input settings. Go to the Settings menu (see 'Ingame controls')
and go to 'Controller #number config'. Re-set the 'Device' by going back and
forth between a previous device. The controls will be automatically applied.
This only has to be done once per core.
------------------------------------------------------------------------------
INGAME CONTROLS
------------------------------------------------------------------------------
During ingame operation you can do some extra actions:
Wii Classic Minus - Go to Settings
Wii Classic Controller Home + ZL + ZR - Quit RetroArch
Wii Classic Controller Home - Go back to 'Menu'
Wiimote Minus - Go to Settings
Wiimote Home - Go back to 'Menu'
Wiimote Home + B - Quit RetroArch
Gamecube pad Z - Go to Settings
Gamecube pad L + R + LStick Up + Rstick Up - Go back to 'Menu'
Gamecube pad L + R + LStick Down + Rstick Down - Quit RetroArch
Right Thumb Stick - Down - Fast-forwards the game
Right Thumb Stick - Up - Rewinds the game in real-time
('Rewind' has to be enabled in the
'Settings' menu - warning - comes at a
performance decrease but will be worth it
if you love this feature)
RStick Left + ZL - Decrease save state slot
Rtick Right + ZR - Increase save state slot
RStick Up + ZR - Load selected save state slot
RStick Down + ZR - Save selected save state slot
(NOTE: For Gamecube pads - you would press Z trigger + any of the Rstick
Down movements shown above instead of ZR/ZL)
------------------------------------------------------------------------------
WHAT IS RETROARCH?
------------------------------------------------------------------------------
RetroArch is a modular multi-system emulator system that is designed to
be fast, lightweight and portable.
------------------------------------------------------------------------------
WHAT IS LIBRETRO?
------------------------------------------------------------------------------
Libretro is the API that RetroArch uses. It makes it easy to port games
and emulators to a single core backend, such as RetroArch.
For the user, this means - more ports to play with, more crossplatform
portability, less worrying about developers having to reinvent the wheel
writing boilerplate UI/port code - so that they can get busy with writing
the emulator/porting the emulator/game.
------------------------------------------------------------------------------
WHAT'S THE BIG DEAL?
------------------------------------------------------------------------------
Right now it's unique in that it runs the same emulator cores on
multiple systems (such as Xbox 360, Xbox 1, PS3, PC, Wii, Android,
etc).
For each emulator 'core', RetroArch makes use of a library API that we
like to call 'libretro'.
Think of libretro as an interface for emulator and game ports. You can
make a libretro port once and expect the same code to run on all the
platforms that RetroArch supports. It's designed with simplicity and
ease of use in mind so that the porter can worry about the port at hand
instead of having to wrestle with an obfuscatory API.
The purpose of libretro is to help ease the work of the emulator/game
porter by giving him an API that allows him to target multiple platforms
at once without having to redo any code. He doesn't have to worry about
writing input/video/audio drivers - all of that is supplied to him by
RetroArch. All he has to do is to have the emulator port hook into the
libretro API and that's it - we take care of the rest.
------------------------------------------------------------------------------
WII PORT
------------------------------------------------------------------------------
The Wii port of RetroArch has the following features:
- Real-time rewinding
- Switching between emulator cores seamlessly, and ability to install
new libretro cores
------------------------------------------------------------------------------
EMULATOR/GAME CORES BUNDLED WITH WII PORT
------------------------------------------------------------------------------
The following emulators/games have been ported to RetroArch and are included in
the Wii release of RetroArch.
For more information about them, see the included
'retroarch-libretro-README.txt' file.
- Final Burn Alpha [version 0.2.97.28]
- Final Burn Alpha Cores (CPS1 - CPS2 - NeoGeo) [version 0.2.97.28] (**)
- FCEUmm (Nintendo Entertainment System) [recent SVN version]
- NEStopia (Nintendo Entertainment System) [1.44]
- Gambatte (Game Boy | Super Game Boy | Game Boy Color) [version 0.5.0 WIP]
- Genesis Plus GX (Sega SG-1000 | Master System | Game Gear | Genesis/Mega Drive |
Sega CD) [version 1.7.3]
- SNES9x Next (Super Nintendo/Super Famicom)
- VBA Next (Game Boy Advance) (*)
- Prboom (for playing Doom 1/Doom 2/Ultimate Doom/Final Doom)
- Mednafen PCE Fast (PC Engine/PC Engine CD/Turbografx 16)
- Mednafen Wonderswan (WonderSwan/WonderSwan Color/WonderSwan Crystal)
- Mednafen NGP (Neo Geo Pocket Color)
- Mednafen VB (Virtual Boy)
All of the emulators listed above are the latest versions currently
available. Most of them have been specifically optimized so that
they will run better on Wii (some games would not reach fullspeed
without these optimizations).
* Some games don't run at fullspeed on Wii (VBA Next is a
RetroConsole Level 2 emulator port).
** The biggest Neo-Geo ROMs that can be loaded are around 23+MB in
size, such as Real Bout Fatal Fury 1 and King of Fighters '96.
------------------------------------------------------------------------------
WHAT EXTENSIONS ARE SUPPORTED BY EACH CORE
------------------------------------------------------------------------------
- Prboom WAD|wad
- SNES9x Next smc|fig|sfc|gd3|gd7|dx2|bsx|swc|zip|SMC|FIG|SFC|BSX|GD3|
GD7|DX2|SWC
- Genesis Plus GX md|smd|bin|gen|zip|MD|SMD|bin|GEN|ZIP|sms|SMS|gg|GG|sg|SG|
cue|CUE
- VBA Next GBA|gba
- FCEUmm nes|NES|unif|UNIF
- NEStopia nes|NES|fds|FDS
- Gambatte gb|gbc|dmg|zip|GB|GBC|DMG|ZIP
- Final Burn Alpha zip|ZIP
- Mednafen PCE pce|PCE|cue|CUE
- Mednafen Wonderswan ws|WS|wsc|WSC
- Mednafen NGP ngp|NGP
- Mednafen VB vb|VB
------------------------------------------------------------------------------
ZIP SUPPORT (IN GENERAL)
------------------------------------------------------------------------------
Selecting a ZIP file will temporarily unzip that file to the harddrive. The
temporary file will be deleted as soon as the game gets unloaded and/or when
you quit RetroArch.
NOTE: For the FBA core (and other cores that have 'block_extract' set to
true) - selecting a ZIP file from the Filebrowser will load that game
directly.
------------------------------------------------------------------------------
Troubleshooting
------------------------------------------------------------------------------
If you find that RetroArch no longer works for whatever reason, there is
a way to get it back to work -
- Remove retroarch.cfg from the 'retroarch' folder on your storage device,
then start up again. The Libretro management service in RetroArch should
automatically pick a random libretro core and write this to the config file.
------------------------------------------------------------------------------
What can you expect in the future?
------------------------------------------------------------------------------
- Do a Blackberry Playbook/Blackberry 10 RetroArch port
- Do an iOS port of RetroArch (will need hardware for this - gifts appreciated)
- Make the libxenon port release-worthy.
- Add console-friendly features (nicely formatted names for FBA, some better
way to do core switching, etc)
- Fix NxEngine issues on consoles
- Finish up MAME 0.72 port
- Finish up ScummVM port
- Port of VICE to libretro
- More emulators, more games that will run on RetroArch
- Lots of other crazy ideas that might or might not pan out
------------------------------------------------------------------------------
Credits
------------------------------------------------------------------------------
- Hyllian for the xBR shader family.
- Opium2k for the nice manual shaders (bundled with PS3 release).
- Deank for assistance with RetroArch Salamander on CFW PS3s and
- Mudlord for his Waterpaint/Noise shaders.
Multiman interoperability.
- FBA devs for adopting the libretro port.
- Ekeeke for help with the Genesis Plus GX port.
- ToadKing for having done a lot of work on RetroArch Wii.
- Freakdave for helping out with the Xbox 1 port.
------------------------------------------------------------------------------
Websites
------------------------------------------------------------------------------
Twitter: http://twitter.com/libretro
Source: http://github.com/libretro
Homepage: http://www.libretro.org
IRC: #retroarch (freenode)
------------------------------------------------------------------------------

View File

@ -0,0 +1,229 @@
------------------------------------------------------------------------------
RETROARCH XBOX 1 - 0.9.8.3
------------------------------------------------------------------------------
RetroConsole Level: 1
Author: Themaister, Squarepusher/Twin Aphex, Freakdave
------------------------------------------------------------------------------
------------------------------------------------------------------------------
HOW TO INSTALL THIS
------------------------------------------------------------------------------
Copy the entire folder ('RetroArch-XB1') to your harddrive.
ROMs go into the 'roms' directory, or some subdirectory in the 'RetroArch-XB1'
directory.
------------------------------------------------------------------------------
HOW TO USE THIS
------------------------------------------------------------------------------
On first startup, RetroArch will select one of the dozen or so
emulator/game cores. The name of the core currently loaded will be
shown at the bottom side of the screen.
You can now select a ROM that this core supports and load it in the Filebrowser.
There are two ways of selecting a different core:
1) 'Change Libretro core' in the Main Menu
Go to the Settings menu by pressing [Select], go forwards two pages by pressing
he [R Trigger] until you come across 'Default libretro core'. Press A to go to
a filebrowser where you can select a different core. Press [A button] to switch
to the emulator/game core.
2) From the Ingame Menu
While playing a game, press the [Right Thumb] button. Select 'Change libretro core'
with the [A button] and select a different core.
------------------------------------------------------------------------------
INGAME CONTROLS
------------------------------------------------------------------------------
During ingame operation you can do some extra actions:
Right Thumb Stick - Down - Fast-forwards the game
Right Thumb Stick - Up - Rewinds the game in real-time
('Rewind' has to be enabled in the 'Settings'
screen - warning - comes at a slight
performance decrease but will be worth it
if you love this feature)
RStick Left + RT - Decrease save state slot
Rtick Right + RT - Increase save state slot
RStick Up + RT - Load selected save state slot
RStick Down + RT - Save selected save state slot
Right Thumb + Left Thumb - Go back to 'Menu'/'Quick Menu'
------------------------------------------------------------------------------
FILE BROWSER EXTRA CONTROLS
------------------------------------------------------------------------------
Left Trigger - Go to previous drive mapping
Right Trigger - Go to next drive mapping
White - Scroll list up
Black - Scroll list down
------------------------------------------------------------------------------
WHAT IS RETROARCH?
------------------------------------------------------------------------------
RetroArch is a modular multi-system emulator system that is designed to
be fast, lightweight and portable. It has features few other emulator
frontends have, such as real-time rewinding and game-aware shading.
------------------------------------------------------------------------------
WHAT IS LIBRETRO?
------------------------------------------------------------------------------
Libretro is the API that RetroArch uses. It makes it easy to port games
and emulators to a single core backend, such as RetroArch.
For the user, this means - more ports to play with, more crossplatform
portability, less worrying about developers having to reinvent the wheel
writing boilerplate UI/port code - so that they can get busy with writing
the emulator/porting the emulator/game.
------------------------------------------------------------------------------
WHAT'S THE BIG DEAL?
------------------------------------------------------------------------------
Right now it's unique in that it runs the same emulator cores on
multiple systems (such as Xbox 360, Xbox 1, PS3, PC, Wii, etc).
For each emulator 'core', RetroArch makes use of a library API that we
like to call 'libretro'.
Think of libretro as an interface for emulator and game ports. You can
make a libretro port once and expect the same code to run on all the
platforms that RetroArch supports. It's designed with simplicity and
ease of use in mind so that the porter can worry about the port at hand
instead of having to wrestle with an obfuscatory API.
The purpose of libretro is to help ease the work of the emulator/game
porter by giving him an API that allows him to target multiple platforms
at once without having to redo any code. He doesn't have to worry about
writing input/video/audio drivers - all of that is supplied to him by
RetroArch. All he has to do is to have the emulator port hook into the
libretro API and that's it - we take care of the rest.
------------------------------------------------------------------------------
XBOX 1 PORT
------------------------------------------------------------------------------
The Xbox 1 port of RetroArch has the following features:
- Real-time rewinding.
- Switching between emulator cores seamlessly, and ability to install
new libretro cores
------------------------------------------------------------------------------
EMULATOR/GAME CORES BUNDLED WITH XBOX 1 PORT
------------------------------------------------------------------------------
The following emulators/games have been ported to RetroArch and are included in
the Xbox 1 release of RetroArch.
For more information about them, see the included
'retroarch-libretro-README.txt' file.
- Final Burn Alpha (Arcade - various) [version 0.2.97.28]
- Final Burn Alpha Cores (CPS1 - CPS2 - Neo - more) [version 0.2.97.28] (***)
- FCEUmm (Nintendo Entertainment System) [recent SVN version]
- NEStopia (Nintendo Entertainment System) [1.44]
- Gambatte (Game Boy | Super Game Boy | Game Boy Color) [version 0.5.0 WIP]
- Genesis Plus GX (Sega SG-1000 | Master System | Game Gear | Genesis/Mega Drive |
Sega CD) [version 1.7.3]
- SNES9x Next (Super Nintendo/Super Famicom) (v1.52.3) (**)
- VBA Next (Game Boy Advance) (*)
- Prboom (for playing Doom 1/Doom 2/Ultimate Doom/Final Doom)
- Mednafen PCE Fast (PC Engine/PC Engine CD/Turbografx 16)
- Mednafen Wonderswan (WonderSwan/WonderSwan Color/WonderSwan Crystal)
- Mednafen NGP (Neo Geo Pocket Color)
All of the emulators listed above are the latest versions currently
available. Most of them have been specifically optimized so that
they will run better on Xbox 1 (some games would not reach fullspeed
without these optimizations).
* - VBA Next doesn't run at fullspeed on Wii (VBA Next is a RetroConsole
Level 2 emulator port). It will be replaced by a port of gpSP in the near
future.
** - SuperFX games will not run at fullspeed - a special version of SNES9x
will be developed for Retro Console Level 1 systems.
*** The biggest Neo-Geo ROMs that can be loaded are around 23+MB in
size, such as Real Bout Fatal Fury 1 and King of Fighters '96.
------------------------------------------------------------------------------
WHAT EXTENSIONS ARE SUPPORTED BY EACH CORE
------------------------------------------------------------------------------
- Prboom WAD|wad
- SNES9x Next smc|fig|sfc|gd3|gd7|dx2|bsx|swc|zip|SMC|FIG|SFC|BSX|GD3|
GD7|DX2|SWC
- Genesis Plus GX md|smd|bin|gen|zip|MD|SMD|bin|GEN|ZIP|sms|SMS|gg|GG|sg|SG|
cue|CUE
- VBA Next GBA|gba
- FCEUmm nes|NES|unif|UNIF
- NEStopia nes|NES|fds|FDS
- Gambatte gb|gbc|dmg|zip|GB|GBC|DMG|ZIP
- Final Burn Alpha zip|ZIP
- Mednafen PCE pce|PCE|cue|CUE
- Mednafen Wonderswan ws|WS|wsc|WSC
- Mednafen PCE pce|PCE|cue|CUE
- Mednafen Wonderswan ws|WS|wsc|WSC
- Mednafen NGP ngp|NGP
------------------------------------------------------------------------------
ZIP SUPPORT
------------------------------------------------------------------------------
Selecting a ZIP file will temporarily unzip that file to the harddrive. The
temporary file will be deleted as soon as the game gets unloaded and/or when
you quit RetroArch.
NOTE: For the FBA core (and other cores that have 'block_extract' set to
true) - selecting a ZIP file from the Filebrowser will load that game
directly.
------------------------------------------------------------------------------
Troubleshooting
------------------------------------------------------------------------------
If you find that RetroArch no longer works for whatever reason, there is
a way to get it back to work -
- Remove retroarch.cfg from the 'Retroarch-XB1' folder, then start up again.
The Libretro management service in RetroArch should automatically pick a
random libretro core and write this to the config file.
------------------------------------------------------------------------------
What can you expect in the future?
------------------------------------------------------------------------------
- Do a Blackberry Playbook/Blackberry 10 RetroArch port
- Do an iOS port of RetroArch (will need hardware for this - gifts appreciated)
- Make the libxenon port release-worthy.
- Add console-friendly features (nicely formatted names for FBA, some better
way to do core switching, etc)
- Fix NxEngine issues on consoles
- Finish up MAME 0.72 port
- Finish up ScummVM port
- Port of VICE to libretro
- More emulators, more games that will run on RetroArch
- Lots of other crazy ideas that might or might not pan out
------------------------------------------------------------------------------
Credits
------------------------------------------------------------------------------
- Mudlord for his Waterpaint/Noise shaders.
- Hyllian for the xBR shader.
- Opium2k for the nice manual shaders (bundled with PS3 release).
- Deank for assistance with RetroArch Salamander on CFW PS3s and
Multiman interoperability.
- FBA devs for adopting the libretro port.
- Ekeeke for help with the Genesis Plus GX port.
- ToadKing for having done a lot of work on RetroArch Wii.
- Freakdave for helping out with the Xbox 1 port.
------------------------------------------------------------------------------
Websites
------------------------------------------------------------------------------
Twitter: http://twitter.com/libretro
Source: http://github.com/libretro
Homepage: http://www.libretro.org
IRC: #retroarch (freenode)
------------------------------------------------------------------------------

View File

@ -22,6 +22,7 @@
#include <math.h>
#include "compat/posix_string.h"
#include "audio/utils.h"
#include "audio/resampler.h"
#ifdef HAVE_X11
#include "gfx/context/x11_common.h"
@ -408,9 +409,13 @@ void init_audio(void)
g_extern.audio_data.chunk_size = g_extern.audio_data.nonblock_chunk_size;
}
g_extern.audio_data.source = resampler_new();
if (!g_extern.audio_data.source)
const char *resampler = *g_settings.audio.resampler ? g_settings.audio.resampler : NULL;
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", resampler ? resampler : "(default)");
g_extern.audio_active = false;
}
rarch_assert(g_extern.audio_data.data = (float*)malloc(max_bufsamples * sizeof(float)));
@ -447,23 +452,23 @@ void init_audio(void)
static void compute_audio_buffer_statistics(void)
{
unsigned samples = min(g_extern.measure_data.buffer_free_samples_count, AUDIO_BUFFER_FREE_SAMPLES_COUNT);
if (samples < 2)
if (samples < 3)
return;
uint64_t accum = 0;
for (unsigned i = 0; i < samples; i++)
for (unsigned i = 1; i < samples; i++)
accum += g_extern.measure_data.buffer_free_samples[i];
int avg = accum / samples;
int avg = accum / (samples - 1);
uint64_t accum_var = 0;
for (unsigned i = 0; i < samples; i++)
for (unsigned i = 1; i < samples; i++)
{
int diff = avg - g_extern.measure_data.buffer_free_samples[i];
accum_var += diff * diff;
}
unsigned stddev = (unsigned)sqrt((double)accum_var / (samples - 1));
unsigned stddev = (unsigned)sqrt((double)accum_var / (samples - 2));
float avg_filled = 1.0f - (float)avg / g_extern.audio_data.driver_buffer_size;
float deviation = (float)stddev / g_extern.audio_data.driver_buffer_size;
@ -473,7 +478,7 @@ static void compute_audio_buffer_statistics(void)
unsigned low_water_count = 0;
unsigned high_water_count = 0;
for (unsigned i = 0; i < samples; i++)
for (unsigned i = 1; i < samples; i++)
{
if (g_extern.measure_data.buffer_free_samples[i] >= low_water_size)
low_water_count++;
@ -484,41 +489,47 @@ static void compute_audio_buffer_statistics(void)
RARCH_LOG("Average audio buffer saturation: %.2f %%, standard deviation (percentage points): %.2f %%.\n",
avg_filled * 100.0, deviation * 100.0);
RARCH_LOG("Amount of time spent close to underrun: %.2f %%. Close to blocking: %.2f %%.\n",
(100.0 * low_water_count) / samples,
(100.0 * high_water_count) / samples);
(100.0 * low_water_count) / (samples - 1),
(100.0 * high_water_count) / (samples - 1));
}
static void compute_monitor_fps_statistics(void)
{
unsigned samples = min(g_extern.measure_data.frame_time_samples_count,
MEASURE_FRAME_TIME_SAMPLES_COUNT);
if (samples < 2)
if (g_extern.measure_data.frame_time_samples_count < 2 * MEASURE_FRAME_TIME_SAMPLES_COUNT)
{
RARCH_LOG("Does not have enough samples for monitor refresh rate estimation. Requires to run for at least %u frames.\n",
2 * MEASURE_FRAME_TIME_SAMPLES_COUNT);
return;
}
unsigned samples = MEASURE_FRAME_TIME_SAMPLES_COUNT;
// Measure statistics on frame time (microsecs), *not* FPS.
rarch_time_t accum = 0;
for (unsigned i = 0; i < samples; i++)
accum += g_extern.measure_data.frame_time_samples[i];
#if 0
for (unsigned i = 0; i < samples; i++)
RARCH_LOG("Interval #%u: %d usec / frame.\n",
i, (int)g_extern.measure_data.frame_time_samples[i]);
#endif
rarch_time_t avg = accum / samples;
rarch_time_t accum_var = 0;
// Drop first measurement. It is likely to be bad.
for (unsigned i = 0; i < samples; i++)
{
rarch_time_t diff = avg - g_extern.measure_data.frame_time_samples[i];
rarch_time_t diff = g_extern.measure_data.frame_time_samples[i] - avg;
accum_var += diff * diff;
}
double stddev = sqrt((double)accum_var / (samples - 1));
double avg_fps = 1000000.0 / avg;
double max_stddev_fps = 1000000.0 / (avg - stddev);
double stddev_fps = max_stddev_fps - avg_fps;
double sigma_deviation = (g_settings.video.refresh_rate - avg_fps) / stddev_fps;
RARCH_LOG("Average monitor Hz: %.6f Hz. Standard deviation: %.6f Hz (%.3f %% deviation, based on %u last samples).\n",
avg_fps, stddev_fps, 100.0 * stddev_fps / avg_fps, samples);
RARCH_LOG("Configured monitor FPS %.6f Hz deviates %.3f sigma from average.\n",
g_settings.video.refresh_rate, sigma_deviation);
RARCH_LOG("Average monitor Hz: %.6f Hz. (%.3f %% frame time deviation, based on %u last samples).\n",
avg_fps, 100.0 * stddev / avg, samples);
}
void uninit_audio(void)
@ -539,8 +550,7 @@ void uninit_audio(void)
if (driver.audio_data && driver.audio)
driver.audio->free(driver.audio_data);
if (g_extern.audio_data.source)
resampler_free(g_extern.audio_data.source);
rarch_resampler_freep(&g_extern.audio_data.resampler, &g_extern.audio_data.resampler_data);
free(g_extern.audio_data.data);
g_extern.audio_data.data = NULL;

View File

@ -29,6 +29,10 @@
#undef NEED_DYNAMIC
#endif
#ifdef __cplusplus
extern "C" {
#endif
void init_libretro_sym(void);
void uninit_libretro_sym(void);
@ -78,5 +82,9 @@ extern unsigned (*pretro_get_region)(void);
extern void *(*pretro_get_memory_data)(unsigned);
extern size_t (*pretro_get_memory_size)(unsigned);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -463,6 +463,14 @@ static void render_text(rgui_handle_t *rgui)
case RGUI_SETTINGS_AUDIO_CONTROL_RATE:
snprintf(type_str, sizeof(type_str), "%.3f", g_settings.audio.rate_control_delta);
break;
case RGUI_SETTINGS_RESAMPLER_TYPE:
#ifdef HAVE_SINC
if (strstr(g_settings.audio.resampler, "sinc"))
snprintf(type_str, sizeof(type_str), "Sinc");
else
#endif
snprintf(type_str, sizeof(type_str), "Hermite");
break;
case RGUI_SETTINGS_SRAM_DIR:
snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF");
break;
@ -750,6 +758,40 @@ static int rgui_settings_toggle_setting(rgui_file_type_t setting, rgui_action_t
else if (action == RGUI_ACTION_RIGHT)
rmenu_settings_set(S_AUDIO_CONTROL_RATE_INCREMENT);
break;
case RGUI_SETTINGS_RESAMPLER_TYPE:
{
bool changed = false;
if (action == RGUI_ACTION_START)
{
#ifdef HAVE_SINC
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
#else
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
#endif
changed = true;
}
else if (action == RGUI_ACTION_LEFT || action == RGUI_ACTION_RIGHT)
{
#ifdef HAVE_SINC
if( strstr(g_settings.audio.resampler, "hermite"))
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
else
#endif
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
changed = true;
}
if (g_extern.main_is_init && changed)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
}
break;
case RGUI_SETTINGS_SRAM_DIR:
if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT)
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE);
@ -879,6 +921,7 @@ static void rgui_settings_populate_entries(rgui_handle_t *rgui)
RGUI_MENU_ITEM("Rotation", RGUI_SETTINGS_VIDEO_ROTATION);
RGUI_MENU_ITEM("Mute Audio", RGUI_SETTINGS_AUDIO_MUTE);
RGUI_MENU_ITEM("Audio Control Rate", RGUI_SETTINGS_AUDIO_CONTROL_RATE);
RGUI_MENU_ITEM("Audio Resampler", RGUI_SETTINGS_RESAMPLER_TYPE);
RGUI_MENU_ITEM("SRAM Saves in \"sram\" Dir", RGUI_SETTINGS_SRAM_DIR);
RGUI_MENU_ITEM("State Saves in \"state\" Dir", RGUI_SETTINGS_STATE_DIR);
RGUI_MENU_ITEM("Core", RGUI_SETTINGS_CORE);

View File

@ -54,6 +54,7 @@ typedef enum
RGUI_SETTINGS_VIDEO_ROTATION,
RGUI_SETTINGS_AUDIO_MUTE,
RGUI_SETTINGS_AUDIO_CONTROL_RATE,
RGUI_SETTINGS_RESAMPLER_TYPE,
RGUI_SETTINGS_ZIP_EXTRACT,
RGUI_SETTINGS_SRAM_DIR,
RGUI_SETTINGS_STATE_DIR,

View File

@ -290,6 +290,21 @@ static void populate_setting_item(void *data, unsigned input)
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set all [General Audio Settings] back to their 'DEFAULT' values.");
break;
case SETTING_RESAMPLER_TYPE:
snprintf(current_item->text, sizeof(current_item->text), "Sound resampler");
#ifdef HAVE_SINC
if (strstr(g_settings.audio.resampler, "sinc"))
{
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "Sinc");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Sinc resampler] - slightly slower but better sound quality at high frequencies.");
}
else
#endif
{
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "Hermite");
snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Hermite resampler] - faster but less accurate at high frequencies.");
}
break;
case SETTING_EMU_CURRENT_SAVE_STATE_SLOT:
snprintf(current_item->text, sizeof(current_item->text), "Current save state slot");
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "%d", g_extern.state_slot);
@ -922,6 +937,7 @@ static bool osk_callback_enter_filename(void *data)
RARCH_LOG("[osk_callback_enter_filename]: filepath is: %s.\n", filepath);
struct gl_cg_cgp_info current_settings;
memset(&current_settings, 0, sizeof(current_settings));
current_settings.shader[0] = g_settings.video.cg_shader_path;
current_settings.shader[1] = g_settings.video.second_pass_shader;
current_settings.filter_linear[0] = g_settings.video.smooth;
@ -1310,9 +1326,12 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
#ifdef HAVE_OSKUTIL
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
{
rmenu_state.osk_param = SHADER_PRESET_FILE;
rmenu_state.osk_init = osk_callback_enter_filename_init;
rmenu_state.osk_callback = osk_callback_enter_filename;
if(g_extern.main_is_init)
{
rmenu_state.osk_param = SHADER_PRESET_FILE;
rmenu_state.osk_init = osk_callback_enter_filename_init;
rmenu_state.osk_callback = osk_callback_enter_filename;
}
}
#endif
break;
@ -1320,6 +1339,11 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
break;
#endif
case SETTING_DEFAULT_VIDEO_ALL:
if(input & (1ULL << RMENU_DEVICE_NAV_START))
{
set_setting_action(NULL, SETTING_SHADER, 1ULL << RMENU_DEVICE_NAV_START);
set_setting_action(NULL, SETTING_SHADER_2, 1ULL << RMENU_DEVICE_NAV_START);
}
break;
case SETTING_SOUND_MODE:
if(input & (1ULL << RMENU_DEVICE_NAV_LEFT))
@ -1425,6 +1449,46 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
return -1;
}
break;
case SETTING_RESAMPLER_TYPE:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
{
#ifdef HAVE_SINC
if( strstr(g_settings.audio.resampler, "hermite"))
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
else
#endif
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
if (g_extern.main_is_init)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
{
#ifdef HAVE_SINC
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
#else
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
#endif
if (g_extern.main_is_init)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
}
break;
case SETTING_EMU_AUDIO_MUTE:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
rmenu_settings_set(S_AUDIO_MUTE);

View File

@ -134,6 +134,7 @@ enum
#ifdef HAVE_RSOUND
SETTING_RSOUND_SERVER_IP_ADDRESS,
#endif
SETTING_RESAMPLER_TYPE,
SETTING_ENABLE_CUSTOM_BGM,
SETTING_DEFAULT_AUDIO_ALL,
SETTING_EMU_CURRENT_SAVE_STATE_SLOT,

View File

@ -396,6 +396,7 @@ HRESULT CRetroArchSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled)
m_settingslist.SetText(SETTING_EMU_SHOW_INFO_MSG, (g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW)) ? L"Info messages: ON" : L"Info messages: OFF");
m_settingslist.SetText(SETTING_EMU_SHOW_DEBUG_INFO_MSG, (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? L"Debug Info messages: ON" : L"Debug Info messages: OFF");
m_settingslist.SetText(SETTING_GAMMA_CORRECTION_ENABLED, g_extern.console.screen.gamma_correction ? L"Gamma correction: ON" : L"Gamma correction: OFF");
m_settingslist.SetText(SETTING_AUDIO_RESAMPLER_TYPE, strstr(g_settings.audio.resampler, "sinc") ? L"Audio Resampler: Sinc" : L"Audio Resampler: Hermite");
m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER, g_settings.video.smooth ? L"Hardware filtering shader #1: Linear interpolation" : L"Hardware filtering shader #1: Point filtering");
m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER_2, g_settings.video.second_pass_smooth ? L"Hardware filtering shader #2: Linear interpolation" : L"Hardware filtering shader #2: Point filtering");
m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.render_to_texture ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF");
@ -467,6 +468,25 @@ HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled
g_extern.lifecycle_mode_state |= (1ULL << MODE_FPS_DRAW);
m_settingslist.SetText(SETTING_EMU_SHOW_DEBUG_INFO_MSG, (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? L"Debug Info messages: ON" : L"Debug Info messages: OFF");
break;
case SETTING_AUDIO_RESAMPLER_TYPE:
#ifdef HAVE_SINC
if( strstr(g_settings.audio.resampler, "hermite"))
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
else
#endif
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
m_settingslist.SetText(SETTING_AUDIO_RESAMPLER_TYPE, strstr(g_settings.audio.resampler, "sinc") ? L"Audio Resampler: Sinc" : L"Audio Resampler: Hermite");
if (g_extern.main_is_init)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
break;
case SETTING_GAMMA_CORRECTION_ENABLED:
g_extern.console.screen.gamma_correction = g_extern.console.screen.gamma_correction ? 0 : 1;
driver.video->restart();
@ -577,6 +597,25 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro
g_extern.lifecycle_mode_state |= (1ULL << MODE_FPS_DRAW);
m_settingslist.SetText(SETTING_EMU_SHOW_DEBUG_INFO_MSG, (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? L"Debug Info messages: ON" : L"Debug Info messages: OFF");
break;
case SETTING_AUDIO_RESAMPLER_TYPE:
#ifdef HAVE_SINC
if( strstr(g_settings.audio.resampler, "hermite"))
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
else
#endif
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
m_settingslist.SetText(SETTING_AUDIO_RESAMPLER_TYPE, strstr(g_settings.audio.resampler, "sinc") ? L"Audio Resampler: Sinc" : L"Audio Resampler: Hermite");
if (g_extern.main_is_init)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
break;
case SETTING_GAMMA_CORRECTION_ENABLED:
g_extern.console.screen.gamma_correction = g_extern.console.screen.gamma_correction ? 0 : 1;
driver.video->restart();
@ -631,6 +670,25 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro
g_extern.lifecycle_mode_state |= (1ULL << MODE_FPS_DRAW);
m_settingslist.SetText(SETTING_EMU_SHOW_DEBUG_INFO_MSG, (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? L"Debug Info messages: ON" : L"Debug Info messages: OFF");
break;
case SETTING_AUDIO_RESAMPLER_TYPE:
#ifdef HAVE_SINC
if( strstr(g_settings.audio.resampler, "hermite"))
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "sinc");
else
#endif
snprintf(g_settings.audio.resampler, sizeof(g_settings.audio.resampler), "hermite");
m_settingslist.SetText(SETTING_AUDIO_RESAMPLER_TYPE, strstr(g_settings.audio.resampler, "sinc") ? L"Audio Resampler: Sinc" : L"Audio Resampler: Hermite");
if (g_extern.main_is_init)
{
if (!rarch_resampler_realloc(&g_extern.audio_data.resampler_data, &g_extern.audio_data.resampler,
g_settings.audio.resampler))
{
RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler);
g_extern.audio_active = false;
}
}
break;
case SETTING_GAMMA_CORRECTION_ENABLED:
g_extern.console.screen.gamma_correction = g_extern.console.screen.gamma_correction ? 0 : 1;
driver.video->restart();

View File

@ -26,6 +26,7 @@ enum
SETTING_EMU_REWIND_GRANULARITY,
SETTING_EMU_SHOW_INFO_MSG,
SETTING_EMU_SHOW_DEBUG_INFO_MSG,
SETTING_AUDIO_RESAMPLER_TYPE,
SETTING_GAMMA_CORRECTION_ENABLED,
SETTING_SHADER,
SETTING_SHADER_2,

View File

@ -95,6 +95,10 @@
#include "audio/resampler.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_PLAYERS 8
enum dpad_emu_enums
@ -217,6 +221,8 @@ struct settings
bool rate_control;
float rate_control_delta;
float volume; // dB scale
char resampler[32];
} audio;
struct
@ -229,6 +235,8 @@ struct settings
bool debug_enable;
#ifdef ANDROID
bool autodetect_enable;
unsigned icade_profile[MAX_PLAYERS];
unsigned icade_count;
#endif
#ifdef RARCH_CONSOLE
uint64_t default_binds[RARCH_CUSTOM_BIND_LIST_END];
@ -373,7 +381,8 @@ struct global
struct
{
rarch_resampler_t *source;
void *resampler_data;
const rarch_resampler_t *resampler;
float *data;
@ -413,7 +422,7 @@ struct global
unsigned buffer_free_samples[AUDIO_BUFFER_FREE_SAMPLES_COUNT];
uint64_t buffer_free_samples_count;
#define MEASURE_FRAME_TIME_SAMPLES_COUNT 256
#define MEASURE_FRAME_TIME_SAMPLES_COUNT (2 * 1024)
rarch_time_t frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_COUNT];
uint64_t frame_time_samples_count;
} measure_data;
@ -649,6 +658,10 @@ extern struct settings g_settings;
extern struct global g_extern;
/////////
#ifdef __cplusplus
}
#endif
#include "retroarch_logger.h"
#ifndef max

View File

@ -23,43 +23,49 @@ static float time_to_fps(rarch_time_t last_time, rarch_time_t new_time, int fram
return (1000000.0f * frames) / (new_time - last_time);
}
#define FPS_UPDATE_INTERVAL 256
bool gfx_get_fps(char *buf, size_t size, bool always_write)
{
static rarch_time_t time;
static rarch_time_t fps_time;
static float last_fps;
bool ret = false;
*buf = '\0';
if (g_extern.frame_count == 0)
rarch_time_t new_time = rarch_get_time_usec();
if (g_extern.frame_count)
{
time = rarch_get_time_usec();
snprintf(buf, size, "%s", g_extern.title_buf);
ret = true;
}
else if ((g_extern.frame_count % 180) == 0)
{
rarch_time_t new_time = rarch_get_time_usec();
last_fps = time_to_fps(time, new_time, 180);
unsigned write_index = g_extern.measure_data.frame_time_samples_count++ &
(MEASURE_FRAME_TIME_SAMPLES_COUNT - 1);
g_extern.measure_data.frame_time_samples[write_index] = (new_time - time) / 180;
g_extern.measure_data.frame_time_samples[write_index] = new_time - fps_time;
fps_time = new_time;
time = new_time;
if ((g_extern.frame_count % FPS_UPDATE_INTERVAL) == 0)
{
last_fps = time_to_fps(time, new_time, FPS_UPDATE_INTERVAL);
time = new_time;
#ifdef RARCH_CONSOLE
snprintf(buf, size, "FPS: %6.1f || Frames: %d", last_fps, g_extern.frame_count);
snprintf(buf, size, "FPS: %6.1f || Frames: %d", last_fps, g_extern.frame_count);
#else
snprintf(buf, size, "%s || FPS: %6.1f || Frames: %d", g_extern.title_buf, last_fps, g_extern.frame_count);
snprintf(buf, size, "%s || FPS: %6.1f || Frames: %d", g_extern.title_buf, last_fps, g_extern.frame_count);
#endif
ret = true;
ret = true;
}
else if (always_write)
{
#ifdef RARCH_CONSOLE
snprintf(buf, size, "FPS: %6.1f || Frames: %d", last_fps, g_extern.frame_count);
#else
snprintf(buf, size, "%s || FPS: %6.1f || Frames: %d", g_extern.title_buf, last_fps, g_extern.frame_count);
#endif
}
}
else if (always_write)
else
{
#ifdef RARCH_CONSOLE
snprintf(buf, size, "FPS: %6.1f || Frames: %d", last_fps, g_extern.frame_count);
#else
snprintf(buf, size, "%s || FPS: %6.1f || Frames: %d", g_extern.title_buf, last_fps, g_extern.frame_count);
#endif
time = fps_time = new_time;
snprintf(buf, size, "%s", g_extern.title_buf);
ret = true;
}
return ret;

View File

@ -566,16 +566,22 @@ void gl_init_fbo(void *data, unsigned width, unsigned height)
gl_t *gl = (gl_t*)data;
// No need to use FBOs.
#ifndef RARCH_CONSOLE
/* we always want FBO to be at least initialized on startup for consoles */
if (!g_settings.video.render_to_texture && gl_shader_num_func(gl) == 0)
return;
#endif
struct gl_fbo_scale scale, scale_last;
gl_shader_scale(gl, 1, &scale);
gl_shader_scale(gl, gl_shader_num_func(gl), &scale_last);
// No need to use FBOs.
#ifndef RARCH_CONSOLE
/* we always want FBO to be at least initialized on startup for consoles */
if (gl_shader_num_func(gl) == 1 && !scale.valid && !g_settings.video.render_to_texture)
return;
#endif
if (!load_fbo_proc(gl))
{
@ -1930,6 +1936,9 @@ static void gl_start(void)
#ifdef RARCH_CONSOLE
// Comes too early for console - moved to gl_start
gl->font_ctx = gl_font_init_first(gl, g_settings.video.font_path, g_settings.video.font_size);
if (!g_settings.video.render_to_texture)
gl_deinit_fbo(gl);
#endif
context_get_available_resolutions_func();

View File

@ -23,6 +23,10 @@
#include "../../config.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
bool rpng_load_image_argb(const char *path, uint32_t **data, unsigned *width, unsigned *height);
#ifdef HAVE_ZLIB_DEFLATE
@ -32,5 +36,9 @@ bool rpng_save_image_bgr24(const char *path, const uint8_t *data,
unsigned width, unsigned height, unsigned pitch);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -21,6 +21,9 @@
#if defined(__SSE2__)
#include <emmintrin.h>
#ifdef _WIN32
#include <intrin.h>
#endif
#endif
static inline uint64_t build_argb64(uint16_t a, uint16_t r, uint16_t g, uint16_t b)

View File

@ -484,7 +484,11 @@ static bool load_plain(const char *path)
if (!load_program(1, path, true))
return false;
if (*g_settings.video.second_pass_shader && g_settings.video.render_to_texture)
if (*g_settings.video.second_pass_shader
#ifndef RARCH_CONSOLE
&& g_settings.video.render_to_texture
#endif
)
{
if (!load_program(2, g_settings.video.second_pass_shader, true))
return false;
@ -797,6 +801,22 @@ static bool load_shader(const char *cgp_path, unsigned i, config_file_t *conf)
if (!load_program(i + 1, path_buf, true))
return false;
#ifdef HAVE_RMENU
// In RMenu, need to display shaders in menu.
switch (i)
{
case 0:
strlcpy(g_settings.video.cg_shader_path,
path_buf, sizeof(g_settings.video.cg_shader_path));
break;
case 1:
strlcpy(g_settings.video.second_pass_shader,
path_buf, sizeof(g_settings.video.second_pass_shader));
break;
}
#endif
return true;
}
@ -930,6 +950,16 @@ static bool load_shader_params(unsigned i, config_file_t *conf)
}
}
#ifdef HAVE_RMENU
// In RMenu, need to set FBO scaling factors for first pass.
if (i == 0 && scale->type_x == RARCH_SCALE_INPUT && scale->type_y && RARCH_SCALE_INPUT
&& scale->scale_x == scale->scale_y)
{
g_settings.video.fbo.scale_x = scale->scale_x;
g_settings.video.fbo.scale_y = scale->scale_y;
}
#endif
end:
free(scale_type);
free(scale_type_x);
@ -989,6 +1019,20 @@ static bool load_preset(const char *path)
print_buf(filter_name_buf, "filter_linear%u", i);
if (config_get_bool(conf, filter_name_buf, &smooth))
fbo_smooth[i + 1] = smooth ? FILTER_LINEAR : FILTER_NEAREST;
#ifdef HAVE_RMENU
// In RMenu, need to set smoothing for first and second passes.
switch (i)
{
case 0:
g_settings.video.smooth = fbo_smooth[1];
break;
case 1:
g_settings.video.second_pass_smooth = fbo_smooth[2];
break;
}
#endif
}
for (int i = 0; i < shaders; i++)

View File

@ -116,29 +116,25 @@ void gx_set_video_mode(unsigned fbWidth, unsigned lines)
bool progressive = VIDEO_HaveComponentCable();
unsigned tvmode = VIDEO_GetCurrentTvMode();
#endif
unsigned max_width, max_height, max_xfb_height;
unsigned max_width, max_height;
switch (tvmode)
{
case VI_PAL:
max_width = VI_MAX_WIDTH_PAL;
max_height = VI_MAX_HEIGHT_PAL;
max_xfb_height = 574;
max_height = /* VI_MAX_HEIGHT_PAL */ 574;
break;
case VI_MPAL:
max_width = VI_MAX_WIDTH_MPAL;
max_height = VI_MAX_HEIGHT_MPAL;
max_xfb_height = 574;
break;
case VI_EURGB60:
max_width = VI_MAX_WIDTH_NTSC;
max_height = VI_MAX_HEIGHT_NTSC;
max_xfb_height = 480;
break;
default:
tvmode = VI_NTSC;
max_width = VI_MAX_WIDTH_EURGB60;
max_height = VI_MAX_HEIGHT_EURGB60;
max_xfb_height = 480;
break;
}
@ -170,10 +166,10 @@ void gx_set_video_mode(unsigned fbWidth, unsigned lines)
gx_mode.fbWidth = fbWidth;
gx_mode.efbHeight = min(lines, 480);
if (modetype == VI_NON_INTERLACE && lines > max_xfb_height / 2)
gx_mode.xfbHeight = max_xfb_height / 2;
else if (modetype != VI_NON_INTERLACE && lines > max_xfb_height)
gx_mode.xfbHeight = max_xfb_height;
if (modetype == VI_NON_INTERLACE && lines > max_height / 2)
gx_mode.xfbHeight = max_height / 2;
else if (modetype != VI_NON_INTERLACE && lines > max_height)
gx_mode.xfbHeight = max_height;
else
gx_mode.xfbHeight = lines;
@ -316,9 +312,9 @@ static void init_texture(unsigned width, unsigned height)
unsigned g_filter = g_settings.video.smooth ? GX_LINEAR : GX_NEAR;
GX_InitTexObj(&g_tex.obj, g_tex.data, width, height, (gx->rgb32) ? GX_TF_RGBA8 : (g_extern.lifecycle_mode_state & (1ULL << MODE_MENU_DRAW)) ? GX_TF_RGB5A3 : GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE);
GX_InitTexObjLOD(&g_tex.obj, g_filter, GX_NEAR_MIP_NEAR, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
GX_InitTexObjLOD(&g_tex.obj, g_filter, g_filter, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
GX_InitTexObj(&menu_tex.obj, menu_tex.data, RGUI_WIDTH, RGUI_HEIGHT, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, GX_FALSE);
GX_InitTexObjLOD(&menu_tex.obj, g_filter, GX_NEAR_MIP_NEAR, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
GX_InitTexObjLOD(&menu_tex.obj, g_filter, g_filter, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
GX_InvalidateTexAll();
}

1
hash.h
View File

@ -19,6 +19,7 @@
#include <stdint.h>
#include <stddef.h>
#include "msvc/msvc_compat.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

View File

@ -34,6 +34,7 @@
Rewind granularity:
Info messages:
Debug info messages:
Audio Resampler:
Gamma Correction:
Shader #1:
Shader #2:

View File

@ -34,6 +34,7 @@
Rewind granularity:
Info messages:
Debug info messages:
Audio Resampler:
Gamma Correction:
Shader #1:
Shader #2:

View File

@ -113,7 +113,7 @@
<MinimalRebuild>true</MinimalRebuild>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PreprocessorDefinitions>_DEBUG;_XBOX;HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";%(PreprocessorDefinitions);HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;RARCH_CONSOLE;HAVE_RMENU;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_XAUDIO</PreprocessorDefinitions>
<PreprocessorDefinitions>_DEBUG;_XBOX;HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";%(PreprocessorDefinitions);HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;RARCH_CONSOLE;HAVE_RMENU;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY;HAVE_XAUDIO</PreprocessorDefinitions>
<CallAttributedProfiling>Callcap</CallAttributedProfiling>
</ClCompile>
<Link>
@ -151,7 +151,7 @@
<PREfast>AnalyzeOnly</PREfast>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PreprocessorDefinitions>_DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_FILEBROWSER;RARCH_CONSOLE;HAVE_RMENU;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB</PreprocessorDefinitions>
<PreprocessorDefinitions>_DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_FILEBROWSER;RARCH_CONSOLE;HAVE_RMENU;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY</PreprocessorDefinitions>
<CallAttributedProfiling>Callcap</CallAttributedProfiling>
</ClCompile>
<Link>
@ -190,7 +190,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE;HAVE_RMENU;main=rarch_main;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_XAUDIO</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE;HAVE_RMENU;main=rarch_main;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY;HAVE_XAUDIO</PreprocessorDefinitions>
<CallAttributedProfiling>Callcap</CallAttributedProfiling>
</ClCompile>
<Link>
@ -234,7 +234,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_RMENU;HAVE_XAUDIO</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY;HAVE_RMENU;HAVE_XAUDIO</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -275,7 +275,7 @@
<ExceptionHandling>false</ExceptionHandling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>NDEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;main=rarch_main;RARCH_CONSOLE=1;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_RMENU;HAVE_XAUDIO</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;main=rarch_main;RARCH_CONSOLE=1;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY;HAVE_RMENU;HAVE_XAUDIO</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -316,7 +316,7 @@
<ExceptionHandling>false</ExceptionHandling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;RARCH_CONSOLE;HAVE_RMENU;main=rarch_main;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_XAUDIO</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);HAVE_XINPUT2;PACKAGE_VERSION="0.9.8.3";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;RARCH_CONSOLE;HAVE_RMENU;main=rarch_main;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360;HAVE_FBO;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY;HAVE_XAUDIO</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>

View File

@ -22,7 +22,7 @@
Optimization="3"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="&quot;$(SolutionDir)\msvc-stdint&quot;;&quot;$(SolutionDir)\msvc-71&quot;"
PreprocessorDefinitions="_DEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB"
PreprocessorDefinitions="_DEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8.3\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY"
MinimalRebuild="TRUE"
BasicRuntimeChecks="0"
RuntimeLibrary="1"
@ -72,7 +72,7 @@
OmitFramePointers="TRUE"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="&quot;$(SolutionDir)\msvc-stdint&quot;;&quot;$(SolutionDir)\msvc-71&quot;"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8.3\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY"
StringPooling="TRUE"
RuntimeLibrary="0"
BufferSecurityCheck="TRUE"
@ -127,7 +127,7 @@
OmitFramePointers="TRUE"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="&quot;$(SolutionDir)\msvc-stdint&quot;;&quot;$(SolutionDir)\msvc-71&quot;"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;FASTCAP;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8.3\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;FASTCAP;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY"
StringPooling="TRUE"
RuntimeLibrary="0"
BufferSecurityCheck="TRUE"
@ -188,7 +188,7 @@
EnableFiberSafeOptimizations="TRUE"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="&quot;$(SolutionDir)\msvc-stdint&quot;;&quot;$(SolutionDir)\msvc-71&quot;"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;inline=_inline;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8.3\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;inline=_inline;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY"
StringPooling="TRUE"
RuntimeLibrary="0"
BufferSecurityCheck="TRUE"
@ -241,7 +241,7 @@
OmitFramePointers="TRUE"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="&quot;$(SolutionDir)\msvc-stdint&quot;;&quot;$(SolutionDir)\msvc-71&quot;"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;LTCG;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB"
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\&quot;0.9.8.3\&quot;;__STDC_CONSTANT_MACROS;HAVE_ZLIB;LTCG;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER;HAVE_SCREENSHOTS;WANT_RZLIB;HAVE_SINC;SINC_LOWER_QUALITY"
StringPooling="TRUE"
RuntimeLibrary="0"
BufferSecurityCheck="TRUE"

View File

@ -64,23 +64,23 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
<IncludePath>$(DXSDK_DIR)Include;$(CG_INC_PATH);$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86;$(CG_LIB_PATH);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(LibraryPath)</LibraryPath>
<IncludePath>$(DXSDK_DIR)Include;$(CG_INC_PATH);$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(CG_LIB64_PATH);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
<IncludePath>$(DXSDK_DIR)Include;$(CG_INC_PATH);$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86;$(CG_LIB_PATH);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(LibraryPath)</LibraryPath>
<IncludePath>$(DXSDK_DIR)Include;$(CG_INC_PATH);$(IncludePath)</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(CG_LIB64_PATH);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@ -88,10 +88,12 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;CPU_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;HAVE_GLSL;HAVE_ZLIB;WANT_RZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_SINC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<CompileAs>CompileAsCpp</CompileAs>
<FloatingPointModel>Fast</FloatingPointModel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -106,10 +108,12 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;HAVE_GLSL;HAVE_ZLIB;WANT_RZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_SINC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<CompileAs>CompileAsCpp</CompileAs>
<FloatingPointModel>Fast</FloatingPointModel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -126,10 +130,12 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;CPU_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;HAVE_GLSL;HAVE_ZLIB;WANT_RZLIB;HAVE_SINC;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<CompileAs>CompileAsCpp</CompileAs>
<FloatingPointModel>Fast</FloatingPointModel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -148,10 +154,12 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;HAVE_WIN32_D3D9;HAVE_CG;HAVE_GLSL;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_SCREENSHOTS;HAVE_BSV_MOVIE;HAVE_DINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_SINC;HAVE_ZLIB;WANT_RZLIB;PACKAGE_VERSION="0.9.8";_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<CompileAs>CompileAsCpp</CompileAs>
<FloatingPointModel>Fast</FloatingPointModel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -165,30 +173,29 @@
<ItemGroup>
<ClCompile Include="..\..\audio\dsound.c">
</ClCompile>
<ClCompile Include="..\..\audio\ext_audio.c">
</ClCompile>
<ClCompile Include="..\..\audio\null.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)\nullaudio.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)\nullaudio.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)\nullaudio.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)\nullaudio.obj</ObjectFileName>
</ClCompile>
<ClCompile Include="..\..\audio\hermite.c" />
<ClCompile Include="..\..\audio\resampler.c" />
<ClCompile Include="..\..\audio\sinc.c" />
<ClCompile Include="..\..\audio\utils.c">
</ClCompile>
<ClCompile Include="..\..\audio\xaudio-c\xaudio-c.c">
</ClCompile>
<ClCompile Include="..\..\audio\xaudio-c\xaudio-c.cpp" />
<ClCompile Include="..\..\audio\xaudio.c">
</ClCompile>
<ClCompile Include="..\..\autosave.c">
</ClCompile>
<ClCompile Include="..\..\cheats.c" />
<ClCompile Include="..\..\compat\rxml\rxml.c" />
<ClCompile Include="..\..\deps\rzlib\rzlib.c" />
<ClCompile Include="..\..\file_extract.c" />
<ClCompile Include="..\..\gfx\d3d9\d3d9.cpp" />
<ClCompile Include="..\..\gfx\d3d9\render_chain.cpp" />
<ClCompile Include="..\..\gfx\fonts\bitmapfont.c" />
<ClCompile Include="..\..\gfx\fonts\fonts.c" />
<ClCompile Include="..\..\gfx\fonts\gl_font.c" />
<ClCompile Include="..\..\gfx\fonts\gl_raster_font.c" />
<ClCompile Include="..\..\gfx\rpng\rpng.c" />
<ClCompile Include="..\..\gfx\shader_cg.c" />
<ClCompile Include="..\..\gfx\shader_glsl.c" />
<ClCompile Include="..\..\performance.c">
</ClCompile>
<ClCompile Include="..\..\command.c">
@ -209,8 +216,6 @@
</ClCompile>
<ClCompile Include="..\..\gfx\context\wgl_ctx.c">
</ClCompile>
<ClCompile Include="..\..\gfx\ext_gfx.c">
</ClCompile>
<ClCompile Include="..\..\gfx\gfx_common.c">
</ClCompile>
<ClCompile Include="..\..\gfx\gfx_context.c">
@ -223,8 +228,6 @@
</ClCompile>
<ClCompile Include="..\..\gfx\math\matrix_3x3.c">
</ClCompile>
<ClCompile Include="..\..\gfx\null.c">
</ClCompile>
<ClCompile Include="..\..\gfx\scaler\filter.c">
</ClCompile>
<ClCompile Include="..\..\gfx\scaler\pixconv.c">
@ -241,12 +244,6 @@
</ClCompile>
<ClCompile Include="..\..\input\input_common.c">
</ClCompile>
<ClCompile Include="..\..\input\null.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)\nullinput.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)\nullinput.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)\nullinput.obj</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)\nullinput.obj</ObjectFileName>
</ClCompile>
<ClCompile Include="..\..\message.c">
</ClCompile>
<ClCompile Include="..\..\movie.c">
@ -275,4 +272,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

View File

@ -43,6 +43,12 @@
<Filter Include="Source Files\gfx\d3d9">
<UniqueIdentifier>{ae4f70af-fc87-4c8d-84a5-b2c4cd57e722}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\deps">
<UniqueIdentifier>{a1975595-d469-4d96-81bf-d6a4f0be32f5}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\gfx\rpng">
<UniqueIdentifier>{a1302353-aa00-4f85-a62f-3c40160a5fa3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\autosave.c">
@ -102,12 +108,6 @@
<ClCompile Include="..\..\audio\dsound.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\ext_audio.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\null.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\utils.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
@ -117,9 +117,6 @@
<ClCompile Include="..\..\gfx\context\wgl_ctx.c">
<Filter>Source Files\gfx\context</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\ext_gfx.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\gfx_common.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
@ -132,9 +129,6 @@
<ClCompile Include="..\..\gfx\image.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\null.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\state_tracker.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
@ -144,9 +138,6 @@
<ClCompile Include="..\..\input\input_common.c">
<Filter>Source Files\input</Filter>
</ClCompile>
<ClCompile Include="..\..\input\null.c">
<Filter>Source Files\input</Filter>
</ClCompile>
<ClCompile Include="..\..\conf\config_file.c">
<Filter>Source Files\conf</Filter>
</ClCompile>
@ -171,9 +162,6 @@
<ClCompile Include="..\..\gfx\math\matrix_3x3.c">
<Filter>Source Files\gfx\math</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\xaudio-c\xaudio-c.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\d3d9\d3d9.cpp">
<Filter>Source Files\gfx\d3d9</Filter>
</ClCompile>
@ -198,6 +186,33 @@
<ClCompile Include="..\..\gfx\fonts\fonts.c">
<Filter>Source Files\gfx\fonts</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\xaudio-c\xaudio-c.cpp">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\compat\rxml\rxml.c">
<Filter>Source Files\compat</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\resampler.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\audio\hermite.c">
<Filter>Source Files\audio</Filter>
</ClCompile>
<ClCompile Include="..\..\cheats.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\shader_glsl.c">
<Filter>Source Files\gfx</Filter>
</ClCompile>
<ClCompile Include="..\..\deps\rzlib\rzlib.c">
<Filter>Source Files\deps</Filter>
</ClCompile>
<ClCompile Include="..\..\file_extract.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\gfx\rpng\rpng.c">
<Filter>Source Files\gfx\rpng</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">

View File

@ -21,6 +21,10 @@
#include "config.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include "boolean.h"
#include <stdint.h>
typedef unsigned long long rarch_perf_tick_t;
@ -94,5 +98,9 @@ void rarch_get_cpu_features(struct rarch_cpu_features *cpu);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -99,7 +99,9 @@ struct ff_audio_info
// Most lossy audio codecs only support certain sampling rates.
// Could use libswresample, but it doesn't support floating point ratios. :(
// Use either S16 or (planar) float for simplicity.
rarch_resampler_t *resampler;
const rarch_resampler_t *resampler;
void *resampler_data;
bool use_float;
bool is_planar;
unsigned sample_size;
@ -277,7 +279,9 @@ static bool ffemu_init_audio(ffemu_t *handle)
audio->codec->sample_rate = params->sample_rate;
audio->codec->time_base = av_d2q(1.0 / params->sample_rate, 1000000);
audio->resampler = resampler_new();
rarch_resampler_realloc(&audio->resampler_data,
&audio->resampler,
*g_settings.audio.resampler ? g_settings.audio.resampler : NULL);
}
else
{
@ -683,8 +687,8 @@ void ffemu_free(ffemu_t *handle)
if (handle->config.audio_opts)
av_dict_free(&handle->config.audio_opts);
if (handle->audio.resampler)
resampler_free(handle->audio.resampler);
rarch_resampler_freep(&handle->audio.resampler,
&handle->audio.resampler_data);
av_free(handle->audio.float_conv);
av_free(handle->audio.resample_out);
@ -1023,7 +1027,7 @@ static void ffemu_audio_resample(ffemu_t *handle, struct ffemu_audio_data *data)
info.input_frames = data->frames;
info.ratio = handle->audio.ratio;
resampler_process(handle->audio.resampler, &info);
rarch_resampler_process(handle->audio.resampler, handle->audio.resampler_data, &info);
data->data = handle->audio.resample_out;
data->frames = info.output_frames;

View File

@ -33,6 +33,7 @@
#include "screenshot.h"
#include "cheats.h"
#include "compat/getopt_rarch.h"
#include "compat/posix_string.h"
#if defined(_WIN32) && !defined(_XBOX)
#define WIN32_LEAN_AND_MEAN
@ -402,7 +403,8 @@ static bool audio_flush(const int16_t *data, size_t samples)
RARCH_PERFORMANCE_INIT(resampler_proc);
RARCH_PERFORMANCE_START(resampler_proc);
resampler_process(g_extern.audio_data.source, &src_data);
rarch_resampler_process(g_extern.audio_data.resampler,
g_extern.audio_data.resampler_data, &src_data);
RARCH_PERFORMANCE_STOP(resampler_proc);
output_data = g_extern.audio_data.outsamples;

View File

@ -159,6 +159,10 @@
# Audio output samplerate.
# audio_out_rate = 48000
# Which resampler to use. "sinc" and "hermite" are currently implemented.
# Default will use "sinc" if compiled in.
# audio_resampler =
# When altering audio_in_rate on-the-fly, define by how much each time.
# audio_rate_step = 0.25

View File

@ -203,6 +203,7 @@ void config_set_defaults(void)
g_settings.audio.rate_control = rate_control;
g_settings.audio.rate_control_delta = rate_control_delta;
g_settings.audio.volume = audio_volume;
strlcpy(g_settings.audio.resampler, audio_resampler, sizeof(g_settings.audio.resampler));
g_settings.rewind_enable = rewind_enable;
g_settings.rewind_buffer_size = rewind_buffer_size;
@ -277,6 +278,8 @@ void config_set_defaults(void)
#if defined(__CELLOS_LV2) || defined(_XBOX360)
g_settings.video.aspect_ratio_idx = ASPECT_RATIO_16_9;
#elif defined(GEKKO) || defined(_XBOX1)
g_settings.video.aspect_ratio_idx = ASPECT_RATIO_4_3;
#else
g_settings.video.aspect_ratio_idx = 0;
#endif
@ -467,7 +470,7 @@ bool config_load_file(const char *path)
CONFIG_GET_INT(video.aspect_ratio_idx, "aspect_ratio_index");
CONFIG_GET_FLOAT(video.aspect_ratio, "video_aspect_ratio");
for (unsigned i = 0; i < 8; i++)
for (unsigned i = 0; i < MAX_PLAYERS; i++)
{
char cfg[64];
snprintf(cfg, sizeof(cfg), "input_dpad_emulation_p%u", i + 1);
@ -476,6 +479,12 @@ bool config_load_file(const char *path)
CONFIG_GET_INT(input.device[i], cfg);
}
#ifdef ANDROID
CONFIG_GET_INT(input.icade_profile[0], "input_autodetect_icade_profile_pad1");
CONFIG_GET_INT(input.icade_profile[1], "input_autodetect_icade_profile_pad2");
CONFIG_GET_INT(input.icade_profile[2], "input_autodetect_icade_profile_pad3");
CONFIG_GET_INT(input.icade_profile[3], "input_autodetect_icade_profile_pad4");
#endif
CONFIG_GET_BOOL_EXTERN(console.screen.gamma_correction, "gamma_correction");
@ -643,6 +652,7 @@ bool config_load_file(const char *path)
CONFIG_GET_BOOL(audio.rate_control, "audio_rate_control");
CONFIG_GET_FLOAT(audio.rate_control_delta, "audio_rate_control_delta");
CONFIG_GET_FLOAT(audio.volume, "audio_volume");
CONFIG_GET_STRING(audio.resampler, "audio_resampler");
CONFIG_GET_STRING(video.driver, "video_driver");
CONFIG_GET_STRING(audio.driver, "audio_driver");
@ -1177,6 +1187,14 @@ bool config_save_file(const char *path)
config_set_bool(conf, "audio_rate_control", g_settings.audio.rate_control);
config_set_float(conf, "audio_rate_control_delta", g_settings.audio.rate_control_delta);
config_set_string(conf, "system_directory", g_settings.system_directory);
config_set_string(conf, "audio_resampler", g_settings.audio.resampler);
#ifdef ANDROID
config_set_int(conf, "input_autodetect_icade_profile_pad1", input.icade_profile[0]);
config_set_int(conf, "input_autodetect_icade_profile_pad2", input.icade_profile[1]);
config_set_int(conf, "input_autodetect_icade_profile_pad3", input.icade_profile[2]);
config_set_int(conf, "input_autodetect_icade_profile_pad4", input.icade_profile[3]);
#endif
if (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_OVERSCAN_ENABLE))
config_set_bool(conf, "overscan_enable", true);

View File

@ -68,7 +68,7 @@
"ps1.Chippoke Ralph no Daibouken (Adventure of Little Ralph)" mednafen-psx dualanalog ;
"ps1.Chocobo Racing" mednafen-psx dualanalog ;
"ps1.Chrono Cross*" pcsxr dualanalog ;
"ps1.Colin Mc[rR]rae*" mednafen-psx dualanalog ;
"ps1.Colin Mc[rR]ae*" mednafen-psx dualanalog ;
"ps1.Colony Wars*" mednafen-psx dualanalog ;
"ps1.Cosmowarrior Rei" mednafen-psx dualanalog ;
"ps1.Cowboy Bebop" mednafen-psx dualanalog ;

View File

@ -2,7 +2,7 @@
<app version="1">
<name>RetroArch GX</name>
<coder>Maister, Squarepusher, ToadKing</coder>
<version>0.9.8.1</version>
<version>0.9.8.3</version>
<release_date>2012-2013</release_date>
<short_description>Multi-system emulator</short_description>
<long_description>A port of RetroArch to the GameCube/Wii.</long_description>