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::fs::File;
use std::path::Path; use std::path::Path;
use std::io::prelude::*; use std::io::prelude::*;
use std::io;
use super::*; use super::*;
pub struct Cpu { pub struct Cpu {
@ -10,6 +11,7 @@ pub struct Cpu {
reg: Vec<u16>, reg: Vec<u16>,
pc: u16, pc: u16,
alu: Alu, alu: Alu,
inline: String,
} }
impl fmt::Debug for Cpu { impl fmt::Debug for Cpu {
@ -39,6 +41,7 @@ impl Cpu {
reg: vec![0; 8], reg: vec![0; 8],
pc: 0, pc: 0,
alu: Alu::new(), alu: Alu::new(),
inline: String::new(),
} }
} }
@ -280,7 +283,11 @@ impl Cpu {
if DEBUG { if DEBUG {
println!("{}: in {}", self.pc, self.mem[(self.pc + 1) as usize]); 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 21 => { //noop: no operation
if DEBUG { if DEBUG {
@ -367,4 +374,12 @@ impl Cpu {
self.pc += 1; self.pc += 1;
self.pc %= 32768; 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 cpu::Cpu;
use alu::Alu; use alu::Alu;
pub const DEBUG: bool = true; pub const DEBUG: bool = false;
fn main() { fn main() {
let mut cpu = Cpu::new(); let mut cpu = Cpu::new();

Loading…
Cancel
Save