From ee083742523bd9e4c1ab84c32bf81d4fe9d5e17c Mon Sep 17 00:00:00 2001 From: Anthony Foxclaw <35226681+tonytins@users.noreply.github.com> Date: Thu, 6 Feb 2020 18:02:09 -0500 Subject: [PATCH] Implemented jump opcode --- src/vm.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/vm.rs b/src/vm.rs index 867ad5c..5eabc11 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -79,6 +79,10 @@ impl VM { self.registers[self.next_8_bits() as usize] = reg1 / reg2; self.remainder = (reg1 % reg2) as u32; } + Opcode::JMP => { + let target = self.registers[self.next_8_bits() as usize]; + self.pc = target as usize; + } } true } @@ -113,5 +117,20 @@ mod vm_tests { } #[test] - fn test_load_opcode() {} + fn test_jmp_opcode() { + let mut test_vm = VM::new(); + test_vm.registers[0] = 1; + test_vm.program = vec![7, 0, 0, 0]; + test_vm.run_once(); + assert_eq!(test_vm.pc, 1); + } + + /*#[test] + fn test_load_opcode() { + let mut test_vm = VM::new(); + // 500 is represented this way in little endian format + test_vm.program = vec![0, 0, 1, 244]; + test_vm.run(); + assert_eq!(test_vm.registers[0], 500); + }*/ }