Compare commits
2 Commits
0e4aebff13
...
86428f0263
Author | SHA1 | Date | |
---|---|---|---|
86428f0263 | |||
f67f6de0b6 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -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
|
||||||
|
8
Makefile
8
Makefile
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user