Compare commits

..

2 Commits

4 changed files with 19 additions and 8 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
/.idea/ /.idea/
/asm_files/*.bin /asm_files/*.bin
/8086_family_Users_Manual_1_.pdf /8086_family_Users_Manual_1_.pdf
/decoder8086

View File

@ -9,16 +9,16 @@ bin_files = $(patsubst %.asm,%.bin,$(asm_files))
all: decode asm_files all: decode asm_files
decode: decode.c decode.h lib.h decode: decoder8086.odin
$(CC) $(CFLAGS) $< -o $@ odin build decoder8086.odin -file
asm_files: $(bin_files) asm_files: $(bin_files)
%.bin: %.asm %.bin: %.asm
nasm $< -o $@ nasm $< -o $@
run: all run: all
./decode ./decode8086
clean: clean:
rm -vf *.so *.o decode $(bin_files) rm -vf *.so *.o decoder8086 $(bin_files)

View File

@ -29,7 +29,7 @@ registers := [8]Register {
main :: proc() { main :: proc() {
ax := registers[0] ax := registers[0]
ax.value.full = 52428 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 { if err != os.ERROR_NONE {
os.exit(1) os.exit(1)
} }
@ -45,18 +45,28 @@ main :: proc() {
// mov dx, bx // mov dx, bx
read_next := false read_next := false
src_dst := true
is_word := false
prev :u8 = 0
fmt.println("bits 16\n")
for b in data { for b in data {
if read_next { if read_next {
mod := (b & 0b11000000) >> 6 mod := (b & 0b11000000) >> 6
reg := (b & 0b00111000) >> 3 reg := (b & 0b00111000) >> 3
rm := b & 0b00000111 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 read_next = false
continue continue
} }
if b == 0b10001001 { if b == 0b10001001 {
read_next = true read_next = true
continue is_word = true
} else if b == 0b10001000 {
read_next = true
is_word = false
} }
prev = b
} }
} }

View File

@ -8,7 +8,7 @@ make asm_files > /dev/null
for ASM_BIN in asm_files/*.bin; for ASM_BIN in asm_files/*.bin;
do do
./decode "$ASM_BIN" > output.asm 2> /dev/null ./decoder8086 "$ASM_BIN" > output.asm 2> /dev/null
nasm output.asm -o output.bin 2> /dev/null nasm output.asm -o output.bin 2> /dev/null
ASM_FILE=${ASM_BIN%.*}.asm ASM_FILE=${ASM_BIN%.*}.asm
if [ ! -e output.bin ]; then if [ ! -e output.bin ]; then