aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/State/AThreadState.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/State/AThreadState.cs')
-rw-r--r--ChocolArm64/State/AThreadState.cs64
1 files changed, 64 insertions, 0 deletions
diff --git a/ChocolArm64/State/AThreadState.cs b/ChocolArm64/State/AThreadState.cs
new file mode 100644
index 00000000..cdab4034
--- /dev/null
+++ b/ChocolArm64/State/AThreadState.cs
@@ -0,0 +1,64 @@
+using System;
+
+namespace ChocolArm64.State
+{
+ public class AThreadState
+ {
+ internal const int LRIndex = 30;
+ internal const int ZRIndex = 31;
+
+ internal const int ErgSizeLog2 = 4;
+ internal const int DczSizeLog2 = 4;
+
+ public ulong X0, X1, X2, X3, X4, X5, X6, X7,
+ X8, X9, X10, X11, X12, X13, X14, X15,
+ X16, X17, X18, X19, X20, X21, X22, X23,
+ X24, X25, X26, X27, X28, X29, X30, X31;
+
+ public AVec V0, V1, V2, V3, V4, V5, V6, V7,
+ V8, V9, V10, V11, V12, V13, V14, V15,
+ V16, V17, V18, V19, V20, V21, V22, V23,
+ V24, V25, V26, V27, V28, V29, V30, V31;
+
+ public bool Overflow;
+ public bool Carry;
+ public bool Zero;
+ public bool Negative;
+
+ public int ProcessId;
+ public int ThreadId;
+
+ public long TpidrEl0 { get; set; }
+ public long Tpidr { get; set; }
+
+ public int Fpcr { get; set; }
+ public int Fpsr { get; set; }
+
+ public uint CtrEl0 => 0x8444c004;
+ public uint DczidEl0 => 0x00000004;
+
+ private const long TicksPerS = 19_200_000;
+ private const long TicksPerMS = TicksPerS / 1_000;
+
+ public long CntpctEl0 => Environment.TickCount * TicksPerMS;
+
+ public event EventHandler<AInstExceptEventArgs> Break;
+ public event EventHandler<AInstExceptEventArgs> SvcCall;
+ public event EventHandler<AInstUndEventArgs> Undefined;
+
+ internal void OnBreak(int Imm)
+ {
+ Break?.Invoke(this, new AInstExceptEventArgs(Imm));
+ }
+
+ internal void OnSvcCall(int Imm)
+ {
+ SvcCall?.Invoke(this, new AInstExceptEventArgs(Imm));
+ }
+
+ internal void OnUndefined(long Position, int RawOpCode)
+ {
+ Undefined?.Invoke(this, new AInstUndEventArgs(Position, RawOpCode));
+ }
+ }
+} \ No newline at end of file