Skip to content
This repository has been archived by the owner on Aug 30, 2024. It is now read-only.

Commit

Permalink
feat: remove env_log dep, set tests
Browse files Browse the repository at this point in the history
  • Loading branch information
julio4 committed Jul 16, 2024
1 parent a4f4129 commit 419ed0a
Show file tree
Hide file tree
Showing 10 changed files with 255 additions and 361 deletions.
221 changes: 0 additions & 221 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,3 @@ edition = "2021"

[dev-dependencies]
pretty_assertions = "1.4.0"

[dependencies]
env_logger = "0.11.3"
log = "0.4.21"
6 changes: 6 additions & 0 deletions src/interpreter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ mod vm;

/// This trait can be used to interpret a given program binary.
pub use vm::Interpretable;

// Cli interface
pub use vm::vm_interpret;

#[cfg(test)]
mod vm_tests;
27 changes: 24 additions & 3 deletions src/interpreter/register_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,39 @@ pub struct RegisterSet {
impl RegisterSet {
pub fn new() -> Self {
let mut registers = HashMap::new();
for reg in Register::iter() {
for reg in Register::iter_16() {
registers.insert(reg, 0);
}
Self { registers }
}

pub fn get(&self, reg: Register) -> u16 {
*self.registers.get(&reg).expect("Unknown register")
if reg.is_word_register() {
return *self.registers.get(&reg).unwrap();
}
let word_value = *self
.registers
.get(&reg.to_word_register())
.expect("Unknown register");
return if reg.is_low_byte() {
word_value & 0xFF
} else {
(word_value >> 8) & 0xFF
};
}

pub fn set(&mut self, reg: Register, value: u16) {
if let Some(val) = self.registers.get_mut(&reg) {
let word_reg = reg.to_word_register();
let reg_val = self.get(word_reg);
let mut value = value;
if reg.is_low_byte() {
value = (value & 0xFF) | (reg_val & 0xFF00);
}
if reg.is_high_byte() {
value = (value & 0xFF00) | (reg_val & 0xFF);
}

if let Some(val) = self.registers.get_mut(&word_reg) {
*val = value;
}
}
Expand Down
Loading

0 comments on commit 419ed0a

Please sign in to comment.