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

Add 6x 8086 aliases.

This commit is contained in:
Thomas Harte 2023-09-29 15:22:05 -04:00
parent ef5ee8cf94
commit f2732962d0
2 changed files with 82 additions and 35 deletions

View File

@ -199,72 +199,124 @@ std::pair<int, typename Decoder<model>::InstructionT> Decoder<model>::decode(con
#undef RegisterBlock
case 0x60:
RequiresMin(i80186);
Complete(PUSHA, None, None, data_size_);
if constexpr (model < Model::i80186) {
Displacement(JO, DataSize::Byte);
} else {
Complete(PUSHA, None, None, data_size_);
}
break;
case 0x61:
RequiresMin(i80186);
Complete(POPA, None, None, data_size_);
if constexpr (model < Model::i80186) {
Displacement(JNO, DataSize::Byte);
} else {
Complete(POPA, None, None, data_size_);
}
break;
case 0x62:
RequiresMin(i80186);
MemRegReg(BOUND, Reg_MemReg, data_size_);
if constexpr (model < Model::i80186) {
Displacement(JB, DataSize::Byte);
} else {
MemRegReg(BOUND, Reg_MemReg, data_size_);
}
break;
case 0x63:
RequiresMin(i80286);
MemRegReg(ARPL, MemReg_Reg, DataSize::Word);
if constexpr (model < Model::i80286) {
Displacement(JNB, DataSize::Byte);
} else {
MemRegReg(ARPL, MemReg_Reg, DataSize::Word);
}
break;
case 0x64:
RequiresMin(i80386);
segment_override_ = Source::FS;
if constexpr (model < Model::i80386) {
Displacement(JZ, DataSize::Byte);
} else {
RequiresMin(i80386);
segment_override_ = Source::FS;
}
break;
case 0x65:
if constexpr (model < Model::i80286) {
Displacement(JNZ, DataSize::Byte);
break;
}
RequiresMin(i80386);
segment_override_ = Source::GS;
break;
case 0x66:
if constexpr (model < Model::i80286) {
Displacement(JBE, DataSize::Byte);
break;
}
RequiresMin(i80386);
data_size_ = DataSize(int(default_data_size_) ^ int(DataSize::Word) ^ int(DataSize::DWord));
break;
case 0x67:
if constexpr (model < Model::i80286) {
Displacement(JNBE, DataSize::Byte);
break;
}
RequiresMin(i80386);
address_size_ = AddressSize(int(default_address_size_) ^ int(AddressSize::b16) ^ int(AddressSize::b32));
break;
case 0x68:
RequiresMin(i80286);
Immediate(PUSH, data_size_);
operation_size_ = data_size_;
if constexpr (model < Model::i80286) {
Displacement(JS, DataSize::Byte);
} else {
Immediate(PUSH, data_size_);
operation_size_ = data_size_;
}
break;
case 0x69:
RequiresMin(i80286);
MemRegReg(IMUL_3, Reg_MemReg, data_size_);
operand_size_ = data_size_;
if constexpr (model < Model::i80286) {
Displacement(JNS, DataSize::Byte);
} else {
MemRegReg(IMUL_3, Reg_MemReg, data_size_);
operand_size_ = data_size_;
}
break;
case 0x6a:
RequiresMin(i80286);
Immediate(PUSH, DataSize::Byte);
if constexpr (model < Model::i80286) {
Displacement(JP, DataSize::Byte);
} else {
Immediate(PUSH, DataSize::Byte);
}
break;
case 0x6b:
RequiresMin(i80286);
MemRegReg(IMUL_3, Reg_MemReg, data_size_);
operand_size_ = DataSize::Byte;
sign_extend_operand_ = true;
if constexpr (model < Model::i80286) {
Displacement(JNP, DataSize::Byte);
} else {
MemRegReg(IMUL_3, Reg_MemReg, data_size_);
operand_size_ = DataSize::Byte;
sign_extend_operand_ = true;
}
break;
case 0x6c: // INSB
RequiresMin(i80186);
Complete(INS, None, None, DataSize::Byte);
if constexpr (model < Model::i80186) {
Displacement(JL, DataSize::Byte);
} else {
Complete(INS, None, None, DataSize::Byte);
}
break;
case 0x6d: // INSW/INSD
RequiresMin(i80186);
Complete(INS, None, None, data_size_);
if constexpr (model < Model::i80186) {
Displacement(JNL, DataSize::Byte);
} else {
Complete(INS, None, None, data_size_);
}
break;
case 0x6e: // OUTSB
RequiresMin(i80186);
Complete(OUTS, None, None, DataSize::Byte);
if constexpr (model < Model::i80186) {
Displacement(JLE, DataSize::Byte);
} else {
Complete(OUTS, None, None, DataSize::Byte);
}
break;
case 0x6f: // OUTSW/OUSD
RequiresMin(i80186);
Complete(OUTS, None, None, data_size_);
if constexpr (model < Model::i80186) {
Displacement(JNLE, DataSize::Byte);
} else {
Complete(OUTS, None, None, data_size_);
}
break;
case 0x70: Displacement(JO, DataSize::Byte); break;

View File

@ -151,11 +151,6 @@ std::string to_string(
// Unofficial opcodes; ignored for now.
NSSet *ignoreList =
[NSSet setWithObjects:
@"60.json.gz", @"61.json.gz", @"62.json.gz", @"63.json.gz",
@"64.json.gz", @"65.json.gz", @"66.json.gz", @"67.json.gz",
@"68.json.gz", @"69.json.gz", @"6A.json.gz", @"6B.json.gz",
@"6C.json.gz", @"6D.json.gz", @"6E.json.gz", @"6F.json.gz",
@"82.0.json.gz", @"82.1.json.gz", @"82.2.json.gz", @"82.3.json.gz",
@"82.4.json.gz", @"82.5.json.gz", @"82.6.json.gz", @"82.7.json.gz",