diff --git a/decoder8086.odin b/decoder8086.odin index e4d3ba5..488dddd 100644 --- a/decoder8086.odin +++ b/decoder8086.odin @@ -29,7 +29,7 @@ registers := [8]Register { main :: proc() { ax := registers[0] ax.value.full = 52428 - f,err := os.open("./asm_files/01-01-38.bin") + f,err := os.open(len(os.args) > 1 ? os.args[1] : "./asm_files/01-01-38.bin") if err != os.ERROR_NONE { os.exit(1) } @@ -45,18 +45,28 @@ main :: proc() { // mov dx, bx read_next := false + src_dst := true + is_word := false + prev :u8 = 0 + fmt.println("bits 16\n") for b in data { if read_next { mod := (b & 0b11000000) >> 6 reg := (b & 0b00111000) >> 3 rm := b & 0b00000111 - fmt.printfln("mov %s, %s", registers[rm].fullname, registers[reg].fullname) + src_name := is_word ? registers[reg].fullname : registers[reg].bytename + dst_name := is_word ? registers[rm].fullname : registers[rm].bytename + fmt.printfln("mov %s, %s ;; %b %b", dst_name, src_name, prev, b) read_next = false continue } if b == 0b10001001 { read_next = true - continue + is_word = true + } else if b == 0b10001000 { + read_next = true + is_word = false } + prev = b } }