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;