diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 7db34731a..9206cb43a 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -616,6 +616,7 @@ 4BBFBB6C1EE8401E00C01E7A /* ZX8081.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBFBB6A1EE8401E00C01E7A /* ZX8081.cpp */; }; 4BBFE83D21015D9C00BF1C40 /* CSJoystickManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BBFE83C21015D9C00BF1C40 /* CSJoystickManager.m */; }; 4BBFFEE61F7B27F1005F3FEB /* TrackSerialiser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBFFEE51F7B27F1005F3FEB /* TrackSerialiser.cpp */; }; + 4BC5C3E022C994CD00795658 /* 68000MoveTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BC5C3DF22C994CC00795658 /* 68000MoveTests.mm */; }; 4BC5FC3020CDDDEF00410AA0 /* AppleIIOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4BC5FC2E20CDDDEE00410AA0 /* AppleIIOptions.xib */; }; 4BC751B21D157E61006C31D9 /* 6522Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC751B11D157E61006C31D9 /* 6522Tests.swift */; }; 4BC76E691C98E31700E6EF73 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC76E671C98E31700E6EF73 /* FIRFilter.cpp */; }; @@ -1400,6 +1401,7 @@ 4BBFE83C21015D9C00BF1C40 /* CSJoystickManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSJoystickManager.m; sourceTree = ""; }; 4BBFE83E21015DAE00BF1C40 /* CSJoystickManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSJoystickManager.h; sourceTree = ""; }; 4BBFFEE51F7B27F1005F3FEB /* TrackSerialiser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TrackSerialiser.cpp; sourceTree = ""; }; + 4BC5C3DF22C994CC00795658 /* 68000MoveTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = 68000MoveTests.mm; sourceTree = ""; }; 4BC5FC2F20CDDDEE00410AA0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/AppleIIOptions.xib"; sourceTree = SOURCE_ROOT; }; 4BC751B11D157E61006C31D9 /* 6522Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 6522Tests.swift; sourceTree = ""; }; 4BC76E671C98E31700E6EF73 /* FIRFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FIRFilter.cpp; sourceTree = ""; }; @@ -2938,6 +2940,7 @@ 4B9D0C4A22C7D70900DE1AD3 /* 68000BCDTests.mm */, 4B90467322C6FADD000E2074 /* 68000BitwiseTests.mm */, 4B9D0C4C22C7DA1A00DE1AD3 /* 68000ControlFlowTests.mm */, + 4BC5C3DF22C994CC00795658 /* 68000MoveTests.mm */, 4B9D0C4E22C7E0CF00DE1AD3 /* 68000RollShiftTests.mm */, 4BD388872239E198002D14B5 /* 68000Tests.mm */, 4B924E981E74D22700B76AF1 /* AtariStaticAnalyserTests.mm */, @@ -4195,6 +4198,7 @@ 4B90467622C6FD6E000E2074 /* 68000ArithmeticTests.mm in Sources */, 4B7BC7F61F58F7D200D1B1B4 /* 6502Base.cpp in Sources */, 4B7BC7F51F58F27800D1B1B4 /* 6502AllRAM.cpp in Sources */, + 4BC5C3E022C994CD00795658 /* 68000MoveTests.mm in Sources */, 4B08A2751EE35D56008B7065 /* Z80InterruptTests.swift in Sources */, 4BFCA1241ECBDCB400AC40C1 /* AllRAMProcessor.cpp in Sources */, 4BBF49AF1ED2880200AB3669 /* FUSETests.swift in Sources */, diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme index 9c2dca9ce..cdac581d4 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme +++ b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme @@ -69,7 +69,7 @@ set_program({ + 0x4883 // EXT.W D3 + }); + + auto state = _machine->get_processor_state(); + state.data[3] = d3; + state.status = 0x13; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + XCTAssertEqual(4, _machine->get_cycle_count()); +} + +- (void)testEXTw_78 { + [self performEXTwd3:0x12345678]; + + const auto state = _machine->get_processor_state(); + XCTAssertEqual(state.data[3], 0x12340078); + XCTAssertEqual(state.status & Flag::ConditionCodes, Flag::Extend); +} + +- (void)testEXTw_00 { + [self performEXTwd3:0x12345600]; + + const auto state = _machine->get_processor_state(); + XCTAssertEqual(state.data[3], 0x12340000); + XCTAssertEqual(state.status & Flag::ConditionCodes, Flag::Extend | Flag::Zero); +} + +- (void)testEXTw_f0 { + [self performEXTwd3:0x123456f0]; + + const auto state = _machine->get_processor_state(); + XCTAssertEqual(state.data[3], 0x1234fff0); + XCTAssertEqual(state.status & Flag::ConditionCodes, Flag::Extend | Flag::Negative); +} + +- (void)testEXTl { + _machine->set_program({ + 0x48c3 // EXT.L D3 + }); + + auto state = _machine->get_processor_state(); + state.data[3] = 0x1234f6f0; + state.status = 0x13; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + XCTAssertEqual(4, _machine->get_cycle_count()); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.data[3], 0xfffff6f0); + XCTAssertEqual(state.status & Flag::ConditionCodes, Flag::Extend | Flag::Negative); +} + // MARK: MULS - (void)performMULSd1:(uint32_t)d1 d2:(uint32_t)d2 ccr:(uint8_t)ccr { diff --git a/OSBindings/Mac/Clock SignalTests/TestRunner68000.hpp b/OSBindings/Mac/Clock SignalTests/TestRunner68000.hpp index 7fa8a1585..756628be4 100644 --- a/OSBindings/Mac/Clock SignalTests/TestRunner68000.hpp +++ b/OSBindings/Mac/Clock SignalTests/TestRunner68000.hpp @@ -11,6 +11,7 @@ #include +#define LOG_TRACE #include "../../../Processors/68000/68000.hpp" using Flag = CPU::MC68000::Flag; @@ -132,7 +133,7 @@ class RAM68000: public CPU::MC68000::BusHandler { private: CPU::MC68000::Processor m68000_; - std::array ram_; + std::array ram_{}; int instructions_remaining_; HalfCycles duration_; bool has_run_ = false;