Browse Source

processor runs completely

master
Michael Preisach 8 years ago
parent
commit
aca4380e52
  1. 17
      src/cpu.rs
  2. 2
      src/main.rs

17
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<u16>,
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
}
}

2
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();

Loading…
Cancel
Save