PK 6‹5Lk榽YZYZ diff_03.patchdiff -ur --binary model3emu/Makefiles/Makefile.inc model3emu-patch/Makefiles/Makefile.inc --- model3emu/Makefiles/Makefile.inc 2018-01-21 17:25:27.000000000 +0100 +++ model3emu-patch/Makefiles/Makefile.inc 2018-01-21 17:25:16.515625000 +0100 @@ -27,6 +27,55 @@ ############################################################################### +# Build Options +############################################################################### + +# +# Verbose progression +# +VERBOSE = +ifneq ($(filter $(strip $(VERBOSE)),0 1),$(strip $(VERBOSE))) + override VERBOSE = +endif +SILENT = @ +ifeq ($(strip $(VERBOSE)),1) + SILENT = +endif + +# +# Enable render state analyser for the legacy 3D engine (will slow down emulation!) +# +DEBUG = +ifneq ($(filter $(strip $(DEBUG)),0 1),$(strip $(DEBUG))) + override DEBUG = +endif + +# +# Enable support for Model3 Net Board emulation +# +NET_BOARD = +ifneq ($(filter $(strip $(NET_BOARD)),0 1),$(strip $(NET_BOARD))) + override NET_BOARD = +endif + +# +# Enable Bart's new (experimental) Real3D frame timing +# +NEW_FRAME_TIMING = +ifneq ($(filter $(strip $(NEW_FRAME_TIMING)),0 1),$(strip $(NEW_FRAME_TIMING))) + override NEW_FRAME_TIMING = +endif + +# +# Include console-based debugger in emulator ('yes' or 'no') +# +ENABLE_DEBUGGER = +ifneq ($(filter $(strip $(ENABLE_DEBUGGER)),0 1),$(strip $(ENABLE_DEBUGGER))) + override ENABLE_DEBUGGER = +endif + + +############################################################################### # Source Files ############################################################################### @@ -109,11 +158,19 @@ Src/Pkgs/tinyxml2.cpp \ Src/ROMSet.cpp \ $(PLATFORM_SRC_FILES) - -ifeq ($(strip $(ENABLE_DEBUGGER)),yes) + +ifeq ($(strip $(NET_BOARD)),1) + SRC_FILES += \ + Src/Network/UDPReceive.cpp \ + Src/Network/UDPSend.cpp \ + Src/Network/WinSockWrap.cpp \ + Src/Network/NetBoard.cpp +endif + +ifeq ($(strip $(ENABLE_DEBUGGER)),1) SRC_FILES += \ Src/Debugger/Debugger.cpp \ - Src/Debug/ConsoleDebugger.cpp \ + Src/Debugger/ConsoleDebugger.cpp \ Src/Debugger/SupermodelDebugger.cpp \ Src/Debugger/CPUDebug.cpp \ Src/Debugger/AddressTable.cpp \ @@ -121,7 +178,7 @@ Src/Debugger/CodeAnalyser.cpp \ Src/Debugger/Exception.cpp \ Src/Debugger/Interrupt.cpp \ - Src/Debugger/IO.cpp \ + Src/Debugger/DebuggerIO.cpp \ Src/Debugger/Label.cpp \ Src/Debugger/Register.cpp \ Src/Debugger/Watch.cpp \ @@ -131,7 +188,10 @@ Src/Debugger/CPU/Z80Debug.cpp endif -OBJ_FILES = $(foreach file,$(SRC_FILES),$(OBJ_DIR)/$(basename $(notdir $(file))).o) +# +# Sorted-path compile order +# +OBJ_FILES = $(foreach file,$(sort $(SRC_FILES)),$(OBJ_DIR)/$(basename $(notdir $(file))).o) # # Deduce include directories from the source file list. The sort function @@ -144,32 +204,49 @@ # Output Locations ############################################################################### -ifeq ($(strip $(BITS)),64) - OBJ_DIR = obj64 - BIN_DIR = bin64 -else ifeq ($(strip $(BITS)),32) - OBJ_DIR = obj32 - BIN_DIR = bin32 -else - OBJ_DIR = obj - BIN_DIR = bin -endif +OBJ_DIR = obj$(strip $(BITS)) +BIN_DIR = bin$(strip $(BITS)) -OUTFILE = Supermodel +OUTFILE = supermodel +MUSASHI_OUTFILE = m68kmake ############################################################################### # Compiler Flags ############################################################################### -CPPFLAGS = $(addprefix -I,$(INCLUDE_DIRS)) -DGLEW_STATIC -O3 #-DNEW_FRAME_TIMING -CFLAGS = $(SDL_CFLAGS) $(PLATFORM_CFLAGS) $(CPPFLAGS) -c -Wall -O3 -CXXFLAGS = $(CFLAGS) -std=c++11 -LDFLAGS = -o $(BIN_DIR)/$(OUTFILE) $(PLATFORM_LDFLAGS) $(SDL_LDFLAGS) -s +ARCH = -march=native -mfpmath=sse +BUILD_CFLAGS = +OPT = -O3 +#WARN = -Wall +WARN = -w +CSTD = -std=iso9899:2011 +CXXSTD = -std=c++11 + +COMMON_CFLAGS = -c $(ARCH) $(OPT) $(WARN) $(addprefix -I,$(sort $(INCLUDE_DIRS))) -DGLEW_STATIC + +CFLAGS = $(COMMON_CFLAGS) $(CSTD) +CXXFLAGS = $(PLATFORM_CFLAGS) $(COMMON_CFLAGS) $(BUILD_CFLAGS) $(CXXSTD) +LDFLAGS = -o $(BIN_DIR)/$(OUTFILE) $(PLATFORM_LDFLAGS) -s + +# If render state analyser is enabled, need to define DEBUG +ifeq ($(strip $(DEBUG)),1) + BUILD_CFLAGS += -DDEBUG +endif + +# If Net Board support is enabled, need to define NET_BOARD +ifeq ($(strip $(NET_BOARD)),1) + BUILD_CFLAGS += -DNET_BOARD +endif + +# If Bart's new frame timing is enabled, need to define NEW_FRAME_TIMING +ifeq ($(strip $(NEW_FRAME_TIMING)),1) + BUILD_CFLAGS += -DNEW_FRAME_TIMING +endif # If built-in debugger enabled, need to define SUPERMODEL_DEBUGGER -ifeq ($(strip $(ENABLE_DEBUGGER)),yes) - PLATFORM_CFLAGS += -DSUPERMODEL_DEBUGGER +ifeq ($(strip $(ENABLE_DEBUGGER)),1) + BUILD_CFLAGS += -DSUPERMODEL_DEBUGGER endif @@ -182,17 +259,21 @@ # generated dependencies because otherwise, make gets confused for some reason # and thinks the default target is just one of the object files. # -all: $(BIN_DIR) $(OBJ_DIR) $(OBJ_FILES) +all: $(BIN_DIR)/$(OUTFILE) + +$(BIN_DIR)/$(OUTFILE): $(BIN_DIR) $(OBJ_DIR) $(OBJ_FILES) + $(info --------------------------------------------------------------------------------) $(info Linking Supermodel : $(BIN_DIR)/$(OUTFILE)) - @$(LD) $(OBJ_FILES) $(LDFLAGS) + $(SILENT)$(LD) $(OBJ_FILES) $(LDFLAGS) + $(info --------------------------------------------------------------------------------) $(BIN_DIR): $(info Creating directory : $(BIN_DIR)) - @mkdir $(BIN_DIR) + $(SILENT)mkdir $(BIN_DIR) $(OBJ_DIR): $(info Creating directory : $(OBJ_DIR)) - @mkdir $(OBJ_DIR) + $(SILENT)mkdir $(OBJ_DIR) ############################################################################### @@ -219,15 +300,16 @@ # $(OBJ_DIR)/%.o: %.cpp $(info Generating dependencies: $< -> $(OBJ_DIR)/$(*F).d) - @$(CXX) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CXXFLAGS) $< > $(OBJ_DIR)/$(*F).d + $(SILENT)$(CXX) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CXXFLAGS) $< > $(OBJ_DIR)/$(*F).d $(info Compiling : $< -> $@) - @$(CXX) $(CXXFLAGS) $< -o $@ + $(SILENT)$(CXX) $(CXXFLAGS) $< -o $@ $(OBJ_DIR)/%.o: %.c $(info Generating dependencies: $< -> $(OBJ_DIR)/$(*F).d) - @$(CC) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CPPFLAGS) $< > $(OBJ_DIR)/$(*F).d + $(SILENT)$(CC) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CFLAGS) $< > $(OBJ_DIR)/$(*F).d $(info Compiling : $< -> $@) - @$(CC) $(CFLAGS) $< -o $@ + $(SILENT)$(CC) $(CFLAGS) $< -o $@ + # # Musashi 68K emulator @@ -237,34 +319,37 @@ # MUSASHI_CFLAGS = -ISrc/CPU/68K/Musashi -I$(OBJ_DIR) -DINLINE="static inline" -Wno-unused-variable -MUSASHI_LDFLAGS = -o $(MUSASHI_OUTFILE) $(OBJ_DIR)/m68kmake.o +MUSASHI_LDFLAGS = -o $(OBJ_DIR)/$(MUSASHI_OUTFILE) $(OBJ_DIR)/m68kmake.o -s -$(MUSASHI_OUTFILE): Src/CPU/68K/Musashi/m68kmake.c Src/CPU/68K/Musashi/m68k_in.c +$(OBJ_DIR)/$(MUSASHI_OUTFILE): Src/CPU/68K/Musashi/m68kmake.c + $(info --------------------------------------------------------------------------------) $(info Compiling : $< -> $(OBJ_DIR)/m68kmake.o) - @$(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kmake.o + $(SILENT)$(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kmake.o $(info Linking : $(MUSASHI_OUTFILE)) - @$(LD) $(MUSASHI_LDFLAGS) - -$(OBJ_DIR)/m68kops.h $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kopnz.c: $(MUSASHI_OUTFILE) Src/CPU/68K/Musashi/m68k_in.c Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h + $(SILENT)$(LD) $(MUSASHI_LDFLAGS) + +$(OBJ_DIR)/m68kops.h: $(OBJ_DIR)/$(MUSASHI_OUTFILE) Src/CPU/68K/Musashi/m68k_in.c $(info Generating 68K emulator: $@) - @$(MUSASHI_OUTFILE) $(OBJ_DIR) Src/CPU/68K/Musashi/m68k_in.c - + $(SILENT)$(OBJ_DIR)/$(MUSASHI_OUTFILE) $(OBJ_DIR) Src/CPU/68K/Musashi/m68k_in.c + +$(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kopnz.c: $(OBJ_DIR)/m68kops.h + $(OBJ_DIR)/m68kcpu.o: Src/CPU/68K/Musashi/m68kcpu.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(info Compiling : $< -> $@) - @$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $(OBJ_DIR)/m68kcpu.o + $(SILENT)$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $(OBJ_DIR)/m68kcpu.o -$(OBJ_DIR)/m68kops.o: $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE) +$(OBJ_DIR)/m68kops.o: $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(info Compiling : $< -> $@) - @$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ + $(SILENT)$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ -$(OBJ_DIR)/m68kopac.o: $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE) +$(OBJ_DIR)/m68kopac.o: $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(info Compiling : $< -> $@) - @$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ + $(SILENT)$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ -$(OBJ_DIR)/m68kopdm.o: $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE) +$(OBJ_DIR)/m68kopdm.o: $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(info Compiling : $< -> $@) - @$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ + $(SILENT)$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ -$(OBJ_DIR)/m68kopnz.o: $(OBJ_DIR)/m68kopnz.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE) +$(OBJ_DIR)/m68kopnz.o: $(OBJ_DIR)/m68kopnz.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(info Compiling : $< -> $@) - @$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ + $(SILENT)$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@ diff -ur --binary model3emu/Makefiles/Makefile.OSX model3emu-patch/Makefiles/Makefile.OSX --- model3emu/Makefiles/Makefile.OSX 2018-01-21 17:25:27.000000000 +0100 +++ model3emu-patch/Makefiles/Makefile.OSX 2018-01-20 18:14:03.736328100 +0100 @@ -30,10 +30,7 @@ # Build Options ############################################################################### -# -# Include console-based debugger in emulator ('yes' or 'no') -# -ENABLE_DEBUGGER = no +DELETE = rm -d -r -f ############################################################################### @@ -54,24 +51,23 @@ # SDL_CFLAGS = -SDL_LDFLAGS = -framework SDL -framework AGL -framework OpenGL -framework GLUT -framework Cocoa +SDL_LIBS = -framework SDL -framework AGL -framework OpenGL -framework GLUT -framework Cocoa # # OSX-specific # -PLATFORM_CFLAGS = -DSUPERMODEL_OSX -DUSE_FILE32API -F/Library/Frameworks/ -PLATFORM_LDFLAGS = -lz -lm -lstdc++ -F/Library/Frameworks/ +PLATFORM_CFLAGS = $(SDL_CFLAGS) -DSUPERMODEL_OSX -DUSE_FILE32API -F/Library/Frameworks/ +PLATFORM_LDFLAGS = $(SDL_LIBS) -lz -lm -lstdc++ -F/Library/Frameworks/ ############################################################################### # Core Makefile ############################################################################### -MUSASHI_OUTFILE = $(OBJ_DIR)/m68kmake - include Makefiles/Makefile.inc clean: - rm $(OUTFILE) - rm -f $(OBJ_DIR)/* + $(SILENT)echo Cleaning up \"$(BIN_DIR)\" and \"$(OBJ_DIR)\"... + $(SILENT)$(DELETE) $(BIN_DIR) + $(SILENT)$(DELETE) $(OBJ_DIR) diff -ur --binary model3emu/Makefiles/Makefile.UNIX model3emu-patch/Makefiles/Makefile.UNIX --- model3emu/Makefiles/Makefile.UNIX 2018-01-21 17:25:27.000000000 +0100 +++ model3emu-patch/Makefiles/Makefile.UNIX 2018-01-20 18:17:57.984375000 +0100 @@ -30,10 +30,7 @@ # Build Options ############################################################################### -# -# Include console-based debugger in emulator ('yes' or 'no') -# -ENABLE_DEBUGGER = no +DELETE = rm -d -r -f ############################################################################### @@ -54,24 +51,23 @@ # SDL_CFLAGS = `sdl-config --cflags` -SDL_LDFLAGS = `sdl-config --libs` +SDL_LIBS = `sdl-config --libs` # # UNIX-specific # -PLATFORM_CFLAGS = -PLATFORM_LDFLAGS = -lGL -lGLU -lz -lm -lstdc++ +PLATFORM_CFLAGS = $(SDL_CFLAGS) +PLATFORM_LDFLAGS = $(SDL_LIBS) -lGL -lGLU -lz -lm -lstdc++ ############################################################################### # Core Makefile ############################################################################### -MUSASHI_OUTFILE = $(OBJ_DIR)/m68kmake - include Makefiles/Makefile.inc -clean: - rm $(OUTFILE) - rm -f $(OBJ_DIR)/* +clean: + $(SILENT)echo Cleaning up \"$(BIN_DIR)\" and \"$(OBJ_DIR)\"... + $(SILENT)$(DELETE) $(BIN_DIR) + $(SILENT)$(DELETE) $(OBJ_DIR) diff -ur --binary model3emu/Makefiles/Makefile.Win32 model3emu-patch/Makefiles/Makefile.Win32 --- model3emu/Makefiles/Makefile.Win32 2018-01-21 17:25:27.000000000 +0100 +++ model3emu-patch/Makefiles/Makefile.Win32 2018-01-21 05:26:50.911803800 +0100 @@ -34,11 +34,28 @@ # Bitness of build ('32' or '64') # BITS = 64 +# First check if we're under MSYS2 or not, and then get bitness of CPU +ifeq ($(strip $(MSYSTEM)),) + ifeq ($(findstring 64,$(strip $(PROCESSOR_ARCHITECTURE))),) + BITS = 32 + endif +else + ifeq ($(findstring 32,$(strip $(MSYSTEM_CARCH))),32) + BITS = 32 + endif +endif +# Safety check: can be only '32' or '64' otherwise defaults to '64' +ifneq ($(filter $(strip $(BITS)),32 64),$(strip $(BITS))) + override BITS = 64 +endif # -# Include console-based debugger in emulator ('yes' or 'no') +# Use Bash or Windows Prompt shell commands? # -ENABLE_DEBUGGER = no +DELETE = rm -d -r -f +ifeq ($(strip $(MSYSTEM)),) + DELETE = rmdir /s /q +endif ############################################################################### @@ -48,68 +65,63 @@ ############################################################################### # +# Build environment +# + +# Leave empty if 'mingwXX' folder is located on the root filesystem +MINGW_ROOT = + +# 'mingw64' or 'mingw32' for respectively 64 or 32 bits builds. +# MSYS2 uses that scheme, customize it if necessary +MINGW_BASE = mingw$(strip $(BITS)) + +# The resulting 'mingwXX' base name for includes and libs +MINGW_DIR = $(strip $(MINGW_ROOT))/$(strip $(MINGW_BASE)) + +# # Toolchain # -CC_64 = gcc -CXX_64 = g++ -LD_64 = g++ -CC_32 = gcc -CXX_32 = g++ -LD_32 = g++ + +CC = gcc +CXX = g++ +LD = g++ # # SDL # +# +# (At least for SDL) The linked libs order is fundamental for a successful compiling! +# https://stackoverflow.com/questions/24596596/sdl-doesnt-compile-in-native-enviroment +# http://www.cplusplus.com/forum/beginner/110753/ +# -SDL_INCLUDE_DIR_64 = c:\tdm-gcc-64\include\SDL -SDL_LIB_DIR_64 = c:\tdm-gcc-64\lib -SDL_INCLUDE_DIR_32 = -SDL_LIB_DIR_32 = +SDL_INCLUDE_DIR = $(MINGW_DIR)/include/SDL +SDL_LIB_DIR = $(MINGW_DIR)/lib +SDL_LIBS = -lmingw32 -static-libgcc -static-libstdc++ -lSDLmain -lSDL -liconv -lm -luser32 -lgdi32 -lwinmm -ldxguid +SDL_CFLAGS = -D_GNU_SOURCE=1 -Dmain=SDL_main # # MinGW/Windows-specific # -PLATFORM_CFLAGS_64 = -DSUPERMODEL_WIN32 -PLATFORM_LDFLAGS_64 = -lmingw32 -lopengl32 -lglu32 -ldinput8 -ldxguid -lole32 -loleaut32 -lwbemuuid -lz -PLATFORM_CFLAGS_32 = -DSUPERMODEL_WIN32 -PLATFORM_LDFLAGS_32 = -lmingw32 -lopengl32 -lglu32 -ldinput8 -ldxguid -lole32 -loleaut32 -lwbemuuid -lz +PLATFORM_INCLUDE_DIR = $(SDL_INCLUDE_DIR) $(MINGW_DIR)/include +PLATFORM_LIB_DIR = $(SDL_LIB_DIR) +PLATFORM_LIBS = -ldinput8 -lglew32 -lglu32 -lole32 -loleaut32 -lopengl32 -lwbemuuid -lws2_32 -lz +PLATFORM_CFLAGS = $(SDL_CFLAGS) -DSUPERMODEL_WIN32 $(addprefix -I,$(sort $(PLATFORM_INCLUDE_DIR))) +PLATFORM_LDFLAGS = -static -L$(sort $(PLATFORM_LIB_DIR)) $(SDL_LIBS) $(PLATFORM_LIBS) ############################################################################### # Core Makefile ############################################################################### -ifeq ($(strip $(BITS)),64) - CC = $(CC_64) - CXX = $(CXX_64) - LD = $(LD_64) - PLATFORM_CFLAGS = $(PLATFORM_CFLAGS_64) - PLATFORM_LDFLAGS = $(PLATFORM_LDFLAGS_64) - SDL_LDFLAGS = -L$(SDL_LIB_DIR_64) -lSDLmain -lSDL - SDL_CFLAGS = -I$(SDL_INCLUDE_DIR_64) -else - CC = $(CC_32) - CXX = $(CXX_32) - LD = $(LD_32) - PLATFORM_CFLAGS = $(PLATFORM_CFLAGS_32) - PLATFORM_LDFLAGS = $(PLATFORM_LDFLAGS_32) - SDL_LDFLAGS = -L$(SDL_LIB_DIR_32) -lSDLmain -lSDL - SDL_CFLAGS = -I$(SDL_INCLUDE_DIR_32) -endif - PLATFORM_SRC_FILES = \ Src/OSD/Windows/DirectInputSystem.cpp \ Src/OSD/Windows/WinOutputs.cpp -MUSASHI_OUTFILE = $(OBJ_DIR)/m68kmake.exe - include Makefiles/Makefile.inc clean: - del $(BIN_DIR)\$(OUTFILE).exe - del $(OBJ_DIR)\*.d - del $(OBJ_DIR)\*.o - del $(OBJ_DIR)\*.c - del $(OBJ_DIR)\*.h - del $(OBJ_DIR)\*.exe + $(SILENT)echo Cleaning up \"$(BIN_DIR)\" and \"$(OBJ_DIR)\"... + $(SILENT)$(DELETE) $(BIN_DIR) + $(SILENT)$(DELETE) $(OBJ_DIR) diff -ur --binary model3emu/Src/Debugger/CPUDebug.h model3emu-patch/Src/Debugger/CPUDebug.h --- model3emu/Src/Debugger/CPUDebug.h 2018-01-21 17:25:25.000000000 +0100 +++ model3emu-patch/Src/Debugger/CPUDebug.h 2018-01-21 15:58:10.000000000 +0100 @@ -38,7 +38,7 @@ #include "Debugger.h" #include "Exception.h" #include "Interrupt.h" -#include "IO.h" +#include "DebuggerIO.h" #include "Register.h" #include "Watch.h" diff -ur --binary model3emu/Src/Debugger/DebuggerIO.cpp model3emu-patch/Src/Debugger/DebuggerIO.cpp --- model3emu/Src/Debugger/DebuggerIO.cpp 2018-01-21 17:25:25.000000000 +0100 +++ model3emu-patch/Src/Debugger/DebuggerIO.cpp 2018-01-21 17:25:01.637695300 +0100 @@ -26,7 +26,7 @@ #ifdef SUPERMODEL_DEBUGGER #include "CPUDebug.h" -#include "IO.h" +#include "DebuggerIO.h" #include "Watch.h" namespace Debugger diff -ur --binary model3emu/Src/Debugger/DebuggerIO.h model3emu-patch/Src/Debugger/DebuggerIO.h --- model3emu/Src/Debugger/DebuggerIO.h 2018-01-21 17:25:25.000000000 +0100 +++ model3emu-patch/Src/Debugger/DebuggerIO.h 2018-01-21 15:41:41.000000000 +0100 @@ -24,8 +24,8 @@ */ #ifdef SUPERMODEL_DEBUGGER -#ifndef INCLUDED_IO_H -#define INCLUDED_IO_H +#ifndef INCLUDED_DEBUGGERIO_H +#define INCLUDED_DEBUGGERIO_H #include "Types.h" @@ -161,5 +161,5 @@ } } -#endif // INCLUDED_IO_H +#endif // INCLUDED_DEBUGGERIO_H #endif // SUPERMODEL_DEBUGGER \ No newline at end of file diff -ur --binary model3emu/Src/Debugger/Watch.cpp model3emu-patch/Src/Debugger/Watch.cpp --- model3emu/Src/Debugger/Watch.cpp 2018-01-21 17:25:25.000000000 +0100 +++ model3emu-patch/Src/Debugger/Watch.cpp 2018-01-21 15:58:24.000000000 +0100 @@ -27,7 +27,7 @@ #include "CPUDebug.h" #include "Debugger.h" -#include "IO.h" +#include "DebuggerIO.h" #include "Watch.h" #include diff -ur --binary model3emu/Src/Network/UDPSend.cpp model3emu-patch/Src/Network/UDPSend.cpp --- model3emu/Src/Network/UDPSend.cpp 2018-01-21 17:25:26.000000000 +0100 +++ model3emu-patch/Src/Network/UDPSend.cpp 2018-01-20 21:15:05.000000000 +0100 @@ -7,6 +7,188 @@ namespace SMUDP { +/* + * Since "inet_pton" function is missing in the w32api package of + * MinGW (winsock2 to be exact), we have to do something... + * The issue is described here: + * https://github.com/HaxeFoundation/hxcpp/issues/569 +*/ +#ifdef __GNUC__ + #if (1) // Solution #1 + /* + * Implement our own functions. + * Reference: + * https://stackoverflow.com/questions/15370033/how-to-use-inet-pton-with-the-mingw-compiler + */ + #define NS_INADDRSZ 4 + #define NS_IN6ADDRSZ 16 + #define NS_INT16SZ 2 + int inet_pton4(const char *src, IN_ADDR *dst) + { + uint8_t tmp[NS_INADDRSZ], *tp; + + int saw_digit = 0; + int octets = 0; + *(tp = tmp) = 0; + + int ch; + while ((ch = *src++) != '\0') + { + if (ch >= '0' && ch <= '9') + { + uint32_t n = *tp * 10 + (ch - '0'); + + if (saw_digit && *tp == 0) + return 0; + + if (n > 255) + return 0; + + *tp = n; + if (!saw_digit) + { + if (++octets > 4) + return 0; + saw_digit = 1; + } + } + else if (ch == '.' && saw_digit) + { + if (octets == 4) + return 0; + *++tp = 0; + saw_digit = 0; + } + else + return 0; + } + if (octets < 4) + return 0; + + memcpy(dst, tmp, NS_INADDRSZ); + + return 1; + } + int inet_pton6(const char *src, IN_ADDR *dst) + { + static const char xdigits[] = "0123456789abcdef"; + uint8_t tmp[NS_IN6ADDRSZ]; + + uint8_t *tp = (uint8_t*) memset(tmp, '\0', NS_IN6ADDRSZ); + uint8_t *endp = tp + NS_IN6ADDRSZ; + uint8_t *colonp = NULL; + + /* Leading :: requires some special handling. */ + if (*src == ':') + { + if (*++src != ':') + return 0; + } + + const char *curtok = src; + int saw_xdigit = 0; + uint32_t val = 0; + int ch; + while ((ch = tolower(*src++)) != '\0') + { + const char *pch = strchr(xdigits, ch); + if (pch != NULL) + { + val <<= 4; + val |= (pch - xdigits); + if (val > 0xffff) + return 0; + saw_xdigit = 1; + continue; + } + if (ch == ':') + { + curtok = src; + if (!saw_xdigit) + { + if (colonp) + return 0; + colonp = tp; + continue; + } + else if (*src == '\0') + { + return 0; + } + if (tp + NS_INT16SZ > endp) + return 0; + *tp++ = (uint8_t) (val >> 8) & 0xff; + *tp++ = (uint8_t) val & 0xff; + saw_xdigit = 0; + val = 0; + continue; + } + if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && + inet_pton4(curtok, (IN_ADDR*) tp) > 0) + { + tp += NS_INADDRSZ; + saw_xdigit = 0; + break; /* '\0' was seen by inet_pton4(). */ + } + return 0; + } + if (saw_xdigit) + { + if (tp + NS_INT16SZ > endp) + return 0; + *tp++ = (uint8_t) (val >> 8) & 0xff; + *tp++ = (uint8_t) val & 0xff; + } + if (colonp != NULL) + { + /* + * Since some memmove()'s erroneously fail to handle + * overlapping regions, we'll do the shift by hand. + */ + const int n = tp - colonp; + + if (tp == endp) + return 0; + + for (int i = 1; i <= n; i++) + { + endp[-i] = colonp[n - i]; + colonp[n - i] = 0; + } + tp = endp; + } + if (tp != endp) + return 0; + + memcpy(dst, tmp, NS_IN6ADDRSZ); + + return 1; + } + int inet_pton(int af, const char *src, IN_ADDR *dst) + { + switch (af) + { + case AF_INET: + return inet_pton4(src, dst); + case AF_INET6: + return inet_pton6(src, dst); + default: + return -1; + } + } + #else // Solution #2 + /* + * Alternative method. + * Reference: + * https://github.com/HaxeFoundation/hxcpp/commit/c95cbafe6ceb7bb7642dee8efcdb16fcf4d3907d + */ + extern "C" { + WINSOCK_API_LINKAGE INT WSAAPI inet_pton( INT Family, PCSTR pszAddrString, PVOID pAddrBuf); + WINSOCK_API_LINKAGE PCSTR WSAAPI inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize); + } + #endif +#endif + UDPSend::UDPSend() { m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // create the socket PK 6‹5Lk榽YZYZ $ diff_03.patch A’Â|Ô’Ó?nn/Õ’ÓY¯ÈÔ’ÓPK_„Z