IN, OUT, XLAT, LEA, LDS, LES, ADC

This commit is contained in:
Joseph Ferano 2025-03-07 19:27:01 +07:00
parent 782ff93ace
commit 08ef7d901b

View File

@ -23,7 +23,14 @@ OpName :: enum {
PUSH, PUSH,
POP, POP,
XCHG, XCHG,
IN,
OUT,
XLAT,
LEA,
LDS,
LES,
ADD, ADD,
ADC,
SUB, SUB,
CMP, CMP,
JMP, JMP,
@ -204,6 +211,22 @@ instructions := [?]InstructionInfo {
reg_info = reg_second_middle, has_address = true, word_size = LastBit{}, has_flip = true}, reg_info = reg_second_middle, has_address = true, word_size = LastBit{}, has_flip = true},
{ opname = .XCHG, desc = "", mask = 0b11111000, encoding = 0b10010000, { opname = .XCHG, desc = "", mask = 0b11111000, encoding = 0b10010000,
reg_info = reg_first_last, uses_accumulator = true, word_size = Force{}, }, reg_info = reg_first_last, uses_accumulator = true, word_size = Force{}, },
{ opname = .IN, desc = "", mask = 0b11111110, encoding = 0b11100100,
has_data = true, word_size = LastBit{}, },
{ opname = .IN, desc = "", mask = 0b11111110, encoding = 0b11101100,
word_size = LastBit{}, },
{ opname = .OUT, desc = "", mask = 0b11111110, encoding = 0b11100110,
has_data = true, word_size = FourthBit{}, },
{ opname = .OUT, desc = "", mask = 0b11111110, encoding = 0b11101110,
word_size = LastBit{}, },
{ opname = .XLAT, desc = "", mask = 0b11111111, encoding = 0b11010111,
},
{ opname = .LEA, desc = "", mask = 0b11111111, encoding = 0b10001101,
has_address = true },
{ opname = .LDS, desc = "", mask = 0b11111111, encoding = 0b11000101,
has_address = true },
{ opname = .LES, desc = "", mask = 0b11111111, encoding = 0b11000100,
has_address = true },
{ opname = .TBD, desc = "Reg/memory with register to either", mask = 0b11000100, encoding = 0b00000000, { opname = .TBD, desc = "Reg/memory with register to either", mask = 0b11000100, encoding = 0b00000000,
opcode_id = .First, reg_info = reg_second_middle, has_address = true, word_size = LastBit{}, has_flip = true }, opcode_id = .First, reg_info = reg_second_middle, has_address = true, word_size = LastBit{}, has_flip = true },
{ opname = .TBD, desc = "Immediate to register/memory", mask = 0b11111100, encoding = 0b10000000, { opname = .TBD, desc = "Immediate to register/memory", mask = 0b11111100, encoding = 0b10000000,
@ -371,6 +394,7 @@ get_opname :: proc(b: u8) -> string {
name: string name: string
switch b & 0b00111000 >> 3 { switch b & 0b00111000 >> 3 {
case 0b000: name = "add" case 0b000: name = "add"
case 0b010: name = "adc"
case 0b101: name = "sub" case 0b101: name = "sub"
case 0b111: name = "cmp" case 0b111: name = "cmp"
} }