示例#1
0
 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
示例#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