cgram oamram and vram are now RAM type and the storage method need to be fix

This commit is contained in:
Clément Le Bihan
2020-04-04 22:49:31 +02:00
parent c23341093c
commit 65a00f55a2
3 changed files with 36 additions and 13 deletions
+1 -1
View File
@@ -208,7 +208,7 @@ add_executable(ComSquare
sources/Models/Components.hpp
sources/Debugger/CGramDebug.cpp
sources/Debugger/CGramDebug.hpp
)
)
target_compile_definitions(ComSquare PUBLIC DEBUGGER_ENABLED)
+28 -8
View File
@@ -7,14 +7,15 @@
#include "PPU.hpp"
#include "../Exceptions/NotImplementedException.hpp"
#include "../Exceptions/InvalidAddress.hpp"
#include "../Ram/Ram.hpp"
namespace ComSquare::PPU
{
PPU::PPU(Renderer::IRenderer &renderer):
_renderer(renderer),
_vram(65536),
_oamram(544),
_cgram(512)
_vram(65536, ComSquare::VRam, "VRAM"),
_oamram(544, ComSquare::OAMRam, "OAMRAM"),
_cgram(512, ComSquare::CGRam, "CGRAM")
{
this->_registers._isLowByte = true;
}
@@ -29,8 +30,9 @@ namespace ComSquare::PPU
case 0x36:
return this->_registers._mpy.mpyh;
default:
throw InvalidAddress("PPU Internal Registers read", addr);
}
//throw InvalidAddress("PPU Internal Registers read", addr);
std::cout << "PPU Internal Registers read" << addr << std::endl;
}
}
void PPU::write(uint24_t addr, uint8_t data)
@@ -143,7 +145,9 @@ namespace ComSquare::PPU
}
else {
this->_registers._cgdata.cgdatah = data;
this->_cgram.write(this->_registers._cgadd, this->_registers._cgdata.raw);
this->_cgram.write(this->_registers._cgadd, this->_registers._cgdata.cgdatah);
this->_registers._cgadd++;
this->_cgram.write(this->_registers._cgadd, this->_registers._cgdata.cgdatal);
this->_registers._cgadd++;
}
this->_registers._isLowByte = !this->_registers._isLowByte;
@@ -222,9 +226,9 @@ namespace ComSquare::PPU
uint8_t blue;
uint32_t pixelTmp = 0x0;
if (!this->_registers._inidisp.fblank) {
for (int y = 0; y <= 255; y++) {
for (int y = 0; y <= 255; y += 2) {
tmp = this->_cgram.read(y);
tmp += this->_cgram.read( y + 1) << 8;
blue = (tmp & 0x7D00U) >> 10U;
green = (tmp & 0x03E0U) >> 5U;
red = (tmp & 0x001FU);
@@ -396,4 +400,20 @@ namespace ComSquare::PPU
{
return this->_cgram.read(addr);
}
void PPU::renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority)
{
int nbCharactersHeight = (this->_registers._bgsc[bgNumber].tilemapVerticalMirroring) ? 64 : 32;
int nbCharactersWidth = (this->_registers._bgsc[bgNumber].tilemapHorizontalMirroring) ? 64 : 32;
uint16_t vramAddress = this->_registers._bgsc[bgNumber].tilemapAddress >> 8U;
uint16_t tilemapValue;
for (int i = 0; i < nbCharactersHeight * nbCharactersWidth; i++) {
for (int j = 0; j < 0x800; j++) {
tilemapValue = this->_vram.read(vramAddress);
vramAddress++;
}
}
}
}
+7 -4
View File
@@ -9,7 +9,8 @@
#include "../Memory/AMemory.hpp"
#include "../Memory/MemoryBus.hpp"
#include "../Renderer/IRenderer.hpp"
#include "../Ram/ExtendedRam.hpp"
//#include "../Ram/ExtendedRam.hpp"
#include "../Ram/Ram.hpp"
//#define max2BitTiles 4096
//#define max4BitTiles 2048
@@ -500,9 +501,9 @@ namespace ComSquare::PPU
//! @brief Init ppuRegisters
Registers _registers{};
Renderer::IRenderer &_renderer;
Ram::ExtendedRam _vram;
Ram::ExtendedRam _oamram;
Ram::ExtendedRam _cgram;
Ram::Ram _vram;
Ram::Ram _oamram;
Ram::Ram _cgram;
public:
explicit PPU(Renderer::IRenderer &renderer);
PPU(const PPU &) = delete;
@@ -535,6 +536,8 @@ namespace ComSquare::PPU
virtual bool isDebugger();
//! @brief Allow others components to read the CGRAM (Debuggers)
uint16_t cgramRead(uint8_t addr);
//! @brief Render a background on the screen
void renderBackground(int bgNumber, std::vector<int> characterSize, int bpp, bool priority);
};
}
#endif //COMSQUARE_PPU_HPP