From c00c806c7fe248d006dfe44a7925ce1e969a7a30 Mon Sep 17 00:00:00 2001 From: Michael Preisach Date: Tue, 22 May 2018 01:11:21 +0200 Subject: [PATCH] basic definition of data structure --- src/main.rs | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/main.rs diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..09980a0 --- /dev/null +++ b/src/main.rs @@ -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, + mem: Vec, + reg: Vec, + 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); + } +}