diff options
| author | neonloop | 2021-08-23 14:53:51 +0000 | 
|---|---|---|
| committer | neonloop | 2021-08-23 14:53:51 +0000 | 
| commit | 38a49a2794e82568031c4315a0c797d23a920d69 (patch) | |
| tree | d6edf21b82cd1bb2d561f9cdb72b501e95daf3c9 | |
| parent | a2993b334dc5a03ad0a1e9368cebce354b72fae1 (diff) | |
| download | picoarch-38a49a2794e82568031c4315a0c797d23a920d69.tar.gz picoarch-38a49a2794e82568031c4315a0c797d23a920d69.tar.bz2 picoarch-38a49a2794e82568031c4315a0c797d23a920d69.zip | |
Adds fceumm core
Needs PGO to hit fullspeed. Nestopia won't run (needs XRGB8888) and
would probably be slow. Maybe try QuickNES if speed is an issue with
fceumm.
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | overrides.c | 2 | ||||
| -rw-r--r-- | overrides/fceumm.h | 90 | ||||
| -rw-r--r-- | patches/fceumm/1000-trimui-build.patch | 51 | ||||
| -rw-r--r-- | scale.c | 5 | 
6 files changed, 156 insertions, 2 deletions
| @@ -7,6 +7,7 @@ picoarch  /beetle-pce-fast  /fbalpha2012 +/fceumm  /gambatte  /gpsp  /mame2000 @@ -20,11 +20,14 @@ LDFLAGS    = -lc -ldl -lgcc -lm -lSDL -lasound -lpng -lz -Wl,--gc-sections -flto  # EXTRA_CORES += fbalpha2012  # EXTRA_CORES += mame2003_plus -CORES     = beetle-pce-fast gambatte gpsp mame2000 pcsx_rearmed snes9x2002 snes9x2005 $(EXTRA_CORES) +CORES     = beetle-pce-fast fceumm gambatte gpsp mame2000 pcsx_rearmed snes9x2002 snes9x2005 $(EXTRA_CORES)  beetle-pce-fast_REPO = https://github.com/libretro/beetle-pce-fast-libretro  beetle-pce-fast_CORE = mednafen_pce_fast_libretro.so +fceumm_REPO = https://github.com/libretro/libretro-fceumm +fceumm_MAKEFILE = Makefile.libretro +  gambatte_REPO = https://github.com/libretro/gambatte-libretro  fbalpha2012_BUILD_PATH = fbalpha2012/svn-current/trunk @@ -142,6 +145,10 @@ fbalpha2012_ROM_DIR = ARCADE  fbalpha2012_TYPES = zip  fbalpha2012_PAK_NAME = Arcade (FBA) +fceumm_ROM_DIR = FC +fceumm_TYPES = fds,nes,unf,unif +fceumm_PAK_NAME = Nintendo +  gambatte_ROM_DIR = GB  gambatte_TYPES = gb,gbc,dmg,zip  gambatte_PAK_NAME = Game Boy diff --git a/overrides.c b/overrides.c index 1f8f0d8..fdb010e 100644 --- a/overrides.c +++ b/overrides.c @@ -1,5 +1,6 @@  #include "overrides.h"  #include "overrides/beetle-pce-fast.h" +#include "overrides/fceumm.h"  #include "overrides/gambatte.h"  #include "overrides/gpsp.h"  #include "overrides/mame2000.h" @@ -10,6 +11,7 @@  static const struct core_override overrides[] = {  	beetle_pce_fast_overrides, +	fceumm_overrides,  	gambatte_overrides,  	gpsp_overrides,  	mame2000_overrides, diff --git a/overrides/fceumm.h b/overrides/fceumm.h new file mode 100644 index 0000000..2009d08 --- /dev/null +++ b/overrides/fceumm.h @@ -0,0 +1,90 @@ +#include "overrides.h" + +static const struct core_override_option fceumm_core_option_overrides[] = { +	{ +		.key = "fceumm_ramstate", +		.desc = "RAM Fill (Restart)", +	}, +	{ +		.key = "fceumm_overscan_h", +		.desc = "Crop Horz. Overscan", +	}, +	{ +		.key = "fceumm_overscan_v", +		.desc = "Crop Vert. Overscan", +	}, +	{ +		.key = "fceumm_up_down_allowed", +		.desc = "Opp. Directions", +	}, +	{ +		.key = "fceumm_turbo_delay", +		.desc = "Turbo Delay Frames", +	}, +	{ +		.key = "fceumm_apu_1", +		.desc = "Square 1 Channel", +	}, +	{ +		.key = "fceumm_apu_2", +		.desc = "Square 2 Channel", +	}, +	{ +		.key = "fceumm_apu_3", +		.desc = "Triangle Channel", +	}, +	{ +		.key = "fceumm_apu_4", +		.desc = "Noise Channel", +	}, +	{ +		.key = "fceumm_apu_5", +		.desc = "PCM Channel", +	}, +	{ +		.key = "fceumm_show_adv_system_options", +		.desc = "Show Sys Options", +	}, +	{ +		.key = "fceumm_show_adv_sound_options", +		.desc = "Show Snd Options", +	}, +	{ +		.key = "fceumm_zapper_mode", +		.blocked = true +	}, +	{ +		.key = "fceumm_show_crosshair", +		.blocked = true +	}, +	{ +		.key = "fceumm_zapper_tolerance", +		.blocked = true +	}, +	{ NULL } +}; + +me_bind_action fceumm_ctrl_actions[] = +{ +	{ "UP       ",  1 << RETRO_DEVICE_ID_JOYPAD_UP}, +	{ "DOWN     ",  1 << RETRO_DEVICE_ID_JOYPAD_DOWN }, +	{ "LEFT     ",  1 << RETRO_DEVICE_ID_JOYPAD_LEFT }, +	{ "RIGHT    ",  1 << RETRO_DEVICE_ID_JOYPAD_RIGHT }, +	{ "A        ",  1 << RETRO_DEVICE_ID_JOYPAD_A }, +	{ "B        ",  1 << RETRO_DEVICE_ID_JOYPAD_B }, +	{ "A TURBO  ",  1 << RETRO_DEVICE_ID_JOYPAD_X }, +	{ "B TURBO  ",  1 << RETRO_DEVICE_ID_JOYPAD_Y }, +	{ "SELECT   ",  1 << RETRO_DEVICE_ID_JOYPAD_START }, +	{ "START    ",  1 << RETRO_DEVICE_ID_JOYPAD_SELECT }, +	{ "DISK CHNG",  1 << RETRO_DEVICE_ID_JOYPAD_L }, +	{ "INS DISK ",  1 << RETRO_DEVICE_ID_JOYPAD_R }, +	{ "INS COIN ",  1 << RETRO_DEVICE_ID_JOYPAD_R2 }, +	{ NULL,       0 } +}; + +#define fceumm_overrides {                                    \ +	.core_name = "fceumm",                                \ +	.actions = fceumm_ctrl_actions,                       \ +	.action_size = array_size(fceumm_ctrl_actions),       \ +	.options = fceumm_core_option_overrides               \ +} diff --git a/patches/fceumm/1000-trimui-build.patch b/patches/fceumm/1000-trimui-build.patch new file mode 100644 index 0000000..4d52559 --- /dev/null +++ b/patches/fceumm/1000-trimui-build.patch @@ -0,0 +1,51 @@ +diff --git a/Makefile.libretro b/Makefile.libretro +index 2f2bb5a..493149f 100644 +--- a/Makefile.libretro ++++ b/Makefile.libretro +@@ -445,6 +445,22 @@ else ifeq ($(platform), retrofw) + 	PLATFORM_DEFINES += -ffast-math -march=mips32 -mtune=mips32 -mhard-float -fomit-frame-pointer + 	EXTERNAL_ZLIB = 1 +  ++# TRIMUI ++else ifeq ($(platform), trimui) ++	TARGET := $(TARGET_NAME)_libretro.so ++	CC = $(CROSS_COMPILE)gcc ++	CXX = $(CROSS_COMPILE)g++ ++	AR = $(CROSS_COMPILE)ar ++	SHARED := -shared -Wl,--version-script=src/drivers/libretro/link.T -Wl,-no-undefined ++	LDFLAGS += -fno-PIC -flto ++	CFLAGS += -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s -mtune=arm926ej-s -fno-PIC -flto ++	OPTIMIZE := -Ofast -DNDEBUG ++	EXTERNAL_ZLIB = 1 ++	HAVE_NTSC = 0 ++	ifeq (,$(DEBUG)) ++		LDFLAGS += -s ++	endif ++ + # Windows MSVC 2017 all architectures + else ifneq (,$(findstring windows_msvc2017,$(platform))) + 	CC  = cl.exe +@@ -708,10 +724,23 @@ else +       CFLAGS     += -MT +       CXXFLAGS   += -MT + 	endif ++	ifneq (,$(OPTIMIZE)) ++      CFLAGS += $(OPTIMIZE) ++      CXXFLAGS += $(OPTIMIZE) ++	else +       CFLAGS     += -O2 -DNDEBUG +       CXXFLAGS   += -O2 -DNDEBUG ++	endif + endif +  ++ifeq ($(PROFILE), GENERATE) ++	CFLAGS	+= -fprofile-generate=./profile/fceumm ++	LDFLAGS	+= -lgcov ++else ifeq ($(PROFILE), APPLY) ++	CFLAGS	+= -fprofile-use -fprofile-dir=../profile/fceumm -fbranch-probabilities ++endif ++ ++ + ifneq ($(SANITIZER),) + CFLAGS += -fsanitize=$(SANITIZER) + CXXFLAGS += -fsanitize=$(SANITIZER) @@ -396,7 +396,10 @@ static void scale_select_scaler(unsigned w, unsigned h, size_t pitch) {  		}  	} -	if (!scaler && current_aspect_ratio == 4.0f / 3.0f && w == 256) { +	if (!scaler && +	    w == 256 && +	    (current_aspect_ratio == 4.0f / 3.0f || scale_size == SCALE_SIZE_FULL)) +	{  		if (scale_filter == SCALE_FILTER_SHARP) {  			scaler = scale_sharp_256xXXX_320xXXX;  			return; | 
