From 5b4382f459c1dcbd55dbc804ac1bce93fbba41c1 Mon Sep 17 00:00:00 2001
From: HorrorTroll <sonicvipduc@gmail.com>
Date: Fri, 7 Dec 2018 22:19:10 +0700
Subject: [PATCH] Fix InitializeOld & add FinalizeOld, SetAndWaitOld, GetOld on
 mm:u (#521)

* Fix mm:u

* Align some missing

* Fix some uncorrect code
---
 Ryujinx.HLE/HOS/Services/Mm/IRequest.cs | 57 +++++++++++++++++++++++--
 1 file changed, 53 insertions(+), 4 deletions(-)

diff --git a/Ryujinx.HLE/HOS/Services/Mm/IRequest.cs b/Ryujinx.HLE/HOS/Services/Mm/IRequest.cs
index f1c6d6c9e..9b051de01 100644
--- a/Ryujinx.HLE/HOS/Services/Mm/IRequest.cs
+++ b/Ryujinx.HLE/HOS/Services/Mm/IRequest.cs
@@ -14,7 +14,10 @@ namespace Ryujinx.HLE.HOS.Services.Mm
         {
             _commands = new Dictionary<int, ServiceProcessRequest>()
             {
-                { 1, InitializeOld },
+                { 0, InitializeOld },
+                { 1, FinalizeOld   },
+                { 2, SetAndWaitOld },
+                { 3, GetOld        },
                 { 4, Initialize    },
                 { 5, Finalize      },
                 { 6, SetAndWait    },
@@ -29,11 +32,47 @@ namespace Ryujinx.HLE.HOS.Services.Mm
             int unknown1 = context.RequestData.ReadInt32();
             int unknown2 = context.RequestData.ReadInt32();
 
+            Logger.PrintStub(LogClass.ServiceMm, $"Stubbed. Unknown0: {unknown0} - " +
+                                                 $"Unknown1: {unknown1} - Unknown2: {unknown2}");
+
+            return 0;
+        }
+
+        // FinalizeOld(u32)
+        public long FinalizeOld(ServiceCtx context)
+        {
+            context.Device.Gpu.UninitializeVideoDecoder();
+
             Logger.PrintStub(LogClass.ServiceMm, "Stubbed.");
 
             return 0;
         }
 
+        // SetAndWaitOld(u32, u32, u32)
+        public long SetAndWaitOld(ServiceCtx context)
+        {
+            int unknown0 = context.RequestData.ReadInt32();
+            int unknown1 = context.RequestData.ReadInt32();
+            int unknown2 = context.RequestData.ReadInt32();
+
+            Logger.PrintStub(LogClass.ServiceMm, $"Stubbed. Unknown0: {unknown0} - " +
+                                                 $"Unknown1: {unknown1} - Unknown2: {unknown2}");
+            return 0;
+        }
+
+        // GetOld(u32) -> u32
+        public long GetOld(ServiceCtx context)
+        {
+            int unknown0 = context.RequestData.ReadInt32();
+
+            Logger.PrintStub(LogClass.ServiceMm, $"Stubbed. Unknown0: {unknown0}");
+
+            context.ResponseData.Write(0);
+
+            return 0;
+        }
+
+        // Initialize()
         public long Initialize(ServiceCtx context)
         {
             Logger.PrintStub(LogClass.ServiceMm, "Stubbed.");
@@ -41,6 +80,7 @@ namespace Ryujinx.HLE.HOS.Services.Mm
             return 0;
         }
 
+        // Finalize(u32)
         public long Finalize(ServiceCtx context)
         {
             context.Device.Gpu.UninitializeVideoDecoder();
@@ -50,18 +90,27 @@ namespace Ryujinx.HLE.HOS.Services.Mm
             return 0;
         }
 
+        // SetAndWait(u32, u32, u32)
         public long SetAndWait(ServiceCtx context)
         {
-            Logger.PrintStub(LogClass.ServiceMm, "Stubbed.");
+            int unknown0 = context.RequestData.ReadInt32();
+            int unknown1 = context.RequestData.ReadInt32();
+            int unknown2 = context.RequestData.ReadInt32();
+
+            Logger.PrintStub(LogClass.ServiceMm, $"Stubbed. Unknown0: {unknown0} - " +
+                                                 $"Unknown1: {unknown1} - Unknown2: {unknown2}");
 
             return 0;
         }
 
+        // Get(u32) -> u32
         public long Get(ServiceCtx context)
         {
-            context.ResponseData.Write(0);
+            int unknown0 = context.RequestData.ReadInt32();
 
-            Logger.PrintStub(LogClass.ServiceMm, "Stubbed.");
+            Logger.PrintStub(LogClass.ServiceMm, $"Stubbed. Unknown0: {unknown0}");
+
+            context.ResponseData.Write(0);
 
             return 0;
         }