def test_pack_unpack(self):
        packed = pack_instruction(op_code=OPCODE.IFG,
                                  a=Value.reg(REG.A),
                                  b=Value.reg(REG.B))
        op_code, b, a = unpack_instruction(packed)

        self.assertEqual(op_code, OPCODE.IFG)
        self.assertEqual(b, Value.reg(REG.A))
        self.assertEqual(a, Value.reg(REG.B))
 def dispatch(self):
     """ Execute instruction at [PC] """
     instruction = self.cpu.ram[self.cpu.PC.value].value
     self.cpu.PC.value = self.cpu.PC.value + 1
     op_code, b_val, a_val = unpack_instruction(instruction)
     if op_code == 0x00:
         self.non_basic(instruction)
     else:
         b = value_lookup(self.cpu, b_val, as_a=False)
         a = value_lookup(self.cpu, a_val, as_a=True)
         if not self.cpu.skip_instruction:
             self.BASIC_INSTRUCTIONS[op_code](b, a)
         else:
             self.cpu.skip_instruction = False