예제 #1
0
    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)
예제 #2
0
    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
예제 #3
0
    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)
예제 #4
0
 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)
예제 #5
0
    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)
예제 #6
0
 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)
예제 #7
0
    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