From fb5a5ed78c4d36c35476a3de773f8627c0df61ff Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 20 Sep 2020 04:30:27 +1000 Subject: [PATCH] Add libdarm.so, migrate Darm class to BizInvoker `Tools` > `Debugger` no longer crashes immediately on Linux with mGBA core --- Assets/dll/libdarm.so | Bin 0 -> 99424 bytes src/BizHawk.Emulation.Cores/CPUs/ARM/Darm.cs | 17 +++++++++-------- .../Consoles/Nintendo/GBA/ArmV4Disassembler.cs | 12 ++++++++++-- 3 files changed, 19 insertions(+), 10 deletions(-) create mode 100755 Assets/dll/libdarm.so diff --git a/Assets/dll/libdarm.so b/Assets/dll/libdarm.so new file mode 100755 index 0000000000000000000000000000000000000000..fe0e31d009ea5e3796276bfe673dc36c5fcb72ea GIT binary patch literal 99424 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

w=nk$-o?CG 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 literal 0 HcmV?d00001 diff --git a/src/BizHawk.Emulation.Cores/CPUs/ARM/Darm.cs b/src/BizHawk.Emulation.Cores/CPUs/ARM/Darm.cs index 2c9b870bd3..9f0ac45a9d 100644 --- a/src/BizHawk.Emulation.Cores/CPUs/ARM/Darm.cs +++ b/src/BizHawk.Emulation.Cores/CPUs/ARM/Darm.cs @@ -2,11 +2,12 @@ using System.Text; using System.Runtime.InteropServices; +using BizHawk.BizInvoke; + namespace BizHawk.Emulation.Cores.Components.ARM { - public static class Darm + public abstract class Darm { - public const string dllname = "libdarm.dll"; public const CallingConvention cc = CallingConvention.Cdecl; [StructLayout(LayoutKind.Sequential)] @@ -76,20 +77,20 @@ namespace BizHawk.Emulation.Cores.Components.ARM [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] mnemonic = new byte[12]; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6 * 32)] - public byte[,] arg = new byte[6, 32]; + public byte[] arg = new byte[6 * 32]; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] shift = new byte[12]; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public byte[] total = new byte[64]; } - [DllImport(dllname, CallingConvention = cc, EntryPoint = "darm_disasm")] - public static extern bool Disassemble([Out] Darm_T d, ushort w, ushort w2, uint addr); + [BizImport(cc, Compatibility = true, EntryPoint = "darm_disasm")] + public abstract bool Disassemble([Out] Darm_T d, ushort w, ushort w2, uint addr); - [DllImport(dllname, CallingConvention = cc, EntryPoint = "darm_str2")] - public static extern bool Str([In] [Out]Darm_T d, [Out]Darm_Str_T s, bool lowercase); + [BizImport(cc, Compatibility = true, EntryPoint = "darm_str2")] + public abstract bool Str([In] [Out]Darm_T d, [Out]Darm_Str_T s, bool lowercase); - public static string DisassembleStuff(uint addr, uint opcode) + public string DisassembleStuff(uint addr, uint opcode) { var d = new Darm_T(); var s = new Darm_Str_T(); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/ArmV4Disassembler.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/ArmV4Disassembler.cs index ce30c3d638..cedcfe5173 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/ArmV4Disassembler.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/ArmV4Disassembler.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; + +using BizHawk.BizInvoke; +using BizHawk.Common; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Components.ARM; @@ -6,6 +9,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA { public class ArmV4Disassembler : VerifiedDisassembler { + private readonly Darm _libdarm = BizInvoker.GetInvoker( + new DynamicLibraryImportResolver(OSTailoredCode.IsUnixHost ? "libdarm.so" : "libdarm.dll", hasLimitedLifetime: false), + CallingConventionAdapters.Native + ); + public override IEnumerable AvailableCpus => new[] { "ARM v4", @@ -20,7 +28,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA { addr &= unchecked((uint)~1); int op = m.PeekByte((int)addr) | m.PeekByte((int)addr + 1) << 8; - string ret = Darm.DisassembleStuff(addr | 1, (uint)op); + string ret = _libdarm.DisassembleStuff(addr | 1, (uint)op); length = 2; return ret; } @@ -31,7 +39,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA | m.PeekByte((int)addr + 1) << 8 | m.PeekByte((int)addr + 2) << 16 | m.PeekByte((int)addr + 3) << 24; - string ret = Darm.DisassembleStuff(addr, (uint)op); + string ret = _libdarm.DisassembleStuff(addr, (uint)op); length = 4; return ret; }