diff --git a/README.md b/README.md index 4d0ffc5..3cda3dd 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # minix-8086-rs -minix-8086-rs is a Rust-based toolchain for analyzing and emulating 16-bit MINIX binaries. It includes: +minix-8086-rs is a Rust-based toolchain for analyzing and interpreting 16-bit 8086 binaries, made with the intention of interpreting binaries compiled for MINIX. + +It includes: - 📦 a.out Parser: Parses legacy MINIX executables. -- 🛠 8086 Disassembler: Converts 16-bit instructions into an IR. -- 💻 MINIX Emulator: Interprets and executes 8086 MINIX binaries in a simulated environment. +- 🛠 8086 Disassembler: Parses 16-bit instructions into an IR and prints them in a `objdump(1)`-style fasion. +- 💻 8086 Interpreter: Interprets the 8086 instructions, i.e., the MINIX binary. ## Usage @@ -20,19 +22,19 @@ cargo run -- --help CLI Options: ``` $ cargo run -- --help -Simple prgram to diasm and interpret Minix binaries - -Usage: minix-8086-rs [OPTIONS] - -Commands: - disasm Disassemble the binary into 8086 instructions - interpret Interpret the binary as 8086 Minix - help Print this message or the help of the given subcommand(s) - -Options: - -p, --path Path of the binary - -h, --help Print help - -V, --version Print version +Simple program to disassemble and interpret 8086 a.out compilates, e.g. such for MINIX + +Usage: minix-8086-rs [OPTIONS] + +Commands: + disasm Disassemble the binary into 8086 instructions + interpret Interpret the 8086 instructions + help Print this message or the help of the given subcommand(s) + +Options: + -p, --path Path of the binary + -h, --help Print help + -V, --version Print version ``` ## Examples @@ -50,7 +52,7 @@ cargo run -- interpret -p ./a.out ## Status -This project is under active development and primarily used by me to explore some Intel disassembly and learn some more Rust. +This project is under active development and primarily used by me to explore some Intel disassembly and learn some more Rust. Expect bugs and some missing features. @@ -58,4 +60,15 @@ Expect bugs and some missing features. For the implementation of all instructions I used the Intel "8086 16-BIT HMOS MICROPROCESSOR" Spec, as well as [this](http://www.mlsite.net/8086/8086_table.txt) overview of all Opcode variants used in conjunction with [this](http://www.mlsite.net/8086/) decoding matrix. - + +## FAQ + +#### Why hassle with interpretation and not just emulate 8086? +For once, this project stemmed from a university exercise about the 8086 instruction set and disassembly. +An interpreter was the logical (?) next step. +Maybe I add 8086 emulation some day. + +#### Why no `nom`? +There is no real reason, I just wanted to try to implement most parts myself, even if it meant more boilerplate code. +I used `nom` extensivly in the past and I just wanted to see what it would be like without that crate. +In hindsight, using `nom` would have been the cleaner option, but hey, something I only learned by not using `nom` for once. \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 66c87f2..c93e8da 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,12 @@ enum Command { /// Disassemble the binary into 8086 instructions Disasm, - /// Interpret the binary as 8086 Minix + /// Interpret the 8086 instructions Interpret, } -/// Simple prgram to diasm and interpret Minix binaries +/// Simple program to disassemble and interpret 8086 a.out compilates, e.g. +/// such for MINIX. #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args {