fix a dumb bug where Auto console mode blocked GBC IR when it shouldn't have; make linked memory domains make a linked system bus for the system bus field using LinkedDisassemblable (this is only relevant for debugger disassembly anyways)
This commit is contained in:
parent
670a71c6ee
commit
8112be31e1
|
@ -1,5 +1,6 @@
|
|||
#nullable disable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Emulation.Common
|
||||
|
@ -10,10 +11,13 @@ namespace BizHawk.Emulation.Common
|
|||
/// <seealso cref="IMemoryDomains" />
|
||||
public class LinkedMemoryDomains : MemoryDomainList
|
||||
{
|
||||
public LinkedMemoryDomains(IEmulator[] linkedCores, int numCores)
|
||||
public LinkedMemoryDomains(IEmulator[] linkedCores, int numCores, LinkedDisassemblable linkedDisassemblable)
|
||||
: base(LinkMemoryDomains(linkedCores, numCores))
|
||||
{
|
||||
SystemBus = linkedCores[0].AsMemoryDomains().SystemBus;
|
||||
if (linkedDisassemblable is not null)
|
||||
{
|
||||
SystemBus = new LinkedSystemBus(linkedCores, numCores, linkedDisassemblable);
|
||||
}
|
||||
}
|
||||
|
||||
private static List<MemoryDomain> LinkMemoryDomains(IEmulator[] linkedCores, int numCores)
|
||||
|
@ -46,15 +50,34 @@ namespace BizHawk.Emulation.Common
|
|||
Writable = m.Writable;
|
||||
}
|
||||
|
||||
public override byte PeekByte(long addr)
|
||||
public override byte PeekByte(long addr) => _m.PeekByte(addr);
|
||||
|
||||
public override void PokeByte(long addr, byte val) => _m.PokeByte(addr, val);
|
||||
}
|
||||
|
||||
private class LinkedSystemBus : MemoryDomain
|
||||
{
|
||||
private readonly MemoryDomain[] _linkedSystemBuses;
|
||||
private readonly LinkedDisassemblable _linkedDisassemblable;
|
||||
|
||||
public LinkedSystemBus(IEmulator[] linkedCores, int numCores, LinkedDisassemblable linkedDisassemblable)
|
||||
{
|
||||
return _m.PeekByte(addr);
|
||||
_linkedSystemBuses = new MemoryDomain[numCores];
|
||||
_linkedDisassemblable = linkedDisassemblable;
|
||||
for (int i = 0; i < numCores; i++)
|
||||
{
|
||||
_linkedSystemBuses[i] = linkedCores[i].AsMemoryDomains().SystemBus;
|
||||
}
|
||||
Name = "System Bus";
|
||||
Size = _linkedSystemBuses[0].Size;
|
||||
WordSize = _linkedSystemBuses[0].WordSize;
|
||||
EndianType = _linkedSystemBuses[0].EndianType;
|
||||
Writable = false;
|
||||
}
|
||||
|
||||
public override void PokeByte(long addr, byte val)
|
||||
{
|
||||
_m.PokeByte(addr, val);
|
||||
}
|
||||
public override byte PeekByte(long addr) => _linkedSystemBuses[int.Parse(_linkedDisassemblable.Cpu.Substring(1, 1)) - 1].PeekByte(addr);
|
||||
|
||||
public override void PokeByte(long addr, byte val) => throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -261,8 +261,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
{
|
||||
// the GB and GBA have no IR port, so ignore them for now
|
||||
// todo: cart based IR
|
||||
return _syncSettings._linkedSyncSettings[one].ConsoleMode is Gameboy.GambatteSyncSettings.ConsoleModeType.GBC
|
||||
&& _syncSettings._linkedSyncSettings[two].ConsoleMode is Gameboy.GambatteSyncSettings.ConsoleModeType.GBC;
|
||||
if (IsCGBMode(one) && IsCGBMode(two))
|
||||
{
|
||||
return _syncSettings._linkedSyncSettings[one].ConsoleMode is not Gameboy.GambatteSyncSettings.ConsoleModeType.GBA
|
||||
&& _syncSettings._linkedSyncSettings[two].ConsoleMode is not Gameboy.GambatteSyncSettings.ConsoleModeType.GBA;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public int Frame { get; private set; }
|
||||
|
|
|
@ -70,17 +70,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
|
||||
GBLinkController = CreateControllerDefinition();
|
||||
|
||||
_linkedSaveRam = new LinkedSaveRam(_linkedCores, _numCores);
|
||||
_serviceProvider.Register<ISaveRam>(_linkedSaveRam);
|
||||
|
||||
_linkedMemoryDomains = new LinkedMemoryDomains(_linkedCores, _numCores);
|
||||
_serviceProvider.Register<IMemoryDomains>(_linkedMemoryDomains);
|
||||
|
||||
_linkedDebuggable = new LinkedDebuggable(_linkedCores, _numCores, _memoryCallbacks);
|
||||
_serviceProvider.Register<IDebuggable>(_linkedDebuggable);
|
||||
|
||||
_linkedDisassemblable = new LinkedDisassemblable(new GBDisassembler(), _numCores);
|
||||
_serviceProvider.Register<IDisassemblable>(_linkedDisassemblable);
|
||||
|
||||
_linkedMemoryDomains = new LinkedMemoryDomains(_linkedCores, _numCores, _linkedDisassemblable);
|
||||
_serviceProvider.Register<IMemoryDomains>(_linkedMemoryDomains);
|
||||
|
||||
_linkedSaveRam = new LinkedSaveRam(_linkedCores, _numCores);
|
||||
_serviceProvider.Register<ISaveRam>(_linkedSaveRam);
|
||||
}
|
||||
|
||||
private readonly BasicServiceProvider _serviceProvider;
|
||||
|
@ -105,10 +105,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
private int _numCores = 0;
|
||||
private readonly Gameboy[] _linkedCores;
|
||||
|
||||
private readonly LinkedSaveRam _linkedSaveRam;
|
||||
private readonly LinkedMemoryDomains _linkedMemoryDomains;
|
||||
private readonly LinkedDebuggable _linkedDebuggable;
|
||||
private readonly LinkedDisassemblable _linkedDisassemblable;
|
||||
private readonly LinkedMemoryDomains _linkedMemoryDomains;
|
||||
private readonly LinkedSaveRam _linkedSaveRam;
|
||||
|
||||
// counters to ensure we do 35112 samples per frame
|
||||
private readonly int[] _linkedOverflow;
|
||||
|
|
Loading…
Reference in New Issue