Namco163: Fixed save games for games that use the mapper's 128-byte internal RAM as save data
This commit is contained in:
parent
72d9e7ee13
commit
8f53659d5f
4 changed files with 37 additions and 5 deletions
|
@ -630,9 +630,6 @@ void BaseMapper::Initialize(RomData &romData)
|
|||
InitializeChrRam();
|
||||
}
|
||||
|
||||
//Load battery data if present
|
||||
LoadBattery();
|
||||
|
||||
if(romData.Info.HasTrainer) {
|
||||
if(_workRamSize >= 0x2000) {
|
||||
memcpy(_workRam + 0x1000, romData.TrainerData.data(), 512);
|
||||
|
@ -648,6 +645,9 @@ void BaseMapper::Initialize(RomData &romData)
|
|||
InitMapper();
|
||||
InitMapper(romData);
|
||||
|
||||
//Load battery data if present
|
||||
LoadBattery();
|
||||
|
||||
ApplyCheats();
|
||||
|
||||
_romInfo.HasChrRam = HasChrRam();
|
||||
|
|
|
@ -125,7 +125,7 @@ protected:
|
|||
void RemovePpuMemoryMapping(uint16_t startAddr, uint16_t endAddr);
|
||||
|
||||
bool HasBattery();
|
||||
void LoadBattery();
|
||||
virtual void LoadBattery();
|
||||
string GetBatteryFilename();
|
||||
|
||||
uint32_t GetPRGPageCount();
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#include "stdafx.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "Namco163Audio.h"
|
||||
#include "Console.h"
|
||||
#include "BatteryManager.h"
|
||||
|
||||
enum class NamcoVariant
|
||||
{
|
||||
|
@ -109,6 +111,28 @@ protected:
|
|||
}
|
||||
}
|
||||
|
||||
void LoadBattery() override
|
||||
{
|
||||
if(HasBattery()) {
|
||||
vector<uint8_t> batteryContent(_saveRamSize + Namco163Audio::AudioRamSize, 0);
|
||||
_console->GetBatteryManager()->LoadBattery(".sav", batteryContent.data(), (uint32_t)batteryContent.size());
|
||||
|
||||
memcpy(_saveRam, batteryContent.data(), _saveRamSize);
|
||||
memcpy(_audio->GetInternalRam(), batteryContent.data()+_saveRamSize, Namco163Audio::AudioRamSize);
|
||||
}
|
||||
}
|
||||
|
||||
void SaveBattery() override
|
||||
{
|
||||
if(HasBattery()) {
|
||||
vector<uint8_t> batteryContent(_saveRamSize + Namco163Audio::AudioRamSize, 0);
|
||||
memcpy(batteryContent.data(), _saveRam, _saveRamSize);
|
||||
memcpy(batteryContent.data() + _saveRamSize, _audio->GetInternalRam(), Namco163Audio::AudioRamSize);
|
||||
|
||||
_console->GetBatteryManager()->SaveBattery(".sav", batteryContent.data(), (uint32_t)batteryContent.size());
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessCpuClock() override
|
||||
{
|
||||
if(_irqCounter & 0x8000 && (_irqCounter & 0x7FFF) != 0x7FFF) {
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
|
||||
class Namco163Audio : public BaseExpansionAudio
|
||||
{
|
||||
public:
|
||||
static constexpr uint32_t AudioRamSize = 0x80;
|
||||
|
||||
private:
|
||||
uint8_t _internalRam[0x80];
|
||||
uint8_t _internalRam[Namco163Audio::AudioRamSize];
|
||||
int16_t _channelOutput[8];
|
||||
uint8_t _ramPosition;
|
||||
bool _autoIncrement;
|
||||
|
@ -150,6 +153,11 @@ public:
|
|||
_disableSound = false;
|
||||
}
|
||||
|
||||
uint8_t* GetInternalRam()
|
||||
{
|
||||
return _internalRam;
|
||||
}
|
||||
|
||||
void WriteRegister(uint16_t addr, uint8_t value)
|
||||
{
|
||||
switch(addr & 0xF800) {
|
||||
|
|
Loading…
Add table
Reference in a new issue