hecate/src/lib.rs

70 lines
1.6 KiB
Rust
Raw Normal View History

2024-12-02 14:44:49 +00:00
mod cpu_trait;
pub use cpu_trait::{CpuTrait, DebugMode, RunMode};
#[wasm_bindgen]
impl WasmCpu {
#[wasm_bindgen(constructor)]
pub fn new() -> Self {
WasmCpu {
memory: [0; 64 * 1024],
registers: [0; 8],
ip: 0,
sp: 0xFFFF,
flags: 0,
verbose: false,
}
}
pub fn set_verbose(&mut self, verbose: bool) {
self.verbose = verbose;
}
pub fn load_memory(&mut self, memory: &[u8]) {
self.memory[..memory.len()].copy_from_slice(memory);
}
pub fn execute(&mut self, run_mode: RunMode) {
match run_mode {
RunMode::Run => self.run(),
RunMode::Debug(debug_mode) => self.debug(debug_mode),
RunMode::StepOver => self.step_over(),
RunMode::StepInto => self.step_into(),
RunMode::StepOut => self.step_out(),
RunMode::RunFor(cycles) => self.run_for(cycles),
}
}
fn run(&mut self) {
while self.ip < self.memory.len() as u16 {
self.step();
}
}
fn debug(&mut self, _debug_mode: DebugMode) {
// Implement debug functionality
}
fn run_for(&mut self, cycles: usize) {
for _ in 0..cycles {
self.step();
}
}
fn step_over(&mut self) {
self.step(); // Placeholder for step-over functionality
}
fn step_into(&mut self) {
self.step(); // Placeholder for step-into functionality
}
fn step_out(&mut self) {
self.step(); // Placeholder for step-out functionality
}
fn step(&mut self) {
// Fetch and execute instructions
}
}