diff --git a/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/BizHawk.Client.EmuHawk/MainForm.Designer.cs
index 67c1e2d9af..1cea5eed33 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Designer.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Designer.cs
@@ -2292,7 +2292,7 @@
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);
+ this.paletteToolStripMenuItem.Click += new System.EventHandler(this.TI83PaletteMenuItem_Click);
//
// AtariSubMenu
//
diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs
index 896b81d2d1..9f2870e710 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Events.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs
@@ -1528,13 +1528,13 @@ namespace BizHawk.Client.EmuHawk
private void LoadTIFileMenuItem_Click(object sender, EventArgs e)
{
- var OFD = new OpenFileDialog();
+ var ofd = new OpenFileDialog();
- if (OFD.ShowDialog() == DialogResult.OK)
+ if (ofd.ShowDialog() == DialogResult.OK)
{
try
{
- (Global.Emulator as TI83).LinkPort.SendFileToCalc(File.OpenRead(OFD.FileName), true);
+ (Global.Emulator as TI83).LinkPort.SendFileToCalc(File.OpenRead(ofd.FileName), true);
}
catch (IOException ex)
{
@@ -1542,13 +1542,13 @@ namespace BizHawk.Client.EmuHawk
if (MessageBox.Show(Message, "Upload Failed", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{
- (Global.Emulator as TI83).LinkPort.SendFileToCalc(File.OpenRead(OFD.FileName), false);
+ (Global.Emulator as TI83).LinkPort.SendFileToCalc(File.OpenRead(ofd.FileName), false);
}
}
}
}
- private void paletteToolStripMenuItem_Click(object sender, EventArgs e)
+ private void TI83PaletteMenuItem_Click(object sender, EventArgs e)
{
if (new TI83PaletteConfig().ShowDialog() == DialogResult.OK)
{
diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
index 887133165f..d35bc6d325 100644
--- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
+++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
@@ -92,6 +92,9 @@
VersionInfo.cs
+
+ TI83.cs
+
TI83.cs
@@ -108,7 +111,9 @@
TI83.cs
-
+
+ TI83.cs
+
diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs b/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs
new file mode 100644
index 0000000000..b4e281facf
--- /dev/null
+++ b/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs
@@ -0,0 +1,80 @@
+using BizHawk.Emulation.Common;
+
+namespace BizHawk.Emulation.Cores.Calculators
+{
+ public partial class TI83 : IEmulator
+ {
+ public IEmulatorServiceProvider ServiceProvider { get; private set; }
+
+ public ISoundProvider SoundProvider
+ {
+ get { return NullSound.SilenceProvider; }
+ }
+
+ public ISyncSoundProvider SyncSoundProvider
+ {
+ get { return new FakeSyncSound(NullSound.SilenceProvider, 735); }
+ }
+
+ public bool StartAsyncSound()
+ {
+ return true;
+ }
+
+ public void EndAsyncSound() { }
+
+ public ControllerDefinition ControllerDefinition
+ {
+ get { return TI83Controller; }
+ }
+
+ public IController Controller { get; set; }
+
+ public void FrameAdvance(bool render, bool rendersound)
+ {
+ _lagged = true;
+
+ //I eyeballed this speed
+ for (int i = 0; i < 5; i++)
+ {
+ _onPressed = Controller.IsPressed("ON");
+
+ //and this was derived from other emus
+ Cpu.ExecuteCycles(10000);
+ Cpu.Interrupt = true;
+ }
+
+ Frame++;
+
+ if (_lagged)
+ {
+ _lagCount++;
+ }
+
+ _isLag = _lagged;
+ }
+
+ public int Frame
+ {
+ get { return _frame; }
+ set { _frame = value; }
+ }
+
+ public string SystemId { get { return "TI83"; } }
+
+ public bool DeterministicEmulation { get { return true; } }
+
+ public string BoardName { get { return null; } }
+
+ public void ResetCounters()
+ {
+ Frame = 0;
+ _lagCount = 0;
+ _isLag = false;
+ }
+
+ public CoreComm CoreComm { get; private set; }
+
+ public void Dispose() { }
+ }
+}
diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.cs b/BizHawk.Emulation.Cores/Calculator/TI83.cs
index d723662d85..c6686c01ac 100644
--- a/BizHawk.Emulation.Cores/Calculator/TI83.cs
+++ b/BizHawk.Emulation.Cores/Calculator/TI83.cs
@@ -39,15 +39,17 @@ namespace BizHawk.Emulation.Cores.Calculators
Cpu.NMICallback = NMICallback;
Cpu.MemoryCallbacks = MemoryCallbacks;
- this.Rom = rom;
+ Rom = rom;
LinkPort = new TI83LinkPort(this);
- //different calculators (different revisions?) have different initPC. we track this in the game database by rom hash
- //if( *(unsigned long *)(m_pRom + 0x6ce) == 0x04D3163E ) m_Regs.PC.W = 0x6ce; //KNOWN
- //else if( *(unsigned long *)(m_pRom + 0x6f6) == 0x04D3163E ) m_Regs.PC.W = 0x6f6; //UNKNOWN
+ // different calculators (different revisions?) have different initPC. we track this in the game database by rom hash
+ // if( *(unsigned long *)(m_pRom + 0x6ce) == 0x04D3163E ) m_Regs.PC.W = 0x6ce; //KNOWN
+ // else if( *(unsigned long *)(m_pRom + 0x6f6) == 0x04D3163E ) m_Regs.PC.W = 0x6f6; //UNKNOWN
if (game["initPC"])
+ {
startPC = ushort.Parse(game.OptionValue("initPC"), NumberStyles.HexNumber);
+ }
HardReset();
SetupMemoryDomains();
@@ -55,6 +57,8 @@ namespace BizHawk.Emulation.Cores.Calculators
}
// hardware
+ private const ushort RamSizeMask = 0x7FFF;
+
private readonly Z80A Cpu = new Z80A();
private readonly byte[] Rom;
@@ -72,6 +76,12 @@ namespace BizHawk.Emulation.Cores.Calculators
private bool _cursorMoved;
private int _frame;
+ // configuration
+ private ushort startPC;
+
+ // Link Cable
+ public TI83LinkPort LinkPort { get; set; }
+
internal bool LinkActive;
internal int LinkOutput, LinkInput;
@@ -80,34 +90,59 @@ namespace BizHawk.Emulation.Cores.Calculators
get { return (LinkOutput | LinkInput) ^ 3; }
}
- public IEmulatorServiceProvider ServiceProvider { get; private set; }
+ private static readonly ControllerDefinition TI83Controller =
+ new ControllerDefinition
+ {
+ Name = "TI83 Controller",
+ BoolButtons = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","DOT",
+ "ON","ENTER",
+ "DOWN","LEFT","UP","RIGHT",
+ "PLUS","MINUS","MULTIPLY","DIVIDE",
+ "CLEAR", "EXP", "DASH", "PARACLOSE", "TAN", "VARS", "PARAOPEN",
+ "COS", "PRGM", "STAT", "COMMA", "SIN", "MATRIX", "X",
+ "STO", "LN", "LOG", "SQUARED", "NEG1", "MATH", "ALPHA",
+ "GRAPH", "TRACE", "ZOOM", "WINDOW", "Y", "2ND", "MODE", "DEL"
+ }
+ };
- //-------
-
- public byte ReadMemory(ushort addr)
+ private byte ReadMemory(ushort addr)
{
byte ret;
int romPage = _romPageLow3Bits | (_romPageHighBit << 3);
//Console.WriteLine("read memory: {0:X4}", addr);
if (addr < 0x4000)
+ {
ret = Rom[addr]; //ROM zero-page
+ }
else if (addr < 0x8000)
+ {
ret = Rom[romPage * 0x4000 + addr - 0x4000]; //other rom page
- else ret = _ram[addr - 0x8000];
+ }
+ else
+ {
+ ret = _ram[addr - 0x8000];
+ }
return ret;
}
- public void WriteMemory(ushort addr, byte value)
+ private void WriteMemory(ushort addr, byte value)
{
if (addr < 0x4000)
+ {
return; //ROM zero-page
+ }
else if (addr < 0x8000)
+ {
return; //other rom page
- else _ram[addr - 0x8000] = value;
+ }
+ else
+ {
+ _ram[addr - 0x8000] = value;
+ }
}
- public void WriteHardware(ushort addr, byte value)
+ private void WriteHardware(ushort addr, byte value)
{
switch (addr)
{
@@ -146,7 +181,7 @@ namespace BizHawk.Emulation.Cores.Calculators
}
}
- public byte ReadHardware(ushort addr)
+ private byte ReadHardware(ushort addr)
{
switch (addr)
{
@@ -292,7 +327,7 @@ namespace BizHawk.Emulation.Cores.Calculators
ret = (byte)(((_vram[offset] << 8) | _vram[offset + 1]) >> shift);
}
- doDispMove();
+ DoDispMove();
return ret;
}
@@ -326,10 +361,10 @@ namespace BizHawk.Emulation.Cores.Calculators
}
}
- doDispMove();
+ DoDispMove();
}
- private void doDispMove()
+ private void DoDispMove()
{
switch (_displayMove)
{
@@ -390,60 +425,7 @@ namespace BizHawk.Emulation.Cores.Calculators
Cpu.NonMaskableInterrupt = false;
}
- public CoreComm CoreComm { get; private set; }
-
- public ISoundProvider SoundProvider { get { return NullSound.SilenceProvider; } }
- public ISyncSoundProvider SyncSoundProvider { get { return new FakeSyncSound(NullSound.SilenceProvider, 735); } }
- public bool StartAsyncSound() { return true; }
- public void EndAsyncSound() { }
-
- public static readonly ControllerDefinition TI83Controller =
- new ControllerDefinition
- {
- Name = "TI83 Controller",
- BoolButtons = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","DOT",
- "ON","ENTER",
- "DOWN","LEFT","UP","RIGHT",
- "PLUS","MINUS","MULTIPLY","DIVIDE",
- "CLEAR", "EXP", "DASH", "PARACLOSE", "TAN", "VARS", "PARAOPEN",
- "COS", "PRGM", "STAT", "COMMA", "SIN", "MATRIX", "X",
- "STO", "LN", "LOG", "SQUARED", "NEG1", "MATH", "ALPHA",
- "GRAPH", "TRACE", "ZOOM", "WINDOW", "Y", "2ND", "MODE", "DEL"
- }
- };
-
- public ControllerDefinition ControllerDefinition { get { return TI83Controller; } }
-
- public IController Controller { get; set; }
-
- // configuration
- private ushort startPC;
-
- public void FrameAdvance(bool render, bool rendersound)
- {
- _lagged = true;
- //I eyeballed this speed
- for (int i = 0; i < 5; i++)
- {
- _onPressed = Controller.IsPressed("ON");
- //and this was derived from other emus
- Cpu.ExecuteCycles(10000);
- Cpu.Interrupt = true;
- }
-
- Frame++;
- if (_lagged)
- {
- _lagCount++;
- _isLag = true;
- }
- else
- {
- _isLag = false;
- }
- }
-
- public void HardReset()
+ private void HardReset()
{
Cpu.Reset();
_ram = new byte[0x8000];
@@ -464,25 +446,5 @@ namespace BizHawk.Emulation.Cores.Calculators
_displayMove = 0;
_displayX = _displayY = 0;
}
-
- public int Frame { get { return _frame; } set { _frame = value; } }
-
- public void ResetCounters()
- {
- Frame = 0;
- _lagCount = 0;
- _isLag = false;
- }
-
- public bool DeterministicEmulation { get { return true; } }
-
- public string SystemId { get { return "TI83"; } }
- public string BoardName { get { return null; } }
-
- private const ushort RamSizeMask = 0x7FFF;
-
- public void Dispose() { }
-
- public TI83LinkPort LinkPort { get; set; }
}
}
\ No newline at end of file