From d241ebc579f2c5becbed94e75d2444c99f97fcca Mon Sep 17 00:00:00 2001 From: Not6 Date: Sun, 7 May 2017 16:22:49 +0200 Subject: [PATCH] merge with libretro repo --- Makefile | 134 +------------------------------- Makefile.common | 69 +++++++++++++++++ Makefile.libretro | 116 +++++++++++++++++----------- Makefile.psp | 78 ------------------- libretro.c | 168 ++++++++++++++++++---------------------- libretro/dswin.c | 180 ++++++++++++++++++++----------------------- libretro/winx68k.cpp | 37 +++++---- x68k/memory.h | 2 +- 8 files changed, 318 insertions(+), 466 deletions(-) create mode 100644 Makefile.common delete mode 100644 Makefile.psp diff --git a/Makefile b/Makefile index 64e7115..087932e 100644 --- a/Makefile +++ b/Makefile @@ -1,133 +1 @@ -include version.txt - -CC = gcc -CXX = c++ -CXXLINK = $(CXX) -RM = rm -f -TAGS = etags -DEPEND = gccmakedep -DEPEND_DEFINES = - -# for debug -CDEBUGFLAGS = -g -O0 -fno-strict-aliasing - -# -# enable SDL_gfx -# -CDEBUGFLAGS+= -DUSE_SDLGFX - -# -# disable sound -# -#CDEBUGFLAGS+= -DNO_SOUND - -# -# disable mercury unit -# -CDEBUGFLAGS+= -DNO_MERCURY - -# -# enable RFMDRV -# -#CDEBUGFLAGS+= -DRFMDRV - -# -# for Opt. -# -# CDEBUGFLAGS= -O3 -# CDEBUGFLAGS+= -funroll-loops -# CDEBUGFLAGS+= -fomit-frame-pointer -# CDEBUGFLAGS+= -ffast-math - -# CDEBUGFLAGS+= -march=pentium-m -# CDEBUGFLAGS+= -msse -mfpmath=sse - -# -# for DEBUG -# -# CDEBUGFLAGS= -O0 -# CDEBUGFLAGS+= -g -# CDEBUGFLAGS+= -W -Wall -Wuninitialized -# CDEBUGFLAGS+= -Wunused -# CDEBUGFLAGS+= -Werror -# CDEBUGFLAGS+= -DINLINE= -# CDEBUGFLAGS+= -DUSE_GAS - -CDEBUGFLAGS+=-DPX68K_VERSION=$(PX68K_VERSION) - -ifdef SDL2 -# SDL 2.0 -SDL_CONFIG?= sdl2-config -else -# SDL 1.2 -SDL_CONFIG?= sdl-config -endif - -SDL_INCLUDE= `$(SDL_CONFIG) --cflags` -ifdef SDL2 -SDL_LIB= `$(SDL_CONFIG) --libs` -lSDL2_gfx -else -SDL_LIB= `$(SDL_CONFIG) --libs` -lSDL_gfx -endif - -ifeq ($(shell uname -m),armv6l) - MOPT= -else - MOPT= -m32 -endif - -LDLIBS = -lm - -EXTRA_INCLUDES= -I./x11 -I./x68k -I./fmgen -I./win32api $(SDL_INCLUDE) - -CXXDEBUGFLAGS= $(CDEBUGFLAGS) - -CFLAGS= $(MOPT) $(CDEBUGFLAGS) $(EXTRA_INCLUDES) -CXXFLAGS= $(MOPT) $(CXXDEBUGFLAGS) $(EXTRA_INCLUDES) -CXXLDOPTIONS= $(CXXDEBUGFLAGS) - -CPUOBJS= x68k/d68k.o m68000/c68k.o m68000/m68000.o - -X68KOBJS= x68k/adpcm.o x68k/bg.o x68k/crtc.o x68k/dmac.o x68k/fdc.o x68k/fdd.o x68k/disk_d88.o x68k/disk_dim.o x68k/disk_xdf.o x68k/gvram.o x68k/ioc.o x68k/irqh.o x68k/mem_wrap.o x68k/mercury.o x68k/mfp.o x68k/palette.o x68k/midi.o x68k/pia.o x68k/rtc.o x68k/sasi.o x68k/scc.o x68k/scsi.o x68k/sram.o x68k/sysport.o x68k/tvram.o - -FMGENOBJS= fmgen/fmgen.o fmgen/fmg_wrap.o fmgen/file.o fmgen/fmtimer.o fmgen/opm.o fmgen/opna.o fmgen/psg.o - -X11OBJS= x11/joystick.o x11/juliet.o x11/keyboard.o x11/mouse.o x11/prop.o x11/status.o x11/timer.o x11/dswin.o x11/windraw.o x11/winui.o x11/about.o x11/common.o - -X11CXXOBJS= x11/winx68k.o - -WIN32APIOBJS= win32api/dosio.o win32api/fake.o win32api/peace.o - -COBJS= $(X68KOBJS) $(X11OBJS) $(WIN32APIOBJS) $(CPUOBJS) -CXXOBJS= $(FMGENOBJS) $(X11CXXOBJS) -OBJS= $(COBJS) $(CXXOBJS) - -CSRCS= $(COBJS:.o=.c) -CXXSRCS= $(CXXOBJS:.o=.cpp) -SRCS= $(CSRCS) $(CXXSRCS) - -.SUFFIXES: .c .cpp - -.c.o: - $(CC) -o $@ $(CFLAGS) -c $*.c - -.cpp.o: - $(CXX) -o $@ $(CXXFLAGS) -c $*.cpp - -all:: px68k - -px68k: $(OBJS) - $(RM) $@ - $(CXXLINK) $(MOPT) -o $@ $(CXXLDOPTIONS) $(OBJS) $(SDL_LIB) $(LDLIBS) - -depend:: - $(DEPEND) -- $(CXXFLAGS) $(DEPEND_DEFINES) -- $(SRCS) - -clean:: - $(RM) px68k - $(RM) $(OBJS) - $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut "#"* - -tags:: - find . -name "*.h" -o -name "*.c" -o -name "*.cpp" | $(TAGS) - - +include Makefile.libretro diff --git a/Makefile.common b/Makefile.common new file mode 100644 index 0000000..c2a0de7 --- /dev/null +++ b/Makefile.common @@ -0,0 +1,69 @@ +INCFLAGS := -I$(CORE_DIR) \ + -I$(CORE_DIR)/libretro \ + -I$(CORE_DIR)/x68k \ + -I$(CORE_DIR)/fmgen \ + -I$(CORE_DIR)/win32api + +SOURCES_C := $(CORE_DIR)/x68k/d68k.c \ + $(CORE_DIR)/m68000/m68000.c + +ifdef CYCLONE +SOURCES_S := \ + $(CORE_DIR)/m68000/cyclone.s +else +SOURCES_C += \ + $(CORE_DIR)/m68000/c68k/c68k.c \ + $(CORE_DIR)/m68000/c68k/c68kexec.c +endif + +SOURCES_C += \ + $(CORE_DIR)/x68k/adpcm.c \ + $(CORE_DIR)/x68k/bg.c \ + $(CORE_DIR)/x68k/crtc.c \ + $(CORE_DIR)/x68k/dmac.c \ + $(CORE_DIR)/x68k/fdc.c \ + $(CORE_DIR)/x68k/fdd.c \ + $(CORE_DIR)/x68k/disk_d88.c \ + $(CORE_DIR)/x68k/disk_dim.c \ + $(CORE_DIR)/x68k/disk_xdf.c \ + $(CORE_DIR)/x68k/gvram.c \ + $(CORE_DIR)/x68k/ioc.c \ + $(CORE_DIR)/x68k/irqh.c \ + $(CORE_DIR)/x68k/mem_wrap.c \ + $(CORE_DIR)/x68k/mercury.c \ + $(CORE_DIR)/x68k/mfp.c \ + $(CORE_DIR)/x68k/palette.c \ + $(CORE_DIR)/x68k/midi.c \ + $(CORE_DIR)/x68k/pia.c \ + $(CORE_DIR)/x68k/rtc.c \ + $(CORE_DIR)/x68k/sasi.c \ + $(CORE_DIR)/x68k/scc.c \ + $(CORE_DIR)/x68k/scsi.c \ + $(CORE_DIR)/x68k/sram.c \ + $(CORE_DIR)/x68k/sysport.c \ + $(CORE_DIR)/x68k/tvram.c \ + $(CORE_DIR)/libretro/joystick.c \ + $(CORE_DIR)/libretro/juliet.c \ + $(CORE_DIR)/libretro/keyboard.c \ + $(CORE_DIR)/libretro/mouse.c \ + $(CORE_DIR)/libretro/prop.c \ + $(CORE_DIR)/libretro/status.c \ + $(CORE_DIR)/libretro/timer.c \ + $(CORE_DIR)/libretro/dswin.c \ + $(CORE_DIR)/libretro/windraw.c \ + $(CORE_DIR)/libretro/winui.c \ + $(CORE_DIR)/libretro/about.c \ + $(CORE_DIR)/libretro/common.c \ + $(CORE_DIR)/win32api/dosio.c \ + $(CORE_DIR)/win32api/fake.c \ + $(CORE_DIR)/win32api/peace.c \ + $(CORE_DIR)/libretro.c + +SOURCES_CXX := $(CORE_DIR)/fmgen/file.cpp \ + $(CORE_DIR)/fmgen/fmg_wrap.cpp \ + $(CORE_DIR)/fmgen/fmgen.cpp \ + $(CORE_DIR)/fmgen/fmtimer.cpp \ + $(CORE_DIR)/fmgen/opm.cpp \ + $(CORE_DIR)/fmgen/opna.cpp \ + $(CORE_DIR)/fmgen/psg.cpp \ + $(CORE_DIR)/libretro/winx68k.cpp diff --git a/Makefile.libretro b/Makefile.libretro index e875249..f1cce65 100755 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -5,42 +5,81 @@ ifeq ($(platform),) platform = unix ifeq ($(shell uname -a),) platform = win +else ifneq ($(findstring MINGW,$(shell uname -a)),) + platform = win else ifneq ($(findstring Darwin,$(shell uname -a)),) platform = osx -else ifneq ($(findstring MINGW,$(shell uname -a)),) +else ifneq ($(findstring win,$(shell uname -a)),) platform = win endif endif -ifdef CYCLONE -CFLAGS += -DCYCLONE -CXXFLAGS += -DCYCLONE +# system platform +system_platform = unix +ifeq ($(shell uname -a),) + EXE_EXT = .exe + system_platform = win +else ifneq ($(findstring Darwin,$(shell uname -a)),) + system_platform = osx + arch = intel +ifeq ($(shell uname -p),powerpc) + arch = ppc +endif +else ifneq ($(findstring MINGW,$(shell uname -a)),) + system_platform = win +endif + +ifeq ($(platform), win) + INCLUDES += -I Windows endif TARGET_NAME := px68k +ENDIANNESS_DEFINES := +CORE_DIR := . ifeq ($(platform), unix) - CC = gcc - CXX = g++ CFLAGS = -g -O2 CXXFLAGS = -g -O2 -fno-merge-constants TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T - ENDIANNESS_DEFINES := -DLSB_FIRST FLAGS += -D__LINUX__ -# android arm +else ifneq (,$(findstring osx,$(platform))) + TARGET := $(TARGET_NAME)_libretro.dylib + fpic = -fPIC + SHARED := -dynamiclib + +else ifneq (,$(findstring ios,$(platform))) + TARGET := $(TARGET_NAME)_libretro_ios.dylib + fpic = -fPIC + SHARED := -dynamiclib + +ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path) +endif + + DEFINES := -DIOS + CC = cc -arch armv7 -isysroot $(IOSSDK) + CXX = c++ -arch armv7 -isysroot $(IOSSDK) +ifeq ($(platform),ios9) +CC += -miphoneos-version-min=8.0 +CXXFLAGS += -miphoneos-version-min=8.0 +else +CC += -miphoneos-version-min=5.0 +CXXFLAGS += -miphoneos-version-min=5.0 +endif + + # android arm else ifneq (,$(findstring android,$(platform))) - TARGET := $(TARGET_NAME)_libretro_android.so - fpic = -fPIC - SHARED := -lstdc++ -llog -shared -Wl,--version-script=link.T -Wl,--no-undefined + TARGET := $(TARGET_NAME)_libretro_android.so + fpic = -fPIC + SHARED := -lstdc++ -llog -shared -Wl,--version-script=link.T -Wl,--no-undefined CFLAGS += -g -O2 - CXXFLAGS = -g -O2 -fno-merge-constants - CC = arm-linux-androideabi-gcc - CXX = arm-linux-androideabi-g++ - ENDIANNESS_DEFINES := -DLSB_FIRST + CXXFLAGS = -g -O2 -fno-merge-constants + CC = arm-linux-androideabi-gcc + CXX = arm-linux-androideabi-g++ FLAGS += -D__LINUX__ -DARM -marm -# crosspi arm + # crosspi arm else ifneq (,$(findstring crosspi,$(platform))) CC = arm-linux-gnueabihf-gcc CXX = arm-linux-gnueabihf-g++ @@ -51,9 +90,8 @@ CPU_FLAGS += -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T - ENDIANNESS_DEFINES := -DLSB_FIRST FLAGS += -D__LINUX__ -DARM -marm -# cross Windows + # cross Windows else ifeq ($(platform), wincross64) TARGET := $(TARGET_NAME)_libretro.dll AR = x86_64-w64-mingw32-ar @@ -61,43 +99,23 @@ else ifeq ($(platform), wincross64) CXX = x86_64-w64-mingw32-g++ SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T LDFLAGS += -static-libgcc -static-libstdc++ - ENDIANNESS_DEFINES := -DLSB_FIRST - FLAGS += EXTRA_LDF := -lwinmm -Wl,--export-all-symbols else - TARGET := $(TARGET_NAME)_retro.dll - CC = gcc - CXX = g++ - SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T - LDFLAGS += -static-libgcc -static-libstdc++ - ENDIANNESS_DEFINES := -DLSB_FIRST - FLAGS += + TARGET := $(TARGET_NAME)_libretro.dll + CC = gcc + CXX = g++ + SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T + LDFLAGS += -static-libgcc -static-libstdc++ EXTRA_LDF = -lwinmm -Wl,--export-all-symbols endif CDEBUGFLAGS+= -DNO_MERCURY CDEBUGFLAGS+=-DPX68K_VERSION=0.15 -EXTRA_INCLUDES= -I./libretro -I./x68k -I./fmgen -I./win32api FLAGS += $(CDEBUGFLAGS) -C68KOBJS= m68000/c68k/c68k.o m68000/c68k/c68kexec.o -CYCLONEOBJS = m68000/cyclone.o +include $(CORE_DIR)/Makefile.common -ifdef CYCLONE -CPUOBJS= x68k/d68k.o m68000/m68000.o $(CYCLONEOBJS) -else -CPUOBJS= x68k/d68k.o m68000/m68000.o $(C68KOBJS) -endif - -X68KOBJS= x68k/adpcm.o x68k/bg.o x68k/crtc.o x68k/dmac.o x68k/fdc.o x68k/fdd.o x68k/disk_d88.o x68k/disk_dim.o x68k/disk_xdf.o x68k/gvram.o x68k/ioc.o x68k/irqh.o x68k/mem_wrap.o x68k/mercury.o x68k/mfp.o x68k/palette.o x68k/midi.o x68k/pia.o x68k/rtc.o x68k/sasi.o x68k/scc.o x68k/scsi.o x68k/sram.o x68k/sysport.o x68k/tvram.o -FMGENOBJS= fmgen/fmgen.o fmgen/fmg_wrap.o fmgen/file.o fmgen/fmtimer.o fmgen/opm.o fmgen/opna.o fmgen/psg.o -RETROCOBJS= libretro/joystick.o libretro/juliet.o libretro/keyboard.o libretro/mouse.o libretro/prop.o libretro/status.o libretro/timer.o libretro/dswin.o libretro/windraw.o libretro/winui.o libretro/about.o libretro/common.o -RETROCXXOBJS= libretro/winx68k.o -WIN32APIOBJS= win32api/dosio.o win32api/fake.o win32api/peace.o - -OBJECTS := $(X68KOBJS) $(RETROCOBJS) $(WIN32APIOBJS) $(CPUOBJS) $(FMGENOBJS) $(RETROCXXOBJS) libretro.o - -#$(C68KOBJS) +OBJECTS := $(SOURCES_CXX:.cpp=.o) $(SOURCES_C:.c=.o) $(SOURCES_S:.s=.o) all: $(TARGET) @@ -108,7 +126,8 @@ else endif LDFLAGS += $(fpic) $(SHARED) $(EXTRA_LDF) -FLAGS += -I. -I.. $(EXTRA_INCLUDES) +FLAGS += $(INCFLAGS) +#FLAGS += -DC68K_NO_JUMP_TABLE WARNINGS := @@ -117,6 +136,11 @@ FLAGS += -D__LIBRETRO__ $(ENDIANNESS_DEFINES) $(WARNINGS) $(fpic) CXXFLAGS += $(FLAGS) -fpermissive $(CPU_FLAGS) CFLAGS += $(FLAGS) -std=gnu99 $(CPU_FLAGS) +ifdef CYCLONE +CFLAGS += -DCYCLONE +CXXFLAGS += -DCYCLONE +endif + $(TARGET): $(OBJECTS) $(CXX) -o $@ $^ $(LDFLAGS) diff --git a/Makefile.psp b/Makefile.psp deleted file mode 100644 index 7c7d9f8..0000000 --- a/Makefile.psp +++ /dev/null @@ -1,78 +0,0 @@ -include version.txt - -#if defined(NO_SOUND) -EXTRA_DEFINES+= -DNOSOUND -#endif - -#if defined(NO_MERCURY) -EXTRA_DEFINES+= -DNO_MERCURY -#endif - -EXTRA_INCLUDES= -I./x11 -I./x68k -I./fmgen -I./win32api \ - $(GTK_INCLUDE) $(SDL_INCLUDE) - -CXXEXTRA_INCLUDES= $(EXTRA_INCLUDES) -CXXEXTRA_DEFINES= $(EXTRA_DEFINES) -CXXDEBUGFLAGS= $(CDEBUGFLAGS) - -LOCAL_LIBRARIES= $(XLIB) $(GTK_LIB) $(SDL_LIB) - -#define PassCDebugFlags - - -CPUOBJS= x68k/d68k.o m68000/c68k.o m68000/m68000.o - -X68KOBJS= \ - x68k/adpcm.o x68k/bg.o x68k/crtc.o x68k/dmac.o x68k/fdc.o \ - x68k/fdd.o x68k/disk_d88.o x68k/disk_dim.o x68k/disk_xdf.o \ - x68k/gvram.o x68k/ioc.o x68k/irqh.o x68k/mem_wrap.o x68k/mercury.o \ - x68k/mfp.o x68k/palette.o x68k/midi.o x68k/pia.o x68k/rtc.o \ - x68k/sasi.o x68k/scc.o x68k/scsi.o x68k/sram.o x68k/sysport.o \ - x68k/tvram.o -FMGENOBJS= \ - fmgen/fmgen.o fmgen/fmg_wrap.o fmgen/file.o fmgen/fmtimer.o \ - fmgen/opm.o fmgen/opna.o fmgen/psg.o - -X11OBJS= \ - x11/joystick.o x11/juliet.o x11/keyboard.o x11/mouse.o x11/prop.o \ - x11/status.o x11/timer.o \ - x11/dswin.o x11/windraw.o x11/winui.o \ - x11/about.o x11/common.o - -X11CXXOBJS= x11/winx68k.o - -WIN32APIOBJS= win32api/dosio.o win32api/fake.o win32api/peace.o - -COBJS= $(X68KOBJS) $(X11OBJS) $(WIN32APIOBJS) $(CPUOBJS) -CXXOBJS= $(FMGENOBJS) $(X11CXXOBJS) -OBJS= $(COBJS) $(CXXOBJS) - -TARGET = px68k -#OBJS = cube.o logo.o ../common/callbacks.o ../common/vram.o - -# for psplink -#BUILD_PRX = 1 - -PSPDEV = $(shell psp-config -d) -PSPBIN = $(PSPDEV)/psp/bin -SDL_CONFIG = $(PSPBIN)/sdl-config - -SDL_INCLUDE= `$(SDL_CONFIG) --cflags` -SDL_LIB= `$(SDL_CONFIG) --libs` - -INCDIR = ./x11 ./x68k ./fmgen ./win32api -CFLAGS = -G0 -O2 -Wall $(SDL_INCLUDE) -DPX68K_VERSION=$(PX68K_VERSION) -# for debugging -#CFLAGS = -g -G0 -Wall $(SDL_INCLUDE) -CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti - -LIBDIR = -LDFLAGS = -LIBS= -lpspgum -lpspgu -lm -lstdc++ $(SDL_LIB) - -EXTRA_TARGETS = EBOOT.PBP -PSP_EBOOT_TITLE = PX68K for PSP ver.$(PX68K_VERSION) -PSP_EBOOT_ICON = psp_logo.png - -PSPSDK=$(shell psp-config --pspsdk-path) -include $(PSPSDK)/lib/build.mak diff --git a/libretro.c b/libretro.c index 3ae9295..7f28577 100755 --- a/libretro.c +++ b/libretro.c @@ -1,19 +1,17 @@ -#include #include #include +#include +#include #include "libretro.h" #ifdef _WIN32 - char slash = '\\'; +char slash = '\\'; #else - char slash = '/'; +char slash = '/'; #endif -#define LOGI printf -#define RENDER16B 1 - #define SOUNDRATE 44100.0 #define SNDSZ 795 @@ -54,24 +52,22 @@ void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { audio_batch_c void retro_set_input_poll(retro_input_poll_t cb) { input_poll_cb = cb; } void retro_set_input_state(retro_input_state_t cb) { input_state_cb = cb; } -#define LOGI printf - static char CMDFILE[512]; int loadcmdfile(char *argv) { - int res=0; + int res=0; - FILE *fp = fopen(argv,"r"); + FILE *fp = fopen(argv,"r"); - if( fp != NULL ) - { - if ( fgets (CMDFILE , 512 , fp) != NULL ) - res=1; - fclose (fp); - } + if( fp != NULL ) + { + if ( fgets (CMDFILE , 512 , fp) != NULL ) + res=1; + fclose (fp); + } - return res; + return res; } int HandleExtension(char *path,char *ext) @@ -123,16 +119,13 @@ int pre_main(const char *argv) if (strlen(argv) > strlen("cmd")) { if( HandleExtension((char*)argv,"cmd") || HandleExtension((char*)argv,"CMD")) - i=loadcmdfile((char*)argv); + i=loadcmdfile((char*)argv); } if(i==1) - { parse_cmdline(CMDFILE); - LOGI("Starting game from command line :%s\n",CMDFILE); - } else - parse_cmdline(argv); + parse_cmdline(argv); Only1Arg = (strcmp(ARGUV[0],"px68k") == 0) ? 0 : 1; @@ -147,16 +140,17 @@ int pre_main(const char *argv) Add_Option("px68k"); if (strlen(RPATH) >= strlen("hdf")){ - if(!strcasecmp(&RPATH[strlen(RPATH)-strlen("hdf")], "hdf")){ - Add_Option("-h"); - cfgload=1; - } + if(!strcasecmp(&RPATH[strlen(RPATH)-strlen("hdf")], "hdf")){ + Add_Option("-h"); + cfgload=1; + } } - if(cfgload==0) { - //Add_Option("-verbose"); - //Add_Option(retro_system_tos); - //Add_Option("-8"); + if(cfgload==0) + { + //Add_Option("-verbose"); + //Add_Option(retro_system_tos); + //Add_Option("-8"); } Add_Option(RPATH); @@ -170,7 +164,6 @@ int pre_main(const char *argv) for (i = 0; i < PARAMCOUNT; i++) { xargv_cmd[i] = (char*)(XARGV[i]); - LOGI("%2d %s\n",i,XARGV[i]); } pmain(PARAMCOUNT,( char **)xargv_cmd); @@ -182,15 +175,15 @@ int pre_main(const char *argv) void parse_cmdline(const char *argv) { - char *p,*p2,*start_of_word; - int c,c2; - static char buffer[512*4]; - enum states { DULL, IN_WORD, IN_STRING } state = DULL; - - strcpy(buffer,argv); - strcat(buffer," \0"); + char *p,*p2,*start_of_word; + int c,c2; + static char buffer[512*4]; + enum states { DULL, IN_WORD, IN_STRING } state = DULL; - for (p = buffer; *p != '\0'; p++) + strcpy(buffer,argv); + strcat(buffer," \0"); + + for (p = buffer; *p != '\0'; p++) { c = (unsigned char) *p; /* convert to unsigned char for is* functions */ switch (state) @@ -238,18 +231,15 @@ void parse_cmdline(const char *argv) } } -void texture_init(){ - memset(videoBuffer, 0, sizeof(videoBuffer)); +void texture_init(void) +{ + memset(videoBuffer, 0, sizeof(*videoBuffer)); } void retro_set_environment(retro_environment_t cb) { -// bool no_rom = true; - environ_cb = cb; - // cb(RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME, &no_rom); - struct retro_variable variables[] = { { "px68k_analog","Use Analog; OFF|ON", @@ -265,24 +255,23 @@ static void update_variables(void) { struct retro_variable var = {0}; - + var.key = "px68k_analog"; var.value = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { fprintf(stderr, "value: %s\n", var.value); - if (strcmp(var.value, "OFF") == 0) + if (!strcmp(var.value, "OFF")) opt_analog = false; - if (strcmp(var.value, "ON") == 0) + if (!strcmp(var.value, "ON")) opt_analog = true; - fprintf(stderr, "[libretro-test]: Analog: %s.\n",opt_analog?"ON":"OFF"); + fprintf(stderr, "[libretro-test]: Analog: %s.\n",opt_analog?"ON":"OFF"); } - } -void update_input() +void update_input(void) { input_poll_cb(); } @@ -302,17 +291,17 @@ static void keyboard_cb(bool down, unsigned keycode, uint32_t character, uint16_ void retro_get_system_info(struct retro_system_info *info) { - memset(info, 0, sizeof(*info)); - info->library_name = "px68k"; - info->library_version = "0.15+"; - info->need_fullpath = true; - info->valid_extensions = "dim|zip|img|d88|88d|hdm|dup|2hd|xdf|hdf"; + memset(info, 0, sizeof(*info)); + info->library_name = "px68k"; + info->library_version = "0.15+"; + info->need_fullpath = true; + info->valid_extensions = "dim|zip|img|d88|88d|hdm|dup|2hd|xdf|hdf|cmd"; } void retro_get_system_av_info(struct retro_system_av_info *info) { -//FIXME handle vice PAL/NTSC + /* FIXME handle PAL/NTSC */ struct retro_game_geometry geom = { retrow, retroh,800, 600 ,4.0 / 3.0 }; struct retro_system_timing timing = { 55.45, SOUNDRATE }; @@ -320,7 +309,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) info->timing = timing; } -void update_geometry() +void update_geometry(void) { struct retro_system_av_info system_av_info; system_av_info.geometry.base_width = retrow; @@ -362,17 +351,16 @@ void retro_cheat_set(unsigned index, bool enabled, const char *code) } bool retro_load_game(const struct retro_game_info *info) -{ +{ + const char *full_path; - const char *full_path; + full_path = info->path; - full_path = info->path; + strcpy(RPATH,full_path); - strcpy(RPATH,full_path); + printf("LOAD EMU\n"); - printf("LOAD EMU\n"); - - return true; + return true; } bool retro_load_game_special(unsigned game_type, const struct retro_game_info *info, size_t num_info) @@ -444,11 +432,8 @@ void retro_init(void) sprintf(retro_system_conf, "%s%ckeropi\0",RETRO_DIR,slash); - LOGI("Retro SYSTEM_DIRECTORY %s\n",retro_system_directory); - LOGI("Retro SAVE_DIRECTORY %s\n",retro_save_directory); - LOGI("Retro CONTENT_DIRECTORY %s\n",retro_content_directory); - enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; + if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { fprintf(stderr, "RGB565 is not supported.\n"); @@ -487,8 +472,8 @@ void retro_init(void) void retro_deinit(void) { - end_loop_retro(); - printf("Retro DeInit\n"); + end_loop_retro(); + printf("Retro DeInit\n"); } void retro_reset(void) @@ -499,32 +484,31 @@ static int firstcall=1; void retro_run(void) { + if(firstcall) + { + pre_main(RPATH); + firstcall=0; + printf("INIT done\n"); + return; + } - if(firstcall){ - pre_main(RPATH); - firstcall=0; - printf("INIT done\n"); - return; - } + if (CHANGEAV == 1) + { + update_geometry(); + printf("w:%d h:%d a:%f\n",retrow,retroh,(float)(4/3)); + CHANGEAV=0; + } - if (CHANGEAV == 1){ - update_geometry(); - printf("w:%d h:%d a:%f\n",retrow,retroh,(float)(4/3)); - CHANGEAV=0; - } + update_input(); + if(pauseg!=-1) + { + } - update_input(); + exec_app_retro(); - if(pauseg!=-1){ - - } - - exec_app_retro(); - - raudio_callback(NULL, NULL,SNDSZ*4); - - video_cb(videoBuffer, retrow, retroh, /*retrow*/ 800 << 1/*2*/); + raudio_callback(NULL, NULL,SNDSZ*4); + video_cb(videoBuffer, retrow, retroh, /*retrow*/ 800 << 1/*2*/); } diff --git a/libretro/dswin.c b/libretro/dswin.c index 7a2cce7..1e5b1ae 100755 --- a/libretro/dswin.c +++ b/libretro/dswin.c @@ -49,21 +49,20 @@ BYTE rsndbuf[PCMBUF_SIZE]; int audio_fd = 1; - void raudio_callback(void *userdata, unsigned char *stream, int len); +void raudio_callback(void *userdata, unsigned char *stream, int len); #ifndef NOSOUND - int DSound_Init(unsigned long rate, unsigned long buflen) { DWORD samples; - if (playing) { + if (playing) return FALSE; - } - if (rate == 0) { + if (rate == 0) + { audio_fd = -1; return TRUE; } @@ -79,45 +78,39 @@ DSound_Init(unsigned long rate, unsigned long buflen) void DSound_Play(void) { -// if (audio_fd >= 0); - + // if (audio_fd >= 0); } void DSound_Stop(void) { -// if (audio_fd >= 0); - + // if (audio_fd >= 0); } int DSound_Cleanup(void) { playing = FALSE; - if (audio_fd >= 0) { + if (audio_fd >= 0) audio_fd = -1; - } + return TRUE; } static void sound_send(int length) { - int rate; + int rate = 0; - rate = 0; - - ADPCM_Update((short *)pbwp, length, rate, pbsp, pbep); - OPM_Update((short *)pbwp, length, rate, pbsp, pbep); + ADPCM_Update((short *)pbwp, length, rate, pbsp, pbep); + OPM_Update((short *)pbwp, length, rate, pbsp, pbep); #ifndef NO_MERCURY - //Mcry_Update((short *)pcmbufp, length); + //Mcry_Update((short *)pcmbufp, length); #endif - pbwp += length * sizeof(WORD) * 2; - if (pbwp >= pbep) { - pbwp = pbsp + (pbwp - pbep); - } - + pbwp += length * sizeof(WORD) * 2; + if (pbwp >= pbep) + pbwp = pbsp + (pbwp - pbep); } void FASTCALL DSound_Send0(long clock) @@ -125,18 +118,20 @@ void FASTCALL DSound_Send0(long clock) int length = 0; int rate; - if (audio_fd < 0) { + if (audio_fd < 0) return; - } DSound_PreCounter += (ratebase * clock); - while (DSound_PreCounter >= 10000000L) { + + while (DSound_PreCounter >= 10000000L) + { length++; DSound_PreCounter -= 10000000L; } - if (length == 0) { + + if (length == 0) return; - } + sound_send(length); } @@ -144,98 +139,89 @@ static void FASTCALL DSound_Send(int length) { int rate; - if (audio_fd < 0) { + if (audio_fd < 0) return; - } sound_send(length); } void raudio_callback(void *userdata, unsigned char *stream, int len) { - int lena, lenb, datalen, rate; - BYTE *buf; - static DWORD bef; - DWORD now; + int lena, lenb, datalen, rate; + BYTE *buf; - now = timeGetTime(); - - //p6logd("tdiff %4d : len %d ", now - bef, len); - -//printf("tdiff %4d : len %d \n", now - bef, len); cb_start: - if (pbrp <= pbwp) { - // pcmbuffer - // +---------+-------------+----------+ - // | |/////////////| | - // +---------+-------------+----------+ - // A A<--datalen-->A A - // | | | | - // pbsp pbrp pbwp pbep + if (pbrp <= pbwp) + { + // pcmbuffer + // +---------+-------------+----------+ + // | |/////////////| | + // +---------+-------------+----------+ + // A A<--datalen-->A A + // | | | | + // pbsp pbrp pbwp pbep - datalen = pbwp - pbrp; - if (datalen < len) { - // needs more data + datalen = pbwp - pbrp; - DSound_Send((len - datalen) / 4); + // needs more data + if (datalen < len) + DSound_Send((len - datalen) / 4); - } #if 0 - datalen = pbwp - pbrp; - if (datalen < len) { - printf("xxxxx not enough sound data xxxxx\n"); - } + datalen = pbwp - pbrp; + if (datalen < len) + printf("xxxxx not enough sound data xxxxx\n"); #endif - if (pbrp > pbwp) { - // chage to TYPEC or TYPED - goto cb_start; - } - buf = pbrp; - pbrp += len; - //printf("TYPEA: "); + // change to TYPEC or TYPED + if (pbrp > pbwp) + goto cb_start; - } else { - // pcmbuffer - // +---------+-------------+----------+ - // |/////////| |//////////| - // +------+--+-------------+----------+ - // <-lenb-> A <---lena---> - // A | A A - // | | | | - // pbsp pbwp pbrp pbep + buf = pbrp; + pbrp += len; + //printf("TYPEA: "); + } + else + { + // pcmbuffer + // +---------+-------------+----------+ + // |/////////| |//////////| + // +------+--+-------------+----------+ + // <-lenb-> A <---lena---> + // A | A A + // | | | | + // pbsp pbwp pbrp pbep - lena = pbep - pbrp; - if (lena >= len) { - buf = pbrp; - pbrp += len; - //printf("TYPEC: "); - } else { - lenb = len - lena; - if (pbwp - pbsp < lenb) { + lena = pbep - pbrp; + if (lena >= len) + { + buf = pbrp; + pbrp += len; + //printf("TYPEC: "); + } + else + { + lenb = len - lena; - DSound_Send((lenb - (pbwp - pbsp)) / 4); + if (pbwp - pbsp < lenb) + DSound_Send((lenb - (pbwp - pbsp)) / 4); - } #if 0 - if (pbwp - pbsp < lenb) { - printf("xxxxx not enough sound data xxxxx\n"); - } + if (pbwp - pbsp < lenb) + printf("xxxxx not enough sound data xxxxx\n"); #endif - memcpy(rsndbuf, pbrp, lena); - memcpy(&rsndbuf[lena], pbsp, lenb); - buf = rsndbuf; - pbrp = pbsp + lenb; - //printf("TYPED: "); - } - } + memcpy(rsndbuf, pbrp, lena); + memcpy(&rsndbuf[lena], pbsp, lenb); + buf = rsndbuf; + pbrp = pbsp + lenb; + //printf("TYPED: "); + } + } + + signed short int *ptr=(signed short int *)buf; + memcpy(&soundbuf[0],buf,len); + audio_batch_cb(soundbuf,len/4); -//printf("%d %d \n",len,lena+lenb); -// _MixAudio(stream, buf, len, _MIX_MAXVOLUME); - signed short int *ptr=(signed short int *)buf; -memcpy(&soundbuf[0],buf,len); - audio_batch_cb(soundbuf,len/4); - bef = now; } #else /* NOSOUND */ diff --git a/libretro/winx68k.cpp b/libretro/winx68k.cpp index 099c008..8279904 100644 --- a/libretro/winx68k.cpp +++ b/libretro/winx68k.cpp @@ -915,29 +915,28 @@ extern "C" void exec_app_retro(){ //} } -extern "C" void end_loop_retro(){ -//end_loop: - Memory_WriteB(0xe8e00d, 0x31); // SRAMœñ€­¹þ€ßµö²Ä - Memory_WriteD(0xed0040, Memory_ReadD(0xed0040)+1); // ÀÑ»»²ÔƯ»þŽÖ(min.) - Memory_WriteD(0xed0044, Memory_ReadD(0xed0044)+1); // ÀÑ»»µ¯Æ°²ó¿ô +extern "C" void end_loop_retro(void) +{ + //end_loop: + Memory_WriteB(0xe8e00d, 0x31); // SRAMœñ€­¹þ€ßµö²Ä + Memory_WriteD(0xed0040, Memory_ReadD(0xed0040)+1); // ÀÑ»»²ÔƯ»þŽÖ(min.) + Memory_WriteD(0xed0044, Memory_ReadD(0xed0044)+1); // ÀÑ»»µ¯Æ°²ó¿ô - OPM_Cleanup(); + OPM_Cleanup(); #ifndef NO_MERCURY - Mcry_Cleanup(); + Mcry_Cleanup(); #endif - Joystick_Cleanup(); - SRAM_Cleanup(); - FDD_Cleanup(); - //CDROM_Cleanup(); - MIDI_Cleanup(); - DSound_Cleanup(); - WinX68k_Cleanup(); - WinDraw_Cleanup(); - WinDraw_CleanupScreen(); + Joystick_Cleanup(); + SRAM_Cleanup(); + FDD_Cleanup(); + //CDROM_Cleanup(); + MIDI_Cleanup(); + DSound_Cleanup(); + WinX68k_Cleanup(); + WinDraw_Cleanup(); + WinDraw_CleanupScreen(); - SaveConfig(); - - return 0; + SaveConfig(); } diff --git a/x68k/memory.h b/x68k/memory.h index 0e91509..c1abd98 100644 --- a/x68k/memory.h +++ b/x68k/memory.h @@ -1,7 +1,7 @@ #ifndef _winx68k_memory #define _winx68k_memory -#include "../x11/common.h" +#include "../libretro/common.h" #define Memory_ReadB cpu_readmem24 #define Memory_ReadW cpu_readmem24_word