Qt: Add unused RegisterView class

This commit is contained in:
Vicki Pfau 2017-12-31 21:42:51 -05:00
parent bfb674fb4f
commit 44c6e94f8b
3 changed files with 185 additions and 0 deletions

View File

@ -99,6 +99,7 @@ set(SOURCE_FILES
OverrideView.cpp
PaletteView.cpp
PrinterView.cpp
RegisterView.cpp
ROMInfo.cpp
SavestateButton.cpp
SensorView.cpp

View File

@ -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

View File

@ -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;
};
}