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 "debug.h"
#include "fceu.h" #include "fceu.h"
#include "cart.h" #include "cart.h"
#include "ld65dbg.h"
#ifdef __QT_DRIVER__ #ifdef __QT_DRIVER__
#include "Qt/ConsoleUtilities.h" #include "Qt/ConsoleUtilities.h"
@ -773,6 +774,7 @@ int debugSymbolTable_t::loadGameSymbols(void)
return 0; return 0;
} }
//--------------------------------------------------------------
int debugSymbolTable_t::addSymbolAtBankOffset(int bank, int ofs, const char *name, const char *comment) int debugSymbolTable_t::addSymbolAtBankOffset(int bank, int ofs, const char *name, const char *comment)
{ {
int result = -1; int result = -1;
@ -909,3 +911,14 @@ const char *debugSymbolTable_t::errorMessage(void)
return dbgSymTblErrMsg; 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); const char *errorMessage(void);
int ld65LoadDebugFile( const char *dbgFilePath );
private: private:
std::map <int, debugSymbolPage_t*> pageMap; std::map <int, debugSymbolPage_t*> pageMap;
FCEU::mutex *cs; FCEU::mutex *cs;

View File

@ -35,6 +35,7 @@
#include <QGridLayout> #include <QGridLayout>
#include <QRadioButton> #include <QRadioButton>
#include <QInputDialog> #include <QInputDialog>
#include <QFileDialog>
#include <QFontDialog> #include <QFontDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QMenuBar> #include <QMenuBar>
@ -43,6 +44,7 @@
#include <QActionGroup> #include <QActionGroup>
#include <QApplication> #include <QApplication>
#include <QGuiApplication> #include <QGuiApplication>
#include <QStandardPaths>
#include <QSettings> #include <QSettings>
#include <QToolTip> #include <QToolTip>
#include <QWindow> #include <QWindow>
@ -262,6 +264,83 @@ void ConsoleDebugger::closeWindow(void)
deleteLater(); 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) QMenuBar *ConsoleDebugger::buildMenuBar(void)
{ {
QMenu *fileMenu, *viewMenu, *debugMenu, QMenu *fileMenu, *viewMenu, *debugMenu,
@ -283,6 +362,14 @@ QMenuBar *ConsoleDebugger::buildMenuBar(void)
// File // File
fileMenu = menuBar->addMenu(tr("&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 // File -> Close
act = new QAction(tr("&Close"), this); act = new QAction(tr("&Close"), this);
act->setShortcut(QKeySequence::Close); act->setShortcut(QKeySequence::Close);

View File

@ -557,6 +557,7 @@ class ConsoleDebugger : public QDialog
void asmViewCtxMenuRunToCursor(void); void asmViewCtxMenuRunToCursor(void);
void moveTab( QWidget *w, int row, int column); void moveTab( QWidget *w, int row, int column);
private slots: private slots:
void ld65ImportDebug(void);
void updatePeriodic(void); void updatePeriodic(void);
void hbarChanged(int value); void hbarChanged(int value);
void vbarChanged(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: public:
database(void); database(void);
int dbgFileLoad( const char *dbgFilePath );
private: private:
std::map<int, scope*> scopeMap; std::map<int, scope*> scopeMap;
std::map<int, segment*> segmentMap; std::map<int, segment*> segmentMap;