From 97ef21e166a95419b97d164c6969ffaf1faacfb0 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Thu, 11 Jan 2018 21:59:31 -0500
Subject: svc: Implement GetSystemTick.

---
 src/core/hle/kernel/svc.cpp | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

(limited to 'src/core/hle/kernel/svc.cpp')

diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 7c2aee417b..b43e004bcf 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -642,6 +642,16 @@ static ResultCode SignalProcessWideKey(VAddr condition_variable_addr, s32 target
     return RESULT_SUCCESS;
 }
 
+/// This returns the total CPU ticks elapsed since the CPU was powered-on
+static u64 GetSystemTick() {
+    const u64 result{CoreTiming::GetTicks()};
+
+    // Advance time to defeat dumb games that busy-wait for the frame to end.
+    CoreTiming::AddTicks(400);
+
+    return result;
+}
+
 /// Close a handle
 static ResultCode CloseHandle(Handle handle) {
     LOG_TRACE(Kernel_SVC, "Closing handle 0x%08X", handle);
@@ -659,7 +669,8 @@ static ResultCode ResetSignal(Handle handle) {
 
 /// Creates a TransferMemory object
 static ResultCode CreateTransferMemory(Handle* handle, VAddr addr, u64 size, u32 permissions) {
-    LOG_WARNING(Kernel_SVC, "(STUBBED) called addr=0x%llx, size=0x%llx, perms=%08X", addr, size, permissions);
+    LOG_WARNING(Kernel_SVC, "(STUBBED) called addr=0x%llx, size=0x%llx, perms=%08X", addr, size,
+                permissions);
     *handle = 0;
     return RESULT_SUCCESS;
 }
@@ -705,7 +716,7 @@ static const FunctionDef SVC_Table[] = {
     {0x1B, SvcWrap<UnlockMutex>, "UnlockMutex"},
     {0x1C, SvcWrap<WaitProcessWideKeyAtomic>, "WaitProcessWideKeyAtomic"},
     {0x1D, SvcWrap<SignalProcessWideKey>, "SignalProcessWideKey"},
-    {0x1E, nullptr, "GetSystemTick"},
+    {0x1E, SvcWrap<GetSystemTick>, "GetSystemTick"},
     {0x1F, SvcWrap<ConnectToPort>, "ConnectToPort"},
     {0x20, nullptr, "SendSyncRequestLight"},
     {0x21, SvcWrap<SendSyncRequest>, "SendSyncRequest"},
-- 
cgit v1.2.3-70-g09d2