This commit is contained in:
Clément Le Bihan
2020-02-14 17:32:13 +01:00
parent 22c31ddf3a
commit b57a0ef92d
3 changed files with 68 additions and 18 deletions

View File

@@ -39,8 +39,12 @@ namespace ComSquare::PPU
this->_oamadd.oamaddh = data;
break;
case ppuRegisters::oamdata:
//! @brief not implemented yet.
this->_oamdata = data;
throw InvalidAddress("oamdata", addr);
std::cout << "oamdata" << std::endl;
// the oamAddress have to be calculated if fblank or not (not implemented)
_oamram.write(this->_oamadd.oamAddress, this->_oamdata);
this->_oamadd.oamAddress++;
break;
case ppuRegisters::bgmode:
this->_bgmode.raw = data;
@@ -73,7 +77,17 @@ namespace ComSquare::PPU
break;
case ppuRegisters::vmain:
this->_vmain.raw = data;
break;
switch (this->_vmain.incrementAmount) {
case 0b00:
this->_incrementAmount = 1;
break;
case 0b01:
this->_incrementAmount = 32;
break;
case 0b10:
case 0b11:
this->_incrementAmount = 128;
}
case ppuRegisters::vmaddl:
this->_vmadd.vmaddl = data;
break;
@@ -81,20 +95,23 @@ namespace ComSquare::PPU
this->_vmadd.vmaddh = data;
break;
case ppuRegisters::vmdatal:
throw InvalidAddress("vmdata", addr);
std::cout << "vmdatal" << std::endl;
if (!this->_inidisp.fblank) {
this->_vmdata.vmdatal = data;
//this->_vram[getVramAddress()] = this->_vmdata.vmdata;
this->_vram.write(getVramAddress(), this->_vmdata.vmdata);
}
if (!this->_vmain.incrementMode)
this->_vmadd.vmadd += this->_vmain.incrementAmount;
this->_vmadd.vmadd += this->_incrementAmount;
break;
case ppuRegisters::vmdatah:
std::cout << "vmdatah" << std::endl;
if (!this->_inidisp.fblank) {
this->_vmdata.vmdatah = data;
//this->_vram[getVramAddress()] = this->_vmdata.vmdata;
this->_vram.write(getVramAddress(), this->_vmdata.vmdata);
}
if (this->_vmain.incrementMode)
this->_vmadd.vmadd += this->_vmain.incrementAmount;
this->_vmadd.vmadd += this->_incrementAmount;
break;
case ppuRegisters::m7sel:
this->_m7sel.raw = data;
@@ -104,11 +121,14 @@ namespace ComSquare::PPU
this->_isLowByte = true;
break;
case ppuRegisters::cgdata:
throw InvalidAddress("cgdata", addr);
if (this->_isLowByte) {
std::cout << "cgadatal" << std::endl;
this->_cgdata.cgdatal = data;
this->_cgram.write(this->_cgadd, this->_cgdata.raw);
}
else {
std::cout << "cgadatah" << std::endl;
this->_cgdata.cgdatah = data;
this->_cgram.write(this->_cgadd, this->_cgdata.raw);
}
@@ -186,14 +206,18 @@ namespace ComSquare::PPU
int inc = 0;
//uint32_t pixelTmp = 0xFFFFFFFF;
//pixelTmp |= this->_inidisp.brightness;
std::cout << "update" << std::endl;
if (!this->_inidisp.fblank) {
for (int x = 0; x < 448; x++) {
for (int y = 0; y < 512; y++) {
//this->_renderer.putPixel(x, y, ((uint32_t)_vram[inc++] << 8U) + 0xFFU);
if (inc == 0xFA00)
inc = 0;
//std::cout << "holy" << std::endl;
this->_renderer.putPixel(x, y, (uint32_t)this->_vram.read(inc++));
}
}
}
std::cout << "cgadata2" << std::endl;
this->_renderer.drawScreen();
}
@@ -205,6 +229,5 @@ namespace ComSquare::PPU
_cgram(512)
{
this->_isLowByte = true;
//_vram = new uint16_t[32000];
}
}