From 24f946681f170fcba5cf57fdb411d85771b3182e Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Sat, 29 Jan 2022 18:23:09 -0800 Subject: [PATCH] Emu83 (#3086) * emu83 * builds and get rid of wtf this thing is * multidisk bundler for ti83 * release * link src * also put in the commit hash why not * Nitpicks * update ""rom"" extensions for ti83 * don't forget to set a preferred core Co-authored-by: YoshiRulz --- .gitmodules | 3 + Assets/dll/libemu83.dll | Bin 0 -> 362496 bytes Assets/dll/libemu83.so | Bin 0 -> 370752 bytes src/BizHawk.Client.Common/RomLoader.cs | 2 +- src/BizHawk.Client.Common/config/Config.cs | 5 +- .../movie/bk2/Bk2MnemonicLookup.cs | 3 +- src/BizHawk.Client.EmuHawk/MainForm.Events.cs | 6 +- src/BizHawk.Client.EmuHawk/MainForm.cs | 2 + .../config/TI83/TI83PaletteConfig.cs | 8 +- .../MultiDiskBundler.Designer.cs | 3 +- .../tools/TI83/TI83KeyPad.cs | 4 +- .../BizHawk.Emulation.Cores.csproj | 3 +- .../CPUs/Z80A/NewDisassembler.cs | 2 +- .../Calculator/TI83.ISettable.cs | 41 ----- .../Calculators/Emu83/Emu83.IDebuggable.cs | 78 +++++++++ .../Calculators/Emu83/Emu83.IDriveLight.cs | 10 ++ .../Calculators/Emu83/Emu83.IEmulator.cs | 53 ++++++ .../Calculators/Emu83/Emu83.IInputPollable.cs | 12 ++ .../Calculators/Emu83/Emu83.IMemoryDomains.cs | 57 ++++++ .../Calculators/Emu83/Emu83.IStatable.cs | 49 ++++++ .../Calculators/Emu83/Emu83.ITraceable.cs | 39 +++++ .../Calculators/Emu83/Emu83.IVideoProvider.cs | 18 ++ .../Calculators/Emu83/Emu83.cs | 164 ++++++++++++++++++ .../Calculators/Emu83/LibEmu83.cs | 85 +++++++++ .../Calculators/Emu83/TI83Disassembler.cs | 21 +++ .../TI83}/TI83.IDebuggable.cs | 2 +- .../TI83}/TI83.IEmulator.cs | 2 +- .../TI83}/TI83.IInputPollable.cs | 2 +- .../TI83}/TI83.IMemoryDomains.cs | 2 +- .../TI83}/TI83.IStatable.cs | 2 +- .../TI83}/TI83.IVideoProvider.cs | 2 +- .../{Calculator => Calculators/TI83}/TI83.cs | 8 +- .../Calculators/TI83/TI83Common.cs | 31 ++++ .../TI83}/TI83LinkPort.cs | 2 +- src/BizHawk.Emulation.Cores/CoreNames.cs | 1 + submodules/libemu83 | 1 + 36 files changed, 656 insertions(+), 67 deletions(-) create mode 100644 Assets/dll/libemu83.dll create mode 100644 Assets/dll/libemu83.so delete mode 100644 src/BizHawk.Emulation.Cores/Calculator/TI83.ISettable.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDebuggable.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDriveLight.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IInputPollable.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IStatable.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.ITraceable.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IVideoProvider.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/LibEmu83.cs create mode 100644 src/BizHawk.Emulation.Cores/Calculators/Emu83/TI83Disassembler.cs rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IDebuggable.cs (90%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IEmulator.cs (91%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IInputPollable.cs (84%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IMemoryDomains.cs (92%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IStatable.cs (93%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.IVideoProvider.cs (90%) rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83.cs (93%) create mode 100644 src/BizHawk.Emulation.Cores/Calculators/TI83/TI83Common.cs rename src/BizHawk.Emulation.Cores/{Calculator => Calculators/TI83}/TI83LinkPort.cs (94%) create mode 160000 submodules/libemu83 diff --git a/.gitmodules b/.gitmodules index 39e4c1fa9a..082b322f45 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,6 +40,9 @@ [submodule "submodules/libfwunpack"] path = submodules/libfwunpack url = https://github.com/TASEmulators/fwunpack.git +[submodule "submodules/libemu83"] + path = submodules/libemu83 + url = https://github.com/CasualPokePlayer/Emu83.git [submodule "submodules/sameboy/libsameboy"] path = submodules/sameboy/libsameboy url = https://github.com/LIJI32/SameBoy.git diff --git a/Assets/dll/libemu83.dll b/Assets/dll/libemu83.dll new file mode 100644 index 0000000000000000000000000000000000000000..08876c9f2195e89b45b05a2959d10ed4d57a92a4 GIT binary patch literal 362496 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 literal 0 HcmV?d00001 diff --git a/Assets/dll/libemu83.so b/Assets/dll/libemu83.so new file mode 100644 index 0000000000000000000000000000000000000000..17999891f23081e76f2908cec8aade13473b3d6a GIT binary patch literal 370752 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 I*XpGIA8+h4h5!Hn literal 0 HcmV?d00001 diff --git a/src/BizHawk.Client.Common/RomLoader.cs b/src/BizHawk.Client.Common/RomLoader.cs index 032ddfa92d..176ee60719 100644 --- a/src/BizHawk.Client.Common/RomLoader.cs +++ b/src/BizHawk.Client.Common/RomLoader.cs @@ -805,7 +805,7 @@ namespace BizHawk.Client.Common public static readonly IReadOnlyCollection SNES = new[] { "smc", "sfc", "xml" }; - public static readonly IReadOnlyCollection TI83 = new[] { "rom" }; + public static readonly IReadOnlyCollection TI83 = new[] { "83g", "83l", "83p" }; public static readonly IReadOnlyCollection UZE = new[] { "uze" }; diff --git a/src/BizHawk.Client.Common/config/Config.cs b/src/BizHawk.Client.Common/config/Config.cs index 840fddfae3..a57874ede2 100644 --- a/src/BizHawk.Client.Common/config/Config.cs +++ b/src/BizHawk.Client.Common/config/Config.cs @@ -33,7 +33,9 @@ namespace BizHawk.Client.Common (new[] { VSystemID.Raw.GBL }, new[] { CoreNames.GambatteLink, CoreNames.GBHawkLink, CoreNames.GBHawkLink3x, CoreNames.GBHawkLink4x }), (new[] { VSystemID.Raw.PCE, VSystemID.Raw.PCECD, VSystemID.Raw.SGX }, - new[] { CoreNames.TurboNyma, CoreNames.HyperNyma, CoreNames.PceHawk }) + new[] { CoreNames.TurboNyma, CoreNames.HyperNyma, CoreNames.PceHawk }), + (new[] { VSystemID.Raw.TI83 }, + new[] { CoreNames.TI83Hawk, CoreNames.Emu83 }), }; public Config() @@ -322,6 +324,7 @@ namespace BizHawk.Client.Common [VSystemID.Raw.PCE] = CoreNames.TurboNyma, [VSystemID.Raw.PCECD] = CoreNames.TurboNyma, [VSystemID.Raw.SGX] = CoreNames.TurboNyma, + [VSystemID.Raw.TI83] = CoreNames.Emu83, }; public bool DontTryOtherCores { get; set; } diff --git a/src/BizHawk.Client.Common/movie/bk2/Bk2MnemonicLookup.cs b/src/BizHawk.Client.Common/movie/bk2/Bk2MnemonicLookup.cs index 5b564d3fcb..9ca435af63 100644 --- a/src/BizHawk.Client.Common/movie/bk2/Bk2MnemonicLookup.cs +++ b/src/BizHawk.Client.Common/movie/bk2/Bk2MnemonicLookup.cs @@ -282,7 +282,8 @@ namespace BizHawk.Client.Common ["MODE"] = 'O', ["DEL"] = 'D', ["COMMA"] = ',', - ["SIN"] = 'S' + ["SIN"] = 'S', + ["SEND"] = 'N', }, [VSystemID.Raw.C64] = new() { diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index 92ad4f38f6..84e24ed671 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -14,7 +14,7 @@ using BizHawk.Client.EmuHawk.ToolExtensions; using BizHawk.Common; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Atari.A7800Hawk; -using BizHawk.Emulation.Cores.Calculators; +using BizHawk.Emulation.Cores.Calculators.TI83; using BizHawk.Emulation.Cores.ColecoVision; using BizHawk.Emulation.Cores.Computers.AmstradCPC; using BizHawk.Emulation.Cores.Computers.AppleII; @@ -1512,7 +1512,7 @@ namespace BizHawk.Client.EmuHawk private void Ti83PaletteMenuItem_Click(object sender, EventArgs e) { - if (Emulator is TI83 ti83) + if (Emulator is TI83Common ti83) { using var form = new TI83PaletteConfig(this, ti83.GetSettings().Clone()); if (form.ShowDialog().IsOk()) AddOnScreenMessage("Palette settings saved"); @@ -2477,7 +2477,7 @@ namespace BizHawk.Client.EmuHawk private void MainForm_Shown(object sender, EventArgs e) { - if (Emulator is TI83 && Config.Ti83AutoloadKeyPad) + if (Emulator is TI83Common && Config.Ti83AutoloadKeyPad) { Tools.Load(); } diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 46b4be032d..68aca97cda 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -24,6 +24,7 @@ using BizHawk.Bizware.BizwareGL; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.Base_Implementations; using BizHawk.Emulation.Cores; +using BizHawk.Emulation.Cores.Calculators.TI83; using BizHawk.Emulation.Cores.Consoles.NEC.PCE; using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; using BizHawk.Emulation.Cores.Consoles.SNK; @@ -1987,6 +1988,7 @@ namespace BizHawk.Client.EmuHawk break; case VSystemID.Raw.TI83: TI83SubMenu.Visible = true; + LoadTIFileMenuItem.Visible = Emulator is TI83; break; case VSystemID.Raw.ZXSpectrum: zXSpectrumToolStripMenuItem.Visible = true; diff --git a/src/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.cs b/src/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.cs index 57e57703a1..ffa7858257 100644 --- a/src/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.cs @@ -1,18 +1,18 @@ using System; using System.Drawing; using System.Windows.Forms; -using BizHawk.Emulation.Cores.Calculators; +using BizHawk.Emulation.Cores.Calculators.TI83; namespace BizHawk.Client.EmuHawk { public partial class TI83PaletteConfig : Form { private readonly IMainFormForConfig _mainForm; - private readonly TI83.TI83Settings _settings; + private readonly TI83Common.TI83CommonSettings _settings; public TI83PaletteConfig( IMainFormForConfig mainForm, - TI83.TI83Settings settings) + TI83Common.TI83CommonSettings settings) { _mainForm = mainForm; _settings = settings; @@ -88,7 +88,7 @@ namespace BizHawk.Client.EmuHawk private void DefaultsBtn_Click(object sender, EventArgs e) { - var s = new TI83.TI83Settings(); + var s = new TI83Common.TI83CommonSettings(); BackgroundPanel.BackColor = Color.FromArgb((int)s.BGColor); ForeGroundPanel.BackColor = Color.FromArgb((int)s.ForeColor); } diff --git a/src/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs b/src/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs index 1d07c2dea1..d3e0a9c3de 100644 --- a/src/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs +++ b/src/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs @@ -148,7 +148,8 @@ "SAT", "ZXSpectrum", "AmstradCPC", - "GGL"}); + "GGL", + "TI83"}); this.SystemDropDown.Location = new System.Drawing.Point(405, 75); this.SystemDropDown.Name = "SystemDropDown"; this.SystemDropDown.Size = new System.Drawing.Size(89, 21); diff --git a/src/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.cs b/src/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.cs index 58f6c01d28..d6b1a885e5 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.cs @@ -1,7 +1,7 @@ using System; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.Properties; -using BizHawk.Emulation.Cores.Calculators; +using BizHawk.Emulation.Cores.Calculators.TI83; using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk @@ -10,7 +10,7 @@ namespace BizHawk.Client.EmuHawk { [RequiredService] // ReSharper disable once UnusedAutoPropertyAccessor.Local - public TI83 Emu { get; private set; } + public TI83Common Emu { get; private set; } protected override string WindowTitleStatic => "TI-83 Virtual KeyPad"; diff --git a/src/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/src/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 7d2e3ed670..bcd273f1b1 100644 --- a/src/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/src/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -19,7 +19,8 @@ - + + diff --git a/src/BizHawk.Emulation.Cores/CPUs/Z80A/NewDisassembler.cs b/src/BizHawk.Emulation.Cores/CPUs/Z80A/NewDisassembler.cs index 4e8ef9b4de..0c39a2be33 100644 --- a/src/BizHawk.Emulation.Cores/CPUs/Z80A/NewDisassembler.cs +++ b/src/BizHawk.Emulation.Cores/CPUs/Z80A/NewDisassembler.cs @@ -380,7 +380,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0x100 }; - public string Disassemble(ushort addr, Func read, out int size) + public static string Disassemble(ushort addr, Func read, out int size) { ushort start_addr = addr; ushort extra_inc = 0; diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.ISettable.cs b/src/BizHawk.Emulation.Cores/Calculator/TI83.ISettable.cs deleted file mode 100644 index 31389c24dc..0000000000 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.ISettable.cs +++ /dev/null @@ -1,41 +0,0 @@ -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Calculators -{ - public partial class TI83 : ISettable - { - private TI83Settings _settings; - - public TI83Settings GetSettings() - { - return _settings.Clone(); - } - - public PutSettingsDirtyBits PutSettings(TI83Settings o) - { - _settings = o; - return PutSettingsDirtyBits.None; - } - - public object GetSyncSettings() - { - return null; - } - - public PutSettingsDirtyBits PutSyncSettings(object o) - { - return PutSettingsDirtyBits.None; - } - - public class TI83Settings - { - public uint BGColor { get; set; } = 0x889778; - public uint ForeColor { get; set; } = 0x36412D; - - public TI83Settings Clone() - { - return (TI83Settings)MemberwiseClone(); - } - } - } -} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDebuggable.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDebuggable.cs new file mode 100644 index 0000000000..a62c5fc1f8 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDebuggable.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IDebuggable + { + public IDictionary GetCpuFlagsAndRegisters() + { + int[] regs = new int[12]; + LibEmu83.TI83_GetRegs(Context, regs); + return new Dictionary + { + ["AF"] = (ushort)regs[0], + ["BC"] = (ushort)regs[1], + ["DE"] = (ushort)regs[2], + ["HL"] = (ushort)regs[3], + ["AF'"] = (ushort)regs[4], + ["BC'"] = (ushort)regs[5], + ["DE'"] = (ushort)regs[6], + ["HL'"] = (ushort)regs[7], + ["IX"] = (ushort)regs[8], + ["IY"] = (ushort)regs[9], + ["PC"] = (ushort)regs[10], + ["SP"] = (ushort)regs[11], + }; + } + + [FeatureNotImplemented] + public void SetCpuRegister(string register, int value) => throw new NotImplementedException(); + + public bool CanStep(StepType type) => false; + + [FeatureNotImplemented] + public void Step(StepType type) => throw new NotImplementedException(); + + private long _callbackCycleCount = 0; + public long TotalExecutedCycles => Math.Max(LibEmu83.TI83_GetCycleCount(Context), _callbackCycleCount); + + public IMemoryCallbackSystem MemoryCallbacks => _memoryCallbacks; + + private readonly MemoryCallbackSystem _memoryCallbacks = new(new[] { "System Bus" }); + + private LibEmu83.MemoryCallback _readCallback; + private LibEmu83.MemoryCallback _writeCallback; + private LibEmu83.MemoryCallback _execCallback; + + private void InitMemoryCallbacks() + { + LibEmu83.MemoryCallback CreateCallback(MemoryCallbackFlags flags, Func getHasCBOfType) + { + var rawFlags = (uint)flags; + return (address, cycleCount) => + { + _callbackCycleCount = cycleCount; + if (getHasCBOfType()) + { + MemoryCallbacks.CallMemoryCallbacks(address, 0, rawFlags, "System Bus"); + } + }; + } + + _readCallback = CreateCallback(MemoryCallbackFlags.AccessRead, () => MemoryCallbacks.HasReads); + _writeCallback = CreateCallback(MemoryCallbackFlags.AccessWrite, () => MemoryCallbacks.HasWrites); + _execCallback = CreateCallback(MemoryCallbackFlags.AccessExecute, () => MemoryCallbacks.HasExecutes); + + _memoryCallbacks.ActiveChanged += SetMemoryCallbacks; + } + + private void SetMemoryCallbacks() + { + LibEmu83.TI83_SetMemoryCallback(Context, LibEmu83.MemoryCallbackId_t.MEM_CB_READ, MemoryCallbacks.HasReads ? _readCallback : null); + LibEmu83.TI83_SetMemoryCallback(Context, LibEmu83.MemoryCallbackId_t.MEM_CB_WRITE, MemoryCallbacks.HasWrites ? _writeCallback : null); + LibEmu83.TI83_SetMemoryCallback(Context, LibEmu83.MemoryCallbackId_t.MEM_CB_EXECUTE, MemoryCallbacks.HasExecutes ? _execCallback : null); + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDriveLight.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDriveLight.cs new file mode 100644 index 0000000000..5789c458ce --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IDriveLight.cs @@ -0,0 +1,10 @@ +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IDriveLight + { + public bool DriveLightEnabled => true; + public bool DriveLightOn => LibEmu83.TI83_GetLinkActive(Context); + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs new file mode 100644 index 0000000000..6b4c26f0bd --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs @@ -0,0 +1,53 @@ +using System; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IEmulator + { + public IEmulatorServiceProvider ServiceProvider => _serviceProvider; + + public ControllerDefinition ControllerDefinition => TI83Controller; + + public bool FrameAdvance(IController controller, bool render, bool renderSound) + { + _controller = controller; + + LibEmu83.TI83_SetTraceCallback(Context, Tracer.IsEnabled() ? _traceCallback : null); + + IsLagFrame = LibEmu83.TI83_Advance(Context, _controller.IsPressed("ON"), _controller.IsPressed("SEND"), render ? _videoBuffer : null, _settings.BGColor, _settings.ForeColor); + + Frame++; + + if (IsLagFrame) + { + LagCount++; + } + + return true; + } + + public int Frame { get; set; } + + public string SystemId => VSystemID.Raw.TI83; + + public bool DeterministicEmulation => true; + + public void ResetCounters() + { + Frame = 0; + LagCount = 0; + IsLagFrame = false; + } + + public void Dispose() + { + if (Context != IntPtr.Zero) + { + LibEmu83.TI83_DestroyContext(Context); + Context = IntPtr.Zero; + } + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IInputPollable.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IInputPollable.cs new file mode 100644 index 0000000000..af8cc1241e --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IInputPollable.cs @@ -0,0 +1,12 @@ +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IInputPollable + { + private readonly LibEmu83.InputCallback _inputCallback; + public int LagCount { get; set; } + public bool IsLagFrame { get; set; } + public IInputCallbackSystem InputCallbacks { get; } = new InputCallbackSystem(); + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs new file mode 100644 index 0000000000..c4b4aeb217 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IMemoryDomains.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 + { + private readonly List _memoryDomains = new(); + private IMemoryDomains MemoryDomains { get; set; } + + private void CreateMemoryDomain(LibEmu83.MemoryArea_t which, string name) + { + IntPtr data = IntPtr.Zero; + int length = 0; + + if (!LibEmu83.TI83_GetMemoryArea(Context, which, ref data, ref length)) + { + throw new Exception($"{nameof(LibEmu83.TI83_GetMemoryArea)}() failed!"); + } + + _memoryDomains.Add(new MemoryDomainIntPtr(name, MemoryDomain.Endian.Little, data, length, true, 1)); + } + + private void InitMemoryDomains() + { + CreateMemoryDomain(LibEmu83.MemoryArea_t.MEM_ROM, "ROM"); + CreateMemoryDomain(LibEmu83.MemoryArea_t.MEM_RAM, "RAM"); + CreateMemoryDomain(LibEmu83.MemoryArea_t.MEM_VRAM, "VRAM"); + + _memoryDomains.Add(new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little, + delegate(long addr) + { + if (addr < 0 || addr >= 0x10000) + { + throw new ArgumentOutOfRangeException(); + } + + return LibEmu83.TI83_ReadMemory(Context, (ushort)addr); + }, + delegate(long addr, byte val) + { + if (addr < 0 || addr >= 0x10000) + { + throw new ArgumentOutOfRangeException(); + } + + LibEmu83.TI83_WriteMemory(Context, (ushort)addr, val); + }, 1)); + + MemoryDomains = new MemoryDomainList(_memoryDomains); + _serviceProvider.Register(MemoryDomains); + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IStatable.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IStatable.cs new file mode 100644 index 0000000000..e81aae3d87 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IStatable.cs @@ -0,0 +1,49 @@ +using System; +using System.IO; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IStatable + { + private readonly byte[] _stateBuf = new byte[LibEmu83.TI83_GetStateSize()]; + + public void SaveStateBinary(BinaryWriter writer) + { + if (!LibEmu83.TI83_SaveState(Context, _stateBuf)) + { + throw new Exception($"{nameof(LibEmu83.TI83_SaveState)}() returned false"); + } + + writer.Write(_stateBuf.Length); + writer.Write(_stateBuf); + + // other variables + writer.Write(IsLagFrame); + writer.Write(LagCount); + writer.Write(Frame); + } + + public void LoadStateBinary(BinaryReader reader) + { + int length = reader.ReadInt32(); + if (length != _stateBuf.Length) + { + throw new InvalidOperationException("Savestate buffer size mismatch!"); + } + + reader.Read(_stateBuf, 0, _stateBuf.Length); + + if (!LibEmu83.TI83_LoadState(Context, _stateBuf)) + { + throw new Exception($"{nameof(LibEmu83.TI83_LoadState)}() returned false"); + } + + // other variables + IsLagFrame = reader.ReadBoolean(); + LagCount = reader.ReadInt32(); + Frame = reader.ReadInt32(); + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.ITraceable.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.ITraceable.cs new file mode 100644 index 0000000000..fc17a6deb6 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.ITraceable.cs @@ -0,0 +1,39 @@ +using System; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Components.Z80A; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 + { + private ITraceable Tracer { get; } + private readonly LibEmu83.TraceCallback _traceCallback; + + private void MakeTrace(long _cycleCount) + { + int[] regs = new int[12]; + LibEmu83.TI83_GetRegs(Context, regs); + ushort PC = (ushort)regs[10]; + + string disasm = Z80A.Disassemble(PC, addr => LibEmu83.TI83_ReadMemory(Context, addr), out int bytes_read); + string byte_code = null; + + for (ushort i = 0; i < bytes_read; i++) + { + byte_code += $"{LibEmu83.TI83_ReadMemory(Context, (ushort)(PC + i)):X2}"; + if (i < (bytes_read - 1)) + { + byte_code += " "; + } + } + + Tracer.Put(new( + disassembly: + $"{PC:X4}: {byte_code,-12} {disasm,-26}", + registerInfo: + $"AF:{regs[0]:X4} BC:{regs[1]:X4} DE:{regs[2]:X4} HL:{regs[3]:X4} IX:{regs[8]:X4} IY:{regs[9]:X4} SP:{regs[11]:X4} Cy:{_cycleCount}" + )); + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IVideoProvider.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IVideoProvider.cs new file mode 100644 index 0000000000..66e786332a --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IVideoProvider.cs @@ -0,0 +1,18 @@ +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public partial class Emu83 : IVideoProvider + { + public int VirtualWidth => 96; + public int VirtualHeight => 64; + public int BufferWidth => 96; + public int BufferHeight => 64; + public int BackgroundColor => 0; + public int VsyncNumerator => NullVideo.DefaultVsyncNum; + public int VsyncDenominator => NullVideo.DefaultVsyncDen; + + private readonly int[] _videoBuffer = new int[96 * 64]; + public int[] GetVideoBuffer() => _videoBuffer; + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.cs new file mode 100644 index 0000000000..b754cc453a --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.cs @@ -0,0 +1,164 @@ +using System; +using System.Linq; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Calculators.TI83; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + [PortedCore(CoreNames.Emu83, "CasualPokePlayer", "1b8cd90f5b451df3fb07fe3d32d3686a6b93eab4", "https://github.com/CasualPokePlayer/Emu83")] + [ServiceNotApplicable(new[] { typeof(IBoardInfo), typeof(IRegionable), typeof(ISaveRam), typeof(ISoundProvider) })] + public partial class Emu83 : TI83Common + { + private IntPtr Context = IntPtr.Zero; + + private readonly BasicServiceProvider _serviceProvider; + + private readonly TI83Disassembler _disassembler = new(); + + [CoreConstructor(VSystemID.Raw.TI83)] + public Emu83(CoreLoadParameters lp) + { + try + { + _serviceProvider = new BasicServiceProvider(this); + PutSettings(lp.Settings ?? new TI83CommonSettings()); + var rom = lp.Comm.CoreFileProvider.GetFirmwareOrThrow(new("TI83", "Rom")); + Context = LibEmu83.TI83_CreateContext(rom, rom.Length); + if (Context == IntPtr.Zero) + { + throw new Exception("Core returned null! Bad ROM?"); + } + var linkFiles = lp.Roms.Select(r => r.RomData).ToList(); + foreach (var linkFile in linkFiles) + { + if (!LibEmu83.TI83_LoadLinkFile(Context, linkFile, linkFile.Length)) + { + throw new Exception("Core rejected the link files!"); + } + } + LibEmu83.TI83_SetLinkFilesAreLoaded(Context); + _inputCallback = ReadKeyboard; + LibEmu83.TI83_SetInputCallback(Context, _inputCallback); + _serviceProvider.Register(_disassembler); + _traceCallback = MakeTrace; + LibEmu83.TI83_SetTraceCallback(Context, null); + const string TRACE_HEADER = "Z80A: PC, machine code, mnemonic, operands, registers (AF, BC, DE, HL, IX, IY, SP, Cy)"; + Tracer = new TraceBuffer(TRACE_HEADER); + _serviceProvider.Register(Tracer); + InitMemoryDomains(); + InitMemoryCallbacks(); + } + catch + { + Dispose(); + throw; + } + } + + private static readonly ControllerDefinition TI83Controller = new ControllerDefinition("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", + "SEND", + }, + }.MakeImmutable(); + + private IController _controller = NullController.Instance; + + private byte ReadKeyboard(byte _keyboardMask) + { + InputCallbacks.Call(); + + // ref TI-9X + int ret = 0xFF; + ////Console.WriteLine("keyboardMask: {0:X2}",keyboardMask); + if ((_keyboardMask & 1) == 0) + { + if (_controller.IsPressed("DOWN")) ret ^= 1; + if (_controller.IsPressed("LEFT")) ret ^= 2; + if (_controller.IsPressed("RIGHT")) ret ^= 4; + if (_controller.IsPressed("UP")) ret ^= 8; + } + + if ((_keyboardMask & 2) == 0) + { + if (_controller.IsPressed("ENTER")) ret ^= 1; + if (_controller.IsPressed("PLUS")) ret ^= 2; + if (_controller.IsPressed("MINUS")) ret ^= 4; + if (_controller.IsPressed("MULTIPLY")) ret ^= 8; + if (_controller.IsPressed("DIVIDE")) ret ^= 16; + if (_controller.IsPressed("EXP")) ret ^= 32; + if (_controller.IsPressed("CLEAR")) ret ^= 64; + } + + if ((_keyboardMask & 4) == 0) + { + if (_controller.IsPressed("DASH")) ret ^= 1; + if (_controller.IsPressed("3")) ret ^= 2; + if (_controller.IsPressed("6")) ret ^= 4; + if (_controller.IsPressed("9")) ret ^= 8; + if (_controller.IsPressed("PARACLOSE")) ret ^= 16; + if (_controller.IsPressed("TAN")) ret ^= 32; + if (_controller.IsPressed("VARS")) ret ^= 64; + } + + if ((_keyboardMask & 8) == 0) + { + if (_controller.IsPressed("DOT")) ret ^= 1; + if (_controller.IsPressed("2")) ret ^= 2; + if (_controller.IsPressed("5")) ret ^= 4; + if (_controller.IsPressed("8")) ret ^= 8; + if (_controller.IsPressed("PARAOPEN")) ret ^= 16; + if (_controller.IsPressed("COS")) ret ^= 32; + if (_controller.IsPressed("PRGM")) ret ^= 64; + if (_controller.IsPressed("STAT")) ret ^= 128; + } + + if ((_keyboardMask & 16) == 0) + { + if (_controller.IsPressed("0")) ret ^= 1; + if (_controller.IsPressed("1")) ret ^= 2; + if (_controller.IsPressed("4")) ret ^= 4; + if (_controller.IsPressed("7")) ret ^= 8; + if (_controller.IsPressed("COMMA")) ret ^= 16; + if (_controller.IsPressed("SIN")) ret ^= 32; + if (_controller.IsPressed("MATRIX")) ret ^= 64; + if (_controller.IsPressed("X")) ret ^= 128; + } + + if ((_keyboardMask & 32) == 0) + { + if (_controller.IsPressed("STO")) ret ^= 2; + if (_controller.IsPressed("LN")) ret ^= 4; + if (_controller.IsPressed("LOG")) ret ^= 8; + if (_controller.IsPressed("SQUARED")) ret ^= 16; + if (_controller.IsPressed("NEG1")) ret ^= 32; + if (_controller.IsPressed("MATH")) ret ^= 64; + if (_controller.IsPressed("ALPHA")) ret ^= 128; + } + + if ((_keyboardMask & 64) == 0) + { + if (_controller.IsPressed("GRAPH")) ret ^= 1; + if (_controller.IsPressed("TRACE")) ret ^= 2; + if (_controller.IsPressed("ZOOM")) ret ^= 4; + if (_controller.IsPressed("WINDOW")) ret ^= 8; + if (_controller.IsPressed("Y")) ret ^= 16; + if (_controller.IsPressed("2ND")) ret ^= 32; + if (_controller.IsPressed("MODE")) ret ^= 64; + if (_controller.IsPressed("DEL")) ret ^= 128; + } + + return (byte)ret; + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/LibEmu83.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/LibEmu83.cs new file mode 100644 index 0000000000..dc2a66279a --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/LibEmu83.cs @@ -0,0 +1,85 @@ +using System; +using System.Runtime.InteropServices; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public static class LibEmu83 + { + private const string lib = "libemu83"; + private const CallingConvention cc = CallingConvention.Cdecl; + + [DllImport(lib, CallingConvention = cc)] + public static extern IntPtr TI83_CreateContext(byte[] rom, int len); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_DestroyContext(IntPtr context); + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_LoadLinkFile(IntPtr context, byte[] linkfile, int len); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_SetLinkFilesAreLoaded(IntPtr context); + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_GetLinkActive(IntPtr context); + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_Advance(IntPtr context, bool onpress, bool sendnextlinkfile, int[] videobuf, uint bgcol, uint forecol); + + [DllImport(lib, CallingConvention = cc)] + public static extern long TI83_GetStateSize(); + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_SaveState(IntPtr context, byte[] buf); + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_LoadState(IntPtr context, byte[] buf); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_GetRegs(IntPtr context, int[] buf); + + public enum MemoryArea_t : int + { + MEM_ROM, + MEM_RAM, + MEM_VRAM, + } + + [DllImport(lib, CallingConvention = cc)] + public static extern bool TI83_GetMemoryArea(IntPtr context, MemoryArea_t which, ref IntPtr ptr, ref int len); + + [DllImport(lib, CallingConvention = cc)] + public static extern byte TI83_ReadMemory(IntPtr context, ushort addr); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_WriteMemory(IntPtr context, ushort addr, byte val); + + [DllImport(lib, CallingConvention = cc)] + public static extern long TI83_GetCycleCount(IntPtr context); + + public enum MemoryCallbackId_t : int + { + MEM_CB_READ, + MEM_CB_WRITE, + MEM_CB_EXECUTE, + } + + [UnmanagedFunctionPointer(cc)] + public delegate void MemoryCallback(ushort addr, long _cycleCount); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_SetMemoryCallback(IntPtr context, MemoryCallbackId_t id, MemoryCallback callback); + + [UnmanagedFunctionPointer(cc)] + public delegate void TraceCallback(long _cycleCount); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_SetTraceCallback(IntPtr context, TraceCallback callback); + + [UnmanagedFunctionPointer(cc)] + public delegate byte InputCallback(byte _keyboardMask); + + [DllImport(lib, CallingConvention = cc)] + public static extern void TI83_SetInputCallback(IntPtr context, InputCallback callback); + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/TI83Disassembler.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/TI83Disassembler.cs new file mode 100644 index 0000000000..80ea48a2f8 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/TI83Disassembler.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Components.Z80A; + +namespace BizHawk.Emulation.Cores.Calculators.Emu83 +{ + public class TI83Disassembler : VerifiedDisassembler + { + public override IEnumerable AvailableCpus { get; } = new[] { "Z80" }; + + public override string PCRegisterName => "PC"; + + public override string Disassemble(MemoryDomain m, uint addr, out int length) + { + var ret = Z80A.Disassemble((ushort) addr, a => m.PeekByte(a), out var tmp); + length = tmp; + return ret; + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IDebuggable.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IDebuggable.cs similarity index 90% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IDebuggable.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IDebuggable.cs index 0580777493..b55e40fac3 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IDebuggable.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IDebuggable.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 : IDebuggable { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IEmulator.cs similarity index 91% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IEmulator.cs index 95b16665b4..c24ce6fd02 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IEmulator.cs @@ -1,6 +1,6 @@ using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 : IEmulator { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IInputPollable.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IInputPollable.cs similarity index 84% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IInputPollable.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IInputPollable.cs index a31df55395..2694b9a4cd 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IInputPollable.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IInputPollable.cs @@ -1,6 +1,6 @@ using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 : IInputPollable { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs similarity index 92% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IMemoryDomains.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs index a41f923225..d9412b485d 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IMemoryDomains.cs @@ -4,7 +4,7 @@ using System.Linq; using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IStatable.cs similarity index 93% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IStatable.cs index 8f8608a46f..99f5c354e8 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IStatable.cs @@ -2,7 +2,7 @@ using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.IVideoProvider.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IVideoProvider.cs similarity index 90% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.IVideoProvider.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IVideoProvider.cs index 1ea0a88ed6..af1fe83bd6 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.IVideoProvider.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.IVideoProvider.cs @@ -1,6 +1,6 @@ using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public partial class TI83 : IVideoProvider { diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.cs similarity index 93% rename from src/BizHawk.Emulation.Cores/Calculator/TI83.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.cs index 536d35ced0..f06bdfd0c9 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83.cs @@ -4,18 +4,18 @@ using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Components.Z80A; // http://www.ticalc.org/pub/text/calcinfo/ -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { [Core(CoreNames.TI83Hawk, "zeromus")] [ServiceNotApplicable(new[] { typeof(IBoardInfo), typeof(IDriveLight), typeof(IRegionable), typeof(ISaveRam), typeof(ISoundProvider) })] - public partial class TI83 : IEmulator, IVideoProvider, IDebuggable, IInputPollable, ISettable + public partial class TI83 : TI83Common, IEmulator, IVideoProvider, IDebuggable, IInputPollable { [CoreConstructor(VSystemID.Raw.TI83)] - public TI83(CoreLoadParameters lp) + public TI83(CoreLoadParameters lp) { var ser = new BasicServiceProvider(this); ServiceProvider = ser; - PutSettings(lp.Settings ?? new TI83Settings()); + PutSettings(lp.Settings ?? new TI83CommonSettings()); _cpu.FetchMemory = ReadMemory; _cpu.ReadMemory = ReadMemory; diff --git a/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83Common.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83Common.cs new file mode 100644 index 0000000000..886bd1206c --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83Common.cs @@ -0,0 +1,31 @@ +using System; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Calculators.TI83 +{ + public class TI83Common : ISettable + { + protected TI83CommonSettings _settings; + + public TI83CommonSettings GetSettings() => _settings.Clone(); + + public PutSettingsDirtyBits PutSettings(TI83CommonSettings o) + { + _settings = o; + return PutSettingsDirtyBits.None; + } + + public object GetSyncSettings() => null; + + public PutSettingsDirtyBits PutSyncSettings(object o) => PutSettingsDirtyBits.None; + + public class TI83CommonSettings + { + public uint BGColor { get; set; } = 0x889778; + public uint ForeColor { get; set; } = 0x36412D; + + public TI83CommonSettings Clone() => (TI83CommonSettings)MemberwiseClone(); + } + } +} diff --git a/src/BizHawk.Emulation.Cores/Calculator/TI83LinkPort.cs b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83LinkPort.cs similarity index 94% rename from src/BizHawk.Emulation.Cores/Calculator/TI83LinkPort.cs rename to src/BizHawk.Emulation.Cores/Calculators/TI83/TI83LinkPort.cs index d9c1890fa2..e2cabbfeb0 100644 --- a/src/BizHawk.Emulation.Cores/Calculator/TI83LinkPort.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/TI83/TI83LinkPort.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; -namespace BizHawk.Emulation.Cores.Calculators +namespace BizHawk.Emulation.Cores.Calculators.TI83 { public class TI83LinkPort { diff --git a/src/BizHawk.Emulation.Cores/CoreNames.cs b/src/BizHawk.Emulation.Cores/CoreNames.cs index 49cbfa8fbf..c34aeca5de 100644 --- a/src/BizHawk.Emulation.Cores/CoreNames.cs +++ b/src/BizHawk.Emulation.Cores/CoreNames.cs @@ -19,6 +19,7 @@ namespace BizHawk.Emulation.Cores public const string CPCHawk = "CPCHawk"; public const string Cygne = "Cygne/Mednafen"; public const string DobieStation = "DobieStation"; + public const string Emu83 = "Emu83"; public const string Faust = "Faust"; public const string Gambatte = "Gambatte"; public const string GambatteLink = "GambatteLink"; diff --git a/submodules/libemu83 b/submodules/libemu83 new file mode 160000 index 0000000000..1b8cd90f5b --- /dev/null +++ b/submodules/libemu83 @@ -0,0 +1 @@ +Subproject commit 1b8cd90f5b451df3fb07fe3d32d3686a6b93eab4