aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/CpuThread.cs
diff options
context:
space:
mode:
authorAlex Barney <thealexbarney@gmail.com>2018-10-30 19:43:02 -0600
committergdkchan <gab.dark.100@gmail.com>2018-10-30 22:43:02 -0300
commit9cb57fb4bb3bbae0ae052a5af4a96a49fc5d864d (patch)
tree0c97425aeb311c142bc92a6fcc503cb2c07d4376 /ChocolArm64/CpuThread.cs
parent5a87e58183578f5b84ca8d01cbb76aed11820f78 (diff)
Adjust naming conventions for Ryujinx and ChocolArm64 projects (#484)
* Change naming convention for Ryujinx project * Change naming convention for ChocolArm64 project * Fix NaN * Remove unneeded this. from Ryujinx project * Adjust naming from new PRs * Name changes based on feedback * How did this get removed? * Rebasing fix * Change FP enum case * Remove prefix from ChocolArm64 classes - Part 1 * Remove prefix from ChocolArm64 classes - Part 2 * Fix alignment from last commit's renaming * Rename namespaces * Rename stragglers * Fix alignment * Rename OpCode class * Missed a few * Adjust alignment
Diffstat (limited to 'ChocolArm64/CpuThread.cs')
-rw-r--r--ChocolArm64/CpuThread.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/ChocolArm64/CpuThread.cs b/ChocolArm64/CpuThread.cs
new file mode 100644
index 00000000..11f41236
--- /dev/null
+++ b/ChocolArm64/CpuThread.cs
@@ -0,0 +1,69 @@
+using ChocolArm64.Memory;
+using ChocolArm64.State;
+using System;
+using System.Threading;
+
+namespace ChocolArm64
+{
+ public class CpuThread
+ {
+ public CpuThreadState ThreadState { get; private set; }
+ public MemoryManager Memory { get; private set; }
+
+ private Translator _translator;
+
+ public Thread Work;
+
+ public event EventHandler WorkFinished;
+
+ private int _isExecuting;
+
+ public CpuThread(Translator translator, MemoryManager memory, long entryPoint)
+ {
+ _translator = translator;
+ Memory = memory;
+
+ ThreadState = new CpuThreadState();
+
+ ThreadState.ExecutionMode = ExecutionMode.AArch64;
+
+ ThreadState.Running = true;
+
+ Work = new Thread(delegate()
+ {
+ translator.ExecuteSubroutine(this, entryPoint);
+
+ memory.RemoveMonitor(ThreadState.Core);
+
+ WorkFinished?.Invoke(this, EventArgs.Empty);
+ });
+ }
+
+ public bool Execute()
+ {
+ if (Interlocked.Exchange(ref _isExecuting, 1) == 1)
+ {
+ return false;
+ }
+
+ Work.Start();
+
+ return true;
+ }
+
+ public void StopExecution()
+ {
+ ThreadState.Running = false;
+ }
+
+ public void RequestInterrupt()
+ {
+ ThreadState.RequestInterrupt();
+ }
+
+ public bool IsCurrentThread()
+ {
+ return Thread.CurrentThread == Work;
+ }
+ }
+} \ No newline at end of file