Fixed issues/crashes when loading games with sram sizes below 4kb
This commit is contained in:
parent
0218d57de7
commit
5b35a8333a
3 changed files with 13 additions and 9 deletions
|
@ -147,11 +147,11 @@ void BaseCartridge::MapBanks(MemoryManager &mm, vector<unique_ptr<IMemoryHandler
|
|||
void BaseCartridge::RegisterHandlers(MemoryManager &mm)
|
||||
{
|
||||
for(uint32_t i = 0; i < _prgRomSize; i += 0x1000) {
|
||||
_prgRomHandlers.push_back(unique_ptr<RomHandler>(new RomHandler(_prgRom, i, SnesMemoryType::PrgRom)));
|
||||
_prgRomHandlers.push_back(unique_ptr<RomHandler>(new RomHandler(_prgRom, i, _prgRomSize, SnesMemoryType::PrgRom)));
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < _saveRamSize; i += 0x1000) {
|
||||
_saveRamHandlers.push_back(unique_ptr<RamHandler>(new RamHandler(_saveRam, i, SnesMemoryType::SaveRam)));
|
||||
_saveRamHandlers.push_back(unique_ptr<RamHandler>(new RamHandler(_saveRam, i, _saveRamSize, SnesMemoryType::SaveRam)));
|
||||
}
|
||||
|
||||
if(GetCartFlags() & CartFlags::LoRom) {
|
||||
|
@ -208,6 +208,8 @@ void BaseCartridge::DisplayCartInfo()
|
|||
|
||||
MessageManager::Log("File size: " + std::to_string(_prgRomSize / 1024) + " KB");
|
||||
MessageManager::Log("ROM size: " + std::to_string((0x400 << _cartInfo.RomSize) / 1024) + " KB");
|
||||
MessageManager::Log("SRAM size: " + std::to_string(1 << _cartInfo.SramSize) + " KB");
|
||||
if(_saveRamSize > 0) {
|
||||
MessageManager::Log("SRAM size: " + std::to_string(_saveRamSize / 1024) + " KB");
|
||||
}
|
||||
MessageManager::Log("-----------------------------");
|
||||
}
|
|
@ -39,7 +39,7 @@ void MemoryManager::Initialize(shared_ptr<Console> console)
|
|||
//memset(_workRam, 0, 128 * 1024);
|
||||
|
||||
for(uint32_t i = 0; i < 128 * 1024; i += 0x1000) {
|
||||
_workRamHandlers.push_back(unique_ptr<RamHandler>(new RamHandler(_workRam, i, SnesMemoryType::WorkRam)));
|
||||
_workRamHandlers.push_back(unique_ptr<RamHandler>(new RamHandler(_workRam, i, MemoryManager::WorkRamSize, SnesMemoryType::WorkRam)));
|
||||
RegisterHandler(0x7E0000 | i, 0x7E0000 | (i + 0xFFF), _workRamHandlers[_workRamHandlers.size() - 1].get());
|
||||
}
|
||||
|
||||
|
|
|
@ -8,35 +8,37 @@ class RamHandler : public IMemoryHandler
|
|||
private:
|
||||
uint8_t * _ram;
|
||||
uint32_t _offset;
|
||||
uint32_t _mask;
|
||||
SnesMemoryType _memoryType;
|
||||
|
||||
public:
|
||||
RamHandler(uint8_t *ram, uint32_t offset, SnesMemoryType memoryType)
|
||||
RamHandler(uint8_t *ram, uint32_t offset, uint32_t size, SnesMemoryType memoryType)
|
||||
{
|
||||
_ram = ram + offset;
|
||||
_offset = offset;
|
||||
_mask = (size - 1) & 0xFFF;
|
||||
_memoryType = memoryType;
|
||||
}
|
||||
|
||||
uint8_t Read(uint32_t addr) override
|
||||
{
|
||||
return _ram[addr & 0xFFF];
|
||||
return _ram[addr & _mask];
|
||||
}
|
||||
|
||||
uint8_t Peek(uint32_t addr) override
|
||||
{
|
||||
return _ram[addr & 0xFFF];
|
||||
return _ram[addr & _mask];
|
||||
}
|
||||
|
||||
void Write(uint32_t addr, uint8_t value) override
|
||||
{
|
||||
_ram[addr & 0xFFF] = value;
|
||||
_ram[addr & _mask] = value;
|
||||
}
|
||||
|
||||
AddressInfo GetAbsoluteAddress(uint32_t address) override
|
||||
{
|
||||
AddressInfo info;
|
||||
info.Address = _offset + (address & 0xFFF);
|
||||
info.Address = _offset + (address & _mask);
|
||||
info.Type = _memoryType;
|
||||
return info;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue