From 6e9a4a48f715b9cc2b430fcc1658f255f6e125c8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 28 Jun 2019 22:56:35 -0400 Subject: [PATCH] Imports TAS tests. --- .../Clock SignalTests/68000ArithmeticTests.mm | 2 +- .../Clock SignalTests/68000BitwiseTests.mm | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000ArithmeticTests.mm b/OSBindings/Mac/Clock SignalTests/68000ArithmeticTests.mm index afc24d56e..3d639ce06 100644 --- a/OSBindings/Mac/Clock SignalTests/68000ArithmeticTests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000ArithmeticTests.mm @@ -214,7 +214,7 @@ state = _machine->get_processor_state(); XCTAssertEqual(state.data[2], 0x7D0); - XCTAssertEqual(20, _machine->get_cycle_count()); + XCTAssertEqual(4, _machine->get_cycle_count()); } - (void)testADDl_DnPostInc { diff --git a/OSBindings/Mac/Clock SignalTests/68000BitwiseTests.mm b/OSBindings/Mac/Clock SignalTests/68000BitwiseTests.mm index e30aa8609..b05717c07 100644 --- a/OSBindings/Mac/Clock SignalTests/68000BitwiseTests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000BitwiseTests.mm @@ -932,4 +932,48 @@ // XCTAssertEqual(34, _machine->get_cycle_count()); } +// MARK: TAS + +- (void)performTASDnd0:(uint32_t)d0 expectedCCR:(uint16_t)ccr { + _machine->set_program({ + 0x4ac0 // TAS D0 + }); + + auto state = _machine->get_processor_state(); + state.data[0] = d0; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.status & Flag::ConditionCodes, ccr); + XCTAssertEqual(4, _machine->get_cycle_count()); +} + +- (void)testTAS_Dn_unset { + [self performTASDnd0:0x12345678 expectedCCR:0]; +} + +- (void)testTAS_Dn_set { + [self performTASDnd0:0x123456f0 expectedCCR:Flag::Negative]; +} + +- (void)testTAS_XXXl { + _machine->set_program({ + 0x4af9, 0x0000, 0x3000 // TAS ($3000).l + }); + *_machine->ram_at(0x3000) = 0x1100; + + auto state = _machine->get_processor_state(); + state.status |= Flag::ConditionCodes; + + _machine->set_processor_state(state); + _machine->run_for_instructions(1); + + state = _machine->get_processor_state(); + XCTAssertEqual(state.status & Flag::ConditionCodes, Flag::Extend); + XCTAssertEqual(*_machine->ram_at(0x3000), 0x9100); + XCTAssertEqual(22, _machine->get_cycle_count()); +} + @end