TI83 - palette config dialog - don't judge me on how I spend my free time!

This commit is contained in:
adelikat 2014-05-26 14:06:54 +00:00
parent ba5551d29b
commit 9e8de8d8b0
8 changed files with 536 additions and 36 deletions

View File

@ -337,7 +337,7 @@ namespace BizHawk.Client.Common
nextEmulator = new GPGX(nextComm, rom.RomData, null, "GEN", GetCoreSyncSettings<GPGX>());
break;
case "TI83":
nextEmulator = new TI83(nextComm, game, rom.RomData);
nextEmulator = new TI83(nextComm, game, rom.RomData, GetCoreSettings<TI83>());
break;
case "NES":
if (!Global.Config.NES_InQuickNES || forceAccurateCore)

View File

@ -408,6 +408,12 @@
<Compile Include="config\SoundConfig.Designer.cs">
<DependentUpon>SoundConfig.cs</DependentUpon>
</Compile>
<Compile Include="config\TI83\TI83PaletteConfig.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="config\TI83\TI83PaletteConfig.Designer.cs">
<DependentUpon>TI83PaletteConfig.cs</DependentUpon>
</Compile>
<Compile Include="CustomControls\FolderBrowserDialogEx.cs">
<SubType>Component</SubType>
</Compile>
@ -1088,6 +1094,9 @@
<EmbeddedResource Include="config\SNES\SNESOptions.resx">
<DependentUpon>SNESOptions.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="config\TI83\TI83PaletteConfig.resx">
<DependentUpon>TI83PaletteConfig.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="CustomControls\InputConfigBase.resx">
<DependentUpon>InputConfigBase.cs</DependentUpon>
</EmbeddedResource>

View File

@ -232,10 +232,10 @@
this.SMSFix3DGameDisplayToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ShowClippedRegionsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.HighlightActiveDisplayRegionMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator();
this.SMSGraphicsSettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.GGGameGenieMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator();
this.SMSVDPViewerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.GGGameGenieMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TI83SubMenu = new System.Windows.Forms.ToolStripMenuItem();
this.KeypadMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
@ -356,6 +356,7 @@
this.ClearSRAMContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ShowMenuContextMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.ShowMenuContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.paletteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.MainformMenu.SuspendLayout();
this.MainStatusBar.SuspendLayout();
this.MainFormContextMenu.SuspendLayout();
@ -387,7 +388,7 @@
this.MainformMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
this.MainformMenu.Location = new System.Drawing.Point(0, 0);
this.MainformMenu.Name = "MainformMenu";
this.MainformMenu.Size = new System.Drawing.Size(470, 42);
this.MainformMenu.Size = new System.Drawing.Size(470, 61);
this.MainformMenu.TabIndex = 0;
this.MainformMenu.Text = "menuStrip1";
this.MainformMenu.MenuActivate += new System.EventHandler(this.MainformMenu_MenuActivate);
@ -2099,11 +2100,6 @@
this.HighlightActiveDisplayRegionMenuItem.Text = "&Highlight Active Display Region";
this.HighlightActiveDisplayRegionMenuItem.Click += new System.EventHandler(this.HighlightActiveDisplayRegionMenuItem_Click);
//
// toolStripSeparator24
//
this.toolStripSeparator24.Name = "toolStripSeparator24";
this.toolStripSeparator24.Size = new System.Drawing.Size(238, 6);
//
// SMSGraphicsSettingsMenuItem
//
this.SMSGraphicsSettingsMenuItem.Name = "SMSGraphicsSettingsMenuItem";
@ -2111,12 +2107,10 @@
this.SMSGraphicsSettingsMenuItem.Text = "&Graphics Settings...";
this.SMSGraphicsSettingsMenuItem.Click += new System.EventHandler(this.SMSGraphicsSettingsMenuItem_Click);
//
// GGGameGenieMenuItem
// toolStripSeparator24
//
this.GGGameGenieMenuItem.Name = "GGGameGenieMenuItem";
this.GGGameGenieMenuItem.Size = new System.Drawing.Size(241, 22);
this.GGGameGenieMenuItem.Text = "&Game Genie Encoder/Decoder";
this.GGGameGenieMenuItem.Click += new System.EventHandler(this.GGGameGenieMenuItem_Click);
this.toolStripSeparator24.Name = "toolStripSeparator24";
this.toolStripSeparator24.Size = new System.Drawing.Size(238, 6);
//
// SMSVDPViewerToolStripMenuItem
//
@ -2125,13 +2119,21 @@
this.SMSVDPViewerToolStripMenuItem.Text = "&VDP Viewer";
this.SMSVDPViewerToolStripMenuItem.Click += new System.EventHandler(this.SmsVdpViewerMenuItem_Click);
//
// GGGameGenieMenuItem
//
this.GGGameGenieMenuItem.Name = "GGGameGenieMenuItem";
this.GGGameGenieMenuItem.Size = new System.Drawing.Size(241, 22);
this.GGGameGenieMenuItem.Text = "&Game Genie Encoder/Decoder";
this.GGGameGenieMenuItem.Click += new System.EventHandler(this.GGGameGenieMenuItem_Click);
//
// TI83SubMenu
//
this.TI83SubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.KeypadMenuItem,
this.LoadTIFileMenuItem,
this.toolStripSeparator13,
this.AutoloadKeypadMenuItem,
this.LoadTIFileMenuItem});
this.paletteToolStripMenuItem});
this.TI83SubMenu.Name = "TI83SubMenu";
this.TI83SubMenu.Size = new System.Drawing.Size(41, 19);
this.TI83SubMenu.Text = "TI83";
@ -2163,7 +2165,7 @@
//
this.LoadTIFileMenuItem.Name = "LoadTIFileMenuItem";
this.LoadTIFileMenuItem.Size = new System.Drawing.Size(165, 22);
this.LoadTIFileMenuItem.Text = "Load TI File";
this.LoadTIFileMenuItem.Text = "Load TI File...";
this.LoadTIFileMenuItem.Click += new System.EventHandler(this.LoadTIFileMenuItem_Click);
//
// AtariSubMenu
@ -3113,6 +3115,13 @@
this.ShowMenuContextMenuItem.Text = "Show Menu";
this.ShowMenuContextMenuItem.Click += new System.EventHandler(this.ShowMenuContextMenuItem_Click);
//
// paletteToolStripMenuItem
//
this.paletteToolStripMenuItem.Name = "paletteToolStripMenuItem";
this.paletteToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
this.paletteToolStripMenuItem.Text = "Palette...";
this.paletteToolStripMenuItem.Click += new System.EventHandler(this.paletteToolStripMenuItem_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
@ -3480,6 +3489,7 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator22;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator23;
private System.Windows.Forms.ToolStripMenuItem N64CircularAnalogRangeMenuItem;
private System.Windows.Forms.ToolStripMenuItem paletteToolStripMenuItem;
}
}

