diff --git a/sources/Debugger/MemoryViewer.cpp b/sources/Debugger/MemoryViewer.cpp index acc55a2..2e1b6b4 100644 --- a/sources/Debugger/MemoryViewer.cpp +++ b/sources/Debugger/MemoryViewer.cpp @@ -80,7 +80,9 @@ namespace ComSquare::Debugger this->_ui.tabs->addTab("&WRam"); this->_ui.tabs->addTab("&SRam"); this->_ui.tabs->addTab("&Rom"); - //this->_ui.tabs->addTab("&CGRam"); + this->_ui.tabs->addTab("&CGRam"); + this->_ui.tabs->addTab("&VRam"); + this->_ui.tabs->addTab("&OAMRam"); QMainWindow::connect(this->_ui.actionGoto, &QAction::triggered, this, &MemoryViewer::gotoAddr); QMainWindow::connect(this->_ui.actionGoto_Absolute, &QAction::triggered, this, &MemoryViewer::gotoAbsoluteAddr); QObject::connect(this->_ui.tabs, &QTabBar::currentChanged, this, &MemoryViewer::changeRam); @@ -105,9 +107,15 @@ namespace ComSquare::Debugger case 2: this->_model.setMemory(this->_snes.cartridge); break; - // case 3: - // this->_model.setMemory(std::make_shared(this->_snes.ppu->getPpuCgRam())); - // break; + case 3: + this->_model.setMemory(this->_snes.ppu->cgram); + break; + case 4: + this->_model.setMemory(this->_snes.ppu->vram); + break; + case 5: + this->_model.setMemory(this->_snes.ppu->oamram); + break; } } diff --git a/sources/PPU/PPU.cpp b/sources/PPU/PPU.cpp index 05bc892..1813238 100644 --- a/sources/PPU/PPU.cpp +++ b/sources/PPU/PPU.cpp @@ -13,9 +13,9 @@ namespace ComSquare::PPU { PPU::PPU(Renderer::IRenderer &renderer): _renderer(renderer), - _vram(65536, ComSquare::VRam, "VRAM"), - _oamram(544, ComSquare::OAMRam, "OAMRAM"), - _cgram(512, ComSquare::CGRam, "CGRAM") + vram(new Ram::Ram(65536, ComSquare::VRam, "VRAM")), + oamram(new Ram::Ram(544, ComSquare::OAMRam, "OAMRAM")), + cgram(new Ram::Ram(512, ComSquare::CGRam, "CGRAM")) { this->_registers._isLowByte = true; } @@ -55,7 +55,7 @@ namespace ComSquare::PPU //throw InvalidAddress("oamdata", addr); std::cout << "oamdata" << std::endl; // the oamAddress have to be calculated if fblank or not (not implemented) - _oamram.write_internal(this->_registers._oamadd.oamAddress, this->_registers._oamdata); + oamram->write_internal(this->_registers._oamadd.oamAddress, this->_registers._oamdata); this->_registers._oamadd.oamAddress++; break; case ppuRegisters::bgmode: @@ -112,7 +112,7 @@ namespace ComSquare::PPU //std::cout << "vmdatal" << std::endl; if (!this->_registers._inidisp.fblank) { this->_registers._vmdata.vmdatal = data; - this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdata); + this->vram->write_internal(getVramAddress(), this->_registers._vmdata.vmdata); } if (!this->_registers._vmain.incrementMode) this->_registers._vmadd.vmadd += this->_registers._incrementAmount; @@ -121,8 +121,8 @@ namespace ComSquare::PPU //std::cout << "vmdatah" << std::endl; if (!this->_registers._inidisp.fblank) { this->_registers._vmdata.vmdatah = data; - this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdatal); - this->_vram.write_internal(getVramAddress(), this->_registers._vmdata.vmdatah); + this->vram->write_internal(getVramAddress(), this->_registers._vmdata.vmdatal); + this->vram->write_internal(getVramAddress(), this->_registers._vmdata.vmdatah); } if (this->_registers._vmain.incrementMode) this->_registers._vmadd.vmadd += this->_registers._incrementAmount; @@ -146,9 +146,9 @@ namespace ComSquare::PPU } else { this->_registers._cgdata.cgdatah = data; - this->_cgram.write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatal); + this->cgram->write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatal); this->_registers._cgadd++; - this->_cgram.write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatah); + this->cgram->write_internal(this->_registers._cgadd, this->_registers._cgdata.cgdatah); this->_registers._cgadd++; } this->_registers._isLowByte = !this->_registers._isLowByte; @@ -228,8 +228,8 @@ namespace ComSquare::PPU uint32_t pixelTmp = 0x0; if (!this->_registers._inidisp.fblank) { for (int y = 0; y <= 255; y += 2) { - tmp = this->_cgram.read_internal(y); - tmp += this->_cgram.read_internal( y + 1) << 8; + tmp = this->cgram->read_internal(y); + tmp += this->cgram->read_internal(y + 1) << 8; blue = (tmp & 0x7D00U) >> 10U; green = (tmp & 0x03E0U) >> 5U; red = (tmp & 0x001FU); @@ -399,7 +399,7 @@ namespace ComSquare::PPU uint16_t PPU::cgramRead(uint8_t addr) { - return this->_cgram.read_internal(addr); + return this->cgram->read_internal(addr); } void PPU::renderBackground(int bgNumber, std::vector characterSize, int bpp, bool priority) @@ -411,25 +411,10 @@ namespace ComSquare::PPU for (int i = 0; i < nbCharactersHeight * nbCharactersWidth; i++) { for (int j = 0; j < 0x800; j++) { - tilemapValue = this->_vram.read(vramAddress); + tilemapValue = this->vram->read(vramAddress); vramAddress++; } } } - - Ram::Ram &PPU::getPpuCgRam() - { - return this->_cgram; - } - - Ram::Ram &PPU::getPpuVRam() - { - return this->_vram; - } - - Ram::Ram &PPU::getPpuOAMRam() - { - return this->_oamram; - } } \ No newline at end of file diff --git a/sources/PPU/PPU.hpp b/sources/PPU/PPU.hpp index ed2a16a..272d6b6 100644 --- a/sources/PPU/PPU.hpp +++ b/sources/PPU/PPU.hpp @@ -501,10 +501,11 @@ namespace ComSquare::PPU //! @brief Init ppuRegisters Registers _registers{}; Renderer::IRenderer &_renderer; - Ram::Ram _vram; - Ram::Ram _oamram; - Ram::Ram _cgram; public: + std::shared_ptr vram; + std::shared_ptr oamram; + std::shared_ptr cgram; + explicit PPU(Renderer::IRenderer &renderer); PPU(const PPU &) = delete; PPU &operator=(const PPU &) = delete; @@ -536,12 +537,6 @@ namespace ComSquare::PPU virtual bool isDebugger(); //! @brief Allow others components to read the CGRAM (Debuggers) 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 void renderBackground(int bgNumber, std::vector characterSize, int bpp, bool priority); };