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