diff --git a/makefile.libretro b/makefile.libretro index dc75f9745..6a3cb0f62 100644 --- a/makefile.libretro +++ b/makefile.libretro @@ -1,6 +1,7 @@ DEBUG = 0 LIBRETRO_OPTIMIZATIONS = 1 FRONTEND_SUPPORTS_RGB565 = 1 +HAVE_GRIFFIN = 0 ifeq ($(platform),) platform = unix @@ -35,6 +36,7 @@ FBA_LIB_DIR := $(MAIN_FBA_DIR)/dep/libs FBA_INTERFACE_DIR := $(MAIN_FBA_DIR)/intf FBA_GENERATED_DIR = $(MAIN_FBA_DIR)/dep/generated FBA_SCRIPTS_DIR = $(MAIN_FBA_DIR)/dep/scripts +GRIFFIN_DIR = griffin-libretro EXTERNAL_ZLIB = 0 @@ -157,26 +159,38 @@ BURN_BLACKLIST += $(FBA_BURNER_DIR)/unzip.c \ $(FBA_BURNER_DIR)/ioapi.c endif +ifeq ($(HAVE_GRIFFIN), 1) +GRIFFIN_CXXSRCFILES := $(GRIFFIN_DIR)/cps12.cpp $(GRIFFIN_DIR)/cps3.cpp $(GRIFFIN_DIR)/neogeo.cpp $(GRIFFIN_DIR)/pgm.cpp $(GRIFFIN_DIR)/snes.cpp $(GRIFFIN_DIR)/galaxian.cpp $(GRIFFIN_DIR)/cpu-m68k.cpp +BURN_BLACKLIST += $(FBA_CPU_DIR)/m68000_intf.cpp +else +CPS2_DIR := $(FBA_BURN_DRIVERS_DIR)/capcom +CPS3_DIR := $(FBA_BURN_DRIVERS_DIR)/cps3 +GALAXIAN_DIR := $(FBA_BURN_DRIVERS_DIR)/galaxian +NEOGEO_DIR := $(FBA_BURN_DRIVERS_DIR)/neogeo +PGM_DIR := $(FBA_BURN_DRIVERS_DIR)/pgm +SNES_DIR := $(FBA_BURN_DRIVERS_DIR)/snes +M68K_DIR := $(FBA_CPU_DIR)/m68k +endif FBA_BURN_DIRS := $(FBA_BURN_DIR) \ $(FBA_BURN_DIR)/devices \ $(FBA_BURN_DIR)/snd \ - $(FBA_BURN_DRIVERS_DIR)/capcom \ + $(CPS2_DIR) \ $(FBA_BURN_DRIVERS_DIR)/cave \ - $(FBA_BURN_DRIVERS_DIR)/cps3 \ + $(CPS3_DIR) \ $(FBA_BURN_DRIVERS_DIR)/dataeast \ - $(FBA_BURN_DRIVERS_DIR)/galaxian \ + $(GALAXIAN_DIR) \ $(FBA_BURN_DRIVERS_DIR)/irem \ $(FBA_BURN_DRIVERS_DIR)/konami \ $(FBA_BURN_DRIVERS_DIR)/megadrive \ - $(FBA_BURN_DRIVERS_DIR)/neogeo \ + $(NEOGEO_DIR) \ $(FBA_BURN_DRIVERS_DIR)/pce \ - $(FBA_BURN_DRIVERS_DIR)/pgm \ + $(PGM_DIR) \ $(FBA_BURN_DRIVERS_DIR)/pre90s \ $(FBA_BURN_DRIVERS_DIR)/psikyo \ $(FBA_BURN_DRIVERS_DIR)/pst90s \ $(FBA_BURN_DRIVERS_DIR)/sega \ - $(FBA_BURN_DRIVERS_DIR)/snes \ + $(SNES_DIR) \ $(FBA_BURN_DRIVERS_DIR)/taito \ $(FBA_BURN_DRIVERS_DIR)/toaplan @@ -187,7 +201,7 @@ FBA_CPU_DIRS := $(FBA_CPU_DIR) \ $(FBA_CPU_DIR)/hd6309 \ $(FBA_CPU_DIR)/i8039 \ $(FBA_CPU_DIR)/konami \ - $(FBA_CPU_DIR)/m68k \ + $(M68K_DIR) \ $(FBA_CPU_DIR)/m6502 \ $(FBA_CPU_DIR)/m6800 \ $(FBA_CPU_DIR)/m6805 \ @@ -201,13 +215,14 @@ FBA_LIB_DIRS := $(FBA_LIB_DIR)/zlib FBA_SRC_DIRS := $(FBA_BURNER_DIR) $(FBA_BURN_DIRS) $(FBA_CPU_DIRS) $(FBA_BURNER_DIRS) + ifeq ($(EXTERNAL_ZLIB), 1) FBA_DEFINES += -DEXTERNAL_ZLIB else FBA_SRC_DIRS += $(FBA_LIB_DIRS) endif -FBA_CXXSRCS := $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.cpp))) +FBA_CXXSRCS := $(GRIFFIN_CXXSRCFILES) $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.cpp))) FBA_CXXSRCS += $(LIBRETRO_DIR)/libretro.cpp $(LIBRETRO_DIR)/neocdlist.cpp FBA_CXXOBJ := $(FBA_CXXSRCS:.cpp=.o) FBA_CSRCS := $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.c))) diff --git a/projectfiles/libretro-android/jni/Android.mk b/projectfiles/libretro-android/jni/Android.mk index 604e80e4e..c754c1acc 100644 --- a/projectfiles/libretro-android/jni/Android.mk +++ b/projectfiles/libretro-android/jni/Android.mk @@ -1,22 +1,10 @@ +CYCLONE_ENABLED := 0 +HAVE_GRIFFIN := 0 + LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -ifeq ($(TARGET_ARCH),arm) -LOCAL_CXXFLAGS += -DANDROID_ARM -LOCAL_ARM_MODE := arm -LOCAL_C_FLAGS += -fuse-ld=gold -LOCAL_CPP_FLAGS+= -fuse-ld=gold -LOCAL_LDLIBS := -fuse-ld=gold -endif - -ifeq ($(TARGET_ARCH),x86) -LOCAL_CXXFLAGS += -DANDROID_X86 -endif - -ifeq ($(TARGET_ARCH),mips) -LOCAL_CXXFLAGS += -DANDROID_MIPS -D__mips__ -D__MIPSEL__ -endif MAIN_FBA_DIR := ../../../src FBA_BURN_DIR := $(MAIN_FBA_DIR)/burn @@ -28,6 +16,27 @@ FBA_LIB_DIR := $(MAIN_FBA_DIR)/dep/libs FBA_INTERFACE_DIR := $(MAIN_FBA_DIR)/intf FBA_GENERATED_DIR = $(MAIN_FBA_DIR)/dep/generated FBA_SCRIPTS_DIR = $(MAIN_FBA_DIR)/dep/scripts +GRIFFIN_DIR := ../../../griffin-libretro + +ifeq ($(TARGET_ARCH),arm) +LOCAL_CXXFLAGS += -DANDROID_ARM +LOCAL_ARM_MODE := arm +LOCAL_C_FLAGS += -fuse-ld=gold +LOCAL_CPP_FLAGS+= -fuse-ld=gold +LOCAL_LDLIBS := -fuse-ld=gold +ifeq ($(CYCLONE_ENABLED), 1) +CYCLONE_SRC := $(FBA_CPU_DIR)/cyclone/cyclone.s +CYCLONE_DEFINES := -DBUILD_C68K +endif +endif + +ifeq ($(TARGET_ARCH),x86) +LOCAL_CXXFLAGS += -DANDROID_X86 +endif + +ifeq ($(TARGET_ARCH),mips) +LOCAL_CXXFLAGS += -DANDROID_MIPS -D__mips__ -D__MIPSEL__ +endif BURN_BLACKLIST := $(FBA_BURNER_DIR)/un7z.cpp \ $(FBA_CPU_DIR)/arm7/arm7exec.c \ @@ -66,25 +75,39 @@ BURN_BLACKLIST := $(FBA_BURNER_DIR)/un7z.cpp \ $(FBA_CPU_DIR)/nec/necinstr.c \ $(FBA_BURN_DIR)/drv/capcom/ctv_make.cpp +ifeq ($(HAVE_GRIFFIN), 1) +GRIFFIN_CXX_SRC_FILES := $(GRIFFIN_DIR)/cps12.cpp $(GRIFFIN_DIR)/cps3.cpp $(GRIFFIN_DIR)/neogeo.cpp $(GRIFFIN_DIR)/pgm.cpp $(GRIFFIN_DIR)/snes.cpp $(GRIFFIN_DIR)/galaxian.cpp +GRIFFIN_CXX_SRC_FILES += $(GRIFFIN_DIR)/cpu-m68k.cpp +BURN_BLACKLIST += $(FBA_CPU_DIR)/m68000_intf.cpp +else +CPS2_DIR := $(FBA_BURN_DRIVERS_DIR)/capcom +CPS3_DIR := $(FBA_BURN_DRIVERS_DIR)/cps3 +GALAXIAN_DIR := $(FBA_BURN_DRIVERS_DIR)/galaxian +NEOGEO_DIR := $(FBA_BURN_DRIVERS_DIR)/neogeo +PGM_DIR := $(FBA_BURN_DRIVERS_DIR)/pgm +SNES_DIR := $(FBA_BURN_DRIVERS_DIR)/snes +M68K_DIR := $(FBA_CPU_DIR)/m68k +endif + FBA_BURN_DIRS := $(FBA_BURN_DIR) \ $(FBA_BURN_DIR)/devices \ $(FBA_BURN_DIR)/snd \ - $(FBA_BURN_DRIVERS_DIR)/capcom \ + $(CPS2_DIR) \ $(FBA_BURN_DRIVERS_DIR)/cave \ - $(FBA_BURN_DRIVERS_DIR)/cps3 \ + $(CPS3_DIR) \ $(FBA_BURN_DRIVERS_DIR)/dataeast \ - $(FBA_BURN_DRIVERS_DIR)/galaxian \ + $(GALAXIAN_DIR) \ $(FBA_BURN_DRIVERS_DIR)/irem \ $(FBA_BURN_DRIVERS_DIR)/konami \ $(FBA_BURN_DRIVERS_DIR)/megadrive \ - $(FBA_BURN_DRIVERS_DIR)/neogeo \ + $(NEOGEO_DIR) \ $(FBA_BURN_DRIVERS_DIR)/pce \ - $(FBA_BURN_DRIVERS_DIR)/pgm \ + $(PGM_DIR) \ $(FBA_BURN_DRIVERS_DIR)/pre90s \ $(FBA_BURN_DRIVERS_DIR)/psikyo \ $(FBA_BURN_DRIVERS_DIR)/pst90s \ $(FBA_BURN_DRIVERS_DIR)/sega \ - $(FBA_BURN_DRIVERS_DIR)/snes \ + $(SNES_DIR) \ $(FBA_BURN_DRIVERS_DIR)/taito \ $(FBA_BURN_DRIVERS_DIR)/toaplan @@ -95,7 +118,7 @@ FBA_CPU_DIRS := $(FBA_CPU_DIR) \ $(FBA_CPU_DIR)/hd6309 \ $(FBA_CPU_DIR)/i8039 \ $(FBA_CPU_DIR)/konami \ - $(FBA_CPU_DIR)/m68k \ + $(M68K_DIR) \ $(FBA_CPU_DIR)/m6502 \ $(FBA_CPU_DIR)/m6800 \ $(FBA_CPU_DIR)/m6805 \ @@ -105,17 +128,16 @@ FBA_CPU_DIRS := $(FBA_CPU_DIR) \ $(FBA_CPU_DIR)/sh2 \ $(FBA_CPU_DIR)/z80 -FBA_LIB_DIRS := $(FBA_LIB_DIR)/zlib - -FBA_SRC_DIRS := $(FBA_BURNER_DIR) $(FBA_BURN_DIRS) $(FBA_CPU_DIRS) $(FBA_BURNER_DIRS) $(FBA_LIB_DIRS) +FBA_SRC_DIRS := $(FBA_BURNER_DIR) $(FBA_BURN_DIRS) $(FBA_CPU_DIRS) $(FBA_BURNER_DIRS) LOCAL_MODULE := libretro -LOCAL_SRC_FILES := $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.cpp))) $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.c))) $(LIBRETRO_DIR)/libretro.cpp $(LIBRETRO_DIR)/neocdlist.cpp -LOCAL_CXXFLAGS += -O3 -fno-stack-protector -DUSE_SPEEDHACKS -DINLINE="static inline" -DSH2_INLINE="static inline" -D__LIBRETRO_OPTIMIZATIONS__ -DLSB_FIRST -D__LIBRETRO__ -Wno-write-strings -DUSE_FILE32API -DANDROID -DFRONTEND_SUPPORTS_RGB565 -LOCAL_CFLAGS = -O3 -fno-stack-protector -DUSE_SPEEDHACKS -DINLINE="static inline" -DSH2_INLINE="static inline" -D__LIBRETRO_OPTIMIZATIONS__ -DLSB_FIRST -D__LIBRETRO__ -Wno-write-strings -DUSE_FILE32API -DANDROID -DFRONTEND_SUPPORTS_RGB565 +LOCAL_SRC_FILES := $(GRIFFIN_CXX_SRC_FILES) $(CYCLONE_SRC) $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.cpp))) $(filter-out $(BURN_BLACKLIST),$(foreach dir,$(FBA_SRC_DIRS),$(wildcard $(dir)/*.c))) $(LIBRETRO_DIR)/libretro.cpp $(LIBRETRO_DIR)/neocdlist.cpp + +LOCAL_CXXFLAGS += -O3 -fno-stack-protector -DUSE_SPEEDHACKS -DINLINE="static inline" -DSH2_INLINE="static inline" -D__LIBRETRO_OPTIMIZATIONS__ -DLSB_FIRST -D__LIBRETRO__ -Wno-write-strings -DUSE_FILE32API -DANDROID -DFRONTEND_SUPPORTS_RGB565 $(CYCLONE_DEFINES) +LOCAL_CFLAGS = -O3 -fno-stack-protector -DUSE_SPEEDHACKS -DINLINE="static inline" -DSH2_INLINE="static inline" -D__LIBRETRO_OPTIMIZATIONS__ -DLSB_FIRST -D__LIBRETRO__ -Wno-write-strings -DUSE_FILE32API -DANDROID -DFRONTEND_SUPPORTS_RGB565 $(CYCLONE_DEFINES) LOCAL_C_INCLUDES = $(FBA_BURNER_DIR)/win32 \ $(LIBRETRO_DIR) \ @@ -142,4 +164,6 @@ LOCAL_C_INCLUDES = $(FBA_BURNER_DIR)/win32 \ $(FBA_GENERATED_DIR) \ $(FBA_LIB_DIR) +LOCAL_LDLIBS += -lz + include $(BUILD_SHARED_LIBRARY) diff --git a/src/burner/libretro/libretro.cpp b/src/burner/libretro/libretro.cpp index d6e4b3b08..72a337185 100644 --- a/src/burner/libretro/libretro.cpp +++ b/src/burner/libretro/libretro.cpp @@ -31,11 +31,11 @@ static std::vector g_find_list_path; static ROMFIND g_find_list[1024]; static unsigned g_rom_count; +#define AUDIO_SAMPLERATE 32000 #define AUDIO_SEGMENT_LENGTH 534 // <-- Hardcoded value that corresponds well to 32kHz audio. -#define AUDIO_SEGMENT_LENGTH_TIMES_CHANNELS (534 * 2) static uint16_t g_fba_frame[1024 * 1024]; -static int16_t g_audio_buf[AUDIO_SEGMENT_LENGTH_TIMES_CHANNELS]; +static int16_t g_audio_buf[AUDIO_SEGMENT_LENGTH * 2]; // libretro globals @@ -57,7 +57,7 @@ static bool driver_inited; void retro_get_system_info(struct retro_system_info *info) { info->library_name = "FB Alpha"; - info->library_version = "v0.2.97.27"; + info->library_version = "v0.2.97.28"; info->need_fullpath = true; info->block_extract = true; info->valid_extensions = "iso|ISO|zip|ZIP"; @@ -339,8 +339,8 @@ void retro_run() nBurnLayer = 0xff; pBurnSoundOut = g_audio_buf; - nBurnSoundRate = 32000; - nBurnSoundLen = AUDIO_SEGMENT_LENGTH; + nBurnSoundRate = AUDIO_SAMPLERATE; + //nBurnSoundLen = AUDIO_SEGMENT_LENGTH; nCurrentFrame++; @@ -357,7 +357,7 @@ void retro_run() nBurnPitch = width * sizeof(uint16_t); video_cb(g_fba_frame, width, height, nBurnPitch); - audio_batch_cb(g_audio_buf, AUDIO_SEGMENT_LENGTH); + audio_batch_cb(g_audio_buf, nBurnSoundLen); } static uint8_t *write_state_ptr; @@ -428,7 +428,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) int maximum = width > height ? width : height; struct retro_game_geometry geom = { width, height, maximum, maximum }; - struct retro_system_timing timing = { 60.0, 60.0 * AUDIO_SEGMENT_LENGTH }; + struct retro_system_timing timing = { (nBurnFPS / 100.0), (nBurnFPS / 100.0) * AUDIO_SEGMENT_LENGTH }; info->geometry = geom; info->timing = timing; @@ -497,22 +497,6 @@ int VidRecalcPal() static void init_video() { - nBurnBpp = 2; - VidRecalcPal(); -#if 0 -#ifdef FRONTEND_SUPPORTS_RGB565 - BurnHighCol = HighCol16; -#else - BurnHighCol = HighCol15; -#endif -#endif -} - -static void init_audio() -{ - pBurnSoundOut = g_audio_buf; - nBurnSoundRate = 32000; - nBurnSoundLen = AUDIO_SEGMENT_LENGTH; } static void extract_basename(char *buf, const char *path, size_t size) @@ -561,8 +545,11 @@ bool retro_load_game(const struct retro_game_info *info) unsigned i = BurnDrvGetIndexByName(basename); if (i < nBurnDrvCount) { - init_video(); - init_audio(); + nBurnBpp = 2; + VidRecalcPal(); + pBurnSoundOut = g_audio_buf; + nBurnSoundRate = AUDIO_SAMPLERATE; + nBurnSoundLen = AUDIO_SEGMENT_LENGTH; if (!fba_init(i)) return false; @@ -1361,12 +1348,10 @@ static inline int CinpJoyAxis(int i, int axis) case 7: return 0; } - return 0; } static inline int CinpMouseAxis(int i, int axis) { - return 0; } static inline int CinpState(int i) diff --git a/src/burner/libretro/tchar.h b/src/burner/libretro/tchar.h index f00fc89e4..fad806e9a 100644 --- a/src/burner/libretro/tchar.h +++ b/src/burner/libretro/tchar.h @@ -4,7 +4,7 @@ #include #include -#include "input/inp_keys.h" +#include "inp_keys.h" #ifdef _MSC_VER #include @@ -16,15 +16,7 @@ typedef struct { int x, y, width, height; } RECT; #undef __cdecl #define __cdecl -#ifdef _XBOX1 -static inline void bprintf(int code, const char *format, ...) -{ - (void)0; -} -#else -#define bprintf -#endif - +#define bprintf(...) {} #define _strnicmp(s1, s2, n) strncasecmp(s1, s2, n) #define _stricmp(x, y) strcasecmp(x,y) @@ -46,13 +38,10 @@ static inline void bprintf(int code, const char *format, ...) #define _tcsstr strstr #define _stscanf sscanf #define _ftprintf fprintf -#define _tcscpy(to, from) strcpy(to, from) - -#ifdef _MSC_VER -#define _tcsicmp(a, b) _stricmp(a, b) -#else +#ifndef _MSC_VER #define _tcsicmp(a, b) strcasecmp(a, b) #endif +#define _tcscpy(to, from) strcpy(to, from) /*define lstrlen what does lstrlen correspond to?*/ #undef __fastcall