Compare commits
No commits in common. "86428f026382b80ed2a7eb7a88ec8202e02606b0" and "0e4aebff135f123aa3a403524fb662f2e1ab68c0" have entirely different histories.
86428f0263
...
0e4aebff13
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,4 +2,3 @@
|
|||||||
/.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: decoder8086.odin
|
decode: decode.c decode.h lib.h
|
||||||
odin build decoder8086.odin -file
|
$(CC) $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
asm_files: $(bin_files)
|
asm_files: $(bin_files)
|
||||||
%.bin: %.asm
|
%.bin: %.asm
|
||||||
nasm $< -o $@
|
nasm $< -o $@
|
||||||
|
|
||||||
run: all
|
run: all
|
||||||
./decode8086
|
./decode
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -vf *.so *.o decoder8086 $(bin_files)
|
rm -vf *.so *.o decode $(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(len(os.args) > 1 ? os.args[1] : "./asm_files/01-01-38.bin")
|
f,err := os.open("./asm_files/01-01-38.bin")
|
||||||
if err != os.ERROR_NONE {
|
if err != os.ERROR_NONE {
|
||||||
os.exit(1)
|
os.exit(1)
|
||||||
}
|
}
|
||||||
@ -45,28 +45,18 @@ 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
|
||||||
src_name := is_word ? registers[reg].fullname : registers[reg].bytename
|
fmt.printfln("mov %s, %s", registers[rm].fullname, registers[reg].fullname)
|
||||||
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
|
||||||
is_word = true
|
continue
|
||||||
} 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
|
||||||
./decoder8086 "$ASM_BIN" > output.asm 2> /dev/null
|
./decode "$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