From 9b62cdc7743e03714cbf7fa996ab802cad6d349b Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Fri, 11 Dec 2015 10:50:27 +0100 Subject: [PATCH] WIP: Split out opcode exec into function This is not quite working yet! --- src/main.rs | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index b151264..ab2d112 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,45 @@ use std::io::{self, Read}; +fn opcode(input: &Vec, 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 = 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; } }