OAM: Sprite RAM is now initialized based on the ram power on settings

This commit is contained in:
Souryo 2017-02-23 20:01:48 -05:00
parent 8a450f6902
commit 40034199ee
5 changed files with 12 additions and 11 deletions

View file

@ -404,7 +404,7 @@ void BaseMapper::InitializeChrRam(int32_t chrRamSize)
_chrRamSize = chrRamSize >= 0 ? chrRamSize : defaultRamSize;
if(_chrRamSize > 0) {
_chrRam = new uint8_t[_chrRamSize];
InitializeRam(_chrRam, _chrRamSize);
BaseMapper::InitializeRam(_chrRam, _chrRamSize);
}
}
@ -531,8 +531,8 @@ void BaseMapper::Initialize(RomData &romData)
_saveRam = new uint8_t[_saveRamSize];
_workRam = new uint8_t[_workRamSize];
InitializeRam(_saveRam, _saveRamSize);
InitializeRam(_workRam, _workRamSize);
BaseMapper::InitializeRam(_saveRam, _saveRamSize);
BaseMapper::InitializeRam(_workRam, _workRamSize);
if(romData.HasTrainer && _workRamSize >= 0x2000) {
memcpy(_workRam + 0x1000, romData.TrainerData.data(), 512);
}
@ -660,11 +660,11 @@ void BaseMapper::SetNametable(uint8_t index, uint8_t nametableIndex)
{
if(nametableIndex == 2 && _cartNametableRam[0] == nullptr) {
_cartNametableRam[0] = new uint8_t[0x400];
InitializeRam(_cartNametableRam[0], 0x400);
BaseMapper::InitializeRam(_cartNametableRam[0], 0x400);
}
if(nametableIndex == 3 && _cartNametableRam[1] == nullptr) {
_cartNametableRam[1] = new uint8_t[0x400];
InitializeRam(_cartNametableRam[1], 0x400);
BaseMapper::InitializeRam(_cartNametableRam[1], 0x400);
}
_nametableIndexes[index] = nametableIndex;

View file

@ -219,7 +219,7 @@ public:
virtual uint8_t ReadVRAM(uint16_t addr, MemoryOperationType type = MemoryOperationType::Read);
void WriteVRAM(uint16_t addr, uint8_t value);
void InitializeRam(void* data, uint32_t length);
static void InitializeRam(void* data, uint32_t length);
//Debugger Helper Functions
CartridgeState GetState();

View file

@ -15,7 +15,7 @@ MemoryManager::MemoryManager(shared_ptr<BaseMapper> mapper)
_internalRAM = new uint8_t[InternalRAMSize];
for(int i = 0; i < 2; i++) {
_nametableRAM[i] = new uint8_t[NameTableScreenSize];
_mapper->InitializeRam(_nametableRAM[i], NameTableScreenSize);
BaseMapper::InitializeRam(_nametableRAM[i], NameTableScreenSize);
}
_mapper->SetDefaultNametables(_nametableRAM[0], _nametableRAM[1]);
@ -41,7 +41,7 @@ MemoryManager::~MemoryManager()
void MemoryManager::Reset(bool softReset)
{
if(!softReset) {
_mapper->InitializeRam(_internalRAM, InternalRAMSize);
BaseMapper::InitializeRam(_internalRAM, InternalRAMSize);
}
_mapper->Reset(softReset);

View file

@ -58,6 +58,5 @@ class MemoryManager: public Snapshotable
uint32_t ToAbsoluteChrAddress(uint16_t vramAddr);
static uint8_t GetOpenBus(uint8_t mask = 0xFF);
static void InitializeRam(uint8_t* data, uint32_t length);
};

View file

@ -4,6 +4,7 @@
#include "EmulationSettings.h"
#include "VideoDecoder.h"
#include "Debugger.h"
#include "BaseMapper.h"
PPU* PPU::Instance = nullptr;
@ -22,8 +23,9 @@ PPU::PPU(MemoryManager *memoryManager)
uint8_t paletteRamBootValues[0x20] { 0x09, 0x01, 0x00, 0x01, 0x00, 0x02, 0x02, 0x0D, 0x08, 0x10, 0x08, 0x24, 0x00, 0x00, 0x04, 0x2C,
0x09, 0x01, 0x34, 0x03, 0x00, 0x04, 0x00, 0x14, 0x08, 0x3A, 0x00, 0x02, 0x00, 0x20, 0x2C, 0x08 };
memcpy(_paletteRAM, paletteRamBootValues, sizeof(_paletteRAM));
memset(_spriteRAM, 0xFF, 0x100);
memset(_secondarySpriteRAM, 0xFF, 0x20);
BaseMapper::InitializeRam(_spriteRAM, 0x100);
BaseMapper::InitializeRam(_secondarySpriteRAM, 0x20);
_simpleMode = false;