Added a tool tip for getting operand address information to Qt debugger.
This commit is contained in:
parent
036c9106ad
commit
a85d668f2f
|
@ -4032,9 +4032,11 @@ bool QAsmView::event(QEvent *event)
|
||||||
{
|
{
|
||||||
if (event->type() == QEvent::ToolTip)
|
if (event->type() == QEvent::ToolTip)
|
||||||
{
|
{
|
||||||
int line;
|
int i,j, line, addr = 0;
|
||||||
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
|
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
|
||||||
bool opcodeValid = false, showOpcodeDesc = false, showSymHexDecode = false;
|
bool opcodeValid = false, showOpcodeDesc = false, showSymHexDecode = false;
|
||||||
|
bool showAddrDesc = false, showOperandAddrDesc = false;
|
||||||
|
char stmp[256];
|
||||||
|
|
||||||
QPoint c = convPixToCursor(helpEvent->pos());
|
QPoint c = convPixToCursor(helpEvent->pos());
|
||||||
|
|
||||||
|
@ -4045,6 +4047,8 @@ bool QAsmView::event(QEvent *event)
|
||||||
|
|
||||||
showOpcodeDesc = (c.x() >= opcodeLinePos) && (c.x() < operandLinePos) && opcodeValid;
|
showOpcodeDesc = (c.x() >= opcodeLinePos) && (c.x() < operandLinePos) && opcodeValid;
|
||||||
|
|
||||||
|
showAddrDesc = (c.x() >= pcLocLinePos) && (c.x() < byteCodeLinePos) && opcodeValid;
|
||||||
|
|
||||||
if ( (c.x() > operandLinePos) && opcodeValid && (asmEntry[line]->sym.name.size() > 0) )
|
if ( (c.x() > operandLinePos) && opcodeValid && (asmEntry[line]->sym.name.size() > 0) )
|
||||||
{
|
{
|
||||||
size_t subStrLoc = asmEntry[line]->text.find( asmEntry[line]->sym.name, operandLinePos );
|
size_t subStrLoc = asmEntry[line]->text.find( asmEntry[line]->sym.name, operandLinePos );
|
||||||
|
@ -4062,6 +4066,51 @@ bool QAsmView::event(QEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( (c.x() > operandLinePos) && opcodeValid )
|
||||||
|
{
|
||||||
|
i = c.x();
|
||||||
|
|
||||||
|
if ( isxdigit( asmEntry[line]->text[i] ) )
|
||||||
|
{
|
||||||
|
int addrClicked = 1;
|
||||||
|
int addrTextLoc = i;
|
||||||
|
|
||||||
|
while ( isxdigit( asmEntry[line]->text[i] ) )
|
||||||
|
{
|
||||||
|
addrTextLoc = i;
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
if ( asmEntry[line]->text[i] == '$' || asmEntry[line]->text[i] == ':' )
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
addrClicked = 0;
|
||||||
|
}
|
||||||
|
if ( asmEntry[line]->text[i] == '#' )
|
||||||
|
{
|
||||||
|
addrClicked = 0;
|
||||||
|
}
|
||||||
|
if ( addrClicked )
|
||||||
|
{
|
||||||
|
j=0; i = addrTextLoc;
|
||||||
|
|
||||||
|
while ( isxdigit( asmEntry[line]->text[i] ) )
|
||||||
|
{
|
||||||
|
stmp[j] = asmEntry[line]->text[i]; i++; j++;
|
||||||
|
}
|
||||||
|
stmp[j] = 0;
|
||||||
|
|
||||||
|
//printf("Addr: '%s'\n", stmp );
|
||||||
|
|
||||||
|
addr = strtol( stmp, NULL, 16 );
|
||||||
|
|
||||||
|
showOperandAddrDesc = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( showOpcodeDesc )
|
if ( showOpcodeDesc )
|
||||||
{
|
{
|
||||||
QString qs = fceuGetOpcodeToolTip(asmEntry[line]->opcode, asmEntry[line]->size );
|
QString qs = fceuGetOpcodeToolTip(asmEntry[line]->opcode, asmEntry[line]->size );
|
||||||
|
@ -4071,12 +4120,46 @@ bool QAsmView::event(QEvent *event)
|
||||||
}
|
}
|
||||||
else if ( showSymHexDecode )
|
else if ( showSymHexDecode )
|
||||||
{
|
{
|
||||||
char stmp[64];
|
|
||||||
|
|
||||||
sprintf( stmp, "$%04X", asmEntry[line]->sym.ofs );
|
sprintf( stmp, "$%04X", asmEntry[line]->sym.ofs );
|
||||||
|
|
||||||
QToolTip::showText(helpEvent->globalPos(), tr(stmp), this );
|
QToolTip::showText(helpEvent->globalPos(), tr(stmp), this );
|
||||||
}
|
}
|
||||||
|
else if ( showAddrDesc )
|
||||||
|
{
|
||||||
|
if ( asmEntry[line]->bank < 0 )
|
||||||
|
{
|
||||||
|
sprintf( stmp, "ADDR:\t$%04X", asmEntry[line]->sym.ofs );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf( stmp, "ADDR:\t$%04X\nBANK:\t$%02X\nROM:\t$%06X",
|
||||||
|
asmEntry[line]->sym.ofs, asmEntry[line]->bank, asmEntry[line]->rom );
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolTip::showText(helpEvent->globalPos(), tr(stmp), this );
|
||||||
|
}
|
||||||
|
else if ( showOperandAddrDesc )
|
||||||
|
{
|
||||||
|
int bank = -1, romOfs = -1;
|
||||||
|
|
||||||
|
if (addr >= 0x8000)
|
||||||
|
{
|
||||||
|
bank = getBank(addr);
|
||||||
|
romOfs = GetNesFileAddress(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( bank < 0 )
|
||||||
|
{
|
||||||
|
sprintf( stmp, "ADDR:\t$%04X", addr );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf( stmp, "ADDR:\t$%04X\nBANK:\t$%02X\nROM:\t$%06X",
|
||||||
|
addr, bank, romOfs );
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolTip::showText(helpEvent->globalPos(), tr(stmp), this );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QToolTip::hideText();
|
QToolTip::hideText();
|
||||||
|
|
Loading…
Reference in New Issue