1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-05 10:28:58 +00:00

Disallow four illegal NBCD addressing modes.

This commit is contained in:
Thomas Harte 2022-04-19 09:59:02 -04:00
parent 19f7335926
commit 5de8fb0d08
2 changed files with 21 additions and 3 deletions

View File

@ -92,8 +92,26 @@ constexpr Operation Predecoder<model>::operation(OpT op) {
} }
template <Model model> template <Model model>
template <uint8_t operation, bool validate> Preinstruction Predecoder<model>::validated(Preinstruction original) { template <uint8_t op, bool validate> Preinstruction Predecoder<model>::validated(Preinstruction original) {
return original; if constexpr (!validate) {
return original;
}
switch(op) {
default: return original;
// NBCD: don't permit address registers
case OpT(Operation::NBCD):
switch(original.mode<0>()) {
default: return original;
case AddressingMode::AddressRegisterDirect:
case AddressingMode::ProgramCounterIndirectWithDisplacement:
case AddressingMode::ProgramCounterIndirectWithIndex8bitDisplacement:
case AddressingMode::ImmediateData:
return Preinstruction();
}
}
} }
/// Decodes the fields within an instruction and constructs a `Preinstruction`, given that the operation has already been /// Decodes the fields within an instruction and constructs a `Preinstruction`, given that the operation has already been

View File

@ -86,7 +86,7 @@ template <int index> NSString *operand(Preinstruction instruction) {
case Operation::ABCD: instruction = @"ABCD"; break; case Operation::ABCD: instruction = @"ABCD"; break;
case Operation::SBCD: instruction = @"SBCD"; break; case Operation::SBCD: instruction = @"SBCD"; break;
case Operation::NBCD: instruction = @"NBCD"; break; case Operation::NBCD: instruction = @"NBCD"; break;
case Operation::ADDb: instruction = @"ADD.b"; break; // case Operation::ADDb: instruction = @"ADD.b"; break;
// For now, skip any unmapped operations. // For now, skip any unmapped operations.
default: continue; default: continue;