mirror of
https://github.com/livingcomputermuseum/ContrAlto.git
synced 2026-02-14 03:44:58 +00:00
Cleaned up new UI, refactored Debugger/control logic, fixed mouse capture behavior and started working on better keyboard input.
This commit is contained in:
102
Contralto/AboutBox.Designer.cs
generated
Normal file
102
Contralto/AboutBox.Designer.cs
generated
Normal file
@@ -0,0 +1,102 @@
|
||||
namespace Contralto
|
||||
{
|
||||
partial class AboutBox
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox));
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.OkButton = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(53, 18);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(74, 13);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "ContrAlto v0.1";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(12, 66);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(168, 13);
|
||||
this.label2.TabIndex = 1;
|
||||
this.label2.Text = "(c) 2015 Living Computer Museum";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(39, 41);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(109, 13);
|
||||
this.label3.TabIndex = 2;
|
||||
this.label3.Text = "A Xerox Alto Emulator";
|
||||
//
|
||||
// OkButton
|
||||
//
|
||||
this.OkButton.Location = new System.Drawing.Point(52, 96);
|
||||
this.OkButton.Name = "OkButton";
|
||||
this.OkButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.OkButton.TabIndex = 3;
|
||||
this.OkButton.Text = "OK!";
|
||||
this.OkButton.UseVisualStyleBackColor = true;
|
||||
this.OkButton.Click += new System.EventHandler(this.OkButton_Click);
|
||||
//
|
||||
// AboutBox
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(191, 131);
|
||||
this.Controls.Add(this.OkButton);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "AboutBox";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.Text = "About ContrAlto";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Button OkButton;
|
||||
}
|
||||
}
|
||||
25
Contralto/AboutBox.cs
Normal file
25
Contralto/AboutBox.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Contralto
|
||||
{
|
||||
public partial class AboutBox : Form
|
||||
{
|
||||
public AboutBox()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void OkButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
186
Contralto/AboutBox.resx
Normal file
186
Contralto/AboutBox.resx
Normal file
@@ -0,0 +1,186 @@
|
||||
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<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" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAIAICAAAAAACACoCAAAJgAAABAQAAAAAAgAaAUAAM4IAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
|
||||
AAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgBYWFgAY2JjAG5tbgB5eHgAhoaGAJGRkQCamZkApKOkAK+u
|
||||
rwC6uboAxcTFAPHv8AD29vYA+fn5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA////AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwA
|
||||
AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAADAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAA
|
||||
AAAAAAAAAAEAAAABAAAAAAAAQkJCAFhYWACGhoYAmpmZAJycnACko6QA0M/PAObk5QDx7/AA9vb2AAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAD///8ABwcHBwcHBwcHBwAABwcHBwcHBwcHBwcHBwcAAAcHBwcHBwcHBwcHBwcA
|
||||
AAcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAABwcHBwcHBwcHBwAH
|
||||
BwAABwcHBwcHBwcHBwcAAAcAAAcHBwcHBwcHBwcHAAAAAAcHBwcHBwcHBwcHBwAAAAAAAAAHBwcHBwcH
|
||||
BwcAAAAAAAAHBwcHBwcHBwcHAAAAAAAHBwcHBwcHBwcHBwAAAAAHBwcHBwcHBwcHBwcAAAAHBwcHBwcH
|
||||
BwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
BIN
Contralto/Alto.ico
Normal file
BIN
Contralto/Alto.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
@@ -5,6 +5,8 @@ using Contralto.IO;
|
||||
using Contralto.Memory;
|
||||
using Contralto.Display;
|
||||
using System.Timers;
|
||||
using System.IO;
|
||||
using System;
|
||||
|
||||
namespace Contralto
|
||||
{
|
||||
@@ -86,6 +88,33 @@ namespace Contralto
|
||||
_clocks++;
|
||||
}
|
||||
|
||||
public void LoadDrive(int drive, string path)
|
||||
{
|
||||
if (drive < 0 || drive > 1)
|
||||
{
|
||||
throw new InvalidOperationException("drive must be 0 or 1.");
|
||||
}
|
||||
DiabloPack newPack = new DiabloPack(DiabloDiskType.Diablo31);
|
||||
|
||||
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
newPack.Load(fs, false);
|
||||
fs.Close();
|
||||
}
|
||||
|
||||
_diskController.Drives[drive].LoadPack(newPack);
|
||||
}
|
||||
|
||||
public void UnloadDrive(int drive)
|
||||
{
|
||||
if (drive < 0 || drive > 1)
|
||||
{
|
||||
throw new InvalidOperationException("drive must be 0 or 1.");
|
||||
}
|
||||
|
||||
_diskController.Drives[drive].UnloadPack();
|
||||
}
|
||||
|
||||
public AltoCPU CPU
|
||||
{
|
||||
get { return _cpu; }
|
||||
|
||||
41
Contralto/AltoWindow.Designer.cs
generated
41
Contralto/AltoWindow.Designer.cs
generated
@@ -28,6 +28,7 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AltoWindow));
|
||||
this.DisplayBox = new System.Windows.Forms.PictureBox();
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@@ -42,8 +43,7 @@
|
||||
this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.unloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.debuggerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showDebuggerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.SystemShowDebuggerMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.StatusLine = new System.Windows.Forms.StatusStrip();
|
||||
@@ -70,7 +70,6 @@
|
||||
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileToolStripMenuItem,
|
||||
this.settingsToolStripMenuItem,
|
||||
this.debuggerToolStripMenuItem,
|
||||
this.helpToolStripMenuItem});
|
||||
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
@@ -91,6 +90,7 @@
|
||||
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
||||
this.exitToolStripMenuItem.Size = new System.Drawing.Size(92, 22);
|
||||
this.exitToolStripMenuItem.Text = "Exit";
|
||||
this.exitToolStripMenuItem.Click += new System.EventHandler(this.OnFileExitClick);
|
||||
//
|
||||
// settingsToolStripMenuItem
|
||||
//
|
||||
@@ -99,7 +99,8 @@
|
||||
this.SystemResetMenuItem,
|
||||
this.drive0ToolStripMenuItem,
|
||||
this.drive1ToolStripMenuItem,
|
||||
this.optionsToolStripMenuItem});
|
||||
this.optionsToolStripMenuItem,
|
||||
this.SystemShowDebuggerMenuItem});
|
||||
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
|
||||
this.settingsToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
|
||||
this.settingsToolStripMenuItem.Text = "System";
|
||||
@@ -117,6 +118,7 @@
|
||||
this.SystemResetMenuItem.Name = "SystemResetMenuItem";
|
||||
this.SystemResetMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||
this.SystemResetMenuItem.Text = "Reset";
|
||||
this.SystemResetMenuItem.Click += new System.EventHandler(this.OnSystemResetMenuClick);
|
||||
//
|
||||
// drive0ToolStripMenuItem
|
||||
//
|
||||
@@ -132,12 +134,14 @@
|
||||
this.loadToolStripMenuItem1.Name = "loadToolStripMenuItem1";
|
||||
this.loadToolStripMenuItem1.Size = new System.Drawing.Size(119, 22);
|
||||
this.loadToolStripMenuItem1.Text = "Load...";
|
||||
this.loadToolStripMenuItem1.Click += new System.EventHandler(this.OnSystemDrive0LoadClick);
|
||||
//
|
||||
// unloadToolStripMenuItem1
|
||||
//
|
||||
this.unloadToolStripMenuItem1.Name = "unloadToolStripMenuItem1";
|
||||
this.unloadToolStripMenuItem1.Size = new System.Drawing.Size(119, 22);
|
||||
this.unloadToolStripMenuItem1.Text = "Unload...";
|
||||
this.unloadToolStripMenuItem1.Click += new System.EventHandler(this.OnSystemDrive0UnloadClick);
|
||||
//
|
||||
// drive1ToolStripMenuItem
|
||||
//
|
||||
@@ -153,12 +157,14 @@
|
||||
this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
|
||||
this.loadToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
|
||||
this.loadToolStripMenuItem.Text = "Load...";
|
||||
this.loadToolStripMenuItem.Click += new System.EventHandler(this.OnSystemDrive1LoadClick);
|
||||
//
|
||||
// unloadToolStripMenuItem
|
||||
//
|
||||
this.unloadToolStripMenuItem.Name = "unloadToolStripMenuItem";
|
||||
this.unloadToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
|
||||
this.unloadToolStripMenuItem.Text = "Unload...";
|
||||
this.unloadToolStripMenuItem.Click += new System.EventHandler(this.OnSystemDrive1UnloadClick);
|
||||
//
|
||||
// optionsToolStripMenuItem
|
||||
//
|
||||
@@ -166,19 +172,12 @@
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||
this.optionsToolStripMenuItem.Text = "Options...";
|
||||
//
|
||||
// debuggerToolStripMenuItem
|
||||
// SystemShowDebuggerMenuItem
|
||||
//
|
||||
this.debuggerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.showDebuggerToolStripMenuItem});
|
||||
this.debuggerToolStripMenuItem.Name = "debuggerToolStripMenuItem";
|
||||
this.debuggerToolStripMenuItem.Size = new System.Drawing.Size(66, 20);
|
||||
this.debuggerToolStripMenuItem.Text = "Debugger";
|
||||
//
|
||||
// showDebuggerToolStripMenuItem
|
||||
//
|
||||
this.showDebuggerToolStripMenuItem.Name = "showDebuggerToolStripMenuItem";
|
||||
this.showDebuggerToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
||||
this.showDebuggerToolStripMenuItem.Text = "Show Debugger";
|
||||
this.SystemShowDebuggerMenuItem.Name = "SystemShowDebuggerMenuItem";
|
||||
this.SystemShowDebuggerMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||
this.SystemShowDebuggerMenuItem.Text = "Show Debugger";
|
||||
this.SystemShowDebuggerMenuItem.Click += new System.EventHandler(this.OnDebuggerShowClick);
|
||||
//
|
||||
// helpToolStripMenuItem
|
||||
//
|
||||
@@ -193,6 +192,7 @@
|
||||
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(103, 22);
|
||||
this.aboutToolStripMenuItem.Text = "About";
|
||||
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.OnHelpAboutClick);
|
||||
//
|
||||
// StatusLine
|
||||
//
|
||||
@@ -219,14 +219,18 @@
|
||||
this.Controls.Add(this.StatusLine);
|
||||
this.Controls.Add(this.DisplayBox);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.DoubleBuffered = true;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MainMenuStrip = this.menuStrip1;
|
||||
this.MinimizeBox = false;
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "AltoWindow";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.Text = "ContrAlto";
|
||||
this.Deactivate += new System.EventHandler(this.OnWindowDeactivate);
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnKeyDown);
|
||||
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnKeyUp);
|
||||
this.Leave += new System.EventHandler(this.OnWindowLeave);
|
||||
((System.ComponentModel.ISupportInitialize)(this.DisplayBox)).EndInit();
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
@@ -255,9 +259,8 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem loadToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem unloadToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem debuggerToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem showDebuggerToolStripMenuItem;
|
||||
private System.Windows.Forms.StatusStrip StatusLine;
|
||||
private System.Windows.Forms.ToolStripStatusLabel StatusLabel;
|
||||
private System.Windows.Forms.ToolStripMenuItem SystemShowDebuggerMenuItem;
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,76 @@
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="menuStrip1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="StatusLine.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>126, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAIAICAAAAAACACoCAAAJgAAABAQAAAAAAgAaAUAAM4IAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
|
||||
AAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgBYWFgAY2JjAG5tbgB5eHgAhoaGAJGRkQCamZkApKOkAK+u
|
||||
rwC6uboAxcTFAPHv8AD29vYA+fn5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA////AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwA
|
||||
AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAADAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAA
|
||||
AAAAAAAAAAEAAAABAAAAAAAAQkJCAFhYWACGhoYAmpmZAJycnACko6QA0M/PAObk5QDx7/AA9vb2AAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAD///8ABwcHBwcHBwcHBwAABwcHBwcHBwcHBwcHBwcAAAcHBwcHBwcHBwcHBwcA
|
||||
AAcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAABwcHBwcHBwcHBwAH
|
||||
BwAABwcHBwcHBwcHBwcAAAcAAAcHBwcHBwcHBwcHAAAAAAcHBwcHBwcHBwcHBwAAAAAAAAAHBwcHBwcH
|
||||
BwcAAAAAAAAHBwcHBwcHBwcHAAAAAAAHBwcHBwcHBwcHBwAAAAAHBwcHBwcHBwcHBwcAAAAHBwcHBwcH
|
||||
BwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -63,6 +63,12 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.Designer.cs">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="AltoSystem.cs" />
|
||||
<Compile Include="AltoWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
@@ -109,6 +115,7 @@
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Scheduler.cs" />
|
||||
<Compile Include="ExecutionController.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Disassembly\altocode24.mu" />
|
||||
@@ -271,6 +278,9 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="AboutBox.resx">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="AltoWindow.resx">
|
||||
<DependentUpon>AltoWindow.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -279,6 +289,7 @@
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Alto.ico" />
|
||||
<Content Include="Notes.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
||||
155
Contralto/Debugger.Designer.cs
generated
155
Contralto/Debugger.Designer.cs
generated
@@ -35,6 +35,9 @@
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
@@ -50,9 +53,7 @@
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Debugger));
|
||||
this.Microcode = new System.Windows.Forms.GroupBox();
|
||||
this.SourceTabs = new System.Windows.Forms.TabControl();
|
||||
this.Rom0Page = new System.Windows.Forms.TabPage();
|
||||
@@ -63,6 +64,10 @@
|
||||
this.Source = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.Rom1Page = new System.Windows.Forms.TabPage();
|
||||
this._rom1SourceViewer = new System.Windows.Forms.DataGridView();
|
||||
this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.Rom2Page = new System.Windows.Forms.TabPage();
|
||||
this._ram0SourceViewer = new System.Windows.Forms.DataGridView();
|
||||
this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
@@ -104,12 +109,6 @@
|
||||
this.ResetButton = new System.Windows.Forms.Button();
|
||||
this.RunToNextTaskButton = new System.Windows.Forms.Button();
|
||||
this.NovaStep = new System.Windows.Forms.Button();
|
||||
this.groupBox6 = new System.Windows.Forms.GroupBox();
|
||||
this.DisplayBox = new System.Windows.Forms.PictureBox();
|
||||
this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||
this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.Microcode.SuspendLayout();
|
||||
this.SourceTabs.SuspendLayout();
|
||||
this.Rom0Page.SuspendLayout();
|
||||
@@ -128,8 +127,6 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this._memoryData)).BeginInit();
|
||||
this.groupBox5.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this._diskData)).BeginInit();
|
||||
this.groupBox6.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DisplayBox)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// Microcode
|
||||
@@ -306,6 +303,55 @@
|
||||
this._rom1SourceViewer.TabIndex = 2;
|
||||
this._rom1SourceViewer.TabStop = false;
|
||||
//
|
||||
// dataGridViewCheckBoxColumn1
|
||||
//
|
||||
this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
|
||||
this.dataGridViewCheckBoxColumn1.FalseValue = "false";
|
||||
this.dataGridViewCheckBoxColumn1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.dataGridViewCheckBoxColumn1.HeaderText = "B";
|
||||
this.dataGridViewCheckBoxColumn1.IndeterminateValue = "null";
|
||||
this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1";
|
||||
this.dataGridViewCheckBoxColumn1.ReadOnly = true;
|
||||
this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewCheckBoxColumn1.TrueValue = "true";
|
||||
this.dataGridViewCheckBoxColumn1.Width = 20;
|
||||
//
|
||||
// dataGridViewTextBoxColumn4
|
||||
//
|
||||
this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
||||
dataGridViewCellStyle7.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle7;
|
||||
this.dataGridViewTextBoxColumn4.HeaderText = "Addr";
|
||||
this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";
|
||||
this.dataGridViewTextBoxColumn4.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn4.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
this.dataGridViewTextBoxColumn4.Width = 5;
|
||||
//
|
||||
// dataGridViewTextBoxColumn3
|
||||
//
|
||||
this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
||||
dataGridViewCellStyle8.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle8;
|
||||
this.dataGridViewTextBoxColumn3.HeaderText = "Word";
|
||||
this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
|
||||
this.dataGridViewTextBoxColumn3.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn3.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
this.dataGridViewTextBoxColumn3.Width = 5;
|
||||
//
|
||||
// dataGridViewTextBoxColumn5
|
||||
//
|
||||
this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||
dataGridViewCellStyle9.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle9;
|
||||
this.dataGridViewTextBoxColumn5.HeaderText = "Source Code";
|
||||
this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5";
|
||||
this.dataGridViewTextBoxColumn5.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn5.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
//
|
||||
// Rom2Page
|
||||
//
|
||||
this.Rom2Page.Controls.Add(this._ram0SourceViewer);
|
||||
@@ -890,84 +936,11 @@
|
||||
this.NovaStep.UseVisualStyleBackColor = true;
|
||||
this.NovaStep.Click += new System.EventHandler(this.NovaStep_Click);
|
||||
//
|
||||
// groupBox6
|
||||
//
|
||||
this.groupBox6.Controls.Add(this.DisplayBox);
|
||||
this.groupBox6.Location = new System.Drawing.Point(758, 3);
|
||||
this.groupBox6.Name = "groupBox6";
|
||||
this.groupBox6.Size = new System.Drawing.Size(617, 834);
|
||||
this.groupBox6.TabIndex = 15;
|
||||
this.groupBox6.TabStop = false;
|
||||
this.groupBox6.Text = "Display";
|
||||
//
|
||||
// DisplayBox
|
||||
//
|
||||
this.DisplayBox.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.DisplayBox.Location = new System.Drawing.Point(6, 19);
|
||||
this.DisplayBox.Name = "DisplayBox";
|
||||
this.DisplayBox.Size = new System.Drawing.Size(606, 808);
|
||||
this.DisplayBox.TabIndex = 0;
|
||||
this.DisplayBox.TabStop = false;
|
||||
this.DisplayBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.OnDisplayMouseDown);
|
||||
this.DisplayBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.OnDisplayMouseMove);
|
||||
this.DisplayBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.OnDisplayMouseUp);
|
||||
this.DisplayBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.DisplayBox_PreviewKeyDown);
|
||||
//
|
||||
// dataGridViewCheckBoxColumn1
|
||||
//
|
||||
this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
|
||||
this.dataGridViewCheckBoxColumn1.FalseValue = "false";
|
||||
this.dataGridViewCheckBoxColumn1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.dataGridViewCheckBoxColumn1.HeaderText = "B";
|
||||
this.dataGridViewCheckBoxColumn1.IndeterminateValue = "null";
|
||||
this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1";
|
||||
this.dataGridViewCheckBoxColumn1.ReadOnly = true;
|
||||
this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewCheckBoxColumn1.TrueValue = "true";
|
||||
this.dataGridViewCheckBoxColumn1.Width = 20;
|
||||
//
|
||||
// dataGridViewTextBoxColumn4
|
||||
//
|
||||
this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
||||
dataGridViewCellStyle7.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle7;
|
||||
this.dataGridViewTextBoxColumn4.HeaderText = "Addr";
|
||||
this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";
|
||||
this.dataGridViewTextBoxColumn4.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn4.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
this.dataGridViewTextBoxColumn4.Width = 5;
|
||||
//
|
||||
// dataGridViewTextBoxColumn3
|
||||
//
|
||||
this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
||||
dataGridViewCellStyle8.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle8;
|
||||
this.dataGridViewTextBoxColumn3.HeaderText = "Word";
|
||||
this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
|
||||
this.dataGridViewTextBoxColumn3.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn3.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
this.dataGridViewTextBoxColumn3.Width = 5;
|
||||
//
|
||||
// dataGridViewTextBoxColumn5
|
||||
//
|
||||
this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||
dataGridViewCellStyle9.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle9;
|
||||
this.dataGridViewTextBoxColumn5.HeaderText = "Source Code";
|
||||
this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5";
|
||||
this.dataGridViewTextBoxColumn5.ReadOnly = true;
|
||||
this.dataGridViewTextBoxColumn5.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
//
|
||||
// Debugger
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1376, 997);
|
||||
this.Controls.Add(this.groupBox6);
|
||||
this.ClientSize = new System.Drawing.Size(750, 997);
|
||||
this.Controls.Add(this.NovaStep);
|
||||
this.Controls.Add(this.RunToNextTaskButton);
|
||||
this.Controls.Add(this.ResetButton);
|
||||
@@ -983,13 +956,15 @@
|
||||
this.Controls.Add(this.StepButton);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.Microcode);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.KeyPreview = true;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "Debugger";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.Text = "Debugger";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnDebuggerClosed);
|
||||
this.Load += new System.EventHandler(this.Debugger_Load);
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Debugger_KeyDown);
|
||||
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Debugger_KeyUp);
|
||||
this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.Debugger_PreviewKeyDown);
|
||||
this.Microcode.ResumeLayout(false);
|
||||
this.Microcode.PerformLayout();
|
||||
this.SourceTabs.ResumeLayout(false);
|
||||
@@ -1009,8 +984,6 @@
|
||||
((System.ComponentModel.ISupportInitialize)(this._memoryData)).EndInit();
|
||||
this.groupBox5.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this._diskData)).EndInit();
|
||||
this.groupBox6.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.DisplayBox)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -1059,8 +1032,6 @@
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn Address;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn Data;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn Disassembly;
|
||||
private System.Windows.Forms.GroupBox groupBox6;
|
||||
private System.Windows.Forms.PictureBox DisplayBox;
|
||||
private System.Windows.Forms.TabControl SourceTabs;
|
||||
private System.Windows.Forms.TabPage Rom0Page;
|
||||
private System.Windows.Forms.TabPage Rom1Page;
|
||||
|
||||
@@ -19,17 +19,24 @@ namespace Contralto
|
||||
/// <summary>
|
||||
/// A basic & hacky debugger. To be improved.
|
||||
/// </summary>
|
||||
public partial class Debugger : Form, IAltoDisplay
|
||||
public partial class Debugger : Form
|
||||
{
|
||||
public Debugger(AltoSystem system)
|
||||
public Debugger(AltoSystem system, ExecutionController controller)
|
||||
{
|
||||
_system = system;
|
||||
_controller = controller;
|
||||
_microcodeBreakpointEnabled = new bool[1024];
|
||||
_novaBreakpointEnabled = new bool[65536];
|
||||
|
||||
_controller.StepCallback += OnExecutionStep;
|
||||
_controller.ErrorCallback += OnExecutionError;
|
||||
|
||||
// Pick up the current execution status (if the main window hands us a running
|
||||
// system, we want to know).
|
||||
_execType = _controller.IsRunning ? ExecutionType.Normal : ExecutionType.None;
|
||||
|
||||
InitializeComponent();
|
||||
InitControls();
|
||||
InitKeymap();
|
||||
InitControls();
|
||||
RefreshUI();
|
||||
}
|
||||
|
||||
@@ -75,87 +82,13 @@ namespace Contralto
|
||||
base.Refresh();
|
||||
|
||||
RefreshUI();
|
||||
}
|
||||
|
||||
public void Render()
|
||||
{
|
||||
BeginInvoke(new StepDelegate(RefreshDisplayBox));
|
||||
}
|
||||
|
||||
private void RefreshDisplayBox()
|
||||
|
||||
private void OnDebuggerClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
// Update the display
|
||||
BitmapData data = _displayBuffer.LockBits(_displayRect, ImageLockMode.WriteOnly, PixelFormat.Format1bppIndexed);
|
||||
|
||||
IntPtr ptr = data.Scan0;
|
||||
System.Runtime.InteropServices.Marshal.Copy(_displayData, 0, ptr, _displayData.Length);
|
||||
|
||||
_displayBuffer.UnlockBits(data);
|
||||
DisplayBox.Refresh();
|
||||
|
||||
// If you want interlacing to be more visible:
|
||||
//Array.Clear(_displayData, 0, _displayData.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked by the DisplayController to put a word on the emulated screen.
|
||||
/// </summary>
|
||||
/// <param name="scanline"></param>
|
||||
/// <param name="wordOffset"></param>
|
||||
/// <param name="word"></param>
|
||||
public void DrawDisplayWord(int scanline, int wordOffset, ushort word, bool lowRes)
|
||||
{
|
||||
// TODO: move magic numbers to constants
|
||||
|
||||
if (lowRes)
|
||||
{
|
||||
// Low resolution; double up pixels.
|
||||
int address = scanline * 76 + wordOffset * 4;
|
||||
|
||||
if (address > _displayData.Length)
|
||||
{
|
||||
throw new InvalidOperationException("Display word address is out of bounds.");
|
||||
}
|
||||
|
||||
UInt32 stretched = StretchWord(word);
|
||||
|
||||
_displayData[address] = (byte)(stretched >> 24);
|
||||
_displayData[address + 1] = (byte)(stretched >> 16);
|
||||
_displayData[address + 2] = (byte)(stretched >> 8);
|
||||
_displayData[address + 3] = (byte)(stretched);
|
||||
}
|
||||
else
|
||||
{
|
||||
int address = scanline * 76 + wordOffset * 2;
|
||||
|
||||
if (address > _displayData.Length)
|
||||
{
|
||||
throw new InvalidOperationException("Display word address is out of bounds.");
|
||||
}
|
||||
|
||||
_displayData[address] = (byte)(word >> 8);
|
||||
_displayData[address + 1] = (byte)(word);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// "Stretches" a 16 bit word into a 32-bit word (for low-res display purposes).
|
||||
/// </summary>
|
||||
/// <param name="word"></param>
|
||||
/// <returns></returns>
|
||||
private UInt32 StretchWord(ushort word)
|
||||
{
|
||||
UInt32 stretched = 0;
|
||||
|
||||
for(int i=0x8000, j=15;j>=0; i=i>>1, j--)
|
||||
{
|
||||
uint bit = (uint)(word & i) >> j;
|
||||
|
||||
stretched |= (bit << (j * 2 + 1));
|
||||
stretched |= (bit << (j * 2));
|
||||
}
|
||||
|
||||
return stretched;
|
||||
_controller.StepCallback -= OnExecutionStep;
|
||||
_controller.ErrorCallback -= OnExecutionError;
|
||||
}
|
||||
|
||||
private void RefreshUI()
|
||||
@@ -252,16 +185,7 @@ namespace Contralto
|
||||
case ExecutionState.InternalError:
|
||||
ExecutionStateLabel.Text = String.Format("Stopped (error {0})", _lastExceptionText);
|
||||
break;
|
||||
}
|
||||
|
||||
// Update the display
|
||||
BitmapData data = _displayBuffer.LockBits(_displayRect, ImageLockMode.WriteOnly, PixelFormat.Format1bppIndexed);
|
||||
|
||||
IntPtr ptr = data.Scan0;
|
||||
System.Runtime.InteropServices.Marshal.Copy(_displayData, 0, ptr, _displayData.Length);
|
||||
|
||||
_displayBuffer.UnlockBits(data);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshMicrocodeDisassembly()
|
||||
@@ -323,10 +247,6 @@ namespace Contralto
|
||||
_diskData.Rows.Add("KCOM", "0");
|
||||
_diskData.Rows.Add("KSTAT", "0");
|
||||
_diskData.Rows.Add("RECNO", "0");
|
||||
|
||||
_displayBuffer = new Bitmap(608, 808, PixelFormat.Format1bppIndexed);
|
||||
|
||||
DisplayBox.Image = _displayBuffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -721,53 +641,38 @@ namespace Contralto
|
||||
|
||||
private void OnStepButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
|
||||
SetExecutionState(ExecutionState.SingleStep);
|
||||
ExecuteStep();
|
||||
SetExecutionState(ExecutionState.Stopped);
|
||||
_execType = ExecutionType.Step;
|
||||
SetExecutionState(ExecutionState.SingleStep);
|
||||
_controller.StartExecution();
|
||||
}
|
||||
|
||||
private void OnAutoStepButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
//
|
||||
// Continuously step (and update the UI)
|
||||
// until the "Stop" button is pressed or something bad happens.
|
||||
//
|
||||
_execThread = new Thread(new System.Threading.ParameterizedThreadStart(ExecuteProc));
|
||||
_execThread.Start(ExecutionType.Auto);
|
||||
_execType = ExecutionType.Auto;
|
||||
SetExecutionState(ExecutionState.AutoStep);
|
||||
_controller.StartExecution();
|
||||
}
|
||||
|
||||
private void RunButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
//
|
||||
// Continuously execute, but do not update UI
|
||||
// until the "Stop" button is pressed or something bad happens.
|
||||
//
|
||||
//if (_execThread == null)
|
||||
{
|
||||
_execThread = new Thread(new System.Threading.ParameterizedThreadStart(ExecuteProc));
|
||||
_execThread.Start(ExecutionType.Normal);
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
}
|
||||
//
|
||||
_execType = ExecutionType.Normal;
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
_controller.StartExecution();
|
||||
}
|
||||
|
||||
private void RunToNextTaskButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
//
|
||||
// Continuously execute until the next task switch but do not update UI
|
||||
// until the "Stop" button is pressed or something bad happens.
|
||||
//
|
||||
//if (_execThread == null)
|
||||
{
|
||||
_execThread = new Thread(new System.Threading.ParameterizedThreadStart(ExecuteProc));
|
||||
_execThread.Start(ExecutionType.NextTask);
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
}
|
||||
{
|
||||
_execType = ExecutionType.NextTask;
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
_controller.StartExecution();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -780,316 +685,89 @@ namespace Contralto
|
||||
/// <param name="e"></param>
|
||||
private void NovaStep_Click(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
|
||||
{
|
||||
_execThread = new Thread(new System.Threading.ParameterizedThreadStart(ExecuteProc));
|
||||
_execThread.Start(ExecutionType.NextNovaInstruction);
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
}
|
||||
_execType = ExecutionType.NextNovaInstruction;
|
||||
SetExecutionState(ExecutionState.Running);
|
||||
_controller.StartExecution();
|
||||
|
||||
}
|
||||
|
||||
private void OnStopButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
{
|
||||
_controller.StopExecution();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
private void ResetButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
StopExecThread();
|
||||
_system.Reset();
|
||||
_controller.Reset();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void OnExecutionError(Exception e)
|
||||
{
|
||||
_lastExceptionText = e.Message;
|
||||
SetExecutionState(ExecutionState.InternalError);
|
||||
}
|
||||
|
||||
private void ExecuteStep()
|
||||
private bool OnExecutionStep()
|
||||
{
|
||||
StopExecThread();
|
||||
_system.SingleStep();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void StopExecThread()
|
||||
{
|
||||
if (_execThread != null &&
|
||||
_execThread.IsAlive)
|
||||
switch (_execType)
|
||||
{
|
||||
// Signal for the exec thread to end
|
||||
_execAbort = true;
|
||||
|
||||
// Wait for the thread to exit.
|
||||
_execThread.Join();
|
||||
|
||||
_execThread = null;
|
||||
}
|
||||
|
||||
SetExecutionState(ExecutionState.Stopped);
|
||||
}
|
||||
|
||||
private void ExecuteProc(object param)
|
||||
{
|
||||
ExecutionType execType = (ExecutionType)param;
|
||||
|
||||
StepDelegate refUI = new StepDelegate(RefreshUI);
|
||||
StepDelegate inv = new StepDelegate(Invalidate);
|
||||
while (true)
|
||||
{
|
||||
bool internalError = false;
|
||||
|
||||
try
|
||||
{
|
||||
switch (execType)
|
||||
case ExecutionType.Auto:
|
||||
{
|
||||
case ExecutionType.Auto:
|
||||
{
|
||||
// Execute a single step, then update UI and
|
||||
// sleep to give messages time to run.
|
||||
_system.SingleStep();
|
||||
// Execute a single step, then update UI and
|
||||
// sleep to give messages time to run.
|
||||
this.BeginInvoke(new StepDelegate(RefreshUI));
|
||||
this.BeginInvoke(new StepDelegate(Invalidate));
|
||||
System.Threading.Thread.Sleep(10);
|
||||
return true; /* break always */
|
||||
}
|
||||
|
||||
this.BeginInvoke(refUI);
|
||||
this.BeginInvoke(inv);
|
||||
System.Threading.Thread.Sleep(10);
|
||||
}
|
||||
break;
|
||||
|
||||
case ExecutionType.Step:
|
||||
case ExecutionType.Normal:
|
||||
case ExecutionType.NextTask:
|
||||
case ExecutionType.NextNovaInstruction:
|
||||
{
|
||||
// Just execute one step, do not update UI.
|
||||
_system.SingleStep();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
internalError = true;
|
||||
_lastExceptionText = e.Message;
|
||||
}
|
||||
|
||||
if (internalError)
|
||||
{
|
||||
//
|
||||
// Stop here because of an execution error.
|
||||
//
|
||||
this.BeginInvoke(refUI);
|
||||
this.BeginInvoke(inv);
|
||||
|
||||
|
||||
SetExecutionState(ExecutionState.InternalError);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (_execAbort || // The Stop button was hit
|
||||
_microcodeBreakpointEnabled[_system.CPU.CurrentTask.MPC] || // A microcode breakpoint was hit
|
||||
(execType == ExecutionType.NextTask &&
|
||||
_system.CPU.NextTask != null &&
|
||||
_system.CPU.NextTask != _system.CPU.CurrentTask) || // The next task was switched to
|
||||
(_system.CPU.CurrentTask.MPC == 0x10 && // MPC is 20(octal) meaning a new Nova instruction and...
|
||||
(_novaBreakpointEnabled[_system.CPU.R[6]] || // A breakpoint is set here
|
||||
execType == ExecutionType.NextNovaInstruction))) // or we're running only a single Nova instruction.
|
||||
{
|
||||
// Stop here as we've hit a breakpoint or have been stopped
|
||||
// Update UI to indicate where we stopped.
|
||||
this.BeginInvoke(refUI);
|
||||
this.BeginInvoke(inv);
|
||||
|
||||
if (!_execAbort)
|
||||
case ExecutionType.Step:
|
||||
return true; /* break always */
|
||||
|
||||
case ExecutionType.Normal:
|
||||
case ExecutionType.NextTask:
|
||||
case ExecutionType.NextNovaInstruction:
|
||||
// See if we need to stop here
|
||||
if (_execAbort || // The Stop button was hit
|
||||
_microcodeBreakpointEnabled[_system.CPU.CurrentTask.MPC] || // A microcode breakpoint was hit
|
||||
(_execType == ExecutionType.NextTask &&
|
||||
_system.CPU.NextTask != null &&
|
||||
_system.CPU.NextTask != _system.CPU.CurrentTask) || // The next task was switched to
|
||||
(_system.CPU.CurrentTask.MPC == 0x10 && // MPC is 20(octal) meaning a new Nova instruction and...
|
||||
(_novaBreakpointEnabled[_system.CPU.R[6]] || // A breakpoint is set here
|
||||
_execType == ExecutionType.NextNovaInstruction))) // or we're running only a single Nova instruction.
|
||||
{
|
||||
SetExecutionState(ExecutionState.BreakpointStop);
|
||||
// Stop here as we've hit a breakpoint or have been stopped
|
||||
// Update UI to indicate where we stopped.
|
||||
this.BeginInvoke(new StepDelegate(RefreshUI));
|
||||
this.BeginInvoke(new StepDelegate(Invalidate));
|
||||
|
||||
if (!_execAbort)
|
||||
{
|
||||
SetExecutionState(ExecutionState.BreakpointStop);
|
||||
}
|
||||
|
||||
_execAbort = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
_execAbort = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void SetExecutionState(ExecutionState state)
|
||||
{
|
||||
_execState = state;
|
||||
this.BeginInvoke(new StepDelegate(RefreshUI));
|
||||
}
|
||||
|
||||
|
||||
// Hacky initial implementation of keyboard input.
|
||||
private void Debugger_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
//e.Handled = true;
|
||||
//e.SuppressKeyPress = true;
|
||||
if (_keyMap.ContainsKey(e.KeyCode))
|
||||
{
|
||||
_system.Keyboard.KeyDown(_keyMap[e.KeyCode]);
|
||||
}
|
||||
|
||||
if (e.Control)
|
||||
{
|
||||
_system.Keyboard.KeyDown(_keyMap[Keys.ControlKey]);
|
||||
}
|
||||
|
||||
if (e.Shift)
|
||||
{
|
||||
_system.Keyboard.KeyDown(_keyMap[Keys.LShiftKey]);
|
||||
}
|
||||
}
|
||||
|
||||
private void DisplayBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Debugger_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
||||
{
|
||||
/*
|
||||
if (_keyMap.ContainsKey(e.KeyCode))
|
||||
{
|
||||
_system.Keyboard.KeyDown(_keyMap[e.KeyCode]);
|
||||
} */
|
||||
}
|
||||
|
||||
private void Debugger_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (_keyMap.ContainsKey(e.KeyCode))
|
||||
{
|
||||
_system.Keyboard.KeyUp(_keyMap[e.KeyCode]);
|
||||
}
|
||||
|
||||
// e.Handled = true;
|
||||
// e.SuppressKeyPress = true;
|
||||
|
||||
if (e.Control)
|
||||
{
|
||||
_system.Keyboard.KeyUp(_keyMap[Keys.ControlKey]);
|
||||
}
|
||||
|
||||
if (e.Shift)
|
||||
{
|
||||
_system.Keyboard.KeyUp(_keyMap[Keys.LShiftKey]);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisplayMouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
_system.Mouse.MouseMove(e.X, e.Y);
|
||||
}
|
||||
|
||||
private void OnDisplayMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
AltoMouseButton button = AltoMouseButton.None;
|
||||
|
||||
switch(e.Button)
|
||||
{
|
||||
case MouseButtons.Left:
|
||||
button = AltoMouseButton.Left;
|
||||
break;
|
||||
|
||||
case MouseButtons.Right:
|
||||
button = AltoMouseButton.Right;
|
||||
break;
|
||||
|
||||
case MouseButtons.Middle:
|
||||
button = AltoMouseButton.Middle;
|
||||
break;
|
||||
}
|
||||
|
||||
_system.Mouse.MouseDown(button);
|
||||
|
||||
}
|
||||
|
||||
private void OnDisplayMouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
AltoMouseButton button = AltoMouseButton.None;
|
||||
|
||||
switch (e.Button)
|
||||
{
|
||||
case MouseButtons.Left:
|
||||
button = AltoMouseButton.Left;
|
||||
break;
|
||||
|
||||
case MouseButtons.Right:
|
||||
button = AltoMouseButton.Right;
|
||||
break;
|
||||
|
||||
case MouseButtons.Middle:
|
||||
button = AltoMouseButton.Middle;
|
||||
break;
|
||||
}
|
||||
|
||||
_system.Mouse.MouseUp(button);
|
||||
}
|
||||
|
||||
private void InitKeymap()
|
||||
{
|
||||
_keyMap = new Dictionary<Keys, AltoKey>();
|
||||
|
||||
_keyMap.Add(Keys.A, AltoKey.A);
|
||||
_keyMap.Add(Keys.B, AltoKey.B);
|
||||
_keyMap.Add(Keys.C, AltoKey.C);
|
||||
_keyMap.Add(Keys.D, AltoKey.D);
|
||||
_keyMap.Add(Keys.E, AltoKey.E);
|
||||
_keyMap.Add(Keys.F, AltoKey.F);
|
||||
_keyMap.Add(Keys.G, AltoKey.G);
|
||||
_keyMap.Add(Keys.H, AltoKey.H);
|
||||
_keyMap.Add(Keys.I, AltoKey.I);
|
||||
_keyMap.Add(Keys.J, AltoKey.J);
|
||||
_keyMap.Add(Keys.K, AltoKey.K);
|
||||
_keyMap.Add(Keys.L, AltoKey.L);
|
||||
_keyMap.Add(Keys.M, AltoKey.M);
|
||||
_keyMap.Add(Keys.N, AltoKey.N);
|
||||
_keyMap.Add(Keys.O, AltoKey.O);
|
||||
_keyMap.Add(Keys.P, AltoKey.P);
|
||||
_keyMap.Add(Keys.Q, AltoKey.Q);
|
||||
_keyMap.Add(Keys.R, AltoKey.R);
|
||||
_keyMap.Add(Keys.S, AltoKey.S);
|
||||
_keyMap.Add(Keys.T, AltoKey.T);
|
||||
_keyMap.Add(Keys.U, AltoKey.U);
|
||||
_keyMap.Add(Keys.V, AltoKey.V);
|
||||
_keyMap.Add(Keys.W, AltoKey.W);
|
||||
_keyMap.Add(Keys.X, AltoKey.X);
|
||||
_keyMap.Add(Keys.Y, AltoKey.Y);
|
||||
_keyMap.Add(Keys.Z, AltoKey.Z);
|
||||
_keyMap.Add(Keys.D0, AltoKey.D0);
|
||||
_keyMap.Add(Keys.D1, AltoKey.D1);
|
||||
_keyMap.Add(Keys.D2, AltoKey.D2);
|
||||
_keyMap.Add(Keys.D3, AltoKey.D3);
|
||||
_keyMap.Add(Keys.D4, AltoKey.D4);
|
||||
_keyMap.Add(Keys.D5, AltoKey.D5);
|
||||
_keyMap.Add(Keys.D6, AltoKey.D6);
|
||||
_keyMap.Add(Keys.D7, AltoKey.D7);
|
||||
_keyMap.Add(Keys.D8, AltoKey.D8);
|
||||
_keyMap.Add(Keys.D9, AltoKey.D9);
|
||||
_keyMap.Add(Keys.Space, AltoKey.Space);
|
||||
_keyMap.Add(Keys.OemPeriod, AltoKey.Period);
|
||||
_keyMap.Add(Keys.Oemcomma, AltoKey.Comma);
|
||||
_keyMap.Add(Keys.OemQuotes, AltoKey.Quote);
|
||||
_keyMap.Add(Keys.OemBackslash, AltoKey.BSlash);
|
||||
_keyMap.Add(Keys.OemQuestion, AltoKey.FSlash);
|
||||
_keyMap.Add(Keys.Oemplus, AltoKey.Plus);
|
||||
_keyMap.Add(Keys.OemMinus, AltoKey.Minus);
|
||||
_keyMap.Add(Keys.Escape, AltoKey.ESC);
|
||||
_keyMap.Add(Keys.Delete, AltoKey.DEL);
|
||||
_keyMap.Add(Keys.Left, AltoKey.Arrow);
|
||||
_keyMap.Add(Keys.LShiftKey, AltoKey.LShift);
|
||||
_keyMap.Add(Keys.RShiftKey, AltoKey.RShift);
|
||||
_keyMap.Add(Keys.ControlKey, AltoKey.CTRL);
|
||||
_keyMap.Add(Keys.Return, AltoKey.Return);
|
||||
_keyMap.Add(Keys.F1, AltoKey.BlankTop);
|
||||
_keyMap.Add(Keys.F2, AltoKey.BlankMiddle);
|
||||
_keyMap.Add(Keys.F3, AltoKey.BlankBottom);
|
||||
_keyMap.Add(Keys.Back, AltoKey.BS);
|
||||
_keyMap.Add(Keys.Tab, AltoKey.TAB);
|
||||
_keyMap.Add(Keys.OemSemicolon, AltoKey.Semicolon);
|
||||
_keyMap.Add(Keys.OemOpenBrackets, AltoKey.LBracket);
|
||||
_keyMap.Add(Keys.OemCloseBrackets, AltoKey.RBracket);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private enum ExecutionType
|
||||
{
|
||||
None = 0,
|
||||
@@ -1108,21 +786,21 @@ namespace Contralto
|
||||
Running,
|
||||
BreakpointStop,
|
||||
InternalError,
|
||||
}
|
||||
|
||||
private delegate void StepDelegate();
|
||||
}
|
||||
|
||||
private AltoSystem _system;
|
||||
private ExecutionController _controller;
|
||||
|
||||
// Unicode character for the Arrow used by Alto microcode
|
||||
private const char _arrowChar = (char)0x2190;
|
||||
|
||||
// Thread used for execution other than single-step
|
||||
private Thread _execThread;
|
||||
// Execution / error state
|
||||
private bool _execAbort;
|
||||
private ExecutionState _execState;
|
||||
private ExecutionType _execType;
|
||||
private string _lastExceptionText;
|
||||
|
||||
private delegate void StepDelegate();
|
||||
|
||||
// Microcode Debugger breakpoints; one entry per address since we only need
|
||||
// to worry about a 10 bit address space, this is fast and uses little memory.
|
||||
@@ -1131,16 +809,5 @@ namespace Contralto
|
||||
// Nova Debugger breakpoints; same as above
|
||||
private bool[] _novaBreakpointEnabled;
|
||||
|
||||
// Display related data.
|
||||
// At some point this should move elsewhere.
|
||||
// Note: display is actually 606 pixels wide, but that's not an even multiple of 8, so we round up.
|
||||
private byte[] _displayData = new byte[808 * 76];
|
||||
private Bitmap _displayBuffer;
|
||||
private Rectangle _displayRect = new Rectangle(0, 0, 608, 808);
|
||||
|
||||
// Keyboard mapping from windows vkeys to Alto keys
|
||||
private Dictionary<Keys, AltoKey> _keyMap;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,4 +195,70 @@
|
||||
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAIAICAAAAAACACoCAAAJgAAABAQAAAAAAgAaAUAAM4IAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
|
||||
AAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgBYWFgAY2JjAG5tbgB5eHgAhoaGAJGRkQCamZkApKOkAK+u
|
||||
rwC6uboAxcTFAPHv8AD29vYA+fn5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA////AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwA
|
||||
AAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwAAAwAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAADAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAA
|
||||
AAAAAAAAAAEAAAABAAAAAAAAQkJCAFhYWACGhoYAmpmZAJycnACko6QA0M/PAObk5QDx7/AA9vb2AAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAD///8ABwcHBwcHBwcHBwAABwcHBwcHBwcHBwcHBwcAAAcHBwcHBwcHBwcHBwcA
|
||||
AAcHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAABwcHBwcHBwcHBwAH
|
||||
BwAABwcHBwcHBwcHBwcAAAcAAAcHBwcHBwcHBwcHAAAAAAcHBwcHBwcHBwcHBwAAAAAAAAAHBwcHBwcH
|
||||
BwcAAAAAAAAHBwcHBwcHBwcHAAAAAAAHBwcHBwcHBwcHBwAAAAAHBwcHBwcHBwcHBwcAAAAHBwcHBwcH
|
||||
BwcHBwcHAAAHBwcHBwcHBwcHBwcHBwAHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -13,7 +13,7 @@
|
||||
Reset();
|
||||
}
|
||||
|
||||
public void AttachDisplay(Debugger display)
|
||||
public void AttachDisplay(IAltoDisplay display)
|
||||
{
|
||||
_display = display;
|
||||
}
|
||||
|
||||
116
Contralto/ExecutionController.cs
Normal file
116
Contralto/ExecutionController.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contralto
|
||||
{
|
||||
|
||||
public delegate bool StepCallbackDelegate();
|
||||
public delegate void ErrorCallbackDelegate(Exception e);
|
||||
|
||||
|
||||
public class ExecutionController
|
||||
{
|
||||
public ExecutionController(AltoSystem system)
|
||||
{
|
||||
_system = system;
|
||||
|
||||
_execAbort = false;
|
||||
|
||||
}
|
||||
|
||||
public void StartExecution()
|
||||
{
|
||||
StartAltoExecutionThread();
|
||||
}
|
||||
|
||||
public void StopExecution()
|
||||
{
|
||||
_execAbort = true;
|
||||
|
||||
if (_execThread != null)
|
||||
{
|
||||
_execThread.Join();
|
||||
_execThread = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
_system.Reset();
|
||||
}
|
||||
|
||||
public bool IsRunning
|
||||
{
|
||||
get { return (_execThread != null && _execThread.IsAlive); }
|
||||
}
|
||||
|
||||
public StepCallbackDelegate StepCallback
|
||||
{
|
||||
get { return _stepCallback; }
|
||||
set { _stepCallback = value; }
|
||||
}
|
||||
|
||||
public ErrorCallbackDelegate ErrorCallback
|
||||
{
|
||||
get { return _errorCallback; }
|
||||
set { _errorCallback = value; }
|
||||
}
|
||||
|
||||
private void StartAltoExecutionThread()
|
||||
{
|
||||
if (_execThread != null && _execThread.IsAlive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_execAbort = false;
|
||||
|
||||
_execThread = new Thread(new System.Threading.ThreadStart(ExecuteProc));
|
||||
_execThread.Start();
|
||||
}
|
||||
|
||||
private void ExecuteProc()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
// Execute a single microinstruction
|
||||
try
|
||||
{
|
||||
_system.SingleStep();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (_errorCallback != null)
|
||||
{
|
||||
_errorCallback(e);
|
||||
}
|
||||
_execAbort = true;
|
||||
}
|
||||
|
||||
if (_stepCallback != null)
|
||||
{
|
||||
_execAbort = _stepCallback();
|
||||
}
|
||||
|
||||
if (_execAbort)
|
||||
{
|
||||
// Halt execution
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Execution thread and state
|
||||
private Thread _execThread;
|
||||
private bool _execAbort;
|
||||
|
||||
private StepCallbackDelegate _stepCallback;
|
||||
private ErrorCallbackDelegate _errorCallback;
|
||||
|
||||
private AltoSystem _system;
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,8 @@ namespace Contralto.IO
|
||||
{
|
||||
return String.Format("{0} {1}", Data, Type);
|
||||
}
|
||||
|
||||
public static DataCell Empty = new DataCell(0, CellType.Data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -52,6 +54,7 @@ namespace Contralto.IO
|
||||
_cylinder = 0;
|
||||
_head = 0;
|
||||
|
||||
_sectorModified = false;
|
||||
InitSector();
|
||||
LoadSector();
|
||||
}
|
||||
@@ -59,11 +62,13 @@ namespace Contralto.IO
|
||||
public void LoadPack(DiabloPack pack)
|
||||
{
|
||||
_pack = pack;
|
||||
Reset();
|
||||
}
|
||||
|
||||
public void UnloadPack()
|
||||
{
|
||||
_pack = null;
|
||||
Reset();
|
||||
}
|
||||
|
||||
public bool IsLoaded()
|
||||
@@ -136,12 +141,19 @@ namespace Contralto.IO
|
||||
|
||||
public DataCell ReadWord(int index)
|
||||
{
|
||||
return _sectorData[index];
|
||||
if (_pack != null)
|
||||
{
|
||||
return _sectorData[index];
|
||||
}
|
||||
else
|
||||
{
|
||||
return DataCell.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteWord(int index, ushort data)
|
||||
{
|
||||
if (index < _sectorData.Length)
|
||||
if (_pack!= null && index < _sectorData.Length)
|
||||
{
|
||||
if (_sectorData[index].Type == CellType.Data)
|
||||
{
|
||||
@@ -204,9 +216,7 @@ namespace Contralto.IO
|
||||
_sectorData[_dataOffset + 257].Data = checksum;
|
||||
Log.Write(LogType.Verbose, LogComponent.DiskController, "Data checksum for C/H/S {0}/{1}/{2} is {3}", _cylinder, _head, _sector, Conversion.ToOctal(checksum));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Commits modified sector data back to the emulated disk.
|
||||
|
||||
@@ -14,25 +14,9 @@ namespace Contralto.IO
|
||||
// Load the drives
|
||||
_drives = new Diablo30Drive[2];
|
||||
_drives[0] = new Diablo30Drive(_system);
|
||||
_drives[1] = new Diablo30Drive(_system);
|
||||
|
||||
// TODO: this does not belong here.
|
||||
DiabloPack p0 = new DiabloPack(DiabloDiskType.Diablo31);
|
||||
FileStream fs = new FileStream("Disk\\diag.dsk", FileMode.Open, FileAccess.Read);
|
||||
p0.Load(fs, false);
|
||||
fs.Close();
|
||||
|
||||
_drives[0].LoadPack(p0);
|
||||
|
||||
DiabloPack p1 = new DiabloPack(DiabloDiskType.Diablo31);
|
||||
fs = new FileStream("Disk\\bravox.dsk", FileMode.Open, FileAccess.Read);
|
||||
p1.Load(fs, true);
|
||||
fs.Close();
|
||||
|
||||
_drives[1].LoadPack(p1);
|
||||
_drives[1] = new Diablo30Drive(_system);
|
||||
|
||||
Reset();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -212,6 +196,11 @@ namespace Contralto.IO
|
||||
}
|
||||
}
|
||||
|
||||
public Diablo30Drive[] Drives
|
||||
{
|
||||
get { return _drives; }
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
ClearStatus();
|
||||
|
||||
@@ -43,18 +43,16 @@ namespace Contralto.IO
|
||||
// nothing
|
||||
}
|
||||
|
||||
public void MouseMove(int x, int y)
|
||||
public void MouseMove(int dx, int dy)
|
||||
{
|
||||
_lock.EnterWriteLock();
|
||||
_destX = x;
|
||||
_destY = y;
|
||||
|
||||
|
||||
// Calculate number of steps in x and y to be decremented every call to PollMouseBits
|
||||
_xSteps = Math.Abs(_destX - _mouseX);
|
||||
_xDir = Math.Sign(_destX - _mouseX);
|
||||
_xSteps = Math.Abs(dx);
|
||||
_xDir = Math.Sign(dx);
|
||||
|
||||
_ySteps = Math.Abs(_destY - _mouseY);
|
||||
_yDir = Math.Sign(_destY - _mouseY);
|
||||
_ySteps = Math.Abs(dy);
|
||||
_yDir = Math.Sign(dy);
|
||||
|
||||
//Console.WriteLine("Mouse move from ({0},{1}) to ({2},{3}).", _mouseX, _mouseY, _destX, _destY);
|
||||
_lock.ExitWriteLock();
|
||||
@@ -176,10 +174,7 @@ namespace Contralto.IO
|
||||
|
||||
/// <summary>
|
||||
/// Where the mouse is moving to every time PollMouseBits is called.
|
||||
/// </summary>
|
||||
private int _destX;
|
||||
private int _destY;
|
||||
|
||||
/// </summary>
|
||||
private int _xSteps;
|
||||
private int _xDir;
|
||||
private double _ySteps;
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using Contralto.CPU;
|
||||
using System;
|
||||
|
||||
namespace Contralto
|
||||
{
|
||||
class Program
|
||||
{
|
||||
[STAThread]
|
||||
static void Main(string[] args)
|
||||
{
|
||||
AltoSystem system = new AltoSystem();
|
||||
|
||||
Reference in New Issue
Block a user