Merge branch 'master' of https://github.com/Themaister/RetroArch into ios
This commit is contained in:
commit
19fb2fe8f4
4
Makefile
4
Makefile
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
###
|
||||
##
|
||||
# Makefile for RetroArch PSL1GHT.
|
||||
##
|
||||
RARCH_VERSION = "0.9.8"
|
||||
RARCH_VERSION = "0.9.8.3"
|
||||
|
||||
DEBUG = 0
|
||||
HAVE_LOGGER = 0
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
RARCH_VERSION = "0.9.8"
|
||||
RARCH_VERSION = "0.9.8.3"
|
||||
|
||||
HAVE_FILE_LOGGER = 1
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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"))
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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 'Force refresh rate (Hz)' 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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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",
|
||||
};
|
||||
|
||||
|
|
115
audio/openal.c
115
audio/openal.c
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
59
audio/sinc.c
59
audio/sinc.c
|
@ -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",
|
||||
};
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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-
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
------------------------------------------------------------------------------
|
|
@ -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.
|
|
@ -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)
|
||||
|
||||
------------------------------------------------------------------------------
|
|
@ -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)
|
||||
|
||||
------------------------------------------------------------------------------
|
|
@ -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)
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
58
driver.c
58
driver.c
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(¤t_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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
|
|
17
general.h
17
general.h
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
9
gfx/gl.c
9
gfx/gl.c
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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++)
|
||||
|
|
|
@ -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
1
hash.h
|
@ -19,6 +19,7 @@
|
|||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "msvc/msvc_compat.h"
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
Rewind granularity:
|
||||
Info messages:
|
||||
Debug info messages:
|
||||
Audio Resampler:
|
||||
Gamma Correction:
|
||||
Shader #1:
|
||||
Shader #2:
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
Rewind granularity:
|
||||
Info messages:
|
||||
Debug info messages:
|
||||
Audio Resampler:
|
||||
Gamma Correction:
|
||||
Shader #1:
|
||||
Shader #2:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
Optimization="3"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="_DEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.8\";__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=\"0.9.8.3\";__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=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.8\";__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=\"0.9.8.3\";__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=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.8\";__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=\"0.9.8.3\";__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=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.8\";__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=\"0.9.8.3\";__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=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;HAVE_RMENU;HAVE_RMENU_GUI;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.8\";__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=\"0.9.8.3\";__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"
|
||||
|
|
|
@ -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>
|
|
@ -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">
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
20
settings.c
20
settings.c
|
@ -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);
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue