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.cs21
1 files changed, 21 insertions, 0 deletions
diff --git a/ChocolArm64/State/AThreadState.cs b/ChocolArm64/State/AThreadState.cs
index 7b69d817..783f5a12 100644
--- a/ChocolArm64/State/AThreadState.cs
+++ b/ChocolArm64/State/AThreadState.cs
@@ -41,6 +41,9 @@ namespace ChocolArm64.State
public bool Negative;
public bool Running { get; set; }
+ public int Core { get; set; }
+
+ private bool Interrupted;
public long TpidrEl0 { get; set; }
public long Tpidr { get; set; }
@@ -73,6 +76,7 @@ namespace ChocolArm64.State
}
}
+ public event EventHandler<EventArgs> Interrupt;
public event EventHandler<AInstExceptionEventArgs> Break;
public event EventHandler<AInstExceptionEventArgs> SvcCall;
public event EventHandler<AInstUndefinedEventArgs> Undefined;
@@ -99,9 +103,26 @@ namespace ChocolArm64.State
internal bool Synchronize()
{
+ if (Interrupted)
+ {
+ Interrupted = false;
+
+ OnInterrupt();
+ }
+
return Running;
}
+ internal void RequestInterrupt()
+ {
+ Interrupted = true;
+ }
+
+ private void OnInterrupt()
+ {
+ Interrupt?.Invoke(this, EventArgs.Empty);
+ }
+
internal void OnBreak(long Position, int Imm)
{
Break?.Invoke(this, new AInstExceptionEventArgs(Position, Imm));