diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 11 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 2 |
3 files changed, 20 insertions, 5 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 618f02f30..c8a1ce6e7 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -72,17 +72,23 @@ public: | |||
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | void AddTicks(u64 ticks) override { | 74 | void AddTicks(u64 ticks) override { |
| 75 | /// We are using host timing, NOP | 75 | this->ticks -= ticks; |
| 76 | } | 76 | } |
| 77 | |||
| 77 | u64 GetTicksRemaining() override { | 78 | u64 GetTicksRemaining() override { |
| 78 | if (!parent.interrupt_handler.IsInterrupted()) { | 79 | if (!parent.interrupt_handler.IsInterrupted()) { |
| 79 | return 1000ULL; | 80 | return std::max<s64>(ticks, 0); |
| 80 | } | 81 | } |
| 81 | return 0ULL; | 82 | return 0ULL; |
| 82 | } | 83 | } |
| 83 | 84 | ||
| 85 | void ResetTicks() { | ||
| 86 | ticks = 1000LL; | ||
| 87 | } | ||
| 88 | |||
| 84 | ARM_Dynarmic_32& parent; | 89 | ARM_Dynarmic_32& parent; |
| 85 | std::size_t num_interpreted_instructions{}; | 90 | std::size_t num_interpreted_instructions{}; |
| 91 | s64 ticks{}; | ||
| 86 | }; | 92 | }; |
| 87 | 93 | ||
| 88 | std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& page_table, | 94 | std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& page_table, |
| @@ -97,6 +103,7 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& | |||
| 97 | } | 103 | } |
| 98 | 104 | ||
| 99 | void ARM_Dynarmic_32::Run() { | 105 | void ARM_Dynarmic_32::Run() { |
| 106 | cb->ResetTicks(); | ||
| 100 | jit->Run(); | 107 | jit->Run(); |
| 101 | } | 108 | } |
| 102 | 109 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 2e664cfa8..547a6e07e 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -124,22 +124,29 @@ public: | |||
| 124 | } | 124 | } |
| 125 | 125 | ||
| 126 | void AddTicks(u64 ticks) override { | 126 | void AddTicks(u64 ticks) override { |
| 127 | /// We are using host timing, NOP | 127 | this->ticks -= ticks; |
| 128 | } | 128 | } |
| 129 | |||
| 129 | u64 GetTicksRemaining() override { | 130 | u64 GetTicksRemaining() override { |
| 130 | if (!parent.interrupt_handler.IsInterrupted()) { | 131 | if (!parent.interrupt_handler.IsInterrupted()) { |
| 131 | return 1000ULL; | 132 | return std::max<s64>(ticks, 0); |
| 132 | } | 133 | } |
| 133 | return 0ULL; | 134 | return 0ULL; |
| 134 | } | 135 | } |
| 136 | |||
| 135 | u64 GetCNTPCT() override { | 137 | u64 GetCNTPCT() override { |
| 136 | return parent.system.CoreTiming().GetClockTicks(); | 138 | return parent.system.CoreTiming().GetClockTicks(); |
| 137 | } | 139 | } |
| 138 | 140 | ||
| 141 | void ResetTicks() { | ||
| 142 | ticks = 1000LL; | ||
| 143 | } | ||
| 144 | |||
| 139 | ARM_Dynarmic_64& parent; | 145 | ARM_Dynarmic_64& parent; |
| 140 | std::size_t num_interpreted_instructions = 0; | 146 | std::size_t num_interpreted_instructions = 0; |
| 141 | u64 tpidrro_el0 = 0; | 147 | u64 tpidrro_el0 = 0; |
| 142 | u64 tpidr_el0 = 0; | 148 | u64 tpidr_el0 = 0; |
| 149 | s64 ticks{}; | ||
| 143 | }; | 150 | }; |
| 144 | 151 | ||
| 145 | std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& page_table, | 152 | std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& page_table, |
| @@ -181,6 +188,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | |||
| 181 | } | 188 | } |
| 182 | 189 | ||
| 183 | void ARM_Dynarmic_64::Run() { | 190 | void ARM_Dynarmic_64::Run() { |
| 191 | cb->ResetTicks(); | ||
| 184 | jit->Run(); | 192 | jit->Run(); |
| 185 | } | 193 | } |
| 186 | 194 | ||
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 36e9c48f9..f08745226 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -342,7 +342,7 @@ static ResultCode SendSyncRequest(Core::System& system, Handle handle) { | |||
| 342 | thread->InvokeHLECallback(SharedFrom(thread)); | 342 | thread->InvokeHLECallback(SharedFrom(thread)); |
| 343 | } | 343 | } |
| 344 | 344 | ||
| 345 | return RESULT_SUCCESS; | 345 | return thread->GetSignalingResult(); |
| 346 | } | 346 | } |
| 347 | 347 | ||
| 348 | static ResultCode SendSyncRequest32(Core::System& system, Handle handle) { | 348 | static ResultCode SendSyncRequest32(Core::System& system, Handle handle) { |