diff python/disasm.py @ 291:b07d28a5ca56

Added some forgotten files
author Windel Bouwman
date Thu, 28 Nov 2013 20:31:47 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/disasm.py	Thu Nov 28 20:31:47 2013 +0100
@@ -0,0 +1,50 @@
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+
+class DisAsmModel(QAbstractTableModel):
+    def __init__(self):
+        super().__init__()
+        self.outs = None
+        self.instructions = []
+        self.headers = ['Address', 'Bytes', 'Instruction']
+        self.txts = []
+        self.txts.append(lambda i: '0x{:08x}'.format(i.address))
+        self.txts.append(lambda i: str(i.encode()))
+        self.txts.append(lambda i: str(i))
+
+    def rowCount(self, parent):
+        return len(self.instructions)
+        
+    def columnCount(self, parent):
+        return len(self.headers)
+
+    def data(self, index, role):
+        if not index.isValid():
+            return
+        row, col = index.row(), index.column()
+        if role == Qt.DisplayRole:
+            i = self.instructions[row]
+            return self.txts[col](i)
+
+    def headerData(self, section, orientation, role):
+        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+            return self.headers[section]
+            
+    def setInstructions(self, ins):
+        self.instructions = ins
+        self.modelReset.emit()
+    
+
+class Disassembly(QTableView):
+    def __init__(self):
+        super().__init__()
+        self.dm = DisAsmModel()
+        self.setModel(self.dm)
+
+    def showPos(self, p):
+        for i in self.dm.instructions:
+            if i.address == p:
+                row = self.dm.instructions.index(i)
+                self.selectRow(row)
+