diff --git a/.gitignore b/.gitignore index beb84ac..1a41a04 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ # OS generated files .DS_Store +.directory + +# Per-user IDE configuration files +Z80.CPU/v1.0/development/Xcode/Z80.xcodeproj/project.xcworkspace +Z80.CPU/v1.0/development/Xcode/Z80.xcodeproj/xcuserdata diff --git a/Z80.CPU/v1.0/API/C/emulation/CPU/Z80.h b/Z80.CPU/v1.0/API/C/emulation/CPU/Z80.h index b3ef5be..fee33e9 100644 --- a/Z80.CPU/v1.0/API/C/emulation/CPU/Z80.h +++ b/Z80.CPU/v1.0/API/C/emulation/CPU/Z80.h @@ -7,33 +7,37 @@ Copyright © 1999-2015 Manuel Sainz de Baranda y Goñi. Released under the terms of the GNU General Public License v3. */ -#include -#include - #ifndef __emulation_CPU_Z80_H__ #define __emulation_CPU_Z80_H__ -#ifdef BUILDING_MODULE_EMULATION_CPU_Z80 +#include +#include + +#ifdef EMULATION_CPU_Z80_NO_SLOTS +# define Z80_CB(Type) Type +#else # include # define Z80_CB QSlot -# define Z80_EMULATOR_API Q_API +#endif + +#if defined(BUILDING_DYNAMIC_EMULATION_CPU_Z80) +# define Z80_API Q_API_EXPORT +#elif defined(BUILDING_STATIC_EMULATION_CPU_Z80) +# define Z80_API Q_PUBLIC +#elif defined(USE_STATIC_EMULATION_CPU_Z80) +# define Z80_API #else -# define Z80_CB(Type) Type -# define Z80_EMULATOR_API +# define Z80_API Q_API #endif typedef struct { -# ifdef BUILDING_MODUDE_EMULATION_CPU_Z80 - quintptr id; -# endif - qsize cycles; QZ80State state; Q16Bit xy; quint8 r7; Q32Bit data; -# ifndef BUILDING_MODULE_EMULATION_CPU_Z80 +# ifndef EMULATION_CPU_Z80_NO_SLOTS void* cb_context; # endif @@ -48,18 +52,18 @@ typedef struct { Q_C_SYMBOLS_BEGIN -Z80_EMULATOR_API qsize z80_run (Z80* object, - qsize cycles); +Z80_API qsize z80_run (Z80* object, + qsize cycles); -Z80_EMULATOR_API void z80_power (Z80* object, - qboolean state); +Z80_API void z80_power (Z80* object, + qboolean state); -Z80_EMULATOR_API void z80_reset (Z80* object); +Z80_API void z80_reset (Z80* object); -Z80_EMULATOR_API void z80_nmi (Z80* object); +Z80_API void z80_nmi (Z80* object); -Z80_EMULATOR_API void z80_irq (Z80* object, - qboolean state); +Z80_API void z80_irq (Z80* object, + qboolean state); Q_C_SYMBOLS_END diff --git a/Z80.CPU/v1.0/development/Xcode/Z80.xcodeproj/project.pbxproj b/Z80.CPU/v1.0/development/Xcode/Z80.xcodeproj/project.pbxproj new file mode 100644 index 0000000..66e5773 --- /dev/null +++ b/Z80.CPU/v1.0/development/Xcode/Z80.xcodeproj/project.pbxproj @@ -0,0 +1,358 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 6428A5751AAFC6DF00634F5D /* Z80.h in Headers */ = {isa = PBXBuildFile; fileRef = 6428A5741AAFC6DF00634F5D /* Z80.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6428A5771AAFC72900634F5D /* Z80.c in Sources */ = {isa = PBXBuildFile; fileRef = 6428A5761AAFC72900634F5D /* Z80.c */; settings = {COMPILER_FLAGS = "-DBUILDING_DYNAMIC_EMULATION_CPU_Z80"; }; }; + 6428A5801AAFEF1D00634F5D /* Z80.c in Sources */ = {isa = PBXBuildFile; fileRef = 6428A5761AAFC72900634F5D /* Z80.c */; settings = {COMPILER_FLAGS = "-DBUILDING_STATIC_EMULATION_CPU_Z80"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 6428A5691AAFC68700634F5D /* libZ80.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libZ80.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 6428A5741AAFC6DF00634F5D /* Z80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Z80.h; sourceTree = ""; }; + 6428A5761AAFC72900634F5D /* Z80.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Z80.c; sourceTree = ""; }; + 6428A57C1AAFEDED00634F5D /* libZ80.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libZ80.a; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6428A5661AAFC68700634F5D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6428A5791AAFEDED00634F5D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6428A5601AAFC68700634F5D = { + isa = PBXGroup; + children = ( + 6428A5711AAFC69A00634F5D /* API */, + 6428A5701AAFC69100634F5D /* Sources */, + 6428A56A1AAFC68700634F5D /* Products */, + ); + sourceTree = ""; + }; + 6428A56A1AAFC68700634F5D /* Products */ = { + isa = PBXGroup; + children = ( + 6428A5691AAFC68700634F5D /* libZ80.dylib */, + 6428A57C1AAFEDED00634F5D /* libZ80.a */, + ); + name = Products; + sourceTree = ""; + }; + 6428A5701AAFC69100634F5D /* Sources */ = { + isa = PBXGroup; + children = ( + 6428A5761AAFC72900634F5D /* Z80.c */, + ); + name = Sources; + path = ../../sources; + sourceTree = ""; + }; + 6428A5711AAFC69A00634F5D /* API */ = { + isa = PBXGroup; + children = ( + 6428A5721AAFC6C100634F5D /* emulation */, + ); + name = API; + path = ../../API/C; + sourceTree = ""; + }; + 6428A5721AAFC6C100634F5D /* emulation */ = { + isa = PBXGroup; + children = ( + 6428A5731AAFC6C700634F5D /* CPU */, + ); + path = emulation; + sourceTree = ""; + }; + 6428A5731AAFC6C700634F5D /* CPU */ = { + isa = PBXGroup; + children = ( + 6428A5741AAFC6DF00634F5D /* Z80.h */, + ); + path = CPU; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 6428A5671AAFC68700634F5D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6428A5751AAFC6DF00634F5D /* Z80.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6428A57A1AAFEDED00634F5D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 6428A5681AAFC68700634F5D /* Z80 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6428A56D1AAFC68700634F5D /* Build configuration list for PBXNativeTarget "Z80" */; + buildPhases = ( + 6428A5651AAFC68700634F5D /* Sources */, + 6428A5661AAFC68700634F5D /* Frameworks */, + 6428A5671AAFC68700634F5D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Z80; + productName = Z80; + productReference = 6428A5691AAFC68700634F5D /* libZ80.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; + 6428A57B1AAFEDED00634F5D /* Z80 (Static) */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6428A57D1AAFEDED00634F5D /* Build configuration list for PBXNativeTarget "Z80 (Static)" */; + buildPhases = ( + 6428A5781AAFEDED00634F5D /* Sources */, + 6428A5791AAFEDED00634F5D /* Frameworks */, + 6428A57A1AAFEDED00634F5D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Z80 (Static)"; + productName = "Z80-Static"; + productReference = 6428A57C1AAFEDED00634F5D /* libZ80.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6428A5611AAFC68700634F5D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = redcode; + TargetAttributes = { + 6428A5681AAFC68700634F5D = { + CreatedOnToolsVersion = 6.1.1; + }; + 6428A57B1AAFEDED00634F5D = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 6428A5641AAFC68700634F5D /* Build configuration list for PBXProject "Z80" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 6428A5601AAFC68700634F5D; + productRefGroup = 6428A56A1AAFC68700634F5D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6428A5681AAFC68700634F5D /* Z80 */, + 6428A57B1AAFEDED00634F5D /* Z80 (Static) */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 6428A5651AAFC68700634F5D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6428A5771AAFC72900634F5D /* Z80.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6428A5781AAFEDED00634F5D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6428A5801AAFEF1D00634F5D /* Z80.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 6428A56B1AAFC68700634F5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../API/C, + /usr/local/include, + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + LINK_WITH_STANDARD_LIBRARIES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + STRIP_STYLE = "non-global"; + }; + name = Debug; + }; + 6428A56C1AAFC68700634F5D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../API/C, + /usr/local/include, + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + LINK_WITH_STANDARD_LIBRARIES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MTL_ENABLE_DEBUG_INFO = NO; + STRIP_STYLE = "non-global"; + }; + name = Release; + }; + 6428A56E1AAFC68700634F5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + LD_DYLIB_INSTALL_NAME = "$(EXECUTABLE_PATH)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 6428A56F1AAFC68700634F5D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_PREFIX = lib; + LD_DYLIB_INSTALL_NAME = "$(EXECUTABLE_PATH)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 6428A57E1AAFEDED00634F5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + PRODUCT_NAME = Z80; + }; + name = Debug; + }; + 6428A57F1AAFEDED00634F5D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + PRODUCT_NAME = Z80; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6428A5641AAFC68700634F5D /* Build configuration list for PBXProject "Z80" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6428A56B1AAFC68700634F5D /* Debug */, + 6428A56C1AAFC68700634F5D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6428A56D1AAFC68700634F5D /* Build configuration list for PBXNativeTarget "Z80" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6428A56E1AAFC68700634F5D /* Debug */, + 6428A56F1AAFC68700634F5D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6428A57D1AAFEDED00634F5D /* Build configuration list for PBXNativeTarget "Z80 (Static)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6428A57E1AAFEDED00634F5D /* Debug */, + 6428A57F1AAFEDED00634F5D /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6428A5611AAFC68700634F5D /* Project object */; +} diff --git a/Z80.CPU/v1.0/sources/Z80.c b/Z80.CPU/v1.0/sources/Z80.c index 58eeea6..9797e1a 100644 --- a/Z80.CPU/v1.0/sources/Z80.c +++ b/Z80.CPU/v1.0/sources/Z80.c @@ -7,17 +7,13 @@ Copyright © 1999-2015 Manuel Sainz de Baranda y Goñi. Released under the terms of the GNU General Public License v3. */ -#define MODULE_NAME Z80 -#define MODULE_PREFIX z80_ -#define MODULE_HEADER -#define BUILDING_CPU_Z80 - -#include +#include #include typedef quint8 (* Instruction)(Z80 *object); - +#undef Q_PRIVATE +#define Q_PRIVATE static /* MARK: - Macros: External */ #define O(member) Q_OFFSET_OF(Z80, member) @@ -27,12 +23,12 @@ typedef quint8 (* Instruction)(Z80 *object); /* MARK: - Macros & Functions: Callback */ -#ifdef BUILDING_MODULE -# define CB_ACTION(name) object->cb.name.action -# define CB_OBJECT(name) object->cb.name.object -#else +#ifdef EMULATION_CPU_Z80_NO_SLOTS # define CB_ACTION(name) object->cb.name # define CB_OBJECT(name) object->cb_context +#else +# define CB_ACTION(name) object->cb.name.action +# define CB_OBJECT(name) object->cb.name.object #endif #define READ_8(address) CB_ACTION(read )(CB_OBJECT(read ), (address) ) @@ -154,7 +150,7 @@ Q_INLINE void write_16bit(Z80 *object, quint16 address, quint16 value) /* MARK: - P/V Flag Computation */ -static const quint8 pf_parity_table[256] = { +Q_PRIVATE const quint8 pf_parity_table[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ 4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4, /* 1 */ 0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0, @@ -216,7 +212,7 @@ VF(sbc, 16, 32, -, -32768, 32767) '----------' | 111 = a | | 111 = a | | 111 = a | '---------' '-----------' '----------*/ -static const quint8 x_y_table[8] = { +Q_PRIVATE const quint8 x_y_table[8] = { O(state.Q_Z80_STATE_MEMBER_B), O(state.Q_Z80_STATE_MEMBER_C), O(state.Q_Z80_STATE_MEMBER_D), @@ -227,7 +223,7 @@ static const quint8 x_y_table[8] = { O(state.Q_Z80_STATE_MEMBER_A) }; -static const quint8 j_k_p_q_table[8] = { +Q_PRIVATE const quint8 j_k_p_q_table[8] = { O(state.Q_Z80_STATE_MEMBER_B), O(state.Q_Z80_STATE_MEMBER_C), O(state.Q_Z80_STATE_MEMBER_D), @@ -262,21 +258,21 @@ R_8(_____kkk , j_k_p_q_table, 1, 7, ) | 11 = sp | | 11 = af | | 11 = sp | '---------' '---------' '--------*/ -static const quint8 s_table[4] = { +Q_PRIVATE const quint8 s_table[4] = { O(state.Q_Z80_STATE_MEMBER_BC), O(state.Q_Z80_STATE_MEMBER_DE), O(state.Q_Z80_STATE_MEMBER_HL), O(state.Q_Z80_STATE_MEMBER_SP) }; -static const quint8 t_table[4] = { +Q_PRIVATE const quint8 t_table[4] = { O(state.Q_Z80_STATE_MEMBER_BC), O(state.Q_Z80_STATE_MEMBER_DE), O(state.Q_Z80_STATE_MEMBER_HL), O(state.Q_Z80_STATE_MEMBER_AF) }; -static const quint8 w_table[4] = { +Q_PRIVATE const quint8 w_table[4] = { O(state.Q_Z80_STATE_MEMBER_BC), O(state.Q_Z80_STATE_MEMBER_DE), O(xy ), @@ -307,7 +303,7 @@ R_16(__tt____ , t_table, 0) | 111 = m | '---------*/ -static const quint8 z_table[8] = {ZF, ZF, CF, CF, PF, PF, SF, SF}; +Q_PRIVATE const quint8 z_table[8] = {ZF, ZF, CF, CF, PF, PF, SF, SF}; Q_INLINE qboolean __zzz___(Z80 *object) { @@ -345,7 +341,7 @@ Q_INLINE qboolean __zzz___(Z80 *object) | dec | S | Z |v.5| H |v.3| V | 1 | . | '------------------------------------*/ -static void __uuu___(Z80 *object, quint8 offset, quint8 value) +Q_PRIVATE void __uuu___(Z80 *object, quint8 offset, quint8 value) { quint8 t; @@ -425,7 +421,7 @@ static void __uuu___(Z80 *object, quint8 offset, quint8 value) } -static quint8 _____vvv(Z80 *object, quint8 offset, quint8 value) +Q_PRIVATE quint8 _____vvv(Z80 *object, quint8 offset, quint8 value) { quint8 t, pn; @@ -467,7 +463,7 @@ static quint8 _____vvv(Z80 *object, quint8 offset, quint8 value) | 111 = srl | '----------*/ -static quint8 __ggg___(Z80 *object, quint8 offset, quint8 value) +Q_PRIVATE quint8 __ggg___(Z80 *object, quint8 offset, quint8 value) { quint8 c; @@ -542,6 +538,9 @@ static quint8 __ggg___(Z80 *object, quint8 offset, quint8 value) c = value & CF; value >>= 1; break; + + /* Uncoment to Avoid compiler warning */ + /*default: c = 0; break;*/ } F = (value & SYXF) @@ -601,7 +600,7 @@ Q_INLINE quint8 _m______(Z80 *object, quint8 offset, quint8 value) /* MARK: - Reusable Code */ -#define INSTRUCTION(name) static quint8 name(Z80 *object) +#define INSTRUCTION(name) Q_PRIVATE quint8 name(Z80 *object) #define CYCLES(cycles) return cycles; #define EXIT_HALT if (HALT) {PC++; HALT = FALSE; CLEAR_HALT;} #define PUSH(value) WRITE_16(SP -= 2, value) @@ -1251,7 +1250,7 @@ INSTRUCTION(XY_illegal); /* MARK: - Instruction Function Tables */ -static const Instruction instruction_table[256] = { +Q_PRIVATE const Instruction instruction_table[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ nop, ld_SS_WORD, ld_vbc_a, inc_SS, V_X, V_X, ld_X_BYTE, rlca, ex_af_af_, add_hl_SS, ld_a_vbc, dec_SS, V_X, V_X, ld_X_BYTE, rrca, /* 1 */ djnz_OFFSET, ld_SS_WORD, ld_vde_a, inc_SS, V_X, V_X, ld_X_BYTE, rla, jr_OFFSET, add_hl_SS, ld_a_vde, dec_SS, V_X, V_X, ld_X_BYTE, rra, @@ -1271,7 +1270,7 @@ static const Instruction instruction_table[256] = { /* F */ ret_Z, pop_TT, jp_Z_WORD, di, call_Z_WORD, push_TT, U_a_BYTE, rst_N, ret_Z, ld_sp_hl, jp_Z_WORD, ei, call_Z_WORD, FD, U_a_BYTE, rst_N }; -static const Instruction instruction_table_CB[256] = { +Q_PRIVATE const Instruction instruction_table_CB[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_vhl, G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_vhl, G_Y, /* 1 */ G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_vhl, G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_Y, G_vhl, G_Y, @@ -1291,7 +1290,7 @@ static const Instruction instruction_table_CB[256] = { /* F */ M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_vhl, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_Y, M_N_vhl, M_N_Y }; -static const Instruction instruction_table_XY_CB[256] = { +Q_PRIVATE const Instruction instruction_table_XY_CB[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET, G_vXYOFFSET_Y, /* 1 */ G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET_Y, G_vXYOFFSET, G_vXYOFFSET_Y, @@ -1311,7 +1310,7 @@ static const Instruction instruction_table_XY_CB[256] = { /* F */ M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET_Y, M_N_vXYOFFSET, M_N_vXYOFFSET_Y }; -static const Instruction instruction_table_XY[256] = { +Q_PRIVATE const Instruction instruction_table_XY[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, add_XY_WW, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, /* 1 */ XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, add_XY_WW, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, @@ -1331,7 +1330,7 @@ static const Instruction instruction_table_XY[256] = { /* F */ XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, ld_sp_XY, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal, XY_illegal }; -static const Instruction instruction_table_ED[256] = { +Q_PRIVATE const Instruction instruction_table_ED[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, /* 1 */ ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, ED_illegal, @@ -1388,7 +1387,7 @@ INSTRUCTION(ED_illegal) {PC += 2; CYCLES(8);} /* MARK: - Main Functions */ -EXPORTED(qsize, run)(Z80 *object, qsize cycles) +Z80_API qsize z80_run(Z80 *object, qsize cycles) { quint32 data; @@ -1514,7 +1513,7 @@ EXPORTED(qsize, run)(Z80 *object, qsize cycles) } -EXPORTED(void, reset)(Z80 *object) +Z80_API void z80_reset(Z80 *object) { PC = Q_Z80_VALUE_AFTER_RESET_PC; SP = Q_Z80_VALUE_AFTER_RESET_SP; @@ -1540,12 +1539,12 @@ EXPORTED(void, reset)(Z80 *object) } -EXPORTED(void, power)(Z80 *object, qboolean state) +Z80_API void z80_power(Z80 *object, qboolean state) { if (state) { # ifdef Q_Z80_RESET_IS_EQUAL_TO_POWER_ON - SYMBOL(reset)(object); + z80_reset(object); # else PC = Q_Z80_VALUE_AFTER_POWER_ON_PC; SP = Q_Z80_VALUE_AFTER_POWER_ON_SP; @@ -1573,21 +1572,21 @@ EXPORTED(void, power)(Z80 *object, qboolean state) } -EXPORTED(void, nmi)(Z80 *object) {NMI = TRUE ;} -EXPORTED(void, irq)(Z80 *object, qboolean state) {INT = state;} +Z80_API void z80_nmi(Z80 *object) {NMI = TRUE ;} +Z80_API void z80_irq(Z80 *object, qboolean state) {INT = state;} -#ifndef BUILDING_MODULE +#ifndef BUILDING_DYNAMIC_EMULATION_CPU_Z80 - static void after_state_readed (Z80 *object, QZ80State *state) + Q_PRIVATE void after_state_readed (Z80 *object, QZ80State *state) {Q_Z80_STATE_R(state) = R_ALL;} - static void after_state_written(Z80 *object) + Q_PRIVATE void after_state_written(Z80 *object) {R7 = R;} #include - static QEmulatorExport exports[7] = { + Q_PRIVATE QEmulatorExport exports[7] = { {Q_EMULATOR_ACTION_POWER, (QDo)z80_power }, {Q_EMULATOR_ACTION_RESET, (QDo)z80_reset }, {Q_EMULATOR_ACTION_RUN, (QDo)z80_run }, @@ -1599,7 +1598,7 @@ EXPORTED(void, irq)(Z80 *object, qboolean state) {INT = state;} #define SLOT_OFFSET(name) Q_OFFSET_OF(Z80, cb.name) - static QEmulatorSlotLinkage slot_linkages[] = { + Q_PRIVATE QEmulatorSlotLinkage slot_linkages[] = { {Q_EMULATOR_OBJECT_MEMORY, Q_EMULATOR_ACTION_READ_8BIT, SLOT_OFFSET(read )}, {Q_EMULATOR_OBJECT_MEMORY, Q_EMULATOR_ACTION_WRITE_8BIT, SLOT_OFFSET(write )}, {Q_EMULATOR_OBJECT_IO, Q_EMULATOR_ACTION_IN_8BIT, SLOT_OFFSET(in )}, @@ -1608,7 +1607,7 @@ EXPORTED(void, irq)(Z80 *object, qboolean state) {INT = state;} {Q_EMULATOR_OBJECT_MACHINE, Q_EMULATOR_ACTION_HALT, SLOT_OFFSET(halt )} }; - QCPUEmulatorABI cpu_emulator_abi = { + Q_API_EXPORT QCPUEmulatorABI emulation_cpu_z80_abi = { 0, NULL, 7, exports, {sizeof(Z80), Q_OFFSET_OF(Z80, state), 1, slot_linkages} };