Commits

Nick Massey  committed 7553ca0

Initial commit.

  • Participants

Comments (0)

Files changed (13)

+glob:coleco-o-tron/bin/
+glob:coleco-o-tron/obj
+glob:*.suo
+glob:*~

File coleco-o-tron.sln

+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "coleco-o-tron", "coleco-o-tron\coleco-o-tron.csproj", "{B976AFD5-1555-421C-BB75-D0CDE366A3D5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x86 = Debug|x86
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B976AFD5-1555-421C-BB75-D0CDE366A3D5}.Debug|x86.ActiveCfg = Debug|x86
+		{B976AFD5-1555-421C-BB75-D0CDE366A3D5}.Debug|x86.Build.0 = Debug|x86
+		{B976AFD5-1555-421C-BB75-D0CDE366A3D5}.Release|x86.ActiveCfg = Release|x86
+		{B976AFD5-1555-421C-BB75-D0CDE366A3D5}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

File coleco-o-tron/ColecoCore.cs

+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace coleco_o_tron
+{
+    class ColecoCore
+    {
+
+        private int regA;
+        private int regB;
+        private int regC;
+        private int regD;
+        private int regE;
+        private int regH;
+        private int regL;
+        private int regSP;
+        private int regPC;
+        private int intZ;
+        private bool flagZ
+        {
+            get
+            {
+                return intZ == 0;
+            }
+            set
+            {
+                if (value)
+                    intZ = 0;
+                else
+                    intZ = 1;
+            }
+        }
+        private bool flagN;
+        private bool flagH;
+        private bool flagC;
+        private bool flagS;
+        private bool flagV;
+        private int regF
+        {
+            get
+            {
+                byte value = 0;
+                if (flagS)
+                    value |= 0x80;
+                if (flagZ)
+                    value |= 0x60;
+                if (flagN)
+                    value |= 0x40;
+                if (flagH)
+                    value |= 0x10;
+                if (flagV)
+                    value |= 0x04;
+                if (flagN)
+                    value |= 0x02;
+                if (flagC)
+                    value |= 0x01;
+                return value;
+            }
+            set
+            {
+                flagS = ((value & 0x80) != 0);
+                flagZ = ((value & 0x40) != 0);
+                flagH = ((value & 0x10) != 0);
+                flagV = ((value & 0x04) != 0);
+                flagN = ((value & 0x02) != 0);
+                flagC = ((value & 0x01) != 0);
+            }
+        }
+        private int regAF
+        {
+            get
+            {
+                return ((regA << 8) | regF) & 0xFFFF;
+            }
+            set
+            {
+                regA = (value >> 8) & 0xFF;
+                regF = (value & 0xFF);
+            }
+        }
+        private int regBC
+        {
+            get
+            {
+                return ((regB << 8) | regC) & 0xFFFF;
+            }
+            set
+            {
+                regB = (value >> 8) & 0xFF;
+                regC = (value & 0xFF);
+            }
+        }
+        private int regDE
+        {
+            get
+            {
+                return ((regD << 8) | regE) & 0xFFFF;
+            }
+            set
+            {
+                regD = (value >> 8) & 0xFF;
+                regE = (value & 0xFF);
+            }
+        }
+        private int regHL
+        {
+            get
+            {
+                return ((regH << 8) | regL) & 0xFFFF;
+            }
+            set
+            {
+                regH = (value >> 8) & 0xFF;
+                regL = (value & 0xFF);
+            }
+        }
+        private int regI;
+        private int regR;
+        private int regIX;
+        private int regIY;
+        private int shadowRegAF;
+        private int shadowRegBC;
+        private int shadowRegDE;
+        private int shadowRegHL;
+
+        bool emulationRunning = false;
+        byte[] memory = new byte[0x10000];
+        int counter;
+        public void Run()
+        {
+            int[] opTable = OpInfo.GetOps();
+            int op, source, destination, instruction, cycles, result = 0, data = 0, temp = 0;
+            while (emulationRunning)
+            {
+                op = opTable[Read()];
+                instruction = op & 0xFF;
+                destination = (op >> 8) & 0xFF;
+                source = (op >> 16) & 0xFF;
+                cycles = (op >> 24) & 0xFF;
+                switch (source)
+                {
+                    case OpInfo.LocNone:
+                        break;
+                    case OpInfo.LocRegA:
+                        data = regA;
+                        break;
+                    case OpInfo.LocRegB:
+                        data = regB;
+                        break;
+                    case OpInfo.LocRegC:
+                        data = regC;
+                        break;
+                    case OpInfo.LocRegD:
+                        data = regD;
+                        break;
+                    case OpInfo.LocRegE:
+                        data = regE;
+                        break;
+                    case OpInfo.LocRegF:
+                        data = regF;
+                        break;
+                    case OpInfo.LocRegH:
+                        data = regH;
+                        break;
+                    case OpInfo.LocRegL:
+                        data = regL;
+                        break;
+                    case OpInfo.Loc8Immediate:
+                        data = Read();
+                        break;
+                    case OpInfo.LocAddrAF:
+                        data = Read(regAF);
+                        break;
+                    case OpInfo.LocAddrBC:
+                        data = Read(regBC);
+                        break;
+                    case OpInfo.LocAddrDE:
+                        data = Read(regDE);
+                        break;
+                    case OpInfo.LocAddrHL:
+                        data = Read(regHL);
+                        break;
+                    case OpInfo.LocRegAF:
+                        data = regAF;
+                        break;
+                    case OpInfo.LocRegBC:
+                        data = regBC;
+                        break;
+                    case OpInfo.LocRegDE:
+                        data = regDE;
+                        break;
+                    case OpInfo.LocRegHL:
+                        data = regHL;
+                        break;
+                    case OpInfo.LocAddrAbsoulute:
+                        data = Read(ReadWord());
+                        break;
+                    case OpInfo.Loc16Immediate:
+                        data = ReadWord();
+                        break;
+                    case OpInfo.Loc8Stack:
+                        data = PopStack();
+                        break;
+                    case OpInfo.Loc16Stack:
+                        data = PopWordStack();
+                        break;
+                }
+                switch (instruction)
+                {
+                    case OpInfo.InstrLD:
+                        result = data;
+                        break;
+                    case OpInfo.InstrEXDEHL:
+                        temp = regDE;
+                        regDE = regHL;
+                        regHL = temp;
+                        break;
+                    case OpInfo.InstrEXAFAF:
+                        temp = regAF;
+                        regAF = shadowRegAF;
+                        shadowRegAF = temp;
+                        break;
+                    case OpInfo.InstrEXX:
+                        temp = regBC;
+                        regBC = shadowRegBC;
+                        shadowRegBC = temp;
+                        temp = regDE;
+                        regDE = shadowRegDE;
+                        shadowRegDE = temp;
+                        temp = regHL;
+                        regHL = shadowRegHL;
+                        shadowRegHL = temp;
+                        break;
+                    case OpInfo.InstrEXSPHL:
+                        temp = regHL;
+                        regHL = PopWordStack();
+                        PushWordStack(regHL);
+                        break;
+                    case OpInfo.Instr8ADD:
+                        temp = regA + data;
+                        
+                        flagN = false;
+                        flagC = temp > 0xFF;
+                        flagH = ((regA & 0xF) + (data & 0xF)) > 0xF;
+                        return intZ = reg3 & 0xFF;
+                        break;
+                }
+                switch (destination)
+                {
+                    case OpInfo.LocNone:
+                        break;
+                    case OpInfo.LocRegA:
+                        regA = result;
+                        break;
+                    case OpInfo.LocRegB:
+                        regB = result;
+                        break;
+                    case OpInfo.LocRegC:
+                        regC = result;
+                        break;
+                    case OpInfo.LocRegD:
+                        regD = result;
+                        break;
+                    case OpInfo.LocRegE:
+                        regE = result;
+                        break;
+                    case OpInfo.LocRegF:
+                        regF = result;
+                        break;
+                    case OpInfo.LocRegH:
+                        regH = result;
+                        break;
+                    case OpInfo.LocRegL:
+                        regL = result;
+                        break;
+                    case OpInfo.LocAddrAF:
+                        Write(result, regAF);
+                        break;
+                    case OpInfo.LocAddrBC:
+                        Write(result, regBC);
+                        break;
+                    case OpInfo.LocAddrDE:
+                        Write(result, regDE);
+                        break;
+                    case OpInfo.LocAddrHL:
+                        Write(result, regHL);
+                        break;
+                    case OpInfo.LocRegAF:
+                        regAF = result;
+                        break;
+                    case OpInfo.LocRegBC:
+                        regBC = result;
+                        break;
+                    case OpInfo.LocRegDE:
+                        regDE = result;
+                        break;
+                    case OpInfo.LocRegHL:
+                        regHL = result;
+                        break;
+                    case OpInfo.LocAddrAbsoulute:
+                        Write(result, ReadWord());
+                        break;
+                    case OpInfo.Loc8Stack:
+                        PushStack(result);
+                        break;
+                    case OpInfo.Loc16Stack:
+                        PushWordStack(result);
+                        break;
+                }
+                counter += cycles;
+            }
+        }
+
+        private byte Read(int address)
+        {
+            return memory[address & 0xFFFF];
+        }
+        private byte Read()
+        {
+            regPC = (regPC + 1) & 0xFFFF;
+            return Read(regPC);
+        }
+        private ushort ReadWord()
+        {
+            return (ushort)(Read() | (Read() << 8));
+        }
+        private ushort ReadWord(int address)
+        {
+            return (ushort)(Read(address) | (Read((address + 1) & 0xFFFF) << 8));
+        }
+        private void PushStack(int value)
+        {
+            regSP = (regSP - 1) & 0xFFFF;
+            Write(value, regSP);
+        }
+        private void PushWordStack(int value)
+        {
+            PushStack(value >> 8);
+            PushStack(value);
+        }
+        private byte PopStack()
+        {
+            byte value = Read(regSP);
+            regSP = (regSP + 1) & 0xFFFF;
+            return value;
+        }
+        private ushort PopWordStack()
+        {
+            return (ushort)(PopStack() | (PopStack() << 8));
+        }
+        private void Write(int value, int address)
+        {
+            memory[address & 0xFF] = (byte)(value & 0xFF);
+        }
+    }
+}

