mirror of
https://github.com/TomHarte/CLK.git
synced 2024-10-04 01:57:54 +00:00
Don't permit byte move from address register.
This commit is contained in:
parent
de0432b317
commit
d21c67f237
@ -146,10 +146,12 @@ template <uint8_t op, bool validate> Preinstruction Predecoder<model>::validated
|
|||||||
// ADD.
|
// ADD.
|
||||||
case OpT(Operation::ADDb): case OpT(Operation::ADDw): case OpT(Operation::ADDl):
|
case OpT(Operation::ADDb): case OpT(Operation::ADDw): case OpT(Operation::ADDl):
|
||||||
case OpT(Operation::SUBb): case OpT(Operation::SUBw): case OpT(Operation::SUBl):
|
case OpT(Operation::SUBb): case OpT(Operation::SUBw): case OpT(Operation::SUBl):
|
||||||
|
case OpT(Operation::MOVEb): case OpT(Operation::MOVEw): case OpT(Operation::MOVEl):
|
||||||
switch(original.mode<0>()) {
|
switch(original.mode<0>()) {
|
||||||
default: break;
|
default: break;
|
||||||
case AddressingMode::AddressRegisterDirect:
|
case AddressingMode::AddressRegisterDirect:
|
||||||
if constexpr (op != OpT(Operation::ADDb) && op != OpT(Operation::SUBb)) {
|
// TODO: I'm going to need get-size-by-operation elsewhere; use that here when implemented.
|
||||||
|
if constexpr (op != OpT(Operation::ADDb) && op != OpT(Operation::SUBb) && op != OpT(Operation::MOVEb)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AddressingMode::None:
|
case AddressingMode::None:
|
||||||
@ -159,6 +161,7 @@ template <uint8_t op, bool validate> Preinstruction Predecoder<model>::validated
|
|||||||
switch(original.mode<1>()) {
|
switch(original.mode<1>()) {
|
||||||
default: return original;
|
default: return original;
|
||||||
|
|
||||||
|
case AddressingMode::AddressRegisterDirect:
|
||||||
case AddressingMode::ImmediateData:
|
case AddressingMode::ImmediateData:
|
||||||
case AddressingMode::ProgramCounterIndirectWithDisplacement:
|
case AddressingMode::ProgramCounterIndirectWithDisplacement:
|
||||||
case AddressingMode::ProgramCounterIndirectWithIndex8bitDisplacement:
|
case AddressingMode::ProgramCounterIndirectWithIndex8bitDisplacement:
|
||||||
@ -186,7 +189,6 @@ template <uint8_t op, bool validate> Preinstruction Predecoder<model>::validated
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MOVE.
|
// MOVE.
|
||||||
case OpT(Operation::MOVEb): case OpT(Operation::MOVEw): case OpT(Operation::MOVEl):
|
|
||||||
switch(original.mode<0>()) {
|
switch(original.mode<0>()) {
|
||||||
default: break;
|
default: break;
|
||||||
case AddressingMode::None:
|
case AddressingMode::None:
|
||||||
@ -428,7 +430,7 @@ template <uint8_t op, bool validate> Preinstruction Predecoder<model>::decode(ui
|
|||||||
return validated<op, validate>(
|
return validated<op, validate>(
|
||||||
Preinstruction(operation,
|
Preinstruction(operation,
|
||||||
combined_mode(ea_mode, ea_register), ea_register,
|
combined_mode(ea_mode, ea_register), ea_register,
|
||||||
combined_mode<false, false>(opmode, data_register), data_register));
|
combined_mode(opmode, data_register), data_register));
|
||||||
|
|
||||||
//
|
//
|
||||||
// MARK: RESET, NOP RTE, RTS, TRAPV, RTR
|
// MARK: RESET, NOP RTE, RTS, TRAPV, RTR
|
||||||
|
Loading…
Reference in New Issue
Block a user