From c70f4fe041152cd4491b7e2b8e2f34affce8815b Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Tue, 1 May 2018 17:44:09 -0700 Subject: [PATCH] Hex viewer is now debugger and manages the debug logs With printf gone the emulator runs much faster too. --- qtBuildSystem/Mu/Mu.pro | 10 +- .../Mu/{hexviewer.cpp => debugviewer.cpp} | 112 +++++++++--------- qtBuildSystem/Mu/debugviewer.h | 38 ++++++ .../Mu/{hexviewer.ui => debugviewer.ui} | 40 +++---- qtBuildSystem/Mu/hexviewer.h | 38 ------ qtBuildSystem/Mu/mainwindow.cpp | 16 +-- qtBuildSystem/Mu/mainwindow.h | 2 +- qtBuildSystem/Mu/mainwindow.ui | 2 +- 8 files changed, 127 insertions(+), 131 deletions(-) rename qtBuildSystem/Mu/{hexviewer.cpp => debugviewer.cpp} (50%) create mode 100644 qtBuildSystem/Mu/debugviewer.h rename qtBuildSystem/Mu/{hexviewer.ui => debugviewer.ui} (86%) delete mode 100644 qtBuildSystem/Mu/hexviewer.h diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index e57f173..1944dcf 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -60,9 +60,9 @@ SOURCES += \ src/sed1376.c \ src/silkscreen.c \ src/trapNumToName.c \ - hexviewer.cpp \ fileaccess.cpp \ - src/ads7846.c + src/ads7846.c \ + debugviewer.cpp HEADERS += \ src/bps/crc32.h \ @@ -85,17 +85,17 @@ HEADERS += \ mainwindow.h \ touchscreen.h \ src/sed1376RegisterNames.h \ - hexviewer.h \ src/hardwareRegistersTiming.c.h \ src/sed1376Accessors.c.h \ src/hardwareRegistersAccessors.c.h \ fileaccess.h \ src/endianness.h \ - src/ads7846.h + src/ads7846.h \ + debugviewer.h FORMS += \ mainwindow.ui \ - hexviewer.ui + debugviewer.ui CONFIG += mobility MOBILITY = diff --git a/qtBuildSystem/Mu/hexviewer.cpp b/qtBuildSystem/Mu/debugviewer.cpp similarity index 50% rename from qtBuildSystem/Mu/hexviewer.cpp rename to qtBuildSystem/Mu/debugviewer.cpp index 4fa3819..7e9ab46 100644 --- a/qtBuildSystem/Mu/hexviewer.cpp +++ b/qtBuildSystem/Mu/debugviewer.cpp @@ -1,5 +1,5 @@ -#include "hexviewer.h" -#include "ui_hexviewer.h" +#include "debugviewer.h" +#include "ui_debugviewer.h" #include #include @@ -39,25 +39,25 @@ int64_t getEmulatorMemorySafe(uint32_t address, uint8_t size){ } -HexViewer::HexViewer(QWidget *parent) : +DebugViewer::DebugViewer(QWidget *parent) : QDialog(parent), - ui(new Ui::HexViewer){ + ui(new Ui::DebugViewer){ ui->setupUi(this); bitsPerEntry = 8; - hexRadioButtonHandler(); + debugRadioButtonHandler(); #if !defined(EMU_DEBUG) || !defined(EMU_CUSTOM_DEBUG_LOG_HANDLER) - ui->hexPrintDebugLogs->hide(); - ui->hexEraseDebugLogs->hide(); + ui->debugPrintDebugLogs->hide(); + ui->debugEraseDebugLogs->hide(); #endif } -HexViewer::~HexViewer(){ +DebugViewer::~DebugViewer(){ delete ui; } -int64_t HexViewer::numberFromString(QString str, bool negativeAllowed){ +int64_t DebugViewer::numberFromString(QString str, bool negativeAllowed){ int64_t value; bool validNumber; @@ -76,7 +76,7 @@ int64_t HexViewer::numberFromString(QString str, bool negativeAllowed){ return value; } -QString HexViewer::stringFromNumber(int64_t number, bool hex, uint32_t forcedZeros){ +QString DebugViewer::stringFromNumber(int64_t number, bool hex, uint32_t forcedZeros){ if(hex){ QString hexString; hexString += QString::number(number, 16).toUpper(); @@ -88,35 +88,35 @@ QString HexViewer::stringFromNumber(int64_t number, bool hex, uint32_t forcedZer return QString::number(number, 10); } -void HexViewer::hexRadioButtonHandler(){ +void DebugViewer::debugRadioButtonHandler(){ switch(bitsPerEntry){ case 8: - ui->hex8Bit->setDown(true); - ui->hex16Bit->setDown(false); - ui->hex32Bit->setDown(false); + ui->debug8Bit->setDown(true); + ui->debug16Bit->setDown(false); + ui->debug32Bit->setDown(false); break; case 16: - ui->hex8Bit->setDown(false); - ui->hex16Bit->setDown(true); - ui->hex32Bit->setDown(false); + ui->debug8Bit->setDown(false); + ui->debug16Bit->setDown(true); + ui->debug32Bit->setDown(false); break; case 32: - ui->hex8Bit->setDown(false); - ui->hex16Bit->setDown(false); - ui->hex32Bit->setDown(true); + ui->debug8Bit->setDown(false); + ui->debug16Bit->setDown(false); + ui->debug32Bit->setDown(true); break; } } -void HexViewer::on_hexUpdate_clicked(){ - int64_t address = numberFromString(ui->hexAddress->text(), false/*negative allowed*/); - int64_t length = numberFromString(ui->hexLength->text(), false/*negative allowed*/); +void DebugViewer::on_debugGetHexValues_clicked(){ + int64_t address = numberFromString(ui->debugAddress->text(), false/*negative allowed*/); + int64_t length = numberFromString(ui->debugLength->text(), false/*negative allowed*/); uint8_t bits = bitsPerEntry; - ui->hexValueList->clear(); + ui->debugValueList->clear(); if(address != INVALID_NUMBER && length != INVALID_NUMBER && length != 0 && address + bits / 8 * length - 1 <= 0xFFFFFFFF){ for(int64_t count = 0; count < length; count++){ @@ -128,85 +128,81 @@ void HexViewer::on_hexUpdate_clicked(){ value += stringFromNumber(data, true, bits / 8 * 2); else value += "Unsafe Access"; - ui->hexValueList->addItem(value); + ui->debugValueList->addItem(value); address += bits / 8; } } else{ - ui->hexValueList->addItem("Invalid Parameters"); + ui->debugValueList->addItem("Invalid Parameters"); } } -void HexViewer::on_hex8Bit_clicked(){ +void DebugViewer::on_debug8Bit_clicked(){ bitsPerEntry = 8; - hexRadioButtonHandler(); + debugRadioButtonHandler(); } -void HexViewer::on_hex16Bit_clicked(){ +void DebugViewer::on_debug16Bit_clicked(){ bitsPerEntry = 16; - hexRadioButtonHandler(); + debugRadioButtonHandler(); } -void HexViewer::on_hex32Bit_clicked(){ +void DebugViewer::on_debug32Bit_clicked(){ bitsPerEntry = 32; - hexRadioButtonHandler(); + debugRadioButtonHandler(); } -void HexViewer::on_hexDump_clicked(){ - int64_t address = numberFromString(ui->hexAddress->text(), false/*negative allowed*/); - int64_t length = numberFromString(ui->hexLength->text(), false/*negative allowed*/); - uint8_t bits = bitsPerEntry; - QString fileName = ui->hexFilePath->text(); +void DebugViewer::on_debugDump_clicked(){ + QString fileOut; + QString fileName = ui->debugFilePath->text(); QString filePath = settings.value("resourceDirectory", "").toString() + "/hexDumps"; QDir location = filePath; if(!location.exists()) location.mkpath("."); - if(validFilePath(filePath + "/" + fileName) && address != INVALID_NUMBER && length != INVALID_NUMBER && length != 0 && address + bits / 8 * length - 1 <= 0xFFFFFFFF){ - length *= bits / 8; - uint8_t* dumpBuffer = new uint8_t[length]; - for(int64_t count = 0; count < length; count++) - dumpBuffer[count] = getEmulatorMemorySafe(address + count, 8); - setFileBuffer(filePath + "/" + fileName, dumpBuffer, length); - delete[] dumpBuffer; + for(uint64_t index = 0; index < ui->debugValueList->count(); index++){ + fileOut += ui->debugValueList->item(index)->text(); + fileOut += '\n'; } + + setFileBuffer(filePath + "/" + fileName, (uint8_t*)fileOut.data(), fileOut.length() * sizeof(QChar)); } -void HexViewer::on_hexShowRegisters_clicked(){ - ui->hexValueList->clear(); +void DebugViewer::on_debugShowRegisters_clicked(){ + ui->debugValueList->clear(); for(uint8_t aRegs = M68K_REG_A0; aRegs <= M68K_REG_A7; aRegs++) - ui->hexValueList->addItem("A" + stringFromNumber(aRegs - M68K_REG_A0, false, 0) + ":" + stringFromNumber(m68k_get_reg(NULL, (m68k_register_t)aRegs), true, 8)); + ui->debugValueList->addItem("A" + stringFromNumber(aRegs - M68K_REG_A0, false, 0) + ":" + stringFromNumber(m68k_get_reg(NULL, (m68k_register_t)aRegs), true, 8)); for(uint8_t dRegs = M68K_REG_D0; dRegs <= M68K_REG_D7; dRegs++) - ui->hexValueList->addItem("D" + stringFromNumber(dRegs - M68K_REG_D0, false, 0) + ":" + stringFromNumber(m68k_get_reg(NULL, (m68k_register_t)dRegs), true, 8)); - ui->hexValueList->addItem("SP:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_SP), true, 8)); - ui->hexValueList->addItem("PC:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_PC), true, 8)); - ui->hexValueList->addItem("SR:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_SR), true, 4)); + ui->debugValueList->addItem("D" + stringFromNumber(dRegs - M68K_REG_D0, false, 0) + ":" + stringFromNumber(m68k_get_reg(NULL, (m68k_register_t)dRegs), true, 8)); + ui->debugValueList->addItem("SP:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_SP), true, 8)); + ui->debugValueList->addItem("PC:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_PC), true, 8)); + ui->debugValueList->addItem("SR:" + stringFromNumber(m68k_get_reg(NULL, M68K_REG_SR), true, 4)); } -void HexViewer::on_hexPrintDebugLogs_clicked(){ +void DebugViewer::on_debugPrintDebugLogs_clicked(){ #if defined(EMU_DEBUG) && defined(EMU_CUSTOM_DEBUG_LOG_HANDLER) - int64_t length = numberFromString(ui->hexLength->text(), true/*negative allowed*/); + int64_t length = numberFromString(ui->debugLength->text(), true/*negative allowed*/); - ui->hexValueList->clear(); + ui->debugValueList->clear(); if(length != INVALID_NUMBER && qAbs(length) < debugStrings.size()){ if(length < 0){ for(uint64_t stringNum = debugStrings.size() + length; stringNum < debugStrings.size(); stringNum++) - ui->hexValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); + ui->debugValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); } else{ for(uint64_t stringNum = 0; stringNum < length; stringNum++) - ui->hexValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); + ui->debugValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); } } else{ for(uint64_t stringNum = 0; stringNum < debugStrings.size(); stringNum++) - ui->hexValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); + ui->debugValueList->addItem(QString::fromStdString(debugStrings[stringNum] + "(printed " + std::to_string(duplicateCallCount[stringNum]) + " times)")); } #endif } -void HexViewer::on_hexEraseDebugLogs_clicked(){ +void DebugViewer::on_debugEraseDebugLogs_clicked(){ #if defined(EMU_DEBUG) && defined(EMU_CUSTOM_DEBUG_LOG_HANDLER) debugStrings.clear(); duplicateCallCount.clear(); diff --git a/qtBuildSystem/Mu/debugviewer.h b/qtBuildSystem/Mu/debugviewer.h new file mode 100644 index 0000000..fa67b38 --- /dev/null +++ b/qtBuildSystem/Mu/debugviewer.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +namespace Ui { +class DebugViewer; +} + +class DebugViewer : public QDialog +{ + Q_OBJECT + +public: + explicit DebugViewer(QWidget *parent = 0); + ~DebugViewer(); + +private slots: + int64_t numberFromString(QString str, bool negativeAllowed); + QString stringFromNumber(int64_t number, bool hex, uint32_t forcedZeros = 0); + + void debugRadioButtonHandler(); + + void on_debugGetHexValues_clicked(); + + void on_debug8Bit_clicked(); + void on_debug16Bit_clicked(); + void on_debug32Bit_clicked(); + + void on_debugDump_clicked(); + void on_debugShowRegisters_clicked(); + void on_debugPrintDebugLogs_clicked(); + void on_debugEraseDebugLogs_clicked(); + +private: + uint8_t bitsPerEntry; + Ui::DebugViewer *ui; +}; diff --git a/qtBuildSystem/Mu/hexviewer.ui b/qtBuildSystem/Mu/debugviewer.ui similarity index 86% rename from qtBuildSystem/Mu/hexviewer.ui rename to qtBuildSystem/Mu/debugviewer.ui index b9ba69b..b02298d 100644 --- a/qtBuildSystem/Mu/hexviewer.ui +++ b/qtBuildSystem/Mu/debugviewer.ui @@ -1,7 +1,7 @@ - HexViewer - + DebugViewer + 0 @@ -17,7 +17,7 @@ - Hex Viewer + Debugger @@ -47,7 +47,7 @@ 0 - + 420 @@ -57,10 +57,10 @@ - Update + Get Hex Values - + 430 @@ -83,7 +83,7 @@ Address - + 420 @@ -96,7 +96,7 @@ 8bit - + 480 @@ -109,7 +109,7 @@ 16bit - + 540 @@ -122,7 +122,7 @@ 32bit - + 430 @@ -145,7 +145,7 @@ Length - + 10 @@ -155,20 +155,20 @@ - + 420 - 190 + 310 201 32 - Dump + Dump To File - + 432 @@ -191,7 +191,7 @@ File Path - + 420 @@ -204,7 +204,7 @@ Show Registers - + 420 @@ -217,7 +217,7 @@ Print Debug Logs - + 420 @@ -239,7 +239,7 @@ buttonBox accepted() - HexViewer + DebugViewer accept() @@ -255,7 +255,7 @@ buttonBox rejected() - HexViewer + DebugViewer reject() diff --git a/qtBuildSystem/Mu/hexviewer.h b/qtBuildSystem/Mu/hexviewer.h deleted file mode 100644 index 9d214fb..0000000 --- a/qtBuildSystem/Mu/hexviewer.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include -#include - -namespace Ui { -class HexViewer; -} - -class HexViewer : public QDialog -{ - Q_OBJECT - -public: - explicit HexViewer(QWidget *parent = 0); - ~HexViewer(); - -private slots: - int64_t numberFromString(QString str, bool negativeAllowed); - QString stringFromNumber(int64_t number, bool hex, uint32_t forcedZeros = 0); - - void hexRadioButtonHandler(); - - void on_hexUpdate_clicked(); - - void on_hex8Bit_clicked(); - void on_hex16Bit_clicked(); - void on_hex32Bit_clicked(); - - void on_hexDump_clicked(); - void on_hexShowRegisters_clicked(); - void on_hexPrintDebugLogs_clicked(); - void on_hexEraseDebugLogs_clicked(); - -private: - uint8_t bitsPerEntry; - Ui::HexViewer *ui; -}; diff --git a/qtBuildSystem/Mu/mainwindow.cpp b/qtBuildSystem/Mu/mainwindow.cpp index 14df25f..6f7e53f 100644 --- a/qtBuildSystem/Mu/mainwindow.cpp +++ b/qtBuildSystem/Mu/mainwindow.cpp @@ -18,7 +18,7 @@ #include #include -#include "hexviewer.h" +#include "debugviewer.h" #include "fileaccess.h" #include "src/emulator.h" @@ -30,7 +30,7 @@ QSettings settings; static QImage video; static QTimer* refreshDisplay; -static HexViewer* emuStateBrowser; +static DebugViewer* emuDebugger; static std::thread emuThread; static std::atomic emuThreadJoin; static std::atomic emuOn; @@ -121,7 +121,7 @@ MainWindow::MainWindow(QWidget* parent) : ui(new Ui::MainWindow){ ui->setupUi(this); - emuStateBrowser = new HexViewer(this); + emuDebugger = new DebugViewer(this); refreshDisplay = new QTimer(this); ui->calender->installEventFilter(this); @@ -139,7 +139,7 @@ MainWindow::MainWindow(QWidget* parent) : ui->screenshot->installEventFilter(this); ui->ctrlBtn->installEventFilter(this); - ui->hexViewer->installEventFilter(this); + ui->debugger->installEventFilter(this); ui->ctrlBtn->setIcon(QIcon(":/buttons/images/play.png")); @@ -163,7 +163,7 @@ MainWindow::MainWindow(QWidget* parent) : emuDoubleBuffer = NULL; #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) - ui->hexViewer->hide(); + ui->debugger->hide(); #endif #if defined(EMU_DEBUG) && defined(EMU_CUSTOM_DEBUG_LOG_HANDLER) @@ -360,7 +360,7 @@ void MainWindow::on_ctrlBtn_clicked(){ } } -void MainWindow::on_hexViewer_clicked(){ +void MainWindow::on_debugger_clicked(){ if(emuInited){ if(emuOn){ emuOn = false; @@ -369,10 +369,10 @@ void MainWindow::on_hexViewer_clicked(){ waitForEmuPaused(); - emuStateBrowser->exec(); + emuDebugger->exec(); } else{ - popupInformationDialog("Cant open hex viewer, emulator not running."); + popupInformationDialog("Cant open debugger, emulator not running."); } } diff --git a/qtBuildSystem/Mu/mainwindow.h b/qtBuildSystem/Mu/mainwindow.h index a33d4df..732b3ae 100644 --- a/qtBuildSystem/Mu/mainwindow.h +++ b/qtBuildSystem/Mu/mainwindow.h @@ -56,7 +56,7 @@ private slots: void on_ctrlBtn_clicked(); - void on_hexViewer_clicked(); + void on_debugger_clicked(); void on_screenshot_clicked(); diff --git a/qtBuildSystem/Mu/mainwindow.ui b/qtBuildSystem/Mu/mainwindow.ui index 5d13e4a..cb106ec 100644 --- a/qtBuildSystem/Mu/mainwindow.ui +++ b/qtBuildSystem/Mu/mainwindow.ui @@ -263,7 +263,7 @@ - + true