View File

@ -1414,6 +1414,18 @@ namespace BizHawk.Client.EmuHawk
}
}
private void paletteToolStripMenuItem_Click(object sender, EventArgs e)
{
if (new TI83PaletteConfig().ShowDialog() == DialogResult.OK)
{
GlobalWin.OSD.AddMessage("Palette settings saved");
}
else
{
GlobalWin.OSD.AddMessage("Palette config aborted");
}
}
#endregion
#region Atari

View File

@ -0,0 +1,145 @@
namespace BizHawk.Client.EmuHawk
{
partial class TI83PaletteConfig
{
/// <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(TI83PaletteConfig));
this.CancelBtn = new System.Windows.Forms.Button();
this.OkBtn = new System.Windows.Forms.Button();
this.BackgroundPanel = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.ForeGroundPanel = new System.Windows.Forms.Panel();
this.DefaultsBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// CancelBtn
//
this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Location = new System.Drawing.Point(165, 112);
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.Size = new System.Drawing.Size(60, 23);
this.CancelBtn.TabIndex = 0;
this.CancelBtn.Text = "&Cancel";
this.CancelBtn.UseVisualStyleBackColor = true;
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
//
// OkBtn
//
this.OkBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OkBtn.Location = new System.Drawing.Point(99, 112);
this.OkBtn.Name = "OkBtn";
this.OkBtn.Size = new System.Drawing.Size(60, 23);
this.OkBtn.TabIndex = 1;
this.OkBtn.Text = "&Ok";
this.OkBtn.UseVisualStyleBackColor = true;
this.OkBtn.Click += new System.EventHandler(this.OkBtn_Click);
//
// BackgroundPanel
//
this.BackgroundPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.BackgroundPanel.Location = new System.Drawing.Point(12, 12);
this.BackgroundPanel.Name = "BackgroundPanel";
this.BackgroundPanel.Size = new System.Drawing.Size(40, 32);
this.BackgroundPanel.TabIndex = 2;
this.BackgroundPanel.Click += new System.EventHandler(this.BackgroundPanel_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(58, 22);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(65, 13);
this.label1.TabIndex = 13;
this.label1.Text = "Background";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(58, 60);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(61, 13);
this.label2.TabIndex = 15;
this.label2.Text = "Foreground";
//
// ForeGroundPanel
//
this.ForeGroundPanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.ForeGroundPanel.Location = new System.Drawing.Point(12, 50);
this.ForeGroundPanel.Name = "ForeGroundPanel";
this.ForeGroundPanel.Size = new System.Drawing.Size(40, 32);
this.ForeGroundPanel.TabIndex = 14;
this.ForeGroundPanel.Click += new System.EventHandler(this.ForeGroundPanel_Click);
//
// DefaultsBtn
//
this.DefaultsBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.DefaultsBtn.Location = new System.Drawing.Point(165, 12);
this.DefaultsBtn.Name = "DefaultsBtn";
this.DefaultsBtn.Size = new System.Drawing.Size(60, 23);
this.DefaultsBtn.TabIndex = 16;
this.DefaultsBtn.Text = "&Defaults";
this.DefaultsBtn.UseVisualStyleBackColor = true;
this.DefaultsBtn.Click += new System.EventHandler(this.DefaultsBtn_Click);
//
// TI83PaletteConfig
//
this.AcceptButton = this.OkBtn;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.ClientSize = new System.Drawing.Size(237, 147);
this.Controls.Add(this.DefaultsBtn);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.ForeGroundPanel);
this.Controls.Add(this.BackgroundPanel);
this.Controls.Add(this.OkBtn);
this.Controls.Add(this.CancelBtn);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "TI83PaletteConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Palette Config";
this.Load += new System.EventHandler(this.TI83PaletteConfig_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button CancelBtn;
private System.Windows.Forms.Button OkBtn;
private System.Windows.Forms.Panel BackgroundPanel;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Panel ForeGroundPanel;
private System.Windows.Forms.Button DefaultsBtn;
}
}

View File

@ -0,0 +1,96 @@
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;
using BizHawk.Client.Common;
using BizHawk.Emulation.Cores.Calculators;
namespace BizHawk.Client.EmuHawk
{
public partial class TI83PaletteConfig : Form
{
public TI83PaletteConfig()
{
InitializeComponent();
}
private void TI83PaletteConfig_Load(object sender, EventArgs e)
{
var s = (TI83.TI83Settings)Global.Emulator.GetSettings();
BackgroundPanel.BackColor = Color.FromArgb((int)s.BGColor);
ForeGroundPanel.BackColor = Color.FromArgb((int)s.ForeColor);
}
private void OkBtn_Click(object sender, EventArgs e)
{
var s = (TI83.TI83Settings)Global.Emulator.GetSettings();
s.BGColor = (uint)BackgroundPanel.BackColor.ToArgb();
s.ForeColor = (uint)ForeGroundPanel.BackColor.ToArgb();
Global.Emulator.PutSettings(s);
DialogResult = DialogResult.OK;
Close();
}
private void CancelBtn_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
private void BackgroundPanel_Click(object sender, EventArgs e)
{
// custom colors are ints, not Color structs?
// and they don't work right unless the alpha bits are set to 0
// and the rgb order is switched
int customColor = BackgroundPanel.BackColor.R | BackgroundPanel.BackColor.G << 8 | BackgroundPanel.BackColor.B << 16;
var dlg = new ColorDialog
{
AllowFullOpen = true,
AnyColor = true,
Color = BackgroundPanel.BackColor,
CustomColors = new int[] { customColor }
};
if (dlg.ShowDialog() == DialogResult.OK)
{
BackgroundPanel.BackColor = dlg.Color;
}
}
private void ForeGroundPanel_Click(object sender, EventArgs e)
{
// custom colors are ints, not Color structs?
// and they don't work right unless the alpha bits are set to 0
// and the rgb order is switched
int customColor = ForeGroundPanel.BackColor.R | ForeGroundPanel.BackColor.G << 8 | ForeGroundPanel.BackColor.B << 16;
var dlg = new ColorDialog
{
AllowFullOpen = true,
AnyColor = true,
Color = ForeGroundPanel.BackColor,
CustomColors = new int[] { customColor }
};
if (dlg.ShowDialog() == DialogResult.OK)
{
ForeGroundPanel.BackColor = dlg.Color;
}
}
private void DefaultsBtn_Click(object sender, EventArgs e)
{
var s = TI83.TI83Settings.GetDefaults();
BackgroundPanel.BackColor = Color.FromArgb((int)s.BGColor);
ForeGroundPanel.BackColor = Color.FromArgb((int)s.ForeColor);
}
}
}

View File

@ -0,0 +1,196 @@
<?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>
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
DwDgAA8A4AAPAPAAHwA=
</value>
</data>
</root>

View File

@ -345,8 +345,10 @@ namespace BizHawk.Emulation.Cores.Calculators
}
}
public TI83(CoreComm comm, GameInfo game, byte[] rom)
public TI83(CoreComm comm, GameInfo game, byte[] rom, object Settings)
{
PutSettings(Settings ?? TI83Settings.GetDefaults());
CoreComm = comm;
cpu.ReadMemory = ReadMemory;
cpu.WriteMemory = WriteMemory;
@ -406,13 +408,18 @@ namespace BizHawk.Emulation.Cores.Calculators
int bufbit = offset & 7;
int bit = ((emu.vram[bufbyte] >> (7 - bufbit)) & 1);
if (bit == 0)
unchecked { pixels[i++] = (int)0xFFFFFFFF; }
{
unchecked { pixels[i++] = (int)emu.Settings.BGColor; }
}
else
pixels[i++] = 0;
{
pixels[i++] = (int)emu.Settings.ForeColor;
}
}
return pixels;
}
public int VirtualWidth { get { return 96; } }
public int VirtualHeight { get { return 64; } }
public int BufferWidth { get { return 96; } }
@ -604,11 +611,10 @@ namespace BizHawk.Emulation.Cores.Calculators
public class Link
{
//Emulates TI linking software.
//See http://www.ticalc.org/archives/files/fileinfo/294/29418.html for documentation
//Note: Each hardware read/write to the link port calls tthe update method.
// Emulates TI linking software.
// See http://www.ticalc.org/archives/files/fileinfo/294/29418.html for documentation
// Note: Each hardware read/write to the link port calls tthe update method.
readonly TI83 Parent;
private FileStream CurrentFile;
@ -861,7 +867,7 @@ namespace BizHawk.Emulation.Cores.Calculators
Parent.LinkActive = false;
CurrentData.Clear();
//Prepare to receive the Aknowledgement response from the calculator.
// Prepare to receive the Aknowledgement response from the calculator.
BytesToSend = 8;
CurrentStatus = Status.PrepareSend;
NextStep = SendVariableData;
@ -869,7 +875,7 @@ namespace BizHawk.Emulation.Cores.Calculators
private void SendVariableData()
{
//Check to see if out of memory first.
// Check to see if out of memory first.
CurrentData.Dequeue();
CurrentData.Dequeue();
CurrentData.Dequeue();
@ -913,7 +919,7 @@ namespace BizHawk.Emulation.Cores.Calculators
Parent.LinkActive = false;
CurrentData.Clear();
//Prepare to receive the Aknowledgement response from the calculator.
// Prepare to receive the Aknowledgement response from the calculator.
BytesToSend = 4;
CurrentStatus = Status.PrepareSend;
NextStep = EndTransmission;
@ -923,14 +929,14 @@ namespace BizHawk.Emulation.Cores.Calculators
{
CurrentData.Clear();
//Send the end transmission command.
// Send the end transmission command.
CurrentData.Enqueue(0x03);
CurrentData.Enqueue(0x92);
CurrentData.Enqueue(0x00);
CurrentData.Enqueue(0x00);
CurrentStatus = Status.PrepareReceive;
NextStep = FinalizeFile;
NextStep = FinalizeFile;
Parent.LinkActive = true;
}
@ -940,7 +946,7 @@ namespace BizHawk.Emulation.Cores.Calculators
Parent.LinkActive = false;
CurrentData.Clear();
//Prepare to receive the Aknowledgement response from the calculator.
// Prepare to receive the Aknowledgement response from the calculator.
BytesToSend = 3;
CurrentStatus = Status.PrepareSend;
NextStep = EndOutOfMemory;
@ -950,22 +956,20 @@ namespace BizHawk.Emulation.Cores.Calculators
{
CurrentData.Clear();
//Send the end transmission command.
// Send the end transmission command.
CurrentData.Enqueue(0x03);
CurrentData.Enqueue(0x56);
CurrentData.Enqueue(0x01);
CurrentData.Enqueue(0x00);
CurrentStatus = Status.PrepareReceive;
NextStep = FinalizeFile;
NextStep = FinalizeFile;
Parent.LinkActive = true;
}
//adelikat: This isn't used (yet?) and causes a warning. Did you really mean to override finalize? if so it should be protected virtual, else rename this
//Envian: I didn't notice there was a naming conflict. Fixed it since this method is necessary for the file upload proccess.
private void FinalizeFile()
{
//Resets the link software, and checks to see if there is an additional file to send.
// Resets the link software, and checks to see if there is an additional file to send.
CurrentData.Clear();
Parent.LinkActive = false;
NextStep = null;
@ -973,9 +977,37 @@ namespace BizHawk.Emulation.Cores.Calculators
}
}
public object GetSettings() { return null; }
public class TI83Settings
{
public uint BGColor = 0xFFFFFFFF;
public uint ForeColor = 0;
public static TI83Settings GetDefaults()
{
return new TI83Settings
{
BGColor = 0xFFFFFFFF,
ForeColor = 0
};
}
public TI83Settings Clone()
{
return (TI83Settings)MemberwiseClone();
}
}
TI83Settings Settings;
public object GetSettings() { return Settings.Clone(); }
public bool PutSettings(object o)
{
Settings = (TI83Settings)o;
return false;
}
public object GetSyncSettings() { return null; }
public bool PutSettings(object o) { return false; }
public bool PutSyncSettings(object o) { return false; }
public Dictionary<string, int> GetCpuFlagsAndRegisters()