diff --git a/src/BizHawk.Emulation.Common/Base Implementations/LinkedDisassemblable.cs b/src/BizHawk.Emulation.Common/Base Implementations/LinkedDisassemblable.cs new file mode 100644 index 0000000000..af8b935091 --- /dev/null +++ b/src/BizHawk.Emulation.Common/Base Implementations/LinkedDisassemblable.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace BizHawk.Emulation.Common +{ + /// + /// A generic linked implementation of IDisassemblable that can be used by any link core + /// + /// + public class LinkedDisassemblable : VerifiedDisassembler + { + private readonly IDisassemblable _baseDisassembler; + + public LinkedDisassemblable(IDisassemblable baseDisassembler, int numCores) + { + _baseDisassembler = baseDisassembler; + string[] cpus = new string[numCores]; + for (int i = 0; i < numCores; i++) + { + cpus[i] = $"P{i + 1} " + baseDisassembler.Cpu; + } + AvailableCpus = cpus; + } + + public override IEnumerable AvailableCpus { get; } + + public override string PCRegisterName => Cpu.Substring(0, 2) + " PC"; + + public override string Disassemble(MemoryDomain m, uint addr, out int length) => _baseDisassembler.Disassemble(m, addr, out length); + } +} diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs index ddbf85cd82..f7972ae734 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs @@ -78,6 +78,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy _linkedDebuggable = new LinkedDebuggable(_linkedCores, _numCores, _memoryCallbacks); _serviceProvider.Register(_linkedDebuggable); + + _linkedDisassemblable = new LinkedDisassemblable(new GBDisassembler(), _numCores); + _serviceProvider.Register(_linkedDisassemblable); } private readonly BasicServiceProvider _serviceProvider; @@ -105,6 +108,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy private readonly LinkedSaveRam _linkedSaveRam; private readonly LinkedMemoryDomains _linkedMemoryDomains; private readonly LinkedDebuggable _linkedDebuggable; + private readonly LinkedDisassemblable _linkedDisassemblable; // counters to ensure we do 35112 samples per frame private readonly int[] _linkedOverflow;