From f5d4d99a941574e52c8c0c9ac620d57dad6d9110 Mon Sep 17 00:00:00 2001 From: mlong Date: Sat, 23 Jan 2021 14:23:41 -0600 Subject: [PATCH] Improved disassembler labelling --- src/binaryfile/AssemblerSymbols.cpp | 13 +++++++++++++ src/binaryfile/AssemblerSymbols.h | 3 ++- src/ui/viewers/disassemblerviewer.cpp | 13 +++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/binaryfile/AssemblerSymbols.cpp b/src/binaryfile/AssemblerSymbols.cpp index a901e8a..87f05dd 100644 --- a/src/binaryfile/AssemblerSymbols.cpp +++ b/src/binaryfile/AssemblerSymbols.cpp @@ -21,6 +21,19 @@ int AssemblerSymbols::locationOfSymbolAtAddress(quint16 address) return -1; } +QString AssemblerSymbols::getSymbolAtAddress(quint16 address) +{ + int loc = locationOfSymbolAtAddress(address); + if (loc < 0) + { + return ""; + } + else + { + return m_assemblerSymbols.at(loc).name; + } +} + bool AssemblerSymbols::hasAssemSymbolAtAddress(quint16 address) { // Assume list m_assemblerSymbols is sorted by address (it should be) diff --git a/src/binaryfile/AssemblerSymbols.h b/src/binaryfile/AssemblerSymbols.h index 75db468..fba88ef 100644 --- a/src/binaryfile/AssemblerSymbols.h +++ b/src/binaryfile/AssemblerSymbols.h @@ -5,7 +5,7 @@ #include typedef enum { - SizeUnknown = 0, + // SizeUnknown = 0, SizeByte = 1, SizeWord = 2 } SymbolSize; @@ -39,6 +39,7 @@ public: void doTestData(); int locationOfSymbolAtAddress(quint16 address); + QString getSymbolAtAddress(quint16 address); signals: void symbolAdded(AssemblerSymbol &AssemblerSymbol, int location); void symbolAddedAt(int location); diff --git a/src/ui/viewers/disassemblerviewer.cpp b/src/ui/viewers/disassemblerviewer.cpp index cdea699..e4f690d 100644 --- a/src/ui/viewers/disassemblerviewer.cpp +++ b/src/ui/viewers/disassemblerviewer.cpp @@ -202,7 +202,7 @@ void DisassemblerViewer::disassemble(QList entryPoints) { newline = QString("%1: .Byte $%2 ; %3").arg(uint16ToHex(idx)) .arg(uint8ToHex(m_mem.at(idx))) .arg(m_bfm->assemblerSymbols()->at(loc).name);; - } + } else if (m_bfm->assemblerSymbols()->at(loc).symbolsize == SizeWord) { newline = QString("%1: .Word $%2 ; %3").arg(uint16ToHex(idx)) @@ -231,7 +231,8 @@ void DisassemblerViewer::disassemble(QList entryPoints) { formattedLines.append(newline); } } - qSort(formattedLines); + //qSort(formattedLines); + formattedLines.sort(); m_disassemblyStrings = formattedLines; } @@ -240,6 +241,14 @@ void DisassemblerViewer::disassemble(QList entryPoints) { QString DisassemblerViewer::getPotentialLabel(quint16 address) { + if (m_bfm) + { + if (m_bfm->assemblerSymbols()->hasAssemSymbolAtAddress(address)) + { + return m_bfm->assemblerSymbols()->getSymbolAtAddress(address); + } + } + if (address == 0x24) { return "MON.CURSORHORIZ"; } if (address == 0x28) { return "MON.BASL"; } if (address == 0x29) { return "MON.BASH"; }