def setData(self): # This basically just makes sure the registers go from 0 to 7 down the columns for row in range(self.rowCount()): reg_num = row for col in range( self.columnCount() - 2 ): # Subtract 2 so we don't iterate over the special registers if col == 3: reg_num = row + 4 if col % 3 == 0: self.setItem(row, col, QTableWidgetItem(QString('R' + str(reg_num)))) self.item(row, col).setBackground(default_color) self.item(row, col).setFlags(QtCore.Qt.ItemIsEnabled) if col % 3 == 1: self.setItem( row, col, QTableWidgetItem( QString(to_hex_string(registers[reg_num])))) if col % 3 == 2: self.setItem( row, col, QTableWidgetItem(QString(str(registers[reg_num])))) # Manually set the rest of the register info self.setItem(0, 6, QTableWidgetItem(QString('PC'))) self.item(0, 6).setBackground(default_color) self.setItem(0, 7, QTableWidgetItem(QString(to_hex_string(registers.PC)))) self.item(0, 6).setFlags(QtCore.Qt.ItemIsEnabled) self.item(0, 7).setFlags(QtCore.Qt.ItemIsEnabled) self.setItem(1, 6, QTableWidgetItem(QString('IR'))) self.item(1, 6).setBackground(default_color) self.setItem(1, 7, QTableWidgetItem(QString(to_hex_string(registers.IR)))) self.item(1, 6).setFlags(QtCore.Qt.ItemIsEnabled) self.item(1, 7).setFlags(QtCore.Qt.ItemIsEnabled) self.setItem(2, 6, QTableWidgetItem(QString('PSR'))) self.item(2, 6).setBackground(default_color) self.setItem(2, 7, QTableWidgetItem(QString(to_hex_string(registers.PSR)))) self.item(2, 6).setFlags(QtCore.Qt.ItemIsEnabled) self.item(2, 7).setFlags(QtCore.Qt.ItemIsEnabled) self.setItem(3, 6, QTableWidgetItem(QString('CC'))) self.item(3, 6).setBackground(default_color) CC = '{:03b}'.format(registers.CC) CC += ' (n)' if CC[0] == '1' else ' (z)' if CC[ 1] == '1' else ' (p)' # Gives context to CC self.setItem(3, 7, QTableWidgetItem(QString(CC))) self.item(3, 6).setFlags(QtCore.Qt.ItemIsEnabled) self.item(3, 7).setFlags(QtCore.Qt.ItemIsEnabled)
def update_internal_registers(self): if self.edited_location is not None: row = self.edited_location.row() column = self.edited_location.column() register = row + column self.edited_location = None if column % 3 == 2: register -= 2 # We must subtract 2 b/c the column + row combo will be off by 2 here dec_string = str(self.item(row, column).text()) reg_val = int(dec_string, 10) reg_hex = to_hex_string(reg_val) self.setItem(row, column - 1, QTableWidgetItem(QString(reg_hex))) registers.registers[ register] = reg_val # Convert bit string at address to instruction if column % 3 == 1: register -= 1 # We must subtract 2 b/c the column + row combo will be off by 2 here hex_string = str(self.item(row, column).text()[1:]) reg_val = int(hex_string, 16) reg_hex = str(reg_val) self.setItem(row, column + 1, QTableWidgetItem(QString(reg_hex))) registers.registers[ register] = reg_val # Convert bit string at address to instruction
def setDataRange(self, start, stop, labels={}): self.labels = labels for row in range(start, stop, 1): inst = memory.memory[row] inst_bin = to_bin_string(inst) inst_hex = to_hex_string(inst) self.setItem(row, 0, QtGui.QTableWidgetItem()) self.item(row, 0).setBackground(default_color) if row == registers.PC: self.item(row, 0).setBackground(pc_color) self.setItem(row, 1, QTableWidgetItem(QString(to_hex_string(row)))) self.setItem(row, 2, QTableWidgetItem(QString(inst_bin))) self.setItem(row, 3, QTableWidgetItem(QString(inst_hex))) self.set_info_column(row, inst, labels)
def clearData(self, address): self.item(address, 0).setFlags(QtCore.Qt.ItemIsSelectable) self.setItem(address, 1, QTableWidgetItem(QString(to_hex_string(address)))) self.item(address, 1).setFlags(QtCore.Qt.ItemIsEnabled) self.setItem(address, 2, QTableWidgetItem(QString("0" * 16))) self.setItem(address, 3, QTableWidgetItem(QString("x0000"))) self.setItem(address, 4, QTableWidgetItem(QString(""))) self.setItem(address, 5, QTableWidgetItem(QString("NOP"))) self.item(address, 5).setFlags(QtCore.Qt.ItemIsEnabled)
def setData(self): for row in range(self.rowCount()): self.setItem(row, 0, QtGui.QTableWidgetItem()) self.item(row, 0).setFlags(QtCore.Qt.ItemIsSelectable) if 0x514 <= row <= 0xFA00: self.clearData(row) else: inst = memory.memory[row] inst_bin = to_bin_string(inst) inst_hex = to_hex_string(inst) self.setItem(row, 1, QTableWidgetItem(QString(to_hex_string(row)))) self.item(row, 1).setFlags(QtCore.Qt.ItemIsEnabled) self.setItem(row, 2, QTableWidgetItem(QString(inst_bin))) self.setItem(row, 3, QTableWidgetItem(QString(inst_hex))) self.set_info_column(row, inst) self.item(row, 5).setFlags(QtCore.Qt.ItemIsEnabled) self.item(row, 0).setBackground(default_color) if row == registers.PC: self.item(row, 0).setBackground(pc_color) self.item(row, 0).setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
def set_info_column(self, address, inst, labels=[]): inst_list = parser.parse_any(inst) if np.issubdtype(type(inst_list[-1]), int): final_address = (inst_list[-1] + address & bit_mask) + 1 if final_address & bit_mask in labels: final_address = labels[final_address & bit_mask] inst_list[-1] = final_address else: inst_list[-1] = to_hex_string(final_address) self.setItem( address, 5, QTableWidgetItem( QString( str(inst_list.pop(0)) + ' ' + ', '.join(str(e) for e in inst_list)))) self.item(address, 5).setFlags(QtCore.Qt.ItemIsEnabled)
def update_internal_memory(self): if self.edited_location is not None: address = self.edited_location.row() column = self.edited_location.column() self.edited_location = None if address and column == 2: bit_string = str(self.item(address, 2).text()) inst = int(bit_string, 2) inst_hex = to_hex_string(inst) self.setItem(address, 3, QTableWidgetItem(QString(inst_hex))) self.set_info_column(address, inst) memory[ address] = inst # Convert bit string at address to instruction if address and column == 3: hex_string = str(self.item(address, 3).text()[1:]) inst = int(hex_string, 16) inst_bin = to_bin_string(inst) self.setItem(address, 2, QTableWidgetItem(QString(inst_bin))) self.set_info_column(address, inst) memory[ address] = inst # Convert bit string at address to instruction