mirror of https://github.com/mgba-emu/mgba.git
Qt: Add unused RegisterView class
This commit is contained in:
parent
bfb674fb4f
commit
44c6e94f8b
|
@ -99,6 +99,7 @@ set(SOURCE_FILES
|
||||||
OverrideView.cpp
|
OverrideView.cpp
|
||||||
PaletteView.cpp
|
PaletteView.cpp
|
||||||
PrinterView.cpp
|
PrinterView.cpp
|
||||||
|
RegisterView.cpp
|
||||||
ROMInfo.cpp
|
ROMInfo.cpp
|
||||||
SavestateButton.cpp
|
SavestateButton.cpp
|
||||||
SensorView.cpp
|
SensorView.cpp
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
/* Copyright (c) 2013-2017 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#include "RegisterView.h"
|
||||||
|
|
||||||
|
#include "CoreController.h"
|
||||||
|
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
#include <mgba/internal/arm/arm.h>
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
#include <mgba/internal/lr35902/lr35902.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
using namespace QGBA;
|
||||||
|
|
||||||
|
RegisterView::RegisterView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
, m_controller(controller)
|
||||||
|
{
|
||||||
|
QFormLayout* layout = new QFormLayout;
|
||||||
|
setLayout(layout);
|
||||||
|
|
||||||
|
switch (controller->platform()) {
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
case PLATFORM_GBA:
|
||||||
|
addRegisters({
|
||||||
|
"r0",
|
||||||
|
"r1",
|
||||||
|
"r2",
|
||||||
|
"r3",
|
||||||
|
"r4",
|
||||||
|
"r5",
|
||||||
|
"r6",
|
||||||
|
"r7",
|
||||||
|
"r8",
|
||||||
|
"r9",
|
||||||
|
"r10",
|
||||||
|
"r11",
|
||||||
|
"r12",
|
||||||
|
"sp",
|
||||||
|
"lr",
|
||||||
|
"pc",
|
||||||
|
"cpsr",
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
case PLATFORM_GB:
|
||||||
|
addRegisters({
|
||||||
|
"a",
|
||||||
|
"f",
|
||||||
|
"b",
|
||||||
|
"c",
|
||||||
|
"d",
|
||||||
|
"e",
|
||||||
|
"h",
|
||||||
|
"l",
|
||||||
|
"sp",
|
||||||
|
"pc"
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterView::addRegisters(const QStringList& names) {
|
||||||
|
QFormLayout* form = static_cast<QFormLayout*>(layout());
|
||||||
|
const QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont);
|
||||||
|
for (const auto& reg : names) {
|
||||||
|
QLabel* value = new QLabel;
|
||||||
|
value->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
value->setFont(font);
|
||||||
|
form->addWidget(value);
|
||||||
|
m_registers[reg] = value;
|
||||||
|
form->addRow(reg, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterView::updateRegisters() {
|
||||||
|
switch (m_controller->platform()) {
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
case PLATFORM_GBA:
|
||||||
|
updateRegistersARM();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
case PLATFORM_GB:
|
||||||
|
updateRegistersLR35902();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
void RegisterView::updateRegistersARM() {
|
||||||
|
CoreController::Interrupter interrupter(m_controller);
|
||||||
|
struct ARMCore* core = static_cast<ARMCore*>(m_controller->thread()->core->cpu);
|
||||||
|
m_registers["r0"]->setText(QString("%1").arg((uint32_t) core->gprs[0], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r1"]->setText(QString("%1").arg((uint32_t) core->gprs[1], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r2"]->setText(QString("%1").arg((uint32_t) core->gprs[2], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r3"]->setText(QString("%1").arg((uint32_t) core->gprs[3], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r4"]->setText(QString("%1").arg((uint32_t) core->gprs[4], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r5"]->setText(QString("%1").arg((uint32_t) core->gprs[5], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r6"]->setText(QString("%1").arg((uint32_t) core->gprs[6], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r7"]->setText(QString("%1").arg((uint32_t) core->gprs[7], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r8"]->setText(QString("%1").arg((uint32_t) core->gprs[8], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r9"]->setText(QString("%1").arg((uint32_t) core->gprs[9], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r10"]->setText(QString("%1").arg((uint32_t) core->gprs[10], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r11"]->setText(QString("%1").arg((uint32_t) core->gprs[11], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["r12"]->setText(QString("%1").arg((uint32_t) core->gprs[12], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["sp"]->setText(QString("%1").arg((uint32_t) core->gprs[ARM_SP], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["lr"]->setText(QString("%1").arg((uint32_t) core->gprs[ARM_LR], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["pc"]->setText(QString("%1").arg((uint32_t) core->gprs[ARM_PC], 8, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["cpsr"]->setText(QString("%1").arg((uint32_t) core->cpsr.packed, 8, 16, QChar('0')).toUpper());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
void RegisterView::updateRegistersLR35902() {
|
||||||
|
CoreController::Interrupter interrupter(m_controller);
|
||||||
|
struct LR35902Core* core = static_cast<LR35902Core*>(m_controller->thread()->core->cpu);
|
||||||
|
m_registers["a"]->setText(QString("%1").arg((uint8_t) core->a, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["f"]->setText(QString("%1").arg((uint8_t) core->f.packed, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["b"]->setText(QString("%1").arg((uint8_t) core->b, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["c"]->setText(QString("%1").arg((uint8_t) core->c, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["d"]->setText(QString("%1").arg((uint8_t) core->d, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["e"]->setText(QString("%1").arg((uint8_t) core->e, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["h"]->setText(QString("%1").arg((uint8_t) core->h, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["l"]->setText(QString("%1").arg((uint8_t) core->l, 2, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["sp"]->setText(QString("%1").arg((uint8_t) core->sp, 4, 16, QChar('0')).toUpper());
|
||||||
|
m_registers["pc"]->setText(QString("%1").arg((uint8_t) core->pc, 4, 16, QChar('0')).toUpper());
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* Copyright (c) 2013-2017 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QMap>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class QLabel;
|
||||||
|
|
||||||
|
namespace QGBA {
|
||||||
|
|
||||||
|
class CoreController;
|
||||||
|
|
||||||
|
class RegisterView : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
RegisterView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateRegisters();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void addRegisters(const QStringList& names);
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
void updateRegistersARM();
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
void updateRegistersLR35902();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QMap<QString, QLabel*> m_registers;
|
||||||
|
|
||||||
|
std::shared_ptr<CoreController> m_controller;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue