1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-30 22:29:56 +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 <uint8_t operation, bool validate> Preinstruction Predecoder<model>::validated(Preinstruction original) {
return original;
template <uint8_t op, bool validate> Preinstruction Predecoder<model>::validated(Preinstruction 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

View File

@ -86,7 +86,7 @@ template <int index> NSString *operand(Preinstruction instruction) {
case Operation::ABCD: instruction = @"ABCD"; break;
case Operation::SBCD: instruction = @"SBCD"; 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.
default: continue;