From 9fd23568ab0ea38ca18265e1cdfece95e09b4e27 Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 27 May 2015 08:07:32 -0700 Subject: [PATCH] Add some more clarity There's usage of floats in some of the instructions. --- pk3DS/Tools/Scripts.cs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pk3DS/Tools/Scripts.cs b/pk3DS/Tools/Scripts.cs index a98b36f..9235f21 100644 --- a/pk3DS/Tools/Scripts.cs +++ b/pk3DS/Tools/Scripts.cs @@ -220,6 +220,8 @@ internal static string[] parseScript(uint[] cmd) int offset = i*4; switch (c & 0x7FF) { + case 0x0E: op = "$0E"; + op += eA(new[] { cmd[++i] }); break; case 0x27: op = "$27"; op += eA(new[] { cmd[++i] }); break; case 0x2E: op = "Begin"; break; @@ -240,7 +242,10 @@ internal static string[] parseScript(uint[] cmd) (int)cmd[i]); break; case 0x36: op = "CondJump2"; - op += eA(new[] { cmd[++i] }); break; + op += String.Format(" => 0x{0} ({1})", + (i * 4 + (int)cmd[++i]).ToString("X4"), + (int)cmd[i]); + break; case 0x4E: op = "Add?"; break; case 0x59: op = "ClearAll"; break; case 0x81: op = "Jump"; @@ -277,11 +282,11 @@ internal static string[] parseScript(uint[] cmd) op += eA(new[] { cmd[++i], cmd[++i] }); break; case 0x89: op = "LineNo?"; break; case 0x8A: op = "$8A"; - op += eA(new[] { cmd[++i], cmd[++i] }); break; + op += eF(new[] { cmd[++i], cmd[++i] }); break; case 0x8E: op = "$8E"; - op += eA(new[] { cmd[++i], cmd[++i], cmd[++i] }); break; + op += eF(new[] { cmd[++i], cmd[++i], cmd[++i] }); break; case 0x96: op = "$96"; - op += eA(new[] { cmd[++i], + op += eF(new[] { cmd[++i], cmd[++i], cmd[++i], cmd[++i], cmd[++i] }); break; case 0xA2: op = "GetGlobal2"; op += eA(new[] { c >> 16 }); break; @@ -289,6 +294,10 @@ internal static string[] parseScript(uint[] cmd) op += eA(new[] { c >> 16 }); break; case 0xA4: op = "GetGlobal"; op += eA(new[] { c >> 16 }); break; + case 0xAC: op = "$AC"; + op += eA(new[] { c >> 16 }); break; + case 0xAE: op = "$AE"; + op += eA(new[] { c >> 16 }); break; case 0xAF: op = "SetGlobal"; op += eA(new[] { c >> 16 }); break; case 0xB1: op = "SetLocal"; @@ -306,8 +315,7 @@ internal static string[] parseScript(uint[] cmd) case 0xC9: op = "CmpConst"; op += eA(new[] { c >> 16 }); break; - case 0xD2: op = "BeginScript"; break; - case 0x7FF: op = "EndScript"; break; + case 0xD2: op = "BeginScript"+Environment.NewLine; break; case 0x0: op = "Nop"; break; default: op = String.Format("**${0}**", (c & 0xFFFF).ToString("X2")); op += eA(new[] { c >> 16 }); break; @@ -330,5 +338,12 @@ internal static string eA(uint[] arr) s += String.Format("0x{0}{1}", arr[i].ToString("X4"), (i+1 < arr.Length ? ", " : "")); return "("+s+")"; } + internal static string eF(uint[] arr) + { + string s = ""; + for (int i = 0; i < arr.Length; i++) // stupid hack, Convert.ToSingle((uint)) doesn't behave. + s += String.Format("{0}{1}", BitConverter.ToSingle(BitConverter.GetBytes(arr[i]), 0), (i + 1 < arr.Length ? ", " : "")); + return "(" + s + ")"; + } } }