mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-07 19:50:48 +00:00
starting to implement registers of ppu in debugger
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user