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))
Example #2
0
 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