1
0
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:
Daniel Barber 2015-12-11 10:50:27 +01:00
parent 5f4c4db0ad
commit 9b62cdc774
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8

View File

@ -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;
}
}