def LOADV(operands): global registers R = operands[:4] XY = operands[4:] # util.safeSet(registers, # util.getValFromBits(R), # util.getValFromBits(XY)) registers[util.getValFromBits(R)] = util.getValFromBits(XY)
def PRINT(operands): global memory, registers R = operands[:4] # register to probe XY = operands[4:] # memory cell to probe print('R' + str(util.getValFromBits(R)) + ': {:#010b}'.format(registers[util.getValFromBits(R)]) + '\nCell 0x{:02X}'.format(util.getValFromBits(XY)) + ': 0x{:02X}'.format(memory[util.getValFromBits(XY)]))
def ROTATE(operands): # bits 8-12 ignored global registers R = operands[:4] X = operands[8:] def rotateHelper(l, n): if n == 0: return l else: return rotateHelper([l[-1]] + l[:-1], n - 1) registers[util.getValFromBits(R)] = util.getValFromBits( rotateHelper( util.intToBits(registers[util.getValFromBits(R)], 8), util.getValFromBits(X)))
def __setitem__(self, key, item): if type(key) is list: key = util.getValFromBits(key) if type(key) != int: sys.exit("""ERROR: Register must be integer value. Value given: {}""".format(repr(key))) if not(0 <= key <= 0xF): sys.exit("ERROR: Register " + key + " out of range.") if not(-(2 ** 7) <= item <= ((2 ** 7) - 1)): print('*** WARNING: item out of range (overflow not yet implemented)') self.__dict__[key] = item
def XOR(operands): global registers R = operands[:4] S = operands[4:8] T = operands[8:] registers[util.getValFromBits(R)] = registers[util.getValFromBits(S)] ^ registers[util.getValFromBits(T)]
def ADDF(operands): # floating-point global registers R = operands[:4] S = operands[4:8] T = operands[8:] registers[util.getValFromBits(R)] = registers[util.getValFromBits(S)] + registers[util.getValFromBits(T)]
def MOVE(operands): # first four bits ignored global registers R = operands[4:8] S = operands[8:] registers[util.getValFromBits(R)] = registers[util.getValFromBits(S)]
def STORE(operands): global memory, registers R = operands[:4] XY = operands[4:] memory[util.getValFromBits(XY)] = registers[util.getValFromBits(R)]
def LOAD(operands): # 12 bits as list global registers, memory R = operands[:4] XY = operands[4:] registers[util.getValFromBits(R)] = memory[util.getValFromBits(XY)]
def INT(operands): global memory, registers ih.handleInterupt(util.getValFromBits(operands), memory, registers)
def JUMP(operands): global registers, PC R = operands[:4] XY = operands[4:] if registers[util.getValFromBits(R)] == registers[0]: PC = util.getValFromBits(XY)
def __getitem__(self, key): if type(key) is list: key = util.getValFromBits(key) return self.__dict__[key]