improve pcehawk memory domains

This commit is contained in:
zeromus 2021-10-25 01:43:00 -04:00
parent 41128abc37
commit 7c8bd4f98c
1 changed files with 26 additions and 5 deletions

View File

@ -9,12 +9,13 @@ namespace BizHawk.Emulation.Cores.PCEngine
public sealed partial class PCEngine
{
private readonly Dictionary<string, MemoryDomainByteArray> _byteArrayDomains = new Dictionary<string, MemoryDomainByteArray>();
private readonly Dictionary<string, MemoryDomainUshortArray> _ushortArrayDomains = new Dictionary<string, MemoryDomainUshortArray>();
private bool _memoryDomainsInit;
private MemoryDomainList _memoryDomains;
private void SetupMemoryDomains()
{
var domains = new List<MemoryDomain>(2);
var domains = new List<MemoryDomain>();
var systemBusDomain = new MemoryDomainDelegate("System Bus (21 bit)", 0x200000, MemoryDomain.Endian.Little,
(addr) =>
@ -50,10 +51,12 @@ namespace BizHawk.Emulation.Cores.PCEngine
SyncAllByteArrayDomains();
_memoryDomains = new MemoryDomainList(domains.Concat(_byteArrayDomains.Values).ToList())
{
SystemBus = cpuBusDomain, MainMemory = _byteArrayDomains["Main Memory"]
};
domains.AddRange(_byteArrayDomains.Values);
domains.AddRange(_ushortArrayDomains.Values);
_memoryDomains = new MemoryDomainList(domains);
_memoryDomains.SystemBus = cpuBusDomain;
_memoryDomains.MainMemory = _byteArrayDomains["Main Memory"];
((BasicServiceProvider) ServiceProvider).Register<IMemoryDomains>(_memoryDomains);
_memoryDomainsInit = true;
@ -64,6 +67,10 @@ namespace BizHawk.Emulation.Cores.PCEngine
SyncByteArrayDomain("Main Memory", Ram);
SyncByteArrayDomain("ROM", RomData);
SyncUshortArrayDomain("VRAM1", VDC1.VRAM);
SyncUshortArrayDomain("VCEPalette", VCE.VceData);
if (BRAM != null)
SyncByteArrayDomain("Battery RAM", BRAM);
@ -101,5 +108,19 @@ namespace BizHawk.Emulation.Cores.PCEngine
_byteArrayDomains.Add(name, m);
}
}
private void SyncUshortArrayDomain(string name, ushort[] data)
{
if (_memoryDomainsInit)
{
var m = _ushortArrayDomains[name];
m.Data = data;
}
else
{
var m = new MemoryDomainUshortArray(name, MemoryDomain.Endian.Big, data, true);
_ushortArrayDomains.Add(name, m);
}
}
}
}