Example #1
0
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)
Example #2
0
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)]))
Example #3
0
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)))
Example #4
0
    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
Example #5
0
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)]
Example #6
0
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)]
Example #7
0
def MOVE(operands):  # first four bits ignored
    global registers
    R = operands[4:8]
    S = operands[8:]
    registers[util.getValFromBits(R)] = registers[util.getValFromBits(S)]
Example #8
0
def STORE(operands):
    global memory, registers
    R = operands[:4]
    XY = operands[4:]
    memory[util.getValFromBits(XY)] = registers[util.getValFromBits(R)]
Example #9
0
def LOAD(operands):  # 12 bits as list
    global registers, memory
    R = operands[:4]
    XY = operands[4:]
    registers[util.getValFromBits(R)] = memory[util.getValFromBits(XY)]
Example #10
0
def INT(operands):
    global memory, registers
    ih.handleInterupt(util.getValFromBits(operands), memory, registers)
Example #11
0
def JUMP(operands):
    global registers, PC
    R = operands[:4]
    XY = operands[4:]
    if registers[util.getValFromBits(R)] == registers[0]:
        PC = util.getValFromBits(XY)
Example #12
0
 def __getitem__(self, key):
     if type(key) is list:
         key = util.getValFromBits(key)
     return self.__dict__[key]