From 40034199ee344fc2bc97c8d0e6bbfa2a6f5e7f04 Mon Sep 17 00:00:00 2001 From: Souryo Date: Thu, 23 Feb 2017 20:01:48 -0500 Subject: [PATCH] OAM: Sprite RAM is now initialized based on the ram power on settings --- Core/BaseMapper.cpp | 10 +++++----- Core/BaseMapper.h | 2 +- Core/MemoryManager.cpp | 4 ++-- Core/MemoryManager.h | 1 - Core/PPU.cpp | 6 ++++-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Core/BaseMapper.cpp b/Core/BaseMapper.cpp index cb9d1d81..ac944174 100644 --- a/Core/BaseMapper.cpp +++ b/Core/BaseMapper.cpp @@ -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; diff --git a/Core/BaseMapper.h b/Core/BaseMapper.h index b143117c..fdbf59f5 100644 --- a/Core/BaseMapper.h +++ b/Core/BaseMapper.h @@ -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(); diff --git a/Core/MemoryManager.cpp b/Core/MemoryManager.cpp index c5f48d2a..7a6dcbbc 100644 --- a/Core/MemoryManager.cpp +++ b/Core/MemoryManager.cpp @@ -15,7 +15,7 @@ MemoryManager::MemoryManager(shared_ptr 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); diff --git a/Core/MemoryManager.h b/Core/MemoryManager.h index 012b699d..2e8fcbb7 100644 --- a/Core/MemoryManager.h +++ b/Core/MemoryManager.h @@ -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); }; diff --git a/Core/PPU.cpp b/Core/PPU.cpp index 705d3e5d..8422c69d 100644 --- a/Core/PPU.cpp +++ b/Core/PPU.cpp @@ -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;