diff --git a/BizHawk.Emulation/Consoles/Nintendo/GBA/LibMeteor.cs b/BizHawk.Emulation/Consoles/Nintendo/GBA/LibMeteor.cs index fa2ec7d7ba..ca91b025a8 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/GBA/LibMeteor.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/GBA/LibMeteor.cs @@ -261,5 +261,33 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA /// 0-227, 160 occurring first in a frame [DllImport("libmeteor.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void libmeteor_setscanlinecallback(ScanlineCallback callback, int scanline); + + /// + /// get current cpu regs + /// + /// length 18 please + public static extern void libmeteor_getregs(int[] dest); + + public static readonly string[] regnames = new string[] + { + "r0", + "r1", + "r2", + "r3", + "r4", + "r5", + "r6", + "r7", + "r8", + "r9", + "r10", + "r11", + "r12", + "r13", + "r14", + "r15", + "cpsr", + "spsr" + }; } } diff --git a/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs b/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs index 53297e9831..96da565af5 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs @@ -12,7 +12,12 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA { public List> GetCpuFlagsAndRegisters() { - throw new NotImplementedException(); + var ret = new List>(); + int[] data = new int[LibMeteor.regnames.Length]; + LibMeteor.libmeteor_getregs(data); + for (int i = 0; i < data.Length; i++) + ret.Add(new KeyValuePair(LibMeteor.regnames[i], data[i])); + return ret; } public static readonly ControllerDefinition GBAController = diff --git a/libmeteor/cinterface.cpp b/libmeteor/cinterface.cpp index 5421b44bb5..7ec62ef343 100644 --- a/libmeteor/cinterface.cpp +++ b/libmeteor/cinterface.cpp @@ -235,3 +235,12 @@ void scanlinecallback_bizhawk() if (slcallback) slcallback(); } + +EXPORT void libmeteor_getregs(int *dest) +{ + AMeteor::_cpu.UpdateCpsr(); + for (int i = 0; i < 16; i++) + dest[i] = AMeteor::_cpu.Reg(i); + dest[16] = AMeteor::_cpu.Cpsr().dw; + dest[17] = AMeteor::_cpu.Spsr().dw; +} diff --git a/output/dll/libmeteor.dll b/output/dll/libmeteor.dll index 7f4c6c2ca2..0122220fa5 100644 Binary files a/output/dll/libmeteor.dll and b/output/dll/libmeteor.dll differ