mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-26 19:21:49 +01:00
commit
a4255fafc2
1
.gitignore
vendored
1
.gitignore
vendored
@ -12,3 +12,4 @@ sdl/gen_sdl2
|
|||||||
sdl/build_sdl
|
sdl/build_sdl
|
||||||
sdl/build_sdl2
|
sdl/build_sdl2
|
||||||
|
|
||||||
|
/libretro/msvc/msvc-2017/msvc-2017.vcxproj.user
|
||||||
|
@ -6,6 +6,15 @@ HAVE_SYS_PARAM = 1
|
|||||||
|
|
||||||
CORE_DIR := .
|
CORE_DIR := .
|
||||||
|
|
||||||
|
SPACE :=
|
||||||
|
SPACE := $(SPACE) $(SPACE)
|
||||||
|
BACKSLASH :=
|
||||||
|
BACKSLASH := \$(BACKSLASH)
|
||||||
|
filter_out1 = $(filter-out $(firstword $1),$1)
|
||||||
|
filter_out2 = $(call filter_out1,$(call filter_out1,$1))
|
||||||
|
unixpath = $(subst \,/,$1)
|
||||||
|
unixcygpath = /$(subst :,,$(call unixpath,$1))
|
||||||
|
|
||||||
# system platform
|
# system platform
|
||||||
ifeq ($(platform),)
|
ifeq ($(platform),)
|
||||||
platform = unix
|
platform = unix
|
||||||
@ -223,6 +232,14 @@ else ifneq (,$(filter $(platform), ngc wii wiiu))
|
|||||||
PLATFORM_DEFINES += -DHW_DOL -mrvl
|
PLATFORM_DEFINES += -DHW_DOL -mrvl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Nintendo Switch (libtransistor)
|
||||||
|
else ifeq ($(platform), switch)
|
||||||
|
TARGET := $(TARGET_NAME)_libretro_$(platform).a
|
||||||
|
include $(LIBTRANSISTOR_HOME)/libtransistor.mk
|
||||||
|
CFLAGS += -fomit-frame-pointer -ffast-math
|
||||||
|
STATIC_LINKING=1
|
||||||
|
STATIC_LINKING_LINK=1
|
||||||
|
|
||||||
# emscripten
|
# emscripten
|
||||||
else ifeq ($(platform), emscripten)
|
else ifeq ($(platform), emscripten)
|
||||||
TARGET := $(TARGET_NAME)_libretro_$(platform).bc
|
TARGET := $(TARGET_NAME)_libretro_$(platform).bc
|
||||||
@ -243,13 +260,14 @@ else ifeq ($(platform), gcw0)
|
|||||||
# Windows MSVC 2003 Xbox 1
|
# Windows MSVC 2003 Xbox 1
|
||||||
else ifeq ($(platform), xbox1_msvc2003)
|
else ifeq ($(platform), xbox1_msvc2003)
|
||||||
TARGET := $(TARGET_NAME)_libretro_xdk1.lib
|
TARGET := $(TARGET_NAME)_libretro_xdk1.lib
|
||||||
MSVCBINDIRPREFIX = $(XDK)/xbox/bin/vc71
|
CC = CL.exe
|
||||||
CC = "$(MSVCBINDIRPREFIX)/CL.exe"
|
CXX = CL.exe
|
||||||
CXX = "$(MSVCBINDIRPREFIX)/CL.exe"
|
LD = lib.exe
|
||||||
LD = "$(MSVCBINDIRPREFIX)/lib.exe"
|
|
||||||
|
|
||||||
export INCLUDE := $(XDK)/xbox/include
|
export INCLUDE := $(XDK)/xbox/include
|
||||||
export LIB := $(XDK)/xbox/lib
|
export LIB := $(XDK)/xbox/lib
|
||||||
|
PATH := $(call unixcygpath,$(XDK)/xbox/bin/vc71):$(PATH)
|
||||||
|
|
||||||
ENDIANNESS_DEFINES := -DLSB_FIRST -DBYTE_ORDER=LITTLE_ENDIAN
|
ENDIANNESS_DEFINES := -DLSB_FIRST -DBYTE_ORDER=LITTLE_ENDIAN
|
||||||
PSS_STYLE :=2
|
PSS_STYLE :=2
|
||||||
CFLAGS += -D_XBOX -D_XBOX1
|
CFLAGS += -D_XBOX -D_XBOX1
|
||||||
@ -282,23 +300,115 @@ HAVE_SYS_PARAM = 0
|
|||||||
|
|
||||||
PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin/amd64"):$(PATH)
|
PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin/amd64"):$(PATH)
|
||||||
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE")
|
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE")
|
||||||
LIB := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/lib/amd64")
|
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/lib/amd64")
|
||||||
INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/include")
|
INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/include")
|
||||||
|
|
||||||
WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')lib/x64
|
WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')
|
||||||
WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')lib/x64
|
WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')
|
||||||
|
|
||||||
WindowsSdkDirInc := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')Include
|
|
||||||
WindowsSdkDirInc ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')Include
|
|
||||||
|
|
||||||
|
WindowsSdkDirInc := $(WindowsSdkDir)Include
|
||||||
|
WindowsSdkDirInc ?= $(WindowsSdkDir)Include
|
||||||
|
|
||||||
INCFLAGS_PLATFORM = -I"$(WindowsSdkDirInc)"
|
INCFLAGS_PLATFORM = -I"$(WindowsSdkDirInc)"
|
||||||
export INCLUDE := $(INCLUDE)
|
export INCLUDE := $(INCLUDE)
|
||||||
export LIB := $(LIB);$(WindowsSdkDir)
|
export LIB := $(LIB);$(WindowsSdkDir)\Lib\x64
|
||||||
TARGET := $(TARGET_NAME)_libretro.dll
|
TARGET := $(TARGET_NAME)_libretro.dll
|
||||||
PSS_STYLE :=2
|
PSS_STYLE :=2
|
||||||
LDFLAGS += -DLL
|
LDFLAGS += -DLL
|
||||||
LIBS =
|
LIBS =
|
||||||
|
|
||||||
|
# Windows MSVC 2017 all architectures
|
||||||
|
else ifneq (,$(findstring windows_msvc2017,$(platform)))
|
||||||
|
|
||||||
|
PlatformSuffix = $(subst windows_msvc2017_,,$(platform))
|
||||||
|
ifneq (,$(findstring desktop,$(PlatformSuffix)))
|
||||||
|
WinPartition = desktop
|
||||||
|
MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -FS
|
||||||
|
LDFLAGS += -MANIFEST -LTCG:incremental -NXCOMPAT -DYNAMICBASE -DEBUG -OPT:REF -INCREMENTAL:NO -SUBSYSTEM:WINDOWS -MANIFESTUAC:"level='asInvoker' uiAccess='false'" -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1
|
||||||
|
LIBS := kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
|
||||||
|
else ifneq (,$(findstring uwp,$(PlatformSuffix)))
|
||||||
|
WinPartition = uwp
|
||||||
|
MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WINDLL -D_UNICODE -DUNICODE -D__WRL_NO_DEFAULT_LIB__ -EHsc -FS
|
||||||
|
LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -LTCG -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO
|
||||||
|
LIBS := WindowsApp.lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += $(MSVC2017CompileFlags)
|
||||||
|
CXXFLAGS += $(MSVC2017CompileFlags)
|
||||||
|
|
||||||
|
TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix))
|
||||||
|
|
||||||
|
CC = cl.exe
|
||||||
|
CXX = cl.exe
|
||||||
|
LD = link.exe
|
||||||
|
|
||||||
|
HAVE_SYS_PARAM = 0
|
||||||
|
|
||||||
|
reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>nul)))
|
||||||
|
fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1))
|
||||||
|
|
||||||
|
ProgramFiles86w := $(shell cmd /c "echo %PROGRAMFILES(x86)%")
|
||||||
|
ProgramFiles86 := $(shell cygpath "$(ProgramFiles86w)")
|
||||||
|
|
||||||
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
|
WindowsSdkDir := $(WindowsSdkDir)
|
||||||
|
|
||||||
|
WindowsSDKVersion ?= $(firstword $(foreach folder,$(subst $(subst \,/,$(WindowsSdkDir)Include/),,$(wildcard $(call fix_path,$(WindowsSdkDir)Include\*))),$(if $(wildcard $(call fix_path,$(WindowsSdkDir)Include/$(folder)/um/Windows.h)),$(folder),)))$(BACKSLASH)
|
||||||
|
WindowsSDKVersion := $(WindowsSDKVersion)
|
||||||
|
|
||||||
|
VsInstallBuildTools = $(ProgramFiles86)/Microsoft Visual Studio/2017/BuildTools
|
||||||
|
VsInstallEnterprise = $(ProgramFiles86)/Microsoft Visual Studio/2017/Enterprise
|
||||||
|
VsInstallProfessional = $(ProgramFiles86)/Microsoft Visual Studio/2017/Professional
|
||||||
|
VsInstallCommunity = $(ProgramFiles86)/Microsoft Visual Studio/2017/Community
|
||||||
|
|
||||||
|
VsInstallRoot ?= $(shell if [ -d "$(VsInstallBuildTools)" ]; then echo "$(VsInstallBuildTools)"; fi)
|
||||||
|
ifeq ($(VsInstallRoot), )
|
||||||
|
VsInstallRoot = $(shell if [ -d "$(VsInstallEnterprise)" ]; then echo "$(VsInstallEnterprise)"; fi)
|
||||||
|
endif
|
||||||
|
ifeq ($(VsInstallRoot), )
|
||||||
|
VsInstallRoot = $(shell if [ -d "$(VsInstallProfessional)" ]; then echo "$(VsInstallProfessional)"; fi)
|
||||||
|
endif
|
||||||
|
ifeq ($(VsInstallRoot), )
|
||||||
|
VsInstallRoot = $(shell if [ -d "$(VsInstallCommunity)" ]; then echo "$(VsInstallCommunity)"; fi)
|
||||||
|
endif
|
||||||
|
VsInstallRoot := $(VsInstallRoot)
|
||||||
|
|
||||||
|
VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*')
|
||||||
|
VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer)
|
||||||
|
|
||||||
|
WindowsSDKSharedIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\shared")
|
||||||
|
WindowsSDKUCRTIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\ucrt")
|
||||||
|
WindowsSDKUMIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\um")
|
||||||
|
WindowsSDKUCRTLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\ucrt\$(TargetArchMoniker)")
|
||||||
|
WindowsSDKUMLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\um\$(TargetArchMoniker)")
|
||||||
|
|
||||||
|
# For some reason the HostX86 compiler doesn't like compiling for x64
|
||||||
|
# ("no such file" opening a shared library), and vice-versa.
|
||||||
|
# Work around it for now by using the strictly x86 compiler for x86, and x64 for x64.
|
||||||
|
# NOTE: What about ARM?
|
||||||
|
ifneq (,$(findstring x64,$(TargetArchMoniker)))
|
||||||
|
VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX64
|
||||||
|
else
|
||||||
|
VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX86
|
||||||
|
endif
|
||||||
|
|
||||||
|
PATH := $(shell IFS=$$'\n'; cygpath "$(VCCompilerToolsBinDir)/$(TargetArchMoniker)"):$(PATH)
|
||||||
|
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VsInstallRoot)/Common7/IDE")
|
||||||
|
INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/include")
|
||||||
|
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/lib/$(TargetArchMoniker)")
|
||||||
|
ifneq (,$(findstring uwp,$(PlatformSuffix)))
|
||||||
|
LIB := $(shell IFS=$$'\n'; cygpath -w "$(LIB)/store")
|
||||||
|
endif
|
||||||
|
|
||||||
|
export INCLUDE := $(INCLUDE);$(WindowsSDKSharedIncludeDir);$(WindowsSDKUCRTIncludeDir);$(WindowsSDKUMIncludeDir)
|
||||||
|
export LIB := $(LIB);$(WindowsSDKUCRTLibDir);$(WindowsSDKUMLibDir)
|
||||||
|
TARGET := $(TARGET_NAME)_libretro.dll
|
||||||
|
PSS_STYLE :=2
|
||||||
|
LDFLAGS += -DLL
|
||||||
|
|
||||||
# Windows MSVC 2010 x86
|
# Windows MSVC 2010 x86
|
||||||
else ifeq ($(platform), windows_msvc2010_x86)
|
else ifeq ($(platform), windows_msvc2010_x86)
|
||||||
CC = cl.exe
|
CC = cl.exe
|
||||||
@ -309,18 +419,17 @@ else ifeq ($(platform), windows_msvc2010_x86)
|
|||||||
PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin"):$(PATH)
|
PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin"):$(PATH)
|
||||||
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE")
|
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE")
|
||||||
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/lib")
|
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/lib")
|
||||||
INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/include")
|
INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/include")
|
||||||
|
|
||||||
WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')lib
|
WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')
|
||||||
WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')lib
|
WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')
|
||||||
|
|
||||||
WindowsSdkDirInc := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')Include
|
|
||||||
WindowsSdkDirInc ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*')Include
|
|
||||||
|
|
||||||
|
WindowsSdkDirInc := $(WindowsSdkDir)Include
|
||||||
|
WindowsSdkDirInc ?= $(WindowsSdkDir)Include
|
||||||
|
|
||||||
INCFLAGS_PLATFORM = -I"$(WindowsSdkDirInc)"
|
INCFLAGS_PLATFORM = -I"$(WindowsSdkDirInc)"
|
||||||
export INCLUDE := $(INCLUDE)
|
export INCLUDE := $(INCLUDE)
|
||||||
export LIB := $(LIB);$(WindowsSdkDir)
|
export LIB := $(LIB);$(WindowsSdkDir)\Lib
|
||||||
TARGET := $(TARGET_NAME)_libretro.dll
|
TARGET := $(TARGET_NAME)_libretro.dll
|
||||||
PSS_STYLE :=2
|
PSS_STYLE :=2
|
||||||
LDFLAGS += -DLL
|
LDFLAGS += -DLL
|
||||||
@ -347,6 +456,29 @@ PSS_STYLE :=2
|
|||||||
LDFLAGS += -DLL
|
LDFLAGS += -DLL
|
||||||
CFLAGS += -D_CRT_SECURE_NO_DEPRECATE
|
CFLAGS += -D_CRT_SECURE_NO_DEPRECATE
|
||||||
LIBS =
|
LIBS =
|
||||||
|
|
||||||
|
# Windows MSVC 2003 x86
|
||||||
|
else ifeq ($(platform), windows_msvc2003_x86)
|
||||||
|
CC = cl.exe
|
||||||
|
CXX = cl.exe
|
||||||
|
|
||||||
|
PATH := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/bin"):$(PATH)
|
||||||
|
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../IDE")
|
||||||
|
INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/include")
|
||||||
|
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS71COMNTOOLS)../../Vc7/lib")
|
||||||
|
BIN := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/bin")
|
||||||
|
|
||||||
|
WindowsSdkDir := $(INETSDK)
|
||||||
|
|
||||||
|
export INCLUDE := $(INCLUDE);$(INETSDK)/Include;src/drivers/libretro/msvc/msvc-2005
|
||||||
|
export LIB := $(LIB);$(WindowsSdkDir);$(INETSDK)/Lib
|
||||||
|
TARGET := $(TARGET_NAME)_libretro.dll
|
||||||
|
PSS_STYLE :=2
|
||||||
|
LDFLAGS += -DLL
|
||||||
|
HAVE_SYS_PARAM = 0
|
||||||
|
CFLAGS += -D_CRT_SECURE_NO_DEPRECATE
|
||||||
|
LIBS =
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
else
|
else
|
||||||
TARGET := $(TARGET_NAME)_libretro.dll
|
TARGET := $(TARGET_NAME)_libretro.dll
|
||||||
@ -494,3 +626,6 @@ clean:
|
|||||||
|
|
||||||
.PHONY: clean clean-objs
|
.PHONY: clean clean-objs
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
print-%:
|
||||||
|
@echo '$*=$($*)'
|
||||||
|
33
appveyor.yml
Normal file
33
appveyor.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
version: 0.1.{build}
|
||||||
|
|
||||||
|
shallow_clone: true
|
||||||
|
|
||||||
|
image: Visual Studio 2017
|
||||||
|
|
||||||
|
environment:
|
||||||
|
makefile_location: "."
|
||||||
|
makefile_name: makefile.libretro
|
||||||
|
target_name: genesis_plus_gx
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
- release
|
||||||
|
|
||||||
|
platform:
|
||||||
|
- windows_msvc2017_uwp_x64
|
||||||
|
- windows_msvc2017_uwp_x86
|
||||||
|
- windows_msvc2017_uwp_arm
|
||||||
|
- windows_msvc2017_desktop_x64
|
||||||
|
- windows_msvc2017_desktop_x86
|
||||||
|
|
||||||
|
init:
|
||||||
|
- set Path=C:\msys64\usr\bin;%Path%
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- cd %makefile_location%
|
||||||
|
- make -f %makefile_name% platform=%platform%
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
- path: '**\%target_name%*.dll'
|
||||||
|
- path: '**\%target_name%*.lib'
|
||||||
|
- path: '**\%target_name%*.pdb'
|
||||||
|
- path: '**\libretro.h'
|
@ -56,7 +56,11 @@ SOURCES_C += $(foreach dir,$(GENPLUS_SRC_DIR),$(wildcard $(dir)/*.c))
|
|||||||
ifneq ($(STATIC_LINKING), 1)
|
ifneq ($(STATIC_LINKING), 1)
|
||||||
SOURCES_C += \
|
SOURCES_C += \
|
||||||
$(LIBRETRO_COMM_DIR)/streams/file_stream.c \
|
$(LIBRETRO_COMM_DIR)/streams/file_stream.c \
|
||||||
$(LIBRETRO_COMM_DIR)/streams/file_stream_transforms.c
|
$(LIBRETRO_COMM_DIR)/streams/file_stream_transforms.c \
|
||||||
|
$(LIBRETRO_COMM_DIR)/compat/fopen_utf8.c \
|
||||||
|
$(LIBRETRO_COMM_DIR)/compat/compat_strl.c \
|
||||||
|
$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \
|
||||||
|
$(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c
|
||||||
|
|
||||||
SOURCES_C += $(CHDLIBDIR)/deps/zlib/adler32.c \
|
SOURCES_C += $(CHDLIBDIR)/deps/zlib/adler32.c \
|
||||||
$(CHDLIBDIR)/deps/zlib/inffast.c \
|
$(CHDLIBDIR)/deps/zlib/inffast.c \
|
||||||
|
@ -1,40 +1,29 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
CORE_DIR := $(LOCAL_PATH)/../..
|
||||||
|
TREMOR_SRC_DIR := $(CORE_DIR)/core/tremor
|
||||||
GIT_VERSION ?= " $(shell git rev-parse --short HEAD || echo unknown)"
|
|
||||||
ifneq ($(GIT_VERSION)," unknown")
|
|
||||||
LOCAL_CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
SOURCES_C :=
|
||||||
WANT_CRC32 := 1
|
WANT_CRC32 := 1
|
||||||
HAVE_CHD := 1
|
HAVE_CHD := 1
|
||||||
|
|
||||||
CORE_DIR := ../..
|
include $(CORE_DIR)/libretro/Makefile.common
|
||||||
|
|
||||||
TREMOR_SRC_DIR := $(CORE_DIR)/core/tremor
|
COREFLAGS := -ffast-math -funroll-loops -DINLINE="static inline" -DUSE_LIBTREMOR -DUSE_16BPP_RENDERING -DLSB_FIRST -DBYTE_ORDER=LITTLE_ENDIAN -D__LIBRETRO__ -DFRONTEND_SUPPORTS_RGB565 -DALIGN_LONG -DALIGN_WORD -DM68K_OVERCLOCK_SHIFT=20 -DZ80_OVERCLOCK_SHIFT=20 -DUSE_LIBCHDR -DPACKAGE_VERSION=\"1.3.2\" -DFLAC_API_EXPORTS -DFLAC__HAS_OGG=0 -DHAVE_LROUND -DHAVE_STDINT_H -D_7ZIP_ST -DHAVE_SYS_PARAM_H $(INCFLAGS)
|
||||||
LIBRETRO_DIR := ..
|
|
||||||
|
|
||||||
LOCAL_MODULE := retro
|
|
||||||
|
|
||||||
ifeq ($(TARGET_ARCH),arm)
|
ifeq ($(TARGET_ARCH),arm)
|
||||||
LOCAL_CFLAGS += -DANDROID_ARM -D_ARM_ASSEM_
|
COREFLAGS += -D_ARM_ASSEM_
|
||||||
LOCAL_ARM_MODE := arm
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(LIBRETRO_DIR)/Makefile.common
|
GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
|
||||||
|
ifneq ($(GIT_VERSION)," unknown")
|
||||||
|
COREFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_MODULE := retro
|
||||||
LOCAL_SRC_FILES := $(SOURCES_C)
|
LOCAL_SRC_FILES := $(SOURCES_C)
|
||||||
|
LOCAL_CFLAGS := $(COREFLAGS)
|
||||||
LOCAL_C_INCLUDES = $(foreach dir,$(GENPLUS_SRC_DIR),$(LOCAL_PATH)/$(dir)) \
|
LOCAL_LDFLAGS := -Wl,-version-script=$(LIBRETRO_DIR)/link.T
|
||||||
$(CORE_DIR)/libretro/libretro-common/include \
|
LOCAL_ARM_MODE := arm
|
||||||
$(LOCAL_PATH)/$(TREMOR_SRC_DIR) \
|
|
||||||
$(LOCAL_PATH)/$(LIBRETRO_DIR) \
|
|
||||||
$(CHDLIBDIR)/src \
|
|
||||||
$(CHDLIBDIR)/deps/libFLAC/include \
|
|
||||||
$(CHDLIBDIR)/deps/lzma \
|
|
||||||
$(CHDLIBDIR)/deps/zlib
|
|
||||||
|
|
||||||
LOCAL_CFLAGS += -ffast-math -O2 -funroll-loops -DINLINE="static inline" -DUSE_LIBTREMOR -DUSE_16BPP_RENDERING -DLSB_FIRST -DBYTE_ORDER=LITTLE_ENDIAN -D__LIBRETRO__ -DFRONTEND_SUPPORTS_RGB565 -DALIGN_LONG -DALIGN_WORD -DM68K_OVERCLOCK_SHIFT=20 -DZ80_OVERCLOCK_SHIFT=20 -DUSE_LIBCHDR -DPACKAGE_VERSION=\"1.3.2\" -DFLAC_API_EXPORTS -DFLAC__HAS_OGG=0 -DHAVE_LROUND -DHAVE_STDINT_H -D_7ZIP_ST -DHAVE_SYS_PARAM_H
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
69
libretro/libretro-common/compat/compat_strl.c
Normal file
69
libretro/libretro-common/compat/compat_strl.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (compat_strl.c).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include <compat/strl.h>
|
||||||
|
|
||||||
|
/* Implementation of strlcpy()/strlcat() based on OpenBSD. */
|
||||||
|
|
||||||
|
#ifndef __MACH__
|
||||||
|
|
||||||
|
size_t strlcpy(char *dest, const char *source, size_t size)
|
||||||
|
{
|
||||||
|
size_t src_size = 0;
|
||||||
|
size_t n = size;
|
||||||
|
|
||||||
|
if (n)
|
||||||
|
while (--n && (*dest++ = *source++)) src_size++;
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
{
|
||||||
|
if (size) *dest = '\0';
|
||||||
|
while (*source++) src_size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return src_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t strlcat(char *dest, const char *source, size_t size)
|
||||||
|
{
|
||||||
|
size_t len = strlen(dest);
|
||||||
|
|
||||||
|
dest += len;
|
||||||
|
|
||||||
|
if (len > size)
|
||||||
|
size = 0;
|
||||||
|
else
|
||||||
|
size -= len;
|
||||||
|
|
||||||
|
return len + strlcpy(dest, source, size);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char *strldup(const char *s, size_t n)
|
||||||
|
{
|
||||||
|
char *dst = (char*)malloc(sizeof(char) * (n + 1));
|
||||||
|
strlcpy(dst, s, n);
|
||||||
|
return dst;
|
||||||
|
}
|
60
libretro/libretro-common/compat/fopen_utf8.c
Normal file
60
libretro/libretro-common/compat/fopen_utf8.c
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (fopen_utf8.c).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <compat/fopen_utf8.h>
|
||||||
|
#include <encodings/utf.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX)
|
||||||
|
#ifndef LEGACY_WIN32
|
||||||
|
#define LEGACY_WIN32
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#undef fopen
|
||||||
|
|
||||||
|
void *fopen_utf8(const char * filename, const char * mode)
|
||||||
|
{
|
||||||
|
#if defined(_XBOX)
|
||||||
|
return fopen(filename, mode);
|
||||||
|
#elif defined(LEGACY_WIN32)
|
||||||
|
FILE *ret = NULL;
|
||||||
|
char * filename_local = utf8_to_local_string_alloc(filename);
|
||||||
|
|
||||||
|
if (!filename_local)
|
||||||
|
return NULL;
|
||||||
|
ret = fopen(filename_local, mode);
|
||||||
|
if (filename_local)
|
||||||
|
free(filename_local);
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
wchar_t * filename_w = utf8_to_utf16_string_alloc(filename);
|
||||||
|
wchar_t * mode_w = utf8_to_utf16_string_alloc(mode);
|
||||||
|
FILE* ret = _wfopen(filename_w, mode_w);
|
||||||
|
free(filename_w);
|
||||||
|
free(mode_w);
|
||||||
|
return ret;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
516
libretro/libretro-common/encodings/encoding_utf.c
Normal file
516
libretro/libretro-common/encodings/encoding_utf.c
Normal file
@ -0,0 +1,516 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (encoding_utf.c).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <boolean.h>
|
||||||
|
#include <compat/strl.h>
|
||||||
|
#include <retro_inline.h>
|
||||||
|
|
||||||
|
#include <encodings/utf.h>
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
|
#include <windows.h>
|
||||||
|
#elif defined(_XBOX)
|
||||||
|
#include <xtl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static unsigned leading_ones(uint8_t c)
|
||||||
|
{
|
||||||
|
unsigned ones = 0;
|
||||||
|
while (c & 0x80)
|
||||||
|
{
|
||||||
|
ones++;
|
||||||
|
c <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ones;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Simple implementation. Assumes the sequence is
|
||||||
|
* properly synchronized and terminated. */
|
||||||
|
|
||||||
|
size_t utf8_conv_utf32(uint32_t *out, size_t out_chars,
|
||||||
|
const char *in, size_t in_size)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
size_t ret = 0;
|
||||||
|
while (in_size && out_chars)
|
||||||
|
{
|
||||||
|
unsigned extra, shift;
|
||||||
|
uint32_t c;
|
||||||
|
uint8_t first = *in++;
|
||||||
|
unsigned ones = leading_ones(first);
|
||||||
|
|
||||||
|
if (ones > 6 || ones == 1) /* Invalid or desync. */
|
||||||
|
break;
|
||||||
|
|
||||||
|
extra = ones ? ones - 1 : ones;
|
||||||
|
if (1 + extra > in_size) /* Overflow. */
|
||||||
|
break;
|
||||||
|
|
||||||
|
shift = (extra - 1) * 6;
|
||||||
|
c = (first & ((1 << (7 - ones)) - 1)) << (6 * extra);
|
||||||
|
|
||||||
|
for (i = 0; i < extra; i++, in++, shift -= 6)
|
||||||
|
c |= (*in & 0x3f) << shift;
|
||||||
|
|
||||||
|
*out++ = c;
|
||||||
|
in_size -= 1 + extra;
|
||||||
|
out_chars--;
|
||||||
|
ret++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool utf16_conv_utf8(uint8_t *out, size_t *out_chars,
|
||||||
|
const uint16_t *in, size_t in_size)
|
||||||
|
{
|
||||||
|
static uint8_t kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
|
||||||
|
size_t out_pos = 0;
|
||||||
|
size_t in_pos = 0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
unsigned numAdds;
|
||||||
|
uint32_t value;
|
||||||
|
|
||||||
|
if (in_pos == in_size)
|
||||||
|
{
|
||||||
|
*out_chars = out_pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
value = in[in_pos++];
|
||||||
|
if (value < 0x80)
|
||||||
|
{
|
||||||
|
if (out)
|
||||||
|
out[out_pos] = (char)value;
|
||||||
|
out_pos++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value >= 0xD800 && value < 0xE000)
|
||||||
|
{
|
||||||
|
uint32_t c2;
|
||||||
|
|
||||||
|
if (value >= 0xDC00 || in_pos == in_size)
|
||||||
|
break;
|
||||||
|
c2 = in[in_pos++];
|
||||||
|
if (c2 < 0xDC00 || c2 >= 0xE000)
|
||||||
|
break;
|
||||||
|
value = (((value - 0xD800) << 10) | (c2 - 0xDC00)) + 0x10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (numAdds = 1; numAdds < 5; numAdds++)
|
||||||
|
if (value < (((uint32_t)1) << (numAdds * 5 + 6)))
|
||||||
|
break;
|
||||||
|
if (out)
|
||||||
|
out[out_pos] = (char)(kUtf8Limits[numAdds - 1]
|
||||||
|
+ (value >> (6 * numAdds)));
|
||||||
|
out_pos++;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
numAdds--;
|
||||||
|
if (out)
|
||||||
|
out[out_pos] = (char)(0x80
|
||||||
|
+ ((value >> (6 * numAdds)) & 0x3F));
|
||||||
|
out_pos++;
|
||||||
|
}while (numAdds != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
*out_chars = out_pos;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Acts mostly like strlcpy.
|
||||||
|
*
|
||||||
|
* Copies the given number of UTF-8 characters,
|
||||||
|
* but at most d_len bytes.
|
||||||
|
*
|
||||||
|
* Always NULL terminates.
|
||||||
|
* Does not copy half a character.
|
||||||
|
*
|
||||||
|
* Returns number of bytes. 's' is assumed valid UTF-8.
|
||||||
|
* Use only if 'chars' is considerably less than 'd_len'. */
|
||||||
|
size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars)
|
||||||
|
{
|
||||||
|
const uint8_t *sb = (const uint8_t*)s;
|
||||||
|
const uint8_t *sb_org = sb;
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (*sb && chars-- > 0)
|
||||||
|
{
|
||||||
|
sb++;
|
||||||
|
while ((*sb & 0xC0) == 0x80) sb++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((size_t)(sb - sb_org) > d_len-1 /* NUL */)
|
||||||
|
{
|
||||||
|
sb = sb_org + d_len-1;
|
||||||
|
while ((*sb & 0xC0) == 0x80) sb--;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(d, sb_org, sb-sb_org);
|
||||||
|
d[sb-sb_org] = '\0';
|
||||||
|
|
||||||
|
return sb-sb_org;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *utf8skip(const char *str, size_t chars)
|
||||||
|
{
|
||||||
|
const uint8_t *strb = (const uint8_t*)str;
|
||||||
|
if (!chars)
|
||||||
|
return str;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
strb++;
|
||||||
|
while ((*strb & 0xC0)==0x80) strb++;
|
||||||
|
chars--;
|
||||||
|
} while(chars);
|
||||||
|
return (const char*)strb;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t utf8len(const char *string)
|
||||||
|
{
|
||||||
|
size_t ret = 0;
|
||||||
|
|
||||||
|
if (!string)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (*string)
|
||||||
|
{
|
||||||
|
if ((*string & 0xC0) != 0x80)
|
||||||
|
ret++;
|
||||||
|
string++;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t utf8_walkbyte(const char **string)
|
||||||
|
{
|
||||||
|
return *((*string)++);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does not validate the input, returns garbage if it's not UTF-8. */
|
||||||
|
uint32_t utf8_walk(const char **string)
|
||||||
|
{
|
||||||
|
uint8_t first = utf8_walkbyte(string);
|
||||||
|
uint32_t ret = 0;
|
||||||
|
|
||||||
|
if (first < 128)
|
||||||
|
return first;
|
||||||
|
|
||||||
|
ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F);
|
||||||
|
if (first >= 0xE0)
|
||||||
|
ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F);
|
||||||
|
if (first >= 0xF0)
|
||||||
|
ret = (ret << 6) | (utf8_walkbyte(string) & 0x3F);
|
||||||
|
|
||||||
|
if (first >= 0xF0)
|
||||||
|
return ret | (first & 7) << 18;
|
||||||
|
if (first >= 0xE0)
|
||||||
|
return ret | (first & 15) << 12;
|
||||||
|
return ret | (first & 31) << 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool utf16_to_char(uint8_t **utf_data,
|
||||||
|
size_t *dest_len, const uint16_t *in)
|
||||||
|
{
|
||||||
|
unsigned len = 0;
|
||||||
|
|
||||||
|
while (in[len] != '\0')
|
||||||
|
len++;
|
||||||
|
|
||||||
|
utf16_conv_utf8(NULL, dest_len, in, len);
|
||||||
|
*dest_len += 1;
|
||||||
|
*utf_data = (uint8_t*)malloc(*dest_len);
|
||||||
|
if (*utf_data == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return utf16_conv_utf8(*utf_data, dest_len, in, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool utf16_to_char_string(const uint16_t *in, char *s, size_t len)
|
||||||
|
{
|
||||||
|
size_t dest_len = 0;
|
||||||
|
uint8_t *utf16_data = NULL;
|
||||||
|
bool ret = utf16_to_char(&utf16_data, &dest_len, in);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
utf16_data[dest_len] = 0;
|
||||||
|
strlcpy(s, (const char*)utf16_data, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(utf16_data);
|
||||||
|
utf16_data = NULL;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returned pointer MUST be freed by the caller if non-NULL. */
|
||||||
|
static char* mb_to_mb_string_alloc(const char *str,
|
||||||
|
enum CodePage cp_in, enum CodePage cp_out)
|
||||||
|
{
|
||||||
|
char *path_buf = NULL;
|
||||||
|
wchar_t *path_buf_wide = NULL;
|
||||||
|
int path_buf_len = 0;
|
||||||
|
int path_buf_wide_len = 0;
|
||||||
|
|
||||||
|
if (!str || !*str)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
(void)path_buf;
|
||||||
|
(void)path_buf_wide;
|
||||||
|
(void)path_buf_len;
|
||||||
|
(void)path_buf_wide_len;
|
||||||
|
|
||||||
|
#if !defined(_WIN32) || defined(_XBOX)
|
||||||
|
/* assume string needs no modification if not on Windows */
|
||||||
|
return strdup(str);
|
||||||
|
#else
|
||||||
|
#ifdef UNICODE
|
||||||
|
/* TODO/FIXME: Not implemented. */
|
||||||
|
return strdup(str);
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Windows 95 will return 0 from these functions with a UTF8 codepage set without MSLU. From an unknown MSDN version (others omit this info):
|
||||||
|
* - CP_UTF8 Windows 98/Me, Windows NT 4.0 and later: Translate using UTF-8. When this is set, dwFlags must be zero.
|
||||||
|
* - Windows 95: Under the Microsoft Layer for Unicode, MultiByteToWideChar also supports CP_UTF7 and CP_UTF8.
|
||||||
|
*/
|
||||||
|
path_buf_wide_len = MultiByteToWideChar(cp_in, 0, str, -1, NULL, 0);
|
||||||
|
|
||||||
|
if (path_buf_wide_len)
|
||||||
|
{
|
||||||
|
path_buf_wide = (wchar_t*)
|
||||||
|
calloc(path_buf_wide_len + sizeof(wchar_t), sizeof(wchar_t));
|
||||||
|
|
||||||
|
if (path_buf_wide)
|
||||||
|
{
|
||||||
|
MultiByteToWideChar(cp_in, 0,
|
||||||
|
str, -1, path_buf_wide, path_buf_wide_len);
|
||||||
|
|
||||||
|
if (*path_buf_wide)
|
||||||
|
{
|
||||||
|
path_buf_len = WideCharToMultiByte(cp_out, 0,
|
||||||
|
path_buf_wide, -1, NULL, 0, NULL, NULL);
|
||||||
|
|
||||||
|
if (path_buf_len)
|
||||||
|
{
|
||||||
|
path_buf = (char*)
|
||||||
|
calloc(path_buf_len + sizeof(char), sizeof(char));
|
||||||
|
|
||||||
|
if (path_buf)
|
||||||
|
{
|
||||||
|
WideCharToMultiByte(cp_out, 0,
|
||||||
|
path_buf_wide, -1, path_buf,
|
||||||
|
path_buf_len, NULL, NULL);
|
||||||
|
|
||||||
|
free(path_buf_wide);
|
||||||
|
|
||||||
|
if (*path_buf)
|
||||||
|
return path_buf;
|
||||||
|
|
||||||
|
free(path_buf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free(path_buf_wide);
|
||||||
|
return strdup(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return strdup(str);
|
||||||
|
|
||||||
|
if (path_buf_wide)
|
||||||
|
free(path_buf_wide);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returned pointer MUST be freed by the caller if non-NULL. */
|
||||||
|
char* utf8_to_local_string_alloc(const char *str)
|
||||||
|
{
|
||||||
|
return mb_to_mb_string_alloc(str, CODEPAGE_UTF8, CODEPAGE_LOCAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returned pointer MUST be freed by the caller if non-NULL. */
|
||||||
|
char* local_to_utf8_string_alloc(const char *str)
|
||||||
|
{
|
||||||
|
return mb_to_mb_string_alloc(str, CODEPAGE_LOCAL, CODEPAGE_UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returned pointer MUST be freed by the caller if non-NULL. */
|
||||||
|
wchar_t* utf8_to_utf16_string_alloc(const char *str)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
int len = 0;
|
||||||
|
int out_len = 0;
|
||||||
|
#else
|
||||||
|
size_t len = 0;
|
||||||
|
size_t out_len = 0;
|
||||||
|
#endif
|
||||||
|
wchar_t *buf = NULL;
|
||||||
|
|
||||||
|
if (!str || !*str)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (wchar_t*)calloc(len, sizeof(wchar_t));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* fallback to ANSI codepage instead */
|
||||||
|
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (wchar_t*)calloc(len, sizeof(wchar_t));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_len < 0)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* NOTE: For now, assume non-Windows platforms' locale is already UTF-8. */
|
||||||
|
len = mbstowcs(NULL, str, 0) + 1;
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (wchar_t*)calloc(len, sizeof(wchar_t));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = mbstowcs(buf, str, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_len == (size_t)-1)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returned pointer MUST be freed by the caller if non-NULL. */
|
||||||
|
char* utf16_to_utf8_string_alloc(const wchar_t *str)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
int len = 0;
|
||||||
|
int out_len = 0;
|
||||||
|
#else
|
||||||
|
size_t len = 0;
|
||||||
|
size_t out_len = 0;
|
||||||
|
#endif
|
||||||
|
char *buf = NULL;
|
||||||
|
|
||||||
|
if (!str || !*str)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
len = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (char*)calloc(len, sizeof(char));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = WideCharToMultiByte(CP_UTF8, 0, str, -1, buf, len, NULL, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* fallback to ANSI codepage instead */
|
||||||
|
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (char*)calloc(len, sizeof(char));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_len < 0)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* NOTE: For now, assume non-Windows platforms' locale is already UTF-8. */
|
||||||
|
len = wcstombs(NULL, str, 0) + 1;
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
buf = (char*)calloc(len, sizeof(char));
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
out_len = wcstombs(buf, str, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_len == (size_t)-1)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (boolean.h).
|
* The following license statement only applies to this file (boolean.h).
|
||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(SN_TARGET_PS3)
|
#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3)
|
||||||
/* Hack applied for MSVC when compiling in C89 mode as it isn't C99 compliant. */
|
/* Hack applied for MSVC when compiling in C89 mode as it isn't C99 compliant. */
|
||||||
#define bool unsigned char
|
#define bool unsigned char
|
||||||
#define true 1
|
#define true 1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (apple_compat.h).
|
* The following license statement only applies to this file (apple_compat.h).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (fnmatch.h).
|
* The following license statement only applies to this file (fnmatch.h).
|
||||||
|
34
libretro/libretro-common/include/compat/fopen_utf8.h
Normal file
34
libretro/libretro-common/include/compat/fopen_utf8.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (fopen_utf8.h).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LIBRETRO_SDK_COMPAT_FOPEN_UTF8_H
|
||||||
|
#define __LIBRETRO_SDK_COMPAT_FOPEN_UTF8_H
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* Defined to error rather than fopen_utf8, to make it clear to everyone reading the code that not worrying about utf16 is fine */
|
||||||
|
/* TODO: enable */
|
||||||
|
/* #define fopen (use fopen_utf8 instead) */
|
||||||
|
void *fopen_utf8(const char * filename, const char * mode);
|
||||||
|
#else
|
||||||
|
#define fopen_utf8 fopen
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (getopt.h).
|
* The following license statement only applies to this file (getopt.h).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (intrinsics.h).
|
* The following license statement only applies to this file (intrinsics.h).
|
||||||
@ -61,7 +61,7 @@ static INLINE int compat_ctz(unsigned x)
|
|||||||
{
|
{
|
||||||
#if defined(__GNUC__) && !defined(RARCH_CONSOLE)
|
#if defined(__GNUC__) && !defined(RARCH_CONSOLE)
|
||||||
return __builtin_ctz(x);
|
return __builtin_ctz(x);
|
||||||
#elif _MSC_VER >= 1400
|
#elif _MSC_VER >= 1400 && !defined(_XBOX)
|
||||||
unsigned long r = 0;
|
unsigned long r = 0;
|
||||||
_BitScanReverse((unsigned long*)&r, x);
|
_BitScanReverse((unsigned long*)&r, x);
|
||||||
return (int)r;
|
return (int)r;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (msvc.h).
|
* The following license statement only applies to this file (msvc.h).
|
||||||
@ -86,9 +86,33 @@ typedef int ssize_t;
|
|||||||
#pragma warning(disable : 4723)
|
#pragma warning(disable : 4723)
|
||||||
#pragma warning(disable : 4996)
|
#pragma warning(disable : 4996)
|
||||||
|
|
||||||
/* roundf is available since MSVC 2013 */
|
/* roundf and va_copy is available since MSVC 2013 */
|
||||||
#if _MSC_VER < 1800
|
#if _MSC_VER < 1800
|
||||||
#define roundf(in) (in >= 0.0f ? floorf(in + 0.5f) : ceilf(in - 0.5f))
|
#define roundf(in) (in >= 0.0f ? floorf(in + 0.5f) : ceilf(in - 0.5f))
|
||||||
|
#define va_copy(x, y) ((x) = (y))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _MSC_VER <= 1310
|
||||||
|
#ifndef __cplusplus
|
||||||
|
/* VC6 math.h doesn't define some functions when in C mode.
|
||||||
|
* Trying to define a prototype gives "undefined reference".
|
||||||
|
* But providing an implementation then gives "function already has body".
|
||||||
|
* So the equivalent of the implementations from math.h are used as
|
||||||
|
* defines here instead, and it seems to work.
|
||||||
|
*/
|
||||||
|
#define cosf(x) ((float)cos((double)x))
|
||||||
|
#define powf(x, y) ((float)pow((double)x, (double)y))
|
||||||
|
#define sinf(x) ((float)sin((double)x))
|
||||||
|
#define ceilf(x) ((float)ceil((double)x))
|
||||||
|
#define floorf(x) ((float)floor((double)x))
|
||||||
|
#define sqrtf(x) ((float)sqrt((double)x))
|
||||||
|
#define fabsf(x) ((float)fabs((double)(x)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _strtoui64
|
||||||
|
#define _strtoui64(x, y, z) (_atoi64(x))
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PATH_MAX
|
#ifndef PATH_MAX
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (posix_string.h).
|
* The following license statement only applies to this file (posix_string.h).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (strcasestr.h).
|
* The following license statement only applies to this file (strcasestr.h).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (strl.h).
|
* The following license statement only applies to this file (strl.h).
|
||||||
@ -26,7 +26,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#if defined(RARCH_INTERNAL) && defined(HAVE_CONFIG_H)
|
||||||
#include "../../../config.h"
|
#include "../../../config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -52,6 +52,8 @@ size_t strlcat(char *dest, const char *source, size_t size);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char *strldup(const char *s, size_t n);
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
67
libretro/libretro-common/include/encodings/utf.h
Normal file
67
libretro/libretro-common/include/encodings/utf.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (utf.h).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBRETRO_ENCODINGS_UTF_H
|
||||||
|
#define _LIBRETRO_ENCODINGS_UTF_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include <boolean.h>
|
||||||
|
|
||||||
|
#include <retro_common_api.h>
|
||||||
|
|
||||||
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
enum CodePage
|
||||||
|
{
|
||||||
|
CODEPAGE_LOCAL = 0, /* CP_ACP */
|
||||||
|
CODEPAGE_UTF8 = 65001 /* CP_UTF8 */
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t utf8_conv_utf32(uint32_t *out, size_t out_chars,
|
||||||
|
const char *in, size_t in_size);
|
||||||
|
|
||||||
|
bool utf16_conv_utf8(uint8_t *out, size_t *out_chars,
|
||||||
|
const uint16_t *in, size_t in_size);
|
||||||
|
|
||||||
|
size_t utf8len(const char *string);
|
||||||
|
|
||||||
|
size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars);
|
||||||
|
|
||||||
|
const char *utf8skip(const char *str, size_t chars);
|
||||||
|
|
||||||
|
uint32_t utf8_walk(const char **string);
|
||||||
|
|
||||||
|
bool utf16_to_char_string(const uint16_t *in, char *s, size_t len);
|
||||||
|
|
||||||
|
char* utf8_to_local_string_alloc(const char *str);
|
||||||
|
|
||||||
|
char* local_to_utf8_string_alloc(const char *str);
|
||||||
|
|
||||||
|
wchar_t* utf8_to_utf16_string_alloc(const char *str);
|
||||||
|
|
||||||
|
char* utf16_to_utf8_string_alloc(const wchar_t *str);
|
||||||
|
|
||||||
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2016 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this libretro API header (libretro.h).
|
* The following license statement only applies to this libretro API header (libretro.h).
|
||||||
@ -32,7 +32,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#if defined(_MSC_VER) && !defined(SN_TARGET_PS3)
|
#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3)
|
||||||
/* Hack applied for MSVC when compiling in C89 mode
|
/* Hack applied for MSVC when compiling in C89 mode
|
||||||
* as it isn't C99-compliant. */
|
* as it isn't C99-compliant. */
|
||||||
#define bool unsigned char
|
#define bool unsigned char
|
||||||
@ -126,16 +126,23 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define RETRO_DEVICE_KEYBOARD 3
|
#define RETRO_DEVICE_KEYBOARD 3
|
||||||
|
|
||||||
/* Lightgun X/Y coordinates are reported relatively to last poll,
|
/* LIGHTGUN device is similar to Guncon-2 for PlayStation 2.
|
||||||
* similar to mouse. */
|
* It reports X/Y coordinates in screen space (similar to the pointer)
|
||||||
|
* in the range [-0x8000, 0x7fff] in both axes, with zero being center.
|
||||||
|
* As well as reporting on/off screen state. It features a trigger,
|
||||||
|
* start/select buttons, auxiliary action buttons and a
|
||||||
|
* directional pad. A forced off-screen shot can be requested for
|
||||||
|
* auto-reloading function in some games.
|
||||||
|
*/
|
||||||
#define RETRO_DEVICE_LIGHTGUN 4
|
#define RETRO_DEVICE_LIGHTGUN 4
|
||||||
|
|
||||||
/* The ANALOG device is an extension to JOYPAD (RetroPad).
|
/* The ANALOG device is an extension to JOYPAD (RetroPad).
|
||||||
* Similar to DualShock it adds two analog sticks.
|
* Similar to DualShock2 it adds two analog sticks and all buttons can
|
||||||
* This is treated as a separate device type as it returns values in the
|
* be analog. This is treated as a separate device type as it returns
|
||||||
* full analog range of [-0x8000, 0x7fff]. Positive X axis is right.
|
* axis values in the full analog range of [-0x8000, 0x7fff].
|
||||||
* Positive Y axis is down.
|
* Positive X axis is right. Positive Y axis is down.
|
||||||
* Only use ANALOG type when polling for analog values of the axes.
|
* Buttons are returned in the range [0, 0x7fff].
|
||||||
|
* Only use ANALOG type when polling for analog values.
|
||||||
*/
|
*/
|
||||||
#define RETRO_DEVICE_ANALOG 5
|
#define RETRO_DEVICE_ANALOG 5
|
||||||
|
|
||||||
@ -174,7 +181,8 @@ extern "C" {
|
|||||||
/* Buttons for the RetroPad (JOYPAD).
|
/* Buttons for the RetroPad (JOYPAD).
|
||||||
* The placement of these is equivalent to placements on the
|
* The placement of these is equivalent to placements on the
|
||||||
* Super Nintendo controller.
|
* Super Nintendo controller.
|
||||||
* L2/R2/L3/R3 buttons correspond to the PS1 DualShock. */
|
* L2/R2/L3/R3 buttons correspond to the PS1 DualShock.
|
||||||
|
* Also used as id values for RETRO_DEVICE_INDEX_ANALOG_BUTTON */
|
||||||
#define RETRO_DEVICE_ID_JOYPAD_B 0
|
#define RETRO_DEVICE_ID_JOYPAD_B 0
|
||||||
#define RETRO_DEVICE_ID_JOYPAD_Y 1
|
#define RETRO_DEVICE_ID_JOYPAD_Y 1
|
||||||
#define RETRO_DEVICE_ID_JOYPAD_SELECT 2
|
#define RETRO_DEVICE_ID_JOYPAD_SELECT 2
|
||||||
@ -193,10 +201,11 @@ extern "C" {
|
|||||||
#define RETRO_DEVICE_ID_JOYPAD_R3 15
|
#define RETRO_DEVICE_ID_JOYPAD_R3 15
|
||||||
|
|
||||||
/* Index / Id values for ANALOG device. */
|
/* Index / Id values for ANALOG device. */
|
||||||
#define RETRO_DEVICE_INDEX_ANALOG_LEFT 0
|
#define RETRO_DEVICE_INDEX_ANALOG_LEFT 0
|
||||||
#define RETRO_DEVICE_INDEX_ANALOG_RIGHT 1
|
#define RETRO_DEVICE_INDEX_ANALOG_RIGHT 1
|
||||||
#define RETRO_DEVICE_ID_ANALOG_X 0
|
#define RETRO_DEVICE_INDEX_ANALOG_BUTTON 2
|
||||||
#define RETRO_DEVICE_ID_ANALOG_Y 1
|
#define RETRO_DEVICE_ID_ANALOG_X 0
|
||||||
|
#define RETRO_DEVICE_ID_ANALOG_Y 1
|
||||||
|
|
||||||
/* Id values for MOUSE. */
|
/* Id values for MOUSE. */
|
||||||
#define RETRO_DEVICE_ID_MOUSE_X 0
|
#define RETRO_DEVICE_ID_MOUSE_X 0
|
||||||
@ -208,15 +217,30 @@ extern "C" {
|
|||||||
#define RETRO_DEVICE_ID_MOUSE_MIDDLE 6
|
#define RETRO_DEVICE_ID_MOUSE_MIDDLE 6
|
||||||
#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP 7
|
#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP 7
|
||||||
#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN 8
|
#define RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN 8
|
||||||
|
#define RETRO_DEVICE_ID_MOUSE_BUTTON_4 9
|
||||||
|
#define RETRO_DEVICE_ID_MOUSE_BUTTON_5 10
|
||||||
|
|
||||||
/* Id values for LIGHTGUN types. */
|
/* Id values for LIGHTGUN. */
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_X 0
|
#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X 13 /*Absolute Position*/
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_Y 1
|
#define RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y 14 /*Absolute*/
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_TRIGGER 2
|
#define RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN 15 /*Status Check*/
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_CURSOR 3
|
#define RETRO_DEVICE_ID_LIGHTGUN_TRIGGER 2
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_TURBO 4
|
#define RETRO_DEVICE_ID_LIGHTGUN_RELOAD 16 /*Forced off-screen shot*/
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_PAUSE 5
|
#define RETRO_DEVICE_ID_LIGHTGUN_AUX_A 3
|
||||||
#define RETRO_DEVICE_ID_LIGHTGUN_START 6
|
#define RETRO_DEVICE_ID_LIGHTGUN_AUX_B 4
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_START 6
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_SELECT 7
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_AUX_C 8
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_UP 9
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_DOWN 10
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_LEFT 11
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_DPAD_RIGHT 12
|
||||||
|
/* deprecated */
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_X 0 /*Relative Position*/
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_Y 1 /*Relative*/
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_CURSOR 3 /*Use Aux:A*/
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_TURBO 4 /*Use Aux:B*/
|
||||||
|
#define RETRO_DEVICE_ID_LIGHTGUN_PAUSE 5 /*Use Start*/
|
||||||
|
|
||||||
/* Id values for POINTER. */
|
/* Id values for POINTER. */
|
||||||
#define RETRO_DEVICE_ID_POINTER_X 0
|
#define RETRO_DEVICE_ID_POINTER_X 0
|
||||||
@ -230,20 +254,23 @@ extern "C" {
|
|||||||
/* Id values for LANGUAGE */
|
/* Id values for LANGUAGE */
|
||||||
enum retro_language
|
enum retro_language
|
||||||
{
|
{
|
||||||
RETRO_LANGUAGE_ENGLISH = 0,
|
RETRO_LANGUAGE_ENGLISH = 0,
|
||||||
RETRO_LANGUAGE_JAPANESE = 1,
|
RETRO_LANGUAGE_JAPANESE = 1,
|
||||||
RETRO_LANGUAGE_FRENCH = 2,
|
RETRO_LANGUAGE_FRENCH = 2,
|
||||||
RETRO_LANGUAGE_SPANISH = 3,
|
RETRO_LANGUAGE_SPANISH = 3,
|
||||||
RETRO_LANGUAGE_GERMAN = 4,
|
RETRO_LANGUAGE_GERMAN = 4,
|
||||||
RETRO_LANGUAGE_ITALIAN = 5,
|
RETRO_LANGUAGE_ITALIAN = 5,
|
||||||
RETRO_LANGUAGE_DUTCH = 6,
|
RETRO_LANGUAGE_DUTCH = 6,
|
||||||
RETRO_LANGUAGE_PORTUGUESE = 7,
|
RETRO_LANGUAGE_PORTUGUESE_BRAZIL = 7,
|
||||||
RETRO_LANGUAGE_RUSSIAN = 8,
|
RETRO_LANGUAGE_PORTUGUESE_PORTUGAL = 8,
|
||||||
RETRO_LANGUAGE_KOREAN = 9,
|
RETRO_LANGUAGE_RUSSIAN = 9,
|
||||||
RETRO_LANGUAGE_CHINESE_TRADITIONAL = 10,
|
RETRO_LANGUAGE_KOREAN = 10,
|
||||||
RETRO_LANGUAGE_CHINESE_SIMPLIFIED = 11,
|
RETRO_LANGUAGE_CHINESE_TRADITIONAL = 11,
|
||||||
RETRO_LANGUAGE_ESPERANTO = 12,
|
RETRO_LANGUAGE_CHINESE_SIMPLIFIED = 12,
|
||||||
RETRO_LANGUAGE_POLISH = 13,
|
RETRO_LANGUAGE_ESPERANTO = 13,
|
||||||
|
RETRO_LANGUAGE_POLISH = 14,
|
||||||
|
RETRO_LANGUAGE_VIETNAMESE = 15,
|
||||||
|
RETRO_LANGUAGE_ARABIC = 16,
|
||||||
RETRO_LANGUAGE_LAST,
|
RETRO_LANGUAGE_LAST,
|
||||||
|
|
||||||
/* Ensure sizeof(enum) == sizeof(int) */
|
/* Ensure sizeof(enum) == sizeof(int) */
|
||||||
@ -349,6 +376,10 @@ enum retro_key
|
|||||||
RETROK_x = 120,
|
RETROK_x = 120,
|
||||||
RETROK_y = 121,
|
RETROK_y = 121,
|
||||||
RETROK_z = 122,
|
RETROK_z = 122,
|
||||||
|
RETROK_LEFTBRACE = 123,
|
||||||
|
RETROK_BAR = 124,
|
||||||
|
RETROK_RIGHTBRACE = 125,
|
||||||
|
RETROK_TILDE = 126,
|
||||||
RETROK_DELETE = 127,
|
RETROK_DELETE = 127,
|
||||||
|
|
||||||
RETROK_KP0 = 256,
|
RETROK_KP0 = 256,
|
||||||
@ -712,7 +743,7 @@ enum retro_mod
|
|||||||
/* struct retro_log_callback * --
|
/* struct retro_log_callback * --
|
||||||
* Gets an interface for logging. This is useful for
|
* Gets an interface for logging. This is useful for
|
||||||
* logging in a cross-platform way
|
* logging in a cross-platform way
|
||||||
* as certain platforms cannot use use stderr for logging.
|
* as certain platforms cannot use stderr for logging.
|
||||||
* It also allows the frontend to
|
* It also allows the frontend to
|
||||||
* show logging information in a more suitable way.
|
* show logging information in a more suitable way.
|
||||||
* If this interface is not used, libretro cores should
|
* If this interface is not used, libretro cores should
|
||||||
@ -921,10 +952,148 @@ enum retro_mod
|
|||||||
* writeable (and readable).
|
* writeable (and readable).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT (44 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
||||||
|
/* N/A (null) * --
|
||||||
|
* The frontend will try to use a 'shared' hardware context (mostly applicable
|
||||||
|
* to OpenGL) when a hardware context is being set up.
|
||||||
|
*
|
||||||
|
* Returns true if the frontend supports shared hardware contexts and false
|
||||||
|
* if the frontend does not support shared hardware contexts.
|
||||||
|
*
|
||||||
|
* This will do nothing on its own until SET_HW_RENDER env callbacks are
|
||||||
|
* being used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define RETRO_ENVIRONMENT_GET_VFS_INTERFACE (45 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
||||||
|
/* struct retro_vfs_interface_info * --
|
||||||
|
* Gets access to the VFS interface.
|
||||||
|
* VFS presence needs to be queried prior to load_game or any
|
||||||
|
* get_system/save/other_directory being called to let front end know
|
||||||
|
* core supports VFS before it starts handing out paths.
|
||||||
|
* It is recomended to do so in retro_set_environment */
|
||||||
|
|
||||||
|
/* VFS functionality */
|
||||||
|
|
||||||
|
/* File paths:
|
||||||
|
* File paths passed as parameters when using this api shall be well formed unix-style,
|
||||||
|
* using "/" (unquoted forward slash) as directory separator regardless of the platform's native separator.
|
||||||
|
* Paths shall also include at least one forward slash ("game.bin" is an invalid path, use "./game.bin" instead).
|
||||||
|
* Other than the directory separator, cores shall not make assumptions about path format:
|
||||||
|
* "C:/path/game.bin", "http://example.com/game.bin", "#game/game.bin", "./game.bin" (without quotes) are all valid paths.
|
||||||
|
* Cores may replace the basename or remove path components from the end, and/or add new components;
|
||||||
|
* however, cores shall not append "./", "../" or multiple consecutive forward slashes ("//") to paths they request to front end.
|
||||||
|
* The frontend is encouraged to make such paths work as well as it can, but is allowed to give up if the core alters paths too much.
|
||||||
|
* Frontends are encouraged, but not required, to support native file system paths (modulo replacing the directory separator, if applicable).
|
||||||
|
* Cores are allowed to try using them, but must remain functional if the front rejects such requests.
|
||||||
|
* Cores are encouraged to use the libretro-common filestream functions for file I/O,
|
||||||
|
* as they seamlessly integrate with VFS, deal with directory separator replacement as appropriate
|
||||||
|
* and provide platform-specific fallbacks in cases where front ends do not support VFS. */
|
||||||
|
|
||||||
|
/* Opaque file handle
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
struct retro_vfs_file_handle;
|
||||||
|
|
||||||
|
/* File open flags
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_READ (1 << 0) /* Read only mode */
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_WRITE (1 << 1) /* Write only mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified */
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_READ_WRITE (RETRO_VFS_FILE_ACCESS_READ | RETRO_VFS_FILE_ACCESS_WRITE) /* Read-write mode, discard contents and overwrites existing file unless RETRO_VFS_FILE_ACCESS_UPDATE is also specified*/
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING (1 << 2) /* Prevents discarding content of existing files opened for writing */
|
||||||
|
|
||||||
|
/* These are only hints. The frontend may choose to ignore them. Other than RAM/CPU/etc use,
|
||||||
|
and how they react to unlikely external interference (for example someone else writing to that file,
|
||||||
|
or the file's server going down), behavior will not change. */
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_HINT_NONE (0)
|
||||||
|
/* Indicate that the file will be accessed many times. The frontend should aggressively cache everything. */
|
||||||
|
#define RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS (1 << 0)
|
||||||
|
|
||||||
|
/* Seek positions */
|
||||||
|
#define RETRO_VFS_SEEK_POSITION_START 0
|
||||||
|
#define RETRO_VFS_SEEK_POSITION_CURRENT 1
|
||||||
|
#define RETRO_VFS_SEEK_POSITION_END 2
|
||||||
|
|
||||||
|
/* Get path from opaque handle. Returns the exact same path passed to file_open when getting the handle
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef const char *(RETRO_CALLCONV *retro_vfs_get_path_t)(struct retro_vfs_file_handle *stream);
|
||||||
|
|
||||||
|
/* Open a file for reading or writing. If path points to a directory, this will
|
||||||
|
* fail. Returns the opaque file handle, or NULL for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef struct retro_vfs_file_handle *(RETRO_CALLCONV *retro_vfs_open_t)(const char *path, unsigned mode, unsigned hints);
|
||||||
|
|
||||||
|
/* Close the file and release its resources. Must be called if open_file returns non-NULL. Returns 0 on succes, -1 on failure.
|
||||||
|
* Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int (RETRO_CALLCONV *retro_vfs_close_t)(struct retro_vfs_file_handle *stream);
|
||||||
|
|
||||||
|
/* Return the size of the file in bytes, or -1 for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int64_t (RETRO_CALLCONV *retro_vfs_size_t)(struct retro_vfs_file_handle *stream);
|
||||||
|
|
||||||
|
/* Get the current read / write position for the file. Returns - 1 for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int64_t (RETRO_CALLCONV *retro_vfs_tell_t)(struct retro_vfs_file_handle *stream);
|
||||||
|
|
||||||
|
/* Set the current read/write position for the file. Returns the new position, -1 for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int64_t (RETRO_CALLCONV *retro_vfs_seek_t)(struct retro_vfs_file_handle *stream, int64_t offset, int seek_position);
|
||||||
|
|
||||||
|
/* Read data from a file. Returns the number of bytes read, or -1 for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int64_t (RETRO_CALLCONV *retro_vfs_read_t)(struct retro_vfs_file_handle *stream, void *s, uint64_t len);
|
||||||
|
|
||||||
|
/* Write data to a file. Returns the number of bytes written, or -1 for error.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int64_t (RETRO_CALLCONV *retro_vfs_write_t)(struct retro_vfs_file_handle *stream, const void *s, uint64_t len);
|
||||||
|
|
||||||
|
/* Flush pending writes to file, if using buffered IO. Returns 0 on sucess, or -1 on failure.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int (RETRO_CALLCONV *retro_vfs_flush_t)(struct retro_vfs_file_handle *stream);
|
||||||
|
|
||||||
|
/* Delete the specified file. Returns 0 on success, -1 on failure
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int (RETRO_CALLCONV *retro_vfs_remove_t)(const char *path);
|
||||||
|
|
||||||
|
/* Rename the specified file. Returns 0 on success, -1 on failure
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
typedef int (RETRO_CALLCONV *retro_vfs_rename_t)(const char *old_path, const char *new_path);
|
||||||
|
|
||||||
|
struct retro_vfs_interface
|
||||||
|
{
|
||||||
|
retro_vfs_get_path_t get_path;
|
||||||
|
retro_vfs_open_t open;
|
||||||
|
retro_vfs_close_t close;
|
||||||
|
retro_vfs_size_t size;
|
||||||
|
retro_vfs_tell_t tell;
|
||||||
|
retro_vfs_seek_t seek;
|
||||||
|
retro_vfs_read_t read;
|
||||||
|
retro_vfs_write_t write;
|
||||||
|
retro_vfs_flush_t flush;
|
||||||
|
retro_vfs_remove_t remove;
|
||||||
|
retro_vfs_rename_t rename;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct retro_vfs_interface_info
|
||||||
|
{
|
||||||
|
/* Set by core: should this be higher than the version the front end supports,
|
||||||
|
* front end will return false in the RETRO_ENVIRONMENT_GET_VFS_INTERFACE call
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
uint32_t required_interface_version;
|
||||||
|
|
||||||
|
/* Frontend writes interface pointer here. The frontend also sets the actual
|
||||||
|
* version, must be at least required_interface_version.
|
||||||
|
* Introduced in VFS API v1 */
|
||||||
|
struct retro_vfs_interface *iface;
|
||||||
|
};
|
||||||
|
|
||||||
enum retro_hw_render_interface_type
|
enum retro_hw_render_interface_type
|
||||||
{
|
{
|
||||||
RETRO_HW_RENDER_INTERFACE_VULKAN = 0,
|
RETRO_HW_RENDER_INTERFACE_VULKAN = 0,
|
||||||
RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX
|
RETRO_HW_RENDER_INTERFACE_D3D9 = 1,
|
||||||
|
RETRO_HW_RENDER_INTERFACE_D3D10 = 2,
|
||||||
|
RETRO_HW_RENDER_INTERFACE_D3D11 = 3,
|
||||||
|
RETRO_HW_RENDER_INTERFACE_D3D12 = 4,
|
||||||
|
RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Base struct. All retro_hw_render_interface_* types
|
/* Base struct. All retro_hw_render_interface_* types
|
||||||
@ -934,6 +1103,62 @@ struct retro_hw_render_interface
|
|||||||
enum retro_hw_render_interface_type interface_type;
|
enum retro_hw_render_interface_type interface_type;
|
||||||
unsigned interface_version;
|
unsigned interface_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define RETRO_ENVIRONMENT_GET_LED_INTERFACE (46 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
||||||
|
/* struct retro_led_interface * --
|
||||||
|
* Gets an interface which is used by a libretro core to set
|
||||||
|
* state of LEDs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef void (RETRO_CALLCONV *retro_set_led_state_t)(int led, int state);
|
||||||
|
struct retro_led_interface
|
||||||
|
{
|
||||||
|
retro_set_led_state_t set_led_state;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE (47 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
||||||
|
/* int * --
|
||||||
|
* Tells the core if the frontend wants audio or video.
|
||||||
|
* If disabled, the frontend will discard the audio or video,
|
||||||
|
* so the core may decide to skip generating a frame or generating audio.
|
||||||
|
* This is mainly used for increasing performance.
|
||||||
|
* Bit 0 (value 1): Enable Video
|
||||||
|
* Bit 1 (value 2): Enable Audio
|
||||||
|
* Bit 2 (value 4): Use Fast Savestates.
|
||||||
|
* Bit 3 (value 8): Hard Disable Audio
|
||||||
|
* Other bits are reserved for future use and will default to zero.
|
||||||
|
* If video is disabled:
|
||||||
|
* * The frontend wants the core to not generate any video,
|
||||||
|
* including presenting frames via hardware acceleration.
|
||||||
|
* * The frontend's video frame callback will do nothing.
|
||||||
|
* * After running the frame, the video output of the next frame should be
|
||||||
|
* no different than if video was enabled, and saving and loading state
|
||||||
|
* should have no issues.
|
||||||
|
* If audio is disabled:
|
||||||
|
* * The frontend wants the core to not generate any audio.
|
||||||
|
* * The frontend's audio callbacks will do nothing.
|
||||||
|
* * After running the frame, the audio output of the next frame should be
|
||||||
|
* no different than if audio was enabled, and saving and loading state
|
||||||
|
* should have no issues.
|
||||||
|
* Fast Savestates:
|
||||||
|
* * Guaranteed to be created by the same binary that will load them.
|
||||||
|
* * Will not be written to or read from the disk.
|
||||||
|
* * Suggest that the core assumes loading state will succeed.
|
||||||
|
* * Suggest that the core updates its memory buffers in-place if possible.
|
||||||
|
* * Suggest that the core skips clearing memory.
|
||||||
|
* * Suggest that the core skips resetting the system.
|
||||||
|
* * Suggest that the core may skip validation steps.
|
||||||
|
* Hard Disable Audio:
|
||||||
|
* * Used for a secondary core when running ahead.
|
||||||
|
* * Indicates that the frontend will never need audio from the core.
|
||||||
|
* * Suggests that the core may stop synthesizing audio, but this should not
|
||||||
|
* compromise emulation accuracy.
|
||||||
|
* * Audio output for the next frame does not matter, and the frontend will
|
||||||
|
* never need an accurate audio state in the future.
|
||||||
|
* * State will never be saved when using Hard Disable Audio.
|
||||||
|
*/
|
||||||
|
|
||||||
#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL)
|
||||||
/* const struct retro_hw_render_interface ** --
|
/* const struct retro_hw_render_interface ** --
|
||||||
* Returns an API specific rendering interface for accessing API specific data.
|
* Returns an API specific rendering interface for accessing API specific data.
|
||||||
@ -1006,7 +1231,6 @@ struct retro_hw_render_context_negotiation_interface
|
|||||||
* recognize or support. Should be set in either retro_init or retro_load_game, but not both.
|
* recognize or support. Should be set in either retro_init or retro_load_game, but not both.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */
|
#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */
|
||||||
#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */
|
#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */
|
||||||
#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */
|
#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */
|
||||||
@ -1316,6 +1540,7 @@ struct retro_log_callback
|
|||||||
#define RETRO_SIMD_POPCNT (1 << 18)
|
#define RETRO_SIMD_POPCNT (1 << 18)
|
||||||
#define RETRO_SIMD_MOVBE (1 << 19)
|
#define RETRO_SIMD_MOVBE (1 << 19)
|
||||||
#define RETRO_SIMD_CMOV (1 << 20)
|
#define RETRO_SIMD_CMOV (1 << 20)
|
||||||
|
#define RETRO_SIMD_ASIMD (1 << 21)
|
||||||
|
|
||||||
typedef uint64_t retro_perf_tick_t;
|
typedef uint64_t retro_perf_tick_t;
|
||||||
typedef int64_t retro_time_t;
|
typedef int64_t retro_time_t;
|
||||||
@ -1662,6 +1887,10 @@ enum retro_hw_context_type
|
|||||||
/* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */
|
/* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */
|
||||||
RETRO_HW_CONTEXT_VULKAN = 6,
|
RETRO_HW_CONTEXT_VULKAN = 6,
|
||||||
|
|
||||||
|
/* Direct3D, set version_major to select the type of interface
|
||||||
|
* returned by RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */
|
||||||
|
RETRO_HW_CONTEXT_DIRECT3D = 7,
|
||||||
|
|
||||||
RETRO_HW_CONTEXT_DUMMY = INT_MAX
|
RETRO_HW_CONTEXT_DUMMY = INT_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1689,7 +1918,8 @@ struct retro_hw_render_callback
|
|||||||
* be providing preallocated framebuffers. */
|
* be providing preallocated framebuffers. */
|
||||||
retro_hw_get_current_framebuffer_t get_current_framebuffer;
|
retro_hw_get_current_framebuffer_t get_current_framebuffer;
|
||||||
|
|
||||||
/* Set by frontend. */
|
/* Set by frontend.
|
||||||
|
* Can return all relevant functions, including glClear on Windows. */
|
||||||
retro_hw_get_proc_address_t get_proc_address;
|
retro_hw_get_proc_address_t get_proc_address;
|
||||||
|
|
||||||
/* Set if render buffers should have depth component attached.
|
/* Set if render buffers should have depth component attached.
|
||||||
@ -1972,10 +2202,12 @@ struct retro_variable
|
|||||||
struct retro_game_info
|
struct retro_game_info
|
||||||
{
|
{
|
||||||
const char *path; /* Path to game, UTF-8 encoded.
|
const char *path; /* Path to game, UTF-8 encoded.
|
||||||
* Usually used as a reference.
|
* Sometimes used as a reference for building other paths.
|
||||||
* May be NULL if rom was loaded from stdin
|
* May be NULL if game was loaded from stdin or similar,
|
||||||
* or similar.
|
* but in this case some cores will be unable to load `data`.
|
||||||
* retro_system_info::need_fullpath guaranteed
|
* So, it is preferable to fabricate something here instead
|
||||||
|
* of passing NULL, which will help more cores to succeed.
|
||||||
|
* retro_system_info::need_fullpath requires
|
||||||
* that this path is valid. */
|
* that this path is valid. */
|
||||||
const void *data; /* Memory buffer of loaded game. Will be NULL
|
const void *data; /* Memory buffer of loaded game. Will be NULL
|
||||||
* if need_fullpath was set. */
|
* if need_fullpath was set. */
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (memmap.h).
|
* The following license statement only applies to this file (memmap.h).
|
||||||
@ -23,7 +23,10 @@
|
|||||||
#ifndef _LIBRETRO_MEMMAP_H
|
#ifndef _LIBRETRO_MEMMAP_H
|
||||||
#define _LIBRETRO_MEMMAP_H
|
#define _LIBRETRO_MEMMAP_H
|
||||||
|
|
||||||
#if defined(__CELLOS_LV2__) || defined(PSP) || defined(GEKKO) || defined(VITA) || defined(_XBOX) || defined(_3DS) || defined(WIIU)
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#if defined(__CELLOS_LV2__) || defined(PSP) || defined(GEKKO) || defined(VITA) || defined(_XBOX) || defined(_3DS) || defined(WIIU) || defined(SWITCH)
|
||||||
/* No mman available */
|
/* No mman available */
|
||||||
#elif defined(_WIN32) && !defined(_XBOX)
|
#elif defined(_WIN32) && !defined(_XBOX)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (retro_common.h).
|
* The following license statement only applies to this file (retro_common.h).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (retro_common_api.h).
|
* The following license statement only applies to this file (retro_common_api.h).
|
||||||
@ -75,19 +75,29 @@ typedef int ssize_t;
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _MSC_VER
|
||||||
#define STRING_REP_INT64 "%I64u"
|
#if _MSC_VER >= 1800
|
||||||
#define STRING_REP_UINT64 "%I64u"
|
#include <inttypes.h>
|
||||||
#define STRING_REP_ULONG "%Iu"
|
|
||||||
#elif defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L && !defined(VITA) && !defined(WIIU)
|
|
||||||
#define STRING_REP_INT64 "%llu"
|
|
||||||
#define STRING_REP_UINT64 "%llu"
|
|
||||||
#define STRING_REP_ULONG "%zu"
|
|
||||||
#else
|
#else
|
||||||
#define STRING_REP_INT64 "%llu"
|
#ifndef PRId64
|
||||||
#define STRING_REP_UINT64 "%llu"
|
#define PRId64 "I64d"
|
||||||
#define STRING_REP_ULONG "%lu"
|
#define PRIu64 "I64u"
|
||||||
|
#define PRIuPTR "Iu"
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/* C++11 says this one isn't needed, but apparently (some versions of) mingw require it anyways */
|
||||||
|
/* https://stackoverflow.com/questions/8132399/how-to-printf-uint64-t-fails-with-spurious-trailing-in-format */
|
||||||
|
/* https://github.com/libretro/RetroArch/issues/6009 */
|
||||||
|
#define __STDC_FORMAT_MACROS
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
#ifndef PRId64
|
||||||
|
#error "inttypes.h is being screwy"
|
||||||
|
#endif
|
||||||
|
#define STRING_REP_INT64 "%" PRId64
|
||||||
|
#define STRING_REP_UINT64 "%" PRIu64
|
||||||
|
#define STRING_REP_USIZE "%" PRIuPTR
|
||||||
|
|
||||||
/*
|
/*
|
||||||
I would like to see retro_inline.h moved in here; possibly boolean too.
|
I would like to see retro_inline.h moved in here; possibly boolean too.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (retro_inline.h).
|
* The following license statement only applies to this file (retro_inline.h).
|
||||||
|
@ -1,116 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (retro_miscellaneous.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RARCH_MISCELLANEOUS_H
|
|
||||||
#define __RARCH_MISCELLANEOUS_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#if defined(__CELLOS_LV2__) && !defined(__PSL1GHT__)
|
|
||||||
#include <sys/timer.h>
|
|
||||||
#elif defined(XENON)
|
|
||||||
#include <time/time.h>
|
|
||||||
#elif defined(GEKKO) || defined(__PSL1GHT__) || defined(__QNX__)
|
|
||||||
#include <unistd.h>
|
|
||||||
#elif defined(WIIU)
|
|
||||||
#include <wiiu/os/thread.h>
|
|
||||||
#elif defined(PSP)
|
|
||||||
#include <pspthreadman.h>
|
|
||||||
#elif defined(VITA)
|
|
||||||
#include <psp2/kernel/threadmgr.h>
|
|
||||||
#elif defined(_3DS)
|
|
||||||
#include <3ds.h>
|
|
||||||
#else
|
|
||||||
#include <time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(_XBOX)
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
#elif defined(_WIN32) && defined(_XBOX)
|
|
||||||
#include <Xtl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#include <compat/msvc.h>
|
|
||||||
#endif
|
|
||||||
#include <retro_inline.h>
|
|
||||||
|
|
||||||
#ifndef PATH_MAX_LENGTH
|
|
||||||
#if defined(_XBOX1) || defined(_3DS) || defined(PSP) || defined(GEKKO)|| defined(WIIU)
|
|
||||||
#define PATH_MAX_LENGTH 512
|
|
||||||
#else
|
|
||||||
#define PATH_MAX_LENGTH 4096
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef M_PI
|
|
||||||
#if !defined(_MSC_VER) && !defined(USE_MATH_DEFINES)
|
|
||||||
#define M_PI 3.14159265358979323846264338327
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MAX
|
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MIN
|
|
||||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
|
||||||
|
|
||||||
/* Helper macros and struct to keep track of many booleans.
|
|
||||||
* To check for multiple bits, use &&, not &.
|
|
||||||
* For OR, | can be used. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t data[8];
|
|
||||||
} retro_bits_t;
|
|
||||||
|
|
||||||
#define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7)))
|
|
||||||
#define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7)))
|
|
||||||
#define BIT_GET(a, bit) ((a)[(bit) >> 3] & (1 << ((bit) & 7)))
|
|
||||||
|
|
||||||
#define BIT16_SET(a, bit) ((a) |= (1 << ((bit) & 15)))
|
|
||||||
#define BIT16_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 15)))
|
|
||||||
#define BIT16_GET(a, bit) (!!((a) & (1 << ((bit) & 15))))
|
|
||||||
#define BIT16_CLEAR_ALL(a) ((a) = 0)
|
|
||||||
|
|
||||||
#define BIT32_SET(a, bit) ((a) |= (1 << ((bit) & 31)))
|
|
||||||
#define BIT32_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 31)))
|
|
||||||
#define BIT32_GET(a, bit) (!!((a) & (1 << ((bit) & 31))))
|
|
||||||
#define BIT32_CLEAR_ALL(a) ((a) = 0)
|
|
||||||
|
|
||||||
#define BIT64_SET(a, bit) ((a) |= (UINT64_C(1) << ((bit) & 63)))
|
|
||||||
#define BIT64_CLEAR(a, bit) ((a) &= ~(UINT64_C(1) << ((bit) & 63)))
|
|
||||||
#define BIT64_GET(a, bit) (!!((a) & (UINT64_C(1) << ((bit) & 63))))
|
|
||||||
#define BIT64_CLEAR_ALL(a) ((a) = 0)
|
|
||||||
|
|
||||||
#define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31)))
|
|
||||||
#define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31)))
|
|
||||||
#define BIT128_GET(a, bit) ((a).data[(bit) >> 5] & (1 << ((bit) & 31)))
|
|
||||||
#define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a));
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (file_stream.h).
|
* The following license statement only applies to this file (file_stream.h).
|
||||||
@ -23,68 +23,85 @@
|
|||||||
#ifndef __LIBRETRO_SDK_FILE_STREAM_H
|
#ifndef __LIBRETRO_SDK_FILE_STREAM_H
|
||||||
#define __LIBRETRO_SDK_FILE_STREAM_H
|
#define __LIBRETRO_SDK_FILE_STREAM_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <libretro.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
|
#include <retro_inline.h>
|
||||||
#include <boolean.h>
|
#include <boolean.h>
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#define FILESTREAM_REQUIRED_VFS_VERSION 1
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct RFILE RFILE;
|
typedef struct RFILE RFILE;
|
||||||
|
|
||||||
enum
|
#define FILESTREAM_REQUIRED_VFS_VERSION 1
|
||||||
{
|
|
||||||
RFILE_MODE_READ = 0,
|
|
||||||
RFILE_MODE_READ_TEXT,
|
|
||||||
RFILE_MODE_WRITE,
|
|
||||||
RFILE_MODE_READ_WRITE,
|
|
||||||
|
|
||||||
/* There is no garantee these requests will be attended. */
|
void filestream_vfs_init(const struct retro_vfs_interface_info* vfs_info);
|
||||||
RFILE_HINT_UNBUFFERED = 1<<8,
|
|
||||||
RFILE_HINT_MMAP = 1<<9 /* requires RFILE_MODE_READ */
|
|
||||||
};
|
|
||||||
|
|
||||||
long long int filestream_get_size(RFILE *stream);
|
int64_t filestream_get_size(RFILE *stream);
|
||||||
|
|
||||||
void filestream_set_size(RFILE *stream);
|
/**
|
||||||
|
* filestream_open:
|
||||||
|
* @path : path to file
|
||||||
|
* @mode : file mode to use when opening (read/write)
|
||||||
|
* @bufsize : optional buffer size (-1 or 0 to use default)
|
||||||
|
*
|
||||||
|
* Opens a file for reading or writing, depending on the requested mode.
|
||||||
|
* Returns a pointer to an RFILE if opened successfully, otherwise NULL.
|
||||||
|
**/
|
||||||
|
RFILE *filestream_open(const char *path, unsigned mode, unsigned hints);
|
||||||
|
|
||||||
const char *filestream_get_ext(RFILE *stream);
|
int64_t filestream_seek(RFILE *stream, int64_t offset, int seek_position);
|
||||||
|
|
||||||
RFILE *filestream_open(const char *path, unsigned mode, ssize_t len);
|
int64_t filestream_read(RFILE *stream, void *data, int64_t len);
|
||||||
|
|
||||||
ssize_t filestream_seek(RFILE *stream, ssize_t offset, int whence);
|
int64_t filestream_write(RFILE *stream, const void *data, int64_t len);
|
||||||
|
|
||||||
ssize_t filestream_read(RFILE *stream, void *data, size_t len);
|
int64_t filestream_tell(RFILE *stream);
|
||||||
|
|
||||||
ssize_t filestream_write(RFILE *stream, const void *data, size_t len);
|
|
||||||
|
|
||||||
ssize_t filestream_tell(RFILE *stream);
|
|
||||||
|
|
||||||
void filestream_rewind(RFILE *stream);
|
void filestream_rewind(RFILE *stream);
|
||||||
|
|
||||||
int filestream_close(RFILE *stream);
|
int filestream_close(RFILE *stream);
|
||||||
|
|
||||||
int filestream_read_file(const char *path, void **buf, ssize_t *len);
|
int64_t filestream_read_file(const char *path, void **buf, int64_t *len);
|
||||||
|
|
||||||
char *filestream_gets(RFILE *stream, char *s, size_t len);
|
char *filestream_gets(RFILE *stream, char *s, size_t len);
|
||||||
|
|
||||||
char *filestream_getline(RFILE *stream);
|
|
||||||
|
|
||||||
int filestream_getc(RFILE *stream);
|
int filestream_getc(RFILE *stream);
|
||||||
|
|
||||||
int filestream_eof(RFILE *stream);
|
int filestream_eof(RFILE *stream);
|
||||||
|
|
||||||
bool filestream_write_file(const char *path, const void *data, ssize_t size);
|
bool filestream_write_file(const char *path, const void *data, int64_t size);
|
||||||
|
|
||||||
int filestream_putc(RFILE *stream, int c);
|
int filestream_putc(RFILE *stream, int c);
|
||||||
|
|
||||||
int filestream_get_fd(RFILE *stream);
|
int filestream_vprintf(RFILE *stream, const char* format, va_list args);
|
||||||
|
|
||||||
|
int filestream_printf(RFILE *stream, const char* format, ...);
|
||||||
|
|
||||||
|
int filestream_error(RFILE *stream);
|
||||||
|
|
||||||
int filestream_flush(RFILE *stream);
|
int filestream_flush(RFILE *stream);
|
||||||
|
|
||||||
|
int filestream_delete(const char *path);
|
||||||
|
|
||||||
|
int filestream_rename(const char *old_path, const char *new_path);
|
||||||
|
|
||||||
|
const char *filestream_get_path(RFILE *stream);
|
||||||
|
|
||||||
|
bool filestream_exists(const char *path);
|
||||||
|
|
||||||
|
char *filestream_getline(RFILE *stream);
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (file_stream_transforms.h).
|
* The following license statement only applies to this file (file_stream_transforms.h).
|
||||||
@ -23,38 +23,66 @@
|
|||||||
#ifndef __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H
|
#ifndef __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H
|
||||||
#define __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H
|
#define __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <streams/file_stream.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <retro_common_api.h>
|
||||||
|
#include <streams/file_stream.h>
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
#define FILE RFILE
|
#define FILE RFILE
|
||||||
|
|
||||||
|
#undef fopen
|
||||||
|
#undef fclose
|
||||||
|
#undef ftell
|
||||||
|
#undef fseek
|
||||||
|
#undef fread
|
||||||
|
#undef fgets
|
||||||
|
#undef fgetc
|
||||||
|
#undef fwrite
|
||||||
|
#undef fputc
|
||||||
|
#undef fprintf
|
||||||
|
#undef ferror
|
||||||
|
#undef feof
|
||||||
|
|
||||||
#define fopen rfopen
|
#define fopen rfopen
|
||||||
#define fclose rfclose
|
#define fclose rfclose
|
||||||
#define ftell rftell
|
#define ftell rftell
|
||||||
#define fseek rfseek
|
#define fseek rfseek
|
||||||
#define fread rfread
|
#define fread rfread
|
||||||
#define fgets rfgets
|
#define fgets rfgets
|
||||||
|
#define fgetc rfgetc
|
||||||
#define fwrite rfwrite
|
#define fwrite rfwrite
|
||||||
|
#define fputc rfputc
|
||||||
|
#define fprintf rfprintf
|
||||||
|
#define ferror rferror
|
||||||
|
#define feof rfeof
|
||||||
|
|
||||||
RFILE* rfopen(const char *path, char *mode);
|
RFILE* rfopen(const char *path, const char *mode);
|
||||||
|
|
||||||
int rfclose(RFILE* stream);
|
int rfclose(RFILE* stream);
|
||||||
|
|
||||||
long rftell(RFILE* stream);
|
int64_t rftell(RFILE* stream);
|
||||||
|
|
||||||
int rfseek(RFILE* stream, long offset, int origin);
|
int64_t rfseek(RFILE* stream, int64_t offset, int origin);
|
||||||
|
|
||||||
size_t rfread(void* buffer,
|
int64_t rfread(void* buffer,
|
||||||
size_t elementSize, size_t elementCount, RFILE* stream);
|
size_t elem_size, size_t elem_count, RFILE* stream);
|
||||||
|
|
||||||
char *rfgets(char *buffer, int maxCount, RFILE* stream);
|
char *rfgets(char *buffer, int maxCount, RFILE* stream);
|
||||||
|
|
||||||
size_t rfwrite(void const* buffer,
|
int rfgetc(RFILE* stream);
|
||||||
size_t elementSize, size_t elementCount, RFILE* stream);
|
|
||||||
|
int64_t rfwrite(void const* buffer,
|
||||||
|
size_t elem_size, size_t elem_count, RFILE* stream);
|
||||||
|
|
||||||
|
int rfputc(int character, RFILE * stream);
|
||||||
|
|
||||||
|
int rfprintf(RFILE * stream, const char * format, ...);
|
||||||
|
|
||||||
|
int rferror(RFILE* stream);
|
||||||
|
|
||||||
|
int rfeof(RFILE* stream);
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
65
libretro/libretro-common/include/vfs/vfs_implementation.h
Normal file
65
libretro/libretro-common/include/vfs/vfs_implementation.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (vfs_implementation.h).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LIBRETRO_SDK_VFS_IMPLEMENTATION_H
|
||||||
|
#define __LIBRETRO_SDK_VFS_IMPLEMENTATION_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <libretro.h>
|
||||||
|
|
||||||
|
/* Replace the following symbol with something appropriate
|
||||||
|
* to signify the file is being compiled for a front end instead of a core.
|
||||||
|
* This allows the same code to act as reference implementation
|
||||||
|
* for VFS and as fallbacks for when the front end does not provide VFS functionality.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef VFS_FRONTEND
|
||||||
|
typedef struct retro_vfs_file_handle libretro_vfs_implementation_file;
|
||||||
|
#else
|
||||||
|
typedef struct libretro_vfs_implementation_file libretro_vfs_implementation_file;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
libretro_vfs_implementation_file *retro_vfs_file_open_impl(const char *path, unsigned mode, unsigned hints);
|
||||||
|
|
||||||
|
int retro_vfs_file_close_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
int retro_vfs_file_error_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_size_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_tell_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_seek_impl(libretro_vfs_implementation_file *stream, int64_t offset, int seek_position);
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_read_impl(libretro_vfs_implementation_file *stream, void *s, uint64_t len);
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_write_impl(libretro_vfs_implementation_file *stream, const void *s, uint64_t len);
|
||||||
|
|
||||||
|
int retro_vfs_file_flush_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
int retro_vfs_file_remove_impl(const char *path);
|
||||||
|
|
||||||
|
int retro_vfs_file_rename_impl(const char *old_path, const char *new_path);
|
||||||
|
|
||||||
|
const char *retro_vfs_file_get_path_impl(libretro_vfs_implementation_file *stream);
|
||||||
|
|
||||||
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (memmap.c).
|
* The following license statement only applies to this file (memmap.c).
|
||||||
@ -48,7 +48,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
void* mmap(void *addr, size_t len, int prot, int flags, int fildes, size_t offset)
|
void* mmap(void *addr, size_t len, int prot, int flags,
|
||||||
|
int fildes, size_t offset)
|
||||||
{
|
{
|
||||||
void *map = (void*)NULL;
|
void *map = (void*)NULL;
|
||||||
HANDLE handle = INVALID_HANDLE_VALUE;
|
HANDLE handle = INVALID_HANDLE_VALUE;
|
||||||
@ -57,36 +58,34 @@ void* mmap(void *addr, size_t len, int prot, int flags, int fildes, size_t offse
|
|||||||
{
|
{
|
||||||
case PROT_READ:
|
case PROT_READ:
|
||||||
default:
|
default:
|
||||||
{
|
handle = CreateFileMapping((HANDLE)
|
||||||
handle = CreateFileMapping((HANDLE) _get_osfhandle(fildes), 0, PAGE_READONLY, 0,
|
_get_osfhandle(fildes), 0, PAGE_READONLY, 0,
|
||||||
len, 0);
|
len, 0);
|
||||||
if (!handle)
|
if (!handle)
|
||||||
break;
|
|
||||||
map = (void*)MapViewOfFile(handle, FILE_MAP_READ, 0, 0, len);
|
|
||||||
CloseHandle(handle);
|
|
||||||
break;
|
break;
|
||||||
}
|
map = (void*)MapViewOfFile(handle, FILE_MAP_READ, 0, 0, len);
|
||||||
|
CloseHandle(handle);
|
||||||
|
break;
|
||||||
case PROT_WRITE:
|
case PROT_WRITE:
|
||||||
{
|
handle = CreateFileMapping((HANDLE)
|
||||||
handle = CreateFileMapping((HANDLE) _get_osfhandle(fildes),0,PAGE_READWRITE,0,
|
_get_osfhandle(fildes),0,PAGE_READWRITE,0,
|
||||||
len, 0);
|
len, 0);
|
||||||
if (!handle)
|
if (!handle)
|
||||||
break;
|
|
||||||
map = (void*)MapViewOfFile(handle, FILE_MAP_WRITE, 0, 0, len);
|
|
||||||
CloseHandle(handle);
|
|
||||||
break;
|
break;
|
||||||
}
|
map = (void*)MapViewOfFile(handle, FILE_MAP_WRITE, 0, 0, len);
|
||||||
|
CloseHandle(handle);
|
||||||
|
break;
|
||||||
case PROT_READWRITE:
|
case PROT_READWRITE:
|
||||||
{
|
handle = CreateFileMapping((HANDLE)
|
||||||
handle = CreateFileMapping((HANDLE) _get_osfhandle(fildes),0,PAGE_READWRITE,0,
|
_get_osfhandle(fildes),0,PAGE_READWRITE,0,
|
||||||
len, 0);
|
len, 0);
|
||||||
if (!handle)
|
if (!handle)
|
||||||
break;
|
|
||||||
map = (void*)MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, len);
|
|
||||||
CloseHandle(handle);
|
|
||||||
break;
|
break;
|
||||||
}
|
map = (void*)MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, len);
|
||||||
|
CloseHandle(handle);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (map == (void*)NULL)
|
if (map == (void*)NULL)
|
||||||
return((void*)MAP_FAILED);
|
return((void*)MAP_FAILED);
|
||||||
return((void*) ((int8_t*)map + offset));
|
return((void*) ((int8_t*)map + offset));
|
||||||
@ -110,7 +109,8 @@ int mprotect(void *addr, size_t len, int prot)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#elif !defined(HAVE_MMAN)
|
#elif !defined(HAVE_MMAN)
|
||||||
void* mmap(void *addr, size_t len, int prot, int flags, int fildes, size_t offset)
|
void* mmap(void *addr, size_t len, int prot, int flags,
|
||||||
|
int fildes, size_t offset)
|
||||||
{
|
{
|
||||||
return malloc(len);
|
return malloc(len);
|
||||||
}
|
}
|
||||||
@ -123,7 +123,8 @@ int munmap(void *addr, size_t len)
|
|||||||
|
|
||||||
int mprotect(void *addr, size_t len, int prot)
|
int mprotect(void *addr, size_t len, int prot)
|
||||||
{
|
{
|
||||||
/* stub - not really needed at this point since this codepath has no dynarecs */
|
/* stub - not really needed at this point
|
||||||
|
* since this codepath has no dynarecs. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (file_stream.c).
|
* The following license statement only applies to this file (file_stream.c).
|
||||||
@ -23,546 +23,344 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#ifdef HAVE_CONFIG_H
|
||||||
# ifdef _MSC_VER
|
#include "config.h"
|
||||||
# define setmode _setmode
|
|
||||||
# endif
|
|
||||||
# ifdef _XBOX
|
|
||||||
# include <xtl.h>
|
|
||||||
# define INVALID_FILE_ATTRIBUTES -1
|
|
||||||
# else
|
|
||||||
# include <io.h>
|
|
||||||
# include <fcntl.h>
|
|
||||||
# include <direct.h>
|
|
||||||
# include <windows.h>
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# if defined(PSP)
|
|
||||||
# include <pspiofilemgr.h>
|
|
||||||
# endif
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/stat.h>
|
|
||||||
# if !defined(VITA)
|
|
||||||
# include <dirent.h>
|
|
||||||
# endif
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
#include <cell/cell_fs.h>
|
|
||||||
#define O_RDONLY CELL_FS_O_RDONLY
|
|
||||||
#define O_WRONLY CELL_FS_O_WRONLY
|
|
||||||
#define O_CREAT CELL_FS_O_CREAT
|
|
||||||
#define O_TRUNC CELL_FS_O_TRUNC
|
|
||||||
#define O_RDWR CELL_FS_O_RDWR
|
|
||||||
#else
|
|
||||||
#include <fcntl.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <streams/file_stream.h>
|
#include <streams/file_stream.h>
|
||||||
#include <memmap.h>
|
#define VFS_FRONTEND
|
||||||
#include <retro_miscellaneous.h>
|
#include <vfs/vfs_implementation.h>
|
||||||
|
|
||||||
|
static const int64_t vfs_error_return_value = -1;
|
||||||
|
|
||||||
|
static retro_vfs_get_path_t filestream_get_path_cb = NULL;
|
||||||
|
static retro_vfs_open_t filestream_open_cb = NULL;
|
||||||
|
static retro_vfs_close_t filestream_close_cb = NULL;
|
||||||
|
static retro_vfs_size_t filestream_size_cb = NULL;
|
||||||
|
static retro_vfs_tell_t filestream_tell_cb = NULL;
|
||||||
|
static retro_vfs_seek_t filestream_seek_cb = NULL;
|
||||||
|
static retro_vfs_read_t filestream_read_cb = NULL;
|
||||||
|
static retro_vfs_write_t filestream_write_cb = NULL;
|
||||||
|
static retro_vfs_flush_t filestream_flush_cb = NULL;
|
||||||
|
static retro_vfs_remove_t filestream_remove_cb = NULL;
|
||||||
|
static retro_vfs_rename_t filestream_rename_cb = NULL;
|
||||||
|
|
||||||
struct RFILE
|
struct RFILE
|
||||||
{
|
{
|
||||||
unsigned hints;
|
struct retro_vfs_file_handle *hfile;
|
||||||
char *ext;
|
bool error_flag;
|
||||||
long long int size;
|
bool eof_flag;
|
||||||
#if defined(PSP)
|
|
||||||
SceUID fd;
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define HAVE_BUFFERED_IO 1
|
|
||||||
|
|
||||||
#define MODE_STR_READ "r"
|
|
||||||
#define MODE_STR_READ_UNBUF "rb"
|
|
||||||
#define MODE_STR_WRITE_UNBUF "wb"
|
|
||||||
#define MODE_STR_WRITE_PLUS "w+"
|
|
||||||
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
FILE *fp;
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_MMAP)
|
|
||||||
uint8_t *mapped;
|
|
||||||
uint64_t mappos;
|
|
||||||
uint64_t mapsize;
|
|
||||||
#endif
|
|
||||||
int fd;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int filestream_get_fd(RFILE *stream)
|
/* VFS Initialization */
|
||||||
{
|
|
||||||
if (!stream)
|
|
||||||
return -1;
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
return fileno(stream->fp);
|
|
||||||
#endif
|
|
||||||
return stream->fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *filestream_get_ext(RFILE *stream)
|
void filestream_vfs_init(const struct retro_vfs_interface_info* vfs_info)
|
||||||
{
|
{
|
||||||
if (!stream)
|
const struct retro_vfs_interface* vfs_iface;
|
||||||
return NULL;
|
|
||||||
return stream->ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
long long int filestream_get_size(RFILE *stream)
|
filestream_get_path_cb = NULL;
|
||||||
{
|
filestream_open_cb = NULL;
|
||||||
if (!stream)
|
filestream_close_cb = NULL;
|
||||||
return 0;
|
filestream_tell_cb = NULL;
|
||||||
return stream->size;
|
filestream_size_cb = NULL;
|
||||||
}
|
filestream_seek_cb = NULL;
|
||||||
|
filestream_read_cb = NULL;
|
||||||
|
filestream_write_cb = NULL;
|
||||||
|
filestream_flush_cb = NULL;
|
||||||
|
filestream_remove_cb = NULL;
|
||||||
|
filestream_rename_cb = NULL;
|
||||||
|
|
||||||
void filestream_set_size(RFILE *stream)
|
vfs_iface = vfs_info->iface;
|
||||||
{
|
|
||||||
if (!stream)
|
if (vfs_info->required_interface_version < FILESTREAM_REQUIRED_VFS_VERSION
|
||||||
|
|| !vfs_iface)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
filestream_seek(stream, 0, SEEK_SET);
|
filestream_get_path_cb = vfs_iface->get_path;
|
||||||
filestream_seek(stream, 0, SEEK_END);
|
filestream_open_cb = vfs_iface->open;
|
||||||
|
filestream_close_cb = vfs_iface->close;
|
||||||
stream->size = filestream_tell(stream);
|
filestream_size_cb = vfs_iface->size;
|
||||||
|
filestream_tell_cb = vfs_iface->tell;
|
||||||
filestream_seek(stream, 0, SEEK_SET);
|
filestream_seek_cb = vfs_iface->seek;
|
||||||
|
filestream_read_cb = vfs_iface->read;
|
||||||
|
filestream_write_cb = vfs_iface->write;
|
||||||
|
filestream_flush_cb = vfs_iface->flush;
|
||||||
|
filestream_remove_cb = vfs_iface->remove;
|
||||||
|
filestream_rename_cb = vfs_iface->rename;
|
||||||
}
|
}
|
||||||
|
|
||||||
RFILE *filestream_open(const char *path, unsigned mode, ssize_t len)
|
/* Callback wrappers */
|
||||||
|
bool filestream_exists(const char *path)
|
||||||
{
|
{
|
||||||
int flags = 0;
|
RFILE *dummy = NULL;
|
||||||
int mode_int = 0;
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
const char *mode_str = NULL;
|
|
||||||
#endif
|
|
||||||
RFILE *stream = (RFILE*)calloc(1, sizeof(*stream));
|
|
||||||
|
|
||||||
if (!stream)
|
if (!path || !*path)
|
||||||
return NULL;
|
return false;
|
||||||
|
|
||||||
(void)mode_int;
|
dummy = filestream_open(path,
|
||||||
(void)flags;
|
RETRO_VFS_FILE_ACCESS_READ,
|
||||||
|
RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
|
|
||||||
stream->hints = mode;
|
if (!dummy)
|
||||||
|
return false;
|
||||||
|
|
||||||
#ifdef HAVE_MMAP
|
filestream_close(dummy);
|
||||||
if (stream->hints & RFILE_HINT_MMAP && (stream->hints & 0xff) == RFILE_MODE_READ)
|
return true;
|
||||||
stream->hints |= RFILE_HINT_UNBUFFERED;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
stream->hints &= ~RFILE_HINT_MMAP;
|
|
||||||
|
|
||||||
switch (mode & 0xff)
|
|
||||||
{
|
|
||||||
case RFILE_MODE_READ_TEXT:
|
|
||||||
#if defined(PSP)
|
|
||||||
mode_int = 0666;
|
|
||||||
flags = PSP_O_RDONLY;
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
mode_str = MODE_STR_READ;
|
|
||||||
#endif
|
|
||||||
/* No "else" here */
|
|
||||||
flags = O_RDONLY;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case RFILE_MODE_READ:
|
|
||||||
#if defined(PSP)
|
|
||||||
mode_int = 0666;
|
|
||||||
flags = PSP_O_RDONLY;
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
mode_str = MODE_STR_READ_UNBUF;
|
|
||||||
#endif
|
|
||||||
/* No "else" here */
|
|
||||||
flags = O_RDONLY;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case RFILE_MODE_WRITE:
|
|
||||||
#if defined(PSP)
|
|
||||||
mode_int = 0666;
|
|
||||||
flags = PSP_O_CREAT | PSP_O_WRONLY | PSP_O_TRUNC;
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
mode_str = MODE_STR_WRITE_UNBUF;
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
{
|
|
||||||
flags = O_WRONLY | O_CREAT | O_TRUNC;
|
|
||||||
#ifndef _WIN32
|
|
||||||
flags |= S_IRUSR | S_IWUSR;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case RFILE_MODE_READ_WRITE:
|
|
||||||
#if defined(PSP)
|
|
||||||
mode_int = 0666;
|
|
||||||
flags = PSP_O_RDWR;
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
mode_str = MODE_STR_WRITE_PLUS;
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
{
|
|
||||||
flags = O_RDWR;
|
|
||||||
#ifdef _WIN32
|
|
||||||
flags |= O_BINARY;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(PSP)
|
|
||||||
stream->fd = sceIoOpen(path, flags, mode_int);
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0 && mode_str)
|
|
||||||
{
|
|
||||||
stream->fp = fopen(path, mode_str);
|
|
||||||
if (!stream->fp)
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
/* FIXME: HAVE_BUFFERED_IO is always 1, but if it is ever changed, open() needs to be changed to _wopen() for WIndows. */
|
|
||||||
stream->fd = open(path, flags, mode_int);
|
|
||||||
if (stream->fd == -1)
|
|
||||||
goto error;
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (stream->hints & RFILE_HINT_MMAP)
|
|
||||||
{
|
|
||||||
stream->mappos = 0;
|
|
||||||
stream->mapped = NULL;
|
|
||||||
stream->mapsize = filestream_seek(stream, 0, SEEK_END);
|
|
||||||
|
|
||||||
if (stream->mapsize == (uint64_t)-1)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
filestream_rewind(stream);
|
|
||||||
|
|
||||||
stream->mapped = (uint8_t*)mmap((void*)0,
|
|
||||||
stream->mapsize, PROT_READ, MAP_SHARED, stream->fd, 0);
|
|
||||||
|
|
||||||
if (stream->mapped == MAP_FAILED)
|
|
||||||
stream->hints &= ~RFILE_HINT_MMAP;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PSP)
|
|
||||||
if (stream->fd == -1)
|
|
||||||
goto error;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
|
||||||
const char *ld = (const char*)strrchr(path, '.');
|
|
||||||
stream->ext = strdup(ld ? ld + 1 : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
filestream_set_size(stream);
|
|
||||||
|
|
||||||
return stream;
|
|
||||||
|
|
||||||
error:
|
|
||||||
filestream_close(stream);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *filestream_getline(RFILE *stream)
|
int64_t filestream_get_size(RFILE *stream)
|
||||||
{
|
{
|
||||||
char* newline = (char*)malloc(9);
|
int64_t output;
|
||||||
char* newline_tmp = NULL;
|
|
||||||
size_t cur_size = 8;
|
|
||||||
size_t idx = 0;
|
|
||||||
int in = filestream_getc(stream);
|
|
||||||
|
|
||||||
if (!newline)
|
if (filestream_size_cb != NULL)
|
||||||
|
output = filestream_size_cb(stream->hfile);
|
||||||
|
else
|
||||||
|
output = retro_vfs_file_size_impl((libretro_vfs_implementation_file*)stream->hfile);
|
||||||
|
|
||||||
|
if (output == vfs_error_return_value)
|
||||||
|
stream->error_flag = true;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* filestream_open:
|
||||||
|
* @path : path to file
|
||||||
|
* @mode : file mode to use when opening (read/write)
|
||||||
|
* @hints :
|
||||||
|
*
|
||||||
|
* Opens a file for reading or writing, depending on the requested mode.
|
||||||
|
* Returns a pointer to an RFILE if opened successfully, otherwise NULL.
|
||||||
|
**/
|
||||||
|
RFILE *filestream_open(const char *path, unsigned mode, unsigned hints)
|
||||||
|
{
|
||||||
|
struct retro_vfs_file_handle *fp = NULL;
|
||||||
|
RFILE* output = NULL;
|
||||||
|
|
||||||
|
if (filestream_open_cb != NULL)
|
||||||
|
fp = (struct retro_vfs_file_handle*)
|
||||||
|
filestream_open_cb(path, mode, hints);
|
||||||
|
else
|
||||||
|
fp = (struct retro_vfs_file_handle*)
|
||||||
|
retro_vfs_file_open_impl(path, mode, hints);
|
||||||
|
|
||||||
|
if (!fp)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
while (in != EOF && in != '\n')
|
output = (RFILE*)malloc(sizeof(RFILE));
|
||||||
{
|
output->error_flag = false;
|
||||||
if (idx == cur_size)
|
output->eof_flag = false;
|
||||||
{
|
output->hfile = fp;
|
||||||
cur_size *= 2;
|
return output;
|
||||||
newline_tmp = (char*)realloc(newline, cur_size + 1);
|
|
||||||
|
|
||||||
if (!newline_tmp)
|
|
||||||
{
|
|
||||||
free(newline);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
newline = newline_tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
newline[idx++] = in;
|
|
||||||
in = filestream_getc(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
newline[idx] = '\0';
|
|
||||||
return newline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *filestream_gets(RFILE *stream, char *s, size_t len)
|
char *filestream_gets(RFILE *stream, char *s, size_t len)
|
||||||
{
|
{
|
||||||
|
int c = 0;
|
||||||
|
char *p = s;
|
||||||
if (!stream)
|
if (!stream)
|
||||||
return NULL;
|
return NULL;
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
return fgets(s, (int)len, stream->fp);
|
/* get max bytes or up to a newline */
|
||||||
#elif defined(PSP)
|
|
||||||
if(filestream_read(stream,s,len)==len)
|
for (len--; len > 0; len--)
|
||||||
return s;
|
{
|
||||||
return NULL;
|
if ((c = filestream_getc(stream)) == EOF)
|
||||||
#else
|
break;
|
||||||
return gets(s);
|
*p++ = c;
|
||||||
#endif
|
if (c == '\n')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
if (p == s && c == EOF)
|
||||||
|
return NULL;
|
||||||
|
return (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
int filestream_getc(RFILE *stream)
|
int filestream_getc(RFILE *stream)
|
||||||
{
|
{
|
||||||
char c = 0;
|
char c = 0;
|
||||||
(void)c;
|
|
||||||
if (!stream)
|
if (!stream)
|
||||||
return 0;
|
return 0;
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
if(filestream_read(stream, &c, 1) == 1)
|
||||||
return fgetc(stream->fp);
|
return (int)c;
|
||||||
#elif defined(PSP)
|
return EOF;
|
||||||
if(filestream_read(stream, &c, 1) == 1)
|
|
||||||
return (int)c;
|
|
||||||
return EOF;
|
|
||||||
#else
|
|
||||||
return getc(stream->fd);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t filestream_seek(RFILE *stream, ssize_t offset, int whence)
|
int64_t filestream_seek(RFILE *stream, int64_t offset, int seek_position)
|
||||||
{
|
{
|
||||||
if (!stream)
|
int64_t output;
|
||||||
goto error;
|
|
||||||
|
|
||||||
#if defined(PSP)
|
if (filestream_seek_cb != NULL)
|
||||||
if (sceIoLseek(stream->fd, (SceOff)offset, whence) == -1)
|
output = filestream_seek_cb(stream->hfile, offset, seek_position);
|
||||||
goto error;
|
else
|
||||||
#else
|
output = retro_vfs_file_seek_impl((libretro_vfs_implementation_file*)stream->hfile, offset, seek_position);
|
||||||
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
if (output == vfs_error_return_value)
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
stream->error_flag = true;
|
||||||
return fseek(stream->fp, (long)offset, whence);
|
stream->eof_flag = false;
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_MMAP
|
return output;
|
||||||
/* Need to check stream->mapped because this function is
|
|
||||||
* called in filestream_open() */
|
|
||||||
if (stream->mapped && stream->hints & RFILE_HINT_MMAP)
|
|
||||||
{
|
|
||||||
/* fseek() returns error on under/overflow but allows cursor > EOF for
|
|
||||||
read-only file descriptors. */
|
|
||||||
switch (whence)
|
|
||||||
{
|
|
||||||
case SEEK_SET:
|
|
||||||
if (offset < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
stream->mappos = offset;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SEEK_CUR:
|
|
||||||
if ((offset < 0 && stream->mappos + offset > stream->mappos) ||
|
|
||||||
(offset > 0 && stream->mappos + offset < stream->mappos))
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
stream->mappos += offset;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SEEK_END:
|
|
||||||
if (stream->mapsize + offset < stream->mapsize)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
stream->mappos = stream->mapsize + offset;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return stream->mappos;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (lseek(stream->fd, offset, whence) < 0)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
error:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int filestream_eof(RFILE *stream)
|
int filestream_eof(RFILE *stream)
|
||||||
{
|
{
|
||||||
size_t current_position = filestream_tell(stream);
|
return stream->eof_flag;
|
||||||
size_t end_position = filestream_seek(stream, 0, SEEK_END);
|
|
||||||
|
|
||||||
filestream_seek(stream, current_position, SEEK_SET);
|
|
||||||
|
|
||||||
if (current_position >= end_position)
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t filestream_tell(RFILE *stream)
|
|
||||||
|
int64_t filestream_tell(RFILE *stream)
|
||||||
{
|
{
|
||||||
if (!stream)
|
int64_t output;
|
||||||
goto error;
|
|
||||||
#if defined(PSP)
|
|
||||||
if (sceIoLseek(stream->fd, 0, SEEK_CUR) < 0)
|
|
||||||
goto error;
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
return ftell(stream->fp);
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
/* Need to check stream->mapped because this function
|
|
||||||
* is called in filestream_open() */
|
|
||||||
if (stream->mapped && stream->hints & RFILE_HINT_MMAP)
|
|
||||||
return stream->mappos;
|
|
||||||
#endif
|
|
||||||
if (lseek(stream->fd, 0, SEEK_CUR) < 0)
|
|
||||||
goto error;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
if (filestream_size_cb != NULL)
|
||||||
|
output = filestream_tell_cb(stream->hfile);
|
||||||
|
else
|
||||||
|
output = retro_vfs_file_tell_impl((libretro_vfs_implementation_file*)stream->hfile);
|
||||||
|
|
||||||
error:
|
if (output == vfs_error_return_value)
|
||||||
return -1;
|
stream->error_flag = true;
|
||||||
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void filestream_rewind(RFILE *stream)
|
void filestream_rewind(RFILE *stream)
|
||||||
{
|
{
|
||||||
filestream_seek(stream, 0L, SEEK_SET);
|
if (!stream)
|
||||||
|
return;
|
||||||
|
filestream_seek(stream, 0L, RETRO_VFS_SEEK_POSITION_START);
|
||||||
|
stream->error_flag = false;
|
||||||
|
stream->eof_flag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t filestream_read(RFILE *stream, void *s, size_t len)
|
int64_t filestream_read(RFILE *stream, void *s, int64_t len)
|
||||||
{
|
{
|
||||||
if (!stream || !s)
|
int64_t output;
|
||||||
goto error;
|
|
||||||
#if defined(PSP)
|
|
||||||
return sceIoRead(stream->fd, s, len);
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
return fread(s, 1, len, stream->fp);
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (stream->hints & RFILE_HINT_MMAP)
|
|
||||||
{
|
|
||||||
if (stream->mappos > stream->mapsize)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
if (stream->mappos + len > stream->mapsize)
|
if (filestream_read_cb != NULL)
|
||||||
len = stream->mapsize - stream->mappos;
|
output = filestream_read_cb(stream->hfile, s, len);
|
||||||
|
else
|
||||||
|
output = retro_vfs_file_read_impl(
|
||||||
|
(libretro_vfs_implementation_file*)stream->hfile, s, len);
|
||||||
|
|
||||||
memcpy(s, &stream->mapped[stream->mappos], len);
|
if (output == vfs_error_return_value)
|
||||||
stream->mappos += len;
|
stream->error_flag = true;
|
||||||
|
if (output < len)
|
||||||
|
stream->eof_flag = true;
|
||||||
|
|
||||||
return len;
|
return output;
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return read(stream->fd, s, len);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
error:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int filestream_flush(RFILE *stream)
|
int filestream_flush(RFILE *stream)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
int output;
|
||||||
return fflush(stream->fp);
|
|
||||||
#else
|
if (filestream_flush_cb != NULL)
|
||||||
return 0;
|
output = filestream_flush_cb(stream->hfile);
|
||||||
#endif
|
else
|
||||||
|
output = retro_vfs_file_flush_impl((libretro_vfs_implementation_file*)stream->hfile);
|
||||||
|
|
||||||
|
if (output == vfs_error_return_value)
|
||||||
|
stream->error_flag = true;
|
||||||
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t filestream_write(RFILE *stream, const void *s, size_t len)
|
int filestream_delete(const char *path)
|
||||||
{
|
{
|
||||||
if (!stream)
|
if (filestream_remove_cb != NULL)
|
||||||
goto error;
|
return filestream_remove_cb(path);
|
||||||
#if defined(PSP)
|
|
||||||
return sceIoWrite(stream->fd, s, len);
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
return fwrite(s, 1, len, stream->fp);
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (stream->hints & RFILE_HINT_MMAP)
|
|
||||||
goto error;
|
|
||||||
#endif
|
|
||||||
return write(stream->fd, s, len);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
error:
|
return retro_vfs_file_remove_impl(path);
|
||||||
return -1;
|
}
|
||||||
|
|
||||||
|
int filestream_rename(const char *old_path, const char *new_path)
|
||||||
|
{
|
||||||
|
if (filestream_rename_cb != NULL)
|
||||||
|
return filestream_rename_cb(old_path, new_path);
|
||||||
|
|
||||||
|
return retro_vfs_file_rename_impl(old_path, new_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *filestream_get_path(RFILE *stream)
|
||||||
|
{
|
||||||
|
if (filestream_get_path_cb != NULL)
|
||||||
|
return filestream_get_path_cb(stream->hfile);
|
||||||
|
|
||||||
|
return retro_vfs_file_get_path_impl((libretro_vfs_implementation_file*)stream->hfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t filestream_write(RFILE *stream, const void *s, int64_t len)
|
||||||
|
{
|
||||||
|
int64_t output;
|
||||||
|
|
||||||
|
if (filestream_write_cb != NULL)
|
||||||
|
output = filestream_write_cb(stream->hfile, s, len);
|
||||||
|
else
|
||||||
|
output = retro_vfs_file_write_impl((libretro_vfs_implementation_file*)stream->hfile, s, len);
|
||||||
|
|
||||||
|
if (output == vfs_error_return_value)
|
||||||
|
stream->error_flag = true;
|
||||||
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
int filestream_putc(RFILE *stream, int c)
|
int filestream_putc(RFILE *stream, int c)
|
||||||
{
|
{
|
||||||
|
char c_char = (char)c;
|
||||||
if (!stream)
|
if (!stream)
|
||||||
return EOF;
|
return EOF;
|
||||||
|
return filestream_write(stream, &c_char, 1)==1 ? c : EOF;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
int filestream_vprintf(RFILE *stream, const char* format, va_list args)
|
||||||
return fputc(c, stream->fp);
|
{
|
||||||
#else
|
static char buffer[8 * 1024];
|
||||||
/* unimplemented */
|
int64_t num_chars = vsprintf(buffer, format, args);
|
||||||
return EOF;
|
|
||||||
#endif
|
if (num_chars < 0)
|
||||||
|
return -1;
|
||||||
|
else if (num_chars == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (int)filestream_write(stream, buffer, num_chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
int filestream_printf(RFILE *stream, const char* format, ...)
|
||||||
|
{
|
||||||
|
va_list vl;
|
||||||
|
int result;
|
||||||
|
va_start(vl, format);
|
||||||
|
result = filestream_vprintf(stream, format, vl);
|
||||||
|
va_end(vl);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int filestream_error(RFILE *stream)
|
||||||
|
{
|
||||||
|
if (stream && stream->error_flag)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int filestream_close(RFILE *stream)
|
int filestream_close(RFILE *stream)
|
||||||
{
|
{
|
||||||
if (!stream)
|
int output;
|
||||||
goto error;
|
struct retro_vfs_file_handle* fp = stream->hfile;
|
||||||
|
|
||||||
if (stream->ext)
|
if (filestream_close_cb != NULL)
|
||||||
free(stream->ext);
|
output = filestream_close_cb(fp);
|
||||||
|
|
||||||
#if defined(PSP)
|
|
||||||
if (stream->fd > 0)
|
|
||||||
sceIoClose(stream->fd);
|
|
||||||
#else
|
|
||||||
#if defined(HAVE_BUFFERED_IO)
|
|
||||||
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
|
||||||
{
|
|
||||||
if (stream->fp)
|
|
||||||
fclose(stream->fp);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
#endif
|
output = retro_vfs_file_close_impl((libretro_vfs_implementation_file*)fp);
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (stream->hints & RFILE_HINT_MMAP)
|
|
||||||
munmap(stream->mapped, stream->mapsize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (stream->fd > 0)
|
if (output == 0)
|
||||||
close(stream->fd);
|
free(stream);
|
||||||
#endif
|
|
||||||
free(stream);
|
|
||||||
|
|
||||||
return 0;
|
return output;
|
||||||
|
|
||||||
error:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -575,12 +373,14 @@ error:
|
|||||||
*
|
*
|
||||||
* Returns: number of items read, -1 on error.
|
* Returns: number of items read, -1 on error.
|
||||||
*/
|
*/
|
||||||
int filestream_read_file(const char *path, void **buf, ssize_t *len)
|
int64_t filestream_read_file(const char *path, void **buf, int64_t *len)
|
||||||
{
|
{
|
||||||
ssize_t ret = 0;
|
int64_t ret = 0;
|
||||||
ssize_t content_buf_size = 0;
|
int64_t content_buf_size = 0;
|
||||||
void *content_buf = NULL;
|
void *content_buf = NULL;
|
||||||
RFILE *file = filestream_open(path, RFILE_MODE_READ, -1);
|
RFILE *file = filestream_open(path,
|
||||||
|
RETRO_VFS_FILE_ACCESS_READ,
|
||||||
|
RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
|
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
@ -588,21 +388,19 @@ int filestream_read_file(const char *path, void **buf, ssize_t *len)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filestream_seek(file, 0, SEEK_END) != 0)
|
content_buf_size = filestream_get_size(file);
|
||||||
goto error;
|
|
||||||
|
|
||||||
content_buf_size = filestream_tell(file);
|
|
||||||
if (content_buf_size < 0)
|
if (content_buf_size < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
filestream_rewind(file);
|
content_buf = malloc((size_t)(content_buf_size + 1));
|
||||||
|
|
||||||
content_buf = malloc(content_buf_size + 1);
|
|
||||||
|
|
||||||
if (!content_buf)
|
if (!content_buf)
|
||||||
goto error;
|
goto error;
|
||||||
|
if ((int64_t)(uint64_t)(content_buf_size + 1) != (content_buf_size + 1))
|
||||||
|
goto error;
|
||||||
|
|
||||||
ret = filestream_read(file, content_buf, content_buf_size);
|
ret = filestream_read(file, content_buf, (int64_t)content_buf_size);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to read %s: %s\n", path, strerror(errno));
|
fprintf(stderr, "Failed to read %s: %s\n", path, strerror(errno));
|
||||||
@ -643,10 +441,12 @@ error:
|
|||||||
*
|
*
|
||||||
* Returns: true (1) on success, false (0) otherwise.
|
* Returns: true (1) on success, false (0) otherwise.
|
||||||
*/
|
*/
|
||||||
bool filestream_write_file(const char *path, const void *data, ssize_t size)
|
bool filestream_write_file(const char *path, const void *data, int64_t size)
|
||||||
{
|
{
|
||||||
ssize_t ret = 0;
|
int64_t ret = 0;
|
||||||
RFILE *file = filestream_open(path, RFILE_MODE_WRITE, -1);
|
RFILE *file = filestream_open(path,
|
||||||
|
RETRO_VFS_FILE_ACCESS_WRITE,
|
||||||
|
RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
if (!file)
|
if (!file)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -658,3 +458,44 @@ bool filestream_write_file(const char *path, const void *data, ssize_t size)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *filestream_getline(RFILE *stream)
|
||||||
|
{
|
||||||
|
char* newline_tmp = NULL;
|
||||||
|
size_t cur_size = 8;
|
||||||
|
size_t idx = 0;
|
||||||
|
int in = 0;
|
||||||
|
char* newline = (char*)malloc(9);
|
||||||
|
|
||||||
|
if (!stream || !newline)
|
||||||
|
{
|
||||||
|
if (newline)
|
||||||
|
free(newline);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
in = filestream_getc(stream);
|
||||||
|
|
||||||
|
while (in != EOF && in != '\n')
|
||||||
|
{
|
||||||
|
if (idx == cur_size)
|
||||||
|
{
|
||||||
|
cur_size *= 2;
|
||||||
|
newline_tmp = (char*)realloc(newline, cur_size + 1);
|
||||||
|
|
||||||
|
if (!newline_tmp)
|
||||||
|
{
|
||||||
|
free(newline);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
newline = newline_tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
newline[idx++] = in;
|
||||||
|
in = filestream_getc(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
newline[idx] = '\0';
|
||||||
|
return newline;
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------------------
|
||||||
* The following license statement only applies to this file (file_stream_transforms.c).
|
* The following license statement only applies to this file (file_stream_transforms.c).
|
||||||
@ -20,22 +20,51 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <streams/file_stream.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
RFILE* rfopen(const char *path, char *mode)
|
#include <libretro.h>
|
||||||
|
#include <streams/file_stream.h>
|
||||||
|
|
||||||
|
RFILE* rfopen(const char *path, const char *mode)
|
||||||
{
|
{
|
||||||
unsigned int retro_mode = RFILE_MODE_READ_TEXT;
|
RFILE *output = NULL;
|
||||||
|
unsigned int retro_mode = RETRO_VFS_FILE_ACCESS_READ;
|
||||||
|
bool position_to_end = false;
|
||||||
|
|
||||||
if (strstr(mode, "r"))
|
if (strstr(mode, "r"))
|
||||||
if (strstr(mode, "b"))
|
{
|
||||||
retro_mode = RFILE_MODE_READ;
|
retro_mode = RETRO_VFS_FILE_ACCESS_READ;
|
||||||
|
if (strstr(mode, "+"))
|
||||||
|
{
|
||||||
|
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE |
|
||||||
|
RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strstr(mode, "w"))
|
||||||
|
{
|
||||||
|
retro_mode = RETRO_VFS_FILE_ACCESS_WRITE;
|
||||||
|
if (strstr(mode, "+"))
|
||||||
|
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE;
|
||||||
|
}
|
||||||
|
else if (strstr(mode, "a"))
|
||||||
|
{
|
||||||
|
retro_mode = RETRO_VFS_FILE_ACCESS_WRITE |
|
||||||
|
RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
|
||||||
|
position_to_end = true;
|
||||||
|
if (strstr(mode, "+"))
|
||||||
|
{
|
||||||
|
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE |
|
||||||
|
RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (strstr(mode, "w"))
|
output = filestream_open(path, retro_mode,
|
||||||
retro_mode = RFILE_MODE_WRITE;
|
RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
if (strstr(mode, "+"))
|
if (output && position_to_end)
|
||||||
retro_mode = RFILE_MODE_READ_WRITE;
|
filestream_seek(output, 0, RETRO_VFS_SEEK_POSITION_END);
|
||||||
|
|
||||||
return filestream_open(path, retro_mode, -1);
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rfclose(RFILE* stream)
|
int rfclose(RFILE* stream)
|
||||||
@ -43,20 +72,34 @@ int rfclose(RFILE* stream)
|
|||||||
return filestream_close(stream);
|
return filestream_close(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
long rftell(RFILE* stream)
|
int64_t rftell(RFILE* stream)
|
||||||
{
|
{
|
||||||
return filestream_tell(stream);
|
return filestream_tell(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rfseek(RFILE* stream, long offset, int origin)
|
int64_t rfseek(RFILE* stream, int64_t offset, int origin)
|
||||||
{
|
{
|
||||||
return filestream_seek(stream, offset, origin);
|
int seek_position = -1;
|
||||||
|
switch (origin)
|
||||||
|
{
|
||||||
|
case SEEK_SET:
|
||||||
|
seek_position = RETRO_VFS_SEEK_POSITION_START;
|
||||||
|
break;
|
||||||
|
case SEEK_CUR:
|
||||||
|
seek_position = RETRO_VFS_SEEK_POSITION_CURRENT;
|
||||||
|
break;
|
||||||
|
case SEEK_END:
|
||||||
|
seek_position = RETRO_VFS_SEEK_POSITION_END;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return filestream_seek(stream, offset, seek_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t rfread(void* buffer,
|
int64_t rfread(void* buffer,
|
||||||
size_t elementSize, size_t elementCount, RFILE* stream)
|
size_t elem_size, size_t elem_count, RFILE* stream)
|
||||||
{
|
{
|
||||||
return filestream_read(stream, buffer, elementSize*elementCount);
|
return filestream_read(stream, buffer, elem_size * elem_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *rfgets(char *buffer, int maxCount, RFILE* stream)
|
char *rfgets(char *buffer, int maxCount, RFILE* stream)
|
||||||
@ -64,8 +107,38 @@ char *rfgets(char *buffer, int maxCount, RFILE* stream)
|
|||||||
return filestream_gets(stream, buffer, maxCount);
|
return filestream_gets(stream, buffer, maxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t rfwrite(void const* buffer,
|
int rfgetc(RFILE* stream)
|
||||||
size_t elementSize, size_t elementCount, RFILE* stream)
|
|
||||||
{
|
{
|
||||||
return filestream_write(stream, buffer, elementSize*elementCount);
|
return filestream_getc(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t rfwrite(void const* buffer,
|
||||||
|
size_t elem_size, size_t elem_count, RFILE* stream)
|
||||||
|
{
|
||||||
|
return filestream_write(stream, buffer, elem_size * elem_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rfputc(int character, RFILE * stream)
|
||||||
|
{
|
||||||
|
return filestream_putc(stream, character);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rfprintf(RFILE * stream, const char * format, ...)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
va_list vl;
|
||||||
|
va_start(vl, format);
|
||||||
|
result = filestream_vprintf(stream, format, vl);
|
||||||
|
va_end(vl);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rferror(RFILE* stream)
|
||||||
|
{
|
||||||
|
return filestream_error(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rfeof(RFILE* stream)
|
||||||
|
{
|
||||||
|
return filestream_eof(stream);
|
||||||
}
|
}
|
||||||
|
591
libretro/libretro-common/vfs/vfs_implementation.c
Normal file
591
libretro/libretro-common/vfs/vfs_implementation.c
Normal file
@ -0,0 +1,591 @@
|
|||||||
|
/* Copyright (C) 2010-2018 The RetroArch team
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
* The following license statement only applies to this file (vfs_implementation.c).
|
||||||
|
* ---------------------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge,
|
||||||
|
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# define setmode _setmode
|
||||||
|
# endif
|
||||||
|
# ifdef _XBOX
|
||||||
|
# include <xtl.h>
|
||||||
|
# define INVALID_FILE_ATTRIBUTES -1
|
||||||
|
# else
|
||||||
|
# include <io.h>
|
||||||
|
# include <fcntl.h>
|
||||||
|
# include <direct.h>
|
||||||
|
# include <windows.h>
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# if defined(PSP)
|
||||||
|
# include <pspiofilemgr.h>
|
||||||
|
# endif
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/stat.h>
|
||||||
|
# if !defined(VITA)
|
||||||
|
# include <dirent.h>
|
||||||
|
# endif
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CELLOS_LV2__
|
||||||
|
#include <cell/cell_fs.h>
|
||||||
|
#define O_RDONLY CELL_FS_O_RDONLY
|
||||||
|
#define O_WRONLY CELL_FS_O_WRONLY
|
||||||
|
#define O_CREAT CELL_FS_O_CREAT
|
||||||
|
#define O_TRUNC CELL_FS_O_TRUNC
|
||||||
|
#define O_RDWR CELL_FS_O_RDWR
|
||||||
|
#else
|
||||||
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Assume W-functions do not work below Win2K and Xbox platforms */
|
||||||
|
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX)
|
||||||
|
|
||||||
|
#ifndef LEGACY_WIN32
|
||||||
|
#define LEGACY_WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
|
#if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER >= 1400)
|
||||||
|
#define ATLEAST_VC2005
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef RARCH_INTERNAL
|
||||||
|
#ifndef VFS_FRONTEND
|
||||||
|
#define VFS_FRONTEND
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <vfs/vfs_implementation.h>
|
||||||
|
#include <libretro.h>
|
||||||
|
#include <memmap.h>
|
||||||
|
#include <encodings/utf.h>
|
||||||
|
#include <compat/fopen_utf8.h>
|
||||||
|
|
||||||
|
#define RFILE_HINT_UNBUFFERED (1 << 8)
|
||||||
|
|
||||||
|
#ifdef VFS_FRONTEND
|
||||||
|
struct retro_vfs_file_handle
|
||||||
|
#else
|
||||||
|
struct libretro_vfs_implementation_file
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
unsigned hints;
|
||||||
|
int64_t size;
|
||||||
|
char *buf;
|
||||||
|
FILE *fp;
|
||||||
|
char* orig_path;
|
||||||
|
#if defined(HAVE_MMAP)
|
||||||
|
uint64_t mappos;
|
||||||
|
uint64_t mapsize;
|
||||||
|
uint8_t *mapped;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_seek_internal(libretro_vfs_implementation_file *stream, int64_t offset, int whence)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
/* VC2005 and up have a special 64-bit fseek */
|
||||||
|
#ifdef ATLEAST_VC2005
|
||||||
|
return _fseeki64(stream->fp, offset, whence);
|
||||||
|
#elif defined(__CELLOS_LV2__) || defined(_MSC_VER) && _MSC_VER <= 1310
|
||||||
|
return fseek(stream->fp, (long)offset, whence);
|
||||||
|
#else
|
||||||
|
return fseeko(stream->fp, (off_t)offset, whence);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
/* Need to check stream->mapped because this function is
|
||||||
|
* called in filestream_open() */
|
||||||
|
if (stream->mapped && stream->hints &
|
||||||
|
RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
{
|
||||||
|
/* fseek() returns error on under/overflow but
|
||||||
|
* allows cursor > EOF for
|
||||||
|
read-only file descriptors. */
|
||||||
|
switch (whence)
|
||||||
|
{
|
||||||
|
case SEEK_SET:
|
||||||
|
if (offset < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
stream->mappos = offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEEK_CUR:
|
||||||
|
if ((offset < 0 && stream->mappos + offset > stream->mappos) ||
|
||||||
|
(offset > 0 && stream->mappos + offset < stream->mappos))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
stream->mappos += offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEEK_END:
|
||||||
|
if (stream->mapsize + offset < stream->mapsize)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
stream->mappos = stream->mapsize + offset;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return stream->mappos;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (lseek(stream->fd, offset, whence) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retro_vfs_file_open_impl:
|
||||||
|
* @path : path to file
|
||||||
|
* @mode : file mode to use when opening (read/write)
|
||||||
|
* @hints :
|
||||||
|
*
|
||||||
|
* Opens a file for reading or writing, depending on the requested mode.
|
||||||
|
* Returns a pointer to an RFILE if opened successfully, otherwise NULL.
|
||||||
|
**/
|
||||||
|
|
||||||
|
libretro_vfs_implementation_file *retro_vfs_file_open_impl(const char *path, unsigned mode, unsigned hints)
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
const char *mode_str = NULL;
|
||||||
|
libretro_vfs_implementation_file *stream = (libretro_vfs_implementation_file*)calloc(1, sizeof(*stream));
|
||||||
|
|
||||||
|
#ifdef VFS_FRONTEND
|
||||||
|
const char *dumb_prefix = "vfsonly://";
|
||||||
|
|
||||||
|
if (!memcmp(path, dumb_prefix, strlen(dumb_prefix)))
|
||||||
|
path += strlen(dumb_prefix);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!stream)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
(void)flags;
|
||||||
|
|
||||||
|
stream->hints = hints;
|
||||||
|
stream->orig_path = strdup(path);
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS && mode == RETRO_VFS_FILE_ACCESS_READ)
|
||||||
|
stream->hints |= RFILE_HINT_UNBUFFERED;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
stream->hints &= ~RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS;
|
||||||
|
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case RETRO_VFS_FILE_ACCESS_READ:
|
||||||
|
mode_str = "rb";
|
||||||
|
|
||||||
|
flags = O_RDONLY;
|
||||||
|
#ifdef _WIN32
|
||||||
|
flags |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RETRO_VFS_FILE_ACCESS_WRITE:
|
||||||
|
mode_str = "wb";
|
||||||
|
|
||||||
|
flags = O_WRONLY | O_CREAT | O_TRUNC;
|
||||||
|
#ifndef _WIN32
|
||||||
|
flags |= S_IRUSR | S_IWUSR;
|
||||||
|
#else
|
||||||
|
flags |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RETRO_VFS_FILE_ACCESS_READ_WRITE:
|
||||||
|
mode_str = "w+b";
|
||||||
|
|
||||||
|
flags = O_RDWR | O_CREAT | O_TRUNC;
|
||||||
|
#ifndef _WIN32
|
||||||
|
flags |= S_IRUSR | S_IWUSR;
|
||||||
|
#else
|
||||||
|
flags |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RETRO_VFS_FILE_ACCESS_WRITE | RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING:
|
||||||
|
case RETRO_VFS_FILE_ACCESS_READ_WRITE | RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING:
|
||||||
|
mode_str = "r+b";
|
||||||
|
|
||||||
|
flags = O_RDWR;
|
||||||
|
#ifndef _WIN32
|
||||||
|
flags |= S_IRUSR | S_IWUSR;
|
||||||
|
#else
|
||||||
|
flags |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
{
|
||||||
|
FILE *fp = (FILE*)fopen_utf8(path, mode_str);
|
||||||
|
|
||||||
|
if (!fp)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* Regarding setvbuf:
|
||||||
|
*
|
||||||
|
* https://www.freebsd.org/cgi/man.cgi?query=setvbuf&apropos=0&sektion=0&manpath=FreeBSD+11.1-RELEASE&arch=default&format=html
|
||||||
|
*
|
||||||
|
* If the size argument is not zero but buf is NULL, a buffer of the given size will be allocated immediately, and
|
||||||
|
* released on close. This is an extension to ANSI C.
|
||||||
|
*
|
||||||
|
* Since C89 does not support specifying a null buffer with a non-zero size, we create and track our own buffer for it.
|
||||||
|
*/
|
||||||
|
/* TODO: this is only useful for a few platforms, find which and add ifdef */
|
||||||
|
stream->fp = fp;
|
||||||
|
stream->buf = (char*)calloc(1, 0x4000);
|
||||||
|
setvbuf(stream->fp, stream->buf, _IOFBF, 0x4000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
|
#if defined(LEGACY_WIN32)
|
||||||
|
char *path_local = utf8_to_local_string_alloc(path);
|
||||||
|
stream->fd = open(path_local, flags, 0);
|
||||||
|
if (path_local)
|
||||||
|
free(path_local);
|
||||||
|
#else
|
||||||
|
wchar_t * path_wide = utf8_to_utf16_string_alloc(path);
|
||||||
|
stream->fd = _wopen(path_wide, flags, 0);
|
||||||
|
if (path_wide)
|
||||||
|
free(path_wide);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
stream->fd = open(path, flags, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (stream->fd == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
{
|
||||||
|
stream->mappos = 0;
|
||||||
|
stream->mapped = NULL;
|
||||||
|
stream->mapsize = retro_vfs_file_seek_internal(stream, 0, SEEK_END);
|
||||||
|
|
||||||
|
if (stream->mapsize == (uint64_t)-1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
retro_vfs_file_seek_internal(stream, 0, SEEK_SET);
|
||||||
|
|
||||||
|
stream->mapped = (uint8_t*)mmap((void*)0,
|
||||||
|
stream->mapsize, PROT_READ, MAP_SHARED, stream->fd, 0);
|
||||||
|
|
||||||
|
if (stream->mapped == MAP_FAILED)
|
||||||
|
stream->hints &= ~RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
retro_vfs_file_seek_internal(stream, 0, SEEK_SET);
|
||||||
|
retro_vfs_file_seek_internal(stream, 0, SEEK_END);
|
||||||
|
|
||||||
|
stream->size = retro_vfs_file_tell_impl(stream);
|
||||||
|
|
||||||
|
retro_vfs_file_seek_internal(stream, 0, SEEK_SET);
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
|
||||||
|
error:
|
||||||
|
retro_vfs_file_close_impl(stream);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retro_vfs_file_close_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
{
|
||||||
|
if (stream->fp)
|
||||||
|
fclose(stream->fp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
munmap(stream->mapped, stream->mapsize);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stream->fd > 0)
|
||||||
|
close(stream->fd);
|
||||||
|
if (stream->buf)
|
||||||
|
free(stream->buf);
|
||||||
|
if (stream->orig_path)
|
||||||
|
free(stream->orig_path);
|
||||||
|
free(stream);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retro_vfs_file_error_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
return ferror(stream->fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_size_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
return 0;
|
||||||
|
return stream->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_tell_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
/* VC2005 and up have a special 64-bit ftell */
|
||||||
|
#ifdef ATLEAST_VC2005
|
||||||
|
return _ftelli64(stream->fp);
|
||||||
|
#else
|
||||||
|
return ftell(stream->fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
/* Need to check stream->mapped because this function
|
||||||
|
* is called in filestream_open() */
|
||||||
|
if (stream->mapped && stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
return stream->mappos;
|
||||||
|
#endif
|
||||||
|
if (lseek(stream->fd, 0, SEEK_CUR) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_seek_impl(libretro_vfs_implementation_file *stream, int64_t offset, int seek_position)
|
||||||
|
{
|
||||||
|
int whence = -1;
|
||||||
|
switch (seek_position)
|
||||||
|
{
|
||||||
|
case RETRO_VFS_SEEK_POSITION_START:
|
||||||
|
whence = SEEK_SET;
|
||||||
|
break;
|
||||||
|
case RETRO_VFS_SEEK_POSITION_CURRENT:
|
||||||
|
whence = SEEK_CUR;
|
||||||
|
break;
|
||||||
|
case RETRO_VFS_SEEK_POSITION_END:
|
||||||
|
whence = SEEK_END;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retro_vfs_file_seek_internal(stream, offset, whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_read_impl(libretro_vfs_implementation_file *stream, void *s, uint64_t len)
|
||||||
|
{
|
||||||
|
if (!stream || !s)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
return fread(s, 1, (size_t)len, stream->fp);
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
{
|
||||||
|
if (stream->mappos > stream->mapsize)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (stream->mappos + len > stream->mapsize)
|
||||||
|
len = stream->mapsize - stream->mappos;
|
||||||
|
|
||||||
|
memcpy(s, &stream->mapped[stream->mappos], len);
|
||||||
|
stream->mappos += len;
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return read(stream->fd, s, (size_t)len);
|
||||||
|
|
||||||
|
error:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t retro_vfs_file_write_impl(libretro_vfs_implementation_file *stream, const void *s, uint64_t len)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
|
||||||
|
return fwrite(s, 1, (size_t)len, stream->fp);
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
|
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS)
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
|
return write(stream->fd, s, (size_t)len);
|
||||||
|
|
||||||
|
error:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retro_vfs_file_flush_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
if (!stream)
|
||||||
|
return -1;
|
||||||
|
return fflush(stream->fp)==0 ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retro_vfs_file_remove_impl(const char *path)
|
||||||
|
{
|
||||||
|
char *path_local = NULL;
|
||||||
|
wchar_t *path_wide = NULL;
|
||||||
|
|
||||||
|
if (!path || !*path)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
(void)path_local;
|
||||||
|
(void)path_wide;
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
|
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500
|
||||||
|
path_local = utf8_to_local_string_alloc(path);
|
||||||
|
|
||||||
|
if (path_local)
|
||||||
|
{
|
||||||
|
int ret = remove(path_local);
|
||||||
|
free(path_local);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
path_wide = utf8_to_utf16_string_alloc(path);
|
||||||
|
|
||||||
|
if (path_wide)
|
||||||
|
{
|
||||||
|
int ret = _wremove(path_wide);
|
||||||
|
free(path_wide);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
if (remove(path) == 0)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int retro_vfs_file_rename_impl(const char *old_path, const char *new_path)
|
||||||
|
{
|
||||||
|
char *old_path_local = NULL;
|
||||||
|
char *new_path_local = NULL;
|
||||||
|
wchar_t *old_path_wide = NULL;
|
||||||
|
wchar_t *new_path_wide = NULL;
|
||||||
|
|
||||||
|
if (!old_path || !*old_path || !new_path || !*new_path)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
(void)old_path_local;
|
||||||
|
(void)new_path_local;
|
||||||
|
(void)old_path_wide;
|
||||||
|
(void)new_path_wide;
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
|
#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500
|
||||||
|
old_path_local = utf8_to_local_string_alloc(old_path);
|
||||||
|
new_path_local = utf8_to_local_string_alloc(new_path);
|
||||||
|
|
||||||
|
if (old_path_local)
|
||||||
|
{
|
||||||
|
if (new_path_local)
|
||||||
|
{
|
||||||
|
int ret = rename(old_path_local, new_path_local);
|
||||||
|
free(old_path_local);
|
||||||
|
free(new_path_local);
|
||||||
|
return ret==0 ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(old_path_local);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_path_local)
|
||||||
|
free(new_path_local);
|
||||||
|
#else
|
||||||
|
old_path_wide = utf8_to_utf16_string_alloc(old_path);
|
||||||
|
new_path_wide = utf8_to_utf16_string_alloc(new_path);
|
||||||
|
|
||||||
|
if (old_path_wide)
|
||||||
|
{
|
||||||
|
if (new_path_wide)
|
||||||
|
{
|
||||||
|
int ret = _wrename(old_path_wide, new_path_wide);
|
||||||
|
free(old_path_wide);
|
||||||
|
free(new_path_wide);
|
||||||
|
return ret==0 ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(old_path_wide);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_path_wide)
|
||||||
|
free(new_path_wide);
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
#else
|
||||||
|
return rename(old_path, new_path)==0 ? 0 : -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *retro_vfs_file_get_path_impl(libretro_vfs_implementation_file *stream)
|
||||||
|
{
|
||||||
|
/* should never happen, do something noisy so caller can be fixed */
|
||||||
|
if (!stream)
|
||||||
|
abort();
|
||||||
|
return stream->orig_path;
|
||||||
|
}
|
@ -70,11 +70,12 @@
|
|||||||
#define RETRO_DEVICE_JUSTIFIERS RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_LIGHTGUN, 2)
|
#define RETRO_DEVICE_JUSTIFIERS RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_LIGHTGUN, 2)
|
||||||
#define RETRO_DEVICE_GRAPHIC_BOARD RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_POINTER, 0)
|
#define RETRO_DEVICE_GRAPHIC_BOARD RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_POINTER, 0)
|
||||||
|
|
||||||
|
#include <libretro.h>
|
||||||
|
#include <streams/file_stream.h>
|
||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "libretro.h"
|
|
||||||
#include "md_ntsc.h"
|
#include "md_ntsc.h"
|
||||||
#include "sms_ntsc.h"
|
#include "sms_ntsc.h"
|
||||||
#include <streams/file_stream.h>
|
|
||||||
|
|
||||||
#define STATIC_ASSERT(name, test) typedef struct { int assert_[(test)?1:-1]; } assert_ ## name ## _
|
#define STATIC_ASSERT(name, test) typedef struct { int assert_[(test)?1:-1]; } assert_ ## name ## _
|
||||||
#define M68K_MAX_CYCLES 1107
|
#define M68K_MAX_CYCLES 1107
|
||||||
@ -201,10 +202,11 @@ void error(char * fmt, ...)
|
|||||||
|
|
||||||
int load_archive(char *filename, unsigned char *buffer, int maxsize, char *extension)
|
int load_archive(char *filename, unsigned char *buffer, int maxsize, char *extension)
|
||||||
{
|
{
|
||||||
int size, left;
|
int64_t left = 0;
|
||||||
|
int64_t size = 0;
|
||||||
|
|
||||||
/* Open file */
|
/* Open file */
|
||||||
RFILE *fd = filestream_open(filename, RFILE_MODE_READ, -1);
|
RFILE *fd = filestream_open(filename, RETRO_VFS_FILE_ACCESS_READ, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
|
|
||||||
if (!fd)
|
if (!fd)
|
||||||
{
|
{
|
||||||
@ -240,9 +242,7 @@ int load_archive(char *filename, unsigned char *buffer, int maxsize, char *exten
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (size > maxsize)
|
else if (size > maxsize)
|
||||||
{
|
|
||||||
size = maxsize;
|
size = maxsize;
|
||||||
}
|
|
||||||
|
|
||||||
if (log_cb)
|
if (log_cb)
|
||||||
log_cb(RETRO_LOG_INFO, "INFORMATION - Loading %d bytes ...\n", size);
|
log_cb(RETRO_LOG_INFO, "INFORMATION - Loading %d bytes ...\n", size);
|
||||||
@ -509,9 +509,28 @@ void osd_input_update(void)
|
|||||||
|
|
||||||
static void draw_cursor(int16_t x, int16_t y, uint16_t color)
|
static void draw_cursor(int16_t x, int16_t y, uint16_t color)
|
||||||
{
|
{
|
||||||
uint16_t *ptr = (uint16_t *)bitmap.data + ((bitmap.viewport.y + y) * bitmap.width) + x + bitmap.viewport.x;
|
int i;
|
||||||
ptr[-3*bitmap.width] = ptr[-bitmap.width] = ptr[bitmap.width] = ptr[3*bitmap.width] = ptr[-3] = ptr[-1] = ptr[1] = ptr[3] = color;
|
|
||||||
ptr[-2*bitmap.width] = ptr[2*bitmap.width] = ptr[-2] = ptr[2] = ptr[0] = 0xffff;
|
/* crosshair center position */
|
||||||
|
uint16_t *ptr = (uint16_t *)bitmap.data + ((bitmap.viewport.y + y) * bitmap.width) + x + bitmap.viewport.x;
|
||||||
|
|
||||||
|
/* default crosshair dimension */
|
||||||
|
int x_start = x - 3;
|
||||||
|
int x_end = x + 3;
|
||||||
|
int y_start = y - 3;
|
||||||
|
int y_end = y + 3;
|
||||||
|
|
||||||
|
/* framebuffer limits */
|
||||||
|
if (x_start < -bitmap.viewport.x) x_start = -bitmap.viewport.x;
|
||||||
|
if (x_end >= (bitmap.viewport.w + bitmap.viewport.x)) x_end = bitmap.viewport.w + bitmap.viewport.x - 1;
|
||||||
|
if (y_start < -bitmap.viewport.y) y_start = -bitmap.viewport.y;
|
||||||
|
if (y_end >= (bitmap.viewport.h + bitmap.viewport.y)) y_end = bitmap.viewport.h + bitmap.viewport.y - 1;
|
||||||
|
|
||||||
|
/* draw crosshair */
|
||||||
|
for (i = (x_start - x); i <= (x_end - x); i++)
|
||||||
|
ptr[i] = (i & 1) ? color : 0xffff;
|
||||||
|
for (i = (y_start - y); i <= (y_end - y); i++)
|
||||||
|
ptr[i * bitmap.width] = (i & 1) ? color : 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_bitmap(void)
|
static void init_bitmap(void)
|
||||||
@ -586,13 +605,13 @@ static void bram_load(void)
|
|||||||
switch (region_code)
|
switch (region_code)
|
||||||
{
|
{
|
||||||
case REGION_JAPAN_NTSC:
|
case REGION_JAPAN_NTSC:
|
||||||
fp = filestream_open(CD_BRAM_JP, RFILE_MODE_READ, -1);
|
fp = filestream_open(CD_BRAM_JP, RETRO_VFS_FILE_ACCESS_READ, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
case REGION_EUROPE:
|
case REGION_EUROPE:
|
||||||
fp = filestream_open(CD_BRAM_EU, RFILE_MODE_READ, -1);
|
fp = filestream_open(CD_BRAM_EU, RETRO_VFS_FILE_ACCESS_READ, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
case REGION_USA:
|
case REGION_USA:
|
||||||
fp = filestream_open(CD_BRAM_US, RFILE_MODE_READ, -1);
|
fp = filestream_open(CD_BRAM_US, RETRO_VFS_FILE_ACCESS_READ, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -632,7 +651,7 @@ static void bram_load(void)
|
|||||||
/* automatically load cartridge backup RAM (if enabled) */
|
/* automatically load cartridge backup RAM (if enabled) */
|
||||||
if (scd.cartridge.id)
|
if (scd.cartridge.id)
|
||||||
{
|
{
|
||||||
fp = filestream_open(CART_BRAM, RFILE_MODE_READ, -1);
|
fp = filestream_open(CART_BRAM, RETRO_VFS_FILE_ACCESS_READ, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
int filesize = scd.cartridge.mask + 1;
|
int filesize = scd.cartridge.mask + 1;
|
||||||
@ -688,13 +707,13 @@ static void bram_save(void)
|
|||||||
switch (region_code)
|
switch (region_code)
|
||||||
{
|
{
|
||||||
case REGION_JAPAN_NTSC:
|
case REGION_JAPAN_NTSC:
|
||||||
fp = filestream_open(CD_BRAM_JP, RFILE_MODE_WRITE, -1);
|
fp = filestream_open(CD_BRAM_JP, RETRO_VFS_FILE_ACCESS_WRITE, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
case REGION_EUROPE:
|
case REGION_EUROPE:
|
||||||
fp = filestream_open(CD_BRAM_EU, RFILE_MODE_WRITE, -1);
|
fp = filestream_open(CD_BRAM_EU, RETRO_VFS_FILE_ACCESS_WRITE, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
case REGION_USA:
|
case REGION_USA:
|
||||||
fp = filestream_open(CD_BRAM_US, RFILE_MODE_WRITE, -1);
|
fp = filestream_open(CD_BRAM_US, RETRO_VFS_FILE_ACCESS_WRITE, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -717,7 +736,7 @@ static void bram_save(void)
|
|||||||
/* check if it is correctly formatted before saving */
|
/* check if it is correctly formatted before saving */
|
||||||
if (!memcmp(scd.cartridge.area + scd.cartridge.mask + 1 - 0x20, brm_format + 0x20, 0x20))
|
if (!memcmp(scd.cartridge.area + scd.cartridge.mask + 1 - 0x20, brm_format + 0x20, 0x20))
|
||||||
{
|
{
|
||||||
fp = filestream_open(CART_BRAM, RFILE_MODE_WRITE, -1);
|
fp = filestream_open(CART_BRAM, RETRO_VFS_FILE_ACCESS_WRITE, RETRO_VFS_FILE_ACCESS_HINT_NONE);
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
int filesize = scd.cartridge.mask + 1;
|
int filesize = scd.cartridge.mask + 1;
|
||||||
@ -1751,6 +1770,7 @@ unsigned retro_api_version(void) { return RETRO_API_VERSION; }
|
|||||||
|
|
||||||
void retro_set_environment(retro_environment_t cb)
|
void retro_set_environment(retro_environment_t cb)
|
||||||
{
|
{
|
||||||
|
struct retro_vfs_interface_info vfs_iface_info;
|
||||||
static const struct retro_variable vars[] = {
|
static const struct retro_variable vars[] = {
|
||||||
{ "genesis_plus_gx_system_hw", "System hardware; auto|sg-1000|sg-1000 II|mark-III|master system|master system II|game gear|mega drive / genesis" },
|
{ "genesis_plus_gx_system_hw", "System hardware; auto|sg-1000|sg-1000 II|mark-III|master system|master system II|game gear|mega drive / genesis" },
|
||||||
{ "genesis_plus_gx_region_detect", "System region; auto|ntsc-u|pal|ntsc-j" },
|
{ "genesis_plus_gx_region_detect", "System region; auto|ntsc-u|pal|ntsc-j" },
|
||||||
@ -1949,6 +1969,12 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars);
|
cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars);
|
||||||
cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports);
|
cb(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports);
|
||||||
cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, (void*)desc);
|
cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, (void*)desc);
|
||||||
|
|
||||||
|
vfs_iface_info.required_interface_version = 1;
|
||||||
|
vfs_iface_info.iface = NULL;
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs_iface_info))
|
||||||
|
filestream_vfs_init(&vfs_iface_info);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void retro_set_video_refresh(retro_video_refresh_t cb) { video_cb = cb; }
|
void retro_set_video_refresh(retro_video_refresh_t cb) { video_cb = cb; }
|
||||||
@ -2198,7 +2224,7 @@ void retro_cheat_set(unsigned index, bool enabled, const char *code)
|
|||||||
bool retro_load_game(const struct retro_game_info *info)
|
bool retro_load_game(const struct retro_game_info *info)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *dir = NULL;
|
char *dir = NULL;
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
char slash = '\\';
|
char slash = '\\';
|
||||||
#else
|
#else
|
||||||
@ -2384,7 +2410,10 @@ size_t retro_get_memory_size(unsigned id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case RETRO_MEMORY_SYSTEM_RAM:
|
case RETRO_MEMORY_SYSTEM_RAM:
|
||||||
return 0x10000;
|
if (system_hw == SYSTEM_SMS || system_hw == SYSTEM_SMS2 || system_hw == SYSTEM_GG || system_hw == SYSTEM_GGMS)
|
||||||
|
return 0x02000;
|
||||||
|
else
|
||||||
|
return 0x10000;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 15
|
|
||||||
VisualStudioVersion = 15.0.27703.2035
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gx_vstudio", "gx_vstudio.vcxproj", "{02639D27-5E68-4F28-8A80-8BA00D9D9547}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Debug|x86 = Debug|x86
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
Release|x86 = Release|x86
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Debug|x86.Build.0 = Debug|Win32
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Release|x64.Build.0 = Release|x64
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{02639D27-5E68-4F28-8A80-8BA00D9D9547}.Release|x86.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
SolutionGuid = {3F183379-6CD9-42BB-BEF2-D0C3030ABB87}
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@ -1,430 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
|
||||||
<ProjectGuid>{02639D27-5E68-4F28-8A80-8BA00D9D9547}</ProjectGuid>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
<RootNamespace>gxvstudio</RootNamespace>
|
|
||||||
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
|
|
||||||
<ProjectName>genesis_plus_gx_libretro</ProjectName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="Shared">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<LinkIncremental>true</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<LinkIncremental>true</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<LinkIncremental>false</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<LinkIncremental>false</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;INLINE=static inline;_7ZIP_ST;FLAC__NO_DLL;FLAC__HAS_OGG=0;PACKAGE_VERSION="1.3.2";LSB_FIRST;USE_16BPP_RENDERING;FRONTEND_SUPPORTS_RGB565;USE_LIBTREMOR;USE_LIBCHDR;MAXROMSIZE=33554432;HAVE_YM3438_CORE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<ConformanceMode>true</ConformanceMode>
|
|
||||||
<AdditionalIncludeDirectories>..\;..\..\core\;..\..\core\m68k\;..\..\core\z80\;..\..\core\input_hw\;..\..\core\sound\;..\..\core\cart_hw\;..\..\core\cart_hw\svp\;..\..\core\cd_hw\;..\..\core\cd_hw\libchdr\deps\libFLAC\include\;..\..\core\cd_hw\libchdr\deps\lzma\;..\..\core\cd_hw\libchdr\deps\zlib\;..\..\core\ntsc\;..\libretro-common\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>NotSet</SubSystem>
|
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
<StackReserveSize>4194304</StackReserveSize>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<ClCompile>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;INLINE=static inline;_7ZIP_ST;FLAC__NO_DLL;FLAC__HAS_OGG=0;PACKAGE_VERSION="1.3.2";LSB_FIRST;USE_16BPP_RENDERING;FRONTEND_SUPPORTS_RGB565;USE_LIBTREMOR;USE_LIBCHDR;MAXROMSIZE=33554432;HAVE_YM3438_CORE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<ConformanceMode>true</ConformanceMode>
|
|
||||||
<AdditionalIncludeDirectories>..\;..\..\core\;..\..\core\m68k\;..\..\core\z80\;..\..\core\input_hw\;..\..\core\sound\;..\..\core\cart_hw\;..\..\core\cart_hw\svp\;..\..\core\cd_hw\;..\..\core\cd_hw\libchdr\deps\libFLAC\include\;..\..\core\cd_hw\libchdr\deps\lzma\;..\..\core\cd_hw\libchdr\deps\zlib\;..\..\core\ntsc\;..\libretro-common\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>NotSet</SubSystem>
|
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;INLINE=static inline;_7ZIP_ST;FLAC__NO_DLL;FLAC__HAS_OGG=0;PACKAGE_VERSION="1.3.2";LSB_FIRST;USE_16BPP_RENDERING;FRONTEND_SUPPORTS_RGB565;USE_LIBTREMOR;USE_LIBCHDR;MAXROMSIZE=33554432;HAVE_YM3438_CORE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<ConformanceMode>true</ConformanceMode>
|
|
||||||
<AdditionalIncludeDirectories>..\;..\..\core\;..\..\core\m68k\;..\..\core\z80\;..\..\core\input_hw\;..\..\core\sound\;..\..\core\cart_hw\;..\..\core\cart_hw\svp\;..\..\core\cd_hw\;..\..\core\cd_hw\libchdr\deps\libFLAC\include\;..\..\core\cd_hw\libchdr\deps\lzma\;..\..\core\cd_hw\libchdr\deps\zlib\;..\..\core\ntsc\;..\libretro-common\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>NotSet</SubSystem>
|
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<ClCompile>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;INLINE=static inline;_7ZIP_ST;FLAC__NO_DLL;FLAC__HAS_OGG=0;PACKAGE_VERSION="1.3.2";LSB_FIRST;USE_16BPP_RENDERING;FRONTEND_SUPPORTS_RGB565;USE_LIBTREMOR;USE_LIBCHDR;MAXROMSIZE=33554432;HAVE_YM3438_CORE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<ConformanceMode>true</ConformanceMode>
|
|
||||||
<AdditionalIncludeDirectories>..\;..\..\core\;..\..\core\m68k\;..\..\core\z80\;..\..\core\input_hw\;..\..\core\sound\;..\..\core\cart_hw\;..\..\core\cart_hw\svp\;..\..\core\cd_hw\;..\..\core\cd_hw\libchdr\deps\libFLAC\include\;..\..\core\cd_hw\libchdr\deps\lzma\;..\..\core\cd_hw\libchdr\deps\zlib\;..\..\core\ntsc\;..\libretro-common\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>NotSet</SubSystem>
|
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\areplay.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_93c.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_i2c.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_spi.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\ggenie.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\md_cart.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\sms_cart.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\sram.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\svp\ssp16.h" />
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\svp\svp.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cdc.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cdd.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cd_cart.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\gfx.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\assert.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\callback.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\export.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\format.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\metadata.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\ordinals.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\stream_decoder.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\bitmath.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\bitreader.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\cpu.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\crc.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\fixed.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\float.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\format.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\lpc.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\macros.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\md5.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\memory.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\protected\stream_decoder.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\alloc.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\compat.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\endswap.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\7zTypes.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\Compiler.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzFind.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzHash.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaDec.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaEnc.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\Precomp.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\gzguts.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inffast.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inffixed.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inflate.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inftrees.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zconf.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zlib.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zutil.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\bitstream.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\cdrom.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\chd.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\coretypes.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\flac.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\huffman.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\pcm.h" />
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\scd.h" />
|
|
||||||
<ClInclude Include="..\..\core\genesis.h" />
|
|
||||||
<ClInclude Include="..\..\core\hvc.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\activator.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\gamepad.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\graphic_board.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\input.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\lightgun.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\mouse.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\paddle.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\sportspad.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\teamplayer.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\terebi_oekaki.h" />
|
|
||||||
<ClInclude Include="..\..\core\input_hw\xe_1ap.h" />
|
|
||||||
<ClInclude Include="..\..\core\io_ctrl.h" />
|
|
||||||
<ClInclude Include="..\..\core\loadrom.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68k.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kconf.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kcpu.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68ki_cycles.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68ki_instruction_jump_table.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kops.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\s68kconf.h" />
|
|
||||||
<ClInclude Include="..\..\core\m68k\s68ki_cycles.h" />
|
|
||||||
<ClInclude Include="..\..\core\macros.h" />
|
|
||||||
<ClInclude Include="..\..\core\mem68k.h" />
|
|
||||||
<ClInclude Include="..\..\core\membnk.h" />
|
|
||||||
<ClInclude Include="..\..\core\memz80.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc_config.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc_impl.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc_config.h" />
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc_impl.h" />
|
|
||||||
<ClInclude Include="..\..\core\shared.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\blip_buf.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\eq.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\psg.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\sound.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\ym2413.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\ym2612.h" />
|
|
||||||
<ClInclude Include="..\..\core\sound\ym3438.h" />
|
|
||||||
<ClInclude Include="..\..\core\state.h" />
|
|
||||||
<ClInclude Include="..\..\core\system.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\asm_arm.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\backends.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\block.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\codebook.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\codec_internal.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\config_types.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\ivorbiscodec.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\ivorbisfile.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\lsp_lookup.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\mdct.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\mdct_lookup.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\misc.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\ogg.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\os.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\os_types.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\registry.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\window.h" />
|
|
||||||
<ClInclude Include="..\..\core\tremor\window_lookup.h" />
|
|
||||||
<ClInclude Include="..\..\core\types.h" />
|
|
||||||
<ClInclude Include="..\..\core\vdp_ctrl.h" />
|
|
||||||
<ClInclude Include="..\..\core\vdp_render.h" />
|
|
||||||
<ClInclude Include="..\..\core\z80\osd_cpu.h" />
|
|
||||||
<ClInclude Include="..\..\core\z80\z80.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\boolean.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\apple_compat.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\fnmatch.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\getopt.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\ifaddrs.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\intrinsics.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\msvc.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\msvc\stdint.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\posix_string.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\strcasestr.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\strl.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zconf.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zlib.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zutil.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\memmap.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_common.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_common_api.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_inline.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_miscellaneous.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\streams\file_stream.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\streams\file_stream_transforms.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\libretro.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\osd.h" />
|
|
||||||
<ClInclude Include="..\..\libretro\scrc32.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Text Include="..\..\core\cart_hw\svp\imageformat.txt" />
|
|
||||||
<Text Include="..\..\core\cart_hw\svp\svpdoc.txt" />
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-history.txt" />
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-sdk.txt" />
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-specification.txt" />
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma.txt" />
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\LICENSE.txt" />
|
|
||||||
<Text Include="..\..\core\m68k\readme.txt" />
|
|
||||||
<Text Include="..\..\core\ntsc\changes.txt" />
|
|
||||||
<Text Include="..\..\core\ntsc\license.txt" />
|
|
||||||
<Text Include="..\..\core\ntsc\readme.txt" />
|
|
||||||
<Text Include="..\..\core\ntsc\sms_ntsc.txt" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\areplay.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_93c.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_i2c.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_spi.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\ggenie.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\md_cart.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\sms_cart.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\sram.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\svp\ssp16.c" />
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\svp\svp.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cdc.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cdd.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cd_cart.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\gfx.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\bitmath.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\bitreader.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\cpu.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\crc.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\fixed.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\float.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\format.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_avx2.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse2.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse41.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\md5.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\memory.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\stream_decoder.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzFind.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaDec.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaEnc.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\adler32.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inffast.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inflate.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inftrees.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\zutil.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\bitstream.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\cdrom.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\chd.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\flac.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\huffman.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\pcm.c" />
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\scd.c" />
|
|
||||||
<ClCompile Include="..\..\core\genesis.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\activator.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\gamepad.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\graphic_board.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\input.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\lightgun.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\mouse.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\paddle.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\sportspad.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\teamplayer.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\terebi_oekaki.c" />
|
|
||||||
<ClCompile Include="..\..\core\input_hw\xe_1ap.c" />
|
|
||||||
<ClCompile Include="..\..\core\io_ctrl.c" />
|
|
||||||
<ClCompile Include="..\..\core\loadrom.c" />
|
|
||||||
<ClCompile Include="..\..\core\m68k\m68kcpu.c" />
|
|
||||||
<ClCompile Include="..\..\core\m68k\s68kcpu.c" />
|
|
||||||
<ClCompile Include="..\..\core\mem68k.c" />
|
|
||||||
<ClCompile Include="..\..\core\membnk.c" />
|
|
||||||
<ClCompile Include="..\..\core\memz80.c" />
|
|
||||||
<ClCompile Include="..\..\core\ntsc\md_ntsc.c" />
|
|
||||||
<ClCompile Include="..\..\core\ntsc\sms_ntsc.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\blip_buf.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\eq.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\psg.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\sound.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\ym2413.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\ym2612.c" />
|
|
||||||
<ClCompile Include="..\..\core\sound\ym3438.c" />
|
|
||||||
<ClCompile Include="..\..\core\state.c" />
|
|
||||||
<ClCompile Include="..\..\core\system.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\bitwise.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\block.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\codebook.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\floor0.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\floor1.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\framing.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\info.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\mapping0.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\mdct.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\registry.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\res012.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\sharedbook.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\synthesis.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\vorbisfile.c" />
|
|
||||||
<ClCompile Include="..\..\core\tremor\window.c" />
|
|
||||||
<ClCompile Include="..\..\core\vdp_ctrl.c" />
|
|
||||||
<ClCompile Include="..\..\core\vdp_render.c" />
|
|
||||||
<ClCompile Include="..\..\core\z80\z80.c" />
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\memmap\memmap.c" />
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\streams\file_stream.c" />
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\streams\file_stream_transforms.c" />
|
|
||||||
<ClCompile Include="..\..\libretro\libretro.c" />
|
|
||||||
<ClCompile Include="..\..\libretro\scrc32.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\AUTHORS" />
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\COPYING.Xiph" />
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\README" />
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\zlib\ChangeLog" />
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\zlib\README" />
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\README.md" />
|
|
||||||
<None Include="..\..\core\tremor\CHANGELOG" />
|
|
||||||
<None Include="..\..\core\tremor\COPYING" />
|
|
||||||
<None Include="..\..\core\tremor\README" />
|
|
||||||
<None Include="libretro.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
@ -1,970 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="src">
|
|
||||||
<UniqueIdentifier>{5706ae08-ac21-49ce-ade8-175dc9e7ae71}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core">
|
|
||||||
<UniqueIdentifier>{6156e4ef-f1c0-4751-a570-6aa58a42f18b}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes">
|
|
||||||
<UniqueIdentifier>{e3c87277-1a94-4196-a336-ddf7af8ac7a5}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cart_hw">
|
|
||||||
<UniqueIdentifier>{d8d8dfd7-8662-4605-a40e-033e60c85127}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cart_hw\svp">
|
|
||||||
<UniqueIdentifier>{1cd56205-edc5-4412-abc0-1c66f1cb4d67}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core">
|
|
||||||
<UniqueIdentifier>{256c4366-ee69-4a9b-9089-15123b657f70}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cart_hw">
|
|
||||||
<UniqueIdentifier>{e378bc88-805f-46e4-bdb7-f2e4e34cb031}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cart_hw\svp">
|
|
||||||
<UniqueIdentifier>{77300262-55b2-42b4-8677-8a0f6590395c}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw">
|
|
||||||
<UniqueIdentifier>{dd7e5767-713e-42d5-abfb-ab59ccd25413}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw">
|
|
||||||
<UniqueIdentifier>{627b2577-e918-4933-b6ca-ee88e71d16b3}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr">
|
|
||||||
<UniqueIdentifier>{8c04dfe4-a59d-4a17-8c77-10733624e78a}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr">
|
|
||||||
<UniqueIdentifier>{c2d1f7bf-2c88-4d7b-a68f-12575b0618a3}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps">
|
|
||||||
<UniqueIdentifier>{e16ee5c6-ce65-405b-9a5c-a44521d25976}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr\deps">
|
|
||||||
<UniqueIdentifier>{9293a242-e4b2-4cfa-922f-a6c35a16b3ee}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC">
|
|
||||||
<UniqueIdentifier>{72865b37-60c2-485e-85d0-f7b3dd46b334}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\lzma">
|
|
||||||
<UniqueIdentifier>{ab60dae6-ecae-41cf-9005-0172ee1e6f2f}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\zlib">
|
|
||||||
<UniqueIdentifier>{3ef433a9-e016-49b9-9e00-0b70f490a5a8}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr\deps\libFLAC">
|
|
||||||
<UniqueIdentifier>{62d6de43-8512-4833-a80c-7e322a5569fa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr\deps\lzma">
|
|
||||||
<UniqueIdentifier>{bd64d77e-eee1-4cc7-a9bf-66a3d6b18c76}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr\deps\zlib">
|
|
||||||
<UniqueIdentifier>{e114059e-bad4-47c8-b22e-ffc8b0f72181}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC\include">
|
|
||||||
<UniqueIdentifier>{74e3783a-ec29-44d6-abad-540649e4fa6e}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC">
|
|
||||||
<UniqueIdentifier>{e6eaaca5-09be-45cc-9244-2eb057b87fc7}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC\include\private">
|
|
||||||
<UniqueIdentifier>{58ed16f2-130a-4c50-88af-428c35f7144b}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC\include\protected">
|
|
||||||
<UniqueIdentifier>{a5cd3c86-24f8-4b08-bd9d-c4847fcf1214}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\libFLAC\include\share">
|
|
||||||
<UniqueIdentifier>{d9c30de1-e8c4-4cc3-ba9c-c587da3a2674}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\deps\lzma\DOC">
|
|
||||||
<UniqueIdentifier>{f4e88cd9-c91b-4147-844a-347e615a178d}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\cd_hw\libchdr\src">
|
|
||||||
<UniqueIdentifier>{a22d6d84-d426-48cc-aff3-94bb3db76ae0}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\cd_hw\libchdr\src">
|
|
||||||
<UniqueIdentifier>{5b1d8d92-510a-4ed6-9d44-50d52115b95f}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\input_hw">
|
|
||||||
<UniqueIdentifier>{1d7682a0-22f3-427b-82c6-29102edcf0af}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\input_hw">
|
|
||||||
<UniqueIdentifier>{0d9f9e83-8234-4a91-8e9d-0c9ee6a3d8aa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\m68k">
|
|
||||||
<UniqueIdentifier>{9df6c375-24ca-4fcf-9d53-10beb82b14a9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\m68k">
|
|
||||||
<UniqueIdentifier>{cf2d2c2b-497f-4d42-ac3d-f1521a4a0f8e}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\ntsc">
|
|
||||||
<UniqueIdentifier>{f4736f36-cb65-4717-ad2d-872c3f3a3196}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\ntsc">
|
|
||||||
<UniqueIdentifier>{f5886a02-e1fc-47a6-b163-a1ebfe29db7c}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\sound">
|
|
||||||
<UniqueIdentifier>{57d6feb9-5818-4e06-8531-ce72a582e376}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\sound">
|
|
||||||
<UniqueIdentifier>{59716199-da27-4702-9207-f6fcf5c26308}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\tremor">
|
|
||||||
<UniqueIdentifier>{838fdc46-93b9-4730-9c57-ea60de21960c}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\tremor">
|
|
||||||
<UniqueIdentifier>{bbb5caae-bd60-4364-8b8b-fa8a83061f44}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\core\z80">
|
|
||||||
<UniqueIdentifier>{1bc2b910-8dab-4c12-a343-d739600b45d0}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\core\z80">
|
|
||||||
<UniqueIdentifier>{db3d1204-0726-4182-a282-78bc51a38b8b}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="resources">
|
|
||||||
<UniqueIdentifier>{4e4752cb-3871-4697-befd-2b05b3c8fa11}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\libretro">
|
|
||||||
<UniqueIdentifier>{c8915827-575e-41dc-8615-5c6cdf1eacee}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro">
|
|
||||||
<UniqueIdentifier>{f17ac24d-c50b-40a5-a1df-0f75c62554b2}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro\libretro-common">
|
|
||||||
<UniqueIdentifier>{bc4e3eee-e957-4cbc-9f29-2fad74ba13f7}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\libretro\libretro-common">
|
|
||||||
<UniqueIdentifier>{f6de1d16-d3de-4e83-9c7a-c37d215953e8}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro\libretro-common\include">
|
|
||||||
<UniqueIdentifier>{94c0ca93-74a4-42f5-8fbe-91cd6efb1b22}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro\libretro-common\include\compat">
|
|
||||||
<UniqueIdentifier>{bf368293-d035-4348-8ecf-7a3494c69fec}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro\libretro-common\include\compat\msvc">
|
|
||||||
<UniqueIdentifier>{1b228852-48fd-4923-bada-c7a44ffd0c46}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="includes\libretro\libretro-common\include\streams">
|
|
||||||
<UniqueIdentifier>{862bfbd5-837e-4c00-80f3-2bdf6c761afc}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\libretro\libretro-common\memmap">
|
|
||||||
<UniqueIdentifier>{17c385d7-1fec-4a2e-a9b6-e090654ec0ea}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src\libretro\libretro-common\streams">
|
|
||||||
<UniqueIdentifier>{00db02d2-2769-489f-8054-1bea737089c4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\svp\ssp16.h">
|
|
||||||
<Filter>includes\core\cart_hw\svp</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\svp\svp.h">
|
|
||||||
<Filter>includes\core\cart_hw\svp</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\areplay.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_93c.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_i2c.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\eeprom_spi.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\ggenie.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\md_cart.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\sms_cart.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cart_hw\sram.h">
|
|
||||||
<Filter>includes\core\cart_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\assert.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\callback.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\export.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\format.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\metadata.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\ordinals.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\FLAC\stream_decoder.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\FLAC</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\bitmath.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\bitreader.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\cpu.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\crc.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\fixed.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\float.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\format.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\lpc.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\macros.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\md5.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\private\memory.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\private</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\protected\stream_decoder.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\protected</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\alloc.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\share</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\compat.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\share</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\libFLAC\include\share\endswap.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC\include\share</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\7zTypes.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\Compiler.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzFind.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzHash.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaDec.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaEnc.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\lzma\Precomp.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\gzguts.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inffast.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inffixed.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inflate.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\inftrees.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zconf.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zlib.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\deps\zlib\zutil.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\bitstream.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\cdrom.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\chd.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\coretypes.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\flac.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\libchdr\src\huffman.h">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cd_cart.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cdc.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\cdd.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\gfx.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\pcm.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\cd_hw\scd.h">
|
|
||||||
<Filter>includes\core\cd_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\activator.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\gamepad.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\graphic_board.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\input.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\lightgun.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\mouse.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\paddle.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\sportspad.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\teamplayer.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\terebi_oekaki.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\input_hw\xe_1ap.h">
|
|
||||||
<Filter>includes\core\input_hw</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68k.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kconf.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kcpu.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68ki_cycles.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68ki_instruction_jump_table.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\m68kops.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\s68kconf.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\m68k\s68ki_cycles.h">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc_config.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\md_ntsc_impl.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc_config.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\ntsc\sms_ntsc_impl.h">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\blip_buf.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\eq.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\psg.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\sound.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\ym2413.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\ym2612.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\sound\ym3438.h">
|
|
||||||
<Filter>includes\core\sound</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\asm_arm.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\backends.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\block.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\codebook.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\codec_internal.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\config_types.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\ivorbiscodec.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\ivorbisfile.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\lsp_lookup.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\mdct.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\mdct_lookup.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\misc.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\ogg.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\os.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\os_types.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\registry.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\window.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\tremor\window_lookup.h">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\z80\osd_cpu.h">
|
|
||||||
<Filter>includes\core\z80</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\z80\z80.h">
|
|
||||||
<Filter>includes\core\z80</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\genesis.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\hvc.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\io_ctrl.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\loadrom.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\macros.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\mem68k.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\membnk.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\memz80.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\shared.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\state.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\system.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\types.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\vdp_ctrl.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\core\vdp_render.h">
|
|
||||||
<Filter>includes\core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro.h">
|
|
||||||
<Filter>includes\libretro</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\osd.h">
|
|
||||||
<Filter>includes\libretro</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\scrc32.h">
|
|
||||||
<Filter>includes\libretro</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\msvc\stdint.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat\msvc</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\apple_compat.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\fnmatch.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\getopt.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\ifaddrs.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\intrinsics.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\msvc.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\posix_string.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\strcasestr.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\strl.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zconf.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zlib.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\compat\zutil.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\compat</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\streams\file_stream.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\streams</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\streams\file_stream_transforms.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include\streams</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\boolean.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\memmap.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_common.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_common_api.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_inline.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\libretro\libretro-common\include\retro_miscellaneous.h">
|
|
||||||
<Filter>includes\libretro\libretro-common\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Text Include="..\..\core\cart_hw\svp\imageformat.txt">
|
|
||||||
<Filter>includes\core\cart_hw\svp</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cart_hw\svp\svpdoc.txt">
|
|
||||||
<Filter>includes\core\cart_hw\svp</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma.txt">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma\DOC</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-history.txt">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma\DOC</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-sdk.txt">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma\DOC</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\deps\lzma\DOC\lzma-specification.txt">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\lzma\DOC</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\cd_hw\libchdr\LICENSE.txt">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\m68k\readme.txt">
|
|
||||||
<Filter>includes\core\m68k</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\ntsc\changes.txt">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\ntsc\license.txt">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\ntsc\readme.txt">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</Text>
|
|
||||||
<Text Include="..\..\core\ntsc\sms_ntsc.txt">
|
|
||||||
<Filter>includes\core\ntsc</Filter>
|
|
||||||
</Text>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\svp\ssp16.c">
|
|
||||||
<Filter>src\core\cart_hw\svp</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\svp\svp.c">
|
|
||||||
<Filter>src\core\cart_hw\svp</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\areplay.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_93c.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_i2c.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\eeprom_spi.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\ggenie.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\md_cart.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\sms_cart.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cart_hw\sram.c">
|
|
||||||
<Filter>src\core\cart_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\bitmath.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\bitreader.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\cpu.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\crc.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\fixed.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\float.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\format.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_avx2.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse2.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\lpc_intrin_sse41.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\md5.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\memory.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\libFLAC\stream_decoder.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzFind.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaDec.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\lzma\LzmaEnc.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\lzma</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\adler32.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inffast.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inflate.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\inftrees.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\deps\zlib\zutil.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\bitstream.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\cdrom.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\chd.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\flac.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\libchdr\src\huffman.c">
|
|
||||||
<Filter>src\core\cd_hw\libchdr\src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cd_cart.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cdc.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\cdd.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\gfx.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\pcm.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\cd_hw\scd.c">
|
|
||||||
<Filter>src\core\cd_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\activator.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\gamepad.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\graphic_board.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\input.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\lightgun.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\mouse.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\paddle.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\sportspad.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\teamplayer.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\terebi_oekaki.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\input_hw\xe_1ap.c">
|
|
||||||
<Filter>src\core\input_hw</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\m68k\m68kcpu.c">
|
|
||||||
<Filter>src\core\m68k</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\m68k\s68kcpu.c">
|
|
||||||
<Filter>src\core\m68k</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\ntsc\md_ntsc.c">
|
|
||||||
<Filter>src\core\ntsc</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\ntsc\sms_ntsc.c">
|
|
||||||
<Filter>src\core\ntsc</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\blip_buf.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\eq.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\psg.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\sound.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\ym2413.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\ym2612.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\sound\ym3438.c">
|
|
||||||
<Filter>src\core\sound</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\bitwise.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\block.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\codebook.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\floor0.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\floor1.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\framing.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\info.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\mapping0.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\mdct.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\registry.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\res012.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\sharedbook.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\synthesis.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\vorbisfile.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\tremor\window.c">
|
|
||||||
<Filter>src\core\tremor</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\z80\z80.c">
|
|
||||||
<Filter>src\core\z80</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\genesis.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\io_ctrl.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\loadrom.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\mem68k.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\membnk.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\memz80.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\state.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\system.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\vdp_ctrl.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\vdp_render.c">
|
|
||||||
<Filter>src\core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\libretro\libretro.c">
|
|
||||||
<Filter>src\libretro</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\libretro\scrc32.c">
|
|
||||||
<Filter>src\libretro</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\memmap\memmap.c">
|
|
||||||
<Filter>src\libretro\libretro-common\memmap</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\streams\file_stream.c">
|
|
||||||
<Filter>src\libretro\libretro-common\streams</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\libretro\libretro-common\streams\file_stream_transforms.c">
|
|
||||||
<Filter>src\libretro\libretro-common\streams</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\AUTHORS">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\COPYING.Xiph">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\libFLAC\README">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\libFLAC</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\zlib\ChangeLog">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\deps\zlib\README">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr\deps\zlib</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\cd_hw\libchdr\README.md">
|
|
||||||
<Filter>includes\core\cd_hw\libchdr</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\tremor\CHANGELOG">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\tremor\COPYING">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\core\tremor\README">
|
|
||||||
<Filter>includes\core\tremor</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="libretro.def">
|
|
||||||
<Filter>resources</Filter>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
|
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
||||||
<LocalDebuggerCommandArguments>"Thunder Force III (JU) [!].bin"</LocalDebuggerCommandArguments>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
|
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
||||||
<LocalDebuggerCommandArguments>"Thunder Force III (JU) [!].bin"</LocalDebuggerCommandArguments>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
@ -1,27 +0,0 @@
|
|||||||
LIBRARY "genesis_plus_gx_libretro"
|
|
||||||
EXPORTS
|
|
||||||
retro_set_environment
|
|
||||||
retro_set_video_refresh
|
|
||||||
retro_set_audio_sample
|
|
||||||
retro_set_audio_sample_batch
|
|
||||||
retro_set_input_poll
|
|
||||||
retro_set_input_state
|
|
||||||
retro_init
|
|
||||||
retro_deinit
|
|
||||||
retro_api_version
|
|
||||||
retro_get_system_info
|
|
||||||
retro_get_system_av_info
|
|
||||||
retro_set_controller_port_device
|
|
||||||
retro_reset
|
|
||||||
retro_run
|
|
||||||
retro_serialize_size
|
|
||||||
retro_serialize
|
|
||||||
retro_unserialize
|
|
||||||
retro_cheat_reset
|
|
||||||
retro_cheat_set
|
|
||||||
retro_load_game
|
|
||||||
retro_load_game_special
|
|
||||||
retro_unload_game
|
|
||||||
retro_get_region
|
|
||||||
retro_get_memory_data
|
|
||||||
retro_get_memory_size
|
|
@ -44,7 +44,6 @@
|
|||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
typedef unsigned char bool;
|
|
||||||
#define strncasecmp _strnicmp
|
#define strncasecmp _strnicmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user