mirror of
https://github.com/danbee/8080
synced 2025-03-04 08:39:07 +00:00
WIP: Split out opcode exec into function
This is not quite working yet!
This commit is contained in:
parent
5f4c4db0ad
commit
9b62cdc774
50
src/main.rs
50
src/main.rs
@ -1,10 +1,45 @@
|
||||
use std::io::{self, Read};
|
||||
|
||||
fn opcode(input: &Vec<u8>, counter: &usize) -> usize {
|
||||
let size: usize;
|
||||
|
||||
let opcode = input[counter];
|
||||
|
||||
match opcode {
|
||||
0x00 => { println!("NOP"); size = 1 },
|
||||
0x21 => {
|
||||
println!("LXI ${:x}{:x}", input[counter + 2], input[counter + 1]);
|
||||
size = 3;
|
||||
},
|
||||
0x32 => {
|
||||
println!("STA ${:x}{:x}", input[counter + 2], input[counter + 1]);
|
||||
size = 3;
|
||||
},
|
||||
0x3e => {
|
||||
println!("MVI A,#0x{:x}", input[counter + 1]);
|
||||
size = 2;
|
||||
},
|
||||
0xc3 => {
|
||||
println!("JMP ${:x}{:x}", input[counter + 2], input[counter + 1]);
|
||||
size = 3;
|
||||
},
|
||||
0xc5 => { println!("PUSH B"); size = 1 },
|
||||
0xd5 => { println!("PUSH D"); size = 1},
|
||||
0xe5 => { println!("PUSH H"); size = 1},
|
||||
0xf5 => { println!("PUSH PSW"); size = 1},
|
||||
_ => { println!("{:x}", opcode); size = 1},
|
||||
}
|
||||
|
||||
size
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut input: Vec<u8> = vec![];
|
||||
|
||||
let mut counter: usize = 0;
|
||||
|
||||
let mut oplength: usize;
|
||||
|
||||
io::stdin()
|
||||
.read_to_end(&mut input)
|
||||
.unwrap();
|
||||
@ -15,18 +50,7 @@ fn main() {
|
||||
|
||||
while counter < input.len() {
|
||||
// get the instruction
|
||||
let opcode = input[counter];
|
||||
match opcode {
|
||||
0x00 => println!("NOP"),
|
||||
0xc3 => {
|
||||
counter += 1;
|
||||
let low = input[counter];
|
||||
counter += 1;
|
||||
let high = input[counter];
|
||||
println!("JMP ${:x}{:x}", high, low);
|
||||
}
|
||||
_ => println!("{:x}", opcode),
|
||||
}
|
||||
counter += 1;
|
||||
oplength = opcode(&input, &counter);
|
||||
counter += oplength;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user