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};
|
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() {
|
fn main() {
|
||||||
let mut input: Vec<u8> = vec![];
|
let mut input: Vec<u8> = vec![];
|
||||||
|
|
||||||
let mut counter: usize = 0;
|
let mut counter: usize = 0;
|
||||||
|
|
||||||
|
let mut oplength: usize;
|
||||||
|
|
||||||
io::stdin()
|
io::stdin()
|
||||||
.read_to_end(&mut input)
|
.read_to_end(&mut input)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -15,18 +50,7 @@ fn main() {
|
|||||||
|
|
||||||
while counter < input.len() {
|
while counter < input.len() {
|
||||||
// get the instruction
|
// get the instruction
|
||||||
let opcode = input[counter];
|
oplength = opcode(&input, &counter);
|
||||||
match opcode {
|
counter += oplength;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user