starting to implement registers of ppu in debugger

This commit is contained in:
Clément Le Bihan
2021-02-05 16:39:11 +01:00
parent 82f1dadee9
commit 499e2f4fa7
5 changed files with 64 additions and 6 deletions
+50 -1
View File
@@ -36,8 +36,9 @@ namespace ComSquare::Debugger
this->_ui.dmaChannel7, this->_ui.dmaChannel7,
this->_ui.dmaChannel8 this->_ui.dmaChannel8
}; };
RegistersViewerModel *model;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
RegistersViewerModel *model = new RegistersViewerModel(this->_snes); model = new RegistersViewerModel(this->_snes);
model->addRegister(Register(0x420B, std::string(":") + std::to_string(i), "Enabled", [i](SNES &snes) { model->addRegister(Register(0x420B, std::string(":") + std::to_string(i), "Enabled", [i](SNES &snes) {
return snes.cpu->_dmaChannels[i].enabled; return snes.cpu->_dmaChannels[i].enabled;
}, nullptr, Boolean)); }, nullptr, Boolean));
@@ -65,6 +66,52 @@ namespace ComSquare::Debugger
channels[i]->setModel(model); channels[i]->setModel(model);
this->_models.push_back(model); this->_models.push_back(model);
} }
// ppuRegisters
model = new RegistersViewerModel(this->_snes);
const PPU::Registers &ppuRegisters = this->_snes.ppu->getWriteRegisters();
//INIDISP 0X2100
model->addRegister(Register(0x2100, "", "INIDISP", [ppuRegisters](SNES &) {
return ppuRegisters._inidisp.raw;
}, nullptr, EightBits));
model->addRegister(Register(0x2100, ":0-3", "Screen brightness", [ppuRegisters](SNES &) {
return ppuRegisters._inidisp.brightness;
}, nullptr, Integer));
model->addRegister(Register(0x2100, ":7", "F-Blank", [ppuRegisters](SNES &) {
return ppuRegisters._inidisp.fblank;
}, nullptr, Boolean));
//OBSEL 0x2101
model->addRegister(Register(0x2101, "", "OBSEL", [ppuRegisters](SNES &) {
return ppuRegisters._obsel.raw;
}, nullptr, EightBits));
model->addRegister(Register(0x2101, ":0-2", "Name base select", [ppuRegisters](SNES &) {
return ppuRegisters._obsel.nameBaseSelect;
}, nullptr, EightBits));
model->addRegister(Register(0x2101, ":3-4", "Name select", [ppuRegisters](SNES &) {
return ppuRegisters._obsel.nameSelect;
}, nullptr, EightBits));
model->addRegister(Register(0x2101, ":5-7", "Object Size", [ppuRegisters](SNES &) {
return ppuRegisters._obsel.objectSize;
}, nullptr, EightBits));
//BGMODE 0x2105
model->addRegister(Register(0x2105, "", "BGMODE", [ppuRegisters](SNES &) {
return ppuRegisters._bgmode.raw;
}, nullptr, EightBits));
model->addRegister(Register(0x2105, ":0-2", "BG Mode", [ppuRegisters](SNES &) {
return ppuRegisters._bgmode.bgMode;
}, nullptr, Integer));
model->addRegister(Register(0x2105, ":3", "BG3 Priority Bit", [ppuRegisters](SNES &) {
return ppuRegisters._bgmode.mode1Bg3PriorityBit;
}, nullptr, Boolean));
for (int i = 0; i < 4; i++) {
model->addRegister(Register(0x2105, ":" + std::to_string(i + 4), "BG"+ std::to_string(i + 1) + " 16x16 Tiles", [ppuRegisters, i](SNES &) {
return (ppuRegisters._bgmode.raw >> (i + 4)) & 1;
}, nullptr, Boolean));
}
this->_ui.ppuRegisters->setModel(model);
} }
void RegisterViewer::focus() void RegisterViewer::focus()
@@ -141,6 +188,8 @@ QVariant RegistersViewerModel::data(const QModelIndex &index, int role) const
switch (reg.type) { switch (reg.type) {
case Boolean: case Boolean:
return QString(reg.get(this->_snes) ? "True" : "False"); return QString(reg.get(this->_snes) ? "True" : "False");
case Integer:
return QString::number(reg.get(this->_snes));
case EightBits: case EightBits:
return QString(Utility::to_hex(static_cast<uint8_t>(reg.get(this->_snes))).c_str()); return QString(Utility::to_hex(static_cast<uint8_t>(reg.get(this->_snes))).c_str());
case SixteenBits: case SixteenBits:
+3 -1
View File
@@ -87,7 +87,9 @@ namespace ComSquare
//! @brief A 16 bits hexadecimal value. //! @brief A 16 bits hexadecimal value.
SixteenBits, SixteenBits,
//! @brief A 24 bits hexadecimal value. //! @brief A 24 bits hexadecimal value.
TwentyFourBits TwentyFourBits,
//! @brief Just like printf(%d, myVar);
Integer
}; };
//! @brief Struct containing information about a register. //! @brief Struct containing information about a register.
+6 -1
View File
@@ -266,7 +266,7 @@ namespace ComSquare::PPU
case PpuRegisters::oamdata: case PpuRegisters::oamdata:
this->_registers._oamdata = data; this->_registers._oamdata = data;
//throw InvalidAddress("oamdata", addr); //throw InvalidAddress("oamdata", addr);
std::cout << "oamdata" << std::endl; //std::cout << "oamdata" << std::endl;
// the oamAddress have to be calculated if fblank or not (not implemented) // the oamAddress have to be calculated if fblank or not (not implemented)
oamram->write(this->_registers._oamadd.oamAddress, this->_registers._oamdata); oamram->write(this->_registers._oamadd.oamAddress, this->_registers._oamdata);
this->_registers._oamadd.oamAddress++; this->_registers._oamadd.oamAddress++;
@@ -839,4 +839,9 @@ namespace ComSquare::PPU
{ {
return Vector2<int>(this->_registers._bgofs[(bgNumber - 1) * 2].offsetBg, this->_registers._bgofs[(bgNumber - 1) * 2 + 1].offsetBg); return Vector2<int>(this->_registers._bgofs[(bgNumber - 1) * 2].offsetBg, this->_registers._bgofs[(bgNumber - 1) * 2 + 1].offsetBg);
} }
const Registers &PPU::getWriteRegisters() const
{
return this->_registers;
}
} }
+2
View File
@@ -631,6 +631,8 @@ namespace ComSquare::PPU
void updateVramReadBuffer(); void updateVramReadBuffer();
//! @brief update the Vram buffer //! @brief update the Vram buffer
Vector2<int> getBgScroll(int bgNumber) const; Vector2<int> getBgScroll(int bgNumber) const;
//! @brief Allow to look the value of each write register (used by Register debugger)
const Registers &getWriteRegisters() const;
}; };
} }
+3 -3
View File
@@ -22,7 +22,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>2</number>
</property> </property>
<property name="documentMode"> <property name="documentMode">
<bool>false</bool> <bool>false</bool>
@@ -51,7 +51,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget_2"> <widget class="QTabWidget" name="tabWidget_2">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>6</number>
</property> </property>
<widget class="QWidget" name="channel1"> <widget class="QWidget" name="channel1">
<attribute name="title"> <attribute name="title">
@@ -143,7 +143,7 @@
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QFormLayout" name="formLayout_2"/> <widget class="QTableView" name="ppuRegisters"/>
</item> </item>
</layout> </layout>
</widget> </widget>