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.cs26
1 files changed, 23 insertions, 3 deletions
diff --git a/ChocolArm64/State/AThreadState.cs b/ChocolArm64/State/AThreadState.cs
index ec8621b8..6f3f62f6 100644
--- a/ChocolArm64/State/AThreadState.cs
+++ b/ChocolArm64/State/AThreadState.cs
@@ -1,5 +1,6 @@
using ChocolArm64.Events;
using System;
+using System.Diagnostics;
namespace ChocolArm64.State
{
@@ -40,15 +41,34 @@ namespace ChocolArm64.State
public uint CtrEl0 => 0x8444c004;
public uint DczidEl0 => 0x00000004;
- private const ulong TicksPerS = 19_200_000;
- private const ulong TicksPerMS = TicksPerS / 1_000;
+ public ulong CntfrqEl0 { get; set; }
+ public ulong CntpctEl0
+ {
+ get
+ {
+ double Ticks = TickCounter.ElapsedTicks * HostTickFreq;
- public ulong CntpctEl0 => (ulong)Environment.TickCount * TicksPerMS;
+ return (ulong)(Ticks * CntfrqEl0);
+ }
+ }
public event EventHandler<AInstExceptionEventArgs> Break;
public event EventHandler<AInstExceptionEventArgs> SvcCall;
public event EventHandler<AInstUndefinedEventArgs> Undefined;
+ private static Stopwatch TickCounter;
+
+ private static double HostTickFreq;
+
+ static AThreadState()
+ {
+ HostTickFreq = 1.0 / Stopwatch.Frequency;
+
+ TickCounter = new Stopwatch();
+
+ TickCounter.Start();
+ }
+
internal void OnBreak(int Imm)
{
Break?.Invoke(this, new AInstExceptionEventArgs(Imm));