File coleco-o-tron/Form1.Designer.cs

+namespace coleco_o_tron
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Text = "Form1";
+        }
+
+        #endregion
+    }
+}
+

File coleco-o-tron/Form1.cs

+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace coleco_o_tron
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+    }
+}

File coleco-o-tron/OpInfo.cs

+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace coleco_o_tron
+{
+    class OpInfo
+    {
+        public const int InstrLD = 0;
+        public const int InstrEXDEHL = 1;
+        public const int InstrEXAFAF = 2;
+        public const int InstrEXX = 3;
+        public const int InstrEXSPHL = 4;
+        public const int Instr8ADD = 5;
+
+
+        public const int LocRegB = 0;
+        public const int LocRegC = 1;
+        public const int LocRegD = 2;
+        public const int LocRegE = 3;
+        public const int LocRegF = 6;
+        public const int LocRegA = 7;
+        public const int LocRegH = 4;
+        public const int LocRegL = 5;
+        public const int Loc8Immediate = 8;
+        public const int LocAddrAF = 9;
+        public const int LocAddrBC = 10;
+        public const int LocAddrDE = 11;
+        public const int LocAddrHL = 12;
+        public const int LocRegAF = 13;
+        public const int LocRegBC = 14;
+        public const int LocRegDE = 15;
+        public const int LocRegHL = 16;
+        public const int LocAddrAbsoulute = 17;
+        public const int Loc16Immediate = 18;
+        public const int LocNone = 19;
+        public const int Loc8Stack = 20;
+        public const int Loc16Stack = 21;
+
+
+        public static int[] opListing;
+        public static int[] GetOps()
+        {
+            if (opListing == null)
+                LoadOps();
+            return opListing;
+        }
+        public static void LoadOps()
+        {
+            opListing = new int[10];
+        }
+    }
+}

File coleco-o-tron/Program.cs

+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace coleco_o_tron
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}

File coleco-o-tron/Properties/AssemblyInfo.cs

+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("coleco-o-tron")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("coleco-o-tron")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0407787f-84a3-4f0c-924d-987807e7d58b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

File coleco-o-tron/Properties/Resources.Designer.cs

+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace coleco_o_tron.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("coleco_o_tron.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

File coleco-o-tron/Properties/Resources.resx

+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

File coleco-o-tron/Properties/Settings.Designer.cs

+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace coleco_o_tron.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

File coleco-o-tron/Properties/Settings.settings

+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

File coleco-o-tron/coleco-o-tron.csproj

+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B976AFD5-1555-421C-BB75-D0CDE366A3D5}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>coleco_o_tron</RootNamespace>
+    <AssemblyName>coleco-o-tron</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ColecoCore.cs" />
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OpInfo.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>