commit
c00c806c7f
1 changed files with 90 additions and 0 deletions
@ -0,0 +1,90 @@ |
|||
use std::prelude; |
|||
use std::ops::*; |
|||
|
|||
fn main() { |
|||
println!("Hello World!"); |
|||
let mut s = Vec::new(); |
|||
s.push(9); |
|||
println!("{}",s.pop().unwrap()); |
|||
} |
|||
|
|||
struct Cpu { |
|||
stack: Vec<u16>, |
|||
mem: Vec<u16>, |
|||
reg: Vec<u16>, |
|||
pc: Number, |
|||
} |
|||
|
|||
impl Cpu { |
|||
fn new() -> Cpu { |
|||
Cpu { |
|||
stack: Vec::new(), |
|||
mem: Vec::with_capacity(32768), |
|||
reg: Vec::with_capacity(8), |
|||
pc: Number::new(), |
|||
} |
|||
} |
|||
} |
|||
|
|||
//15Bit numbers for the ALU
|
|||
#[derive(Eq, PartialEq, Copy, Clone)] |
|||
struct Number { |
|||
value: u16, |
|||
} |
|||
|
|||
//Operator Overloading - Div not needed since it works without modification.
|
|||
impl Add for Number { |
|||
type Output = Number; |
|||
fn add(self, other: Number) -> Number { |
|||
Number { |
|||
value: (self.value + other.value) % 32768, |
|||
} |
|||
} |
|||
} |
|||
|
|||
impl Sub for Number { |
|||
type Output = Number; |
|||
fn sub(self, other: Number) -> Number { |
|||
Number { |
|||
value: (self.value - other.value) % 32768, |
|||
} |
|||
} |
|||
} |
|||
|
|||
impl Mul for Number { |
|||
type Output = Number; |
|||
fn mul(self, other: Number) -> Number { |
|||
Number { |
|||
value: (self.value * other.value) % 32768, |
|||
} |
|||
} |
|||
} |
|||
|
|||
impl Not for Number { |
|||
type Output = Number; |
|||
fn not(self) -> Number { |
|||
Number { |
|||
value: (!self.value) % 32768, |
|||
} |
|||
} |
|||
} |
|||
|
|||
impl Number { |
|||
//little Endian ->
|
|||
fn new() -> Number { |
|||
Number { |
|||
value: 0, |
|||
} |
|||
} |
|||
fn get_first_byte(&self) -> u8 { |
|||
(self.value & 0xFF) as u8 |
|||
} |
|||
fn get_second_byte(&self) -> u8 { |
|||
((self.value >> 8) & 0x7F) as u8 |
|||
} |
|||
fn set_bytes(&mut self, first: u8, second: u8) { |
|||
let mut newval:u16 = (second & 0x7F) as u16; |
|||
newval <<= 8; |
|||
self.value = newval + (first as u16); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue