Added hooks to Qt GUI for importing of ld65 debug symbol files.

This commit is contained in:
harry 2023-02-12 09:09:17 -05:00
parent c1e7465fe5
commit 07617997f4
6 changed files with 112 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include "debug.h"
#include "fceu.h"
#include "cart.h"
#include "ld65dbg.h"
#ifdef __QT_DRIVER__
#include "Qt/ConsoleUtilities.h"
@ -773,6 +774,7 @@ int debugSymbolTable_t::loadGameSymbols(void)
return 0;
}
//--------------------------------------------------------------
int debugSymbolTable_t::addSymbolAtBankOffset(int bank, int ofs, const char *name, const char *comment)
{
int result = -1;
@ -909,3 +911,14 @@ const char *debugSymbolTable_t::errorMessage(void)
return dbgSymTblErrMsg;
}
//--------------------------------------------------------------
int debugSymbolTable_t::ld65LoadDebugFile( const char *dbgFilePath )
{
ld65::database db;
if ( db.dbgFileLoad( dbgFilePath ) )
{
return -1;
}
return 0;
}
//--------------------------------------------------------------

View File

@ -153,6 +153,8 @@ class debugSymbolTable_t
const char *errorMessage(void);
int ld65LoadDebugFile( const char *dbgFilePath );
private:
std::map <int, debugSymbolPage_t*> pageMap;
FCEU::mutex *cs;

View File

@ -35,6 +35,7 @@
#include <QGridLayout>
#include <QRadioButton>
#include <QInputDialog>
#include <QFileDialog>
#include <QFontDialog>
#include <QMessageBox>
#include <QMenuBar>
@ -43,6 +44,7 @@
#include <QActionGroup>
#include <QApplication>
#include <QGuiApplication>
#include <QStandardPaths>
#include <QSettings>
#include <QToolTip>
#include <QWindow>
@ -262,6 +264,83 @@ void ConsoleDebugger::closeWindow(void)
deleteLater();
}
//----------------------------------------------------------------------------
void ConsoleDebugger::ld65ImportDebug(void)
{
int ret, useNativeFileDialogVal;
QString filename;
std::string last;
const char *romPath;
QFileDialog dialog(this, tr("Open ld65 Debug File") );
QList<QUrl> urls;
QDir d;
const QStringList filters({
"dbg files (*.dbg *.DBG)",
"Any files (*)"
});
urls << QUrl::fromLocalFile( QDir::rootPath() );
urls << QUrl::fromLocalFile(QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first());
urls << QUrl::fromLocalFile(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).first());
urls << QUrl::fromLocalFile(QStandardPaths::standardLocations(QStandardPaths::DownloadLocation).first());
urls << QUrl::fromLocalFile( QDir( FCEUI_GetBaseDirectory() ).absolutePath() );
romPath = getRomFile();
if ( romPath != nullptr )
{
std::string dir;
getDirFromFile( romPath, dir);
d.setPath(dir.c_str());
if ( d.exists() )
{
urls << QUrl::fromLocalFile( d.absolutePath() );
dialog.setDirectory( tr(dir.c_str()) );
}
}
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilters( filters );
dialog.setViewMode(QFileDialog::List);
dialog.setFilter( QDir::AllEntries | QDir::AllDirs | QDir::Hidden );
dialog.setLabelText( QFileDialog::Accept, tr("Open") );
// Check config option to use native file dialog or not
g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal);
dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal);
dialog.setSidebarUrls(urls);
ret = dialog.exec();
if ( ret )
{
QStringList fileList;
fileList = dialog.selectedFiles();
if ( fileList.size() > 0 )
{
filename = fileList[0];
}
}
if ( filename.isNull() )
{
return;
}
//qDebug() << "selected file path : " << filename.toUtf8();
debugSymbolTable.ld65LoadDebugFile( filename.toStdString().c_str() );
return;
}
//----------------------------------------------------------------------------
QMenuBar *ConsoleDebugger::buildMenuBar(void)
{
QMenu *fileMenu, *viewMenu, *debugMenu,
@ -283,6 +362,14 @@ QMenuBar *ConsoleDebugger::buildMenuBar(void)
// File
fileMenu = menuBar->addMenu(tr("&File"));
// File -> Import ld65 dbg
act = new QAction(tr("&Import ld65 dbg file"), this);
//act->setShortcut(QKeySequence::Close);
act->setStatusTip(tr("Import ld65 Debug File"));
connect(act, SIGNAL(triggered()), this, SLOT(ld65ImportDebug(void)) );
fileMenu->addAction(act);
// File -> Close
act = new QAction(tr("&Close"), this);
act->setShortcut(QKeySequence::Close);

View File

@ -557,6 +557,7 @@ class ConsoleDebugger : public QDialog
void asmViewCtxMenuRunToCursor(void);
void moveTab( QWidget *w, int row, int column);
private slots:
void ld65ImportDebug(void);
void updatePeriodic(void);
void hbarChanged(int value);
void vbarChanged(int value);

View File

@ -26,4 +26,11 @@ namespace ld65
{
}
//---------------------------------------------------------------------------------------------------
int database::dbgFileLoad( const char *dbgFilePath )
{
return 0;
}
//---------------------------------------------------------------------------------------------------
}

View File

@ -64,6 +64,8 @@ namespace ld65
public:
database(void);
int dbgFileLoad( const char *dbgFilePath );
private:
std::map<int, scope*> scopeMap;
std::map<int, segment*> segmentMap;