1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-25 18:30:07 +00:00

Decode CAS.

This commit is contained in:
Thomas Harte 2022-10-28 13:57:00 -04:00
parent 2b220659dd
commit 85df54ee7d
4 changed files with 151 additions and 130 deletions

View File

@ -569,6 +569,12 @@ template <typename Predecoder<model>::OpT op> uint32_t Predecoder<model>::invali
Dn | PreDec,
Dn | PreDec
>::value;
case OpT(Operation::CASb): case OpT(Operation::CASw): case OpT(Operation::CASl):
return ~TwoOperandMask<
Ext,
Ind | PostInc | PreDec | d16An | d8AnXn | XXXw | XXXl
>::value;
}
return InvalidOperands;
@ -1155,6 +1161,17 @@ template <typename Predecoder<model>::OpT op, bool validate> Preinstruction Pred
Condition::True, 1);
}
//
// MARK: CAS
//
// b0b2 and b3b5: an effective address.
// There is also an immedate operand describing relevant registers.
//
case OpT(Operation::CASb): case OpT(Operation::CASw): case OpT(Operation::CASl):
return validated<op, validate>(
AddressingMode::ExtensionWord, 0,
combined_mode(ea_mode, ea_register), ea_register);
//
// MARK: DIVl
//
@ -1244,9 +1261,9 @@ Preinstruction Predecoder<model>::decode0(uint16_t instruction) {
case 0x6c0: DecodeReq(model == Model::M68020, Op::CALLM);
// 4-67 (p171)
// case 0xac0: DecodeReq(model >= Model::M68020, Op::CASb);
// case 0xcc0: DecodeReq(model >= Model::M68020, Op::CASw);
// case 0xec0: DecodeReq(model >= Model::M68020, Op::CASl);
case 0xac0: DecodeReq(model >= Model::M68020, Op::CASb);
case 0xcc0: DecodeReq(model >= Model::M68020, Op::CASw);
case 0xec0: DecodeReq(model >= Model::M68020, Op::CASl);
// 4-72 (p176)
// case 0x0c0: DecodeReq(model >= Model::M68020, Op::CHK2b);

View File

@ -153,6 +153,10 @@ const char *_to_string(Operation operation, bool is_quick) {
case Operation::BSRl:
case Operation::BSRw: return "BSR";
case Operation::CASb: return "CAS.b";
case Operation::CASw: return "CAS.w";
case Operation::CASl: return "CAS.l";
case Operation::CLRb: return "CLR.b";
case Operation::CLRw: return "CLR.w";
case Operation::CLRl: return "CLR.l";

View File

@ -2767,48 +2767,48 @@
"0acd": "None",
"0ace": "None",
"0acf": "None",
"0ad0": "None",
"0ad1": "None",
"0ad2": "None",
"0ad3": "None",
"0ad4": "None",
"0ad5": "None",
"0ad6": "None",
"0ad7": "None",
"0ad8": "None",
"0ad9": "None",
"0ada": "None",
"0adb": "None",
"0adc": "None",
"0add": "None",
"0ade": "None",
"0adf": "None",
"0ae0": "None",
"0ae1": "None",
"0ae2": "None",
"0ae3": "None",
"0ae4": "None",
"0ae5": "None",
"0ae6": "None",
"0ae7": "None",
"0ae8": "None",
"0ae9": "None",
"0aea": "None",
"0aeb": "None",
"0aec": "None",
"0aed": "None",
"0aee": "None",
"0aef": "None",
"0af0": "None",
"0af1": "None",
"0af2": "None",
"0af3": "None",
"0af4": "None",
"0af5": "None",
"0af6": "None",
"0af7": "None",
"0af8": "None",
"0af9": "None",
"0ad0": "CAS.b #, (A0)",
"0ad1": "CAS.b #, (A1)",
"0ad2": "CAS.b #, (A2)",
"0ad3": "CAS.b #, (A3)",
"0ad4": "CAS.b #, (A4)",
"0ad5": "CAS.b #, (A5)",
"0ad6": "CAS.b #, (A6)",
"0ad7": "CAS.b #, (A7)",
"0ad8": "CAS.b #, (A0)+",
"0ad9": "CAS.b #, (A1)+",
"0ada": "CAS.b #, (A2)+",
"0adb": "CAS.b #, (A3)+",
"0adc": "CAS.b #, (A4)+",
"0add": "CAS.b #, (A5)+",
"0ade": "CAS.b #, (A6)+",
"0adf": "CAS.b #, (A7)+",
"0ae0": "CAS.b #, -(A0)",
"0ae1": "CAS.b #, -(A1)",
"0ae2": "CAS.b #, -(A2)",
"0ae3": "CAS.b #, -(A3)",
"0ae4": "CAS.b #, -(A4)",
"0ae5": "CAS.b #, -(A5)",
"0ae6": "CAS.b #, -(A6)",
"0ae7": "CAS.b #, -(A7)",
"0ae8": "CAS.b #, (d16, A0)",
"0ae9": "CAS.b #, (d16, A1)",
"0aea": "CAS.b #, (d16, A2)",
"0aeb": "CAS.b #, (d16, A3)",
"0aec": "CAS.b #, (d16, A4)",
"0aed": "CAS.b #, (d16, A5)",
"0aee": "CAS.b #, (d16, A6)",
"0aef": "CAS.b #, (d16, A7)",
"0af0": "CAS.b #, (d8, A0, Xn)",
"0af1": "CAS.b #, (d8, A1, Xn)",
"0af2": "CAS.b #, (d8, A2, Xn)",
"0af3": "CAS.b #, (d8, A3, Xn)",
"0af4": "CAS.b #, (d8, A4, Xn)",
"0af5": "CAS.b #, (d8, A5, Xn)",
"0af6": "CAS.b #, (d8, A6, Xn)",
"0af7": "CAS.b #, (d8, A7, Xn)",
"0af8": "CAS.b #, (xxx).w",
"0af9": "CAS.b #, (xxx).l",
"0afa": "None",
"0afb": "None",
"0afc": "None",
@ -3279,48 +3279,48 @@
"0ccd": "None",
"0cce": "None",
"0ccf": "None",
"0cd0": "None",
"0cd1": "None",
"0cd2": "None",
"0cd3": "None",
"0cd4": "None",
"0cd5": "None",
"0cd6": "None",
"0cd7": "None",
"0cd8": "None",
"0cd9": "None",
"0cda": "None",
"0cdb": "None",
"0cdc": "None",
"0cdd": "None",
"0cde": "None",
"0cdf": "None",
"0ce0": "None",
"0ce1": "None",
"0ce2": "None",
"0ce3": "None",
"0ce4": "None",
"0ce5": "None",
"0ce6": "None",
"0ce7": "None",
"0ce8": "None",
"0ce9": "None",
"0cea": "None",
"0ceb": "None",
"0cec": "None",
"0ced": "None",
"0cee": "None",
"0cef": "None",
"0cf0": "None",
"0cf1": "None",
"0cf2": "None",
"0cf3": "None",
"0cf4": "None",
"0cf5": "None",
"0cf6": "None",
"0cf7": "None",
"0cf8": "None",
"0cf9": "None",
"0cd0": "CAS.w #, (A0)",
"0cd1": "CAS.w #, (A1)",
"0cd2": "CAS.w #, (A2)",
"0cd3": "CAS.w #, (A3)",
"0cd4": "CAS.w #, (A4)",
"0cd5": "CAS.w #, (A5)",
"0cd6": "CAS.w #, (A6)",
"0cd7": "CAS.w #, (A7)",
"0cd8": "CAS.w #, (A0)+",
"0cd9": "CAS.w #, (A1)+",
"0cda": "CAS.w #, (A2)+",
"0cdb": "CAS.w #, (A3)+",
"0cdc": "CAS.w #, (A4)+",
"0cdd": "CAS.w #, (A5)+",
"0cde": "CAS.w #, (A6)+",
"0cdf": "CAS.w #, (A7)+",
"0ce0": "CAS.w #, -(A0)",
"0ce1": "CAS.w #, -(A1)",
"0ce2": "CAS.w #, -(A2)",
"0ce3": "CAS.w #, -(A3)",
"0ce4": "CAS.w #, -(A4)",
"0ce5": "CAS.w #, -(A5)",
"0ce6": "CAS.w #, -(A6)",
"0ce7": "CAS.w #, -(A7)",
"0ce8": "CAS.w #, (d16, A0)",
"0ce9": "CAS.w #, (d16, A1)",
"0cea": "CAS.w #, (d16, A2)",
"0ceb": "CAS.w #, (d16, A3)",
"0cec": "CAS.w #, (d16, A4)",
"0ced": "CAS.w #, (d16, A5)",
"0cee": "CAS.w #, (d16, A6)",
"0cef": "CAS.w #, (d16, A7)",
"0cf0": "CAS.w #, (d8, A0, Xn)",
"0cf1": "CAS.w #, (d8, A1, Xn)",
"0cf2": "CAS.w #, (d8, A2, Xn)",
"0cf3": "CAS.w #, (d8, A3, Xn)",
"0cf4": "CAS.w #, (d8, A4, Xn)",
"0cf5": "CAS.w #, (d8, A5, Xn)",
"0cf6": "CAS.w #, (d8, A6, Xn)",
"0cf7": "CAS.w #, (d8, A7, Xn)",
"0cf8": "CAS.w #, (xxx).w",
"0cf9": "CAS.w #, (xxx).l",
"0cfa": "None",
"0cfb": "None",
"0cfc": "None",
@ -3791,48 +3791,48 @@
"0ecd": "None",
"0ece": "None",
"0ecf": "None",
"0ed0": "None",
"0ed1": "None",
"0ed2": "None",
"0ed3": "None",
"0ed4": "None",
"0ed5": "None",
"0ed6": "None",
"0ed7": "None",
"0ed8": "None",
"0ed9": "None",
"0eda": "None",
"0edb": "None",
"0edc": "None",
"0edd": "None",
"0ede": "None",
"0edf": "None",
"0ee0": "None",
"0ee1": "None",
"0ee2": "None",
"0ee3": "None",
"0ee4": "None",
"0ee5": "None",
"0ee6": "None",
"0ee7": "None",
"0ee8": "None",
"0ee9": "None",
"0eea": "None",
"0eeb": "None",
"0eec": "None",
"0eed": "None",
"0eee": "None",
"0eef": "None",
"0ef0": "None",
"0ef1": "None",
"0ef2": "None",
"0ef3": "None",
"0ef4": "None",
"0ef5": "None",
"0ef6": "None",
"0ef7": "None",
"0ef8": "None",
"0ef9": "None",
"0ed0": "CAS.l #, (A0)",
"0ed1": "CAS.l #, (A1)",
"0ed2": "CAS.l #, (A2)",
"0ed3": "CAS.l #, (A3)",
"0ed4": "CAS.l #, (A4)",
"0ed5": "CAS.l #, (A5)",
"0ed6": "CAS.l #, (A6)",
"0ed7": "CAS.l #, (A7)",
"0ed8": "CAS.l #, (A0)+",
"0ed9": "CAS.l #, (A1)+",
"0eda": "CAS.l #, (A2)+",
"0edb": "CAS.l #, (A3)+",
"0edc": "CAS.l #, (A4)+",
"0edd": "CAS.l #, (A5)+",
"0ede": "CAS.l #, (A6)+",
"0edf": "CAS.l #, (A7)+",
"0ee0": "CAS.l #, -(A0)",
"0ee1": "CAS.l #, -(A1)",
"0ee2": "CAS.l #, -(A2)",
"0ee3": "CAS.l #, -(A3)",
"0ee4": "CAS.l #, -(A4)",
"0ee5": "CAS.l #, -(A5)",
"0ee6": "CAS.l #, -(A6)",
"0ee7": "CAS.l #, -(A7)",
"0ee8": "CAS.l #, (d16, A0)",
"0ee9": "CAS.l #, (d16, A1)",
"0eea": "CAS.l #, (d16, A2)",
"0eeb": "CAS.l #, (d16, A3)",
"0eec": "CAS.l #, (d16, A4)",
"0eed": "CAS.l #, (d16, A5)",
"0eee": "CAS.l #, (d16, A6)",
"0eef": "CAS.l #, (d16, A7)",
"0ef0": "CAS.l #, (d8, A0, Xn)",
"0ef1": "CAS.l #, (d8, A1, Xn)",
"0ef2": "CAS.l #, (d8, A2, Xn)",
"0ef3": "CAS.l #, (d8, A3, Xn)",
"0ef4": "CAS.l #, (d8, A4, Xn)",
"0ef5": "CAS.l #, (d8, A5, Xn)",
"0ef6": "CAS.l #, (d8, A6, Xn)",
"0ef7": "CAS.l #, (d8, A7, Xn)",
"0ef8": "CAS.l #, (xxx).w",
"0ef9": "CAS.l #, (xxx).l",
"0efa": "None",
"0efb": "None",
"0efc": "None",

View File

@ -83,7 +83,7 @@ template <Model model> void test(NSString *filename, Class cls) {
*/
- (void)test68020 {
generate<Model::M68020>();
// generate<Model::M68020>();
test<Model::M68020>(@"68020ops", [self class]);
}