diff --git a/sources/Memory/IRectangleMemory.cpp b/sources/Memory/IRectangleMemory.cpp index be4a1ad..bd5c178 100644 --- a/sources/Memory/IRectangleMemory.cpp +++ b/sources/Memory/IRectangleMemory.cpp @@ -53,7 +53,7 @@ namespace ComSquare::Memory uint24_t IRectangleMemory::getStart() { - return this->_startBank + this->_startPage; + return (this->_startBank << 16u) + this->_startPage; } void IRectangleMemory::setMemoryRegion(uint8_t startBank, uint8_t endBank, uint16_t startPage, uint16_t endPage) diff --git a/sources/Memory/MemoryBus.cpp b/sources/Memory/MemoryBus.cpp index 24dd473..a4418d0 100644 --- a/sources/Memory/MemoryBus.cpp +++ b/sources/Memory/MemoryBus.cpp @@ -88,11 +88,11 @@ namespace ComSquare::Memory // Mirror on the lower half of the Q2. this->_memoryAccessors.emplace_back((new Memory::RectangleShadow(console.cartridge, 0x40, 0x6F, 0x0000, 0x7FFF))->setBankOffset(0x40)); // Mirror on the lower half of the Q4 - this->_memoryAccessors.emplace_back((new Memory::RectangleShadow(console.cartridge, 0xC0, 0xF0, 0x0000, 0x7FFF))->setBankOffset(0x40)); + this->_memoryAccessors.emplace_back((new Memory::RectangleShadow(console.cartridge, 0xC0, 0xEF, 0x0000, 0x7FFF))->setBankOffset(0x40)); - console.sram->setMemoryRegion(0x70, 0x7D, 0x0000, 0x7FFF); + console.sram->setMemoryRegion(0xF0, 0xFD, 0x0000, 0x7FFF); this->_memoryAccessors.push_back(console.sram); - this->_memoryAccessors.emplace_back(new Memory::RectangleShadow(console.sram, 0xF0, 0xFD, 0x0000, 0x7FFF)); + this->_memoryAccessors.emplace_back(new Memory::RectangleShadow(console.sram, 0x70, 0x7D, 0x0000, 0x7FFF)); } // TODO should implement HiRom. } diff --git a/tests/testMemoryBus.cpp b/tests/testMemoryBus.cpp index d6f027e..17619c4 100644 --- a/tests/testMemoryBus.cpp +++ b/tests/testMemoryBus.cpp @@ -70,31 +70,28 @@ Test(BusAccessor, GetOpenBus) Test(BusAccessor, GetSramStart) { auto pair = Init(); - std::shared_ptr accessor = nullptr; + std::shared_ptr accessor = nullptr; - accessor = pair.first.getAccessor(0x700000); - cr_assert_eq(accessor.get(), pair.second.sram.get()); + accessor = std::static_pointer_cast(pair.first.getAccessor(0x700000)); + cr_assert_eq(accessor->_initial.get(), pair.second.sram.get()); } Test(BusAccessor, GetSramEnd) { auto pair = Init(); - std::shared_ptr accessor = nullptr; + std::shared_ptr accessor = nullptr; - accessor = pair.first.getAccessor(0x7D7FFF); - cr_assert_eq(accessor.get(), pair.second.sram.get()); + accessor = std::static_pointer_cast(pair.first.getAccessor(0x7D7FFF)); + cr_assert_eq(accessor->_initial.get(), pair.second.sram.get()); } Test(BusAccessor, GetSramMirror) { auto pair = Init(); - std::shared_ptr accessor = nullptr; + std::shared_ptr accessor = nullptr; - accessor = std::static_pointer_cast(pair.first.getAccessor(0xF00123)); - // TODO the page of the rectangle accessor seems a bit buggy and here the rom is returned as the accessor. - std::cout << std::hex << accessor->_initial->getStart() << std::endl; - std::cout << std::hex << pair.second.sram.get() << std::endl; - cr_assert_eq(accessor->_initial.get(), pair.second.sram.get()); + accessor = std::static_pointer_cast(pair.first.getAccessor(0xF00123)); + cr_assert_eq(accessor.get(), pair.second.sram.get()); } Test(BusAccessor, GetSramMirror2) @@ -103,7 +100,7 @@ Test(BusAccessor, GetSramMirror2) std::shared_ptr accessor = nullptr; // TODO implement the SRam accessor for the FE/FF. - std::cout << pair.first.getAccessor(0xFE0123) << std::endl; + //std::cout << pair.first.getAccessor(0xFE0123) << std::endl; accessor = std::static_pointer_cast(pair.first.getAccessor(0xFE0123)); cr_assert_eq(accessor->_initial.get(), pair.second.sram.get()); }