diff --git a/sources/PPU/PPU.cpp b/sources/PPU/PPU.cpp index 0c5b98f..a8389ba 100644 --- a/sources/PPU/PPU.cpp +++ b/sources/PPU/PPU.cpp @@ -126,7 +126,7 @@ namespace ComSquare::PPU //std::cout << "vmdatal" << std::endl; if (!this->_registers._inidisp.fblank) { this->_registers._vmdata.vmdatal = data; - this->vram->write_internal(getVramAddress(), data); + this->vram->write_internal(this->getVramAddress(), data); } if (!this->_registers._vmain.incrementMode) this->_registers._vmadd.vmadd += this->_registers._incrementAmount; @@ -135,7 +135,7 @@ namespace ComSquare::PPU //std::cout << "vmdatah" << std::endl; if (!this->_registers._inidisp.fblank) { this->_registers._vmdata.vmdatah = data; - this->vram->write_internal(getVramAddress(), data); + this->vram->write_internal(this->getVramAddress() + 1, data); } if (this->_registers._vmain.incrementMode) this->_registers._vmadd.vmadd += this->_registers._incrementAmount; @@ -221,7 +221,7 @@ namespace ComSquare::PPU uint16_t PPU::getVramAddress() { - uint16_t vanillaAddress = this->_registers._vmadd.vmadd; + uint16_t vanillaAddress = this->_registers._vmadd.vmadd * 2; switch (this->_registers._vmain.addressRemapping) { case 0b00: diff --git a/tests/CPU/testDMA.cpp b/tests/CPU/testDMA.cpp index ce757e5..bc86cde 100644 --- a/tests/CPU/testDMA.cpp +++ b/tests/CPU/testDMA.cpp @@ -55,6 +55,7 @@ using namespace ComSquare; Test(DMA, VramWrite) { Init() + //snes.bus->write(0x2115, 0b10000000); snes.bus->write(0x2117, 0x20); snes.bus->write(0x2116, 0x0); for (unsigned i = 0; i < 0x400; i++) { @@ -63,8 +64,8 @@ Test(DMA, VramWrite) cr_assert_eq(snes.ppu->_registers._vmadd.vmadd, 0x2001 + i, "The vram address was %x but it should have been %x", snes.ppu->_registers._vmadd.vmadd, 0x2001 + i); } for(unsigned i = 0; i < 0x400; i++) { - uint16_t value = snes.ppu->vram->_data[0x2000 + i * 2] | (snes.ppu->vram->_data[0x2000 + i * 2 + 1] << 8); - std::cout << std::hex << 0x2000 + i << ": " << value << std::endl; -// cr_assert_eq(value, (uint16_t)i, "The memory at %x should be %x but it was %x", 0x2000 + i, (uint16_t)i, value); + uint16_t value = snes.ppu->vram->_data[0x2000 * 2 + i * 2] | (snes.ppu->vram->_data[0x2000 * 2 + i * 2 + 1] << 8); + //std::cout << std::hex << 0x2000 + i << ": " << value << std::endl; + cr_assert_eq(value, (uint16_t)i, "The memory at %x should be %x but it was %x", 0x2000 + i, (uint16_t)i, value); } } \ No newline at end of file