From 1ce0437c3dc470f045bec8793e161a9d8fabe3d9 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 1 Nov 2015 11:23:33 -0600 Subject: [PATCH] CDL - add .cdl file map to dialogbox display --- BizHawk.Client.EmuHawk/tools/CDL.cs | 43 ++++++++++++++----------- BizHawk.Emulation.Common/CodeDataLog.cs | 35 +++++++++++++++++--- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/CDL.cs b/BizHawk.Client.EmuHawk/tools/CDL.cs index bf428c499f..c205d419f4 100644 --- a/BizHawk.Client.EmuHawk/tools/CDL.cs +++ b/BizHawk.Client.EmuHawk/tools/CDL.cs @@ -74,38 +74,45 @@ namespace BizHawk.Client.EmuHawk private void UpdateDisplay() { - var lines = new List(); if (_cdl == null) { - lines.Add("No CDL loaded."); + CdlTextbox.Text = "No CDL loaded."; + return; } - else + + StringWriter sw = new StringWriter(); + sw.WriteLine("CDL contains the following domains:"); + foreach (var kvp in _cdl) { - lines.Add("CDL contains the following domains:"); - foreach (var kvp in _cdl) + int total = 0; + unsafe { - int total = 0; - unsafe + fixed (byte* data = kvp.Value) { - fixed (byte* data = kvp.Value) + byte* src = data; + byte* end = data + kvp.Value.Length; + while (src < end) { - byte* src = data; - byte* end = data + kvp.Value.Length; - while (src < end) + if (*src++ != 0) { - if (*src++ != 0) - { - total++; - } + total++; } } } - - lines.Add(string.Format("Domain {0} Size {1} Mapped {2}% ({3}/{4} bytes)", kvp.Key, kvp.Value.Length, total / (float) kvp.Value.Length * 100f, total, kvp.Value.Length)); } + + sw.WriteLine("Domain {0} Size {1} Mapped {2}% ({3}/{4} bytes)", kvp.Key, kvp.Value.Length, total / (float)kvp.Value.Length * 100f, total, kvp.Value.Length); + } + + sw.WriteLine(); + + var bm = _cdl.GetBlockMap(); + foreach (var kvp in bm) + { + sw.WriteLine("{0:X8}: {1}", kvp.Value, kvp.Key); } - CdlTextbox.Lines = lines.ToArray(); + CdlTextbox.Text = sw.ToString(); } public bool AskSaveChanges() diff --git a/BizHawk.Emulation.Common/CodeDataLog.cs b/BizHawk.Emulation.Common/CodeDataLog.cs index a0840e9405..fba4e2a00e 100644 --- a/BizHawk.Emulation.Common/CodeDataLog.cs +++ b/BizHawk.Emulation.Common/CodeDataLog.cs @@ -71,17 +71,44 @@ namespace BizHawk.Emulation.Common public void Save(Stream s) { + _Save(s, true); + } + + Dictionary _Save(Stream s, bool forReal) + { + var ret = new Dictionary(); var w = new BinaryWriter(s); w.Write("BIZHAWK-CDL-2"); w.Write(SubType.PadRight(15)); w.Write(Count); - foreach (var kvp in this) + w.Flush(); + long addr = s.Position; + if (forReal) { - w.Write(kvp.Key); - w.Write(kvp.Value.Length); - w.Write(kvp.Value); + foreach (var kvp in this) + { + w.Write(kvp.Key); + w.Write(kvp.Value.Length); + w.Write(kvp.Value); + } + } + else + { + foreach (var kvp in this) + { + addr += kvp.Key.Length + 1; //assumes shortly-encoded key names + addr += 4; + ret[kvp.Key] = addr; + addr += kvp.Value.Length; + } } w.Flush(); + return ret; + } + + public Dictionary GetBlockMap() + { + return _Save(new MemoryStream(), false); } public void Load(Stream s)