def test_pack_unpack_special(self): packed = pack_special_instruction(op_code=OPCODE.JSR, a=Value.reg(REG.A)) op_code, a = unpack_special_instruction(packed) self.assertEqual(op_code, OPCODE.JSR) self.assertEqual(a, Value.reg(REG.A))
def non_basic(self, instruction): opcode, a_val = unpack_special_instruction(instruction) if(opcode != OPCODE.JSR): return a = value_lookup(self.cpu, a_val, as_a=True) if self.cpu.skip_instruction: self.cpu.skip_instruction = False return # Push next address to the stack if self.cpu.SP.value < 0: self.halt('Stack overflow') self.cpu.SP.value -= 1 self.cpu.ram[self.cpu.SP.value].value = self.cpu.PC.value self.cpu.PC.value = a.value