diff --git a/InstructionSets/68k/Decoder.cpp b/InstructionSets/68k/Decoder.cpp index 99104859c..7bbc1a333 100644 --- a/InstructionSets/68k/Decoder.cpp +++ b/InstructionSets/68k/Decoder.cpp @@ -175,6 +175,24 @@ template Preinstruction Predecoder::validated return Preinstruction(); } + switch(original.mode<1>()) { + default: return original; + + case AddressingMode::ImmediateData: + case AddressingMode::ProgramCounterIndirectWithDisplacement: + case AddressingMode::ProgramCounterIndirectWithIndex8bitDisplacement: + case AddressingMode::None: + return Preinstruction(); + } + + // MOVE. + case OpT(Operation::MOVEb): case OpT(Operation::MOVEw): case OpT(Operation::MOVEl): + switch(original.mode<0>()) { + default: break; + case AddressingMode::None: + return Preinstruction(); + } + switch(original.mode<1>()) { default: return original; diff --git a/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm b/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm index 7a9d539f9..9f310ef1d 100644 --- a/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm +++ b/OSBindings/Mac/Clock SignalTests/m68kDecoderTests.mm @@ -112,6 +112,10 @@ template NSString *operand(Preinstruction instruction) { case Operation::SUBXw: instruction = @"SUBX.w"; break; case Operation::SUBXl: instruction = @"SUBX.l"; break; + case Operation::MOVEb: instruction = @"MOVE.b"; break; + case Operation::MOVEw: instruction = @"MOVE.w"; break; + case Operation::MOVEl: instruction = @"MOVE.l"; break; + // For now, skip any unmapped operations. default: continue; }