basic vm struct

This commit is contained in:
vik
2024-12-31 22:40:45 -06:00
parent c6ebceccac
commit 41514990b5

View File

@ -1,11 +1,15 @@
#![allow(dead_code)]
mod mem;
use core::panic;
use std::env;
use std::fs;
use std::io;
use std::io::Read;
// use std::env;
// use std::fs;
// use std::io;
// use std::io::Read;
use std::u16;
use mem::Memory;
struct Registers {
r0: u16,
r1: u16,
@ -19,6 +23,13 @@ struct Registers {
cond: u16,
}
enum ConditionFlags {
// condition flags can only be set as nzp with a 1 in each position
POS = 1 << 0,
ZERO = 1 << 1,
NEG = 1 << 2,
}
impl Registers {
fn new() -> Registers {
Registers {
@ -48,6 +59,8 @@ impl Registers {
5 => &mut self.r5,
6 => &mut self.r6,
7 => &mut self.r7,
8 => &mut self.pc,
9 => &mut self.cond,
_ => panic!("not a register!"),
}
}
@ -59,9 +72,43 @@ impl Registers {
fn set_registers(&mut self, num : u16, value: u16) {
*self.return_register(num) = value;
}
fn update_cond(&mut self, num : u16) {
if *self.return_register(num) > 0 {
self.cond = ConditionFlags::POS as u16;
} else if *self.return_register(num) == 0 {
self.cond = ConditionFlags::ZERO as u16;
} else {
self.cond = ConditionFlags::NEG as u16
}
}
fn update_reg_and_cond(&mut self, num : u16, value: u16) {
self.set_registers(num, value);
self.update_cond(num);
}
}
enum State {
Stopped = 0,
Running,
}
struct VM {
memory: Memory,
registers: Registers,
state: State,
}
impl VM {
fn new() -> VM {
VM{
memory: Memory::new(),
registers: Registers::new(),
state: State::Stopped,
}
}
}