diff --git a/src/cpu.rs b/src/cpu.rs index 24e5387..1593f06 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -2,6 +2,7 @@ use std::fmt; use std::fs::File; use std::path::Path; use std::io::prelude::*; +use std::io; use super::*; pub struct Cpu { @@ -10,6 +11,7 @@ pub struct Cpu { reg: Vec, pc: u16, alu: Alu, + inline: String, } impl fmt::Debug for Cpu { @@ -39,6 +41,7 @@ impl Cpu { reg: vec![0; 8], pc: 0, alu: Alu::new(), + inline: String::new(), } } @@ -280,7 +283,11 @@ impl Cpu { if DEBUG { println!("{}: in {}", self.pc, self.mem[(self.pc + 1) as usize]); } - running = false; + self.inc_pc(); + let reg = self.readmem(self.pc).unwrap(); + let val = self.input() as u16; + self.write(reg, val)?; + self.inc_pc(); }, 21 => { //noop: no operation if DEBUG { @@ -367,4 +374,12 @@ impl Cpu { self.pc += 1; self.pc %= 32768; } + + fn input(&mut self) -> u8 { + if self.inline.is_empty() { + let stdin = io::stdin(); + stdin.read_line(&mut self.inline); + } + self.inline.remove(0) as u8 + } } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 15f6f7b..205a499 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ mod alu; use cpu::Cpu; use alu::Alu; -pub const DEBUG: bool = true; +pub const DEBUG: bool = false; fn main() { let mut cpu = Cpu::new();