From f0a9af7158f2faf6359beef5602451b6a042a539 Mon Sep 17 00:00:00 2001 From: Ian C Date: Fri, 21 Jan 2005 01:13:58 +0000 Subject: Initial checkin --- About.cs | 158 +++++++++++++++++++++++ AssemblyInfo.cs | 33 +++++ CompileScript.cs | 105 +++++++++++++++ DebugForm.cs | 109 ++++++++++++++++ ExecuteForm.cs | 152 ++++++++++++++++++++++ Help.resources | Bin 0 -> 1763 bytes MainForm.cs | 304 ++++++++++++++++++++++++++++++++++++++++++++ SID.cs | 140 ++++++++++++++++++++ SIDFX.About.resources | Bin 0 -> 6337 bytes SIDFX.DebugForm.resources | Bin 0 -> 2979 bytes SIDFX.ExecuteForm.resources | Bin 0 -> 4761 bytes SIDFX.MainForm.resources | Bin 0 -> 4183 bytes SIDFX.PlayForm.resources | Bin 0 -> 27069 bytes SIDFX.cmbx | 24 ++++ SIDFX.prjx | 40 ++++++ Util.cs | 52 ++++++++ help.rtf | Bin 0 -> 1429 bytes 17 files changed, 1117 insertions(+) create mode 100644 About.cs create mode 100644 AssemblyInfo.cs create mode 100644 CompileScript.cs create mode 100644 DebugForm.cs create mode 100644 ExecuteForm.cs create mode 100644 Help.resources create mode 100644 MainForm.cs create mode 100644 SID.cs create mode 100644 SIDFX.About.resources create mode 100644 SIDFX.DebugForm.resources create mode 100644 SIDFX.ExecuteForm.resources create mode 100644 SIDFX.MainForm.resources create mode 100644 SIDFX.PlayForm.resources create mode 100644 SIDFX.cmbx create mode 100644 SIDFX.prjx create mode 100644 Util.cs create mode 100644 help.rtf diff --git a/About.cs b/About.cs new file mode 100644 index 0000000..2bd728d --- /dev/null +++ b/About.cs @@ -0,0 +1,158 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Windows.Forms; +using System.Text; +using System.Resources; +using System.Reflection; + +namespace SIDFX +{ + /// + /// Description of About + /// + public class About : System.Windows.Forms.Form + { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label m_gpl; + private System.Windows.Forms.RichTextBox m_help; + private System.Windows.Forms.Label m_title; + private System.Windows.Forms.Button m_ok; + + public About() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + StringBuilder s=new StringBuilder(); + + m_title.Text="GfxEd8 (c) Copyright 2004 Ian Cowburn"; + + s.Append("This program is distributed in the hope that it will be useful, "); + s.Append("but WITHOUT ANY WARRANTY; without even the implied warranty of "); + s.Append("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "); + s.Append("GNU General Public License for more details."); + + m_gpl.Text=s.ToString(); + + m_title.Text="SIDFX (c) Copyright 2004 Ian Cowburn"; + + ResourceManager mgr=new ResourceManager("Help", + Assembly.GetExecutingAssembly()); + + byte[] rtf=(byte[])mgr.GetObject("help"); + + if (rtf!=null) + { + m_help.Rtf=new ASCIIEncoding().GetString(rtf); + } + else + { + m_help.Text="Failed to read help from resources"; + } + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.m_ok = new System.Windows.Forms.Button(); + this.m_title = new System.Windows.Forms.Label(); + this.m_help = new System.Windows.Forms.RichTextBox(); + this.m_gpl = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // m_ok + // + this.m_ok.Location = new System.Drawing.Point(424, 368); + this.m_ok.Name = "m_ok"; + this.m_ok.Size = new System.Drawing.Size(88, 24); + this.m_ok.TabIndex = 2; + this.m_ok.Text = "OK"; + this.m_ok.Click += new System.EventHandler(this.OnOK); + // + // m_title + // + this.m_title.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.m_title.Location = new System.Drawing.Point(8, 8); + this.m_title.Name = "m_title"; + this.m_title.Size = new System.Drawing.Size(504, 32); + this.m_title.TabIndex = 7; + this.m_title.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // m_help + // + this.m_help.BackColor = System.Drawing.SystemColors.Info; + this.m_help.Cursor = System.Windows.Forms.Cursors.Default; + this.m_help.Location = new System.Drawing.Point(8, 144); + this.m_help.Name = "m_help"; + this.m_help.ReadOnly = true; + this.m_help.Size = new System.Drawing.Size(504, 216); + this.m_help.TabIndex = 9; + this.m_help.Text = ""; + // + // m_gpl + // + this.m_gpl.Location = new System.Drawing.Point(72, 56); + this.m_gpl.Name = "m_gpl"; + this.m_gpl.Size = new System.Drawing.Size(392, 56); + this.m_gpl.TabIndex = 0; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(8, 128); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(120, 16); + this.label1.TabIndex = 8; + this.label1.Text = "Scripting help:"; + // + // About + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(522, 399); + this.Controls.Add(this.m_help); + this.Controls.Add(this.label1); + this.Controls.Add(this.m_title); + this.Controls.Add(this.m_ok); + this.Controls.Add(this.m_gpl); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About SID FX"; + this.ResumeLayout(false); + } + #endregion + + + void OnOK(object sender, System.EventArgs e) + { + Close(); + } + } +} diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs new file mode 100644 index 0000000..965e66d --- /dev/null +++ b/AssemblyInfo.cs @@ -0,0 +1,33 @@ +// $Id$ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/CompileScript.cs b/CompileScript.cs new file mode 100644 index 0000000..cbdb5b8 --- /dev/null +++ b/CompileScript.cs @@ -0,0 +1,105 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using Microsoft.CSharp; +using System.CodeDom; +using System.CodeDom.Compiler; +using System.Reflection; + +namespace SIDFX +{ + /// + /// Description of CompileScript. + /// + public class CompileScript + { + // ------------------------------------------------------- + // PUBLIC + // ------------------------------------------------------- + + public CompileScript(string script) + { + try + { + script="using System;using SIDFX;\nusing System.Threading;\nclass Script { public void Main() {\n"+script; + script=script+"}}"; + + m_provider=new CSharpCodeProvider(); + m_compiler=m_provider.CreateCompiler(); + m_param=new CompilerParameters(); + + m_param.GenerateExecutable=false; + m_param.GenerateInMemory=true; + m_param.OutputAssembly=null; + m_param.MainClass="Script.Main"; + m_param.IncludeDebugInformation=false; + + foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) { + m_param.ReferencedAssemblies.Add(a.Location); + } + + m_results=m_compiler.CompileAssemblyFromSource(m_param,script); + } + catch + { + throw; + } + } + + public bool HasErrors + { + get + { + if (m_results!=null) + { + return m_results.Errors.Count>0; + } + else + { + return true; + } + } + } + + public CompilerErrorCollection Errors + { + get {return m_results.Errors;} + } + + public void Run() + { + if (!HasErrors) + { + object o = m_results.CompiledAssembly.CreateInstance("Script"); + Type type = o.GetType(); + MethodInfo m = type.GetMethod("Main"); + m.Invoke(o, null); + } + } + + // ------------------------------------------------------- + // PRIVATE + // ------------------------------------------------------- + private CSharpCodeProvider m_provider=null; + private ICodeCompiler m_compiler=null; + private CompilerParameters m_param=null; + private CompilerResults m_results=null; + } +} diff --git a/DebugForm.cs b/DebugForm.cs new file mode 100644 index 0000000..d778ddc --- /dev/null +++ b/DebugForm.cs @@ -0,0 +1,109 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Windows.Forms; +using System.Drawing; +using HardsidInterface; + +namespace SIDFX +{ + /// + /// Description of DebugForm. + /// + public class DebugForm : System.Windows.Forms.Form + { + private Label[] m_reg; + + public DebugForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + m_reg=new Label[25]; + + Font fnt=new System.Drawing.Font + ("Courier New", 9.75F, FontStyle.Regular, + GraphicsUnit.Point, ((System.Byte)(0))); + + for(int f=0;f<25;f++) + { + m_reg[f]=new Label(); + + Point p=new Point(((f%5)*60+10), + ((f/5)*20+10)); + + m_reg[f].Text=LabelText((uint)f,0); + m_reg[f].Location=p; + m_reg[f].Font=fnt; + m_reg[f].AutoSize=true; + + Controls.Add(m_reg[f]); + } + } + + public void StartDebug() + { + Hardsid.DebugWrite+=new Hardsid.DebugEvent(Write); + Show(); + } + + public void StopDebug() + { + Hardsid.DebugWrite-=new Hardsid.DebugEvent(Write); + Hide(); + } + + private void Write(uint dev, uint r, uint v) + { + m_reg[r].Text=LabelText(r,Hardsid.Read(r)); + } + + private string LabelText(uint r, uint v) + { + return (r&0xffu).ToString("X02")+"="+(v&0xffu).ToString("x02"); + } + + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + // + // DebugForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(394, 135); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DebugForm"; + this.ShowInTaskbar = false; + this.Text = "SID Registers"; + this.TopMost = true; + } + #endregion + } +} diff --git a/ExecuteForm.cs b/ExecuteForm.cs new file mode 100644 index 0000000..d21f229 --- /dev/null +++ b/ExecuteForm.cs @@ -0,0 +1,152 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Windows.Forms; +using System.Threading; +using HardsidInterface; + +namespace SIDFX +{ + /// + /// Description of ExecuteForm. + /// + public class ExecuteForm : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.Button m_stopButton; + private System.Windows.Forms.Button m_okButton; + private System.Windows.Forms.Timer m_timer; + private System.Windows.Forms.Label m_status; + + private Thread m_thread; + + public ExecuteForm(CompileScript script) + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + m_status.Text="Running..."; + + m_thread=new Thread(new ThreadStart(script.Run)); + } + + public void Run(Form parent) + { + m_timer.Enabled=true; + m_thread.Start(); + ShowDialog(parent); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.m_status = new System.Windows.Forms.Label(); + this.m_timer = new System.Windows.Forms.Timer(this.components); + this.m_okButton = new System.Windows.Forms.Button(); + this.m_stopButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // m_status + // + this.m_status.Location = new System.Drawing.Point(8, 8); + this.m_status.Name = "m_status"; + this.m_status.Size = new System.Drawing.Size(136, 24); + this.m_status.TabIndex = 2; + this.m_status.Text = "label1"; + // + // m_timer + // + this.m_timer.Tick += new System.EventHandler(this.OnTimer); + // + // m_okButton + // + this.m_okButton.Enabled = false; + this.m_okButton.Location = new System.Drawing.Point(112, 40); + this.m_okButton.Name = "m_okButton"; + this.m_okButton.Size = new System.Drawing.Size(88, 24); + this.m_okButton.TabIndex = 1; + this.m_okButton.Text = "OK"; + this.m_okButton.Click += new System.EventHandler(this.OnOK); + // + // m_stopButton + // + this.m_stopButton.Location = new System.Drawing.Point(8, 40); + this.m_stopButton.Name = "m_stopButton"; + this.m_stopButton.Size = new System.Drawing.Size(88, 24); + this.m_stopButton.TabIndex = 0; + this.m_stopButton.Text = "Stop!"; + this.m_stopButton.Click += new System.EventHandler(this.OnStop); + // + // ExecuteForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(210, 71); + this.ControlBox = false; + this.Controls.Add(this.m_status); + this.Controls.Add(this.m_okButton); + this.Controls.Add(this.m_stopButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ExecuteForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Script"; + this.ResumeLayout(false); + } + #endregion + void OnTimer(object sender, System.EventArgs e) + { + if (!m_thread.IsAlive) + { + m_stopButton.Enabled=false; + m_okButton.Enabled=true; + m_timer.Enabled=false; + m_status.Text="Stopped"; + } + } + + void OnOK(object sender, System.EventArgs e) + { + for(uint r=0;r<25;r++) + { + Hardsid.Write(r,0); + } + + Close(); + } + + void OnStop(object sender, System.EventArgs e) + { + if (m_thread.IsAlive) + { + m_thread.Abort(); + OnTimer(null,null); + } + } + } +} diff --git a/Help.resources b/Help.resources new file mode 100644 index 0000000..c3cb964 Binary files /dev/null and b/Help.resources differ diff --git a/MainForm.cs b/MainForm.cs new file mode 100644 index 0000000..d062e91 --- /dev/null +++ b/MainForm.cs @@ -0,0 +1,304 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Windows.Forms; +using System.IO; +using System.Text; +using System.CodeDom.Compiler; +using Noddybox.GUI; +using HardsidInterface; + +namespace SIDFX +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.RichTextBox m_edit; + private System.Windows.Forms.Button m_runButton; + private System.Windows.Forms.CheckBox m_showDebug; + + private MainMenu m_mainMenu; + private MenuTree m_menu; + private string m_path; + private bool m_changed; + private DebugForm m_debug; + + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + m_debug=new DebugForm(); + + m_mainMenu=new MainMenu(); + m_menu=new MenuTree(m_mainMenu); + + m_menu.Add("/file", "File"); + m_menu.Add("/file/new", "New", new EventHandler(OnNew)); + m_menu.Add("/file/open", "Open...", new EventHandler(OnOpen)); + m_menu.Add("/file/save", "Save", new EventHandler(OnSave)); + m_menu.Add("/file/saveas", "Save as...", new EventHandler(OnSaveAs)); + m_menu.Add("/file/quit", "Quit", new EventHandler(OnQuit)); + + m_menu.Add("/sid","SID"); + m_menu.Add("/sid/run","Run Script", new EventHandler(OnRun)); + + m_menu.Add("/help","Help"); + m_menu.Add("/help/about","About...", new EventHandler(OnAbout)); + + m_menu.Get("/file/save").Enabled=false; + + m_path=""; + m_changed=false; + + Menu=m_mainMenu; + + //Hardsid.Init(); + Hardsid.DLLDebug(1); + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.m_showDebug = new System.Windows.Forms.CheckBox(); + this.m_runButton = new System.Windows.Forms.Button(); + this.m_edit = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // m_showDebug + // + this.m_showDebug.Location = new System.Drawing.Point(8, 368); + this.m_showDebug.Name = "m_showDebug"; + this.m_showDebug.Size = new System.Drawing.Size(184, 16); + this.m_showDebug.TabIndex = 2; + this.m_showDebug.Text = "Show SID Register Window"; + this.m_showDebug.CheckedChanged += new System.EventHandler(this.OnShowDebug); + // + // m_runButton + // + this.m_runButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.m_runButton.Location = new System.Drawing.Point(512, 368); + this.m_runButton.Name = "m_runButton"; + this.m_runButton.Size = new System.Drawing.Size(80, 24); + this.m_runButton.TabIndex = 1; + this.m_runButton.Text = "Run"; + this.m_runButton.Click += new System.EventHandler(this.OnRun); + // + // m_edit + // + this.m_edit.AcceptsTab = true; + this.m_edit.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.m_edit.DetectUrls = false; + this.m_edit.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.m_edit.Location = new System.Drawing.Point(8, 0); + this.m_edit.Name = "m_edit"; + this.m_edit.Size = new System.Drawing.Size(584, 360); + this.m_edit.TabIndex = 0; + this.m_edit.Text = ""; + this.m_edit.WordWrap = false; + this.m_edit.TextChanged += new System.EventHandler(this.OnTextChanged); + this.m_edit.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnKeyUp); + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(600, 397); + this.Controls.Add(this.m_showDebug); + this.Controls.Add(this.m_runButton); + this.Controls.Add(this.m_edit); + this.Name = "MainForm"; + this.Text = "SID FX - Untitled"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.OnFormClosing); + this.ResumeLayout(false); + } + #endregion + + void OnNew(object sender, System.EventArgs e) + { + m_menu.Get("/file/save").Enabled=false; + m_path=""; + m_edit.Text=""; + m_changed=false; + Text="SID FX - Untitled"; + } + + void OnOpen(object sender, System.EventArgs e) + { + if (!m_changed || Util.YesNo("Lose current edits?")) + { + OpenFileDialog fsel=new OpenFileDialog(); + + fsel.FileName=m_path; + fsel.Filter="SIDFX files (*.sdx)|*.sdx|All files (*.*)|*.*"; + fsel.FilterIndex=1; + + if(fsel.ShowDialog()==DialogResult.OK) + { + m_path=fsel.FileName; + + try + { + m_edit.LoadFile(m_path,RichTextBoxStreamType.PlainText); + m_menu.Get("/file/save").Enabled=true; + m_changed=false; + Text="SID FX - " + m_path; + } + catch + { + Util.Error("Error reading " + m_path); + } + } + } + } + + void OnSave(object sender, System.EventArgs e) + { + try + { + m_edit.SaveFile(m_path,RichTextBoxStreamType.PlainText); + m_changed=false; + } + catch + { + Util.Error("Error writing " + m_path); + } + } + + void OnSaveAs(object sender, System.EventArgs e) + { + SaveFileDialog fsel=new SaveFileDialog(); + + fsel.FileName=m_path; + fsel.Filter="SIDFX files (*.sdx)|*.sdx|All files (*.*)|*.*"; + fsel.FilterIndex=1; + + if(fsel.ShowDialog()==DialogResult.OK) + { + m_path=fsel.FileName; + + OnSave(sender,e); + m_menu.Get("/file/save").Enabled=true; + m_changed=false; + Text="SID FX - " + m_path; + } + } + + void OnQuit(object sender, System.EventArgs e) + { + if (!m_changed || Util.YesNo("Lose current edits?")) + { + // This prevents OnFormClosing() asking again + // + m_changed=false; + + Close(); + } + } + + void OnAbout(object sender, System.EventArgs e) + { + Form about=new About(); + + about.ShowDialog(this); + } + + void OnRun(object sender, System.EventArgs e) + { + if (Hardsid.Count<1) + { + Util.Error("This machine has no HardSIDs!"); + return; + } + + CompileScript comp=new CompileScript(m_edit.Text); + + if (comp.HasErrors) + { + StringBuilder s=new StringBuilder(); + + s.Append("Errors compiling the script:\n"); + + foreach (CompilerError err in comp.Errors) + { + s.Append(err.ToString()+"\n"); + } + + Util.Error(s.ToString()); + } + else + { + ExecuteForm exec=new ExecuteForm(comp); + + exec.Run(this); + } + } + + void OnTextChanged(object sender, System.EventArgs e) + { + m_changed=true; + } + + void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e) + { + if (m_changed && !Util.YesNo("Lose current edits?")) + { + e.Cancel=true; + } + } + + void OnShowDebug(object sender, System.EventArgs e) + { + if (m_showDebug.Checked) + { + m_debug.StartDebug(); + } + else + { + m_debug.StopDebug(); + } + } + + void OnKeyUp(object sender, System.Windows.Forms.KeyEventArgs e) + { + if (e.KeyCode==Keys.F5) + { + OnRun(null,null); + e.Handled=true; + } + } + + } +} diff --git a/SID.cs b/SID.cs new file mode 100644 index 0000000..f6496ac --- /dev/null +++ b/SID.cs @@ -0,0 +1,140 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using HardsidInterface; + +namespace SIDFX +{ + /// + /// Description of SID. + /// + public class SID + { + [Flags] + public enum ControlFlag + { + NOISE=128, + PULSE=64, + SAW=32, + TRIANGLE=16, + TEST=8, + RING=4, + SYNC=2, + GATE=1, + NONE=0 + }; + + [Flags] + public enum FilterFlag + { + OFF3=128, + HP=64, + BP=32, + LP=16, + EXT=8, + V3=4, + V2=2, + V1=1, + NONE=0 + }; + + public static void Volume(byte volume) + { + byte v=(byte)(Hardsid.Read(24)&0xf0u); + + v|=volume; + Hardsid.Write(24,v); + } + + public static void Frequency(byte voice, uint val) + { + byte r=(byte)(voice*7); + byte h=(byte)(val>>8); + byte l=(byte)(val&0xff); + + Hardsid.Write(r,l); + Hardsid.Write(r+1u,h); + } + + public static void PulseWidth(byte voice, uint val) + { + byte r=(byte)(voice*7); + byte h=(byte)(val>>8); + byte l=(byte)(val&0xff); + + Hardsid.Write(r+2u,l); + Hardsid.Write(r+3u,h); + } + + public static void ADSR(byte voice, + byte attack, byte decay, + byte sustain, byte release) + { + byte r=(byte)(voice*7); + byte ad=(byte)(((attack&0x0fu)<<4)|(decay&0x0fu)); + byte sr=(byte)(((sustain&0x0fu)<<4)|(release&0x0fu)); + + Hardsid.Write(r+5u,ad); + Hardsid.Write(r+6u,sr); + } + + public static void Control(byte voice, ControlFlag control) + { + byte r=(byte)(voice*7); + + Hardsid.Write(r+4u,(uint)control); + } + + public static void Cutoff(uint val) + { + byte h=(byte)(val>>3); + byte l=(byte)(val&0x7); + + Hardsid.Write(21,l); + Hardsid.Write(22+1u,h); + } + + public static void Resonance(byte val) + { + byte v=(byte)(Hardsid.Read(23)&0x0fu); + + v|=(byte)((val&0x0fu)<<4); + Hardsid.Write(23,v); + } + + public static void Filter(FilterFlag flags) + { + byte h=(byte)((uint)flags&0xf0u); + byte l=(byte)((uint)flags&0x0fu); + + byte v=(byte)(Hardsid.Read(23)&0xf0u); + + v|=l; + Hardsid.Write(23,v); + + v=(byte)(Hardsid.Read(24)&0x0fu); + + v|=h; + Hardsid.Write(24,v); + } + + private SID() {} + } +} diff --git a/SIDFX.About.resources b/SIDFX.About.resources new file mode 100644 index 0000000..5e791ce Binary files /dev/null and b/SIDFX.About.resources differ diff --git a/SIDFX.DebugForm.resources b/SIDFX.DebugForm.resources new file mode 100644 index 0000000..bfecae4 Binary files /dev/null and b/SIDFX.DebugForm.resources differ diff --git a/SIDFX.ExecuteForm.resources b/SIDFX.ExecuteForm.resources new file mode 100644 index 0000000..32cd2d8 Binary files /dev/null and b/SIDFX.ExecuteForm.resources differ diff --git a/SIDFX.MainForm.resources b/SIDFX.MainForm.resources new file mode 100644 index 0000000..f413a6e Binary files /dev/null and b/SIDFX.MainForm.resources differ diff --git a/SIDFX.PlayForm.resources b/SIDFX.PlayForm.resources new file mode 100644 index 0000000..cbcad6a Binary files /dev/null and b/SIDFX.PlayForm.resources differ diff --git a/SIDFX.cmbx b/SIDFX.cmbx new file mode 100644 index 0000000..35fb372 --- /dev/null +++ b/SIDFX.cmbx @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SIDFX.prjx b/SIDFX.prjx new file mode 100644 index 0000000..ee73fb0 --- /dev/null +++ b/SIDFX.prjx @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Util.cs b/Util.cs new file mode 100644 index 0000000..63ef198 --- /dev/null +++ b/Util.cs @@ -0,0 +1,52 @@ +// SIDFX +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Windows.Forms; +using System.Text; + +namespace SIDFX +{ + /// + /// Usual utils and some state machine + /// + public class Util + { + public static bool YesNo(string s) + { + return MessageBox.Show(s,"Question", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question)==DialogResult.Yes; + } + + public static void Message(string s) + { + MessageBox.Show(s,"Message",MessageBoxButtons.OK,MessageBoxIcon.Information); + } + + public static void Error(string s) + { + MessageBox.Show(s,"ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error); + } + + private Util() + { + } + } +} diff --git a/help.rtf b/help.rtf new file mode 100644 index 0000000..630623e Binary files /dev/null and b/help.rtf differ -- cgit v1.2.3