Add disassembly of GradientTool

This commit is contained in:
2026-04-21 10:40:12 +02:00
commit 1ef84fd132
55 changed files with 8994 additions and 0 deletions

312
CodeGen.cs Normal file
View File

@@ -0,0 +1,312 @@
// Decompiled with JetBrains decompiler
// Type: SFXProductions.GradientTool.CodeGen
// Assembly: GradientTool, Version=0.8.2.1, Culture=neutral, PublicKeyToken=null
// MVID: 818AB9B3-796A-4A49-8B90-C00D066A321B
// Assembly location: C:\Users\aless\Downloads\gradient-tool-v0.8.2.1\GradientTool.exe
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
#nullable disable
namespace SFXProductions.GradientTool;
internal sealed class CodeGen
{
private StringBuilder m_rtf;
private StringBuilder m_plain;
public CodeGen()
{
this.m_rtf = new StringBuilder();
this.m_plain = new StringBuilder();
}
public void AppendPlainText(string text)
{
this.m_rtf.Append(text);
this.m_plain.Append(text);
}
public void AppendPlainText(char ch)
{
this.m_rtf.Append(ch);
this.m_plain.Append(ch);
}
public void AppendComment(string text)
{
this.m_rtf.Append($"\\cf1{text}\\cf0");
this.m_plain.Append(text);
}
public void AppendKeyword(string text)
{
this.m_rtf.Append($"\\cf2{text}\\cf0");
this.m_plain.Append(text);
}
public void AppendNumeric(string text)
{
this.m_rtf.Append($"\\cf3{text}\\cf0");
this.m_plain.Append(text);
}
public void AppendNumeric(char ch)
{
this.m_rtf.Append($"\\cf3{(object) ch}\\cf0");
this.m_plain.Append(ch);
}
public void AppendLabel(string text)
{
this.m_rtf.Append($"\\cf4{text}\\cf0");
this.m_plain.Append(text);
}
public void AppendLine()
{
this.m_rtf.Append("\\line");
this.m_plain.AppendLine();
}
public void AppendHardTab()
{
this.m_rtf.Append("\\tab");
this.m_plain.Append('\t');
}
public void AppendSpace()
{
this.m_rtf.Append("\\ ");
this.m_plain.Append(' ');
}
public void WriteComment(string comment = null, bool tab = false, bool space = false)
{
if (tab)
this.AppendHardTab();
else if (space)
this.AppendSpace();
string text = "; ";
if (comment != null)
text += comment;
this.AppendComment(text);
this.AppendLine();
}
public void WriteBanner()
{
this.AppendComment(";=======================================");
this.AppendLine();
}
public void Write16BitMode(int w = 0, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("REP".PadRight(w));
this.AppendSpace();
this.AppendNumeric("#$20");
this.AppendSpace();
this.AppendComment("; 16-bit A");
this.AppendLine();
}
public void Write8BitMode(int w = 0, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("SEP".PadRight(w));
this.AppendSpace();
this.AppendNumeric("#$20");
this.AppendSpace();
this.AppendComment("; 8-bit A");
this.AppendLine();
}
public void WriteTSB(ushort addr, int w = 0, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("TSB".PadRight(w));
this.AppendSpace();
this.WriteHexAddress(addr);
this.AppendLine();
}
public void WriteLDAIfNonzero(ushort value, int w = 0, bool tab = true)
{
if (value == (ushort) 0)
return;
int w1 = w;
bool tab1 = tab;
this.WriteLDA_c(value, w1, tab1);
}
public void WriteSTAIfNonzero(ushort addr, ushort value, int w = 0, string comment = null, bool tab = true)
{
if (value != (ushort) 0)
{
int w1 = w;
string comment1 = comment;
bool tab1 = tab;
this.WriteSTA(addr, w1, comment1, tab1);
}
else
{
int w2 = w;
string comment2 = comment;
bool tab2 = tab;
this.WriteSTZ(addr, w2, comment2, tab2);
}
}
public void WriteKeywordLine(string keyword, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword(keyword);
this.AppendLine();
}
public void WriteHexAddress(byte address)
{
this.AppendNumeric('$'.ToString() + address.ToString("X2"));
}
public void WriteHexAddress(ushort address)
{
this.AppendNumeric('$'.ToString() + address.ToString("X4"));
}
public void WriteHexConstant(byte constant) => this.AppendNumeric("#$" + constant.ToString("X2"));
public void WriteHexConstant(ushort constant)
{
this.AppendNumeric("#$" + constant.ToString("X4"));
}
public void WriteBinaryConstant(byte constant)
{
this.AppendNumeric("#%" + Convert.ToString(constant, 2).PadLeft(8, '0'));
}
private void WriteLDAInternal(string addr, int w, bool tab)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("LDA".PadRight(w));
this.AppendSpace();
this.AppendNumeric(addr);
this.AppendLine();
}
public void WriteLDA(byte addr, int w = 0, bool tab = true)
{
this.WriteLDAInternal('$'.ToString() + addr.ToString("X2"), w, tab);
}
public void WriteLDA(ushort addr, int w = 0, bool tab = true)
{
this.WriteLDAInternal('$'.ToString() + addr.ToString("X4"), w, tab);
}
public void WriteLDA(int addr, int w = 0, bool tab = true)
{
this.WriteLDAInternal('$'.ToString() + (addr & 16777215 /*0xFFFFFF*/).ToString("X6"), w, tab);
}
public void WriteLDA_c(byte addr, int w = 0, bool tab = true)
{
this.WriteLDAInternal("#$" + addr.ToString("X2"), w, tab);
}
public void WriteLDA_c(ushort addr, int w = 0, bool tab = true)
{
this.WriteLDAInternal("#$" + addr.ToString("X2"), w, tab);
}
public void WriteLDA_b_c_bin(byte val, int w = 0, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("LDA.b".PadRight(w));
this.AppendSpace();
this.WriteBinaryConstant(val);
this.AppendLine();
}
public void WriteLDA_Label(string label, int w = 0, bool tab = true)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword("LDA".PadRight(w));
this.AppendSpace();
this.AppendNumeric('#');
this.AppendLabel(label);
this.AppendLine();
}
private void WriteSTAInternal(
string addr,
int w,
bool storeAccumulator,
string comment,
bool tab)
{
if (tab)
this.AppendHardTab();
this.AppendKeyword((storeAccumulator ? "STA" : "STZ").PadRight(w));
this.AppendSpace();
this.AppendNumeric(addr);
if (comment != null)
{
this.AppendSpace();
this.AppendComment("; " + comment);
}
this.AppendLine();
}
public void WriteSTA(byte addr, int w = 0, string comment = null, bool tab = true)
{
this.WriteSTAInternal('$'.ToString() + addr.ToString("X2"), w, true, comment, tab);
}
public void WriteSTA(ushort addr, int w = 0, string comment = null, bool tab = true)
{
this.WriteSTAInternal('$'.ToString() + addr.ToString("X4"), w, true, comment, tab);
}
public void WriteSTA(int addr, int w = 0, string comment = null, bool tab = true)
{
this.WriteSTAInternal('$'.ToString() + (addr & 16777215 /*0xFFFFFF*/).ToString("X6"), w, true, comment, tab);
}
public void WriteSTZ(byte addr, int w = 0, string comment = null, bool tab = true)
{
this.WriteSTAInternal('$'.ToString() + addr.ToString("X2"), w, false, comment, tab);
}
public void WriteSTZ(ushort addr, int w = 0, string comment = null, bool tab = true)
{
this.WriteSTAInternal('$'.ToString() + addr.ToString("X4"), w, false, comment, tab);
}
public void SetTextBoxText(RichTextBox textBox)
{
textBox.Rtf = $"{{\\rtf1\\ansi\\deff0{{\\colortbl;\\red0\\green127\\blue0;\\red0\\green0\\blue255;\\red64\\green64\\blue64;\\red127\\green0\\blue127;}}{this.m_rtf.ToString()}\\line}}";
}
public string GetText() => this.m_plain.ToString();
public void WriteToFile(string filename, Encoding encoding = null)
{
if (encoding == null)
encoding = (Encoding) new UTF8Encoding(false);
File.WriteAllText(filename, this.m_plain.ToString(), encoding);
}
~CodeGen() => this.m_rtf = this.m_plain = (StringBuilder) null;
}