mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-06 11:22:27 +00:00
fixing scroll registers except mode 7
This commit is contained in:
+18
-10
@@ -203,7 +203,7 @@ namespace ComSquare::PPU
|
|||||||
|
|
||||||
uint8_t PPU::read(uint24_t addr)
|
uint8_t PPU::read(uint24_t addr)
|
||||||
{
|
{
|
||||||
return 0;
|
//return 0;
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case PpuRegisters::mpyl:
|
case PpuRegisters::mpyl:
|
||||||
return this->_registers._mpy.mpyl;
|
return this->_registers._mpy.mpyl;
|
||||||
@@ -248,7 +248,7 @@ namespace ComSquare::PPU
|
|||||||
|
|
||||||
void PPU::write(uint24_t addr, uint8_t data)
|
void PPU::write(uint24_t addr, uint8_t data)
|
||||||
{
|
{
|
||||||
return;
|
//return;
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case PpuRegisters::inidisp:
|
case PpuRegisters::inidisp:
|
||||||
this->_registers._inidisp.raw = data;
|
this->_registers._inidisp.raw = data;
|
||||||
@@ -294,20 +294,28 @@ namespace ComSquare::PPU
|
|||||||
break;
|
break;
|
||||||
case PpuRegisters::bg12nba:
|
case PpuRegisters::bg12nba:
|
||||||
case PpuRegisters::bg34nba:
|
case PpuRegisters::bg34nba:
|
||||||
this->_registers._bgnba[addr - 0x0B].raw = data;
|
this->_registers._bgnba[addr - PpuRegisters::bg12nba].raw = data;
|
||||||
break;
|
break;
|
||||||
case PpuRegisters::bg1hofs:
|
case PpuRegisters::bg1hofs:
|
||||||
case PpuRegisters::bg1vofs:
|
// TODO need of special var for prev value for Mode 7
|
||||||
|
this->_registers._m7ofs[addr - PpuRegisters::bg1hofs].raw = data;
|
||||||
|
__attribute__((fallthrough));
|
||||||
case PpuRegisters::bg2hofs:
|
case PpuRegisters::bg2hofs:
|
||||||
case PpuRegisters::bg2vofs:
|
|
||||||
case PpuRegisters::bg3hofs:
|
case PpuRegisters::bg3hofs:
|
||||||
case PpuRegisters::bg3vofs:
|
|
||||||
case PpuRegisters::bg4hofs:
|
case PpuRegisters::bg4hofs:
|
||||||
|
this->_registers._bgofs[addr - PpuRegisters::bg1hofs].raw = ((data << 8) | (this->_ppuState.hvSharedScrollPrevValue & ~7) | (this->_ppuState.hScrollPrevValue & 7)) & 0x3FF;
|
||||||
|
this->_ppuState.hScrollPrevValue = data;
|
||||||
|
this->_ppuState.hvSharedScrollPrevValue = data;
|
||||||
|
break;
|
||||||
|
case PpuRegisters::bg1vofs:
|
||||||
|
// TODO need of special var for prev value for Mode 7
|
||||||
|
this->_registers._bgnba[addr - PpuRegisters::bg12nba].raw = data;
|
||||||
|
__attribute__((fallthrough));
|
||||||
|
case PpuRegisters::bg2vofs:
|
||||||
|
case PpuRegisters::bg3vofs:
|
||||||
case PpuRegisters::bg4vofs:
|
case PpuRegisters::bg4vofs:
|
||||||
// Work in progress !
|
this->_registers._bgofs[addr - PpuRegisters::bg1hofs].raw = ((data << 8) | this->_ppuState.hvSharedScrollPrevValue) & 0x3FF;
|
||||||
if (addr == PpuRegisters::bg1hofs || addr == PpuRegisters::bg1vofs)
|
this->_ppuState.hvSharedScrollPrevValue = data;
|
||||||
this->_registers._m7ofs[addr - PpuRegisters::bg1hofs].raw = data;
|
|
||||||
this->_registers._bgofs[addr - PpuRegisters::bg1hofs].raw = data;
|
|
||||||
break;
|
break;
|
||||||
case PpuRegisters::vmain:
|
case PpuRegisters::vmain:
|
||||||
this->_registers._vmain.raw = data;
|
this->_registers._vmain.raw = data;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "../Ram/Ram.hpp"
|
#include "../Ram/Ram.hpp"
|
||||||
#include "../Models/Vector2.hpp"
|
#include "../Models/Vector2.hpp"
|
||||||
#include "Background.hpp"
|
#include "Background.hpp"
|
||||||
|
#include "PPUUtils.hpp"
|
||||||
|
|
||||||
//#define max2BitTiles 4096
|
//#define max2BitTiles 4096
|
||||||
//#define max4BitTiles 2048
|
//#define max4BitTiles 2048
|
||||||
@@ -570,6 +571,8 @@ namespace ComSquare::PPU
|
|||||||
std::array<std::array<uint32_t, 1024>, 1024> _screen;
|
std::array<std::array<uint32_t, 1024>, 1024> _screen;
|
||||||
//! @brief Used for vram read registers (0x2139 - 0x213A)
|
//! @brief Used for vram read registers (0x2139 - 0x213A)
|
||||||
uint16_t _vramReadBuffer = 0;
|
uint16_t _vramReadBuffer = 0;
|
||||||
|
//! @brief Struct that contain all necessary vars for the use of the registers
|
||||||
|
struct PpuState _ppuState;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit PPU(Renderer::IRenderer &renderer);
|
explicit PPU(Renderer::IRenderer &renderer);
|
||||||
|
|||||||
@@ -28,5 +28,13 @@ namespace ComSquare::PPU
|
|||||||
uint16_t raw = 0;
|
uint16_t raw = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @brief Struct to save all specific variables needed for the registers (prev values for example)
|
||||||
|
struct PpuState {
|
||||||
|
//! @brief Used by by all eight BGnxOFS registers (0x210D - 0x2114)
|
||||||
|
uint8_t hvSharedScrollPrevValue;
|
||||||
|
//! @brief Shared by the four BGnHOFS registers
|
||||||
|
uint8_t hScrollPrevValue;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif //COMSQUARE_PPU_UTILS_HPP
|
#endif //COMSQUARE_PPU_UTILS_HPP
|
||||||
Reference in New Issue
Block a user