implement HALT trap routine
This commit is contained in:
parent
6fe7dffb4d
commit
928afa6de8
@ -118,7 +118,7 @@ fn op_trap(vm: &mut VM, instr: u16) {
|
|||||||
0x22 => todo!("PUTS"),
|
0x22 => todo!("PUTS"),
|
||||||
0x23 => todo!("IN"),
|
0x23 => todo!("IN"),
|
||||||
0x24 => todo!("PUTSP"),
|
0x24 => todo!("PUTSP"),
|
||||||
0x25 => todo!("HALT"),
|
0x25 => vm.running = false,
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +138,7 @@ impl Memory {
|
|||||||
pub struct VM {
|
pub struct VM {
|
||||||
mem: Memory,
|
mem: Memory,
|
||||||
registers: Registers,
|
registers: Registers,
|
||||||
|
running: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VM {
|
impl VM {
|
||||||
@ -145,6 +146,7 @@ impl VM {
|
|||||||
VM {
|
VM {
|
||||||
mem: Memory::new(),
|
mem: Memory::new(),
|
||||||
registers: Registers::new(),
|
registers: Registers::new(),
|
||||||
|
running: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,9 +189,9 @@ impl VM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn execute(&mut self) {
|
pub fn execute(&mut self) {
|
||||||
let mut running: bool = true;
|
self.running = true;
|
||||||
|
|
||||||
while running {
|
while self.running {
|
||||||
let instr = self.mem.get_mem(self.registers.pc);
|
let instr = self.mem.get_mem(self.registers.pc);
|
||||||
|
|
||||||
// NOTE
|
// NOTE
|
||||||
@ -197,7 +199,7 @@ impl VM {
|
|||||||
|
|
||||||
// disallow reading past memory bounds
|
// disallow reading past memory bounds
|
||||||
if self.registers.pc as usize == MEM_SIZE - 1 {
|
if self.registers.pc as usize == MEM_SIZE - 1 {
|
||||||
running = false
|
self.running = false
|
||||||
} else {
|
} else {
|
||||||
self.registers.pc += 1;
|
self.registers.pc += 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user