diff --git a/BizHawk.MultiClient/TI83tools/TI83KeyPad.Designer.cs b/BizHawk.MultiClient/TI83tools/TI83KeyPad.Designer.cs
new file mode 100644
index 0000000000..6cba77d0dd
--- /dev/null
+++ b/BizHawk.MultiClient/TI83tools/TI83KeyPad.Designer.cs
@@ -0,0 +1,117 @@
+namespace BizHawk.MultiClient
+{
+ partial class TI83KeyPad
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TI83KeyPad));
+ this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.keyPadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.saveWindowPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // menuStrip1
+ //
+ this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem1,
+ this.keyPadToolStripMenuItem,
+ this.optionsToolStripMenuItem});
+ this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip1.Name = "menuStrip1";
+ this.menuStrip1.Size = new System.Drawing.Size(428, 24);
+ this.menuStrip1.TabIndex = 0;
+ this.menuStrip1.Text = "menuStrip1";
+ //
+ // toolStripMenuItem1
+ //
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(12, 20);
+ //
+ // keyPadToolStripMenuItem
+ //
+ this.keyPadToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.exitToolStripMenuItem});
+ this.keyPadToolStripMenuItem.Name = "keyPadToolStripMenuItem";
+ this.keyPadToolStripMenuItem.Size = new System.Drawing.Size(58, 20);
+ this.keyPadToolStripMenuItem.Text = "Key Pad";
+ //
+ // exitToolStripMenuItem
+ //
+ this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+ this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.exitToolStripMenuItem.Text = "E&xit";
+ this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+ //
+ // optionsToolStripMenuItem
+ //
+ this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.saveWindowPositionToolStripMenuItem});
+ this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
+ this.optionsToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
+ this.optionsToolStripMenuItem.Text = "&Options";
+ this.optionsToolStripMenuItem.DropDownOpened += new System.EventHandler(this.optionsToolStripMenuItem_DropDownOpened);
+ //
+ // saveWindowPositionToolStripMenuItem
+ //
+ this.saveWindowPositionToolStripMenuItem.Name = "saveWindowPositionToolStripMenuItem";
+ this.saveWindowPositionToolStripMenuItem.Size = new System.Drawing.Size(190, 22);
+ this.saveWindowPositionToolStripMenuItem.Text = "Save Window Position";
+ this.saveWindowPositionToolStripMenuItem.Click += new System.EventHandler(this.saveWindowPositionToolStripMenuItem_Click);
+ //
+ // TI83KeyPad
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(428, 409);
+ this.Controls.Add(this.menuStrip1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MainMenuStrip = this.menuStrip1;
+ this.Name = "TI83KeyPad";
+ this.Text = "TI-83 Virtual KeyPad";
+ this.Load += new System.EventHandler(this.TI83KeyPad_Load);
+ this.menuStrip1.ResumeLayout(false);
+ this.menuStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.MenuStrip menuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem keyPadToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem;
+ }
+}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/TI83tools/TI83KeyPad.cs b/BizHawk.MultiClient/TI83tools/TI83KeyPad.cs
new file mode 100644
index 0000000000..9c6bdd6dd1
--- /dev/null
+++ b/BizHawk.MultiClient/TI83tools/TI83KeyPad.cs
@@ -0,0 +1,61 @@
+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.Emulation.Consoles.Calculator;
+
+namespace BizHawk.MultiClient
+{
+ public partial class TI83KeyPad : Form
+ {
+ //TODO: if wndx/wndy are negative, load window on the right edge of emulator window
+
+ public TI83KeyPad()
+ {
+ InitializeComponent();
+ Closing += (o, e) => SaveConfigSettings();
+ }
+
+ private void TI83KeyPad_Load(object sender, EventArgs e)
+ {
+ if (Global.Config.TI83KeypadSaveWindowPosition && Global.Config.TI83KeyPadWndx >= 0 && Global.Config.TI83KeyPadWndy >= 0)
+ Location = new Point(Global.Config.TI83KeyPadWndx, Global.Config.TI83KeyPadWndy);
+ }
+
+ public void UpdateValues()
+ {
+ }
+
+ public void Restart()
+ {
+ if (!(Global.Emulator is TI83))
+ this.Close();
+ if (!this.IsHandleCreated || this.IsDisposed) return;
+ }
+
+ private void exitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ private void SaveConfigSettings()
+ {
+ Global.Config.TI83KeyPadWndx = this.Location.X;
+ Global.Config.TI83KeyPadWndy = this.Location.Y;
+ }
+
+ private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Global.Config.TI83KeypadSaveWindowPosition ^= true;
+ }
+
+ private void optionsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
+ {
+ saveWindowPositionToolStripMenuItem.Checked = Global.Config.TI83KeypadSaveWindowPosition;
+ }
+ }
+}
diff --git a/BizHawk.MultiClient/TI83tools/TI83KeyPad.resx b/BizHawk.MultiClient/TI83tools/TI83KeyPad.resx
new file mode 100644
index 0000000000..206c74a8a6
--- /dev/null
+++ b/BizHawk.MultiClient/TI83tools/TI83KeyPad.resx
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ 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
+ DwDgAA8A4AAPAPAAHwA=
+
+
+
\ No newline at end of file