Added rudimentary label searching

This commit is contained in:
Mark Long 2016-02-10 11:45:39 -06:00
parent b7eedfb688
commit bac8be4688
4 changed files with 34 additions and 9 deletions

View File

@ -81,7 +81,7 @@ DisassembledItem Disassembler::disassembleOp(quint16 address, quint16 *nextAddre
break; break;
} }
case AM_Immediate:{ case AM_Immediate:{
disassemblyLine = QString("%1 #_ARG8_").arg(op.mnemonic()); disassemblyLine = QString("%1 #%2").arg(op.mnemonic()).arg((quint8) hexValues[1],2,16,QChar('0')).toUpper();
retval.setRawArgument(hexValues[1]); retval.setRawArgument(hexValues[1]);
break; break;
} }
@ -102,7 +102,7 @@ DisassembledItem Disassembler::disassembleOp(quint16 address, quint16 *nextAddre
disassemblyLine = QString("%1 _ARG16_ {%2%3}").arg(op.mnemonic()) disassemblyLine = QString("%1 _ARG16_ {%2%3}").arg(op.mnemonic())
.arg((offset<0)?"-":"+") .arg((offset<0)?"-":"+")
.arg(abs(offset)); .arg(abs(offset));
retval.setRawArgument(hexValues[1] + (hexValues[2]*256)); retval.setRawArgument(offsetAddress);
break; break;
} }
case AM_ZeroPage:{ case AM_ZeroPage:{

View File

@ -109,16 +109,18 @@ public:
void setJump(bool jump) { m_is_jump = jump; } void setJump(bool jump) { m_is_jump = jump; }
void setJsr(bool jsr) { m_is_jsr = jsr; } void setJsr(bool jsr) { m_is_jsr = jsr; }
void setTargetAddress(quint16 ta) { m_unknown_ta = false; m_target_address = ta; } void setTargetAddress(quint16 ta) { m_unknown_ta = false; m_target_address = ta; }
void setRawArgument(quint16 arg) { m_raw_arg = arg; } void setRawArgument(quint16 arg) { m_has_arg = true; m_raw_arg = arg; }
AssyInstruction assyInstruction() const { return m_instruction; } AssyInstruction assyInstruction() const { return m_instruction; }
QString rawDisassembledString() const { return m_disassembly_text; } QString rawDisassembledString() const { return m_disassembly_text; }
QString disassembledString() { QString disassembledString() {
QString retval = rawDisassembledString(); QString retval = rawDisassembledString();
if (retval.contains("_ARG16_")) { if (hasArg()) {
retval.replace("_ARG16_","$"+arg16Str()); if (retval.contains("_ARG16_")) {
} else if (retval.contains("_ARG8_")) { retval.replace("_ARG16_","$"+arg16Str());
retval.replace("_ARG8_","$"+arg8Str()); } else if (retval.contains("_ARG8_")) {
retval.replace("_ARG8_","$"+arg8Str());
}
} }
return retval; return retval;
} }
@ -130,7 +132,7 @@ public:
bool isJump() const { return m_is_jump; } bool isJump() const { return m_is_jump; }
bool isJsr() const { return m_is_jsr; } bool isJsr() const { return m_is_jsr; }
quint16 targetAddress() const { return m_target_address; } quint16 targetAddress() const { return m_target_address; }
bool hasArg() const { return m_has_arg; }
quint16 arg16() { return m_raw_arg; } quint16 arg16() { return m_raw_arg; }
quint8 arg8() { return m_raw_arg % 256; } quint8 arg8() { return m_raw_arg % 256; }
QString arg16Str() { return QString("%1").arg(arg16(),4,16,QChar('0')).toUpper(); } QString arg16Str() { return QString("%1").arg(arg16(),4,16,QChar('0')).toUpper(); }
@ -142,6 +144,7 @@ private:
m_is_jump = m_is_branch = m_is_jsr = false; m_is_jump = m_is_branch = m_is_jsr = false;
m_unknown_ta = true; m_unknown_ta = true;
m_raw_arg = 0; m_raw_arg = 0;
m_has_arg = false;
} }
quint16 m_address; quint16 m_address;
@ -155,6 +158,7 @@ private:
AssyInstruction m_instruction; AssyInstruction m_instruction;
bool m_unknown_ta; bool m_unknown_ta;
quint16 m_raw_arg; quint16 m_raw_arg;
bool m_has_arg;
}; };

View File

@ -3,6 +3,8 @@
#include "disassembler.h" #include "disassembler.h"
#include "memory.h" #include "memory.h"
#include <QDebug>
DisassemblerViewer::DisassemblerViewer(QWidget *parent) : DisassemblerViewer::DisassemblerViewer(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::DisassemblerViewer) ui(new Ui::DisassemblerViewer)
@ -34,7 +36,17 @@ void DisassemblerViewer::setFile(BinaryFile *file) {
QStringList formattedLines; QStringList formattedLines;
foreach (DisassembledItem di, lines) { foreach (DisassembledItem di, lines) {
QString newline = QString("%1: %2 %3").arg(di.hexAddress()).arg(di.hexString()).arg(di.disassembledString()); QString ds = di.rawDisassembledString();
if (di.hasArg()) {
QString potentialLabel = getPotentialLabel(di.arg16());
if (!potentialLabel.isEmpty()) {
if (ds.contains("_ARG16_")) { ds.replace("_ARG16_",potentialLabel); }
else if (ds.contains("_ARG8_")) { ds.replace("_ARG8_",potentialLabel); }
} else {
ds = di.disassembledString();
}
}
QString newline = QString("%1: %2 %3").arg(di.hexAddress()).arg(di.hexString()).arg(ds);
formattedLines.append(newline); formattedLines.append(newline);
} }
@ -42,6 +54,14 @@ void DisassemblerViewer::setFile(BinaryFile *file) {
setData(joinedlines); setData(joinedlines);
} }
QString DisassemblerViewer::getPotentialLabel(quint16 address) {
QString retval = QString();
if (address == 0x7129) { retval = "TESTLABEL"; }
return retval;
}
void DisassemblerViewer::setData(QByteArray data) void DisassemblerViewer::setData(QByteArray data)
{ {
ui->textArea->setText(data); ui->textArea->setText(data);

View File

@ -21,6 +21,7 @@ public:
void setData(QByteArray data); void setData(QByteArray data);
void setText(QString text); void setText(QString text);
QString getPotentialLabel(quint16 address);
private: private:
Ui::DisassemblerViewer *ui; Ui::DisassemblerViewer *ui;