From cf66d9d38dd05533b975b7bfd97c4aa8ddfc64e1 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 21 Apr 2022 20:36:04 -0400 Subject: [PATCH] Add failing tests for EOR, NOT, OR; disambiguate EOR vs CMP. --- InstructionSets/68k/Decoder.cpp | 19 ++++++++-------- .../Mac/Clock SignalTests/m68kDecoderTests.mm | 22 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/InstructionSets/68k/Decoder.cpp b/InstructionSets/68k/Decoder.cpp index df64ca689..28eb5ac25 100644 --- a/InstructionSets/68k/Decoder.cpp +++ b/InstructionSets/68k/Decoder.cpp @@ -177,11 +177,15 @@ template Preinstruction Predecoder::validated case SUBQb: case SUBQw: case SUBQl: case OpT(Operation::MOVEb): case OpT(Operation::MOVEw): case OpT(Operation::MOVEl): case OpT(Operation::MOVEAw): case OpT(Operation::MOVEAl): - case OpT(Operation::ANDb): case OpT(Operation::ANDw): case OpT(Operation::ANDl): { + case OpT(Operation::ANDb): case OpT(Operation::ANDw): case OpT(Operation::ANDl): + case OpT(Operation::EORb): case OpT(Operation::EORw): case OpT(Operation::EORl): + case OpT(Operation::ORb): case OpT(Operation::ORw): case OpT(Operation::ORl): + case OpT(Operation::NOTb): case OpT(Operation::NOTw): case OpT(Operation::NOTl): { // TODO: I'm going to need get-size-by-operation elsewhere; use that here when implemented. constexpr bool is_byte = op == OpT(Operation::ADDb) || op == OpT(Operation::SUBb) || op == OpT(Operation::MOVEb) || - op == ADDQb || op == SUBQb || op == OpT(Operation::ANDb); + op == ADDQb || op == SUBQb || op == OpT(Operation::ANDb) || op == OpT(Operation::EORb) || + op == OpT(Operation::ORb) || op == OpT(Operation::NOTb); switch(original.mode<0>()) { default: break; @@ -1163,14 +1167,11 @@ Preinstruction Predecoder::decodeB(uint16_t instruction) { case 0x0c0: Decode(Op::CMPAw); case 0x1c0: Decode(Op::CMPAl); - default: break; - } - - switch(instruction & 0x0c0) { // 4-100 (p204) - case 0x000: Decode(Op::EORb); - case 0x040: Decode(Op::EORw); - case 0x080: Decode(Op::EORl); + case 0x100: Decode(Op::EORb); + case 0x140: Decode(Op::EORw); + case 0x180: Decode(Op::EORl); + default: break; } diff --git a/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm b/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm index 403c93b51..4381ad5de 100644 --- a/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm +++ b/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm @@ -229,17 +229,17 @@ template NSString *operand(Preinstruction instruction, uint16_t opco case Operation::ANDw: instruction = @"AND.w"; break; case Operation::ANDl: instruction = @"AND.l"; break; -// case Operation::EORb: instruction = @"EOR.b"; break; -// case Operation::EORw: instruction = @"EOR.w"; break; -// case Operation::EORl: instruction = @"EOR.l"; break; -// -// case Operation::NOTb: instruction = @"NOT.b"; break; -// case Operation::NOTw: instruction = @"NOT.w"; break; -// case Operation::NOTl: instruction = @"NOT.l"; break; -// -// case Operation::ORb: instruction = @"OR.b"; break; -// case Operation::ORw: instruction = @"OR.w"; break; -// case Operation::ORl: instruction = @"OR.l"; break; + case Operation::EORb: instruction = @"EOR.b"; break; + case Operation::EORw: instruction = @"EOR.w"; break; + case Operation::EORl: instruction = @"EOR.l"; break; + + case Operation::NOTb: instruction = @"NOT.b"; break; + case Operation::NOTw: instruction = @"NOT.w"; break; + case Operation::NOTl: instruction = @"NOT.l"; break; + + case Operation::ORb: instruction = @"OR.b"; break; + case Operation::ORw: instruction = @"OR.w"; break; + case Operation::ORl: instruction = @"OR.l"; break; /* TODO: