From 86c325c4ece4cd90c7e40a802edb752c2be7b7c7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 28 Jun 2019 13:41:37 -0400 Subject: [PATCH] Imports MOVEA tests. --- .../Mac/Clock SignalTests/68000Tests.mm | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index d6d78f3a8..139141a41 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -3626,6 +3626,76 @@ class CPU::MC68000::ProcessorStorageTests { XCTAssertEqual(36, _machine->get_cycle_count()); } +// MARK: MOVEA + +- (void)testMOVEAl_An { + _machine->set_program({ + 0x244a // MOVEA.l A2, A2 + }); + auto state = _machine->get_processor_state(); + state.address[2] = 0xffffffff; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.address[2], 0xffffffff); + XCTAssertEqual(state.status & Flag::ConditionCodes, 0); + XCTAssertEqual(4, _machine->get_cycle_count()); +} + +- (void)testMOVEAw_Dn_positive { + _machine->set_program({ + 0x3442 // MOVEA.w D2, A2 + }); + auto state = _machine->get_processor_state(); + state.address[2] = 0xffffffff; + state.data[2] = 0x12345678; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.address[2], 0x00005678); + XCTAssertEqual(state.data[2], 0x12345678); + XCTAssertEqual(state.status & Flag::ConditionCodes, 0); + XCTAssertEqual(4, _machine->get_cycle_count()); +} + +- (void)testMOVEAw_Dn_negative { + _machine->set_program({ + 0x3442 // MOVEA.w D2, A2 + }); + auto state = _machine->get_processor_state(); + state.address[2] = 0xffffffff; + state.data[2] = 0x12348756; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.address[2], 0xffff8756); + XCTAssertEqual(state.data[2], 0x12348756); + XCTAssertEqual(state.status & Flag::ConditionCodes, 0); + XCTAssertEqual(4, _machine->get_cycle_count()); +} + +- (void)testMOVEAl_Imm { + _machine->set_program({ + 0x247c, 0x0000, 0x0001 // MOVEA.L #$1, A2 + }); + auto state = _machine->get_processor_state(); + state.address[2] = 0xffffffff; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.address[2], 1); + XCTAssertEqual(state.status & Flag::ConditionCodes, 0); + XCTAssertEqual(12, _machine->get_cycle_count()); +} + // MARK: MOVEP - (void)testMOVEPw_toDn {