adding getters to ppus maps and modifing ram writes

This commit is contained in:
Clément Le Bihan
2020-04-05 15:52:06 +02:00
parent 65a00f55a2
commit 30198a5ad2
3 changed files with 36 additions and 14 deletions
+4 -4
View File
@@ -80,7 +80,7 @@ namespace ComSquare::Debugger
this->_ui.tabs->addTab("&WRam"); this->_ui.tabs->addTab("&WRam");
this->_ui.tabs->addTab("&SRam"); this->_ui.tabs->addTab("&SRam");
this->_ui.tabs->addTab("&Rom"); this->_ui.tabs->addTab("&Rom");
// this->_ui.tabs->addTab("&VRam"); //this->_ui.tabs->addTab("&CGRam");
QMainWindow::connect(this->_ui.actionGoto, &QAction::triggered, this, &MemoryViewer::gotoAddr); QMainWindow::connect(this->_ui.actionGoto, &QAction::triggered, this, &MemoryViewer::gotoAddr);
QMainWindow::connect(this->_ui.actionGoto_Absolute, &QAction::triggered, this, &MemoryViewer::gotoAbsoluteAddr); QMainWindow::connect(this->_ui.actionGoto_Absolute, &QAction::triggered, this, &MemoryViewer::gotoAbsoluteAddr);
QObject::connect(this->_ui.tabs, &QTabBar::currentChanged, this, &MemoryViewer::changeRam); QObject::connect(this->_ui.tabs, &QTabBar::currentChanged, this, &MemoryViewer::changeRam);
@@ -105,9 +105,9 @@ namespace ComSquare::Debugger
case 2: case 2:
this->_model.setMemory(this->_snes.cartridge); this->_model.setMemory(this->_snes.cartridge);
break; break;
// case 3: // case 3:
// this->_model.setMemory(this->_snes.vram); // this->_model.setMemory(std::make_shared(this->_snes.ppu->getPpuCgRam()));
// break; // break;
} }
} }
+26 -10
View File
@@ -55,7 +55,7 @@ namespace ComSquare::PPU
//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_internal(this->_registers._oamadd.oamAddress, this->_registers._oamdata);
this->_registers._oamadd.oamAddress++; this->_registers._oamadd.oamAddress++;
break; break;
case ppuRegisters::bgmode: case ppuRegisters::bgmode:
@@ -109,19 +109,20 @@ namespace ComSquare::PPU
break; break;
case ppuRegisters::vmdatal: case ppuRegisters::vmdatal:
//throw InvalidAddress("vmdata", addr); //throw InvalidAddress("vmdata", addr);
std::cout << "vmdatal" << std::endl; //std::cout << "vmdatal" << std::endl;
if (!this->_registers._inidisp.fblank) { if (!this->_registers._inidisp.fblank) {
this->_registers._vmdata.vmdatal = data; this->_registers._vmdata.vmdatal = data;
this->_vram.write(getVramAddress(), this->_registers._vmdata.vmdata); this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdata);
} }
if (!this->_registers._vmain.incrementMode) if (!this->_registers._vmain.incrementMode)
this->_registers._vmadd.vmadd += this->_registers._incrementAmount; this->_registers._vmadd.vmadd += this->_registers._incrementAmount;
break; break;
case ppuRegisters::vmdatah: case ppuRegisters::vmdatah:
std::cout << "vmdatah" << std::endl; //std::cout << "vmdatah" << std::endl;
if (!this->_registers._inidisp.fblank) { if (!this->_registers._inidisp.fblank) {
this->_registers._vmdata.vmdatah = data; this->_registers._vmdata.vmdatah = data;
this->_vram.write(getVramAddress(), this->_registers._vmdata.vmdata); this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdatal);
this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdatah);
} }
if (this->_registers._vmain.incrementMode) if (this->_registers._vmain.incrementMode)
this->_registers._vmadd.vmadd += this->_registers._incrementAmount; this->_registers._vmadd.vmadd += this->_registers._incrementAmount;
@@ -145,9 +146,9 @@ namespace ComSquare::PPU
} }
else { else {
this->_registers._cgdata.cgdatah = data; this->_registers._cgdata.cgdatah = data;
this->_cgram.write(this->_registers._cgadd, this->_registers._cgdata.cgdatah); this->_cgram.write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatal);
this->_registers._cgadd++; this->_registers._cgadd++;
this->_cgram.write(this->_registers._cgadd, this->_registers._cgdata.cgdatal); this->_cgram.write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatah);
this->_registers._cgadd++; this->_registers._cgadd++;
} }
this->_registers._isLowByte = !this->_registers._isLowByte; this->_registers._isLowByte = !this->_registers._isLowByte;
@@ -227,8 +228,8 @@ namespace ComSquare::PPU
uint32_t pixelTmp = 0x0; uint32_t pixelTmp = 0x0;
if (!this->_registers._inidisp.fblank) { if (!this->_registers._inidisp.fblank) {
for (int y = 0; y <= 255; y += 2) { for (int y = 0; y <= 255; y += 2) {
tmp = this->_cgram.read(y); tmp = this->_cgram.read_internal(y);
tmp += this->_cgram.read( y + 1) << 8; tmp += this->_cgram.read_internal( y + 1) << 8;
blue = (tmp & 0x7D00U) >> 10U; blue = (tmp & 0x7D00U) >> 10U;
green = (tmp & 0x03E0U) >> 5U; green = (tmp & 0x03E0U) >> 5U;
red = (tmp & 0x001FU); red = (tmp & 0x001FU);
@@ -398,7 +399,7 @@ namespace ComSquare::PPU
uint16_t PPU::cgramRead(uint8_t addr) uint16_t PPU::cgramRead(uint8_t addr)
{ {
return this->_cgram.read(addr); return this->_cgram.read_internal(addr);
} }
void PPU::renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority) void PPU::renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority)
@@ -416,4 +417,19 @@ namespace ComSquare::PPU
} }
} }
} }
Ram::Ram &PPU::getPpuCgRam()
{
return this->_cgram;
}
Ram::Ram &PPU::getPpuVRam()
{
return this->_vram;
}
Ram::Ram &PPU::getPpuOAMRam()
{
return this->_oamram;
}
} }
+6
View File
@@ -536,6 +536,12 @@ namespace ComSquare::PPU
virtual bool isDebugger(); virtual bool isDebugger();
//! @brief Allow others components to read the CGRAM (Debuggers) //! @brief Allow others components to read the CGRAM (Debuggers)
uint16_t cgramRead(uint8_t addr); uint16_t cgramRead(uint8_t addr);
//! @brief Allow Memory Viewer debugger to access the CGRAM
Ram::Ram &getPpuCgRam();
//! @brief Allow Memory Viewer debugger to access the VRAM
Ram::Ram &getPpuVRam();
//! @brief Allow Memory Viewer debugger to access the OAMRAM
Ram::Ram &getPpuOAMRam();
//! @brief Render a background on the screen //! @brief Render a background on the screen
void renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority); void renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority);
}; };