From a8f293eec8ae4e9a5008912fed57bd3586e90e91 Mon Sep 17 00:00:00 2001 From: Brian Armstrong Date: Thu, 24 Jan 2019 03:11:25 -0800 Subject: [PATCH 001/138] Call mem callbacks with addr, value --- .../Classes/Api/MemEventsApi.cs | 8 +++--- .../Interfaces/Api/IMemEvents.cs | 24 ++++++++--------- .../lua/EmuLuaLibrary.Events.cs | 6 ++--- BizHawk.Client.Common/lua/LuaFunctionList.cs | 4 +-- BizHawk.Client.Common/lua/NamedLuaFunction.cs | 7 +++++ .../tools/Debugger/Breakpoint.cs | 10 +++---- .../tools/Debugger/BreakpointControl.cs | 6 ++--- .../CallbackBasedTraceBuffer.cs | 6 ++--- .../MemoryCallbackSystem.cs | 26 +++++++++---------- .../Interfaces/IMemoryCallbackSystem.cs | 12 ++++----- .../CPUs/CP1610/CP1610.Execute.cs | 2 +- BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs | 4 +-- .../CPUs/HuC6280/Execute.cs | 2 +- .../CPUs/HuC6280/HuC6280.cs | 4 +-- .../Computers/AppleII/AppleII.cs | 6 ++--- .../Consoles/Atari/2600/Atari2600.Core.cs | 6 ++--- .../Consoles/Atari/A7800Hawk/A7800Hawk.cs | 2 +- .../Consoles/Atari/A7800Hawk/MemoryMap.cs | 4 +-- .../Consoles/Nintendo/GBA/VBANext.cs | 6 ++--- .../Consoles/Nintendo/GBHawk/GBHawk.cs | 2 +- .../Consoles/Nintendo/GBHawk/MemoryMap.cs | 4 +-- .../Nintendo/GBHawkLink/GBHawkLink.cs | 2 +- .../Nintendo/Gameboy/Gambatte.IDebuggable.cs | 6 ++--- .../N64/NativeApi/mupen64plusCoreApi.cs | 6 ++--- .../Consoles/Nintendo/NES/NES.Core.cs | 6 ++--- .../Consoles/Nintendo/SNES/LibsnesCore.cs | 12 ++++----- .../Nintendo/SubNESHawk/SubNESHawk.cs | 2 +- .../Consoles/Sega/SMS/SMS.cs | 6 ++--- .../Consoles/Sega/gpgx64/GPGX.IDebuggable.cs | 6 ++--- .../Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- .../Consoles/Sony/PSX/Octoshock.cs | 6 ++--- .../Consoles/WonderSwan/WonderSwan.cs | 6 ++--- 32 files changed, 109 insertions(+), 102 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs index 5848df5fc3..8db4c5223f 100644 --- a/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs @@ -13,28 +13,28 @@ namespace BizHawk.Client.ApiHawk public MemEventsApi () : base() { } - public void AddReadCallback(Action cb, uint address, string domain) + public void AddReadCallback(Action cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable()) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Plugin Hook", cb, address, null)); } } - public void AddWriteCallback(Action cb, uint address, string domain) + public void AddWriteCallback(Action cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable()) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Plugin Hook", cb, address, null)); } } - public void AddExecCallback(Action cb, uint address, string domain) + public void AddExecCallback(Action cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Plugin Hook", cb, address, null)); } } - public void RemoveMemoryCallback(Action cb) + public void RemoveMemoryCallback(Action cb) { if (DebuggableCore.MemoryCallbacksAvailable()) { diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs index b8650a9139..2b497ea11c 100644 --- a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs @@ -1,12 +1,12 @@ -using System; - -namespace BizHawk.Client.ApiHawk -{ - public interface IMemEvents : IExternalApi - { - void AddReadCallback(Action cb, uint address, string domain); - void AddWriteCallback(Action cb, uint address, string domain); - void AddExecCallback(Action cb, uint address, string domain); - void RemoveMemoryCallback(Action cb); - } -} +using System; + +namespace BizHawk.Client.ApiHawk +{ + public interface IMemEvents : IExternalApi + { + void AddReadCallback(Action cb, uint? address, string domain); + void AddWriteCallback(Action cb, uint? address, string domain); + void AddExecCallback(Action cb, uint? address, string domain); + void RemoveMemoryCallback(Action cb); + } +} diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs index f8d94f10e8..594ae78d2e 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs @@ -243,7 +243,7 @@ namespace BizHawk.Client.Common } DebuggableCore.MemoryCallbacks.Add( - new MemoryCallback(domain, MemoryCallbackType.Execute, "Lua Hook", nlf.Callback, address, null)); + new MemoryCallback(domain, MemoryCallbackType.Execute, "Lua Hook", nlf.MemCallback, address, null)); return nlf.Guid.ToString(); } } @@ -282,7 +282,7 @@ namespace BizHawk.Client.Common } DebuggableCore.MemoryCallbacks.Add( - new MemoryCallback(domain, MemoryCallbackType.Read, "Lua Hook", nlf.Callback, address, null)); + new MemoryCallback(domain, MemoryCallbackType.Read, "Lua Hook", nlf.MemCallback, address, null)); return nlf.Guid.ToString(); } } @@ -321,7 +321,7 @@ namespace BizHawk.Client.Common } DebuggableCore.MemoryCallbacks.Add( - new MemoryCallback(domain, MemoryCallbackType.Write, "Lua Hook", nlf.Callback, address, null)); + new MemoryCallback(domain, MemoryCallbackType.Write, "Lua Hook", nlf.MemCallback, address, null)); return nlf.Guid.ToString(); } } diff --git a/BizHawk.Client.Common/lua/LuaFunctionList.cs b/BizHawk.Client.Common/lua/LuaFunctionList.cs index 45ec368722..87d36e9d3b 100644 --- a/BizHawk.Client.Common/lua/LuaFunctionList.cs +++ b/BizHawk.Client.Common/lua/LuaFunctionList.cs @@ -24,7 +24,7 @@ namespace BizHawk.Client.Common if (Global.Emulator.MemoryCallbacksAvailable()) { - Global.Emulator.AsDebuggable().MemoryCallbacks.Remove(function.Callback); + Global.Emulator.AsDebuggable().MemoryCallbacks.Remove(function.MemCallback); } return base.Remove(function); @@ -40,7 +40,7 @@ namespace BizHawk.Client.Common if (Global.Emulator.MemoryCallbacksAvailable()) { var memoryCallbacks = Global.Emulator.AsDebuggable().MemoryCallbacks; - memoryCallbacks.RemoveAll(this.Select(w => w.Callback)); + memoryCallbacks.RemoveAll(this.Select(w => w.MemCallback)); } Clear(); diff --git a/BizHawk.Client.Common/lua/NamedLuaFunction.cs b/BizHawk.Client.Common/lua/NamedLuaFunction.cs index d10d2eb0b3..2bdb677ed9 100644 --- a/BizHawk.Client.Common/lua/NamedLuaFunction.cs +++ b/BizHawk.Client.Common/lua/NamedLuaFunction.cs @@ -30,6 +30,11 @@ namespace BizHawk.Client.Common ex.Message); } }; + + MemCallback = delegate + { + Callback(); + }; } public Guid Guid { get; private set; } @@ -42,6 +47,8 @@ namespace BizHawk.Client.Common public Action Callback { get; } + public Action MemCallback { get; } + public void Call(string name = null) { LuaSandbox.Sandbox(Lua, () => diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs b/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs index 3f4aca4106..3d9ea3b08b 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs @@ -7,7 +7,7 @@ namespace BizHawk.Client.EmuHawk { public class BreakpointList : List { - public Action Callback { get; set; } + public Action Callback { get; set; } public void Add(IDebuggable core, string scope, uint address, uint mask, MemoryCallbackType type) { @@ -69,7 +69,7 @@ namespace BizHawk.Client.EmuHawk private bool _active; private readonly IDebuggable _core; - public Breakpoint(bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -83,7 +83,7 @@ namespace BizHawk.Client.EmuHawk ReadOnly = readOnly; } - public Breakpoint(IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -96,7 +96,7 @@ namespace BizHawk.Client.EmuHawk Active = enabled; } - public Breakpoint(string name, bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(string name, bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -111,7 +111,7 @@ namespace BizHawk.Client.EmuHawk } public string Scope { get; } - public Action Callback { get; } + public Action Callback { get; } public uint? Address { get; set; } public uint? AddressMask { get; set; } public MemoryCallbackType Type { get; set; } diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs index 17428ebc77..2224cb3e56 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs @@ -60,16 +60,16 @@ namespace BizHawk.Client.EmuHawk : Color.White; } - private void BreakpointCallback() + private void BreakpointCallback(uint addr, uint value) { GlobalWin.MainForm.PauseEmulator(); UpdateValues(); GlobalWin.OSD.AddMessage("Breakpoint hit"); } - private void SeekCallback() + private void SeekCallback(uint addr, uint value) { - BreakpointCallback(); + BreakpointCallback(addr, value); var seekBreakpoint = _breakpoints.FirstOrDefault(x => x.Name.StartsWith(SeekName)); diff --git a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs index 4a93abc213..b37479fd36 100644 --- a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs +++ b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs @@ -46,7 +46,7 @@ namespace BizHawk.Emulation.Common protected readonly List Buffer = new List(); - protected abstract void TraceFromCallback(); + protected abstract void TraceFromCallback(uint addr, uint value); private ITraceSink _sink; @@ -80,7 +80,7 @@ namespace BizHawk.Emulation.Common public class TracingMemoryCallback : IMemoryCallback { - public TracingMemoryCallback(Action callback) + public TracingMemoryCallback(Action callback) { Callback = callback; } @@ -89,7 +89,7 @@ namespace BizHawk.Emulation.Common public string Name => "Trace Logging"; - public Action Callback { get; } + public Action Callback { get; } public uint? Address => null; diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs index 0df3232a4a..24edf2dde6 100644 --- a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs @@ -67,38 +67,38 @@ namespace BizHawk.Emulation.Common } } - private static void Call(ObservableCollection cbs, uint addr, string scope) + private static void Call(ObservableCollection cbs, uint addr, uint value, string scope) { for (int i = 0; i < cbs.Count; i++) { if (!cbs[i].Address.HasValue || (cbs[i].Scope == scope && cbs[i].Address == (addr & cbs[i].AddressMask))) { - cbs[i].Callback(); + cbs[i].Callback(addr, 0); } } } - public void CallReads(uint addr, string scope) + public void CallReads(uint addr, uint value, string scope) { if (_hasReads) { - Call(_reads, addr, scope); + Call(_reads, addr, value, scope); } } - public void CallWrites(uint addr, string scope) + public void CallWrites(uint addr, uint value, string scope) { if (_hasWrites) { - Call(_writes, addr, scope); + Call(_writes, addr, value, scope); } } - public void CallExecutes(uint addr, string scope) + public void CallExecutes(uint addr, uint value, string scope) { if (_hasExecutes) { - Call(_execs, addr, scope); + Call(_execs, addr, value, scope); } } @@ -136,7 +136,7 @@ namespace BizHawk.Emulation.Common return (_hasReads != hadReads || _hasWrites != hadWrites || _hasExecutes != hadExecutes); } - private int RemoveInternal(Action action) + private int RemoveInternal(Action action) { var readsToRemove = _reads.Where(imc => imc.Callback == action).ToList(); var writesToRemove = _writes.Where(imc => imc.Callback == action).ToList(); @@ -160,7 +160,7 @@ namespace BizHawk.Emulation.Common return readsToRemove.Count + writesToRemove.Count + execsToRemove.Count; } - public void Remove(Action action) + public void Remove(Action action) { if (RemoveInternal(action) > 0) { @@ -171,7 +171,7 @@ namespace BizHawk.Emulation.Common } } - public void RemoveAll(IEnumerable actions) + public void RemoveAll(IEnumerable> actions) { bool changed = false; foreach (var action in actions) @@ -286,7 +286,7 @@ namespace BizHawk.Emulation.Common public class MemoryCallback : IMemoryCallback { - public MemoryCallback(string scope, MemoryCallbackType type, string name, Action callback, uint? address, uint? mask) + public MemoryCallback(string scope, MemoryCallbackType type, string name, Action callback, uint? address, uint? mask) { if (type == MemoryCallbackType.Execute && !address.HasValue) { @@ -303,7 +303,7 @@ namespace BizHawk.Emulation.Common public MemoryCallbackType Type { get; } public string Name { get; } - public Action Callback { get; } + public Action Callback { get; } public uint? Address { get; } public uint? AddressMask { get; } public string Scope { get; } diff --git a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs index f87a8e492d..24cee31137 100644 --- a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs @@ -65,31 +65,31 @@ namespace BizHawk.Emulation.Common /// /// The address to check for callbacks /// The scope that the address pertains to. Must be a value in - void CallReads(uint addr, string scope); + void CallReads(uint addr, uint value, string scope); /// /// Executes all Write callbacks for the given address and domain /// /// The address to check for callbacks /// The scope that the address pertains to. Must be a value in - void CallWrites(uint addr, string scope); + void CallWrites(uint addr, uint value, string scope); /// /// Executes all Execute callbacks for the given address and domain /// /// The address to check for callbacks /// The scope that the address pertains to. Must be a value in - void CallExecutes(uint addr, string scope); + void CallExecutes(uint addr, uint value, string scope); /// /// Removes the given callback from the list /// - void Remove(Action action); + void Remove(Action action); /// /// Removes the given callbacks from the list /// - void RemoveAll(IEnumerable actions); + void RemoveAll(IEnumerable> actions); /// /// Removes all read,write, and execute callbacks @@ -111,7 +111,7 @@ namespace BizHawk.Emulation.Common { MemoryCallbackType Type { get; } string Name { get; } - Action Callback { get; } + Action Callback { get; } uint? Address { get; } uint? AddressMask { get; } string Scope { get; } diff --git a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs index c30c140bff..8d36295e3f 100644 --- a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs @@ -192,7 +192,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 if (MemoryCallbacks != null) { - MemoryCallbacks.CallExecutes(RegisterPC, "System Bus"); + MemoryCallbacks.CallExecutes(RegisterPC, 0, "System Bus"); } switch (opcode) diff --git a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs index 8a4ced6fa0..5f6c87ef66 100644 --- a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs +++ b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs @@ -31,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 { if (MemoryCallbacks != null && !peek) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); } return ReadMemory(addr, peek); @@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 { if (MemoryCallbacks != null && !poke) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); } WriteMemory(addr, value, poke); diff --git a/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs b/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs index e86edcc297..09328c92df 100644 --- a/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs @@ -60,7 +60,7 @@ namespace BizHawk.Emulation.Cores.Components.H6280 LagIFlag = FlagI; if (Debug) Logger(State()); - MemoryCallbacks.CallExecutes(PC, "System Bus"); + MemoryCallbacks.CallExecutes(PC, 0, "System Bus"); if (CDL != null && CDL.Active) CDLOpcode(); diff --git a/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs b/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs index 9e2e8ad470..6f95f789ae 100644 --- a/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs +++ b/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs @@ -230,7 +230,7 @@ namespace BizHawk.Emulation.Cores.Components.H6280 { byte page = MPR[address >> 13]; var result = ReadMemory21((page << 13) | (address & 0x1FFF)); - MemoryCallbacks.CallReads(address, "System Bus"); + MemoryCallbacks.CallReads(address, result, "System Bus"); return result; } @@ -238,7 +238,7 @@ namespace BizHawk.Emulation.Cores.Components.H6280 { byte page = MPR[address >> 13]; WriteMemory21((page << 13) | (address & 0x1FFF), value); - MemoryCallbacks.CallWrites(address, "System Bus"); + MemoryCallbacks.CallWrites(address, value, "System Bus"); } private ushort ReadWord(ushort address) diff --git a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs index e67abf06ef..9d35c23ea2 100644 --- a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs +++ b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs @@ -183,9 +183,9 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII private void SetCallbacks() { - _machine.Memory.ReadCallback = (addr) => MemoryCallbacks.CallReads(addr, "System Bus"); - _machine.Memory.WriteCallback = (addr) => MemoryCallbacks.CallWrites(addr, "System Bus"); - _machine.Memory.ExecuteCallback = (addr) => MemoryCallbacks.CallExecutes(addr, "System Bus"); + _machine.Memory.ReadCallback = (addr) => MemoryCallbacks.CallReads(addr, 0, "System Bus"); + _machine.Memory.WriteCallback = (addr) => MemoryCallbacks.CallWrites(addr, 0, "System Bus"); + _machine.Memory.ExecuteCallback = (addr) => MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); _machine.Memory.InputCallback = InputCallbacks.Call; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs index 4d9bb84286..199a2ea393 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs @@ -160,7 +160,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 _mapper.Bit13 = addr.Bit(13); var temp = _mapper.ReadMemory((ushort)(addr & 0x1FFF)); _tia.BusState = temp; - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); return temp; } @@ -181,7 +181,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 _mapper.WriteMemory((ushort)(addr & 0x1FFF), value); - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); } internal void PokeMemory(ushort addr, byte value) @@ -191,7 +191,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } private void RebootCore() diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs index 7d64189dca..cdf8024739 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs @@ -291,7 +291,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } private void Reset_Mapper(string m) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs index 6f3e76aba5..fc8108ce99 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs @@ -20,7 +20,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk { public byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); if ((addr & 0xFCE0) == 0) { @@ -98,7 +98,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk public void WriteMemory(ushort addr, byte value) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); if ((addr & 0xFCE0) == 0) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs index 247d7fd68d..3e9493c92b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs @@ -168,9 +168,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA void InitCallbacks() { padcb = new LibVBANext.StandardCallback(() => InputCallbacks.Call()); - fetchcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallExecutes(addr, "System Bus")); - readcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallReads(addr, "System Bus")); - writecb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallWrites(addr, "System Bus")); + fetchcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallExecutes(addr, 0, "System Bus")); + readcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallReads(addr, 0, "System Bus")); + writecb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallWrites(addr, 0, "System Bus")); tracecb = new LibVBANext.TraceCallback((addr, opcode) => Tracer.Put(Trace(addr, opcode))); _inputCallbacks.ActiveChanged += SyncPadCallback; _memorycallbacks.ActiveChanged += SyncMemoryCallbacks; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index 00e89a039e..efe4d40e05 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -296,7 +296,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } private void Setup_Mapper() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs index fdeafdc9e3..fa546bb745 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs @@ -29,7 +29,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { public byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); addr_access = addr; if (ppu.DMA_start) @@ -157,7 +157,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public void WriteMemory(ushort addr, byte value) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); addr_access = addr; if (ppu.DMA_start) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index 619a17c479..6b6382d4b6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -96,7 +96,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs index 075ee71d27..1006903e43 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs @@ -59,19 +59,19 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy private void ReadCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallReads(address, "System Bus"); + MemoryCallbacks.CallReads(address, 0, "System Bus"); } private void WriteCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallWrites(address, "System Bus"); + MemoryCallbacks.CallWrites(address, 0, "System Bus"); } private void ExecCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallExecutes(address, "System Bus"); + MemoryCallbacks.CallExecutes(address, 0, "System Bus"); } /// diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs index c499855ae5..1f89a92ece 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs @@ -755,13 +755,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi switch (_breakparams._type) { case BreakType.Read: - _breakparams._mcs.CallReads(_breakparams._addr, "System Bus"); + _breakparams._mcs.CallReads(_breakparams._addr, 0, "System Bus"); break; case BreakType.Write: - _breakparams._mcs.CallWrites(_breakparams._addr, "System Bus"); + _breakparams._mcs.CallWrites(_breakparams._addr, 0, "System Bus"); break; case BreakType.Execute: - _breakparams._mcs.CallExecutes(_breakparams._addr, "System Bus"); + _breakparams._mcs.CallExecutes(_breakparams._addr, 0, "System Bus"); break; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index ac9f0d3b26..72fa925abd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -916,7 +916,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } public byte ReadMemory(ushort addr) @@ -966,7 +966,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } } - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, ret, "System Bus"); DB = ret; return ret; @@ -1013,7 +1013,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES Board.WritePRG(addr - 0x8000, value); } - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); } // the palette for each VS game needs to be chosen explicitly since there are 6 different ones. diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index 94e6335b79..dbd655cc9a 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -364,7 +364,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ReadHook(uint addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -372,7 +372,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ExecHook(uint addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -380,7 +380,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void WriteHook(uint addr, byte val) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, val, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -388,17 +388,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ReadHook_SMP(uint addr) { - MemoryCallbacks.CallReads(addr, "SMP"); + MemoryCallbacks.CallReads(addr, 0, "SMP"); } private void ExecHook_SMP(uint addr) { - MemoryCallbacks.CallExecutes(addr, "SMP"); + MemoryCallbacks.CallExecutes(addr, 0, "SMP"); } private void WriteHook_SMP(uint addr, byte val) { - MemoryCallbacks.CallWrites(addr, "SMP"); + MemoryCallbacks.CallWrites(addr, val, "SMP"); } private enum LoadParamType diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index bc20055601..6ae3dc1d52 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -73,7 +73,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } #region ISettable diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs index bba177d817..5430c859de 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs @@ -283,7 +283,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem private byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); return ReadMemoryMapper(addr); } @@ -292,7 +292,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem { WriteMemoryMapper(addr, value); - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, value, "System Bus"); } private byte FetchMemory(ushort addr) @@ -302,7 +302,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem private void OnExecMemory(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } /// diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs index 9b5e7363d9..dd895b4cb4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs @@ -61,9 +61,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx private void InitMemCallbacks() { - ExecCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallExecutes(a, "M68K BUS")); - ReadCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallReads(a, "M68K BUS")); - WriteCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallWrites(a, "M68K BUS")); + ExecCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallExecutes(a, 0, "M68K BUS")); + ReadCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallReads(a, 0, "M68K BUS")); + WriteCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallWrites(a, 0, "M68K BUS")); _memoryCallbacks.ActiveChanged += RefreshMemCallbacks; } diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index c8d8dab662..7c6717e04c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx Header = "M68K: PC, machine code, mnemonic, operands, registers (D0-D7, A0-A7, SR, USP), flags (XNZVC)"; } - protected override void TraceFromCallback() + protected override void TraceFromCallback(uint addr, uint value) { var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index eca318a577..06f3145933 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -883,13 +883,13 @@ namespace BizHawk.Emulation.Cores.Sony.PSX switch (type) { case OctoshockDll.eShockMemCb.Read: - MemoryCallbacks.CallReads(address, "System Bus"); + MemoryCallbacks.CallReads(address, value, "System Bus"); break; case OctoshockDll.eShockMemCb.Write: - MemoryCallbacks.CallWrites(address, "System Bus"); + MemoryCallbacks.CallWrites(address, value, "System Bus"); break; case OctoshockDll.eShockMemCb.Execute: - MemoryCallbacks.CallExecutes(address, "System Bus"); + MemoryCallbacks.CallExecutes(address, value, "System Bus"); break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index b5224065ea..5fcb14f2a8 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -142,15 +142,15 @@ namespace BizHawk.Emulation.Cores.WonderSwan void ReadCallback(uint addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + MemoryCallbacks.CallReads(addr, 0, "System Bus"); } void WriteCallback(uint addr) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + MemoryCallbacks.CallWrites(addr, 0, "System Bus"); } void ExecCallback(uint addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); } void ButtonCallback() { From fe3455be7d8189192e17350e4f2bdd73aa02906e Mon Sep 17 00:00:00 2001 From: Brian Armstrong Date: Thu, 24 Jan 2019 03:25:50 -0800 Subject: [PATCH 002/138] call with value, not 0 --- .../Base Implementations/MemoryCallbackSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs index 24edf2dde6..794986c830 100644 --- a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs @@ -73,7 +73,7 @@ namespace BizHawk.Emulation.Common { if (!cbs[i].Address.HasValue || (cbs[i].Scope == scope && cbs[i].Address == (addr & cbs[i].AddressMask))) { - cbs[i].Callback(addr, 0); + cbs[i].Callback(addr, value); } } } From ae7bea226ccbe3db56a86aebe6819e6f54c363ae Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 3 Apr 2019 17:01:35 +0100 Subject: [PATCH 003/138] ZXHawk: move the beeper implementation out of the core into Cores.Sound. The CPC core will also use this and we may have other cores in the future that want to make use of a nice 1-bit buzzer/implementation (tape loading, onboard speaker etc..) --- .../BizHawk.Emulation.Cores.csproj | 2 +- .../Hardware/Datacorder/DatacorderDevice.cs | 3 +- .../Hardware/SoundOuput/Beeper.cs | 216 ------------------ .../SinclairSpectrum/Machine/CPUMonitor.cs | 2 +- .../Machine/Pentagon128K/Pentagon128.Port.cs | 6 +- .../Machine/Pentagon128K/Pentagon128.cs | 7 +- .../SinclairSpectrum/Machine/SpectrumBase.cs | 13 +- .../Machine/ZXSpectrum128K/ZX128.Port.cs | 6 +- .../Machine/ZXSpectrum128K/ZX128.cs | 9 +- .../ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs | 8 +- .../ZXSpectrum128KPlus2a/ZX128Plus2a.cs | 9 +- .../ZXSpectrum128KPlus3/ZX128Plus3.Port.cs | 8 +- .../Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs | 9 +- .../Machine/ZXSpectrum48K/ZX48.Port.cs | 2 +- .../Machine/ZXSpectrum48K/ZX48.cs | 9 +- .../SinclairSpectrum/ZXSpectrum.ISettable.cs | 5 +- .../Computers/SinclairSpectrum/ZXSpectrum.cs | 5 +- BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs | 194 ++++++++++++++++ 18 files changed, 247 insertions(+), 266 deletions(-) delete mode 100644 BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs create mode 100644 BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index b1b66ac5c4..098bc564b2 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -319,7 +319,6 @@ - @@ -1583,6 +1582,7 @@ + diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs index ccd2065e66..e18c3ae68e 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -16,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum private SpectrumBase _machine { get; set; } private Z80A _cpu { get; set; } - private IBeeperDevice _buzzer { get; set; } + private OneBitBeeper _buzzer { get; set; } /// /// Default constructor diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs deleted file mode 100644 index 8ee5dc0067..0000000000 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs +++ /dev/null @@ -1,216 +0,0 @@ -using BizHawk.Common; -using BizHawk.Emulation.Common; -using System; - -namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum -{ - /// - /// Logical Beeper class - /// Represents the piezoelectric buzzer used in the Spectrum to produce sound - /// The beeper is controlled by rapidly toggling bit 4 of port &FE - /// It is instantiated twice, once for speccy beeper output, and once tape buzzer emulation - /// This implementation uses BlipBuffer and should *always* output at 44100 with 882 samples per frame - /// (so that it can be mixed easily further down the line) - /// - public class Beeper : ISoundProvider, IBeeperDevice - { - #region Fields and Properties - - /// - /// Sample Rate - /// This usually has to be 44100 for ISoundProvider - /// - private int _sampleRate; - public int SampleRate - { - get { return _sampleRate; } - set { _sampleRate = value; } - } - - /// - /// Buzzer volume - /// Accepts an int 0-100 value - /// - private int _volume; - public int Volume - { - get - { - return VolumeConverterOut(_volume); - } - set - { - var newVol = VolumeConverterIn(value); - if (newVol != _volume) - blip.Clear(); - _volume = VolumeConverterIn(value); - } - } - - /// - /// The last used volume (used to modify blipbuffer delta values) - /// - private int lastVolume; - - /// - /// The number of cpu cycles per frame - /// - private long _tStatesPerFrame; - - /// - /// The parent emulated machine - /// - private SpectrumBase _machine; - - /// - /// The last pulse - /// - private bool LastPulse; - - /// - /// The last T-State (cpu cycle) that the last pulse was received - /// - private long LastPulseTState; - - /// - /// Device blipbuffer - /// - private readonly BlipBuffer blip = new BlipBuffer(882); - - #endregion - - #region Private Methods - - /// - /// Takes an int 0-100 and returns the relevant short volume to output - /// - /// - /// - private int VolumeConverterIn(int vol) - { - int maxLimit = short.MaxValue / 3; - int increment = maxLimit / 100; - - return vol * increment; - } - - /// - /// Takes an short volume and returns the relevant int value 0-100 - /// - /// - /// - private int VolumeConverterOut(int shortvol) - { - int maxLimit = short.MaxValue / 3; - int increment = maxLimit / 100; - - if (shortvol > maxLimit) - shortvol = maxLimit; - - return shortvol / increment; - } - - #endregion - - #region Construction & Initialisation - - public Beeper(SpectrumBase machine) - { - _machine = machine; - } - - /// - /// Initialises the beeper - /// - public void Init(int sampleRate, int tStatesPerFrame) - { - blip.SetRates((tStatesPerFrame * 50), sampleRate); - _sampleRate = sampleRate; - _tStatesPerFrame = tStatesPerFrame; - } - - #endregion - - #region IBeeperDevice - - /// - /// Processes an incoming pulse value and adds it to the blipbuffer - /// - /// - public void ProcessPulseValue(bool pulse) - { - if (!_machine._renderSound) - return; - - if (LastPulse == pulse) - { - // no change - blip.AddDelta((uint)_machine.CurrentFrameCycle, 0); - } - - else - { - if (pulse) - blip.AddDelta((uint)_machine.CurrentFrameCycle, (short)(_volume)); - else - blip.AddDelta((uint)_machine.CurrentFrameCycle, -(short)(_volume)); - - lastVolume = _volume; - } - - LastPulse = pulse; - } - - #endregion - - #region ISoundProvider - - public bool CanProvideAsync => false; - - public SyncSoundMode SyncMode => SyncSoundMode.Sync; - - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } - - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } - - public void DiscardSamples() - { - blip.Clear(); - } - - public void GetSamplesSync(out short[] samples, out int nsamp) - { - blip.EndFrame((uint)_tStatesPerFrame); - nsamp = blip.SamplesAvailable(); - samples = new short[nsamp * 2]; - blip.ReadSamples(samples, nsamp, true); - for (int i = 0; i < nsamp * 2; i += 2) - { - samples[i + 1] = samples[i]; - } - } - - #endregion - - #region State Serialization - - public void SyncState(Serializer ser) - { - ser.BeginSection("Buzzer"); - ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); - ser.Sync(nameof(_sampleRate), ref _sampleRate); - ser.Sync(nameof(LastPulse), ref LastPulse); - ser.Sync(nameof(LastPulseTState), ref LastPulseTState); - ser.EndSection(); - } - - #endregion - } -} diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs index eabdc7ff30..b18ad12a2c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs @@ -97,7 +97,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } } - _cpu.ExecuteOne(); + _cpu.ExecuteOne(); } /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs index 033ca1f29d..d4507749ff 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs @@ -162,9 +162,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice.BorderColor = value & BORDER_BIT; } - // Buzzer - BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0); - TapeDevice.WritePort(port, value); + // Buzzer + BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0, _renderSound); + TapeDevice.WritePort(port, value); // Tape //TapeDevice.ProcessMicBit((value & MIC_BIT) != 0); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs index ea76f7a511..c46e265ccf 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using BizHawk.Emulation.Cores.Components.Z80A; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -30,11 +31,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice = new ScreenPentagon128(this); - BuzzerDevice = new Beeper(this); - BuzzerDevice.Init(44100, ULADevice.FrameLength); + BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, ULADevice.FrameLength); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); AYDevice = new AY38912(this); AYDevice.Init(44100, ULADevice.FrameLength); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs index 8137e21ea5..56db60c5b0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs @@ -1,5 +1,6 @@ using BizHawk.Common; using BizHawk.Emulation.Cores.Components.Z80A; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -40,12 +41,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// The spectrum buzzer/beeper /// - public IBeeperDevice BuzzerDevice { get; set; } + public OneBitBeeper BuzzerDevice { get; set; } /// /// A second beeper for the tape /// - public IBeeperDevice TapeBuzzer { get; set; } + public OneBitBeeper TapeBuzzer { get; set; } /// /// Device representing the AY-3-8912 chip found in the 128k and up spectrums @@ -164,8 +165,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // run the CPU Monitor cycle CPUMon.ExecuteCycle(); - // cycle the tape device - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + // clock the beepers + TapeBuzzer.SetClock((int)CurrentFrameCycle); + BuzzerDevice.SetClock((int)CurrentFrameCycle); + + // cycle the tape device + if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) TapeDevice.TapeCycle(); // has frame end been reached? diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs index 1ec92a69f6..c1839dcaf3 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs @@ -157,9 +157,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice.BorderColor = value & BORDER_BIT; } - // Buzzer - BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0); - TapeDevice.WritePort(port, value); + // Buzzer + BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0, _renderSound); + TapeDevice.WritePort(port, value); // Tape //TapeDevice.ProcessMicBit((value & MIC_BIT) != 0); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs index 009c882d38..2a3884c9b2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using BizHawk.Emulation.Cores.Components.Z80A; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -30,13 +31,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice = new Screen128(this); - BuzzerDevice = new Beeper(this); - BuzzerDevice.Init(44100, ULADevice.FrameLength); + BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, ULADevice.FrameLength); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); - AYDevice = new AY38912(this); + AYDevice = new AY38912(this); AYDevice.Init(44100, ULADevice.FrameLength); KeyboardDevice = new StandardKeyboard(this); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs index 7d6a6a53a4..1e3af11048 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs @@ -157,11 +157,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice.BorderColor = value & BORDER_BIT; } - // Buzzer - BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0); + // Buzzer + BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0, _renderSound); - // Tape - TapeDevice.WritePort(port, value); + // Tape + TapeDevice.WritePort(port, value); // Tape //TapeDevice.ProcessMicBit((value & MIC_BIT) != 0); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs index b38ba2ef0a..ffde2726f7 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs @@ -1,5 +1,6 @@ using BizHawk.Emulation.Cores.Components.Z80A; using System.Collections.Generic; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -30,13 +31,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice = new Screen128Plus2a(this); - BuzzerDevice = new Beeper(this); - BuzzerDevice.Init(44100, ULADevice.FrameLength); + BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, ULADevice.FrameLength); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); - AYDevice = new AY38912(this); + AYDevice = new AY38912(this); AYDevice.Init(44100, ULADevice.FrameLength); KeyboardDevice = new StandardKeyboard(this); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs index ac662665d3..eb87580a99 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs @@ -164,11 +164,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice.BorderColor = value & BORDER_BIT; } - // Buzzer - BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0); + // Buzzer + BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0, _renderSound); - // Tape - TapeDevice.WritePort(port, value); + // Tape + TapeDevice.WritePort(port, value); // Tape //TapeDevice.ProcessMicBit((value & MIC_BIT) != 0); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs index f681ec3bd0..98576ab5a4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs @@ -1,5 +1,6 @@ using BizHawk.Emulation.Cores.Components.Z80A; using System.Collections.Generic; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -30,13 +31,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ULADevice = new Screen128Plus2a(this); - BuzzerDevice = new Beeper(this); - BuzzerDevice.Init(44100, ULADevice.FrameLength); + BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, ULADevice.FrameLength); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); - AYDevice = new AY38912(this); + AYDevice = new AY38912(this); AYDevice.Init(44100, ULADevice.FrameLength); KeyboardDevice = new StandardKeyboard(this); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs index b6d175028b..75aa48425b 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs @@ -91,7 +91,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } // Buzzer - BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0); + BuzzerDevice.ProcessPulseValue((value & EAR_BIT) != 0, _renderSound); // Tape TapeDevice.WritePort(port, value); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs index 3291f5c20a..caf5ee440f 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs @@ -1,6 +1,7 @@ using BizHawk.Emulation.Cores.Components.Z80A; using System; using System.Collections.Generic; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -24,13 +25,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum CPUMon = new CPUMonitor(this); ULADevice = new Screen48(this); - BuzzerDevice = new Beeper(this); - BuzzerDevice.Init(44100, ULADevice.FrameLength); + BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, ULADevice.FrameLength); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); InitJoysticks(joysticks); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs index 096938717d..e03bbc5258 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -36,11 +37,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } if (_machine != null && _machine.BuzzerDevice != null) { - ((Beeper)_machine.BuzzerDevice as Beeper).Volume = o.EarVolume; + ((OneBitBeeper)_machine.BuzzerDevice as OneBitBeeper).Volume = o.EarVolume; } if (_machine != null && _machine.TapeBuzzer != null) { - ((Beeper)_machine.TapeBuzzer as Beeper).Volume = o.TapeVolume; + ((OneBitBeeper)_machine.TapeBuzzer as OneBitBeeper).Volume = o.TapeVolume; } Settings = o; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs index 4807ffbc37..5fe2b30996 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { @@ -130,12 +131,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum if (_machine.BuzzerDevice != null) { - ((Beeper)_machine.BuzzerDevice as Beeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).EarVolume; + ((OneBitBeeper)_machine.BuzzerDevice as OneBitBeeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).EarVolume; } if (_machine.TapeBuzzer != null) { - ((Beeper)_machine.TapeBuzzer as Beeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).TapeVolume; + ((OneBitBeeper)_machine.TapeBuzzer as OneBitBeeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).TapeVolume; } DCFilter dc = new DCFilter(SoundMixer, 512); diff --git a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs new file mode 100644 index 0000000000..09b0bb5409 --- /dev/null +++ b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs @@ -0,0 +1,194 @@ +using System; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Sound +{ + /// + /// A simple 1-bit (mono) beeper/buzzer implementation using blipbuffer + /// Simulating the piezzo-electric buzzer found in many old computers (such as the ZX Spectrum or Amstrad CPC) + /// Sound is generated by toggling the single input line ON and OFF rapidly + /// + public sealed class OneBitBeeper : ISoundProvider + { + private int _sampleRate; + private int _clocksPerFrame; + private int _framesPerSecond; + private BlipBuffer _blip; + private readonly string _beeperId; + + /// + /// Constructor + /// + /// The sample rate to pass to blipbuffer (this should be 44100 for ISoundProvider) + /// The number of (usually CPU) clocked cycles in one frame + /// The number of frames per second (usually either 60 or 50) + /// Unique name for this instance (needed for serialization as some cores have more than one active instance of the beeper) + public OneBitBeeper(int blipSampleRate, int clocksPerFrame, int framesPerSecond, string beeperId) + { + _beeperId = beeperId; + _sampleRate = blipSampleRate; + _clocksPerFrame = clocksPerFrame; + _framesPerSecond = framesPerSecond; + _blip = new BlipBuffer(blipSampleRate / framesPerSecond); + _blip.SetRates(clocksPerFrame * 50, blipSampleRate); + } + + private int clockCounter; + + /// + /// Option to clock the beeper every CPU clock + /// + public void Clock() + { + clockCounter++; + } + + /// + /// Option to directly set the current clock position within the frame + /// + public void SetClock(int currentFrameClock) + { + clockCounter = currentFrameClock; + } + + private bool lastPulse; + + /// + /// Processes an incoming pulse value + /// + /// + public void ProcessPulseValue(bool pulse, bool renderSound = true) + { + if (!renderSound) + return; + + if (lastPulse == pulse) + { + // no change + _blip.AddDelta((uint)clockCounter, 0); + } + + else + { + if (pulse) + _blip.AddDelta((uint)clockCounter, (short)(_volume)); + else + _blip.AddDelta((uint)clockCounter, -(short)(_volume)); + + lastVolume = _volume; + } + + lastPulse = pulse; + } + + #region Volume Handling + + /// + /// Beeper volume + /// Accepts an int 0-100 value + /// + public int Volume + { + get { return VolumeConverterOut(_volume); } + set + { + var newVol = VolumeConverterIn(value); + if (newVol != _volume) + _blip.Clear(); + _volume = VolumeConverterIn(value); + } + } + private int _volume; + + /// + /// The last used volume (used to modify blipbuffer delta values) + /// + private int lastVolume; + + + /// + /// Takes an int 0-100 and returns the relevant short volume to output + /// + /// + /// + private int VolumeConverterIn(int vol) + { + int maxLimit = short.MaxValue / 3; + int increment = maxLimit / 100; + + return vol * increment; + } + + /// + /// Takes an short volume and returns the relevant int value 0-100 + /// + /// + /// + private int VolumeConverterOut(int shortvol) + { + int maxLimit = short.MaxValue / 3; + int increment = maxLimit / 100; + + if (shortvol > maxLimit) + shortvol = maxLimit; + + return shortvol / increment; + } + + #endregion + + #region ISoundProvider + + public bool CanProvideAsync => false; + + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + _blip.Clear(); + } + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + _blip.EndFrame((uint)_clocksPerFrame); + nsamp = _blip.SamplesAvailable(); + samples = new short[nsamp * 2]; + _blip.ReadSamples(samples, nsamp, true); + for (int i = 0; i < nsamp * 2; i += 2) + { + samples[i + 1] = samples[i]; + } + + clockCounter = 0; + } + + #endregion + + #region State Serialization + + public void SyncState(Serializer ser) + { + ser.BeginSection("Beeper_" + _beeperId); + ser.Sync(nameof(_sampleRate), ref _sampleRate); + ser.Sync(nameof(_clocksPerFrame), ref _clocksPerFrame); + ser.Sync(nameof(_framesPerSecond), ref _framesPerSecond); + ser.Sync(nameof(clockCounter), ref clockCounter); + ser.Sync(nameof(lastPulse), ref lastPulse); + ser.EndSection(); + } + + #endregion + } +} From 0ff0be2a93151ae40e016f6be3167e13edc7a2f6 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 3 Apr 2019 17:10:49 +0100 Subject: [PATCH 004/138] 1BitBeeper: allow clock incrementation by an arbitrary value (it is possible a core may need this) --- BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs index 09b0bb5409..10287f1940 100644 --- a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs +++ b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs @@ -39,7 +39,7 @@ namespace BizHawk.Emulation.Cores.Sound /// /// Option to clock the beeper every CPU clock /// - public void Clock() + public void Clock(int clocksToAdd = 1) { clockCounter++; } From d2131ea947fe9fcf883fe114870c71bb3f17fd3b Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 3 Apr 2019 17:12:09 +0100 Subject: [PATCH 005/138] 1BitBeeper: actually do what the last commit was supposed to do --- BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs index 10287f1940..9ab9e3e05b 100644 --- a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs +++ b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs @@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Cores.Sound /// public void Clock(int clocksToAdd = 1) { - clockCounter++; + clockCounter += clocksToAdd; } /// From 244b9d22310905ff035f13ecc6d47f802cf49f5a Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Wed, 3 Apr 2019 19:22:23 -0500 Subject: [PATCH 006/138] More MC6809 --- .../CPUs/MC6809/Execute.cs | 108 +++++++++--------- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 37 ++++++ .../CPUs/MC6809/Operations.cs | 106 ++++++++++++++--- .../CPUs/MC6809/Tables_Direct.cs | 66 +++++++++++ 4 files changed, 249 insertions(+), 68 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index 5f60b7966d..80a30a1d6b 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -151,35 +151,35 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x7D: EXT_MEM(TST); break; // TST (Extended) case 0x7E: JMP_EXT_(); break; // JMP (Extended) case 0x7F: EXT_MEM(CLR); break; // CLR (Extended) - case 0x80: REG_OP(ADD8, A); break; // SUBA (Immediate) - case 0x81: REG_OP(ADD8, A); break; // CMPA (Immediate) - case 0x82: REG_OP(ADD8, A); break; // SBCA (Immediate) - case 0x83: REG_OP(ADD8, A); break; // SUBD (Immediate) - case 0x84: REG_OP(ADD8, A); break; // ANDA (Immediate) - case 0x85: REG_OP(ADD8, A); break; // BITA (Immediate) - case 0x86: REG_OP(ADD8, A); break; // LDA (Immediate) + case 0x80: REG_OP_IMD(SUB8, A); break; // SUBA (Immediate) + case 0x81: REG_OP_IMD(CMP8, A); break; // CMPA (Immediate) + case 0x82: REG_OP_IMD(SBC8, A); break; // SBCA (Immediate) + case 0x83: IMD_OP_D(SUB16, D); break; // SUBD (Immediate) + case 0x84: REG_OP_IMD(AND8, A); break; // ANDA (Immediate) + case 0x85: REG_OP_IMD(BIT, A); break; // BITA (Immediate) + case 0x86: REG_OP_IMD(TR, A); break; // LDA (Immediate) case 0x87: ILLEGAL(); break; // ILLEGAL - case 0x88: REG_OP(ADC8, A); break; // EORA (Immediate) - case 0x89: REG_OP(ADC8, A); break; // ADCA (Immediate) - case 0x8A: REG_OP(ADC8, A); break; // ORA (Immediate) - case 0x8B: REG_OP(ADC8, A); break; // ADDA (Immediate) - case 0x8C: REG_OP(ADC8, A); break; // CMPX (Immediate) - case 0x8D: REG_OP(ADC8, A); break; // BSR (Relative) - case 0x8E: REG_OP(ADC8, A); break; // LDX (Immediate) + case 0x88: REG_OP_IMD(XOR8, A); break; // EORA (Immediate) + case 0x89: REG_OP_IMD(ADC8, A); break; // ADCA (Immediate) + case 0x8A: REG_OP_IMD(OR8, A); break; // ORA (Immediate) + case 0x8B: REG_OP_IMD(ADD8, A); break; // ADDA (Immediate) + case 0x8C: REG_OP_IMD(ADC8, A); break; // CMPX (Immediate) + case 0x8D: BSR_(); break; // BSR (Relative) + case 0x8E: REG_OP_LD_16(X); break; // LDX (Immediate) case 0x8F: ILLEGAL(); break; // ILLEGAL - case 0x90: REG_OP(ADD8, A); break; // SUBA (Direct) - case 0x91: REG_OP(ADD8, A); break; // CMPA (Direct) - case 0x92: REG_OP(ADD8, A); break; // SBCA (Direct) - case 0x93: REG_OP(ADD8, A); break; // SUBD (Direct) - case 0x94: REG_OP(ADD8, A); break; // ANDA (Direct) - case 0x95: REG_OP(ADD8, A); break; // BITA (Direct) - case 0x96: REG_OP(ADD8, A); break; // LDA (Direct) - case 0x97: REG_OP(ADD8, A); break; // STA (Direct) - case 0x98: REG_OP(ADC8, A); break; // EORA (Direct) - case 0x99: REG_OP(ADC8, A); break; // ADCA (Direct) - case 0x9A: REG_OP(ADC8, A); break; // ORA (Direct) - case 0x9B: REG_OP(ADC8, A); break; // ADDA (Direct) - case 0x9C: REG_OP(ADC8, A); break; // CMPX (Direct) + case 0x90: DIRECT_MEM_4(SUB8, A); break; // SUBA (Direct) + case 0x91: DIRECT_MEM_4(CMP8, A); break; // CMPA (Direct) + case 0x92: DIRECT_MEM_4(SBC8, A); break; // SBCA (Direct) + case 0x93: DIR_OP_D(SUB16, D); break; // SUBD (Direct) + case 0x94: DIRECT_MEM_4(AND8, A); break; // ANDA (Direct) + case 0x95: DIRECT_MEM_4(BIT, A); break; // BITA (Direct) + case 0x96: DIRECT_MEM_4(TR, A); break; // LDA (Direct) + case 0x97: DIRECT_ST_4(A); break; // STA (Direct) + case 0x98: DIRECT_MEM_4(XOR8, A); break; // EORA (Direct) + case 0x99: DIRECT_MEM_4(ADC8, A); break; // ADCA (Direct) + case 0x9A: DIRECT_MEM_4(OR8, A); break; // ORA (Direct) + case 0x9B: DIRECT_MEM_4(ADD8, A); break; // ADDA (Direct) + case 0x9C: DIR_CMP_16(CMP16, X); break; // CMPX (Direct) case 0x9D: REG_OP(ADC8, A); break; // JSR (Direct) case 0x9E: REG_OP(ADC8, A); break; // LDX (Direct) case 0x9F: REG_OP(ADC8, A); break; // STX (Direct) @@ -215,36 +215,36 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xBD: REG_OP(XOR8, A); break; // JSR (Extended) case 0xBE: REG_OP(XOR8, A); break; // LDX (Extended) case 0xBF: REG_OP(XOR8, A); break; // STX (Extended) - case 0xC0: REG_OP(ADD8, A); break; // SUBB (Immediate) - case 0xC1: REG_OP(ADD8, A); break; // CMPB (Immediate) - case 0xC2: REG_OP(ADD8, A); break; // SBCB (Immediate) - case 0xC3: REG_OP(ADD8, A); break; // ADDD (Immediate) - case 0xC4: REG_OP(ADD8, A); break; // ANDB (Immediate) - case 0xC5: REG_OP(ADD8, A); break; // BITB (Immediate) - case 0xC6: REG_OP(ADD8, A); break; // LDB (Immediate) + case 0xC0: REG_OP_IMD(SUB8, B); break; // SUBB (Immediate) + case 0xC1: REG_OP_IMD(CMP8, B); break; // CMPB (Immediate) + case 0xC2: REG_OP_IMD(SBC8, B); break; // SBCB (Immediate) + case 0xC3: IMD_OP_D(ADD16, D); break; // ADDD (Immediate) + case 0xC4: REG_OP_IMD(AND8, B); break; // ANDB (Immediate) + case 0xC5: REG_OP_IMD(BIT, B); break; // BITB (Immediate) + case 0xC6: REG_OP_IMD(TR, B); break; // LDB (Immediate) case 0xC7: ILLEGAL(); break; // ILLEGAL - case 0xC8: REG_OP(ADC8, A); break; // EORB (Immediate) - case 0xC9: REG_OP(ADC8, A); break; // ADCB (Immediate) - case 0xCA: REG_OP(ADC8, A); break; // ORB (Immediate) - case 0xCB: REG_OP(ADC8, A); break; // ADDB (Immediate) - case 0xCC: REG_OP(ADC8, A); break; // LDD (Immediate) + case 0xC8: REG_OP_IMD(XOR8, B); break; // EORB (Immediate) + case 0xC9: REG_OP_IMD(ADC8, B); break; // ADCB (Immediate) + case 0xCA: REG_OP_IMD(OR8, B); break; // ORB (Immediate) + case 0xCB: REG_OP_IMD(ADD8, B); break; // ADDB (Immediate) + case 0xCC: REG_OP_LD_16D(D); break; // LDD (Immediate) case 0xCD: ILLEGAL(); break; // ILLEGAL - case 0xCE: REG_OP(ADC8, A); break; // LDU (Immediate) + case 0xCE: REG_OP_LD_16(US); break; // LDU (Immediate) case 0xCF: ILLEGAL(); break; // ILLEGAL - case 0xD0: REG_OP(ADD8, B); break; // SUBB (Direct) - case 0xD1: REG_OP(ADD8, B); break; // CMPB (Direct) - case 0xD2: REG_OP(ADD8, B); break; // SBCB (Direct) - case 0xD3: REG_OP(ADD8, B); break; // ADDD (Direct) - case 0xD4: REG_OP(ADD8, B); break; // ANDB (Direct) - case 0xD5: REG_OP(ADD8, B); break; // BITB (Direct) - case 0xD6: REG_OP(ADD8, B); break; // LDB (Direct) - case 0xD7: REG_OP(ADD8, B); break; // STB (Direct) - case 0xD8: REG_OP(ADC8, B); break; // EORB (Direct) - case 0xD9: REG_OP(ADC8, B); break; // ADCB (Direct) - case 0xDA: REG_OP(ADC8, B); break; // ORB (Direct) - case 0xDB: REG_OP(ADC8, B); break; // ADDB (Direct) - case 0xDC: REG_OP(ADC8, B); break; // LDD (Direct) - case 0xDD: REG_OP(ADC8, B); break; // STD (Direct) + case 0xD0: DIRECT_MEM_4(SUB8, B); break; // SUBB (Direct) + case 0xD1: DIRECT_MEM_4(CMP8, B); break; // CMPB (Direct) + case 0xD2: DIRECT_MEM_4(SBC8, B); break; // SBCB (Direct) + case 0xD3: DIR_OP_D(ADD16, D); break; // ADDD (Direct) + case 0xD4: DIRECT_MEM_4(AND8, B); break; // ANDB (Direct) + case 0xD5: DIRECT_MEM_4(BIT, B); break; // BITB (Direct) + case 0xD6: DIRECT_MEM_4(TR, B); break; // LDB (Direct) + case 0xD7: DIRECT_ST_4(B); break; // STB (Direct) + case 0xD8: DIRECT_MEM_4(XOR8, B); break; // EORB (Direct) + case 0xD9: DIRECT_MEM_4(ADC8, B); break; // ADCB (Direct) + case 0xDA: DIRECT_MEM_4(OR8, B); break; // ORB (Direct) + case 0xDB: DIRECT_MEM_4(ADD8, B); break; // ADDB (Direct) + case 0xDC: DIRECT_MEM_4(ADC8, B); break; // LDD (Direct) + case 0xDD: DIRECT_MEM_4(ADC8, B); break; // STD (Direct) case 0xDE: REG_OP(ADC8, B); break; // LDU (Direct) case 0xDF: REG_OP(ADC8, B); break; // STU (Direct) case 0xE0: REG_OP(AND8, B); break; // SUBB (Indexed) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index e15ad9c7c8..600954d0eb 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -87,6 +87,10 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort SET_F_I = 73; public const ushort SET_E = 74; public const ushort ANDCC = 75; + public const ushort CMP8 = 76; + public const ushort SUB16 = 77; + public const ushort ADD16 = 78; + public const ushort CMP16 = 79; public MC6809() { @@ -216,12 +220,33 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case AND8: AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case ADD8: + ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case ADC8: + ADC8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case OR8: OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case XOR8: + XOR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case BIT: + BIT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case SUB8: SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case SBC8: + SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case CMP8: + CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case TR: + TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case SET_ADDR: Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[cur_instr[instr_pntr++]] << 8) | Regs[cur_instr[instr_pntr++]]); break; @@ -347,6 +372,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case SBC8: SBC8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case CMP8: + CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case INC16: INC16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; @@ -356,6 +384,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case DEC16: DEC16_Func(cur_instr[instr_pntr++]); break; + case SUB16: + SUB16_Func(cur_instr[instr_pntr++]); + break; + case ADD16: + ADD16_Func(cur_instr[instr_pntr++]); + break; + case CMP16: + CMP16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case DEC8: DEC8_Func(cur_instr[instr_pntr++]); break; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index a072f333cd..bd38590322 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -117,7 +117,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { Regs[ALU] = (ushort)(Regs[A] * Regs[B]); D = Regs[ALU]; - FlagC = Regs[B] > 127; + FlagC = Regs[A] > 127; FlagZ = D == 0; } @@ -136,7 +136,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Reg16_d += (Regs[src] & 0xF); FlagH = Reg16_d.Bit(4); - + FlagV = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); FlagN = false; Regs[dest] = ans; @@ -157,16 +157,39 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Reg16_d -= (Regs[src] & 0xF); FlagH = Reg16_d.Bit(4); - FlagN = true; + FlagN = ans > 127; + FlagV = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); Regs[dest] = ans; } - public void BIT_Func(ushort bit, ushort src) + // same as SUB8 but result not stored + public void CMP8_Func(ushort dest, ushort src) { - FlagZ = !Regs[src].Bit(bit); - FlagH = true; - FlagN = false; + int Reg16_d = Regs[dest]; + Reg16_d -= Regs[src]; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + // redo for half carry flag + Reg16_d = Regs[dest] & 0xF; + Reg16_d -= (Regs[src] & 0xF); + + FlagH = Reg16_d.Bit(4); + FlagN = ans > 127; + FlagV = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + } + + public void BIT_Func(ushort dest, ushort src) + { + ushort ans = (ushort)(Regs[dest] & Regs[src]); + + FlagZ = ans == 0; + FlagV = false; + FlagN = ans > 127; } public void SET_Func(ushort bit, ushort src) @@ -253,7 +276,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } FlagZ = D == 0; - FlagN = Regs[B] > 127; + FlagN = Regs[A] > 127; } public void CCF_Func(ushort src) @@ -276,7 +299,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagZ = Regs[dest] == 0; FlagV = false; - FlagN = Regs[B] > 127; + FlagN = Regs[dest] > 127; } public void OR8_Func(ushort dest, ushort src) @@ -285,7 +308,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagZ = Regs[dest] == 0; FlagV = false; - FlagN = Regs[B] > 127; + FlagN = Regs[dest] > 127; } public void XOR8_Func(ushort dest, ushort src) @@ -293,9 +316,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); FlagZ = Regs[dest] == 0; - FlagC = false; - FlagH = false; - FlagN = false; + FlagV = false; + FlagN = Regs[dest] > 127; } public void CP8_Func(ushort dest, ushort src) @@ -418,6 +440,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Reg16_d += ((Regs[src] & 0xF) + c); FlagH = Reg16_d.Bit(4); + FlagV = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); FlagN = false; Regs[dest] = ans; @@ -440,7 +463,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Reg16_d -= ((Regs[src] & 0xF) + c); FlagH = Reg16_d.Bit(4); - FlagN = true; + FlagN = ans > 127; + FlagV = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); Regs[dest] = ans; } @@ -518,6 +542,60 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } + // D register implied + public void SUB16_Func(ushort src) + { + int Reg16_d = D; + int Reg16_s = Regs[src]; + + Reg16_d -= Reg16_s; + + FlagC = Reg16_d.Bit(16); + FlagZ = (Reg16_d & 0xFFFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFFFF); + + FlagN = ans > 0x7FFF; + FlagV = (D.Bit(15) != Regs[src].Bit(15)) && (D.Bit(15) != ans.Bit(15)); + + D = ans; + } + + // D register implied + public void ADD16_Func(ushort src) + { + int Reg16_d = D; + int Reg16_s = Regs[src]; + + Reg16_d += Reg16_s; + + FlagC = Reg16_d.Bit(16); + FlagZ = (Reg16_d & 0xFFFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFFFF); + + FlagN = ans > 0x7FFF; + FlagV = (D.Bit(15) != Regs[src].Bit(15)) && (D.Bit(15) != ans.Bit(15)); + + D = ans; + } + + public void CMP16_Func(ushort dest, ushort src) + { + int Reg16_d = Regs[dest]; + int Reg16_s = Regs[src]; + + Reg16_d += Reg16_s; + + FlagC = Reg16_d.Bit(16); + FlagZ = (Reg16_d & 0xFFFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFFFF); + + FlagN = ans > 0x7FFF; + FlagV = (Regs[dest].Bit(15) != Regs[src].Bit(15)) && (Regs[dest].Bit(15) != ans.Bit(15)); + } + public void EXG_Func(ushort sel) { ushort src = 0; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs index 1f9242a311..5291a93845 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs @@ -32,6 +32,20 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR, ADDR, ALU); } + private void DIRECT_ST_4(ushort dest) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + RD, ALU, ADDR, + WR, ADDR, dest); + } + + private void DIRECT_MEM_4(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + RD, ALU, ADDR, + oper, dest, ALU); + } + private void EXT_MEM(ushort oper) { PopulateCURINSTR(RD_INC, ALU, PC, @@ -49,6 +63,48 @@ namespace BizHawk.Emulation.Common.Components.MC6809 TR, CC, ALU2); } + private void REG_OP_IMD(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, oper, dest, ALU); + } + + private void IMD_OP_D(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + oper, ADDR); + } + + private void DIR_OP_D(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + RD_INC, ALU, ADDR, + RD, ALU2, ADDR, + SET_ADDR, ADDR, ALU, ALU2, + oper, ADDR); + } + + private void DIR_CMP_16(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + RD_INC, ALU, ADDR, + RD, ALU2, ADDR, + SET_ADDR, ADDR, ALU, ALU2, + oper, dest, ADDR); + } + + private void REG_OP_LD_16(ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, dest, ALU, ALU2); + } + + private void REG_OP_LD_16D(ushort dest) + { + PopulateCURINSTR(RD_INC, A, PC, + RD_INC, B, PC); + } + private void EXG_() { PopulateCURINSTR(RD_INC, ALU, @@ -118,6 +174,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } } + private void BSR_() + { + PopulateCURINSTR(RD_INC, ALU, PC, + ADD8BR, PC, ALU, + TR, ADDR, PC, + DEC16, SP, + WR_DEC_LO, SP, ADDR, + WR_HI, SP, ADDR); + } + private void LBSR_() { PopulateCURINSTR(RD_INC, ALU, PC, From b2584145d783cb8dd426e72c389ff8e6f12ed98d Mon Sep 17 00:00:00 2001 From: Asnivor Date: Thu, 4 Apr 2019 12:15:58 +0100 Subject: [PATCH 007/138] SyncSoundMixer: improved and moved out of ZXSpectrum into Cores.Sound (as the CPC will use this and future cores may find it useful) --- .../BizHawk.Emulation.Cores.csproj | 2 +- .../SinclairSpectrum/SoundProviderMixer.cs | 213 ----------- .../Computers/SinclairSpectrum/ZXSpectrum.cs | 30 +- .../Sound/SyncSoundMixer.cs | 340 ++++++++++++++++++ 4 files changed, 358 insertions(+), 227 deletions(-) delete mode 100644 BizHawk.Emulation.Cores/Computers/SinclairSpectrum/SoundProviderMixer.cs create mode 100644 BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 098bc564b2..864f3b5e7a 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -370,7 +370,6 @@ - @@ -1584,6 +1583,7 @@ + diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/SoundProviderMixer.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/SoundProviderMixer.cs deleted file mode 100644 index 55df2265f9..0000000000 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/SoundProviderMixer.cs +++ /dev/null @@ -1,213 +0,0 @@ -using BizHawk.Emulation.Common; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum -{ - /// - /// My attempt at mixing multiple ISoundProvider sources together and outputting another ISoundProvider - /// Currently only supports SyncSoundMode.Sync - /// Attached ISoundProvider sources must already be stereo 44.1khz and ideally sound buffers should be the same length (882) - /// (if not, only 882 samples of their buffer will be used) - /// - internal sealed class SoundProviderMixer : ISoundProvider - { - private class Provider - { - public ISoundProvider SoundProvider { get; set; } - public string ProviderDescription { get; set; } - public int MaxVolume { get; set; } - public short[] Buffer { get; set; } - public int NSamp { get; set; } - } - - private bool _stereo = true; - public bool Stereo - { - get { return _stereo; } - set { _stereo = value; } - } - - private readonly List SoundProviders; - - public SoundProviderMixer(params ISoundProvider[] soundProviders) - { - SoundProviders = new List(); - - foreach (var s in soundProviders) - { - SoundProviders.Add(new Provider - { - SoundProvider = s, - MaxVolume = short.MaxValue, - }); - } - - EqualizeVolumes(); - } - - public SoundProviderMixer(short maxVolume, string description, params ISoundProvider[] soundProviders) - { - SoundProviders = new List(); - - foreach (var s in soundProviders) - { - SoundProviders.Add(new Provider - { - SoundProvider = s, - MaxVolume = maxVolume, - ProviderDescription = description - }); - } - - EqualizeVolumes(); - } - - public void AddSource(ISoundProvider source, string description) - { - SoundProviders.Add(new Provider - { - SoundProvider = source, - MaxVolume = short.MaxValue, - ProviderDescription = description - }); - - EqualizeVolumes(); - } - - public void AddSource(ISoundProvider source, short maxVolume, string description) - { - SoundProviders.Add(new Provider - { - SoundProvider = source, - MaxVolume = maxVolume, - ProviderDescription = description - }); - - EqualizeVolumes(); - } - - public void DisableSource(ISoundProvider source) - { - var sp = SoundProviders.Where(a => a.SoundProvider == source); - if (sp.Count() == 1) - SoundProviders.Remove(sp.First()); - else if (sp.Count() > 1) - foreach (var s in sp) - SoundProviders.Remove(s); - - EqualizeVolumes(); - } - - public void EqualizeVolumes() - { - if (SoundProviders.Count < 1) - return; - - int eachVolume = short.MaxValue / SoundProviders.Count; - foreach (var source in SoundProviders) - { - source.MaxVolume = eachVolume; - } - } - - #region ISoundProvider - - public bool CanProvideAsync => false; - public SyncSoundMode SyncMode => SyncSoundMode.Sync; - - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } - - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } - - public void DiscardSamples() - { - foreach (var soundSource in SoundProviders) - { - soundSource.SoundProvider.DiscardSamples(); - } - } - - public void GetSamplesSync(out short[] samples, out int nsamp) - { - samples = null; - nsamp = 0; - - // get samples from all the providers - foreach (var sp in SoundProviders) - { - int sampCount; - short[] samp; - sp.SoundProvider.GetSamplesSync(out samp, out sampCount); - sp.NSamp = sampCount; - sp.Buffer = samp; - } - - // are all the sample lengths the same? - var firstEntry = SoundProviders.First(); - bool sameCount = SoundProviders.All(s => s.NSamp == firstEntry.NSamp); - - if (!sameCount) - { - // this is a bit hacky, really all ISoundProviders should be supplying 44100 with 882 samples per frame. - // we will make sure this happens (no matter how it sounds) - if (SoundProviders.Count > 1) - { - for (int i = 0; i < SoundProviders.Count; i++) - { - int ns = SoundProviders[i].NSamp; - short[] buff = new short[882 * 2]; - - for (int b = 0; b < 882 * 2; b++) - { - if (b == SoundProviders[i].Buffer.Length - 1) - { - // end of source buffer - break; - } - - buff[b] = SoundProviders[i].Buffer[b]; - } - - // save back to the soundprovider - SoundProviders[i].NSamp = 882; - SoundProviders[i].Buffer = buff; - } - } - else - { - // just process what we have as-is - } - } - - // mix the soundproviders together - nsamp = 882; - samples = new short[nsamp * 2]; - - for (int i = 0; i < samples.Length; i++) - { - short sectorVal = 0; - foreach (var sp in SoundProviders) - { - if (sp.Buffer[i] > sp.MaxVolume) - sectorVal += (short)sp.MaxVolume; - else - sectorVal += sp.Buffer[i]; - } - - samples[i] = sectorVal; - } - } - - #endregion - - } -} diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs index 5fe2b30996..1c51cbbc10 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using BizHawk.Emulation.Cores.Components; using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum @@ -47,11 +48,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum PutSettings((ZXSpectrumSettings)settings ?? new ZXSpectrumSettings()); List joysticks = new List(); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings as ZXSpectrumSyncSettings).JoystickType1); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings as ZXSpectrumSyncSettings).JoystickType2); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings as ZXSpectrumSyncSettings).JoystickType3); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType1); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType2); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType3); - deterministicEmulation = ((ZXSpectrumSyncSettings)syncSettings as ZXSpectrumSyncSettings).DeterministicEmulation; + deterministicEmulation = ((ZXSpectrumSyncSettings)syncSettings).DeterministicEmulation; if (deterministic != null && deterministic == true) { @@ -117,26 +118,29 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ser.Register(_machine.ULADevice); // initialize sound mixer and attach the various ISoundProvider devices - SoundMixer = new SoundProviderMixer((int)(32767 / 10), "System Beeper", (ISoundProvider)_machine.BuzzerDevice); - SoundMixer.AddSource((ISoundProvider)_machine.TapeBuzzer, "Tape Audio"); - if (_machine.AYDevice != null) - SoundMixer.AddSource(_machine.AYDevice, "AY-3-3912"); + SoundMixer = new SyncSoundMixer(targetSampleCount: 882); + SoundMixer.PinSource(_machine.BuzzerDevice, "System Beeper", (int)(32767 / 10)); + SoundMixer.PinSource(_machine.TapeBuzzer, "Tape Audio", (int)(32767 / 10)); + if (_machine.AYDevice != null) + { + SoundMixer.PinSource(_machine.AYDevice, "AY-3-3912"); + } // set audio device settings if (_machine.AYDevice != null && _machine.AYDevice.GetType() == typeof(AY38912)) { - ((AY38912)_machine.AYDevice as AY38912).PanningConfiguration = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).AYPanConfig; - _machine.AYDevice.Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).AYVolume; + ((AY38912)_machine.AYDevice).PanningConfiguration = ((ZXSpectrumSettings)settings).AYPanConfig; + _machine.AYDevice.Volume = ((ZXSpectrumSettings)settings).AYVolume; } if (_machine.BuzzerDevice != null) { - ((OneBitBeeper)_machine.BuzzerDevice as OneBitBeeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).EarVolume; + _machine.BuzzerDevice.Volume = ((ZXSpectrumSettings)settings).EarVolume; } if (_machine.TapeBuzzer != null) { - ((OneBitBeeper)_machine.TapeBuzzer as OneBitBeeper).Volume = ((ZXSpectrumSettings)settings as ZXSpectrumSettings).TapeVolume; + _machine.TapeBuzzer.Volume = ((ZXSpectrumSettings)settings).TapeVolume; } DCFilter dc = new DCFilter(SoundMixer, 512); @@ -160,7 +164,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public List _tapeInfo = new List(); public List _diskInfo = new List(); - private SoundProviderMixer SoundMixer; + private SyncSoundMixer SoundMixer; private readonly List _files; diff --git a/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs b/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs new file mode 100644 index 0000000000..2052546040 --- /dev/null +++ b/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs @@ -0,0 +1,340 @@ +using BizHawk.Emulation.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Components +{ + /// + /// ISoundProvider mixer that generates a single ISoundProvider output from multiple ISoundProvider sources + /// Currently only supports sync (not async) + /// + /// Bizhawk expects ISoundProviders to output at 44100KHz, so this is what SyncSoundMixer does. Therefore, try to make + /// sure that your child ISoundProviders also do this I guess. + /// + /// This is currently used in the ZX Spectrum and CPC cores but others may find it useful in future + /// + public sealed class SyncSoundMixer : ISoundProvider + { + /// + /// Currently attached ChildProviders + /// + private readonly List _soundProviders = new List(); + + /// + /// The final output max volume + /// + public short FinalMaxVolume + { + get { return _finalMaxVolume; } + set + { + _finalMaxVolume = value; + EqualizeVolumes(); + } + } + private short _finalMaxVolume; + + /// + /// How the sound sources are balanced against each other + /// + public SoundMixBalance MixBalanceMethod + { + get { return _mixBalanceMethod; } + set + { + _mixBalanceMethod = value; + EqualizeVolumes(); + } + } + private SoundMixBalance _mixBalanceMethod; + + /// + /// If specified the output buffer of the SyncSoundMixer will always contain this many samples + /// You should probably nearly always specify a value for this and get your ISoundProvider sources + /// to get as close to this nsamp value as possible. Otherwise the number of samples will + /// be based on the highest nsamp out of all the child providers for that specific frame + /// Useful examples: + /// 882 - 44100KHz - 50Hz + /// 735 - 44100Khz - 60Hz + /// + private int? _targetSampleCount; + + /// + /// Constructor + /// + /// Whether each providers MaxVolume is reduced to an equal share of the final max volume value + /// The final 'master' max volume + /// + /// If specified the output buffer of the SyncSoundMixer will always contain this many samples + /// If left null the output buffer will contain the highest number of samples out of each of the providers every frame + /// + public SyncSoundMixer(SoundMixBalance mixBalanceMethod = SoundMixBalance.Equalize, short maxVolume = short.MaxValue, int? targetSampleCount = null) + { + _mixBalanceMethod = mixBalanceMethod; + _finalMaxVolume = maxVolume; + _targetSampleCount = targetSampleCount; + } + + /// + /// Adds an ISoundProvider to the SyncSoundMixer + /// + /// The source ISoundProvider + /// An ident string for the ISoundProvider (useful when debugging) + /// If this is true then only half the samples should be present + public void PinSource(ISoundProvider source, string sourceDescription) + { + PinSource(source, sourceDescription, FinalMaxVolume); + } + + /// + /// Adds an ISoundProvider to the SyncSoundMixer + /// + /// The source ISoundProvider + /// An ident string for the ISoundProvider (useful when debugging) + /// The MaxVolume level for this particular ISoundProvider + /// If this is true then only half the samples should be present + public void PinSource(ISoundProvider source, string sourceDescription, short sourceMaxVolume) + { + _soundProviders.Add(new ChildProvider + { + SoundProvider = source, + ProviderDescription = sourceDescription, + MaxVolume = sourceMaxVolume + }); + + EqualizeVolumes(); + } + + /// + /// Removes an existing ISoundProvider from the SyncSoundMixer + /// + /// + public void UnPinSource(ISoundProvider source) + { + var sp = _soundProviders.Where(a => a.SoundProvider == source); + + if (sp.Count() == 1) + { + _soundProviders.Remove(sp.First()); + } + else if (sp.Count() > 1) + { + foreach (var s in sp) + { + _soundProviders.Remove(s); + } + } + + EqualizeVolumes(); + } + + /// + /// Sets each pinned sound provider's MaxVolume based on the MixBalanceMethod + /// + public void EqualizeVolumes() + { + if (_soundProviders.Count < 1) + return; + + switch (MixBalanceMethod) + { + case SoundMixBalance.Equalize: + var eachVolume = FinalMaxVolume / _soundProviders.Count; + foreach (var source in _soundProviders) + { + source.MaxVolume = eachVolume; + } + break; + case SoundMixBalance.MasterHardLimit: + foreach (var source in _soundProviders) + { + if (source.MaxVolume > FinalMaxVolume) + { + source.MaxVolume = FinalMaxVolume; + } + } + break; + } + } + + /// + /// Returns the value of the highest nsamp in the SoundProviders collection + /// + /// + private int GetHigestSampleCount() + { + var lookup = _soundProviders.OrderByDescending(x => x.InputNSamp) + .FirstOrDefault(); + + if (lookup == null) + { + return 0; + } + + return lookup.InputNSamp; + } + + #region ISoundProvider + + public bool CanProvideAsync => false; + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + foreach (var soundSource in _soundProviders) + { + soundSource.SoundProvider.DiscardSamples(); + } + } + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + // fetch samples from all the providers + foreach (var sp in _soundProviders) + { + sp.GetSamples(); + } + + nsamp = _targetSampleCount ?? GetHigestSampleCount(); + samples = new short[nsamp * 2]; + + // process the output buffers + foreach (var sp in _soundProviders) + { + sp.PrepareOutput(nsamp); + } + + // mix the child providers together + for (int i = 0; i < samples.Length; i++) + { + int sampleVal = 0; + foreach (var sp in _soundProviders) + { + if (sp.OutputBuffer[i] > sp.MaxVolume) + { + sampleVal += (short)sp.MaxVolume; + } + else + { + sampleVal += sp.OutputBuffer[i]; + } + } + + // final hard limit + if (sampleVal > (int)FinalMaxVolume) + { + sampleVal = (int)FinalMaxVolume; + } + + samples[i] = (short)sampleVal; + } + } + + #endregion + + /// + /// Instantiated for every ISoundProvider source that is added to the mixer + /// + private class ChildProvider + { + /// + /// The Child ISoundProvider + /// + public ISoundProvider SoundProvider; + + /// + /// Identification string + /// + public string ProviderDescription; + + /// + /// The max volume for this provider + /// + public int MaxVolume; + + /// + /// Stores the incoming samples + /// + public short[] InputBuffer; + + /// + /// The incoming number of samples + /// + public int InputNSamp; + + /// + /// Stores the processed samples ready for mixing + /// + public short[] OutputBuffer; + + /// + /// The output number of samples + /// + public int OutputNSamp; + + /// + /// Fetches sample data from the child ISoundProvider + /// + public void GetSamples() + { + SoundProvider.GetSamplesSync(out InputBuffer, out InputNSamp); + } + + /// + /// Ensures the output buffer is ready for mixing based on the supplied nsamp value + /// Overflow samples will be omitted and underflow samples will be empty air + /// + /// + public void PrepareOutput(int nsamp) + { + OutputNSamp = nsamp; + var outputBuffSize = OutputNSamp * 2; + + if (OutputNSamp != InputNSamp || InputBuffer.Length != outputBuffSize) + { + OutputBuffer = new short[outputBuffSize]; + + var i = 0; + while (i < InputBuffer.Length && i < outputBuffSize) + { + OutputBuffer[i] = InputBuffer[i]; + i++; + } + } + else + { + // buffer needs no modification + OutputBuffer = InputBuffer; + } + } + } + } + + /// + /// Defines how mixed sound sources should be balanced + /// + public enum SoundMixBalance + { + /// + /// Each sound source's max volume will be set to MaxVolume / nSources + /// + Equalize, + /// + /// Each sound source's individual max volume will be respected but the final MaxVolume will be limited to MaxVolume + /// + MasterHardLimit + } +} From 8995e2e977d4cb9f14f19e0b9ebf46f4023c2e48 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 6 Apr 2019 10:06:23 -0500 Subject: [PATCH 008/138] MC6809: more decoding work --- .../CPUs/MC6809/Execute.cs | 144 ++++++++--------- .../CPUs/MC6809/Indexed_Modes.cs | 114 ++++++++++++++ BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 7 + .../CPUs/MC6809/Operations.cs | 7 + .../CPUs/MC6809/Tables_Direct.cs | 147 ++++++++++++++++-- 5 files changed, 336 insertions(+), 83 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index 80a30a1d6b..c12910de69 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -180,41 +180,41 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x9A: DIRECT_MEM_4(OR8, A); break; // ORA (Direct) case 0x9B: DIRECT_MEM_4(ADD8, A); break; // ADDA (Direct) case 0x9C: DIR_CMP_16(CMP16, X); break; // CMPX (Direct) - case 0x9D: REG_OP(ADC8, A); break; // JSR (Direct) - case 0x9E: REG_OP(ADC8, A); break; // LDX (Direct) - case 0x9F: REG_OP(ADC8, A); break; // STX (Direct) - case 0xA0: REG_OP(AND8, A); break; // SUBA (Indexed) - case 0xA1: REG_OP(AND8, A); break; // CMPA (Indexed) - case 0xA2: REG_OP(AND8, A); break; // SBCA (Indexed) - case 0xA3: REG_OP(AND8, A); break; // SUBD (Indexed) - case 0xA4: REG_OP(AND8, A); break; // ANDA (Indexed) - case 0xA5: REG_OP(AND8, A); break; // BITA (Indexed) - case 0xA6: REG_OP(AND8, A); break; // LDA (Indexed) - case 0xA7: REG_OP(AND8, A); break; // STA (Indexed) - case 0xA8: REG_OP(XOR8, A); break; // EORA (Indexed) - case 0xA9: REG_OP(XOR8, A); break; // ADCA (Indexed) - case 0xAA: REG_OP(XOR8, A); break; // ORA (Indexed) - case 0xAB: REG_OP(XOR8, A); break; // ADDA (Indexed) - case 0xAC: REG_OP(XOR8, A); break; // CMPX (Indexed) - case 0xAD: REG_OP(XOR8, A); break; // JSR (Indexed) - case 0xAE: REG_OP(XOR8, A); break; // LDX (Indexed) - case 0xAF: REG_OP(XOR8, A); break; // STX (Indexed) - case 0xB0: REG_OP(AND8, A); break; // SUBA (Extended) - case 0xB1: REG_OP(AND8, A); break; // CMPA (Extended) - case 0xB2: REG_OP(AND8, A); break; // SBCA (Extended) - case 0xB3: REG_OP(AND8, A); break; // SUBD (Extended) - case 0xB4: REG_OP(AND8, A); break; // ANDA (Extended) - case 0xB5: REG_OP(AND8, A); break; // BITA (Extended) - case 0xB6: REG_OP(AND8, A); break; // LDA (Extended) - case 0xB7: REG_OP(AND8, A); break; // STA (Extended) - case 0xB8: REG_OP(XOR8, A); break; // EORA (Extended) - case 0xB9: REG_OP(XOR8, A); break; // ADCA (Extended) - case 0xBA: REG_OP(XOR8, A); break; // ORA (Extended) - case 0xBB: REG_OP(XOR8, A); break; // ADDA (Extended) - case 0xBC: REG_OP(XOR8, A); break; // CMPX (Extended) - case 0xBD: REG_OP(XOR8, A); break; // JSR (Extended) - case 0xBE: REG_OP(XOR8, A); break; // LDX (Extended) - case 0xBF: REG_OP(XOR8, A); break; // STX (Extended) + case 0x9D: REG_OP(ADC8, A); break; // JSR (Direct) + case 0x9E: DIR_OP_LD_16(X); break; // LDX (Direct) + case 0x9F: DIR_OP_ST_16(X); break; // STX (Direct) + case 0xA0: INDEX_OP_REG(I_SUB, A); break; // SUBA (Indexed) + case 0xA1: INDEX_OP_REG(I_CMP, A); break; // CMPA (Indexed) + case 0xA2: INDEX_OP_REG(I_SBC, A); break; // SBCA (Indexed) + case 0xA3: INDEX_OP_REG(I_SUBD, D); break; // SUBD (Indexed) + case 0xA4: INDEX_OP_REG(I_AND, A); break; // ANDA (Indexed) + case 0xA5: INDEX_OP_REG(I_BIT, A); break; // BITA (Indexed) + case 0xA6: INDEX_OP_REG(I_LD, A); break; // LDA (Indexed) + case 0xA7: INDEX_OP_REG(I_ST, A); break; // STA (Indexed) + case 0xA8: INDEX_OP_REG(I_XOR, A); break; // EORA (Indexed) + case 0xA9: INDEX_OP_REG(I_ADC, A); break; // ADCA (Indexed) + case 0xAA: INDEX_OP_REG(I_OR, A); break; // ORA (Indexed) + case 0xAB: INDEX_OP_REG(I_ADD, A); break; // ADDA (Indexed) + case 0xAC: INDEX_OP_REG(I_CMP16, X); break; // CMPX (Indexed) + case 0xAD: INDEX_OP(I_JSR); break; // JSR (Indexed) + case 0xAE: INDEX_OP_REG(I_LD16, X); break; // LDX (Indexed) + case 0xAF: INDEX_OP_REG(I_ST16, X); break; // STX (Indexed) + case 0xB0: EXT_REG(SUB8, A); break; // SUBA (Extended) + case 0xB1: EXT_REG(CMP8, A); break; // CMPA (Extended) + case 0xB2: EXT_REG(SBC8, A); break; // SBCA (Extended) + case 0xB3: EXT_OP_D(SUB16, D); break; // SUBD (Extended) + case 0xB4: EXT_REG(AND8, A); break; // ANDA (Extended) + case 0xB5: EXT_REG(BIT, A); break; // BITA (Extended) + case 0xB6: EXT_REG(TR, A); break; // LDA (Extended) + case 0xB7: EXT_ST(A); break; // STA (Extended) + case 0xB8: EXT_REG(XOR8, A); break; // EORA (Extended) + case 0xB9: EXT_REG(ADC8, A); break; // ADCA (Extended) + case 0xBA: EXT_REG(OR8, A); break; // ORA (Extended) + case 0xBB: EXT_REG(ADD8, A); break; // ADDA (Extended) + case 0xBC: EXT_CMP_16(CMP16, X); break; // CMPX (Extended) + case 0xBD: JSR_EXT(); break; // JSR (Extended) + case 0xBE: EXT_OP_LD_16(X); break; // LDX (Extended) + case 0xBF: EXT_OP_ST_16(X); break; // STX (Extended) case 0xC0: REG_OP_IMD(SUB8, B); break; // SUBB (Immediate) case 0xC1: REG_OP_IMD(CMP8, B); break; // CMPB (Immediate) case 0xC2: REG_OP_IMD(SBC8, B); break; // SBCB (Immediate) @@ -227,7 +227,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xC9: REG_OP_IMD(ADC8, B); break; // ADCB (Immediate) case 0xCA: REG_OP_IMD(OR8, B); break; // ORB (Immediate) case 0xCB: REG_OP_IMD(ADD8, B); break; // ADDB (Immediate) - case 0xCC: REG_OP_LD_16D(D); break; // LDD (Immediate) + case 0xCC: REG_OP_LD_16D(); break; // LDD (Immediate) case 0xCD: ILLEGAL(); break; // ILLEGAL case 0xCE: REG_OP_LD_16(US); break; // LDU (Immediate) case 0xCF: ILLEGAL(); break; // ILLEGAL @@ -243,42 +243,42 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xD9: DIRECT_MEM_4(ADC8, B); break; // ADCB (Direct) case 0xDA: DIRECT_MEM_4(OR8, B); break; // ORB (Direct) case 0xDB: DIRECT_MEM_4(ADD8, B); break; // ADDB (Direct) - case 0xDC: DIRECT_MEM_4(ADC8, B); break; // LDD (Direct) - case 0xDD: DIRECT_MEM_4(ADC8, B); break; // STD (Direct) - case 0xDE: REG_OP(ADC8, B); break; // LDU (Direct) - case 0xDF: REG_OP(ADC8, B); break; // STU (Direct) - case 0xE0: REG_OP(AND8, B); break; // SUBB (Indexed) - case 0xE1: REG_OP(AND8, B); break; // CMPB (Indexed) - case 0xE2: REG_OP(AND8, B); break; // SBCB (Indexed) - case 0xE3: REG_OP(AND8, B); break; // ADDD (Indexed) - case 0xE4: REG_OP(AND8, B); break; // ANDB (Indexed) - case 0xE5: REG_OP(AND8, B); break; // BITB (Indexed) - case 0xE6: REG_OP(AND8, B); break; // LDB (Indexed) - case 0xE7: REG_OP(AND8, B); break; // STB (Indexed) - case 0xE8: REG_OP(XOR8, B); break; // EORB (Indexed) - case 0xE9: REG_OP(XOR8, B); break; // ADCB (Indexed) - case 0xEA: REG_OP(XOR8, B); break; // ORB (Indexed) - case 0xEB: REG_OP(XOR8, B); break; // ADDB (Indexed) - case 0xEC: REG_OP(XOR8, B); break; // LDD (Indexed) - case 0xED: REG_OP(XOR8, B); break; // STD (Indexed) - case 0xEE: REG_OP(XOR8, B); break; // LDU (Indexed) - case 0xEF: REG_OP(XOR8, B); break; // STU (Indexed) - case 0xF0: REG_OP(AND8, B); break; // SUBB (Extended) - case 0xF1: REG_OP(AND8, B); break; // CMPB (Extended) - case 0xF2: REG_OP(AND8, B); break; // SBCB (Extended) - case 0xF3: REG_OP(AND8, B); break; // ADDD (Extended) - case 0xF4: REG_OP(AND8, B); break; // ANDB (Extended) - case 0xF5: REG_OP(AND8, B); break; // BITB (Extended) - case 0xF6: REG_OP(AND8, B); break; // LDB (Extended) - case 0xF7: REG_OP(AND8, B); break; // STB (Extended) - case 0xF8: REG_OP(XOR8, B); break; // EORB (Extended) - case 0xF9: REG_OP(XOR8, B); break; // ADCB (Extended) - case 0xFA: REG_OP(XOR8, B); break; // ORB (Extended) - case 0xFB: REG_OP(XOR8, B); break; // ADDB (Extended) - case 0xFC: REG_OP(XOR8, B); break; // LDD (Extended) - case 0xFD: REG_OP(XOR8, B); break; // STD (Extended) - case 0xFE: REG_OP(XOR8, B); break; // LDU (Extended) - case 0xFF: REG_OP(XOR8, B); break; // STU (Extended) + case 0xDC: DIR_OP_LD_16D(); break; // LDD (Direct) + case 0xDD: DIR_OP_ST_16D(); break; // STD (Direct) + case 0xDE: DIR_OP_LD_16(US); break; // LDU (Direct) + case 0xDF: DIR_OP_ST_16(US); break; // STU (Direct) + case 0xE0: INDEX_OP_REG(I_SUB, B); break; // SUBB (Indexed) + case 0xE1: INDEX_OP_REG(I_CMP, B); break; // CMPB (Indexed) + case 0xE2: INDEX_OP_REG(I_SBC, B); break; // SBCB (Indexed) + case 0xE3: INDEX_OP_REG(I_ADDD, D); break; // ADDD (Indexed) + case 0xE4: INDEX_OP_REG(I_AND, B); break; // ANDB (Indexed) + case 0xE5: INDEX_OP_REG(I_BIT, B); break; // BITB (Indexed) + case 0xE6: INDEX_OP_REG(I_LD, B); break; // LDB (Indexed) + case 0xE7: INDEX_OP_REG(I_ST, B); break; // STB (Indexed) + case 0xE8: INDEX_OP_REG(I_XOR, B); break; // EORB (Indexed) + case 0xE9: INDEX_OP_REG(I_ADC, B); break; // ADCB (Indexed) + case 0xEA: INDEX_OP_REG(I_OR, B); break; // ORB (Indexed) + case 0xEB: INDEX_OP_REG(I_ADD, B); break; // ADDB (Indexed) + case 0xEC: INDEX_OP_REG(I_LD16D, D); break; // LDD (Indexed) + case 0xED: INDEX_OP_REG(I_ST16D, D); break; // STD (Indexed) + case 0xEE: INDEX_OP_REG(I_LD16, US); break; // LDU (Indexed) + case 0xEF: INDEX_OP_REG(I_ST16, US); break; // STU (Indexed) + case 0xF0: EXT_REG(SUB8, B); break; // SUBB (Extended) + case 0xF1: EXT_REG(CMP8, B); break; // CMPB (Extended) + case 0xF2: EXT_REG(SBC8, B); break; // SBCB (Extended) + case 0xF3: EXT_OP_D(ADD16, D); break; // ADDD (Extended) + case 0xF4: EXT_REG(AND8, B); break; // ANDB (Extended) + case 0xF5: EXT_REG(BIT, B); break; // BITB (Extended) + case 0xF6: EXT_REG(TR, B); break; // LDB (Extended) + case 0xF7: EXT_ST(B); break; // STB (Extended) + case 0xF8: EXT_REG(XOR8, B); break; // EORB (Extended) + case 0xF9: EXT_REG(ADC8, B); break; // ADCB (Extended) + case 0xFA: EXT_REG(OR8, B); break; // ORB (Extended) + case 0xFB: EXT_REG(ADD8, B); break; // ADDB (Extended) + case 0xFC: EXT_OP_LD_16D(); break; // LDD (Extended) + case 0xFD: EXT_OP_ST_16D(); break; // STD (Extended) + case 0xFE: EXT_OP_LD_16(US); break; // LDU (Extended) + case 0xFF: EXT_OP_ST_16(US); break; // STU (Extended) } } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 51ceca997c..209fe71fcc 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -20,9 +20,29 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort I_TST = 13; public const ushort I_JMP = 14; public const ushort I_CLR = 15; + public const ushort I_SUB = 16; + public const ushort I_CMP = 17; + public const ushort I_SBC = 18; + public const ushort I_AND = 19; + public const ushort I_BIT = 20; + public const ushort I_LD = 21; + public const ushort I_ST = 22; + public const ushort I_XOR = 23; + public const ushort I_ADC = 24; + public const ushort I_OR = 25; + public const ushort I_ADD = 26; + public const ushort I_SUBD = 27; + public const ushort I_ADDD = 28; + public const ushort I_CMP16 = 29; + public const ushort I_JSR = 30; + public const ushort I_LD16 = 31; + public const ushort I_ST16 = 32; + public const ushort I_LD16D = 33; + public const ushort I_ST16D = 34; public ushort indexed_op; public ushort indexed_reg; + public ushort indexed_op_reg; public ushort temp; @@ -33,17 +53,74 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); } + private void INDEX_OP_REG(ushort oper, ushort src) + { + indexed_op = oper; + indexed_op_reg = src; + + PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); + } + private void INDEX_OP_JMP() { PopulateCURINSTR(TR, PC, IDX_EA); } + private void INDEX_OP_JSR() + { + PopulateCURINSTR(IDLE, + IDLE, + TR, PC, IDX_EA, + WR_DEC_LO, SP, ADDR, + WR_HI, SP, ADDR); + } + private void INDEX_OP_LEA(ushort dest) { PopulateCURINSTR(TR, dest, IDX_EA, IDLE); } + private void INDEX_OP_LD() + { + PopulateCURINSTR(IDLE, + RD_INC, ALU, IDX_EA, + RD_INC_OP, ALU2, IDX_EA, SET_ADDR, indexed_op_reg, ALU, ALU2); + } + + private void INDEX_OP_ST() + { + PopulateCURINSTR(IDLE, + WR_HI_INC, IDX_EA, indexed_op_reg, + WR_DEC_LO, IDX_EA, indexed_op_reg); + } + + private void INDEX_OP_LDD() + { + PopulateCURINSTR(IDLE, + RD_INC, A, IDX_EA, + RD_INC, B, IDX_EA); + } + + private void INDEX_OP_STD() + { + PopulateCURINSTR(SET_ADDR, ADDR, A, A, + WR_HI_INC, IDX_EA, ADDR, + WR_DEC_LO, IDX_EA, B); + } + + private void INDEX_OP_EX4(ushort oper) + { + PopulateCURINSTR(IDLE, + RD_INC_OP, ALU, IDX_EA, oper, indexed_op_reg, ALU); + } + + private void INDEX_OP_EX4_ST() + { + PopulateCURINSTR(IDLE, + WR, ALU, IDX_EA, indexed_op_reg); + } + private void INDEX_OP_EX5() { PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); @@ -57,6 +134,24 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR, IDX_EA, ALU); } + private void INDEX_OP_EX6D(ushort oper) + { + PopulateCURINSTR(IDLE, + RD_INC, ALU, IDX_EA, + RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, + oper, ADDR); + } + + private void INDEX_CMP_EX6(ushort oper) + { + PopulateCURINSTR(IDLE, + RD_INC, ALU, IDX_EA, + RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, + oper, indexed_op_reg, ADDR); + } + + + private void INDEX_OP_EX7() { PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); @@ -310,6 +405,25 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case I_TST: INDEX_OP_EX6(TST); break; // TST case I_JMP: INDEX_OP_JMP(); break; // JMP case I_CLR: INDEX_OP_EX6(CLR); break; // CLR + case I_SUB: INDEX_OP_EX4(SUB8); break; // SUB A,B + case I_CMP: INDEX_OP_EX4(CMP8); break; // CMP A,B + case I_SBC: INDEX_OP_EX4(SBC8); break; // SBC A,B + case I_AND: INDEX_OP_EX4(AND8); break; // AND A,B + case I_BIT: INDEX_OP_EX4(BIT); break; // BIT A,B + case I_LD: INDEX_OP_EX4(TR); break; // LD A,B + case I_ST: INDEX_OP_EX4_ST(); break; // ST A,B + case I_XOR: INDEX_OP_EX4(XOR8); break; // XOR A,B + case I_ADC: INDEX_OP_EX4(ADC8); break; // ADC A,B + case I_OR: INDEX_OP_EX4(OR8); break; // OR A,B + case I_ADD: INDEX_OP_EX4(ADD8); break; // ADD A,B + case I_SUBD: INDEX_OP_EX6D(SUB16); break; // SUB D + case I_ADDD: INDEX_OP_EX6D(ADD16); break; // ADD D + case I_CMP16: INDEX_CMP_EX6(CMP16); break; // CMP X, Y, SP, US + case I_JSR: INDEX_OP_JSR(); break; // JSR + case I_LD16: INDEX_OP_LD(); break; // LD X, Y, SP, US + case I_ST16: INDEX_OP_ST(); break; // ST X, Y, SP, US + case I_LD16D: INDEX_OP_LDD(); break; // LD D + case I_ST16D: INDEX_OP_STD(); break; // ST D } } } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 600954d0eb..5e666ac852 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -91,6 +91,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort SUB16 = 77; public const ushort ADD16 = 78; public const ushort CMP16 = 79; + public const ushort WR_HI_INC = 80; public MC6809() { @@ -244,6 +245,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case CMP8: CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case DEC16: + DEC16_Func(cur_instr[instr_pntr++]); + break; case TR: TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; @@ -302,6 +306,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case WR_HI: Write_Hi_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case WR_HI_INC: + Write_Hi_Inc_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case TR: TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index bd38590322..7aea2f6c11 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -78,6 +78,13 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WriteMemory(Regs[dest], (byte)(Regs[src] >> 8)); } + public void Write_Hi_Inc_Func(ushort dest, ushort src) + { + if (CDLCallback != null) CDLCallback(Regs[dest], eCDLogMemFlags.Write | eCDLogMemFlags.Data); + WriteMemory(Regs[dest], (byte)(Regs[src] >> 8)); + Regs[dest]++; + } + public void TR_Func(ushort dest, ushort src) { Regs[dest] = Regs[src]; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs index 5291a93845..20b44091e1 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs @@ -23,6 +23,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } + private void REG_OP(ushort oper, ushort src) + { + PopulateCURINSTR(oper, src); + } + private void DIRECT_MEM(ushort oper) { PopulateCURINSTR(RD_INC, ALU, PC, @@ -35,15 +40,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void DIRECT_ST_4(ushort dest) { PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, - RD, ALU, ADDR, + IDLE, WR, ADDR, dest); } private void DIRECT_MEM_4(ushort oper, ushort dest) { PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, - RD, ALU, ADDR, - oper, dest, ALU); + IDLE, + RD_INC_OP, ALU, ADDR, oper, dest, ALU); } private void EXT_MEM(ushort oper) @@ -56,6 +61,22 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR, ADDR, ALU); } + private void EXT_REG(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + RD, ALU, ADDR, + oper, dest, ALU); + } + + private void EXT_ST(ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + IDLE, + WR, ADDR, dest); + } + private void REG_OP_IMD_CC(ushort oper) { Regs[ALU2] = Regs[CC]; @@ -84,6 +105,38 @@ namespace BizHawk.Emulation.Common.Components.MC6809 oper, ADDR); } + private void EXT_OP_D(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + RD_INC, ALU, ADDR, + RD, ALU2, ADDR, + SET_ADDR, ADDR, ALU, ALU2, + oper, ADDR); + } + + private void REG_OP_LD_16D() + { + PopulateCURINSTR(RD_INC, A, PC, + RD_INC, B, PC); + } + + private void DIR_OP_LD_16D() + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + IDLE, + RD_INC, A, ADDR, + RD_INC, B, ADDR); + } + + private void DIR_OP_ST_16D() + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + SET_ADDR, ALU, A, A, + WR_HI_INC, ADDR, ALU, + WR, ADDR, B); + } + private void DIR_CMP_16(ushort oper, ushort dest) { PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, @@ -99,10 +152,66 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, PC, SET_ADDR, dest, ALU, ALU2); } - private void REG_OP_LD_16D(ushort dest) + private void DIR_OP_LD_16(ushort dest) { - PopulateCURINSTR(RD_INC, A, PC, - RD_INC, B, PC); + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + IDLE, + RD_INC, ALU, ADDR, + RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + } + + private void DIR_OP_ST_16(ushort src) + { + PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, + IDLE, + WR_HI_INC, ADDR, src, + WR_DEC_LO, ADDR, src); + } + + private void EXT_OP_LD_16(ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + IDLE, + RD_INC, ALU, ADDR, + RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + } + + private void EXT_OP_ST_16(ushort src) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + IDLE, + WR_HI_INC, ADDR, src, + WR_DEC_LO, ADDR, src); + } + + private void EXT_OP_LD_16D() + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + IDLE, + RD_INC, A, ADDR, + RD_INC, B, ADDR); + } + + private void EXT_OP_ST_16D() + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + SET_ADDR, ALU, A, A, + WR_HI_INC, ADDR, ALU, + WR, ADDR, B); + } + + private void EXT_CMP_16(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + RD_INC, ALU, ADDR, + RD, ALU2, ADDR, + SET_ADDR, ADDR, ALU, ALU2, + oper, dest, ADDR); } private void EXG_() @@ -125,11 +234,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE); } - private void REG_OP(ushort oper, ushort src) - { - PopulateCURINSTR(oper, src); - } - private void JMP_DIR_() { PopulateCURINSTR(RD_INC, ALU, PC, @@ -143,6 +247,27 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SET_ADDR, PC, ALU, ALU2); } + private void JSR_() + { + PopulateCURINSTR(RD_INC, ALU, PC, + SET_ADDR, ADDR, DP, ALU, + IDLE, + TR, PC, ADDR, + WR_DEC_LO, SP, ADDR, + WR_HI, SP, ADDR); + } + + private void JSR_EXT() + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, + SET_ADDR, ADDR, ALU, ALU2, + IDLE, + TR, PC, ADDR, + WR_DEC_LO, SP, ADDR, + WR_HI, SP, ADDR); + } + private void LBR_(bool cond) { if (cond) From 87214c252d6bc3a9fc7b92a838bc4109eb5c38ba Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 6 Apr 2019 15:16:53 -0500 Subject: [PATCH 009/138] MC6809; finish instruction decoding --- .../CPUs/MC6809/Execute.cs | 104 ++++----- .../CPUs/MC6809/Indexed_Modes.cs | 2 + BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 217 +++++++----------- .../CPUs/MC6809/Operations.cs | 102 ++------ .../CPUs/MC6809/Registers.cs | 1 - .../CPUs/MC6809/Tables_Direct.cs | 136 +++-------- 6 files changed, 186 insertions(+), 376 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index c12910de69..74c63d4428 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -4,11 +4,10 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { public partial class MC6809 { - private ulong totalExecutedCycles; - public ulong TotalExecutedCycles { get { return totalExecutedCycles; } set { totalExecutedCycles = value; } } + public ulong TotalExecutedCycles; - private int EI_pending; - private bool interrupts_enabled; + public int EI_pending; + public bool interrupts_enabled; // variables for executing instructions public int instr_pntr = 0; @@ -17,7 +16,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public bool halted; public bool stopped; public bool jammed; - public int LY; public void FetchInstruction(byte opcode) { @@ -163,7 +161,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x89: REG_OP_IMD(ADC8, A); break; // ADCA (Immediate) case 0x8A: REG_OP_IMD(OR8, A); break; // ORA (Immediate) case 0x8B: REG_OP_IMD(ADD8, A); break; // ADDA (Immediate) - case 0x8C: REG_OP_IMD(ADC8, A); break; // CMPX (Immediate) + case 0x8C: IMD_CMP_16(CMP16, X); break; // CMPX (Immediate) case 0x8D: BSR_(); break; // BSR (Relative) case 0x8E: REG_OP_LD_16(X); break; // LDX (Immediate) case 0x8F: ILLEGAL(); break; // ILLEGAL @@ -286,44 +284,44 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { switch (opcode) { - case 0x21: REG_OP(XOR8, B); break; // LBRN (Relative) - case 0x22: REG_OP(XOR8, B); break; // LBHI (Relative) - case 0x23: REG_OP(XOR8, B); break; // LBLS (Relative) - case 0x24: REG_OP(XOR8, B); break; // LBHS , LBCC (Relative) - case 0x25: REG_OP(XOR8, B); break; // LBCS , LBLO (Relative) - case 0x26: REG_OP(XOR8, B); break; // LBNE (Relative) - case 0x27: REG_OP(XOR8, B); break; // LBEQ (Relative) - case 0x28: REG_OP(XOR8, B); break; // LBVC (Relative) - case 0x29: REG_OP(XOR8, B); break; // LBVS (Relative) - case 0x2A: REG_OP(XOR8, B); break; // LBPL (Relative) - case 0x2B: REG_OP(XOR8, B); break; // LBMI (Relative) - case 0x2C: REG_OP(XOR8, B); break; // LBGE (Relative) - case 0x2D: REG_OP(XOR8, B); break; // LBLT (Relative) - case 0x2E: REG_OP(XOR8, B); break; // LBGT (Relative) - case 0x2F: REG_OP(XOR8, B); break; // LBLE (Relative) - case 0x3F: REG_OP(XOR8, B); break; // SWI2 (Inherent) - case 0x83: REG_OP(XOR8, B); break; // CMPD (Immediate) - case 0x8C: REG_OP(XOR8, B); break; // CMPY (Immediate) - case 0x8E: REG_OP(XOR8, B); break; // LDY (Immediate) - case 0x93: REG_OP(XOR8, B); break; // CMPD (Direct) - case 0x9C: REG_OP(XOR8, B); break; // CMPY (Direct) - case 0x9E: REG_OP(XOR8, B); break; // LDY (Direct) - case 0x9F: REG_OP(XOR8, B); break; // STY (Direct) - case 0xA3: REG_OP(XOR8, B); break; // CMPD (Indexed) - case 0xAC: REG_OP(XOR8, B); break; // CMPY (Indexed) - case 0xAE: REG_OP(XOR8, B); break; // LDY (Indexed) - case 0xAF: REG_OP(XOR8, B); break; // STY (Indexed) - case 0xB3: REG_OP(XOR8, B); break; // CMPD (Extended) - case 0xBC: REG_OP(XOR8, B); break; // CMPY (Extended) - case 0xBE: REG_OP(XOR8, B); break; // LDY (Extended) - case 0xBF: REG_OP(XOR8, B); break; // STY (Extended) - case 0xCE: REG_OP(XOR8, B); break; // LDS (Immediate) - case 0xDE: REG_OP(XOR8, B); break; // LDS (Direct) - case 0xDF: REG_OP(XOR8, B); break; // STS (Direct) - case 0xEE: REG_OP(XOR8, B); break; // LDS (Indexed) - case 0xEF: REG_OP(XOR8, B); break; // STS (Indexed) - case 0xFE: REG_OP(XOR8, B); break; // LDS (Extended) - case 0xFF: REG_OP(XOR8, B); break; // STS (Extended) + case 0x21: LBR_(false); break; // BRN (Relative) + case 0x22: LBR_(!(FlagC | FlagZ)); break; // BHI (Relative) + case 0x23: LBR_(FlagC | FlagZ); break; // BLS (Relative) + case 0x24: LBR_(!FlagC); break; // BHS , BCC (Relative) + case 0x25: LBR_(FlagC); break; // BLO , BCS (Relative) + case 0x26: LBR_(!FlagZ); break; // BNE (Relative) + case 0x27: LBR_(FlagZ); break; // BEQ (Relative) + case 0x28: LBR_(!FlagV); break; // BVC (Relative) + case 0x29: LBR_(FlagV); break; // BVS (Relative) + case 0x2A: LBR_(!FlagN); break; // BPL (Relative) + case 0x2B: LBR_(FlagN); break; // BMI (Relative) + case 0x2C: LBR_(FlagN == FlagV); break; // BGE (Relative) + case 0x2D: LBR_(FlagN ^ FlagV); break; // BLT (Relative) + case 0x2E: LBR_((!FlagZ) & (FlagN == FlagV)); break; // BGT (Relative) + case 0x2F: LBR_(FlagZ | (FlagN ^ FlagV)); break; // BLE (Relative) + case 0x3F: SWI2_3(2); break; // SWI2 (Inherent) + case 0x83: IMD_OP_D(CMP16D, D); break; // CMPD (Immediate) + case 0x8C: IMD_CMP_16(CMP16, Y); break; // CMPY (Immediate) + case 0x8E: REG_OP_LD_16(Y); break; // LDY (Immediate) + case 0x93: DIR_OP_D(CMP16D, D); break; // CMPD (Direct) + case 0x9C: DIR_CMP_16(CMP16, Y); break; // CMPY (Direct) + case 0x9E: DIR_OP_LD_16(Y); break; // LDY (Direct) + case 0x9F: DIR_OP_ST_16(Y); break; // STY (Direct) + case 0xA3: INDEX_OP_REG(I_CMP16D, D); break; // CMPD (Indexed) + case 0xAC: INDEX_OP_REG(I_CMP16, Y); break; // CMPY (Indexed) + case 0xAE: INDEX_OP_REG(I_LD16, Y); break; // LDY (Indexed) + case 0xAF: INDEX_OP_REG(I_ST16, Y); break; // STY (Indexed) + case 0xB3: EXT_OP_D(CMP16D, D); break; // CMPD (Extended) + case 0xBC: EXT_CMP_16(CMP16, Y); break; // CMPY (Extended) + case 0xBE: EXT_OP_LD_16(Y); break; // LDY (Extended) + case 0xBF: EXT_OP_ST_16(Y); break; // STY (Extended) + case 0xCE: REG_OP_LD_16(SP); break; // LDS (Immediate) + case 0xDE: DIR_OP_LD_16(SP); break; // LDS (Direct) + case 0xDF: DIR_OP_ST_16(SP); break; // STS (Direct) + case 0xEE: INDEX_OP_REG(I_LD16, SP); break; // LDS (Indexed) + case 0xEF: INDEX_OP_REG(I_ST16, SP); break; // STS (Indexed) + case 0xFE: EXT_OP_LD_16(SP); break; // LDS (Extended) + case 0xFF: EXT_OP_ST_16(SP); break; // STS (Extended) default: ILLEGAL(); break; } @@ -333,15 +331,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { switch (opcode) { - case 0x3F: REG_OP(XOR8, B); break; // SWI3 (Inherent) - case 0x83: REG_OP(XOR8, B); break; // CMPU (Immediate) - case 0x8C: REG_OP(XOR8, B); break; // CMPS (Immediate) - case 0x93: REG_OP(XOR8, B); break; // CMPU (Direct) - case 0x9C: REG_OP(XOR8, B); break; // CMPS (Direct) - case 0xA3: REG_OP(XOR8, B); break; // CMPU (Indexed) - case 0xAC: REG_OP(XOR8, B); break; // CMPS (Indexed) - case 0xB3: REG_OP(XOR8, B); break; // CMPU (Extended) - case 0xBC: REG_OP(XOR8, B); break; // CMPS (Extended) + case 0x3F: SWI2_3(3); break; // SWI3 (Inherent) + case 0x83: IMD_CMP_16(CMP16, US); break; // CMPU (Immediate) + case 0x8C: IMD_CMP_16(CMP16, SP); break; // CMPS (Immediate) + case 0x93: DIR_CMP_16(CMP16, US); break; // CMPU (Direct) + case 0x9C: DIR_CMP_16(CMP16, SP); break; // CMPS (Direct) + case 0xA3: INDEX_OP_REG(I_CMP16, US); break; // CMPU (Indexed) + case 0xAC: INDEX_OP_REG(I_CMP16, SP); break; // CMPS (Indexed) + case 0xB3: EXT_CMP_16(CMP16, US); break; // CMPU (Extended) + case 0xBC: EXT_CMP_16(CMP16, SP); break; // CMPS (Extended) default: ILLEGAL(); break; } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 209fe71fcc..6c73502f15 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -39,6 +39,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort I_ST16 = 32; public const ushort I_LD16D = 33; public const ushort I_ST16D = 34; + public const ushort I_CMP16D = 35; public ushort indexed_op; public ushort indexed_reg; @@ -424,6 +425,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case I_ST16: INDEX_OP_ST(); break; // ST X, Y, SP, US case I_LD16D: INDEX_OP_LDD(); break; // LD D case I_ST16D: INDEX_OP_STD(); break; // ST D + case I_CMP16D: INDEX_OP_EX6D(CMP16D); break; // CMP D } } } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 5e666ac852..46cf75b82b 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -1,10 +1,6 @@ using System; -using System.Globalization; -using System.IO; using BizHawk.Common; -using BizHawk.Emulation.Common; -using BizHawk.Common.NumberExtensions; // Motorola Corp 6809 namespace BizHawk.Emulation.Common.Components.MC6809 @@ -26,72 +22,58 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort INC8 = 11; public const ushort DEC16 = 12; public const ushort DEC8 = 13; - public const ushort RLC = 14; - public const ushort ROL = 15; - public const ushort RRC = 16; - public const ushort ROR = 17; - public const ushort COM = 18; - public const ushort DA = 19; - public const ushort SCF = 20; - public const ushort CCF = 21; - public const ushort AND8 = 22; - public const ushort XOR8 = 23; - public const ushort OR8 = 24; - public const ushort CP8 = 25; - public const ushort ASL = 26; - public const ushort ASR = 27; - public const ushort LSR = 28; - public const ushort SWAP = 29; - public const ushort BIT = 30; - public const ushort RES = 31; - public const ushort SET = 32; - public const ushort EI = 33; - public const ushort DI = 34; - public const ushort CWAI = 35; - public const ushort STOP = 36; - public const ushort ASGN = 38; - public const ushort ADDS = 39; // signed 16 bit operation used in 2 instructions - public const ushort OP_G = 40; // glitchy opcode read performed by halt when interrupts disabled - public const ushort JAM = 41; // all undocumented opcodes jam the machine - public const ushort RD_F = 42; // special read case to pop value into F - public const ushort EI_RETI = 43; // reti has no delay in interrupt enable - public const ushort INT_GET = 44; - public const ushort HALT_CHK = 45; // when in halt mode, actually check I Flag here - public const ushort RD_INC = 46; - public const ushort SET_ADDR = 47; - public const ushort NEG = 48; - public const ushort TST = 49; - public const ushort CLR = 50; - public const ushort OP_PG_2 = 51; - public const ushort OP_PG_3 = 52; - public const ushort SEX = 53; - public const ushort RD_INC_OP = 54; - public const ushort EXG = 55; - public const ushort TFR = 56; - public const ushort WR_DEC_LO = 57; - public const ushort WR_DEC_HI = 58; - public const ushort WR_HI = 59; - public const ushort ADD8BR = 60; - public const ushort ABX = 61; - public const ushort MUL = 62; - public const ushort JPE = 63; - public const ushort IDX_DCDE = 64; - public const ushort IDX_OP_BLD = 65; - public const ushort EA_8 = 66; - public const ushort EA_16 = 67; - public const ushort PSH_n = 68; - public const ushort PUL_n = 69; - public const ushort WR_DEC_LO_OP = 70; - public const ushort WR_DEC_HI_OP = 71; - public const ushort SET_ADDR_PUL = 72; - public const ushort SET_F_I = 73; - public const ushort SET_E = 74; - public const ushort ANDCC = 75; - public const ushort CMP8 = 76; - public const ushort SUB16 = 77; - public const ushort ADD16 = 78; - public const ushort CMP16 = 79; - public const ushort WR_HI_INC = 80; + public const ushort ROL = 14; + public const ushort ROR = 15; + public const ushort COM = 16; + public const ushort DA = 17; + public const ushort AND8 = 18; + public const ushort XOR8 = 19; + public const ushort OR8 = 20; + public const ushort CP8 = 21; + public const ushort ASL = 22; + public const ushort ASR = 23; + public const ushort LSR = 24; + public const ushort BIT = 25; + public const ushort CWAI = 26; + public const ushort SYNC = 27; + public const ushort INT_GET = 28; + public const ushort HALT_CHK = 29; // when in halt mode, actually check I Flag here + public const ushort RD_INC = 30; + public const ushort SET_ADDR = 31; + public const ushort NEG = 32; + public const ushort TST = 33; + public const ushort CLR = 34; + public const ushort OP_PG_2 = 35; + public const ushort OP_PG_3 = 36; + public const ushort SEX = 37; + public const ushort RD_INC_OP = 38; + public const ushort EXG = 39; + public const ushort TFR = 40; + public const ushort WR_DEC_LO = 41; + public const ushort WR_DEC_HI = 42; + public const ushort WR_HI = 43; + public const ushort ADD8BR = 44; + public const ushort ABX = 45; + public const ushort MUL = 46; + public const ushort JPE = 47; + public const ushort IDX_DCDE = 48; + public const ushort IDX_OP_BLD = 49; + public const ushort EA_8 = 50; + public const ushort EA_16 = 51; + public const ushort PSH_n = 52; + public const ushort PUL_n = 53; + public const ushort WR_DEC_LO_OP = 54; + public const ushort WR_DEC_HI_OP = 55; + public const ushort SET_ADDR_PUL = 56; + public const ushort SET_F_I = 57; + public const ushort SET_E = 58; + public const ushort ANDCC = 59; + public const ushort CMP8 = 60; + public const ushort SUB16 = 61; + public const ushort ADD16 = 62; + public const ushort CMP16 = 63; + public const ushort CMP16D = 64; + public const ushort WR_HI_INC = 65; public MC6809() { @@ -156,7 +138,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 }; // Execute instructions - public void ExecuteOne(ref byte interrupt_src, byte interrupt_enable) + public void ExecuteOne() { switch (cur_instr[instr_pntr++]) { @@ -248,9 +230,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case DEC16: DEC16_Func(cur_instr[instr_pntr++]); break; - case TR: - TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case SET_ADDR: Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[cur_instr[instr_pntr++]] << 8) | Regs[cur_instr[instr_pntr++]]); break; @@ -383,7 +362,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case INC16: - INC16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + INC16_Func(cur_instr[instr_pntr++]); break; case INC8: INC8_Func(cur_instr[instr_pntr++]); @@ -400,18 +379,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case CMP16: CMP16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case CMP16D: + CMP16D_Func(cur_instr[instr_pntr++]); + break; case DEC8: DEC8_Func(cur_instr[instr_pntr++]); break; - case RLC: - RLC_Func(cur_instr[instr_pntr++]); - break; case ROL: ROL_Func(cur_instr[instr_pntr++]); break; - case RRC: - RRC_Func(cur_instr[instr_pntr++]); - break; case ROR: ROR_Func(cur_instr[instr_pntr++]); break; @@ -421,12 +397,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case DA: DA_Func(cur_instr[instr_pntr++]); break; - case SCF: - SCF_Func(cur_instr[instr_pntr++]); - break; - case CCF: - CCF_Func(cur_instr[instr_pntr++]); - break; case AND8: AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; @@ -448,55 +418,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case LSR: LSR_Func(cur_instr[instr_pntr++]); break; - case SWAP: - SWAP_Func(cur_instr[instr_pntr++]); - break; case BIT: BIT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - case RES: - RES_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - case SET: - SET_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - case EI: - if (EI_pending == 0) { EI_pending = 2; } - break; - case DI: - interrupts_enabled = false; - EI_pending = 0; - break; case CWAI: break; - case STOP: + case SYNC: - break; - case ASGN: - ASGN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - case ADDS: - ADDS_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - case OP_G: - if (OnExecFetch != null) OnExecFetch(PC); - if (TraceCallback != null) TraceCallback(State()); - if (CDLCallback != null) CDLCallback(PC, eCDLogMemFlags.FetchFirst); - - FetchInstruction(ReadMemory(PC)); // note no increment - - instr_pntr = 0; - break; - case JAM: - jammed = true; - instr_pntr--; - break; - case RD_F: - Read_Func_F(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - case EI_RETI: - EI_pending = 1; break; case INT_GET: @@ -505,7 +434,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 break; } - totalExecutedCycles++; + TotalExecutedCycles++; } // tracer stuff @@ -514,7 +443,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public string TraceHeader { - get { return "MC6809: PC, machine code, mnemonic, operands, registers (A, F, B, C, D, E, H, L, SP), Cy, flags (ZNHCI)"; } + get { return "MC6809: PC, machine code, mnemonic, operands, registers (A, B, X, Y, US, SP, DP, CC), Cy, flags (EFHINZVC)"; } } public TraceInfo State(bool disassemble = true) @@ -527,16 +456,25 @@ namespace BizHawk.Emulation.Common.Components.MC6809 "{0} ", disassemble ? Disassemble(PC, ReadMemory, out notused) : "---").PadRight(40), RegisterInfo = string.Format( - "A:{0:X2} F:{1:X2} B:{2:X2} C:{3:X2} D:{4:X2} E:{5:X2} H:{6:X2} L:{7:X2}", - + "A:{0:X2} B:{1:X2} X:{2:X4} Y:{3:X4} US:{4:X4} SP:{5:X4} DP:{6:X2} CC:{7:X2} Cy:{8} {9}{10}{11}{12}{13}{14}{15}{16}", + Regs[A], + Regs[B], + Regs[X], + Regs[Y], + Regs[US], + Regs[SP], + Regs[DP], + Regs[CC], TotalExecutedCycles, - LY, - FlagZ ? "Z" : "z", - FlagN ? "N" : "n", + FlagE ? "E" : "e", + FlagF ? "F" : "f", FlagH ? "H" : "h", - FlagC ? "C" : "c", FlagI ? "I" : "i", - interrupts_enabled ? "E" : "e") + FlagN ? "N" : "n", + FlagZ ? "Z" : "z", + FlagV ? "V" : "v", + FlagC ? "C" : "c" + ) }; } @@ -582,7 +520,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ser.Sync("Halt_bug_2", ref Halt_bug_2); ser.Sync("Halt_bug_3", ref Halt_bug_3); ser.Sync("Halted", ref halted); - ser.Sync("ExecutedCycles", ref totalExecutedCycles); + ser.Sync("TotalExecutedCycles", ref TotalExecutedCycles); ser.Sync("EI_pending", ref EI_pending); ser.Sync("int_src", ref int_src); ser.Sync("stop_time", ref stop_time); @@ -594,7 +532,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ser.Sync("Stopped", ref stopped); ser.Sync("opcode", ref opcode); ser.Sync("jammped", ref jammed); - ser.Sync("LY", ref LY); ser.EndSection(); } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index 7aea2f6c11..e7f22c98da 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -1,5 +1,5 @@ -using BizHawk.Common.NumberExtensions; -using System; +using System; +using BizHawk.Common.NumberExtensions; namespace BizHawk.Emulation.Common.Components.MC6809 { @@ -52,12 +52,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[src] = ans; } - // speical read for POP AF that always clears the lower 4 bits of F - public void Read_Func_F(ushort dest, ushort src_l, ushort src_h) - { - Regs[dest] = (ushort)(ReadMemory((ushort)(Regs[src_l] | (Regs[src_h]) << 8)) & 0xF0); - } - public void Write_Dec_Lo_Func(ushort dest, ushort src) { if (CDLCallback != null) CDLCallback(Regs[dest], eCDLogMemFlags.Write | eCDLogMemFlags.Data); @@ -199,32 +193,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagN = ans > 127; } - public void SET_Func(ushort bit, ushort src) - { - Regs[src] |= (ushort)(1 << bit); - } - - public void RES_Func(ushort bit, ushort src) - { - Regs[src] &= (ushort)(0xFF - (1 << bit)); - } - - public void ASGN_Func(ushort src, ushort val) - { - Regs[src] = val; - } - - public void SWAP_Func(ushort src) - { - ushort temp = (ushort)((Regs[src] << 4) & 0xF0); - Regs[src] = (ushort)(temp | (Regs[src] >> 4)); - - FlagZ = Regs[src] == 0; - FlagH = false; - FlagN = false; - FlagC = false; - } - public void ASL_Func(ushort src) { FlagC = Regs[src].Bit(7); @@ -286,20 +254,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagN = Regs[A] > 127; } - public void CCF_Func(ushort src) - { - FlagC = !FlagC; - FlagH = false; - FlagN = false; - } - - public void SCF_Func(ushort src) - { - FlagC = true; - FlagH = false; - FlagN = false; - } - public void AND8_Func(ushort dest, ushort src) { Regs[dest] = (ushort)(Regs[dest] & Regs[src]); @@ -344,17 +298,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagN = true; } - public void RRC_Func(ushort src) - { - FlagC = Regs[src].Bit(0); - - Regs[src] = (ushort)((FlagC ? 0x80 : 0) | (Regs[src] >> 1)); - - FlagZ = (Regs[src] == 0); - FlagH = false; - FlagN = false; - } - public void ROR_Func(ushort src) { ushort c = (ushort)(FlagC ? 0x80 : 0); @@ -367,21 +310,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagN = (Regs[src] & 0xFF) > 127; } - public void RLC_Func(ushort src) - { - bool imm = false; - if (imm) { src = A; } - - ushort c = (ushort)(Regs[src].Bit(7) ? 1 : 0); - FlagC = Regs[src].Bit(7); - - Regs[src] = (ushort)(((Regs[src] << 1) & 0xFF) | c); - - FlagZ = imm ? false : (Regs[src] == 0); - FlagH = false; - FlagN = false; - } - public void ROL_Func(ushort src) { ushort c = (ushort)(FlagC ? 1 : 0); @@ -415,14 +343,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 FlagN = (Regs[src] & 0xFF) > 127; } - public void INC16_Func(ushort src_l, ushort src_h) + public void INC16_Func(ushort src) { - int Reg16_d = Regs[src_l] | (Regs[src_h] << 8); - - Reg16_d += 1; - - Regs[src_l] = (ushort)(Reg16_d & 0xFF); - Regs[src_h] = (ushort)((Reg16_d & 0xFF00) >> 8); + Regs[src] += 1; } public void DEC16_Func(ushort src) @@ -587,6 +510,23 @@ namespace BizHawk.Emulation.Common.Components.MC6809 D = ans; } + // D register implied + public void CMP16D_Func(ushort src) + { + int Reg16_d = D; + int Reg16_s = Regs[src]; + + Reg16_d += Reg16_s; + + FlagC = Reg16_d.Bit(16); + FlagZ = (Reg16_d & 0xFFFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFFFF); + + FlagN = ans > 0x7FFF; + FlagV = (D.Bit(15) != Regs[src].Bit(15)) && (D.Bit(15) != ans.Bit(15)); + } + public void CMP16_Func(ushort dest, ushort src) { int Reg16_d = Regs[dest]; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Registers.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Registers.cs index ba245baec4..78a30cb2f1 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Registers.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Registers.cs @@ -1,4 +1,3 @@ -using System.Runtime.InteropServices; using System; namespace BizHawk.Emulation.Common.Components.MC6809 diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs index 20b44091e1..b220b09583 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs @@ -1,5 +1,5 @@ -using BizHawk.Common.NumberExtensions; using System; +using BizHawk.Common.NumberExtensions; namespace BizHawk.Emulation.Common.Components.MC6809 { @@ -15,12 +15,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void ILLEGAL() { - + throw new Exception("Encountered illegal instruction"); } private void SYNC_() { - + PopulateCURINSTR(IDLE, + IDLE, + SYNC); } private void REG_OP(ushort oper, ushort src) @@ -146,6 +148,13 @@ namespace BizHawk.Emulation.Common.Components.MC6809 oper, dest, ADDR); } + private void IMD_CMP_16(ushort oper, ushort dest) + { + PopulateCURINSTR(RD_INC, ALU, PC, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + oper, dest, ADDR); + } + private void REG_OP_LD_16(ushort dest) { PopulateCURINSTR(RD_INC, ALU, PC, @@ -323,13 +332,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void PAGE_2() { - PopulateCURINSTR(OP_PG_2); } private void PAGE_3() { - PopulateCURINSTR(OP_PG_3); } @@ -553,6 +560,29 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SET_ADDR, ADDR, ALU, ALU2); } + private void SWI2_3(ushort pick) + { + Regs[ADDR] = (ushort)((pick == 3) ? 0xFFF2 : 0xFFF4); + PopulateCURINSTR(SET_E, + DEC16, SP, + WR_DEC_LO, SP, PC, + WR_DEC_HI, SP, PC, + WR_DEC_LO, SP, US, + WR_DEC_HI, SP, US, + WR_DEC_LO, SP, Y, + WR_DEC_HI, SP, Y, + WR_DEC_LO, SP, X, + WR_DEC_HI, SP, X, + WR_DEC_LO, SP, DP, + WR_DEC_LO, SP, B, + WR_DEC_LO, SP, A, + WR, SP, CC, + IDLE, + RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, ADDR, ALU, ALU2); + } + private void CWAI_() { PopulateCURINSTR(RD_INC_OP, ALU, PC, ANDCC, ALU, @@ -572,101 +602,5 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR, SP, CC, CWAI); } - - private void DEC_16(ushort src_l, ushort src_h) - { - - } - - private void ADD_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) - { - - } - - private void STOP_() - { - - } - - private void JR_COND(bool cond) - { - - } - - private void JP_COND(bool cond) - { - - } - - private void RET_() - { - - } - - private void RETI_() - { - - } - - - private void RET_COND(bool cond) - { - - } - - private void CALL_COND(bool cond) - { - - } - - private void INT_OP(ushort operation, ushort src) - { - - } - - private void BIT_OP(ushort operation, ushort bit, ushort src) - { - - } - - private void RST_(ushort n) - { - - } - - private void DI_() - { - - } - - private void EI_() - { - - } - - private void JP_HL() - { - - } - - private void ADD_SP() - { - - } - - private void LD_SP_HL() - { - - } - - private void LD_HL_SPn() - { - - } - - private void JAM_() - { - - } } } From 10d1c230f3662a68431976ab4a98129f93597a89 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 6 Apr 2019 19:42:07 -0500 Subject: [PATCH 010/138] mc6809 start disassembler --- .../BizHawk.Emulation.Cores.csproj | 4 +- .../CPUs/MC6809/Disassembler.cs | 850 ++++++++++++++++++ .../CPUs/MC6809/Interrupts.cs | 5 - BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 3 - .../CPUs/MC6809/NewDisassembler.cs | 587 ------------ .../MC6809/{Tables_Direct.cs => OP_Tables.cs} | 0 6 files changed, 852 insertions(+), 597 deletions(-) create mode 100644 BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs delete mode 100644 BizHawk.Emulation.Cores/CPUs/MC6809/NewDisassembler.cs rename BizHawk.Emulation.Cores/CPUs/MC6809/{Tables_Direct.cs => OP_Tables.cs} (100%) diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 864f3b5e7a..2aec848dac 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -1527,11 +1527,11 @@ - + - + diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs new file mode 100644 index 0000000000..9d85a68323 --- /dev/null +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs @@ -0,0 +1,850 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BizHawk.Emulation.Common.Components.MC6809 +{ + public sealed partial class MC6809 + { + static string[] table = + { + "NEG DP,i8", // 00 + "???", // 01 + "???", // 02 + "COM DP,i8", // 03 + "LSR DP,i8", // 04 + "???", // 05 + "ROR DP,i8", // 06 + "ASR DP,i8", // 07 + "ASL DP,i8", // 08 + "ROL DP,i8", // 09 + "DEC DP,i8", // 0a + "???", // 0b + "INC DP,i8", // 0c + "TST DP,i8", // 0d + "JMP DP,i8", // 0e + "CLR DP,i8", // 0f + "PAGE 2", // 10 + "PAGE 3", // 11 + "NOP", // 12 + "SYNC", // 13 + "???", // 14 + "???", // 15 + "LBRA i16", // 16 + "LBSR i16", // 17 + "???", // 18 + "DAA", // 19 + "ORCC i8", // 1a + "???", // 1b + "ANDCC i8", // 1c + "SEX", // 1d + "EXG i8", // 1e + "TFR i8", // 1f + "BRA i8", // 20 + "BRN i8", // 21 + "BHI i8", // 22 + "BLS i8", // 23 + "BHS i8", // 24 + "BLO i8", // 25 + "BNE i8", // 26 + "BEQ i8", // 27 + "BVC i8", // 28 + "BVS i8", // 29 + "BPL i8", // 2a + "BMI i8", // 2b + "BGE i8", // 2c + "BLT i8", // 2d + "BGT i8", // 2e + "BLE i8", // 2f + "LEAX ix16", // 30 + "LEAY ix16", // 31 + "LEAS ix16", // 32 + "LEAU ix16", // 33 + "PSHS i8", // 34 + "PULS i8", // 35 + "PSHU i8", // 36 + "PULU i8", // 37 + "???", // 38 + "RTS", // 39 + "ABX", // 3a + "RTI", // 3b + "CWAI", // 3c + "MUL", // 3d + "???", // 3e + "SWI1", // 3f + "NEG A", // 40 + "???", // 41 + "???", // 42 + "COM A", // 43 + "LSR A", // 44 + "???", // 45 + "ROR A", // 46 + "ASR A", // 47 + "ASL A", // 48 + "ROL A", // 49 + "DEC A", // 4a + "???", // 4b + "INC A", // 4c + "TST A", // 4d + "???", // 4e + "CLR A", // 4f + "NEG B", // 50 + "???", // 51 + "???", // 52 + "COM B", // 53 + "LSR B", // 54 + "???", // 55 + "ROR B", // 56 + "ASR B", // 57 + "ASL B", // 58 + "ROL B", // 59 + "DEC B", // 5a + "???", // 5b + "INC B", // 5c + "TST B", // 5d + "???", // 5e + "CLR B", // 5f + "NEG ix16", // 60 + "???", // 61 + "???", // 62 + "COM ix16", // 63 + "LSR ix16", // 64 + "???", // 65 + "ROR ix16", // 66 + "ASR ix16", // 67 + "ASL ix16", // 68 + "ROL ix16", // 69 + "DEC ix16", // 6a + "???", // 6b + "INC ix16", // 6c + "TST ix16", // 6d + "JMP ix16", // 6e + "CLR ix16", // 6f + "NEG ex16", // 70 + "???", // 71 + "???", // 72 + "COM ex16", // 73 + "LSR ex16", // 74 + "???", // 75 + "ROR ex16", // 76 + "ASR ex16", // 77 + "ASL ex16", // 78 + "ROL ex16", // 79 + "DEC ex16", // 7a + "???", // 7b + "INC ex16", // 7c + "TST ex16", // 7d + "JMP ex16", // 7e + "CLR ex16", // 7f + "ADD A,B", // 80 + "ADD A,C", // 81 + "ADD A,D", // 82 + "ADD A,E", // 83 + "ADD A,H", // 84 + "ADD A,L", // 85 + "ADD A,(HL)", // 86 + "ADD A,A", // 87 + "ADC A,B", // 88 + "ADC A,C", // 89 + "ADC A,D", // 8a + "ADC A,E", // 8b + "ADC A,H", // 8c + "ADC A,L", // 8d + "ADC A,(HL)", // 8e + "ADC A,A", // 8f + "SUB B", // 90 + "SUB C", // 91 + "SUB D", // 92 + "SUB E", // 93 + "SUB H", // 94 + "SUB L", // 95 + "SUB (HL)", // 96 + "SUB A", // 97 + "SBC A,B", // 98 + "SBC A,C", // 99 + "SBC A,D", // 9a + "SBC A,E", // 9b + "SBC A,H", // 9c + "SBC A,L", // 9d + "SBC A,(HL)", // 9e + "SBC A,A", // 9f + "AND B", // a0 + "AND C", // a1 + "AND D", // a2 + "AND E", // a3 + "AND H", // a4 + "AND L", // a5 + "AND (HL)", // a6 + "AND A", // a7 + "XOR B", // a8 + "XOR C", // a9 + "XOR D", // aa + "XOR E", // ab + "XOR H", // ac + "XOR L", // ad + "XOR (HL)", // ae + "XOR A", // af + "OR B", // b0 + "OR C", // b1 + "OR D", // b2 + "OR E", // b3 + "OR H", // b4 + "OR L", // b5 + "OR (HL)", // b6 + "OR A", // b7 + "CP B", // b8 + "CP C", // b9 + "CP D", // ba + "CP E", // bb + "CP H", // bc + "CP L", // bd + "CP (HL)", // be + "CP A", // bf + "RET NZ", // c0 + "POP BC", // c1 + "JP NZ,a16", // c2 + "JP a16", // c3 + "CALL NZ,a16", // c4 + "PUSH BC", // c5 + "ADD A,d8", // c6 + "RST 00H", // c7 + "RET Z", // c8 + "RET", // c9 + "JP Z,a16", // ca + "PREFIX CB", // cb + "CALL Z,a16", // cc + "CALL a16", // cd + "ADC A,d8", // ce + "RST 08H", // cf + "RET NC", // d0 + "POP DE", // d1 + "JP NC,a16", // d2 + "???", // d3 + "CALL NC,a16", // d4 + "PUSH DE", // d5 + "SUB d8", // d6 + "RST 10H", // d7 + "RET C", // d8 + "RETI", // d9 + "JP C,a16", // da + "???", // db + "CALL C,a16", // dc + "???", // dd + "SBC A,d8", // de + "RST 18H", // df + "LDH (a8),A", // e0 + "POP HL", // e1 + "LD (C),A", // e2 + "???", // e3 + "???", // e4 + "PUSH HL", // e5 + "AND d8", // e6 + "RST 20H", // e7 + "ADD SP,r8", // e8 + "JP (HL)", // e9 + "LD (a16),A", // ea + "???", // eb + "???", // ec + "???", // ed + "XOR d8", // ee + "RST 28H", // ef + "LDH A,(a8)", // f0 + "POP AF", // f1 + "LD A,(C)", // f2 + "DI", // f3 + "???", // f4 + "PUSH AF", // f5 + "OR d8", // f6 + "RST 30H", // f7 + "LD HL,SP+r8", // f8 + "LD SP,HL", // f9 + "LD A,(a16)", // fa + "EI ", // fb + "???", // fc + "???", // fd + "CP d8", // fe + "RST 38H", // ff + }; + + static string[] table2 = + { + "???", // 00 + "???", // 01 + "???", // 02 + "???", // 03 + "???", // 04 + "???", // 05 + "???", // 06 + "???", // 07 + "???", // 08 + "???", // 09 + "???", // 0a + "???", // 0b + "???", // 0c + "???", // 0d + "???", // 0e + "???", // 0f + "???", // 10 + "???", // 11 + "???", // 12 + "???", // 13 + "???", // 14 + "???", // 15 + "???", // 16 + "???", // 17 + "???", // 18 + "???", // 19 + "???", // 1a + "???", // 1b + "???", // 1c + "???", // 1d + "???", // 1e + "???", // 1f + "???", // 20 + "LBRN i16", // 21 + "LBHI i16", // 22 + "LBLS i16", // 23 + "LBHS i16", // 24 + "LBLO i16", // 25 + "LBNE i16", // 26 + "LBEQ i16", // 27 + "LBVC i16", // 28 + "LBVS i16", // 29 + "LBPL i16", // 2a + "LBMI i16", // 2b + "LBGE i16", // 2c + "LBLT i16", // 2d + "LBGT i16", // 2e + "LBLE i16", // 2f + "???", // 30 + "???", // 31 + "???", // 32 + "???", // 33 + "???", // 34 + "???", // 35 + "???", // 36 + "???", // 37 + "???", // 38 + "???", // 39 + "???", // 3a + "???", // 3b + "???", // 3c + "???", // 3d + "???", // 3e + "SWI2", // 3f + "???", // 40 + "???", // 41 + "???", // 42 + "???", // 43 + "???", // 44 + "???", // 45 + "???", // 46 + "???", // 47 + "???", // 48 + "???", // 49 + "???", // 4a + "???", // 4b + "???", // 4c + "???", // 4d + "???", // 4e + "???", // 4f + "???", // 50 + "???", // 51 + "???", // 52 + "???", // 53 + "???", // 54 + "???", // 55 + "???", // 56 + "???", // 57 + "???", // 58 + "???", // 59 + "???", // 5a + "???", // 5b + "???", // 5c + "???", // 5d + "???", // 5e + "???", // 5f + "???", // 60 + "???", // 61 + "???", // 62 + "???", // 63 + "???", // 64 + "???", // 65 + "???", // 66 + "???", // 67 + "???", // 68 + "???", // 69 + "???", // 6a + "???", // 6b + "???", // 6c + "???", // 6d + "???", // 6e + "???", // 6f + "???", // 70 + "???", // 71 + "???", // 72 + "???", // 73 + "???", // 74 + "???", // 75 + "???", // 76 + "???", // 77 + "???", // 78 + "???", // 79 + "???", // 7a + "???", // 7b + "???", // 7c + "???", // 7d + "???", // 7e + "???", // 7f + "???", // 80 + "???", // 81 + "???", // 82 + "CMP D,(i16)", // 83 + "???", // 84 + "???", // 85 + "???", // 86 + "???", // 87 + "???", // 88 + "???", // 89 + "???", // 8a + "???", // 8b + "CMP Y,(i16)", // 8c + "???", // 8d + "LD Y,(i16)", // 8e + "???", // 8f + "???", // 90 + "???", // 91 + "???", // 92 + "CMP D,(DP+i8)", // 93 + "???", // 94 + "???", // 95 + "???", // 96 + "???", // 97 + "???", // 98 + "???", // 99 + "???", // 9a + "???", // 9b + "CMP Y,(DP+i8)", // 9c + "???", // 9d + "LD Y,(DP+i8)", // 9e + "ST Y,(DP+i8)", // 9f + "???", // a0 + "???", // a1 + "???", // a2 + "AND E", // a3 + "???", // a4 + "???", // a5 + "???", // a6 + "???", // a7 + "???", // a8 + "???", // a9 + "???", // aa + "???", // ab + "XOR H", // ac + "???", // ad + "XOR (HL)", // ae + "XOR A", // af + "OR B", // b0 + "OR C", // b1 + "OR D", // b2 + "OR E", // b3 + "OR H", // b4 + "OR L", // b5 + "OR (HL)", // b6 + "OR A", // b7 + "CP B", // b8 + "CP C", // b9 + "CP D", // ba + "CP E", // bb + "CP H", // bc + "CP L", // bd + "CP (HL)", // be + "CP A", // bf + "RET NZ", // c0 + "POP BC", // c1 + "JP NZ,a16", // c2 + "JP a16", // c3 + "CALL NZ,a16", // c4 + "PUSH BC", // c5 + "ADD A,d8", // c6 + "RST 00H", // c7 + "RET Z", // c8 + "RET", // c9 + "JP Z,a16", // ca + "PREFIX CB", // cb + "CALL Z,a16", // cc + "CALL a16", // cd + "ADC A,d8", // ce + "RST 08H", // cf + "RET NC", // d0 + "POP DE", // d1 + "JP NC,a16", // d2 + "???", // d3 + "CALL NC,a16", // d4 + "PUSH DE", // d5 + "SUB d8", // d6 + "RST 10H", // d7 + "RET C", // d8 + "RETI", // d9 + "JP C,a16", // da + "???", // db + "CALL C,a16", // dc + "???", // dd + "SBC A,d8", // de + "RST 18H", // df + "LDH (a8),A", // e0 + "POP HL", // e1 + "LD (C),A", // e2 + "???", // e3 + "???", // e4 + "PUSH HL", // e5 + "AND d8", // e6 + "RST 20H", // e7 + "ADD SP,r8", // e8 + "JP (HL)", // e9 + "LD (a16),A", // ea + "???", // eb + "???", // ec + "???", // ed + "XOR d8", // ee + "RST 28H", // ef + "LDH A,(a8)", // f0 + "POP AF", // f1 + "LD A,(C)", // f2 + "DI", // f3 + "???", // f4 + "PUSH AF", // f5 + "OR d8", // f6 + "RST 30H", // f7 + "LD HL,SP+r8", // f8 + "LD SP,HL", // f9 + "LD A,(a16)", // fa + "EI ", // fb + "???", // fc + "???", // fd + "CP d8", // fe + "RST 38H", // ff + }; + + static string[] table3 = + { + "NEG DP,i8", // 00 + "???", // 01 + "???", // 02 + "COM DP,i8", // 03 + "LSR DP,i8", // 04 + "???", // 05 + "ROR DP,i8", // 06 + "ASR DP,i8", // 07 + "ASL DP,i8", // 08 + "ROL DP,i8", // 09 + "DEC DP,i8", // 0a + "???", // 0b + "INC DP,i8", // 0c + "TST DP,i8", // 0d + "JMP DP,i8", // 0e + "CLR DP,i8", // 0f + "PAGE 2", // 10 + "PAGE 3", // 11 + "NOP", // 12 + "SYNC", // 13 + "???", // 14 + "???", // 15 + "LBRA i16", // 16 + "LBSR i16", // 17 + "???", // 18 + "DAA", // 19 + "ORCC i8", // 1a + "???", // 1b + "ANDCC i8", // 1c + "SEX", // 1d + "EXG i8", // 1e + "TFR i8", // 1f + "BRA i8", // 20 + "BRN i8", // 21 + "BHI i8", // 22 + "BLS i8", // 23 + "BHS i8", // 24 + "BLO i8", // 25 + "BNE i8", // 26 + "BEQ i8", // 27 + "BVC i8", // 28 + "BVS i8", // 29 + "BPL i8", // 2a + "BMI i8", // 2b + "BGE i8", // 2c + "BLT i8", // 2d + "BGT i8", // 2e + "BLE i8", // 2f + "LEAX ix16", // 30 + "LEAY ix16", // 31 + "LEAS ix16", // 32 + "LEAU ix16", // 33 + "PSHS i8", // 34 + "PULS i8", // 35 + "PSHU i8", // 36 + "PULU i8", // 37 + "???", // 38 + "RTS", // 39 + "ABX", // 3a + "RTI", // 3b + "CWAI", // 3c + "MUL", // 3d + "???", // 3e + "SWI1", // 3f + "NEG A", // 40 + "???", // 41 + "???", // 42 + "COM A", // 43 + "LSR A", // 44 + "???", // 45 + "ROR A", // 46 + "ASR A", // 47 + "ASL A", // 48 + "ROL A", // 49 + "DEC A", // 4a + "???", // 4b + "INC A", // 4c + "TST A", // 4d + "???", // 4e + "CLR A", // 4f + "NEG B", // 50 + "???", // 51 + "???", // 52 + "COM B", // 53 + "LSR B", // 54 + "???", // 55 + "ROR B", // 56 + "ASR B", // 57 + "ASL B", // 58 + "ROL B", // 59 + "DEC B", // 5a + "???", // 5b + "INC B", // 5c + "TST B", // 5d + "???", // 5e + "CLR B", // 5f + "NEG ix16", // 60 + "???", // 61 + "???", // 62 + "COM ix16", // 63 + "LSR ix16", // 64 + "???", // 65 + "ROR ix16", // 66 + "ASR ix16", // 67 + "ASL ix16", // 68 + "ROL ix16", // 69 + "DEC ix16", // 6a + "???", // 6b + "INC ix16", // 6c + "TST ix16", // 6d + "JMP ix16", // 6e + "CLR ix16", // 6f + "NEG ex16", // 70 + "???", // 71 + "???", // 72 + "COM ex16", // 73 + "LSR ex16", // 74 + "???", // 75 + "ROR ex16", // 76 + "ASR ex16", // 77 + "ASL ex16", // 78 + "ROL ex16", // 79 + "DEC ex16", // 7a + "???", // 7b + "INC ex16", // 7c + "TST ex16", // 7d + "JMP ex16", // 7e + "CLR ex16", // 7f + "ADD A,B", // 80 + "ADD A,C", // 81 + "ADD A,D", // 82 + "ADD A,E", // 83 + "ADD A,H", // 84 + "ADD A,L", // 85 + "ADD A,(HL)", // 86 + "ADD A,A", // 87 + "ADC A,B", // 88 + "ADC A,C", // 89 + "ADC A,D", // 8a + "ADC A,E", // 8b + "ADC A,H", // 8c + "ADC A,L", // 8d + "ADC A,(HL)", // 8e + "ADC A,A", // 8f + "SUB B", // 90 + "SUB C", // 91 + "SUB D", // 92 + "SUB E", // 93 + "SUB H", // 94 + "SUB L", // 95 + "SUB (HL)", // 96 + "SUB A", // 97 + "SBC A,B", // 98 + "SBC A,C", // 99 + "SBC A,D", // 9a + "SBC A,E", // 9b + "SBC A,H", // 9c + "SBC A,L", // 9d + "SBC A,(HL)", // 9e + "SBC A,A", // 9f + "AND B", // a0 + "AND C", // a1 + "AND D", // a2 + "AND E", // a3 + "AND H", // a4 + "AND L", // a5 + "AND (HL)", // a6 + "AND A", // a7 + "XOR B", // a8 + "XOR C", // a9 + "XOR D", // aa + "XOR E", // ab + "XOR H", // ac + "XOR L", // ad + "XOR (HL)", // ae + "XOR A", // af + "OR B", // b0 + "OR C", // b1 + "OR D", // b2 + "OR E", // b3 + "OR H", // b4 + "OR L", // b5 + "OR (HL)", // b6 + "OR A", // b7 + "CP B", // b8 + "CP C", // b9 + "CP D", // ba + "CP E", // bb + "CP H", // bc + "CP L", // bd + "CP (HL)", // be + "CP A", // bf + "RET NZ", // c0 + "POP BC", // c1 + "JP NZ,a16", // c2 + "JP a16", // c3 + "CALL NZ,a16", // c4 + "PUSH BC", // c5 + "ADD A,d8", // c6 + "RST 00H", // c7 + "RET Z", // c8 + "RET", // c9 + "JP Z,a16", // ca + "PREFIX CB", // cb + "CALL Z,a16", // cc + "CALL a16", // cd + "ADC A,d8", // ce + "RST 08H", // cf + "RET NC", // d0 + "POP DE", // d1 + "JP NC,a16", // d2 + "???", // d3 + "CALL NC,a16", // d4 + "PUSH DE", // d5 + "SUB d8", // d6 + "RST 10H", // d7 + "RET C", // d8 + "RETI", // d9 + "JP C,a16", // da + "???", // db + "CALL C,a16", // dc + "???", // dd + "SBC A,d8", // de + "RST 18H", // df + "LDH (a8),A", // e0 + "POP HL", // e1 + "LD (C),A", // e2 + "???", // e3 + "???", // e4 + "PUSH HL", // e5 + "AND d8", // e6 + "RST 20H", // e7 + "ADD SP,r8", // e8 + "JP (HL)", // e9 + "LD (a16),A", // ea + "???", // eb + "???", // ec + "???", // ed + "XOR d8", // ee + "RST 28H", // ef + "LDH A,(a8)", // f0 + "POP AF", // f1 + "LD A,(C)", // f2 + "DI", // f3 + "???", // f4 + "PUSH AF", // f5 + "OR d8", // f6 + "RST 30H", // f7 + "LD HL,SP+r8", // f8 + "LD SP,HL", // f9 + "LD A,(a16)", // fa + "EI ", // fb + "???", // fc + "???", // fd + "CP d8", // fe + "RST 38H", // ff + }; + + public static string Disassemble(ushort addr, Func reader, out ushort size) + { + ushort origaddr = addr; + List bytes = new List(); + bytes.Add(reader(addr++)); + + string result = table[bytes[0]]; + if (bytes[0] == 0xcb) + { + bytes.Add(reader(addr++)); + result = table[bytes[1] + 256]; + } + + if (result.Contains("d8")) + { + byte d = reader(addr++); + bytes.Add(d); + result = result.Replace("d8", string.Format("#{0:X2}h", d)); + } + else if (result.Contains("d16")) + { + byte dlo = reader(addr++); + byte dhi = reader(addr++); + bytes.Add(dlo); + bytes.Add(dhi); + result = result.Replace("d16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); + } + else if (result.Contains("a16")) + { + byte dlo = reader(addr++); + byte dhi = reader(addr++); + bytes.Add(dlo); + bytes.Add(dhi); + result = result.Replace("a16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); + } + else if (result.Contains("a8")) + { + byte d = reader(addr++); + bytes.Add(d); + result = result.Replace("a8", string.Format("#FF{0:X2}h", d)); + } + else if (result.Contains("r8")) + { + byte d = reader(addr++); + bytes.Add(d); + int offs = d; + if (offs >= 128) + offs -= 256; + result = result.Replace("r8", string.Format("{0:X4}h", (ushort)(addr + offs))); + } + StringBuilder ret = new StringBuilder(); + ret.Append(string.Format("{0:X4}: ", origaddr)); + foreach (var b in bytes) + ret.Append(string.Format("{0:X2} ", b)); + while (ret.Length < 17) + ret.Append(' '); + ret.Append(result); + size = (ushort)(addr - origaddr); + return ret.ToString(); + } + } +} diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs index 26023db577..ca1b9691ba 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs @@ -19,18 +19,13 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public ushort int_src; public int stop_time; public bool stop_check; - public bool is_GBC; // GBC automatically adds a NOP to avoid the HALT bug (according to Sinimas) public bool I_use; // in halt mode, the I flag is checked earlier then when deicision to IRQ is taken public bool skip_once; - public bool Halt_bug_2; - public bool Halt_bug_3; private void ResetInterrupts() { I_use = false; skip_once = false; - Halt_bug_2 = false; - Halt_bug_3 = false; } } } \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 46cf75b82b..911564a028 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -517,15 +517,12 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ser.Sync("IRQ", ref interrupts_enabled); ser.Sync("I_use", ref I_use); ser.Sync("skip_once", ref skip_once); - ser.Sync("Halt_bug_2", ref Halt_bug_2); - ser.Sync("Halt_bug_3", ref Halt_bug_3); ser.Sync("Halted", ref halted); ser.Sync("TotalExecutedCycles", ref TotalExecutedCycles); ser.Sync("EI_pending", ref EI_pending); ser.Sync("int_src", ref int_src); ser.Sync("stop_time", ref stop_time); ser.Sync("stop_check", ref stop_check); - ser.Sync("is_GBC", ref is_GBC); ser.Sync("instr_pntr", ref instr_pntr); ser.Sync("cur_instr", ref cur_instr, false); diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/NewDisassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/NewDisassembler.cs deleted file mode 100644 index 73302b182e..0000000000 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/NewDisassembler.cs +++ /dev/null @@ -1,587 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace BizHawk.Emulation.Common.Components.MC6809 -{ - // adapted from the information at http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html - public sealed partial class MC6809 - { - static string[] table = - { - "NOP", // 00 - "LD BC,d16", // 01 - "LD (BC),A", // 02 - "INC BC", // 03 - "INC B", // 04 - "DEC B", // 05 - "LD B,d8", // 06 - "RLCA", // 07 - "LD (a16),SP", // 08 - "ADD HL,BC", // 09 - "LD A,(BC)", // 0a - "DEC BC", // 0b - "INC C", // 0c - "DEC C", // 0d - "LD C,d8", // 0e - "RRCA", // 0f - "STOP 0", // 10 - "LD DE,d16", // 11 - "LD (DE),A", // 12 - "INC DE", // 13 - "INC D", // 14 - "DEC D", // 15 - "LD D,d8", // 16 - "RLA", // 17 - "JR r8", // 18 - "ADD HL,DE", // 19 - "LD A,(DE)", // 1a - "DEC DE", // 1b - "INC E", // 1c - "DEC E", // 1d - "LD E,d8", // 1e - "RRA", // 1f - "JR NZ,r8", // 20 - "LD HL,d16", // 21 - "LD (HL+),A", // 22 - "INC HL", // 23 - "INC H", // 24 - "DEC H", // 25 - "LD H,d8", // 26 - "DAA", // 27 - "JR Z,r8", // 28 - "ADD HL,HL", // 29 - "LD A,(HL+)", // 2a - "DEC HL", // 2b - "INC L", // 2c - "DEC L", // 2d - "LD L,d8", // 2e - "CPL", // 2f - "JR NC,r8", // 30 - "LD SP,d16", // 31 - "LD (HL-),A", // 32 - "INC SP", // 33 - "INC (HL)", // 34 - "DEC (HL)", // 35 - "LD (HL),d8", // 36 - "SCF", // 37 - "JR C,r8", // 38 - "ADD HL,SP", // 39 - "LD A,(HL-)", // 3a - "DEC SP", // 3b - "INC A", // 3c - "DEC A", // 3d - "LD A,d8", // 3e - "CCF", // 3f - "LD B,B", // 40 - "LD B,C", // 41 - "LD B,D", // 42 - "LD B,E", // 43 - "LD B,H", // 44 - "LD B,L", // 45 - "LD B,(HL)", // 46 - "LD B,A", // 47 - "LD C,B", // 48 - "LD C,C", // 49 - "LD C,D", // 4a - "LD C,E", // 4b - "LD C,H", // 4c - "LD C,L", // 4d - "LD C,(HL)", // 4e - "LD C,A", // 4f - "LD D,B", // 50 - "LD D,C", // 51 - "LD D,D", // 52 - "LD D,E", // 53 - "LD D,H", // 54 - "LD D,L", // 55 - "LD D,(HL)", // 56 - "LD D,A", // 57 - "LD E,B", // 58 - "LD E,C", // 59 - "LD E,D", // 5a - "LD E,E", // 5b - "LD E,H", // 5c - "LD E,L", // 5d - "LD E,(HL)", // 5e - "LD E,A", // 5f - "LD H,B", // 60 - "LD H,C", // 61 - "LD H,D", // 62 - "LD H,E", // 63 - "LD H,H", // 64 - "LD H,L", // 65 - "LD H,(HL)", // 66 - "LD H,A", // 67 - "LD L,B", // 68 - "LD L,C", // 69 - "LD L,D", // 6a - "LD L,E", // 6b - "LD L,H", // 6c - "LD L,L", // 6d - "LD L,(HL)", // 6e - "LD L,A", // 6f - "LD (HL),B", // 70 - "LD (HL),C", // 71 - "LD (HL),D", // 72 - "LD (HL),E", // 73 - "LD (HL),H", // 74 - "LD (HL),L", // 75 - "HALT", // 76 - "LD (HL),A", // 77 - "LD A,B", // 78 - "LD A,C", // 79 - "LD A,D", // 7a - "LD A,E", // 7b - "LD A,H", // 7c - "LD A,L", // 7d - "LD A,(HL)", // 7e - "LD A,A", // 7f - "ADD A,B", // 80 - "ADD A,C", // 81 - "ADD A,D", // 82 - "ADD A,E", // 83 - "ADD A,H", // 84 - "ADD A,L", // 85 - "ADD A,(HL)", // 86 - "ADD A,A", // 87 - "ADC A,B", // 88 - "ADC A,C", // 89 - "ADC A,D", // 8a - "ADC A,E", // 8b - "ADC A,H", // 8c - "ADC A,L", // 8d - "ADC A,(HL)", // 8e - "ADC A,A", // 8f - "SUB B", // 90 - "SUB C", // 91 - "SUB D", // 92 - "SUB E", // 93 - "SUB H", // 94 - "SUB L", // 95 - "SUB (HL)", // 96 - "SUB A", // 97 - "SBC A,B", // 98 - "SBC A,C", // 99 - "SBC A,D", // 9a - "SBC A,E", // 9b - "SBC A,H", // 9c - "SBC A,L", // 9d - "SBC A,(HL)", // 9e - "SBC A,A", // 9f - "AND B", // a0 - "AND C", // a1 - "AND D", // a2 - "AND E", // a3 - "AND H", // a4 - "AND L", // a5 - "AND (HL)", // a6 - "AND A", // a7 - "XOR B", // a8 - "XOR C", // a9 - "XOR D", // aa - "XOR E", // ab - "XOR H", // ac - "XOR L", // ad - "XOR (HL)", // ae - "XOR A", // af - "OR B", // b0 - "OR C", // b1 - "OR D", // b2 - "OR E", // b3 - "OR H", // b4 - "OR L", // b5 - "OR (HL)", // b6 - "OR A", // b7 - "CP B", // b8 - "CP C", // b9 - "CP D", // ba - "CP E", // bb - "CP H", // bc - "CP L", // bd - "CP (HL)", // be - "CP A", // bf - "RET NZ", // c0 - "POP BC", // c1 - "JP NZ,a16", // c2 - "JP a16", // c3 - "CALL NZ,a16", // c4 - "PUSH BC", // c5 - "ADD A,d8", // c6 - "RST 00H", // c7 - "RET Z", // c8 - "RET", // c9 - "JP Z,a16", // ca - "PREFIX CB", // cb - "CALL Z,a16", // cc - "CALL a16", // cd - "ADC A,d8", // ce - "RST 08H", // cf - "RET NC", // d0 - "POP DE", // d1 - "JP NC,a16", // d2 - "???", // d3 - "CALL NC,a16", // d4 - "PUSH DE", // d5 - "SUB d8", // d6 - "RST 10H", // d7 - "RET C", // d8 - "RETI", // d9 - "JP C,a16", // da - "???", // db - "CALL C,a16", // dc - "???", // dd - "SBC A,d8", // de - "RST 18H", // df - "LDH (a8),A", // e0 - "POP HL", // e1 - "LD (C),A", // e2 - "???", // e3 - "???", // e4 - "PUSH HL", // e5 - "AND d8", // e6 - "RST 20H", // e7 - "ADD SP,r8", // e8 - "JP (HL)", // e9 - "LD (a16),A", // ea - "???", // eb - "???", // ec - "???", // ed - "XOR d8", // ee - "RST 28H", // ef - "LDH A,(a8)", // f0 - "POP AF", // f1 - "LD A,(C)", // f2 - "DI", // f3 - "???", // f4 - "PUSH AF", // f5 - "OR d8", // f6 - "RST 30H", // f7 - "LD HL,SP+r8", // f8 - "LD SP,HL", // f9 - "LD A,(a16)", // fa - "EI ", // fb - "???", // fc - "???", // fd - "CP d8", // fe - "RST 38H", // ff - "RLC B", // 00 - "RLC C", // 01 - "RLC D", // 02 - "RLC E", // 03 - "RLC H", // 04 - "RLC L", // 05 - "RLC (HL)", // 06 - "RLC A", // 07 - "RRC B", // 08 - "RRC C", // 09 - "RRC D", // 0a - "RRC E", // 0b - "RRC H", // 0c - "RRC L", // 0d - "RRC (HL)", // 0e - "RRC A", // 0f - "RL B", // 10 - "RL C", // 11 - "RL D", // 12 - "RL E", // 13 - "RL H", // 14 - "RL L", // 15 - "RL (HL)", // 16 - "RL A", // 17 - "RR B", // 18 - "RR C", // 19 - "RR D", // 1a - "RR E", // 1b - "RR H", // 1c - "RR L", // 1d - "RR (HL)", // 1e - "RR A", // 1f - "SLA B", // 20 - "SLA C", // 21 - "SLA D", // 22 - "SLA E", // 23 - "SLA H", // 24 - "SLA L", // 25 - "SLA (HL)", // 26 - "SLA A", // 27 - "SRA B", // 28 - "SRA C", // 29 - "SRA D", // 2a - "SRA E", // 2b - "SRA H", // 2c - "SRA L", // 2d - "SRA (HL)", // 2e - "SRA A", // 2f - "SWAP B", // 30 - "SWAP C", // 31 - "SWAP D", // 32 - "SWAP E", // 33 - "SWAP H", // 34 - "SWAP L", // 35 - "SWAP (HL)", // 36 - "SWAP A", // 37 - "SRL B", // 38 - "SRL C", // 39 - "SRL D", // 3a - "SRL E", // 3b - "SRL H", // 3c - "SRL L", // 3d - "SRL (HL)", // 3e - "SRL A", // 3f - "BIT 0,B", // 40 - "BIT 0,C", // 41 - "BIT 0,D", // 42 - "BIT 0,E", // 43 - "BIT 0,H", // 44 - "BIT 0,L", // 45 - "BIT 0,(HL)", // 46 - "BIT 0,A", // 47 - "BIT 1,B", // 48 - "BIT 1,C", // 49 - "BIT 1,D", // 4a - "BIT 1,E", // 4b - "BIT 1,H", // 4c - "BIT 1,L", // 4d - "BIT 1,(HL)", // 4e - "BIT 1,A", // 4f - "BIT 2,B", // 50 - "BIT 2,C", // 51 - "BIT 2,D", // 52 - "BIT 2,E", // 53 - "BIT 2,H", // 54 - "BIT 2,L", // 55 - "BIT 2,(HL)", // 56 - "BIT 2,A", // 57 - "BIT 3,B", // 58 - "BIT 3,C", // 59 - "BIT 3,D", // 5a - "BIT 3,E", // 5b - "BIT 3,H", // 5c - "BIT 3,L", // 5d - "BIT 3,(HL)", // 5e - "BIT 3,A", // 5f - "BIT 4,B", // 60 - "BIT 4,C", // 61 - "BIT 4,D", // 62 - "BIT 4,E", // 63 - "BIT 4,H", // 64 - "BIT 4,L", // 65 - "BIT 4,(HL)", // 66 - "BIT 4,A", // 67 - "BIT 5,B", // 68 - "BIT 5,C", // 69 - "BIT 5,D", // 6a - "BIT 5,E", // 6b - "BIT 5,H", // 6c - "BIT 5,L", // 6d - "BIT 5,(HL)", // 6e - "BIT 5,A", // 6f - "BIT 6,B", // 70 - "BIT 6,C", // 71 - "BIT 6,D", // 72 - "BIT 6,E", // 73 - "BIT 6,H", // 74 - "BIT 6,L", // 75 - "BIT 6,(HL)", // 76 - "BIT 6,A", // 77 - "BIT 7,B", // 78 - "BIT 7,C", // 79 - "BIT 7,D", // 7a - "BIT 7,E", // 7b - "BIT 7,H", // 7c - "BIT 7,L", // 7d - "BIT 7,(HL)", // 7e - "BIT 7,A", // 7f - "RES 0,B", // 80 - "RES 0,C", // 81 - "RES 0,D", // 82 - "RES 0,E", // 83 - "RES 0,H", // 84 - "RES 0,L", // 85 - "RES 0,(HL)", // 86 - "RES 0,A", // 87 - "RES 1,B", // 88 - "RES 1,C", // 89 - "RES 1,D", // 8a - "RES 1,E", // 8b - "RES 1,H", // 8c - "RES 1,L", // 8d - "RES 1,(HL)", // 8e - "RES 1,A", // 8f - "RES 2,B", // 90 - "RES 2,C", // 91 - "RES 2,D", // 92 - "RES 2,E", // 93 - "RES 2,H", // 94 - "RES 2,L", // 95 - "RES 2,(HL)", // 96 - "RES 2,A", // 97 - "RES 3,B", // 98 - "RES 3,C", // 99 - "RES 3,D", // 9a - "RES 3,E", // 9b - "RES 3,H", // 9c - "RES 3,L", // 9d - "RES 3,(HL)", // 9e - "RES 3,A", // 9f - "RES 4,B", // a0 - "RES 4,C", // a1 - "RES 4,D", // a2 - "RES 4,E", // a3 - "RES 4,H", // a4 - "RES 4,L", // a5 - "RES 4,(HL)", // a6 - "RES 4,A", // a7 - "RES 5,B", // a8 - "RES 5,C", // a9 - "RES 5,D", // aa - "RES 5,E", // ab - "RES 5,H", // ac - "RES 5,L", // ad - "RES 5,(HL)", // ae - "RES 5,A", // af - "RES 6,B", // b0 - "RES 6,C", // b1 - "RES 6,D", // b2 - "RES 6,E", // b3 - "RES 6,H", // b4 - "RES 6,L", // b5 - "RES 6,(HL)", // b6 - "RES 6,A", // b7 - "RES 7,B", // b8 - "RES 7,C", // b9 - "RES 7,D", // ba - "RES 7,E", // bb - "RES 7,H", // bc - "RES 7,L", // bd - "RES 7,(HL)", // be - "RES 7,A", // bf - "SET 0,B", // c0 - "SET 0,C", // c1 - "SET 0,D", // c2 - "SET 0,E", // c3 - "SET 0,H", // c4 - "SET 0,L", // c5 - "SET 0,(HL)", // c6 - "SET 0,A", // c7 - "SET 1,B", // c8 - "SET 1,C", // c9 - "SET 1,D", // ca - "SET 1,E", // cb - "SET 1,H", // cc - "SET 1,L", // cd - "SET 1,(HL)", // ce - "SET 1,A", // cf - "SET 2,B", // d0 - "SET 2,C", // d1 - "SET 2,D", // d2 - "SET 2,E", // d3 - "SET 2,H", // d4 - "SET 2,L", // d5 - "SET 2,(HL)", // d6 - "SET 2,A", // d7 - "SET 3,B", // d8 - "SET 3,C", // d9 - "SET 3,D", // da - "SET 3,E", // db - "SET 3,H", // dc - "SET 3,L", // dd - "SET 3,(HL)", // de - "SET 3,A", // df - "SET 4,B", // e0 - "SET 4,C", // e1 - "SET 4,D", // e2 - "SET 4,E", // e3 - "SET 4,H", // e4 - "SET 4,L", // e5 - "SET 4,(HL)", // e6 - "SET 4,A", // e7 - "SET 5,B", // e8 - "SET 5,C", // e9 - "SET 5,D", // ea - "SET 5,E", // eb - "SET 5,H", // ec - "SET 5,L", // ed - "SET 5,(HL)", // ee - "SET 5,A", // ef - "SET 6,B", // f0 - "SET 6,C", // f1 - "SET 6,D", // f2 - "SET 6,E", // f3 - "SET 6,H", // f4 - "SET 6,L", // f5 - "SET 6,(HL)", // f6 - "SET 6,A", // f7 - "SET 7,B", // f8 - "SET 7,C", // f9 - "SET 7,D", // fa - "SET 7,E", // fb - "SET 7,H", // fc - "SET 7,L", // fd - "SET 7,(HL)", // fe - "SET 7,A", // ff - }; - - public static string Disassemble(ushort addr, Func reader, out ushort size) - { - ushort origaddr = addr; - List bytes = new List(); - bytes.Add(reader(addr++)); - - string result = table[bytes[0]]; - if (bytes[0] == 0xcb) - { - bytes.Add(reader(addr++)); - result = table[bytes[1] + 256]; - } - - if (result.Contains("d8")) - { - byte d = reader(addr++); - bytes.Add(d); - result = result.Replace("d8", string.Format("#{0:X2}h", d)); - } - else if (result.Contains("d16")) - { - byte dlo = reader(addr++); - byte dhi = reader(addr++); - bytes.Add(dlo); - bytes.Add(dhi); - result = result.Replace("d16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); - } - else if (result.Contains("a16")) - { - byte dlo = reader(addr++); - byte dhi = reader(addr++); - bytes.Add(dlo); - bytes.Add(dhi); - result = result.Replace("a16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); - } - else if (result.Contains("a8")) - { - byte d = reader(addr++); - bytes.Add(d); - result = result.Replace("a8", string.Format("#FF{0:X2}h", d)); - } - else if (result.Contains("r8")) - { - byte d = reader(addr++); - bytes.Add(d); - int offs = d; - if (offs >= 128) - offs -= 256; - result = result.Replace("r8", string.Format("{0:X4}h", (ushort)(addr + offs))); - } - StringBuilder ret = new StringBuilder(); - ret.Append(string.Format("{0:X4}: ", origaddr)); - foreach (var b in bytes) - ret.Append(string.Format("{0:X2} ", b)); - while (ret.Length < 17) - ret.Append(' '); - ret.Append(result); - size = (ushort)(addr - origaddr); - return ret.ToString(); - } - } -} diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs similarity index 100% rename from BizHawk.Emulation.Cores/CPUs/MC6809/Tables_Direct.cs rename to BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs From 07c3dd4aad7ffb973291e6fb9de86396a6b738a9 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 7 Apr 2019 11:39:38 -0500 Subject: [PATCH 011/138] mc6809: more disasm --- .../CPUs/MC6809/Disassembler.cs | 860 +++++++++--------- 1 file changed, 430 insertions(+), 430 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs index 9d85a68323..a60e48e565 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs @@ -8,22 +8,22 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { static string[] table = { - "NEG DP,i8", // 00 + "NEG DP+i8", // 00 "???", // 01 "???", // 02 - "COM DP,i8", // 03 - "LSR DP,i8", // 04 + "COM DP+i8", // 03 + "LSR DP+i8", // 04 "???", // 05 - "ROR DP,i8", // 06 - "ASR DP,i8", // 07 - "ASL DP,i8", // 08 - "ROL DP,i8", // 09 - "DEC DP,i8", // 0a + "ROR DP+i8", // 06 + "ASR DP+i8", // 07 + "ASL DP+i8", // 08 + "ROL DP+i8", // 09 + "DEC DP+i8", // 0a "???", // 0b - "INC DP,i8", // 0c - "TST DP,i8", // 0d - "JMP DP,i8", // 0e - "CLR DP,i8", // 0f + "INC DP+i8", // 0c + "TST DP+i8", // 0d + "JMP DP+i8", // 0e + "CLR DP+i8", // 0f "PAGE 2", // 10 "PAGE 3", // 11 "NOP", // 12 @@ -136,134 +136,134 @@ namespace BizHawk.Emulation.Common.Components.MC6809 "TST ex16", // 7d "JMP ex16", // 7e "CLR ex16", // 7f - "ADD A,B", // 80 - "ADD A,C", // 81 - "ADD A,D", // 82 - "ADD A,E", // 83 - "ADD A,H", // 84 - "ADD A,L", // 85 - "ADD A,(HL)", // 86 - "ADD A,A", // 87 - "ADC A,B", // 88 - "ADC A,C", // 89 - "ADC A,D", // 8a - "ADC A,E", // 8b - "ADC A,H", // 8c - "ADC A,L", // 8d - "ADC A,(HL)", // 8e - "ADC A,A", // 8f - "SUB B", // 90 - "SUB C", // 91 - "SUB D", // 92 - "SUB E", // 93 - "SUB H", // 94 - "SUB L", // 95 - "SUB (HL)", // 96 - "SUB A", // 97 - "SBC A,B", // 98 - "SBC A,C", // 99 - "SBC A,D", // 9a - "SBC A,E", // 9b - "SBC A,H", // 9c - "SBC A,L", // 9d - "SBC A,(HL)", // 9e - "SBC A,A", // 9f - "AND B", // a0 - "AND C", // a1 - "AND D", // a2 - "AND E", // a3 - "AND H", // a4 - "AND L", // a5 - "AND (HL)", // a6 - "AND A", // a7 - "XOR B", // a8 - "XOR C", // a9 - "XOR D", // aa - "XOR E", // ab - "XOR H", // ac - "XOR L", // ad - "XOR (HL)", // ae - "XOR A", // af - "OR B", // b0 - "OR C", // b1 - "OR D", // b2 - "OR E", // b3 - "OR H", // b4 - "OR L", // b5 - "OR (HL)", // b6 - "OR A", // b7 - "CP B", // b8 - "CP C", // b9 - "CP D", // ba - "CP E", // bb - "CP H", // bc - "CP L", // bd - "CP (HL)", // be - "CP A", // bf - "RET NZ", // c0 - "POP BC", // c1 - "JP NZ,a16", // c2 - "JP a16", // c3 - "CALL NZ,a16", // c4 - "PUSH BC", // c5 - "ADD A,d8", // c6 - "RST 00H", // c7 - "RET Z", // c8 - "RET", // c9 - "JP Z,a16", // ca - "PREFIX CB", // cb - "CALL Z,a16", // cc - "CALL a16", // cd - "ADC A,d8", // ce - "RST 08H", // cf - "RET NC", // d0 - "POP DE", // d1 - "JP NC,a16", // d2 - "???", // d3 - "CALL NC,a16", // d4 - "PUSH DE", // d5 - "SUB d8", // d6 - "RST 10H", // d7 - "RET C", // d8 - "RETI", // d9 - "JP C,a16", // da - "???", // db - "CALL C,a16", // dc - "???", // dd - "SBC A,d8", // de - "RST 18H", // df - "LDH (a8),A", // e0 - "POP HL", // e1 - "LD (C),A", // e2 - "???", // e3 - "???", // e4 - "PUSH HL", // e5 - "AND d8", // e6 - "RST 20H", // e7 - "ADD SP,r8", // e8 - "JP (HL)", // e9 - "LD (a16),A", // ea - "???", // eb - "???", // ec - "???", // ed - "XOR d8", // ee - "RST 28H", // ef - "LDH A,(a8)", // f0 - "POP AF", // f1 - "LD A,(C)", // f2 - "DI", // f3 - "???", // f4 - "PUSH AF", // f5 - "OR d8", // f6 - "RST 30H", // f7 - "LD HL,SP+r8", // f8 - "LD SP,HL", // f9 - "LD A,(a16)", // fa - "EI ", // fb - "???", // fc - "???", // fd - "CP d8", // fe - "RST 38H", // ff + "SUB A,i8", // 80 + "CMP A,i8", // 81 + "SBC A,i8", // 82 + "SUB D,i16", // 83 + "AND A,i8", // 84 + "BIT A,i8", // 85 + "LD A,i8", // 86 + "???", // 87 + "EOR A,i8", // 88 + "ADC A,i8", // 89 + "OR A,i8", // 8a + "ADD A,i8", // 8b + "CMP X,i16", // 8c + "BSR i8", // 8d + "LD X,i16", // 8e + "???", // 8f + "SUB A,DP+i8", // 90 + "CMP A,DP+i8", // 91 + "SBC A,DP+i8", // 92 + "SUB D,DP+i8", // 93 + "AND A,DP+i8", // 94 + "BIT A,DP+i8", // 95 + "LD A,DP+i8", // 96 + "ST A,DP+i8", // 97 + "EOR A,DP+i8", // 98 + "ADC A,DP+i8", // 99 + "OR A,DP+i8", // 9a + "ADD A,DP+i8", // 9b + "CMP X,DP+i8", // 9c + "JSR DP+i8", // 9d + "LD X,ix16", // 9e + "ST X,ix16", // 9f + "SUB A,ix16", // a0 + "CMP A,ix16", // a1 + "SBC A,ix16", // a2 + "SUB D,ix16", // a3 + "AND A,ix16", // a4 + "BIT A,ix16", // a5 + "LD A,ix16", // a6 + "ST A,ix16", // a7 + "EOR A,ix16", // a8 + "ADC A,ix16", // a9 + "OR A,ix16", // aa + "ADD A,ix16", // ab + "CMP X,ix16", // ac + "JSR ix16", // ad + "LD X,ex16", // ae + "ST X,ex16", // af + "SUB A,ex16", // b0 + "CMP A,ex16", // b1 + "SBC A,ex16", // b2 + "SUB D,ex16", // b3 + "AND A,ex16", // b4 + "BIT A,ex16", // b5 + "LD A,ex16", // b6 + "ST A,ex16", // b7 + "EOR A,ex16", // b8 + "ADC A,ex16", // b9 + "OR A,ex16", // ba + "ADD A,ex16", // bb + "CMP X,ex16", // bc + "JSR ex16", // bd + "LD X,ex16", // be + "ST X,ex16", // bf + "SUB B,i8", // c0 + "CMP B,i8", // c1 + "SBC B,i8", // c2 + "ADD D,i16", // c3 + "AND B,i8", // c4 + "BIT B,i8", // c5 + "LD B,i8", // c6 + "???", // c7 + "EOR B,i8", // c8 + "ADC B,i8", // c9 + "OR B,i8", // ca + "ADD B,i8", // cb + "LD D,i16", // cc + "???", // cd + "LD U,i16", // ce + "???", // cf + "SUB B,DP+i8", // d0 + "CMP B,DP+i8", // d1 + "SBC B,DP+i8", // d2 + "ADD D,DP+i8", // d3 + "AND B,DP+i8", // d4 + "BIT B,DP+i8", // d5 + "LD B,DP+i8", // d6 + "ST B,DP+i8", // d7 + "EOR B,DP+i8", // d8 + "ADC B,DP+i8", // d9 + "OR B,DP+i8", // da + "ADD B,DP+i8", // db + "LD D,DP+i8", // dc + "ST D,DP+i8", // dd + "LD U,DP+i8", // de + "ST U,DP+i8", // df + "SUB B,ix16", // e0 + "CMP B,ix16", // e1 + "SBC B,ix16", // e2 + "ADD D,ix16", // e3 + "AND B,ix16", // e4 + "BIT B,ix16", // e5 + "LD B,ix16", // e6 + "ST B,ix16", // e7 + "EOR B,ix16", // e8 + "ADC B,ix16", // e9 + "OR B,ix16", // ea + "ADD B,ix16", // eb + "LD D,ix16", // ec + "ST D,ix16", // ed + "LD U,ix16", // ee + "ST U,ix16", // ef + "SUB B,ex16", // f0 + "CMP B,ex16", // f1 + "SBC B,ex16", // f2 + "ADD D,ex16", // f3 + "AND B,ex16", // f4 + "BIT B,ex16", // f5 + "LD B,ex16", // f6 + "ST B,ex16", // f7 + "EOR B,ex16", // f8 + "ADC B,ex16", // f9 + "OR B,ex16", // fa + "ADD B,ex16", // fb + "LD D,ex16", // fc + "ST D,ex16", // fd + "LD U,ex16", // fe + "ST U,ex16", // ff }; static string[] table2 = @@ -431,7 +431,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 "???", // a0 "???", // a1 "???", // a2 - "AND E", // a3 + "CMP D,ix16", // a3 "???", // a4 "???", // a5 "???", // a6 @@ -440,350 +440,350 @@ namespace BizHawk.Emulation.Common.Components.MC6809 "???", // a9 "???", // aa "???", // ab - "XOR H", // ac + "CMP Y,ix16", // ac "???", // ad - "XOR (HL)", // ae - "XOR A", // af - "OR B", // b0 - "OR C", // b1 - "OR D", // b2 - "OR E", // b3 - "OR H", // b4 - "OR L", // b5 - "OR (HL)", // b6 - "OR A", // b7 - "CP B", // b8 - "CP C", // b9 - "CP D", // ba - "CP E", // bb - "CP H", // bc - "CP L", // bd - "CP (HL)", // be - "CP A", // bf - "RET NZ", // c0 - "POP BC", // c1 - "JP NZ,a16", // c2 - "JP a16", // c3 - "CALL NZ,a16", // c4 - "PUSH BC", // c5 - "ADD A,d8", // c6 - "RST 00H", // c7 - "RET Z", // c8 - "RET", // c9 - "JP Z,a16", // ca - "PREFIX CB", // cb - "CALL Z,a16", // cc - "CALL a16", // cd - "ADC A,d8", // ce - "RST 08H", // cf - "RET NC", // d0 - "POP DE", // d1 - "JP NC,a16", // d2 + "LD Y,ix16", // ae + "ST Y,ix16", // af + "???", // b0 + "???", // b1 + "???", // b2 + "CMP D,ex16", // b3 + "???", // b4 + "???", // b5 + "???", // b6 + "???", // b7 + "???", // b8 + "???", // b9 + "???", // ba + "???", // bb + "CMP Y,ex16", // bc + "???", // bd + "LD Y,ex16", // be + "ST Y,ex16", // bf + "???", // c0 + "???", // c1 + "???", // c2 + "???", // c3 + "???", // c4 + "???", // c5 + "???", // c6 + "???", // c7 + "???", // c8 + "???", // c9 + "???", // ca + "???", // cb + "???", // cc + "???", // cd + "LD SP,i16", // ce + "???", // cf + "???", // d0 + "???", // d1 + "???", // d2 "???", // d3 - "CALL NC,a16", // d4 - "PUSH DE", // d5 - "SUB d8", // d6 - "RST 10H", // d7 - "RET C", // d8 - "RETI", // d9 - "JP C,a16", // da + "???", // d4 + "???", // d5 + "???", // d6 + "???", // d7 + "???", // d8 + "???", // d9 + "???", // da "???", // db - "CALL C,a16", // dc + "???", // dc "???", // dd - "SBC A,d8", // de - "RST 18H", // df - "LDH (a8),A", // e0 - "POP HL", // e1 - "LD (C),A", // e2 + "LD SP,DP+i8", // de + "ST SP,DP+i8", // df + "???", // e0 + "???", // e1 + "???", // e2 "???", // e3 "???", // e4 - "PUSH HL", // e5 - "AND d8", // e6 - "RST 20H", // e7 - "ADD SP,r8", // e8 - "JP (HL)", // e9 - "LD (a16),A", // ea + "???", // e5 + "???", // e6 + "???", // e7 + "???", // e8 + "???", // e9 + "???", // ea "???", // eb "???", // ec "???", // ed - "XOR d8", // ee - "RST 28H", // ef - "LDH A,(a8)", // f0 - "POP AF", // f1 - "LD A,(C)", // f2 - "DI", // f3 + "LD SP,ix16", // ee + "ST SP,ix16", // ef + "???", // f0 + "???", // f1 + "???", // f2 + "???", // f3 "???", // f4 - "PUSH AF", // f5 - "OR d8", // f6 - "RST 30H", // f7 - "LD HL,SP+r8", // f8 - "LD SP,HL", // f9 - "LD A,(a16)", // fa - "EI ", // fb + "???", // f5 + "???", // f6 + "???", // f7 + "???", // f8 + "???", // f9 + "???", // fa + "???", // fb "???", // fc "???", // fd - "CP d8", // fe - "RST 38H", // ff + "LD SP,ex16", // fe + "ST SP,ex16", // ff }; static string[] table3 = { - "NEG DP,i8", // 00 + "???", // 00 "???", // 01 "???", // 02 - "COM DP,i8", // 03 - "LSR DP,i8", // 04 + "???", // 03 + "???", // 04 "???", // 05 - "ROR DP,i8", // 06 - "ASR DP,i8", // 07 - "ASL DP,i8", // 08 - "ROL DP,i8", // 09 - "DEC DP,i8", // 0a + "???", // 06 + "???", // 07 + "???", // 08 + "???", // 09 + "???", // 0a "???", // 0b - "INC DP,i8", // 0c - "TST DP,i8", // 0d - "JMP DP,i8", // 0e - "CLR DP,i8", // 0f - "PAGE 2", // 10 - "PAGE 3", // 11 - "NOP", // 12 - "SYNC", // 13 + "???", // 0c + "???", // 0d + "???", // 0e + "???", // 0f + "???", // 10 + "???", // 11 + "???", // 12 + "???", // 13 "???", // 14 "???", // 15 - "LBRA i16", // 16 - "LBSR i16", // 17 + "???", // 16 + "???", // 17 "???", // 18 - "DAA", // 19 - "ORCC i8", // 1a + "???", // 19 + "???", // 1a "???", // 1b - "ANDCC i8", // 1c - "SEX", // 1d - "EXG i8", // 1e - "TFR i8", // 1f - "BRA i8", // 20 - "BRN i8", // 21 - "BHI i8", // 22 - "BLS i8", // 23 - "BHS i8", // 24 - "BLO i8", // 25 - "BNE i8", // 26 - "BEQ i8", // 27 - "BVC i8", // 28 - "BVS i8", // 29 - "BPL i8", // 2a - "BMI i8", // 2b - "BGE i8", // 2c - "BLT i8", // 2d - "BGT i8", // 2e - "BLE i8", // 2f - "LEAX ix16", // 30 - "LEAY ix16", // 31 - "LEAS ix16", // 32 - "LEAU ix16", // 33 - "PSHS i8", // 34 - "PULS i8", // 35 - "PSHU i8", // 36 - "PULU i8", // 37 + "???", // 1c + "???", // 1d + "???", // 1e + "???", // 1f + "???", // 20 + "???", // 21 + "???", // 22 + "???", // 23 + "???", // 24 + "???", // 25 + "???", // 26 + "???", // 27 + "???", // 28 + "???", // 29 + "???", // 2a + "???", // 2b + "???", // 2c + "???", // 2d + "???", // 2e + "???", // 2f + "???", // 30 + "???", // 31 + "???", // 32 + "???", // 33 + "???", // 34 + "???", // 35 + "???", // 36 + "???", // 37 "???", // 38 - "RTS", // 39 - "ABX", // 3a - "RTI", // 3b - "CWAI", // 3c - "MUL", // 3d + "???", // 39 + "???", // 3a + "???", // 3b + "???", // 3c + "???", // 3d "???", // 3e - "SWI1", // 3f - "NEG A", // 40 + "SWI3", // 3f + "???", // 40 "???", // 41 "???", // 42 - "COM A", // 43 - "LSR A", // 44 + "???", // 43 + "???", // 44 "???", // 45 - "ROR A", // 46 - "ASR A", // 47 - "ASL A", // 48 - "ROL A", // 49 - "DEC A", // 4a + "???", // 46 + "???", // 47 + "???", // 48 + "???", // 49 + "???", // 4a "???", // 4b - "INC A", // 4c - "TST A", // 4d + "???", // 4c + "???", // 4d "???", // 4e - "CLR A", // 4f - "NEG B", // 50 + "???", // 4f + "???", // 50 "???", // 51 "???", // 52 - "COM B", // 53 - "LSR B", // 54 + "???", // 53 + "???", // 54 "???", // 55 - "ROR B", // 56 - "ASR B", // 57 - "ASL B", // 58 - "ROL B", // 59 - "DEC B", // 5a + "???", // 56 + "???", // 57 + "???", // 58 + "???", // 59 + "???", // 5a "???", // 5b - "INC B", // 5c - "TST B", // 5d + "???", // 5c + "???", // 5d "???", // 5e - "CLR B", // 5f - "NEG ix16", // 60 + "???", // 5f + "???", // 60 "???", // 61 "???", // 62 - "COM ix16", // 63 - "LSR ix16", // 64 + "???", // 63 + "???", // 64 "???", // 65 - "ROR ix16", // 66 - "ASR ix16", // 67 - "ASL ix16", // 68 - "ROL ix16", // 69 - "DEC ix16", // 6a + "???", // 66 + "???", // 67 + "???", // 68 + "???", // 69 + "???", // 6a "???", // 6b - "INC ix16", // 6c - "TST ix16", // 6d - "JMP ix16", // 6e - "CLR ix16", // 6f - "NEG ex16", // 70 + "???", // 6c + "???", // 6d + "???", // 6e + "???", // 6f + "???", // 70 "???", // 71 "???", // 72 - "COM ex16", // 73 - "LSR ex16", // 74 + "???", // 73 + "???", // 74 "???", // 75 - "ROR ex16", // 76 - "ASR ex16", // 77 - "ASL ex16", // 78 - "ROL ex16", // 79 - "DEC ex16", // 7a + "???", // 76 + "???", // 77 + "???", // 78 + "???", // 79 + "???", // 7a "???", // 7b - "INC ex16", // 7c - "TST ex16", // 7d - "JMP ex16", // 7e - "CLR ex16", // 7f - "ADD A,B", // 80 - "ADD A,C", // 81 - "ADD A,D", // 82 - "ADD A,E", // 83 - "ADD A,H", // 84 - "ADD A,L", // 85 - "ADD A,(HL)", // 86 - "ADD A,A", // 87 - "ADC A,B", // 88 - "ADC A,C", // 89 - "ADC A,D", // 8a - "ADC A,E", // 8b - "ADC A,H", // 8c - "ADC A,L", // 8d - "ADC A,(HL)", // 8e - "ADC A,A", // 8f - "SUB B", // 90 - "SUB C", // 91 - "SUB D", // 92 - "SUB E", // 93 - "SUB H", // 94 - "SUB L", // 95 - "SUB (HL)", // 96 - "SUB A", // 97 - "SBC A,B", // 98 - "SBC A,C", // 99 - "SBC A,D", // 9a - "SBC A,E", // 9b - "SBC A,H", // 9c - "SBC A,L", // 9d - "SBC A,(HL)", // 9e - "SBC A,A", // 9f - "AND B", // a0 - "AND C", // a1 - "AND D", // a2 - "AND E", // a3 - "AND H", // a4 - "AND L", // a5 - "AND (HL)", // a6 - "AND A", // a7 - "XOR B", // a8 - "XOR C", // a9 - "XOR D", // aa - "XOR E", // ab - "XOR H", // ac - "XOR L", // ad - "XOR (HL)", // ae - "XOR A", // af - "OR B", // b0 - "OR C", // b1 - "OR D", // b2 - "OR E", // b3 - "OR H", // b4 - "OR L", // b5 - "OR (HL)", // b6 - "OR A", // b7 - "CP B", // b8 - "CP C", // b9 - "CP D", // ba - "CP E", // bb - "CP H", // bc - "CP L", // bd - "CP (HL)", // be - "CP A", // bf - "RET NZ", // c0 - "POP BC", // c1 - "JP NZ,a16", // c2 - "JP a16", // c3 - "CALL NZ,a16", // c4 - "PUSH BC", // c5 - "ADD A,d8", // c6 - "RST 00H", // c7 - "RET Z", // c8 - "RET", // c9 - "JP Z,a16", // ca - "PREFIX CB", // cb - "CALL Z,a16", // cc - "CALL a16", // cd - "ADC A,d8", // ce - "RST 08H", // cf - "RET NC", // d0 - "POP DE", // d1 - "JP NC,a16", // d2 + "???", // 7c + "???", // 7d + "???", // 7e + "???", // 7f + "???", // 80 + "???", // 81 + "???", // 82 + "CMP US,(i16)", // 83 + "???", // 84 + "???", // 85 + "???", // 86 + "???", // 87 + "???", // 88 + "???", // 89 + "???", // 8a + "???", // 8b + "CMP SP,(i16)", // 8c + "???", // 8d + "???", // 8e + "???", // 8f + "???", // 90 + "???", // 91 + "???", // 92 + "CMP US,(DP+i8)", // 93 + "???", // 94 + "???", // 95 + "???", // 96 + "???", // 97 + "???", // 98 + "???", // 99 + "???", // 9a + "???", // 9b + "CMP SP,(DP+i8)", // 9c + "???", // 9d + "???", // 9e + "???", // 9f + "???", // a0 + "???", // a1 + "???", // a2 + "CMP US,ix16", // a3 + "???", // a4 + "???", // a5 + "???", // a6 + "???", // a7 + "???", // a8 + "???", // a9 + "???", // aa + "???", // ab + "CMP SP,ix16", // ac + "???", // ad + "???", // ae + "???", // af + "???", // b0 + "???", // b1 + "???", // b2 + "CMP US,ex16", // b3 + "???", // b4 + "???", // b5 + "???", // b6 + "???", // b7 + "???", // b8 + "???", // b9 + "???", // ba + "???", // bb + "CMP SP,ex16", // bc + "???", // bd + "???", // be + "???", // bf + "???", // c0 + "???", // c1 + "???", // c2 + "???", // c3 + "???", // c4 + "???", // c5 + "???", // c6 + "???", // c7 + "???", // c8 + "???", // c9 + "???", // ca + "???", // cb + "???", // cc + "???", // cd + "???", // ce + "???", // cf + "???", // d0 + "???", // d1 + "???", // d2 "???", // d3 - "CALL NC,a16", // d4 - "PUSH DE", // d5 - "SUB d8", // d6 - "RST 10H", // d7 - "RET C", // d8 - "RETI", // d9 - "JP C,a16", // da + "???", // d4 + "???", // d5 + "???", // d6 + "???", // d7 + "???", // d8 + "???", // d9 + "???", // da "???", // db - "CALL C,a16", // dc + "???", // dc "???", // dd - "SBC A,d8", // de - "RST 18H", // df - "LDH (a8),A", // e0 - "POP HL", // e1 - "LD (C),A", // e2 + "???", // de + "???", // df + "???", // e0 + "???", // e1 + "???", // e2 "???", // e3 "???", // e4 - "PUSH HL", // e5 - "AND d8", // e6 - "RST 20H", // e7 - "ADD SP,r8", // e8 - "JP (HL)", // e9 - "LD (a16),A", // ea + "???", // e5 + "???", // e6 + "???", // e7 + "???", // e8 + "???", // e9 + "???", // ea "???", // eb "???", // ec "???", // ed - "XOR d8", // ee - "RST 28H", // ef - "LDH A,(a8)", // f0 - "POP AF", // f1 - "LD A,(C)", // f2 - "DI", // f3 + "???", // ee + "???", // ef + "???", // f0 + "???", // f1 + "???", // f2 + "???", // f3 "???", // f4 - "PUSH AF", // f5 - "OR d8", // f6 - "RST 30H", // f7 - "LD HL,SP+r8", // f8 - "LD SP,HL", // f9 - "LD A,(a16)", // fa - "EI ", // fb + "???", // f5 + "???", // f6 + "???", // f7 + "???", // f8 + "???", // f9 + "???", // fa + "???", // fb "???", // fc "???", // fd - "CP d8", // fe - "RST 38H", // ff + "???", // fe + "???", // ff }; public static string Disassemble(ushort addr, Func reader, out ushort size) From b14332d352128aac5a29d9d7bb7547ae0f7cd8ad Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 7 Apr 2019 15:57:24 -0500 Subject: [PATCH 012/138] mc6809: wire up interrupts --- .../CPUs/MC6809/Execute.cs | 9 +- .../CPUs/MC6809/Indexed_Modes.cs | 45 ++-- .../CPUs/MC6809/Interrupts.cs | 79 ++++++- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 202 +++++++++++++----- .../CPUs/MC6809/OP_Tables.cs | 119 ++++++++++- 5 files changed, 369 insertions(+), 85 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index 74c63d4428..910dcb9cea 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -6,16 +6,13 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { public ulong TotalExecutedCycles; - public int EI_pending; - public bool interrupts_enabled; - // variables for executing instructions public int instr_pntr = 0; public ushort[] cur_instr; public int opcode; - public bool halted; - public bool stopped; - public bool jammed; + + public int IRQS; + public int irq_pntr; public void FetchInstruction(byte opcode) { diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 6c73502f15..97cb87682b 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -52,6 +52,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 indexed_op = oper; PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); + + IRQS = 0; } private void INDEX_OP_REG(ushort oper, ushort src) @@ -60,11 +62,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 indexed_op_reg = src; PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); + + IRQS = 0; } private void INDEX_OP_JMP() { PopulateCURINSTR(TR, PC, IDX_EA); + + IRQS = irq_pntr + 2; } private void INDEX_OP_JSR() @@ -74,12 +80,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 TR, PC, IDX_EA, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); + + IRQS = irq_pntr + 6; } private void INDEX_OP_LEA(ushort dest) { PopulateCURINSTR(TR, dest, IDX_EA, IDLE); + + IRQS = irq_pntr + 3; } private void INDEX_OP_LD() @@ -87,6 +97,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, RD_INC, ALU, IDX_EA, RD_INC_OP, ALU2, IDX_EA, SET_ADDR, indexed_op_reg, ALU, ALU2); + + IRQS = irq_pntr + 4; } private void INDEX_OP_ST() @@ -94,6 +106,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, WR_HI_INC, IDX_EA, indexed_op_reg, WR_DEC_LO, IDX_EA, indexed_op_reg); + + IRQS = irq_pntr + 4; } private void INDEX_OP_LDD() @@ -101,6 +115,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, RD_INC, A, IDX_EA, RD_INC, B, IDX_EA); + + IRQS = irq_pntr + 4; } private void INDEX_OP_STD() @@ -108,23 +124,24 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(SET_ADDR, ADDR, A, A, WR_HI_INC, IDX_EA, ADDR, WR_DEC_LO, IDX_EA, B); + + IRQS = irq_pntr + 4; } private void INDEX_OP_EX4(ushort oper) { PopulateCURINSTR(IDLE, RD_INC_OP, ALU, IDX_EA, oper, indexed_op_reg, ALU); + + IRQS = irq_pntr + 3; } private void INDEX_OP_EX4_ST() { PopulateCURINSTR(IDLE, WR, ALU, IDX_EA, indexed_op_reg); - } - private void INDEX_OP_EX5() - { - PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); + IRQS = irq_pntr + 3; } private void INDEX_OP_EX6(ushort oper) @@ -133,6 +150,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU, IDX_EA, oper, ALU, WR, IDX_EA, ALU); + + IRQS = irq_pntr + 5; } private void INDEX_OP_EX6D(ushort oper) @@ -141,6 +160,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, ALU, IDX_EA, RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, oper, ADDR); + + IRQS = irq_pntr + 5; } private void INDEX_CMP_EX6(ushort oper) @@ -149,16 +170,10 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, ALU, IDX_EA, RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, oper, indexed_op_reg, ADDR); + + IRQS = irq_pntr + 5; } - - - private void INDEX_OP_EX7() - { - PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); - } - - // ALU holds the post byte public void Index_decode() { @@ -384,6 +399,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } } } + + instr_pntr = 0; + irq_pntr = 100; } public void Index_Op_Builder() @@ -427,6 +445,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case I_ST16D: INDEX_OP_STD(); break; // ST D case I_CMP16D: INDEX_OP_EX6D(CMP16D); break; // CMP D } + + instr_pntr = 0; + irq_pntr = 100; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs index ca1b9691ba..d443e83065 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Interrupts.cs @@ -4,28 +4,87 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { public partial class MC6809 { - private void INTERRUPT_() + private void IRQ_() { + Regs[ADDR] = 0xFFF8; + PopulateCURINSTR(IDLE, + IDLE, + DEC16, SP, + WR_DEC_LO, SP, PC, + WR_DEC_HI, SP, PC, + WR_DEC_LO, SP, US, + WR_DEC_HI, SP, US, + WR_DEC_LO, SP, Y, + WR_DEC_HI, SP, Y, + WR_DEC_LO, SP, X, + WR_DEC_HI, SP, X, + WR_DEC_LO, SP, DP, + WR_DEC_LO, SP, B, + WR_DEC_LO, SP, A, + WR, SP, CC, + SET_F_I, + RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + IRQS = 19; } - private void INTERRUPT_GBC_NOP() + private void FIRQ_() { + Regs[ADDR] = 0xFFF6; + PopulateCURINSTR(IDLE, + IDLE, + DEC16, SP, + WR_DEC_LO, SP, PC, + WR_DEC_HI, SP, PC, + WR, SP, CC, + SET_F_I, + RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + IRQS = 10; } - private static ushort[] INT_vectors = new ushort[] {0x40, 0x48, 0x50, 0x58, 0x60, 0x00}; + private void NMI_() + { + Regs[ADDR] = 0xFFFC; + PopulateCURINSTR(IDLE, + IDLE, + DEC16, SP, + WR_DEC_LO, SP, PC, + WR_DEC_HI, SP, PC, + WR_DEC_LO, SP, US, + WR_DEC_HI, SP, US, + WR_DEC_LO, SP, Y, + WR_DEC_HI, SP, Y, + WR_DEC_LO, SP, X, + WR_DEC_HI, SP, X, + WR_DEC_LO, SP, DP, + WR_DEC_LO, SP, B, + WR_DEC_LO, SP, A, + WR, SP, CC, + SET_F_I, + RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); - public ushort int_src; - public int stop_time; - public bool stop_check; - public bool I_use; // in halt mode, the I flag is checked earlier then when deicision to IRQ is taken - public bool skip_once; + IRQS = 19; + } + + public bool NMIPending; + public bool FIRQPending; + public bool IRQPending; + public bool IN_SYNC; + + public Action IRQCallback = delegate () { }; + public Action FIRQCallback = delegate () { }; + public Action NMICallback = delegate () { }; private void ResetInterrupts() { - I_use = false; - skip_once = false; + IN_SYNC = false; } } } \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 911564a028..f3c8ee7cf2 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -84,9 +84,17 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { ResetRegisters(); ResetInterrupts(); - TotalExecutedCycles = 8; - stop_check = false; - cur_instr = new ushort[] { IDLE, IDLE, HALT_CHK, OP }; + TotalExecutedCycles = 0; + Regs[ADDR] = 0xFFFE; + PopulateCURINSTR(IDLE, + IDLE, + IDLE, + RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + + IRQS = 6; + instr_pntr = irq_pntr = 0; } // Memory Access @@ -146,44 +154,13 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // do nothing break; case OP: - // Read the opcode of the next instruction - if (EI_pending > 0) - { - EI_pending--; - if (EI_pending == 0) - { - interrupts_enabled = true; - } - } - - if (I_use && interrupts_enabled && !jammed) - { - interrupts_enabled = false; - - if (TraceCallback != null) - { - TraceCallback(new TraceInfo - { - Disassembly = "====IRQ====", - RegisterInfo = "" - }); - } - - // call interrupt processor - // lowest bit set is highest priority - INTERRUPT_(); - } - else - { - if (OnExecFetch != null) OnExecFetch(PC); - if (TraceCallback != null) TraceCallback(State()); - if (CDLCallback != null) CDLCallback(PC, eCDLogMemFlags.FetchFirst); - FetchInstruction(ReadMemory(Regs[PC]++)); - } + // Read the opcode of the next instruction + if (OnExecFetch != null) OnExecFetch(PC); + if (TraceCallback != null) TraceCallback(State()); + if (CDLCallback != null) CDLCallback(PC, eCDLogMemFlags.FetchFirst); + FetchInstruction(ReadMemory(Regs[PC]++)); instr_pntr = 0; - I_use = false; break; - case OP_PG_2: FetchInstruction2(ReadMemory(Regs[PC]++)); break; @@ -234,7 +211,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[cur_instr[instr_pntr++]] << 8) | Regs[cur_instr[instr_pntr++]]); break; case JPE: - if (!FlagE) { instr_pntr = 35; }; + if (!FlagE) { instr_pntr = 45; }; break; case IDX_DCDE: Index_decode(); @@ -422,10 +399,52 @@ namespace BizHawk.Emulation.Common.Components.MC6809 BIT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case CWAI: + if (NMIPending) + { + Regs[ADDR] = 0xFFFC; + PopulateCURINSTR(RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + irq_pntr = -1; + IRQS = 3; + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====CWAI NMI====", RegisterInfo = "" }); } + } + else if (FIRQPending && !FlagF) + { + Regs[ADDR] = 0xFFF6; + PopulateCURINSTR(RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + irq_pntr = -1; + IRQS = 3; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====CWAI FIRQ====", RegisterInfo = "" }); } + } + else if (IRQPending && !FlagI) + { + Regs[ADDR] = 0xFFF8; + PopulateCURINSTR(RD_INC, ALU, ADDR, + RD_INC, ALU2, ADDR, + SET_ADDR, PC, ALU, ALU2); + irq_pntr = -1; + IRQS = 3; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====CWAI IRQ====", RegisterInfo = "" }); } + } + else + { + PopulateCURINSTR(CWAI); + irq_pntr = 0; + IRQS = 0; + } + instr_pntr = 0; break; case SYNC: - + IN_SYNC = true; + IRQS = 1; + instr_pntr = irq_pntr = 0; + PopulateCURINSTR(SYNC); break; case INT_GET: @@ -434,6 +453,81 @@ namespace BizHawk.Emulation.Common.Components.MC6809 break; } + + if (++irq_pntr == IRQS) + { + // NMI has priority + if (NMIPending) + { + NMIPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====NMI====", RegisterInfo = "" }); } + + IN_SYNC = false; + NMI_(); + NMICallback(); + instr_pntr = irq_pntr = 0; + } + // fast IRQ has next priority + else if (FIRQPending) + { + if (!FlagF) + { + FIRQPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====FIRQ====", RegisterInfo = "" }); } + + IN_SYNC = false; + FIRQ_(); + FIRQCallback(); + instr_pntr = irq_pntr = 0; + } + else if (IN_SYNC) + { + FIRQPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====SYNC====", RegisterInfo = "" }); } + + IN_SYNC = false; + IRQS = 1; + instr_pntr = irq_pntr = 0; + PopulateCURINSTR(IDLE); + } + } + // then regular IRQ + else if (IRQPending && !FlagI) + { + if (!FlagI) + { + IRQPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" }); } + + IN_SYNC = false; + IRQ_(); + IRQCallback(); + instr_pntr = irq_pntr = 0; + } + else if (IN_SYNC) + { + IRQPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====SYNC====", RegisterInfo = "" }); } + + IN_SYNC = false; + IRQS = 1; + instr_pntr = irq_pntr = 0; + PopulateCURINSTR(IDLE); + } + } + // otherwise start the next instruction + else + { + PopulateCURINSTR(OP); + instr_pntr = irq_pntr = 0; + } + } + TotalExecutedCycles++; } @@ -514,21 +608,25 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public void SyncState(Serializer ser) { ser.BeginSection("MC6809"); - ser.Sync("IRQ", ref interrupts_enabled); - ser.Sync("I_use", ref I_use); - ser.Sync("skip_once", ref skip_once); - ser.Sync("Halted", ref halted); - ser.Sync("TotalExecutedCycles", ref TotalExecutedCycles); - ser.Sync("EI_pending", ref EI_pending); - ser.Sync("int_src", ref int_src); - ser.Sync("stop_time", ref stop_time); - ser.Sync("stop_check", ref stop_check); + + ser.Sync("IN_SYNC", ref IN_SYNC); + ser.Sync("NMIPending", ref NMIPending); + ser.Sync("FIRQPending", ref FIRQPending); + ser.Sync("IRQPending", ref IRQPending); + + ser.Sync("indexed_op", ref indexed_op); + ser.Sync("indexed_reg", ref indexed_reg); + ser.Sync("indexed_op_reg", ref indexed_op_reg); + ser.Sync("temp", ref temp); ser.Sync("instr_pntr", ref instr_pntr); ser.Sync("cur_instr", ref cur_instr, false); - ser.Sync("Stopped", ref stopped); ser.Sync("opcode", ref opcode); - ser.Sync("jammped", ref jammed); + ser.Sync("IRQS", ref IRQS); + ser.Sync("irq_pntr", ref irq_pntr); + + ser.Sync("Regs", ref Regs, false); + ser.Sync("TotalExecutedCycles", ref TotalExecutedCycles); ser.EndSection(); } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs index b220b09583..91d83517a9 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs @@ -11,6 +11,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void NOP_() { PopulateCURINSTR(IDLE); + + IRQS = 1; } private void ILLEGAL() @@ -21,13 +23,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void SYNC_() { PopulateCURINSTR(IDLE, - IDLE, SYNC); + + IRQS = 0; } private void REG_OP(ushort oper, ushort src) { PopulateCURINSTR(oper, src); + + IRQS = 1; } private void DIRECT_MEM(ushort oper) @@ -37,6 +42,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU, ADDR, oper, ALU, WR, ADDR, ALU); + + IRQS = 5; } private void DIRECT_ST_4(ushort dest) @@ -44,6 +51,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, IDLE, WR, ADDR, dest); + + IRQS = 3; } private void DIRECT_MEM_4(ushort oper, ushort dest) @@ -51,6 +60,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, IDLE, RD_INC_OP, ALU, ADDR, oper, dest, ALU); + + IRQS = 3; } private void EXT_MEM(ushort oper) @@ -61,6 +72,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU, ADDR, oper, ALU, WR, ADDR, ALU); + + IRQS = 6; } private void EXT_REG(ushort oper, ushort dest) @@ -69,6 +82,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, RD, ALU, ADDR, oper, dest, ALU); + + IRQS = 4; } private void EXT_ST(ushort dest) @@ -77,6 +92,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, IDLE, WR, ADDR, dest); + + IRQS = 4; } private void REG_OP_IMD_CC(ushort oper) @@ -84,11 +101,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[ALU2] = Regs[CC]; PopulateCURINSTR(RD_INC_OP, ALU, PC, oper, ALU2, ALU, TR, CC, ALU2); + + IRQS = 2; } private void REG_OP_IMD(ushort oper, ushort dest) { PopulateCURINSTR(RD_INC_OP, ALU, PC, oper, dest, ALU); + + IRQS = 1; } private void IMD_OP_D(ushort oper, ushort dest) @@ -96,6 +117,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC, ALU, PC, RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, oper, ADDR); + + IRQS = 3; } private void DIR_OP_D(ushort oper, ushort dest) @@ -105,6 +128,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU2, ADDR, SET_ADDR, ADDR, ALU, ALU2, oper, ADDR); + + IRQS = 5; } private void EXT_OP_D(ushort oper, ushort dest) @@ -115,12 +140,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU2, ADDR, SET_ADDR, ADDR, ALU, ALU2, oper, ADDR); + + IRQS = 6; } private void REG_OP_LD_16D() { PopulateCURINSTR(RD_INC, A, PC, RD_INC, B, PC); + + IRQS = 2; } private void DIR_OP_LD_16D() @@ -129,6 +158,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, RD_INC, A, ADDR, RD_INC, B, ADDR); + + IRQS = 4; } private void DIR_OP_ST_16D() @@ -137,6 +168,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SET_ADDR, ALU, A, A, WR_HI_INC, ADDR, ALU, WR, ADDR, B); + + IRQS = 4; } private void DIR_CMP_16(ushort oper, ushort dest) @@ -146,6 +179,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU2, ADDR, SET_ADDR, ADDR, ALU, ALU2, oper, dest, ADDR); + + IRQS = 5; } private void IMD_CMP_16(ushort oper, ushort dest) @@ -153,12 +188,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC, ALU, PC, RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, oper, dest, ADDR); + + IRQS = 3; } private void REG_OP_LD_16(ushort dest) { PopulateCURINSTR(RD_INC, ALU, PC, RD_INC_OP, ALU2, PC, SET_ADDR, dest, ALU, ALU2); + + IRQS = 2; } private void DIR_OP_LD_16(ushort dest) @@ -167,6 +206,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, RD_INC, ALU, ADDR, RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + + IRQS = 4; } private void DIR_OP_ST_16(ushort src) @@ -175,6 +216,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, WR_HI_INC, ADDR, src, WR_DEC_LO, ADDR, src); + + IRQS = 4; } private void EXT_OP_LD_16(ushort dest) @@ -184,6 +227,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, RD_INC, ALU, ADDR, RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + + IRQS = 5; } private void EXT_OP_ST_16(ushort src) @@ -193,6 +238,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, WR_HI_INC, ADDR, src, WR_DEC_LO, ADDR, src); + + IRQS = 5; } private void EXT_OP_LD_16D() @@ -202,6 +249,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, RD_INC, A, ADDR, RD_INC, B, ADDR); + + IRQS = 5; } private void EXT_OP_ST_16D() @@ -211,6 +260,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SET_ADDR, ALU, A, A, WR_HI_INC, ADDR, ALU, WR, ADDR, B); + + IRQS = 5; } private void EXT_CMP_16(ushort oper, ushort dest) @@ -221,6 +272,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD, ALU2, ADDR, SET_ADDR, ADDR, ALU, ALU2, oper, dest, ADDR); + + IRQS = 6; } private void EXG_() @@ -232,6 +285,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, IDLE, IDLE); + + IRQS = 7; } private void TFR_() @@ -241,12 +296,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, IDLE, IDLE); + + IRQS = 5; } private void JMP_DIR_() { PopulateCURINSTR(RD_INC, ALU, PC, SET_ADDR, PC, DP, ALU); + + IRQS = 2; } private void JMP_EXT_() @@ -254,6 +313,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC, ALU, PC, RD_INC, ALU2, PC, SET_ADDR, PC, ALU, ALU2); + + IRQS = 3; } private void JSR_() @@ -264,6 +325,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 TR, PC, ADDR, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); + + IRQS = 6; } private void JSR_EXT() @@ -275,6 +338,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 TR, PC, ADDR, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); + + IRQS = 7; } private void LBR_(bool cond) @@ -285,12 +350,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, ADD16BR, PC, ADDR); + + IRQS = 4; } else { PopulateCURINSTR(RD_INC, ALU, PC, RD_INC, ALU2, PC, SET_ADDR, PC, ALU, ALU2); + + IRQS = 3; } } @@ -300,11 +369,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(RD_INC, ALU, PC, ADD8BR, PC, ALU); + + IRQS = 2; } else { PopulateCURINSTR(RD_INC, ALU, PC, IDLE); + + IRQS = 2; } } @@ -316,6 +389,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 DEC16, SP, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); + + IRQS = 6; } private void LBSR_() @@ -328,22 +403,30 @@ namespace BizHawk.Emulation.Common.Components.MC6809 DEC16, SP, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); + + IRQS = 8; } private void PAGE_2() { PopulateCURINSTR(OP_PG_2); + + IRQS = 0; } private void PAGE_3() { PopulateCURINSTR(OP_PG_3); + + IRQS = 0; } private void ABX_() { PopulateCURINSTR(ABX, IDLE); + + IRQS = 2; } private void MUL_() @@ -358,6 +441,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, IDLE, IDLE); + + IRQS = 10; } private void RTS() @@ -366,6 +451,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, ALU, SP, RD_INC, ALU2, SP, SET_ADDR, PC, ALU, ALU2); + + IRQS = 4; } private void RTI() @@ -381,7 +468,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, SP, SET_ADDR, Y, ALU, ALU2, RD_INC, ALU, SP, RD_INC_OP, ALU2, SP, SET_ADDR, US, ALU, ALU2, - SET_ADDR, PC, ALU2, ALU); + RD_INC, ALU, SP, + RD_INC_OP, ALU2, SP, + SET_ADDR, PC, ALU, ALU2); + + IRQS = 14; } private void PSH(ushort src) @@ -390,6 +481,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, DEC16, SP, PSH_n, src); + + IRQS = 0; } // Post byte info is in ALU @@ -457,7 +550,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 else { Regs[src] += 1; // we decremented an extra time overall, regardless of what was run + + IRQS = irq_pntr + 1; } + + instr_pntr = 0; } private void PUL(ushort src) @@ -465,6 +562,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC, ALU, PC, IDLE, PSH_n, src); + + IRQS = 0; } // Post byte info is in ALU @@ -533,8 +632,12 @@ namespace BizHawk.Emulation.Common.Components.MC6809 else { // extra end cycle - PopulateCURINSTR(RD_INC_OP, IDLE); + PopulateCURINSTR(IDLE); + + IRQS = irq_pntr + 2; } + + instr_pntr = 0; } private void SWI1() @@ -557,7 +660,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SET_F_I, RD_INC, ALU, ADDR, RD_INC, ALU2, ADDR, - SET_ADDR, ADDR, ALU, ALU2); + SET_ADDR, PC, ALU, ALU2); + + IRQS = 18; } private void SWI2_3(ushort pick) @@ -580,7 +685,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 IDLE, RD_INC, ALU, ADDR, RD_INC, ALU2, ADDR, - SET_ADDR, ADDR, ALU, ALU2); + SET_ADDR, PC, ALU, ALU2); + + IRQS = 18; } private void CWAI_() @@ -601,6 +708,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR_DEC_LO, SP, A, WR, SP, CC, CWAI); + + IRQS = 16; } } } From ff4acab261cbabeddc309d15d14d07aee27cc500 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Mon, 8 Apr 2019 08:59:01 +0100 Subject: [PATCH 013/138] Serializer: Add support for float[], double and double[] --- BizHawk.Common/Serializer.cs | 135 +++++++++++++++++++++++++++++++++++ BizHawk.Common/Util.cs | 32 +++++++++ 2 files changed, 167 insertions(+) diff --git a/BizHawk.Common/Serializer.cs b/BizHawk.Common/Serializer.cs index baca009720..ae0a3df4c0 100644 --- a/BizHawk.Common/Serializer.cs +++ b/BizHawk.Common/Serializer.cs @@ -440,6 +440,90 @@ namespace BizHawk.Common } } + public void Sync(string name, ref float[] val, bool useNull) + { + if (IsText) + { + SyncText(name, ref val, useNull); + } + else if (IsReader) + { + val = Util.ByteBufferToFloatBuffer(Util.ReadByteBuffer(_br, false)); + if (val == null && !useNull) + { + val = new float[0]; + } + } + else + { + Util.WriteByteBuffer(_bw, Util.FloatBufferToByteBuffer(val)); + } + } + + public void SyncText(string name, ref float[] val, bool useNull) + { + if (IsReader) + { + if (Present(name)) + { + var bytes = Util.HexStringToBytes(Item(name)); + val = Util.ByteBufferToFloatBuffer(bytes); + } + + if (val != null && val.Length == 0 && useNull) + { + val = null; + } + } + else + { + var temp = val ?? new float[0]; + _tw.WriteLine("{0} {1}", name, Util.FloatBufferToByteBuffer(temp).BytesToHexString()); + } + } + + public void Sync(string name, ref double[] val, bool useNull) + { + if (IsText) + { + SyncText(name, ref val, useNull); + } + else if (IsReader) + { + val = Util.ByteBufferToDoubleBuffer(Util.ReadByteBuffer(_br, false)); + if (val == null && !useNull) + { + val = new double[0]; + } + } + else + { + Util.WriteByteBuffer(_bw, Util.DoubleBufferToByteBuffer(val)); + } + } + + public void SyncText(string name, ref double[] val, bool useNull) + { + if (IsReader) + { + if (Present(name)) + { + var bytes = Util.HexStringToBytes(Item(name)); + val = Util.ByteBufferToDoubleBuffer(bytes); + } + + if (val != null && val.Length == 0 && useNull) + { + val = null; + } + } + else + { + var temp = val ?? new double[0]; + _tw.WriteLine("{0} {1}", name, Util.DoubleBufferToByteBuffer(temp).BytesToHexString()); + } + } + public void Sync(string name, ref Bit val) { if (IsText) @@ -612,6 +696,22 @@ namespace BizHawk.Common } } + public void Sync(string name, ref double val) + { + if (IsText) + { + SyncText(name, ref val); + } + else if (IsReader) + { + Read(ref val); + } + else + { + Write(ref val); + } + } + public void Sync(string name, ref bool val) { if (IsText) @@ -907,6 +1007,18 @@ namespace BizHawk.Common } } + private void SyncText(string name, ref double val) + { + if (IsReader) + { + ReadText(name, ref val); + } + else + { + WriteText(name, ref val); + } + } + private void SyncText(string name, ref bool val) { if (IsReader) @@ -1135,6 +1247,16 @@ namespace BizHawk.Common _bw.Write(val); } + private void Read(ref double val) + { + val = _br.ReadDouble(); + } + + private void Write(ref double val) + { + _bw.Write(val); + } + private void ReadText(string name, ref float val) { if (Present(name)) @@ -1148,6 +1270,19 @@ namespace BizHawk.Common _tw.WriteLine("{0} {1}", name, val); } + private void ReadText(string name, ref double val) + { + if (Present(name)) + { + val = double.Parse(Item(name)); + } + } + + private void WriteText(string name, ref double val) + { + _tw.WriteLine("{0} {1}", name, val); + } + private void Read(ref bool val) { val = _br.ReadBoolean(); diff --git a/BizHawk.Common/Util.cs b/BizHawk.Common/Util.cs index c0d6f94185..17c8a90722 100644 --- a/BizHawk.Common/Util.cs +++ b/BizHawk.Common/Util.cs @@ -299,6 +299,38 @@ namespace BizHawk.Common return ret; } + public static float[] ByteBufferToFloatBuffer(byte[] buf) + { + int num = buf.Length / sizeof(float); + var ret = new float[num]; + Buffer.BlockCopy(buf, 0, ret, 0, num); + return ret; + } + + public static byte[] FloatBufferToByteBuffer(float[] buf) + { + int num = buf.Length; + var ret = new byte[num * sizeof(float)]; + Buffer.BlockCopy(buf, 0, ret, 0, ret.Length); + return ret; + } + + public static double[] ByteBufferToDoubleBuffer(byte[] buf) + { + int num = buf.Length; + var ret = new double[num / sizeof(double)]; + Buffer.BlockCopy(buf, 0, ret, 0, num); + return ret; + } + + public static byte[] DoubleBufferToByteBuffer(double[] buf) + { + int num = buf.Length; + var ret = new byte[num * sizeof(double)]; + Buffer.BlockCopy(buf, 0, ret, 0, ret.Length); + return ret; + } + public static byte[] ReadByteBuffer(BinaryReader br, bool returnNull) { int len = br.ReadInt32(); From 41c57e52174207155cc918a97263483976df44fc Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 8 Apr 2019 16:09:26 -0400 Subject: [PATCH 014/138] fix repeating sound buffer when calling client.SetSoundOn --- .../tools/Lua/Libraries/EmuLuaLibrary.Client.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs index 7d3a8a7fd9..cd9aa47ae4 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs @@ -145,6 +145,8 @@ namespace BizHawk.Client.EmuHawk public static void SetSoundOn(bool enable) { Global.Config.SoundEnabled = enable; + GlobalWin.Sound.StopSound(); + GlobalWin.Sound.StartSound(); } [LuaMethodExample("if ( client.GetSoundOn( ) ) then\r\n\tconsole.log( \"Gets the state of the Sound On toggle\" );\r\nend;")] From 9296092b848d8d3d72e1321891e473a70642cefb Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 8 Apr 2019 18:57:21 -0500 Subject: [PATCH 015/138] Vectrex: Start running the cpu and fixing bugs --- Assets/gamedb/gamedb.txt | 1 + Assets/gamedb/gamedb_vectrex.txt | 1 + ...izHawkSystemIdToCoreSystemEnumConverter.cs | 3 + BizHawk.Client.Common/Api/CoreSystem.cs | 1 + BizHawk.Client.Common/RomLoader.cs | 1 + BizHawk.Client.Common/SystemInfo.cs | 5 + .../Database/FirmwareDatabase.cs | 1 + .../BizHawk.Emulation.Cores.csproj | 1 - .../CPUs/MC6809/Disassembler.cs | 14 ++- .../CPUs/MC6809/Execute.cs | 11 ++- .../CPUs/MC6809/Indexed_Modes.cs | 36 +++---- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 37 +++++-- .../CPUs/MC6809/OP_Tables.cs | 76 ++++++++------- .../CPUs/MC6809/Operations.cs | 6 +- .../Consoles/GCE/Vectrex/Audio.cs | 1 - .../Consoles/GCE/Vectrex/HW_Registers.cs | 5 +- .../Consoles/GCE/Vectrex/MemoryMap.cs | 96 ++++++++++++++++--- .../Consoles/GCE/Vectrex/PPU.cs | 8 -- .../Consoles/GCE/Vectrex/SerialPort.cs | 6 -- .../Consoles/GCE/Vectrex/Vectrex.CpuLink.cs | 27 ------ .../GCE/Vectrex/VectrexHawk.IEmulator.cs | 7 +- .../Consoles/GCE/Vectrex/VectrexHawk.cs | 28 +----- 22 files changed, 221 insertions(+), 151 deletions(-) create mode 100644 Assets/gamedb/gamedb_vectrex.txt delete mode 100644 BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Vectrex.CpuLink.cs diff --git a/Assets/gamedb/gamedb.txt b/Assets/gamedb/gamedb.txt index 5b6a8ab82b..f2c2ba9c25 100644 --- a/Assets/gamedb/gamedb.txt +++ b/Assets/gamedb/gamedb.txt @@ -21,6 +21,7 @@ #include gamedb_sega_md.txt #include gamedb_snes.txt #include gamedb_user.txt +#include gamedb_vectrex.txt #include gamedb_ws.txt #include gamedb_wsc.txt #include gamedb_zxspectrum.txt diff --git a/Assets/gamedb/gamedb_vectrex.txt b/Assets/gamedb/gamedb_vectrex.txt new file mode 100644 index 0000000000..1a706121e4 --- /dev/null +++ b/Assets/gamedb/gamedb_vectrex.txt @@ -0,0 +1 @@ +SHA1:67F8513958C04E936B135740ED4EC6E6FA1763D5 Clean Sweep VEC diff --git a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs index a9d0fdafe6..a8a3751112 100644 --- a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs +++ b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs @@ -93,6 +93,9 @@ namespace BizHawk.Client.ApiHawk case "TI83": return CoreSystem.TI83; + case "VEC": + return CoreSystem.Vectrex; + case "WSWAN": return CoreSystem.WonderSwan; diff --git a/BizHawk.Client.Common/Api/CoreSystem.cs b/BizHawk.Client.Common/Api/CoreSystem.cs index 48a10efbfc..48ba2e4f1a 100644 --- a/BizHawk.Client.Common/Api/CoreSystem.cs +++ b/BizHawk.Client.Common/Api/CoreSystem.cs @@ -29,6 +29,7 @@ WonderSwan, Libretro, VirtualBoy, + Vectrex, NeoGeoPocket, ZXSpectrum, AmstradCPC, diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index fe093b2532..0e10ef3bf4 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -28,6 +28,7 @@ using GPGX64 = BizHawk.Emulation.Cores.Consoles.Sega.gpgx; using BizHawk.Emulation.Cores.Consoles.Sega.Saturn; using BizHawk.Emulation.Cores.Consoles.NEC.PCFX; using BizHawk.Emulation.Cores.Computers.AmstradCPC; +using BizHawk.Emulation.Cores.Consoles.Vectrex; namespace BizHawk.Client.Common { diff --git a/BizHawk.Client.Common/SystemInfo.cs b/BizHawk.Client.Common/SystemInfo.cs index 258b5b1c4d..a109e7ddf9 100644 --- a/BizHawk.Client.Common/SystemInfo.cs +++ b/BizHawk.Client.Common/SystemInfo.cs @@ -183,6 +183,11 @@ namespace BizHawk.Client.Common /// public static SystemInfo VirtualBoy { get; } = new SystemInfo("Virtual Boy", CoreSystem.VirtualBoy, 1); + /// + /// Gets the instance for Vectrex + /// + public static SystemInfo Vectrex { get; } = new SystemInfo("Vextrex", CoreSystem.Vectrex, 2); + /// /// Gets the instance for TI-83 /// diff --git a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs index 32ba4651e5..79e2233317 100644 --- a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs +++ b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs @@ -30,6 +30,7 @@ namespace BizHawk.Emulation.Common FirmwareAndOption("5A140136A16D1D83E4FF32A19409CA376A8DF874", 16384, "A78", "Bios_PAL", "7800PALBIOS.bin", "PAL Bios"); FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", 4096, "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios"); FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", 8192, "Coleco", "Bios", "ColecoBios.bin", "Bios"); + FirmwareAndOption("B9BBF5BB0EAC52D039A4A993A2D8064B862C9E28", 4096, "Vectrex", "Bios", "VectrexBios.bin", "Bios"); var gbaNormal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "gbabios.rom", "Bios (World)"); var gbaJDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "gbabios.rom", "Bios (J Debug)"); diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 2aec848dac..b7fa5086d0 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -596,7 +596,6 @@ - diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs index a60e48e565..892d6015d1 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs @@ -793,17 +793,23 @@ namespace BizHawk.Emulation.Common.Components.MC6809 bytes.Add(reader(addr++)); string result = table[bytes[0]]; - if (bytes[0] == 0xcb) + if (bytes[0] == 0x10) { bytes.Add(reader(addr++)); - result = table[bytes[1] + 256]; + result = table2[bytes[1]]; } - if (result.Contains("d8")) + if (bytes[0] == 0x11) + { + bytes.Add(reader(addr++)); + result = table3[bytes[1]]; + } + + if (result.Contains("i8")) { byte d = reader(addr++); bytes.Add(d); - result = result.Replace("d8", string.Format("#{0:X2}h", d)); + result = result.Replace("i8", string.Format("#{0:X2}h", d)); } else if (result.Contains("d16")) { diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index 910dcb9cea..836508c574 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -8,14 +8,19 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // variables for executing instructions public int instr_pntr = 0; - public ushort[] cur_instr; - public int opcode; + public ushort[] cur_instr = new ushort[60]; + public int opcode_see; public int IRQS; public int irq_pntr; + ushort reg_d_ad; + ushort reg_h_ad; + ushort reg_l_ad; + public void FetchInstruction(byte opcode) { + opcode_see = opcode; switch (opcode) { case 0x00: DIRECT_MEM(NEG); break; // NEG (Direct) @@ -279,6 +284,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public void FetchInstruction2(byte opcode) { + opcode_see = opcode; switch (opcode) { case 0x21: LBR_(false); break; // BRN (Relative) @@ -326,6 +332,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public void FetchInstruction3(byte opcode) { + opcode_see = opcode; switch (opcode) { case 0x3F: SWI2_3(3); break; // SWI3 (Inherent) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 97cb87682b..8025b1d0f9 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -53,7 +53,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); - IRQS = 0; + IRQS = -1; } private void INDEX_OP_REG(ushort oper, ushort src) @@ -63,25 +63,25 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, IDX_DCDE); - IRQS = 0; + IRQS = -1; } private void INDEX_OP_JMP() { PopulateCURINSTR(TR, PC, IDX_EA); - IRQS = irq_pntr + 2; + IRQS = 1; } private void INDEX_OP_JSR() { - PopulateCURINSTR(IDLE, - IDLE, + PopulateCURINSTR(TR, ADDR, PC, + DEC16, SP, TR, PC, IDX_EA, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); - IRQS = irq_pntr + 6; + IRQS = 5; } private void INDEX_OP_LEA(ushort dest) @@ -89,7 +89,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(TR, dest, IDX_EA, IDLE); - IRQS = irq_pntr + 3; + IRQS = 2; } private void INDEX_OP_LD() @@ -98,7 +98,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, ALU, IDX_EA, RD_INC_OP, ALU2, IDX_EA, SET_ADDR, indexed_op_reg, ALU, ALU2); - IRQS = irq_pntr + 4; + IRQS = 3; } private void INDEX_OP_ST() @@ -107,7 +107,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR_HI_INC, IDX_EA, indexed_op_reg, WR_DEC_LO, IDX_EA, indexed_op_reg); - IRQS = irq_pntr + 4; + IRQS = 3; } private void INDEX_OP_LDD() @@ -116,7 +116,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC, A, IDX_EA, RD_INC, B, IDX_EA); - IRQS = irq_pntr + 4; + IRQS = 3; } private void INDEX_OP_STD() @@ -125,7 +125,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR_HI_INC, IDX_EA, ADDR, WR_DEC_LO, IDX_EA, B); - IRQS = irq_pntr + 4; + Console.WriteLine("here"); + IRQS = 3; } private void INDEX_OP_EX4(ushort oper) @@ -133,7 +134,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, RD_INC_OP, ALU, IDX_EA, oper, indexed_op_reg, ALU); - IRQS = irq_pntr + 3; + IRQS = 2; } private void INDEX_OP_EX4_ST() @@ -141,7 +142,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, WR, ALU, IDX_EA, indexed_op_reg); - IRQS = irq_pntr + 3; + IRQS = 2; } private void INDEX_OP_EX6(ushort oper) @@ -151,7 +152,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 oper, ALU, WR, IDX_EA, ALU); - IRQS = irq_pntr + 5; + IRQS = 4; } private void INDEX_OP_EX6D(ushort oper) @@ -161,7 +162,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, oper, ADDR); - IRQS = irq_pntr + 5; + IRQS = 4; } private void INDEX_CMP_EX6(ushort oper) @@ -171,7 +172,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, IDX_EA, SET_ADDR, ADDR, ALU, ALU2, oper, indexed_op_reg, ADDR); - IRQS = irq_pntr + 5; + IRQS = 4; } // ALU holds the post byte @@ -348,6 +349,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x4: Regs[IDX_EA] = Regs[indexed_reg]; Index_Op_Builder(); + return; // need to return here or else we run into the code below invalidating irq_pntr break; case 0x5: Regs[IDX_EA] = (ushort)(Regs[indexed_reg] + (((Regs[B] & 0x80) == 0x80) ? (Regs[B] | 0xFF00) : Regs[B])); @@ -447,7 +449,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } instr_pntr = 0; - irq_pntr = 100; + irq_pntr = -1; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index f3c8ee7cf2..e1019df6f9 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -85,12 +85,12 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ResetRegisters(); ResetInterrupts(); TotalExecutedCycles = 0; - Regs[ADDR] = 0xFFFE; + Regs[PC] = 0xFFFE; PopulateCURINSTR(IDLE, IDLE, IDLE, - RD_INC, ALU, ADDR, - RD_INC, ALU2, ADDR, + RD_INC, ALU, PC, + RD_INC, ALU2, PC, SET_ADDR, PC, ALU, ALU2); IRQS = 6; @@ -148,6 +148,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // Execute instructions public void ExecuteOne() { + Console.Write(opcode_see + " "); switch (cur_instr[instr_pntr++]) { case IDLE: @@ -160,12 +161,17 @@ namespace BizHawk.Emulation.Common.Components.MC6809 if (CDLCallback != null) CDLCallback(PC, eCDLogMemFlags.FetchFirst); FetchInstruction(ReadMemory(Regs[PC]++)); instr_pntr = 0; + irq_pntr = -1; break; case OP_PG_2: FetchInstruction2(ReadMemory(Regs[PC]++)); + instr_pntr = 0; + irq_pntr = -1; break; case OP_PG_3: FetchInstruction3(ReadMemory(Regs[PC]++)); + instr_pntr = 0; + irq_pntr = -1; break; case RD: Read_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); @@ -207,8 +213,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case DEC16: DEC16_Func(cur_instr[instr_pntr++]); break; + case TR: + TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case SET_ADDR: - Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[cur_instr[instr_pntr++]] << 8) | Regs[cur_instr[instr_pntr++]]); + reg_d_ad = cur_instr[instr_pntr++]; + reg_h_ad = cur_instr[instr_pntr++]; + reg_l_ad = cur_instr[instr_pntr++]; + + Regs[reg_d_ad] = (ushort)((Regs[reg_h_ad] << 8) | Regs[reg_l_ad]); break; case JPE: if (!FlagE) { instr_pntr = 45; }; @@ -282,7 +295,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 TFR_Func(cur_instr[instr_pntr++]); break; case SET_ADDR: - Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[cur_instr[instr_pntr++]] << 8) | Regs[cur_instr[instr_pntr++]]); + reg_d_ad = cur_instr[instr_pntr++]; + reg_h_ad = cur_instr[instr_pntr++]; + reg_l_ad = cur_instr[instr_pntr++]; + + // Console.WriteLine(reg_d_ad + " " + reg_h_ad + " " + reg_l_ad); + // Console.WriteLine(Regs[reg_d_ad] + " " + Regs[reg_h_ad] + " " + Regs[reg_l_ad]); + + Regs[reg_d_ad] = (ushort)((Regs[reg_h_ad] << 8) | Regs[reg_l_ad]); break; case NEG: NEG_8_Func(cur_instr[instr_pntr++]); @@ -436,7 +456,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(CWAI); irq_pntr = 0; - IRQS = 0; + IRQS = -1; } instr_pntr = 0; break; @@ -525,6 +545,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(OP); instr_pntr = irq_pntr = 0; + IRQS = -1; } } @@ -548,7 +569,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { Disassembly = string.Format( "{0} ", - disassemble ? Disassemble(PC, ReadMemory, out notused) : "---").PadRight(40), + disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---").PadRight(40), RegisterInfo = string.Format( "A:{0:X2} B:{1:X2} X:{2:X4} Y:{3:X4} US:{4:X4} SP:{5:X4} DP:{6:X2} CC:{7:X2} Cy:{8} {9}{10}{11}{12}{13}{14}{15}{16}", Regs[A], @@ -621,7 +642,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ser.Sync("instr_pntr", ref instr_pntr); ser.Sync("cur_instr", ref cur_instr, false); - ser.Sync("opcode", ref opcode); + ser.Sync("opcode_see", ref opcode_see); ser.Sync("IRQS", ref IRQS); ser.Sync("irq_pntr", ref irq_pntr); diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs index 91d83517a9..bc9e27f4ec 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs @@ -17,7 +17,10 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void ILLEGAL() { - throw new Exception("Encountered illegal instruction"); + //throw new Exception("Encountered illegal instruction"); + PopulateCURINSTR(IDLE); + + IRQS = 1; } private void SYNC_() @@ -25,7 +28,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(IDLE, SYNC); - IRQS = 0; + IRQS = -1; } private void REG_OP(ushort oper, ushort src) @@ -278,7 +281,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void EXG_() { - PopulateCURINSTR(RD_INC, ALU, + PopulateCURINSTR(RD_INC, ALU, PC, EXG, ALU, IDLE, IDLE, @@ -291,7 +294,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void TFR_() { - PopulateCURINSTR(RD_INC, ALU, + PopulateCURINSTR(RD_INC, ALU, PC, TFR, ALU, IDLE, IDLE, @@ -321,7 +324,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(RD_INC, ALU, PC, SET_ADDR, ADDR, DP, ALU, - IDLE, + DEC16, SP, TR, PC, ADDR, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); @@ -332,12 +335,12 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void JSR_EXT() { PopulateCURINSTR(RD_INC, ALU, PC, - RD_INC_OP, ALU2, PC, - SET_ADDR, ADDR, ALU, ALU2, - IDLE, + RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + TR, ALU, PC, + DEC16, SP, TR, PC, ADDR, - WR_DEC_LO, SP, ADDR, - WR_HI, SP, ADDR); + WR_DEC_LO, SP, ALU, + WR_HI, SP, ALU); IRQS = 7; } @@ -384,8 +387,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void BSR_() { PopulateCURINSTR(RD_INC, ALU, PC, - ADD8BR, PC, ALU, TR, ADDR, PC, + ADD8BR, PC, ALU, DEC16, SP, WR_DEC_LO, SP, ADDR, WR_HI, SP, ADDR); @@ -398,11 +401,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC, ALU, PC, RD_INC, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, + TR, ALU, PC, ADD16BR, PC, ADDR, - TR, ADDR, PC, DEC16, SP, - WR_DEC_LO, SP, ADDR, - WR_HI, SP, ADDR); + WR_DEC_LO, SP, ALU, + WR_HI, SP, ALU); IRQS = 8; } @@ -411,14 +414,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(OP_PG_2); - IRQS = 0; + IRQS = -1; } private void PAGE_3() { PopulateCURINSTR(OP_PG_3); - IRQS = 0; + IRQS = -1; } private void ABX_() @@ -482,7 +485,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 DEC16, SP, PSH_n, src); - IRQS = 0; + IRQS = -1; } // Post byte info is in ALU @@ -546,6 +549,8 @@ namespace BizHawk.Emulation.Common.Components.MC6809 else if (Regs[ALU].Bit(0)) { PopulateCURINSTR(WR_DEC_LO_OP, src, CC, PSH_n, src); + + Regs[ALU] = 0; } else { @@ -561,55 +566,54 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(RD_INC, ALU, PC, IDLE, - PSH_n, src); + PUL_n, src); - IRQS = 0; + IRQS = -1; } // Post byte info is in ALU // mask out bits until the end private void PUL_n_BLD(ushort src) { - if (Regs[ALU].Bit(7)) + if (Regs[ALU].Bit(0)) { PopulateCURINSTR(RD_INC_OP, CC, src, PUL_n, src); - Regs[ALU] &= 0x7F; + Regs[ALU] &= 0xFE; } - else if (Regs[ALU].Bit(6)) + else if (Regs[ALU].Bit(1)) { PopulateCURINSTR(RD_INC_OP, A, src, PUL_n, src); - Regs[ALU] &= 0x3F; + Regs[ALU] &= 0xFC; } - else if (Regs[ALU].Bit(5)) + else if (Regs[ALU].Bit(2)) { PopulateCURINSTR(RD_INC_OP, B, src, PUL_n, src); - - Regs[ALU] &= 0x1F; + Regs[ALU] &= 0xF8; } - else if (Regs[ALU].Bit(4)) + else if (Regs[ALU].Bit(3)) { PopulateCURINSTR(RD_INC_OP, DP, src, PUL_n, src); - Regs[ALU] &= 0xF; + Regs[ALU] &= 0xF0; } - else if (Regs[ALU].Bit(3)) + else if (Regs[ALU].Bit(4)) { PopulateCURINSTR(RD_INC_OP, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, X, src); - Regs[ALU] &= 0x7; + Regs[ALU] &= 0xE0; } - else if (Regs[ALU].Bit(2)) + else if (Regs[ALU].Bit(5)) { PopulateCURINSTR(RD_INC_OP, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, Y, src); - Regs[ALU] &= 0x3; + Regs[ALU] &= 0xC0; } - else if (Regs[ALU].Bit(1)) + else if (Regs[ALU].Bit(6)) { if (src == US) { @@ -622,12 +626,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ADDR, src, SET_ADDR_PUL, US, src); } - Regs[ALU] &= 0x1; + Regs[ALU] &= 0x80; } - else if (Regs[ALU].Bit(0)) + else if (Regs[ALU].Bit(7)) { PopulateCURINSTR(RD_INC_OP, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, PC, src); + + Regs[ALU] = 0; } else { diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index e7f22c98da..6621a45fd4 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -22,9 +22,11 @@ namespace BizHawk.Emulation.Common.Components.MC6809 if (src == PC) CDLCallback(Regs[src], eCDLogMemFlags.FetchOperand); else CDLCallback(Regs[src], eCDLogMemFlags.Data); } + //Console.WriteLine(dest + " " + src + " " + opcode_see); + Regs[dest] = ReadMemory(Regs[src]); - Regs[src] = Regs[src]++; + Regs[src]++; } public void Write_Func(ushort dest_l, ushort dest_h, ushort src) @@ -698,7 +700,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } else { - Regs[dest] = Regs[dest]; + Regs[dest] = Regs[src]; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs index 7ed548d780..1af35bb959 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs @@ -8,7 +8,6 @@ using BizHawk.Common.NumberExtensions; namespace BizHawk.Emulation.Cores.Consoles.Vectrex { // An AY_3_8912 - public class Audio : ISoundProvider { public VectrexHawk Core { get; set; } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs index 5d7a9cdf07..ebada2c06f 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs @@ -7,9 +7,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { public partial class VectrexHawk { - // Interact with Hardware registers through these read and write methods - // Typically you will only be able to access different parts of the hardware through their available registers - // Sending the memory map of these regiesters through here helps keep things organized even though it results in an extra function call public byte Read_Registers(int addr) { byte ret = 0; @@ -33,7 +30,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public void Register_Reset() { - // Registers will start with a default value at power on, use this funciton to set them + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs index 8fce90198f..176bc1beaa 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs @@ -15,30 +15,104 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { public partial class VectrexHawk { - // typically here you have a big if / else if block to decide what to do with memory reads and writes - // send hardware register accesses to the Read_register / Write_register methods - // make sure you are returning the correct value (typically 0 or 0xFF) for unmapped memory - - // PeekMemory is called by the hex eidtor and other tools to read what's on the bus - // make sure it doesn't modify anything in the core or you will be in debugging hell. - public byte ReadMemory(ushort addr) { - // memory callbacks are used for LUA and such MemoryCallbacks.CallReads(addr, "System Bus"); - return 0; + if (addr < 0x8000) + { + return 0xFF; + } + else if (addr < 0xC800) + { + return 0xFF; + } + else if (addr < 0xD000) + { + return RAM[(addr-0xC800) & 0x3FF]; + } + else if (addr < 0xD800) + { + return 0xFF; + } + else if (addr < 0xE000) + { + return 0xFF; + } + else if (addr < 0xF000) + { + return 0xFF; + } + else + { + return _bios[addr - 0xF000]; + } } public void WriteMemory(ushort addr, byte value) { MemoryCallbacks.CallWrites(addr, "System Bus"); - + + if (addr < 0x8000) + { + + } + else if (addr < 0xC800) + { + + } + else if (addr < 0xD000) + { + RAM[(addr - 0xC800) & 0x3FF] = value; + } + else if (addr < 0xD800) + { + + } + else if (addr < 0xE000) + { + + } + else if (addr < 0xF000) + { + + } + else + { + + } } public byte PeekMemory(ushort addr) { - return 0; + if (addr < 0x8000) + { + return 0xFF; + } + else if (addr < 0xC800) + { + return 0xFF; + } + else if (addr < 0xD000) + { + return RAM[(addr - 0xC800) & 0x3FF]; + } + else if (addr < 0xD800) + { + return 0xFF; + } + else if (addr < 0xE000) + { + return 0xFF; + } + else if (addr < 0xF000) + { + return 0xFF; + } + else + { + return _bios[addr - 0xF000]; + } } } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/PPU.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/PPU.cs index 00eb6ac7de..2d2118bc80 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/PPU.cs @@ -3,11 +3,6 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Consoles.Vectrex { - // Here is where you will write the renderer for the core. - // You will probably spend just about all of your time writing this part. - // Plan ahead on what types of memory structures you want, and understand how the physical display unit sees data - // if you get stuck, probably GBHawk has the cleanest implementation to use for reference - public class PPU { public VectrexHawk Core { get; set; } @@ -22,13 +17,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } - // you should be able to run the PPU one step at a time through this method. public void tick() { } - // if some values aren't latched immediately, you might need this function to delay their latching public virtual void latch_delay() { @@ -39,7 +32,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } - // Reset all values here, should be called along with other reset methods public void Reset() { diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/SerialPort.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/SerialPort.cs index 992542757b..1212ce8a24 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/SerialPort.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/SerialPort.cs @@ -5,11 +5,6 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Consoles.Vectrex { - // your core may have several integral peripherals beyond the usual graphics / sound / controller - // here is one such example - // Treat it the same way as any other component. you should be able to run it one tick at a time in sync with the - // other parts of the core - public class SerialPort { public VectrexHawk Core { get; set; } @@ -24,7 +19,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } - public void serial_transfer_tick() { diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Vectrex.CpuLink.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Vectrex.CpuLink.cs deleted file mode 100644 index c5348ac547..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Vectrex.CpuLink.cs +++ /dev/null @@ -1,27 +0,0 @@ -using BizHawk.Emulation.Cores.Components.M6502; - -namespace BizHawk.Emulation.Cores.Consoles.Vectrex -{ - public partial class VectrexHawk - { - public struct CpuLink : IMOS6502XLink - { - private readonly VectrexHawk _Vectrex; - - public CpuLink(VectrexHawk Vectrex) - { - _Vectrex = Vectrex; - } - - public byte DummyReadMemory(ushort address) => _Vectrex.ReadMemory(address); - - public void OnExecFetch(ushort address) => _Vectrex.ExecFetch(address); - - public byte PeekMemory(ushort address) => _Vectrex.CDL == null ? _Vectrex.PeekMemory(address) : _Vectrex.FetchMemory_CDL(address); - - public byte ReadMemory(ushort address) => _Vectrex.CDL == null ? _Vectrex.ReadMemory(address) : _Vectrex.ReadMemory_CDL(address); - - public void WriteMemory(ushort address, byte value) => _Vectrex.WriteMemory(address, value); - } - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs index 300cd5663b..5f91994a35 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs @@ -44,12 +44,15 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public void do_frame() { - + for (int i = 0; i < 4500; i++) + { + cpu.ExecuteOne(); + } } public int Frame => _frame; - public string SystemId => "VIC20"; + public string SystemId => "VEC"; public bool DeterministicEmulation { get; set; } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs index 5e84fee7ab..9f9bc9b929 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs @@ -17,22 +17,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public partial class VectrexHawk : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ISettable { - // declaractions - // put top level core variables here - // including things like RAM and BIOS - // they will be used in the hex editor and others - - // the following declaraion is only an example - // see memoryDomains.cs to see how it is used to define a Memory Domain that you can see in Hex editor - // ex: - public byte[] RAM = new byte[0x8000]; + public byte[] RAM = new byte[0x400]; public byte[] _bios; public readonly byte[] _rom; - // sometimes roms will have a header - // the following is only an example in order to demonstrate how to extract the header public readonly byte[] header = new byte[0x50]; public byte[] cart_RAM; @@ -49,9 +39,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public Audio audio; public SerialPort serialport; - private static byte[] GBA_override = { 0xFF, 0x00, 0xCD, 0x03, 0x35, 0xAA, 0x31, 0x90, 0x94, 0x00, 0x00, 0x00, 0x00 }; - - [CoreConstructor("Vectrex")] + [CoreConstructor("VEC")] public VectrexHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) { var ser = new BasicServiceProvider(this); @@ -75,30 +63,24 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex _syncSettings = (VectrexSyncSettings)syncSettings ?? new VectrexSyncSettings(); _controllerDeck = new VectrexHawkControllerDeck(_syncSettings.Port1); - // BIOS stuff can be tricky. Sometimes you'll have more then one vailable BIOS or different BIOSes for different regions - // for now I suggest just picking one going byte[] Bios = null; - //Bios = comm.CoreFileProvider.GetFirmware("Vectrex", "Bios", true, "BIOS Not Found, Cannot Load"); + Bios = comm.CoreFileProvider.GetFirmware("Vectrex", "Bios", true, "BIOS Not Found, Cannot Load"); _bios = Bios; - // the following few lines are jsut examples of working with a header and hashes Buffer.BlockCopy(rom, 0x100, header, 0, 0x50); string hash_md5 = null; hash_md5 = "md5:" + rom.HashMD5(0, rom.Length); Console.WriteLine(hash_md5); - // in this case our working ROm has the header removed (might not be the case for your system) _rom = rom; Setup_Mapper(); _frameHz = 60; - // usually you want to have a reflected core available to the various components since they share some information audio.Core = this; ppu.Core = this; serialport.Core = this; - // the following is just interface setup, dont worry to much about it ser.Register(this); ser.Register(audio); ServiceProvider = ser; @@ -111,6 +93,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex SetupMemoryDomains(); HardReset(); + + cpu.SetCallbacks(ReadMemory, PeekMemory, PeekMemory, WriteMemory); } public DisplayType Region => DisplayType.NTSC; @@ -132,8 +116,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex MemoryCallbacks.CallExecutes(addr, "System Bus"); } - // most systems have cartridges or other storage media that map memory in more then one way. - // Use this ethod to set that stuff up when first starting the core private void Setup_Mapper() { mapper = new MapperDefault(); From 0d959437282546ec8cbc6a66e45b79c1fb086ed1 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Tue, 9 Apr 2019 15:44:37 -0500 Subject: [PATCH 016/138] Vectrex: more disasm and bug fixes --- .../CPUs/MC6809/Disassembler.cs | 199 +++++++++++++++++- .../CPUs/MC6809/Indexed_Modes.cs | 2 +- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 7 +- .../CPUs/MC6809/Operations.cs | 4 +- 4 files changed, 196 insertions(+), 16 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs index 892d6015d1..0f76eab570 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs @@ -811,27 +811,204 @@ namespace BizHawk.Emulation.Common.Components.MC6809 bytes.Add(d); result = result.Replace("i8", string.Format("#{0:X2}h", d)); } - else if (result.Contains("d16")) + else if (result.Contains("i16")) { - byte dlo = reader(addr++); byte dhi = reader(addr++); - bytes.Add(dlo); + byte dlo = reader(addr++); bytes.Add(dhi); - result = result.Replace("d16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); + bytes.Add(dlo); + result = result.Replace("i16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); } - else if (result.Contains("a16")) + else if (result.Contains("ex16")) { - byte dlo = reader(addr++); byte dhi = reader(addr++); - bytes.Add(dlo); + byte dlo = reader(addr++); bytes.Add(dhi); - result = result.Replace("a16", string.Format("#{0:X2}{1:X2}h", dhi, dlo)); + bytes.Add(dlo); + result = result.Replace("ex16", "(" + string.Format("#{0:X2}{1:X2}h", dhi, dlo) + ")"); } - else if (result.Contains("a8")) + else if (result.Contains("ix16")) { byte d = reader(addr++); bytes.Add(d); - result = result.Replace("a8", string.Format("#FF{0:X2}h", d)); + + string temp_reg = ""; + + switch ((d >> 5) & 3) + { + case 0: temp_reg = "X"; break; + case 1: temp_reg = "Y"; break; + case 2: temp_reg = "US"; break; + case 3: temp_reg = "SP"; break; + } + + if ((d & 0x80) == 0) + { + short tempdis = (short)(d & 0x1F); + if (tempdis >= 16) + tempdis -= 32; + + result = result.Replace("ix16", temp_reg + " + ea"); + result = result.Replace("ea", string.Format("{0:N}h", tempdis)); + } + else + { + if ((d & 0x10) == 0x10) + { + switch (d & 0xF) + { + case 0x0: + result = result.Replace("ix16", "???"); + break; + case 0x1: + result = result.Replace("ix16","(" + temp_reg + ")++"); + break; + case 0x2: + result = result.Replace("ix16", "???"); + break; + case 0x3: + result = result.Replace("ix16", "--(" + temp_reg + ")"); + break; + case 0x4: + result = result.Replace("ix16", "(" + temp_reg + ")"); + break; + case 0x5: + result = result.Replace("ix16", "(" + temp_reg + " + B)"); + break; + case 0x6: + result = result.Replace("ix16", "(" + temp_reg + " + A)"); + break; + case 0x7: + result = result.Replace("ix16", "???"); + break; + case 0x8: + byte e = reader(addr++); + bytes.Add(e); + result = result.Replace("ix16", "(" + temp_reg + " + ea)"); + result = result.Replace("ea", string.Format("{0:X2}h", e)); + break; + case 0x9: + byte f = reader(addr++); + bytes.Add(f); + byte g = reader(addr++); + bytes.Add(g); + result = result.Replace("ix16", "(" + temp_reg + " + ea)"); + result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", f, g)); + break; + case 0xA: + result = result.Replace("ix16", "???"); + break; + case 0xB: + result = result.Replace("ix16", "(" + temp_reg + " + D)"); + break; + case 0xC: + temp_reg = "PC"; + byte h = reader(addr++); + bytes.Add(h); + result = result.Replace("ix16", "(" + temp_reg + " + ea)"); + result = result.Replace("ea", string.Format("{0:X2}h", h)); + break; + case 0xD: + temp_reg = "PC"; + byte i = reader(addr++); + bytes.Add(i); + byte j = reader(addr++); + bytes.Add(j); + result = result.Replace("ix16", "(" + temp_reg + " + ea)"); + result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", i, j)); + break; + case 0xE: + result = result.Replace("ix16", "???"); + break; + case 0xF: + if ((d >> 5) == 0) + { + byte k = reader(addr++); + bytes.Add(k); + byte l = reader(addr++); + bytes.Add(l); + result = result.Replace("ix16", "(" + string.Format("{0:X2}{1:X2}h", k, l) + ")"); + } + else + { + result = result.Replace("ix16", "???"); + } + break; + } + } + else + { + switch (d & 0xF) + { + case 0x0: + result = result.Replace("ix16", temp_reg + "+"); + break; + case 0x1: + result = result.Replace("ix16", temp_reg + "++"); + break; + case 0x2: + result = result.Replace("ix16", "-" + temp_reg); + break; + case 0x3: + result = result.Replace("ix16", "--" + temp_reg); + break; + case 0x4: + result = result.Replace("ix16", temp_reg); + break; + case 0x5: + result = result.Replace("ix16", temp_reg + " + B"); + break; + case 0x6: + result = result.Replace("ix16", temp_reg + " + A"); + break; + case 0x7: + result = result.Replace("ix16", "???"); + break; + case 0x8: + byte e = reader(addr++); + bytes.Add(e); + result = result.Replace("ix16", temp_reg + " + ea"); + result = result.Replace("ea", string.Format("{0:X2}h", e)); + break; + case 0x9: + byte f = reader(addr++); + bytes.Add(f); + byte g = reader(addr++); + bytes.Add(g); + result = result.Replace("ix16", temp_reg + " + ea"); + result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", f, g)); + break; + case 0xA: + result = result.Replace("ix16", "???"); + break; + case 0xB: + result = result.Replace("ix16", temp_reg + " + D"); + break; + case 0xC: + temp_reg = "PC"; + byte h = reader(addr++); + bytes.Add(h); + result = result.Replace("ix16", temp_reg + " + ea"); + result = result.Replace("ea", string.Format("{0:X2}h", h)); + break; + case 0xD: + temp_reg = "PC"; + byte i = reader(addr++); + bytes.Add(i); + byte j = reader(addr++); + bytes.Add(j); + result = result.Replace("ix16", temp_reg + " + ea"); + result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", i, j)); + break; + case 0xE: + result = result.Replace("ix16", "???"); + break; + case 0xF: + result = result.Replace("ix16", "???"); + break; + } + } + } } else if (result.Contains("r8")) { @@ -846,7 +1023,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 ret.Append(string.Format("{0:X4}: ", origaddr)); foreach (var b in bytes) ret.Append(string.Format("{0:X2} ", b)); - while (ret.Length < 17) + while (ret.Length < 22) ret.Append(' '); ret.Append(result); size = (ushort)(addr - origaddr); diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 8025b1d0f9..0021e13260 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -399,7 +399,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // Illegal break; } - } + } } instr_pntr = 0; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index e1019df6f9..2686587b09 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -205,7 +205,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case SBC8: - SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + SBC8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case CMP8: CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); @@ -213,6 +213,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case DEC16: DEC16_Func(cur_instr[instr_pntr++]); break; + case ADD8BR: + ADD8BR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case TR: TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; @@ -569,7 +572,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { Disassembly = string.Format( "{0} ", - disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---").PadRight(40), + disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---").PadRight(50), RegisterInfo = string.Format( "A:{0:X2} B:{1:X2} X:{2:X4} Y:{3:X4} US:{4:X4} SP:{5:X4} DP:{6:X2} CC:{7:X2} Cy:{8} {9}{10}{11}{12}{13}{14}{15}{16}", Regs[A], diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index 6621a45fd4..db443f8ef3 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -518,7 +518,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 int Reg16_d = D; int Reg16_s = Regs[src]; - Reg16_d += Reg16_s; + Reg16_d -= Reg16_s; FlagC = Reg16_d.Bit(16); FlagZ = (Reg16_d & 0xFFFF) == 0; @@ -534,7 +534,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 int Reg16_d = Regs[dest]; int Reg16_s = Regs[src]; - Reg16_d += Reg16_s; + Reg16_d -= Reg16_s; FlagC = Reg16_d.Bit(16); FlagZ = (Reg16_d & 0xFFFF) == 0; From 598723266e007bbc9cda1657e420b9bef54e6d05 Mon Sep 17 00:00:00 2001 From: Ashafix Date: Fri, 12 Apr 2019 19:03:14 +0200 Subject: [PATCH 017/138] added sleep functions for Lua to client module --- .../Lua/Libraries/EmuLuaLibrary.Client.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs index 7d3a8a7fd9..358903c188 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs @@ -7,6 +7,8 @@ using NLua; using BizHawk.Common; using BizHawk.Emulation.Common; using BizHawk.Client.Common; +using System.Threading; +using System.Diagnostics; // ReSharper disable StringLiteralTypo // ReSharper disable UnusedMember.Global @@ -472,5 +474,30 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.MainForm.FlushSaveRAM(); } + + [LuaMethodExample("client.sleep( 50 );")] + [LuaMethod("sleep", "sleeps for n milliseconds")] + public void Sleep(int millis) + { + Thread.Sleep(millis); + } + + [LuaMethodExample("client.exactsleep( 50 );")] + [LuaMethod("exactsleep", "sleeps exactly for n milliseconds")] + public void ExactSleep(int millis) + { + Stopwatch stopwatch = Stopwatch.StartNew(); + while (millis - stopwatch.ElapsedMilliseconds > 100) + { + Thread.Sleep(50); + } + while (true) + { + if (stopwatch.ElapsedMilliseconds >= millis) + { + break; + } + } + } } } From 6ea20e9e9b74bcc767ba55f7aaef5bc4fdc83b36 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 12 Apr 2019 14:03:12 -0400 Subject: [PATCH 018/138] fix emuhawk app.config to allow running on network shares fixes #1537 --- BizHawk.Client.EmuHawk/app.config | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/app.config b/BizHawk.Client.EmuHawk/app.config index d405098352..9b69721c46 100644 --- a/BizHawk.Client.EmuHawk/app.config +++ b/BizHawk.Client.EmuHawk/app.config @@ -1,3 +1,9 @@ - + + + + + + + From 3946075024d10d2aa3399f21cf92f2ca10bd7b9b Mon Sep 17 00:00:00 2001 From: Ashafix Date: Mon, 15 Apr 2019 09:28:54 +0200 Subject: [PATCH 019/138] added new command line parameter audiosync --- BizHawk.Client.EmuHawk/ArgParser.cs | 5 +++++ BizHawk.Client.EmuHawk/MainForm.cs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/BizHawk.Client.EmuHawk/ArgParser.cs b/BizHawk.Client.EmuHawk/ArgParser.cs index 6c4823af50..5b903647bd 100644 --- a/BizHawk.Client.EmuHawk/ArgParser.cs +++ b/BizHawk.Client.EmuHawk/ArgParser.cs @@ -32,6 +32,7 @@ namespace BizHawk.Client.EmuHawk public string mmf_filename = null; public string URL_get = null; public string URL_post = null; + public bool? audiosync = null; public void ParseArguments(string[] args) @@ -131,6 +132,10 @@ namespace BizHawk.Client.EmuHawk { URL_post = args[i].Substring(args[i].IndexOf('=') + 1); } + else if (arg.StartsWith("--audiosync=")) + { + audiosync = arg.Substring(arg.IndexOf('=') + 1) == "true"; + } else { cmdRom = args[i]; diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 523042f42a..5e34fcc74b 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -287,6 +287,11 @@ namespace BizHawk.Client.EmuHawk LoadRomFromRecent(Global.Config.RecentRoms.MostRecent); } + if (argParser.audiosync.HasValue) + { + Global.Config.VideoWriterAudioSync = argParser.audiosync.Value; + } + if (argParser.cmdMovie != null) { _supressSyncSettingsWarning = true; // We dont' want to be nagged if we are attempting to automate From f0384b7e83f317f263ead5e043305f4ad83cbd40 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Tue, 16 Apr 2019 16:10:56 +0100 Subject: [PATCH 020/138] ChannelF: Extreme WIP! I promise nothing... --- Assets/gamedb/gamedb.txt | 1 + Assets/gamedb/gamedb_channelf.txt | 58 +++ ...izHawkSystemIdToCoreSystemEnumConverter.cs | 3 + BizHawk.Client.Common/Api/CoreSystem.cs | 3 +- BizHawk.Client.Common/Global.cs | 2 + BizHawk.Client.Common/RomLoader.cs | 4 + BizHawk.Client.Common/SystemInfo.cs | 7 +- BizHawk.Client.Common/config/PathEntry.cs | 6 + .../DATTools/DATParserBase.cs | 3 +- .../config/ControllerConfig.cs | 9 +- .../config/FirmwaresConfig.cs | 3 +- .../Database/FirmwareDatabase.cs | 4 + BizHawk.Emulation.Common/SystemLookup.cs | 3 +- .../BizHawk.Emulation.Cores.csproj | 15 + .../ChannelF/ChannelF.Controllers.cs | 58 +++ .../Fairchild/ChannelF/ChannelF.IEmulator.cs | 61 +++ .../Fairchild/ChannelF/ChannelF.IO.cs | 80 +++ .../Fairchild/ChannelF/ChannelF.ISettable.cs | 79 +++ .../Fairchild/ChannelF/ChannelF.IStatable.cs | 99 ++++ .../ChannelF/ChannelF.IVideoProvider.cs | 26 + .../ChannelF/ChannelF.InputPollable.cs | 26 + .../ChannelF/ChannelF.MemoryDomains.cs | 38 ++ .../Consoles/Fairchild/ChannelF/ChannelF.cs | 48 ++ .../ChannelF/F8/F3850.Disassembler.cs | 45 ++ .../Fairchild/ChannelF/F8/F3850.Execute.cs | 67 +++ .../Fairchild/ChannelF/F8/F3850.Operations.cs | 124 +++++ .../Fairchild/ChannelF/F8/F3850.Registers.cs | 231 +++++++++ .../Fairchild/ChannelF/F8/F3850.Tables.cs | 420 +++++++++++++++ .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 480 ++++++++++++++++++ 29 files changed, 1996 insertions(+), 7 deletions(-) create mode 100644 Assets/gamedb/gamedb_channelf.txt create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.ISettable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.InputPollable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs diff --git a/Assets/gamedb/gamedb.txt b/Assets/gamedb/gamedb.txt index f2c2ba9c25..ba89a10f60 100644 --- a/Assets/gamedb/gamedb.txt +++ b/Assets/gamedb/gamedb.txt @@ -27,6 +27,7 @@ #include gamedb_zxspectrum.txt #include gamedb_amstradcpc.txt #include gamedb_ngp.txt +#include gamedb_channelf.txt ; ************ TI-83 ************ diff --git a/Assets/gamedb/gamedb_channelf.txt b/Assets/gamedb/gamedb_channelf.txt new file mode 100644 index 0000000000..e57abc0c17 --- /dev/null +++ b/Assets/gamedb/gamedb_channelf.txt @@ -0,0 +1,58 @@ +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Type: NO-INTRO +;;; Source: Fairchild - Channel F - 20120223-000000 +;;; FileGen: 2019-04-16 13:59:49 (UTC) +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Bad Dumps +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +; +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Hacks +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +; +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Over Dumps +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +; +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Translated +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +; +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +;;; Believed Good +;;;;;;;;;;--------------------------------------------------;;;;;;;;;; +F7BF7D55A7660FFA80D08AD1BA903FF7 Alien Invasion (USA) ChannelF USA +D89B48AE8C906488CAAC2B2AE1D63D88 Backgammon, Acey-Deucey (USA) ChannelF USA +4FA83F734C139963AA02BDBB7A52E500 Baseball (USA) ChannelF USA +25E231E7A464A32B4715BFB47AF89240 Bowling (USA) ChannelF USA +BB7F7BBBE21F142591CDCAFA98D7F6E4 Casino Poker (USA) ChannelF USA +35D61D40EF7EC337CBA092AABAC74DBD Checkers (USA) ChannelF USA +54CF17C48707467295749490D458EAFB Demonstration Cartridge (USA) ChannelF USA +F6916B665893AA8138CDE57C37E50ADA Demonstration Cartridge 2 (USA) ChannelF USA +4F11F13CBCA685CB20E888F87B3B1586 Desert Fox, Shooting Gallery (USA) ChannelF USA +6FFEDAED3C5CD8BA74D98901849CC451 Dodge It (USA) ChannelF USA +F80AF74B09D058B90E719BB7DFBDD50E Drag Race (USA) ChannelF USA +9E0711B140E22729687DB1E1354980AB Galactic Space Wars, Lunar Lander (USA) ChannelF USA +0124CD0B61DF5502AABD59029CCB6D5A Hangman (USA) ChannelF USA +4C10FA5C7316C59EFA241043FC67DFA8 Magic Numbers - Mind Reader + Nim (USA) ChannelF USA +A8E6103FCAE4D0F9E14D9EDCFC3FC493 Math Quiz I - Addition + Subtraction (USA) ChannelF USA +86B77EAFDF7B806E19E01724987E384F Math Quiz II - Multiplication + Division (USA) ChannelF USA +6565DF74539476D66FD78DE1BAC0259C Maze, Jailbreak, Blind-man's-bluff, Trailblazer (USA) ChannelF USA +53E4CC2DA0F2C167E0692B794CB7692C Maze, Jailbreak, Blind-man's-bluff, Trailblazer (USA) (Alt 1) ChannelF USA +2B3CA549E27579E4519A765FD8F52D0F Memory Match 1 & 2 (USA) ChannelF USA +1FBD86DCCA0E4619963B902C48AE77F2 Muehle, Tontauben-Schiessen, Kreatives Malspiel, Videoscope (Germany) ChannelF Germany +C2A44D22D3865B036479E9311C74D3AD Ordtaevling (Sweden) ChannelF Sweden +E90339B7068C6227D54F3C0CA637E017 Pinball Challenge (USA) ChannelF USA +5CBCDA1C44F0DAD02B0DFE209B6325D5 Pinball Challenge (USA) (Alt 1) ChannelF USA +9A894D745356A050F95410983C3BC54A Pro Football (USA) ChannelF USA +913ECBAA30816C6D78DE8651251761FC Rat' Mal (Germany) ChannelF Germany +3783B6AC359E21B99CFA17773AA811C6 Robot War, Torpedo Alley (USA) ChannelF USA +5568205F926333914DEDC8EF8BF16AF2 Schach (Germany) ChannelF Germany +DFB66EE145FAB65062FDEADAFC8DC34C Slot Machine (USA) ChannelF USA +4CB12EDAE37DF23851884B82CA410754 Sonar Search (USA) ChannelF USA +32CCA8FF09041A39251D7AADE21EE22F Space War (USA) ChannelF USA +1B409FE1154584F4D1AB76B344A73D99 Spitfire (USA) ChannelF USA +7E5C26A6D1F9A90C68669A9800BA522D Tic-Tac-Toe, Shooting Gallery, Doodle, Quadra-Doodle (USA) ChannelF USA +B074C867F235FB69CED96C6916673B45 Video Blackjack (USA) ChannelF USA +90A9B3952568F91502A7088BFB0AE07E Video Whizball (USA) ChannelF USA diff --git a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs index a8a3751112..e05823994b 100644 --- a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs +++ b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs @@ -108,6 +108,9 @@ namespace BizHawk.Client.ApiHawk case "GGL": return CoreSystem.GGL; + case "ChannelF": + return CoreSystem.ChannelF; + case "VB": case "NGP": case "DNGP": diff --git a/BizHawk.Client.Common/Api/CoreSystem.cs b/BizHawk.Client.Common/Api/CoreSystem.cs index 48ba2e4f1a..05b63c7f96 100644 --- a/BizHawk.Client.Common/Api/CoreSystem.cs +++ b/BizHawk.Client.Common/Api/CoreSystem.cs @@ -33,6 +33,7 @@ NeoGeoPocket, ZXSpectrum, AmstradCPC, - GGL + GGL, + ChannelF } } diff --git a/BizHawk.Client.Common/Global.cs b/BizHawk.Client.Common/Global.cs index c233e7a7ec..c8ef120a66 100644 --- a/BizHawk.Client.Common/Global.cs +++ b/BizHawk.Client.Common/Global.cs @@ -154,6 +154,8 @@ namespace BizHawk.Client.Common return SystemInfo.ZXSpectrum; case "AmstradCPC": return SystemInfo.AmstradCPC; + case "ChannelF": + return SystemInfo.ChannelF; } } } diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index 0e10ef3bf4..0c3ff35062 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -29,6 +29,7 @@ using BizHawk.Emulation.Cores.Consoles.Sega.Saturn; using BizHawk.Emulation.Cores.Consoles.NEC.PCFX; using BizHawk.Emulation.Cores.Computers.AmstradCPC; using BizHawk.Emulation.Cores.Consoles.Vectrex; +using BizHawk.Emulation.Cores.Consoles.ChannelF; namespace BizHawk.Client.Common { @@ -1079,6 +1080,9 @@ namespace BizHawk.Client.Common Deterministic); nextEmulator = zx; break; + case "ChannelF": + nextEmulator = new ChannelF(nextComm, game, rom.FileData, GetCoreSettings(), GetCoreSyncSettings()); + break; case "AmstradCPC": var cpc = new AmstradCPC(nextComm, Enumerable.Repeat(rom.RomData, 1), Enumerable.Repeat(rom.GameInfo, 1).ToList(), GetCoreSettings(), GetCoreSyncSettings()); nextEmulator = cpc; diff --git a/BizHawk.Client.Common/SystemInfo.cs b/BizHawk.Client.Common/SystemInfo.cs index a109e7ddf9..6b631d0851 100644 --- a/BizHawk.Client.Common/SystemInfo.cs +++ b/BizHawk.Client.Common/SystemInfo.cs @@ -204,10 +204,15 @@ namespace BizHawk.Client.Common public static SystemInfo AmstradCPC { get; } = new SystemInfo("Amstrad CPC", CoreSystem.AmstradCPC, 2); /// - /// Gets the instance for AmstradCPC + /// Gets the instance for GGL /// public static SystemInfo GGL { get; } = new SystemInfo("Game Gear Linked", CoreSystem.GGL, 2); + /// + /// Gets the instance for ChannelF + /// + public static SystemInfo ChannelF { get; } = new SystemInfo("Channel F", CoreSystem.ChannelF, 2); + #endregion Get SystemInfo /// diff --git a/BizHawk.Client.Common/config/PathEntry.cs b/BizHawk.Client.Common/config/PathEntry.cs index 3cc3f6d04c..7df0046165 100644 --- a/BizHawk.Client.Common/config/PathEntry.cs +++ b/BizHawk.Client.Common/config/PathEntry.cs @@ -382,6 +382,12 @@ namespace BizHawk.Client.Common new PathEntry { System = "PCFX", SystemDisplayName = "PCFX", Type = "Save RAM", Path = Path.Combine(".", "SaveRAM"), Ordinal = 3 }, new PathEntry { System = "PCFX", SystemDisplayName = "PCFX", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 4 }, new PathEntry { System = "PCFX", SystemDisplayName = "PCFX", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 5 }, + + new PathEntry { System = "ChannelF", SystemDisplayName = "Fairchild Channel F", Type = "Base", Path = Path.Combine(".", "ZXSpectrum"), Ordinal = 0 }, + new PathEntry { System = "ChannelF", SystemDisplayName = "Fairchild Channel F", Type = "ROM", Path = ".", Ordinal = 1 }, + new PathEntry { System = "ChannelF", SystemDisplayName = "Fairchild Channel F", Type = "Savestates", Path = Path.Combine(".", "State"), Ordinal = 2 }, + new PathEntry { System = "ChannelF", SystemDisplayName = "Fairchild Channel F", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 4 }, + new PathEntry { System = "ChannelF", SystemDisplayName = "Fairchild Channel F", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 5 }, }; } } diff --git a/BizHawk.Client.DBMan/DATTools/DATParserBase.cs b/BizHawk.Client.DBMan/DATTools/DATParserBase.cs index f13196463c..7034724261 100644 --- a/BizHawk.Client.DBMan/DATTools/DATParserBase.cs +++ b/BizHawk.Client.DBMan/DATTools/DATParserBase.cs @@ -218,6 +218,7 @@ namespace BizHawk.Client.DBMan Lynx, VB, UZE, - NGP + NGP, + ChannelF } } diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index af5da08b62..25b246d55f 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -176,7 +176,7 @@ namespace BizHawk.Client.EmuHawk tt.TabPages[pageidx].Controls.Add(createpanel(settings, cat.Value, tt.Size)); // zxhawk hack - it uses multiple categoryLabels - if (Global.Emulator.SystemId == "ZXSpectrum" || Global.Emulator.SystemId == "AmstradCPC") + if (Global.Emulator.SystemId == "ZXSpectrum" || Global.Emulator.SystemId == "AmstradCPC" || Global.Emulator.SystemId == "ChannelF") pageidx++; } @@ -184,7 +184,7 @@ namespace BizHawk.Client.EmuHawk if (buckets[0].Count > 0) { // ZXHawk needs to skip this bit - if (Global.Emulator.SystemId == "ZXSpectrum" || Global.Emulator.SystemId == "AmstradCPC") + if (Global.Emulator.SystemId == "ZXSpectrum" || Global.Emulator.SystemId == "AmstradCPC" || Global.Emulator.SystemId == "ChannelF") return; string tabname = (Global.Emulator.SystemId == "C64") ? "Keyboard" : "Console"; // hack @@ -275,6 +275,11 @@ namespace BizHawk.Client.EmuHawk tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.ZXSpectrumKeyboards.Width; } + if (controlName == "ChannelF Controller") + { + + } + if (controlName == "AmstradCPC Controller") { /* diff --git a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs index cbfbb76aaa..826df7d025 100644 --- a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs +++ b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs @@ -53,7 +53,8 @@ namespace BizHawk.Client.EmuHawk { "PCFX", "PC-FX" }, { "32X", "32X" }, { "ZXSpectrum", "ZX Spectrum" }, - { "AmstradCPC", "Amstrad CPC" } + { "AmstradCPC", "Amstrad CPC" }, + { "ChannelF", "Channel F" } }; public string TargetSystem = null; diff --git a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs index 79e2233317..713ad82bb6 100644 --- a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs +++ b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs @@ -61,6 +61,10 @@ namespace BizHawk.Emulation.Common FirmwareAndOption("A584272F21DC82C14B7D4F1ED440E23A976E71F0", 32768, "ZXSpectrum", "PentagonROM", "pentagon.rom", "Russian Pentagon Clone ROM"); FirmwareAndOption("282EB7BC819AAD2A12FD954E76F7838A4E1A7929", 16384, "ZXSpectrum", "TRDOSROM", "trdos.rom", "TRDOS ROM"); + // Channel F + FirmwareAndOption("81193965A374D77B99B4743D317824B53C3E3C78", 1024, "ChannelF", "ChannelF_sl131253", "ChannelF-SL31253.rom", "Channel F Rom0"); + FirmwareAndOption("8F70D1B74483BA3A37E86CF16C849D601A8C3D2C", 1024, "ChannelF", "ChannelF_sl131254", "ChannelF-SL31254.rom", "Channel F Rom1"); + // for saturn, we think any bios region can pretty much run any iso // so, we're going to lay this out carefully so that we choose things in a sensible order, but prefer the correct region var ss_100_j = File("2B8CB4F87580683EB4D760E4ED210813D667F0A2", 524288, "saturn-1.00-(J).bin", "Bios v1.00 (J)"); diff --git a/BizHawk.Emulation.Common/SystemLookup.cs b/BizHawk.Emulation.Common/SystemLookup.cs index 0e4cc90d06..88f7fe8e6c 100644 --- a/BizHawk.Emulation.Common/SystemLookup.cs +++ b/BizHawk.Emulation.Common/SystemLookup.cs @@ -34,7 +34,8 @@ namespace BizHawk.Emulation.Common new SystemInfo { SystemId = "AppleII", FullName = "Apple II" }, new SystemInfo { SystemId = "INTV", FullName = "Intellivision" }, new SystemInfo { SystemId = "ZXSpectrum", FullName = "Sinclair ZX Spectrum" }, - new SystemInfo { SystemId = "AmstradCPC", FullName = "Amstrad CPC" } + new SystemInfo { SystemId = "AmstradCPC", FullName = "Amstrad CPC" }, + new SystemInfo { SystemId = "ChannelF", FullName = "Fairchild Channel F"}, }; public SystemInfo this[string systemId] diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index b7fa5086d0..0e3a43dcd8 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -595,6 +595,21 @@ + + + + + + + + + + + + + + + diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs new file mode 100644 index 0000000000..b0fa1ec6bb --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF + { + public ControllerDefinition ChannelFControllerDefinition + { + get + { + ControllerDefinition definition = new ControllerDefinition(); + definition.Name = "ChannelF Controller"; + + // sticks + List stickL = new List + { + // P1 (left) stick + "P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Button Up", "P1 Button Down", "P1 Rotate Left", "P1 Rotate Right" + }; + + foreach (var s in stickL) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Left Controller"; + } + + List stickR = new List + { + // P1 (left) stick + "P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Button Up", "P2 Button Down", "P2 Rotate Left", "P2 Rotate Right" + }; + + foreach (var s in stickR) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Right Controller"; + } + + // console + List consoleButtons = new List + { + "RESET", "START", "HOLD", "MODE", "TIME" + }; + + foreach (var s in consoleButtons) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Console"; + } + + return definition; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs new file mode 100644 index 0000000000..459d8d8d7c --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs @@ -0,0 +1,61 @@ +using System; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : IEmulator + { + public IEmulatorServiceProvider ServiceProvider { get; } + + public ControllerDefinition ControllerDefinition { get; set; } + + public string SystemId => "ChannelF"; + + public bool DeterministicEmulation { get; set; } + + private static double cpuFreq = 1.7897725; + private static double refreshRate = 60; + + public int ClockPerFrame; + public int FrameClock = 0; + + private void CalcClock() + { + var c = (cpuFreq * 1000000) / refreshRate; + ClockPerFrame = (int) c; + } + + public bool FrameAdvance(IController controller, bool render, bool renderSound) + { + while (FrameClock++ < ClockPerFrame) + { + CPU.ExecuteOne(); + } + + FrameClock = 0; + _frame++; + return true; + } + + private int _frame; + private int _lagcount; + private bool _islag; + + public void ResetCounters() + { + _frame = 0; + _lagcount = 0; + _islag = false; + } + + public int Frame => _frame; + + public CoreComm CoreComm { get; } + + public void Dispose() + { + + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs new file mode 100644 index 0000000000..7ccc2ede1b --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs @@ -0,0 +1,80 @@ +using System; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + + public partial class ChannelF + { + public byte[] BIOS01 = new byte[1024]; + public byte[] BIOS02 = new byte[1024]; + + public byte[] FrameBuffer = new byte[2048]; + + public byte[] Cartridge = new byte[0x2000 - 0x800]; + + public byte ReadBus(ushort addr) + { + if (addr < 0x400) + { + // Rom0 + return BIOS01[addr]; + } + else if (addr < 0x800) + { + // Rom1 + return BIOS02[addr - 0x400]; + } + else if (addr < 0x2000) + { + // Cart + return Cartridge[addr - 0x800]; + } + else if (addr < 0x2000 + 2048) + { + // Framebuffer + return FrameBuffer[addr - 0x2000]; + } + else + { + return 0xFF; + } + } + + public void WriteBus(ushort addr, byte value) + { + if (addr < 0x400) + { + // Rom0 + } + else if (addr < 0x800) + { + // Rom1 + } + else if (addr < 0x2000) + { + // Cart + } + else if (addr < 0x2000 + 2048) + { + // Framebuffer + FrameBuffer[addr - 0x2000] = value; + } + else + { + + } + } + + public byte ReadPort(ushort addr) + { + return 0xff; + } + + public void WritePort(ushort addr, byte value) + { + + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.ISettable.cs new file mode 100644 index 0000000000..d23b8b87b1 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.ISettable.cs @@ -0,0 +1,79 @@ +using System; +using System.ComponentModel; +using BizHawk.Common; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.NES; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : ISettable + { + internal ChannelFSettings Settings = new ChannelFSettings(); + internal ChannelFSyncSettings SyncSettings = new ChannelFSyncSettings(); + + public ChannelFSettings GetSettings() + { + return Settings.Clone(); + } + + public ChannelFSyncSettings GetSyncSettings() + { + return SyncSettings.Clone(); + } + + public bool PutSettings(ChannelFSettings o) + { + Settings = o; + return false; + } + + public bool PutSyncSettings(ChannelFSyncSettings o) + { + bool ret = ChannelFSyncSettings.NeedsReboot(SyncSettings, o); + SyncSettings = o; + return ret; + } + + public class ChannelFSettings + { + [DisplayName("Default Background Color")] + [Description("The default BG color")] + [DefaultValue(0)] + public int BackgroundColor { get; set; } + + public ChannelFSettings Clone() + { + return (ChannelFSettings)MemberwiseClone(); + } + + public ChannelFSettings() + { + SettingsUtil.SetDefaultValues(this); + } + } + + public class ChannelFSyncSettings + { + [DisplayName("Deterministic Emulation")] + [Description("If true, the core agrees to behave in a completely deterministic manner")] + [DefaultValue(true)] + public bool DeterministicEmulation { get; set; } + + public ChannelFSyncSettings Clone() + { + return (ChannelFSyncSettings) MemberwiseClone(); + } + + public ChannelFSyncSettings() + { + SettingsUtil.SetDefaultValues(this); + } + + public static bool NeedsReboot(ChannelFSyncSettings x, ChannelFSyncSettings y) + { + return !DeepEquality.DeepEquals(x, y); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs new file mode 100644 index 0000000000..d0c2cd3208 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs @@ -0,0 +1,99 @@ +using System; +using System.IO; +using BizHawk.Common; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : IStatable + { + public bool BinarySaveStatesPreferred => true; + + public void SaveStateText(TextWriter writer) + { + SyncState(new Serializer(writer)); + } + + public void LoadStateText(TextReader reader) + { + SyncState(new Serializer(reader)); + } + + public void SaveStateBinary(BinaryWriter bw) + { + SyncState(new Serializer(bw)); + } + + public void LoadStateBinary(BinaryReader br) + { + SyncState(new Serializer(br)); + } + + public byte[] SaveStateBinary() + { + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } + + private void SyncState(Serializer ser) + { + + /* + + byte[] core = null; + if (ser.IsWriter) + { + var ms = new MemoryStream(); + ms.Close(); + core = ms.ToArray(); + } + + if (ser.IsWriter) + { + ser.SyncEnum(nameof(_machineType), ref _machineType); + + _cpu.SyncState(ser); + ser.BeginSection(nameof(ZXSpectrum)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); + } + + if (ser.IsReader) + { + var tmpM = _machineType; + ser.SyncEnum(nameof(_machineType), ref _machineType); + if (tmpM != _machineType && _machineType.ToString() != "72") + { + string msg = "SAVESTATE FAILED TO LOAD!!\n\n"; + msg += "Current Configuration: " + tmpM.ToString(); + msg += "\n"; + msg += "Saved Configuration: " + _machineType.ToString(); + msg += "\n\n"; + msg += "If you wish to load this SaveState ensure that you have the correct machine configuration selected, reboot the core, then try again."; + CoreComm.ShowMessage(msg); + _machineType = tmpM; + } + else + { + _cpu.SyncState(ser); + ser.BeginSection(nameof(ZXSpectrum)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); + + SyncAllByteArrayDomains(); + } + } + */ + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs new file mode 100644 index 0000000000..f04ca98ea0 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -0,0 +1,26 @@ +using System; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : IVideoProvider + { + public int _frameHz = 60; + + public int[] _vidbuffer = new int[102 * 58]; + + public int[] GetVideoBuffer() + { + return _vidbuffer; + } + + public int VirtualWidth => 102 * 2; + public int VirtualHeight => 58 * 2; + public int BufferWidth => 102; + public int BufferHeight => 58; + public int BackgroundColor => unchecked((int)0xFF000000); + public int VsyncNumerator => _frameHz; + public int VsyncDenominator => 1; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.InputPollable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.InputPollable.cs new file mode 100644 index 0000000000..1112bf1b21 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.InputPollable.cs @@ -0,0 +1,26 @@ +using System; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : IInputPollable + { + public int LagCount + { + get { return _lagCount; } + set { _lagCount = value; } + } + + public bool IsLagFrame + { + get { return _isLag; } + set { _isLag = value; } + } + + public IInputCallbackSystem InputCallbacks { get; } + + private int _lagCount = 0; + private bool _isLag = false; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs new file mode 100644 index 0000000000..002ef63130 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF + { + internal IMemoryDomains memoryDomains; + private readonly Dictionary _byteArrayDomains = new Dictionary(); + private bool _memoryDomainsInit = false; + + private void SetupMemoryDomains() + { + + } + + private void SyncAllByteArrayDomains() + { + + } + + private void SyncByteArrayDomain(string name, byte[] data) + { + if (_memoryDomainsInit || _byteArrayDomains.ContainsKey(name)) + { + var m = _byteArrayDomains[name]; + m.Data = data; + } + else + { + var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); + _byteArrayDomains.Add(name, m); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs new file mode 100644 index 0000000000..957f7d6c5a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs @@ -0,0 +1,48 @@ +using System; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + [Core( + "ChannelFHawk", + "Asnivor", + isPorted: false, + isReleased: false)] + [ServiceNotApplicable(typeof(IDriveLight))] + public partial class ChannelF + { + public ChannelF(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings) + { + var ser = new BasicServiceProvider(this); + ServiceProvider = ser; + CoreComm = comm; + InputCallbacks = new InputCallbackSystem(); + + ControllerDefinition = ChannelFControllerDefinition; + + CPU = new F3850 + { + ReadMemory = ReadBus, + WriteMemory = WriteBus, + ReadHardware = ReadPort, + WriteHardware = WritePort, + DummyReadMemory = ReadBus + }; + + byte[] bios01 = comm.CoreFileProvider.GetFirmware("ChannelF", "ChannelF_sl131253", true); + byte[] bios02 = comm.CoreFileProvider.GetFirmware("ChannelF", "ChannelF_sl131254", true); + + BIOS01 = bios01; + BIOS02 = bios02; + + Array.Copy(rom, 0, Cartridge, 0, rom.Length); + + CalcClock(); + + ser.Register(this); + } + + public F3850 CPU; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs new file mode 100644 index 0000000000..bb63cbe99e --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Disassembler + /// + public sealed partial class F3850 : IDisassemblable + { + + + #region IDisassemblable + + public string Cpu + { + get { return "F3850"; } + set { } + } + + public string PCRegisterName + { + get { return "PC"; } + } + + public IEnumerable AvailableCpus + { + get { yield return "F3850"; } + } + + public string Disassemble(MemoryDomain m, uint addr, out int length) + { + length = 0; + string ret = "";// Disassemble((ushort)addr, a => m.PeekByte(a), out length); + return ret; + } + + #endregion + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs new file mode 100644 index 0000000000..9bd5b37b3b --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public sealed partial class F3850 + { + public const int MaxInstructionLength = 40; + + public long TotalExecutedCycles; + + public int instr_pntr = 0; + public ushort[] cur_instr = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime + public ushort[] cur_romc = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime + public byte opcode; + public byte databus; + public ushort iobus; + + public void FetchInstruction() + { + switch (opcode) + { + case 0x00: LR_A_KU(); break; // LR A, (KU) + case 0x01: LR_A_KL(); break; // LR A, (KL) + case 0x02: LR_A_QU(); break; // LR A, (QU) + case 0x03: LR_A_QL(); break; // LR A, (QL) + case 0x04: LR_KU_A(); break; // LR KU, (A) + case 0x05: LR_KL_A(); break; // LR KL, (A) + case 0x06: LR_QU_A(); break; // LR QU, (A) + case 0x07: LR_QL_A(); break; // LR QL, (A) + case 0x08: LR_K_P(); break; // LR K, (P) + case 0x09: LR_P_K(); break; // LR P, (K) + case 0x0A: LR_A_IS(); break; // LR A, (ISAR) + case 0x0B: LR_IS_A(); break; // LR ISAR, (A) + case 0x0C: LR_PK(); break; // LR PC1, (PC0); LR PC0l <- (r13); LR PC0h, (r12) + case 0x0D: LR_P0_Q(); break; // LR PC0l, (r15); LR PC0h <- (r14) + case 0x0E: LR_Q_DC(); break; // LR r14, (DC0h); r15 <- (DC0l) + case 0x0F: LR_DC_Q(); break; // LR DC0h, (r14); DC0l <- (r15) + case 0x10: LR_DC_Q(); break; // LR DC0h, (r10); DC0l <- (r11) + case 0x11: LR_H_DC(); break; // LR r10, (DC0h); r11 <- (DC0l) + case 0x12: SHIFT_R(1); break; // Shift (A) right one bit position (zero fill) + case 0x13: SHIFT_L(1); break; // Shift (A) left one bit position (zero fill) + case 0x14: SHIFT_R(4); break; // Shift (A) right four bit positions (zero fill) + case 0x15: SHIFT_L(4); break; // Shift (A) left four bit positions (zero fill) + case 0x16: LM(); break; // A <- ((DC0)) + case 0x17: ST(); break; // (DC) <- (A) + case 0x18: COM(); break; // A <- A ^ 255 + case 0x1A: DI(); break; // Clear ICB + case 0x1B: EI(); break; // Set ICB + case 0x1C: POP(); break; // PC0 <- PC1 + case 0x1D: LR_W_J(); break; // W <- (r9) + case 0x1E: LR_J_W(); break; // r9 <- (W) + case 0x1F: INC(); break; // A <- (A) + 1 + + default: ILLEGAL(); break; // Illegal Opcode + } + } + + + + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs new file mode 100644 index 0000000000..6888816acc --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Common.NumberExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public sealed partial class F3850 + { + private void IncrementBySignedByte(ushort dest, byte src) + { + if (src >= 0x80) + { + dest -= (ushort)(src & 0x80); + } + else + { + dest += (ushort)(src & 0x80); + } + } + + private void IncrementBySignedByte(byte dest, byte src) + { + if (src >= 0x80) + { + dest -= (byte)(src & 0x80); + } + else + { + dest += (byte)(src & 0x80); + } + } + + public void LoadReg_Func(ushort dest, ushort src) + { + if (dest == DB) + { + // byte storage + Regs[dest] = (ushort)(Regs[src] & 0xFF); + } + else if (dest == W) + { + // mask for status register + Regs[dest] = (ushort)(Regs[src] & 0x1F); + } + else + { + Regs[dest] = Regs[src]; + } + } + + public void ShiftRight_Func(ushort src, ushort index) + { + int shft = (Regs[src] >> index) & 0xFF; + FlagO = false; + FlagC = false; + FlagZ = shft == 0; + FlagS = (~shft & 0x80) != 0; + Regs[src] = (ushort)shft; + } + + public void ShiftLeft_Func(ushort src, ushort index) + { + int shft = (Regs[src] << index) & 0xFF; + FlagO = false; + FlagC = false; + FlagZ = shft == 0; + FlagS = (~shft & 0x80) != 0; + Regs[src] = (ushort)shft; + } + + public void COM_Func(ushort src) + { + byte b = (byte)Regs[src]; + var r = (byte)~b; + FlagO = false; + FlagC = false; + FlagZ = r == 0; + FlagS = (~r & 0x80) != 0; + Regs[src] = (ushort)r; + } + + public void ADD8_Func(ushort dest, ushort src) + { + int Reg16_d = Regs[dest]; + Reg16_d += Regs[src]; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + FlagO = (Regs[dest].Bit(7) == Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + FlagS = ans > 127; + + Regs[dest] = ans; + } + + public void INC8_Func(ushort src) + { + int Reg16_d = Regs[src]; + Reg16_d += 1; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + Regs[src] = ans; + + FlagS = Regs[src].Bit(7); + FlagO = Regs[src] == 0x80; + } + + public void Read_Func(ushort dest, ushort src) + { + Regs[dest] = Regs[src]; + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs new file mode 100644 index 0000000000..5dffa31a5e --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms.VisualStyles; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Internal Registers + /// + public sealed partial class F3850 + { + /// + /// Accumulator + /// + public ushort A = 0; + /// + /// Status Register + /// + public ushort W = 1; + /// + /// Indirect Scratchpad Address Register + /// (6bit) + /// + public ushort ISAR = 2; + /// + /// Primary Program Counter (low byte) + /// + public ushort PC0l = 3; + /// + /// Primary Program Counter (high byte) + /// + public ushort PC0h = 4; + /// + /// Backup Program Counter (low byte) + /// + public ushort PC1l = 5; + /// + /// Backup Program Counter (high byte) + /// + public ushort PC1h = 6; + /// + /// Data Counter (low byte) + /// + public ushort DC0l = 7; + /// + /// Data counter (high byte) + /// + public ushort DC0h = 8; + /// + /// Temporary Arithmetic Storage + /// + public ushort ALU = 9; + /// + /// Data Bus + /// + public ushort DB = 10; + /// + /// IO Bus + /// + public ushort IO = 11; + + /// + /// Registers (counters and scratchpad) + /// + public ushort[] Regs = new ushort[100]; + + // scratchpad registers + public ushort SR0 = 20; + public ushort SR1 = 21; + public ushort SR2 = 22; + public ushort SR3 = 23; + public ushort SR4 = 24; + public ushort SR5 = 25; + public ushort SR6 = 26; + public ushort SR7 = 27; + public ushort SR8 = 28; + public ushort SR9 = 29; + public ushort SR10 = 30; + public ushort SR11 = 31; + public ushort SR12 = 32; + public ushort SR13 = 33; + public ushort SR14 = 34; + public ushort SR15 = 35; + public ushort SR16 = 36; + public ushort SR17 = 37; + public ushort SR18 = 38; + public ushort SR19 = 39; + public ushort SR20 = 40; + public ushort SR21 = 41; + public ushort SR22 = 42; + public ushort SR23 = 43; + public ushort SR24 = 44; + public ushort SR25 = 45; + public ushort SR26 = 46; + public ushort SR27 = 47; + public ushort SR28 = 48; + public ushort SR29 = 49; + public ushort SR30 = 50; + public ushort SR31 = 51; + public ushort SR32 = 52; + public ushort SR33 = 53; + public ushort SR34 = 54; + public ushort SR35 = 55; + public ushort SR36 = 56; + public ushort SR37 = 57; + public ushort SR38 = 58; + public ushort SR39 = 59; + public ushort SR40 = 60; + public ushort SR41 = 61; + public ushort SR42 = 62; + public ushort SR43 = 63; + public ushort SR44 = 64; + public ushort SR45 = 65; + public ushort SR46 = 66; + public ushort SR47 = 67; + public ushort SR48 = 68; + public ushort SR49 = 69; + public ushort SR50 = 70; + public ushort SR51 = 71; + public ushort SR52 = 72; + public ushort SR53 = 73; + public ushort SR54 = 74; + public ushort SR55 = 75; + public ushort SR56 = 76; + public ushort SR57 = 77; + public ushort SR58 = 78; + public ushort SR59 = 79; + public ushort SR60 = 80; + public ushort SR61 = 81; + public ushort SR62 = 82; + public ushort SR63 = 83; + public ushort SR64 = 84; + + /// + /// Status Register - Sign Flag + /// + public bool FlagS + { + get { return (Regs[W] & 0x01) != 0; } + set { Regs[W] = (ushort)((Regs[W] & ~0x01) | (value ? 0x01 : 0x00)); } + } + + /// + /// Status Register - Carry Flag + /// + public bool FlagC + { + get { return (Regs[W] & 0x02) != 0; } + set { Regs[W] = (ushort)((Regs[W] & ~0x02) | (value ? 0x02 : 0x00)); } + } + + /// + /// Status Register - Zero Flag + /// + public bool FlagZ + { + get { return (Regs[W] & 0x04) != 0; } + set { Regs[W] = (ushort)((Regs[W] & ~0x04) | (value ? 0x04 : 0x00)); } + } + + /// + /// Status Register - Overflow Flag + /// + public bool FlagO + { + get { return (Regs[W] & 0x08) != 0; } + set { Regs[W] = (ushort)((Regs[W] & ~0x08) | (value ? 0x08 : 0x00)); } + } + + /// + /// Status Register - Interrupt Master Enable Flag + /// + public bool FlagICB + { + get { return (Regs[W] & 0x10) != 0; } + set { Regs[W] = (ushort)((Regs[W] & ~0x10) | (value ? 0x10 : 0x00)); } + } + + /// + /// Access to the full 16-bit Primary Program Counter + /// + public ushort RegPC0 + { + get { return (ushort)(Regs[PC0l] | (Regs[PC0h] << 8)); } + set + { + Regs[PC0l] = (ushort)(value & 0xFF); + Regs[PC0h] = (ushort)((value >> 8) & 0xFF); + } + } + + /// + /// Access to the full 16-bit Backup Program Counter + /// + public ushort RegPC1 + { + get { return (ushort)(Regs[PC1l] | (Regs[PC1h] << 8)); } + set + { + Regs[PC1l] = (ushort)(value & 0xFF); + Regs[PC1h] = (ushort)((value >> 8) & 0xFF); + } + } + + /// + /// Access to the full 16-bit Data Counter + /// + public ushort RegDC0 + { + get { return (ushort)(Regs[DC0l] | (Regs[DC0h] << 8)); } + set + { + Regs[DC0l] = (ushort)(value & 0xFF); + Regs[DC0h] = (ushort)((value >> 8) & 0xFF); + } + } + + private void ResetRegisters() + { + for (var i = 0; i < Regs.Length; i++) + { + Regs[i] = 0; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs new file mode 100644 index 0000000000..d6a1f5fbf0 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -0,0 +1,420 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Vectors of Instruction Operations + /// + public sealed partial class F3850 + { + private void LR_A_KU() + { + PopulateCURINSTR( + OP_LR_8, A, SR12, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_A_KL() + { + PopulateCURINSTR( + OP_LR_8, A, SR13, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_A_QU() + { + PopulateCURINSTR( + OP_LR_8, A, SR14, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_A_QL() + { + PopulateCURINSTR( + OP_LR_8, A, SR15, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_KU_A() + { + PopulateCURINSTR( + OP_LR_8, SR12, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_KL_A() + { + PopulateCURINSTR( + OP_LR_8, SR13, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_QU_A() + { + PopulateCURINSTR( + OP_LR_8, SR14, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_QL_A() + { + PopulateCURINSTR( + OP_LR_8, SR15, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_K_P() + { + PopulateCURINSTR( + ROMC_07, // L + IDLE, + IDLE, + OP_LR_8, SR12, DB, + IDLE, + IDLE, + ROMC_0B, // L + IDLE, + IDLE, + OP_LR_8, SR13, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_P_K() + { + PopulateCURINSTR( + OP_LR_8, DB, SR12, // L + IDLE, + IDLE, + ROMC_15, + IDLE, + IDLE, + OP_LR_8, DB, SR13, // L + IDLE, + IDLE, + ROMC_18, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_A_IS() + { + PopulateCURINSTR( + OP_LR_8, A, ISAR, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_IS_A() + { + PopulateCURINSTR( + OP_LR_8, ISAR, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_PK() + { + PopulateCURINSTR( + OP_LR_8, DB, SR13, // L + IDLE, + IDLE, + ROMC_12, + IDLE, + IDLE, + OP_LR_8, DB, SR12, // L + IDLE, + IDLE, + ROMC_14, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_P0_Q() + { + PopulateCURINSTR( + OP_LR_8, DB, SR15, // L + IDLE, + IDLE, + ROMC_17, + IDLE, + IDLE, + OP_LR_8, DB, SR14, // L + IDLE, + IDLE, + ROMC_14, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_Q_DC() + { + PopulateCURINSTR( + ROMC_06, // L + IDLE, + IDLE, + OP_LR_8, SR14, DB, + IDLE, + IDLE, + ROMC_09, // L + IDLE, + IDLE, + OP_LR_8, SR15, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_DC_Q() + { + PopulateCURINSTR( + OP_LR_8, DB, SR14, // L + IDLE, + IDLE, + ROMC_16, + IDLE, + IDLE, + OP_LR_8, DB, SR15, // L + IDLE, + IDLE, + ROMC_19, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_DC_H() + { + PopulateCURINSTR( + OP_LR_8, DB, SR10, // L + IDLE, + IDLE, + ROMC_16, + IDLE, + IDLE, + OP_LR_8, DB, SR11, // L + IDLE, + IDLE, + ROMC_19, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_H_DC() + { + PopulateCURINSTR( + ROMC_06, // L + IDLE, + IDLE, + OP_LR_8, SR10, DB, + IDLE, + IDLE, + ROMC_09, // L + IDLE, + IDLE, + OP_LR_8, SR11, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void SHIFT_R(ushort index) + { + PopulateCURINSTR( + OP_SHFT_R, A, index, // S + ROMC_00_S, + IDLE, + END); + } + + private void SHIFT_L(ushort index) + { + PopulateCURINSTR( + OP_SHFT_L, A, index, // S + ROMC_00_S, + IDLE, + END); + } + + private void LM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_LR_8, DB, A, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void ST() + { + PopulateCURINSTR( + OP_LR_8, DB, A, // L + IDLE, + IDLE, + ROMC_05, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void COM() + { + PopulateCURINSTR( + OP_COM, // S + ROMC_00_S, + IDLE, + END); + } + + private void LNK() + { + PopulateCURINSTR( + OP_LNK, // S + ROMC_00_S, + IDLE, + END); + } + + private void DI() + { + PopulateCURINSTR( + ROMC_1C_S, // S + OP_DI, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void EI() + { + PopulateCURINSTR( + ROMC_1C_S, // S + OP_EI, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void POP() + { + PopulateCURINSTR( + ROMC_04, // S + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_W_J() + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_LR_8, W, SR9, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void LR_J_W() + { + PopulateCURINSTR( + OP_LR_8, SR9, W, // S + ROMC_00_S, + IDLE, + END); + } + + private void INC() + { + PopulateCURINSTR( + OP_INC8, A, // S + ROMC_00_S, + IDLE, + END); + } + + + private void ILLEGAL() + { + PopulateCURINSTR( + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs new file mode 100644 index 0000000000..217463a018 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -0,0 +1,480 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Fairchild F3850 (F8) CPU (Channel F-specific implementation) + /// + /// The F8 microprocessor is made up of separate interchangeable devices + /// The Channel F has: + /// * x1 F3850 CPU (central processing unit) + /// * x2 F3851 PSU (program storage unit) + /// The CPU does not have its own data counters or program counters, rather each F8 component connected to the CPU + /// holds their own PCs and SPs and are all connected to the ROMC (ROM control) pins that are serviced by the CPU. + /// Every device must respond to changes in the CPU ROMC pins output and they each update their PCs and DCs in the same way. + /// e.g. SPs and PCs should always be identical + /// Each device has a factory ROM mask applied and with every ROMC change observed is able to know whether it should respond (via the shared data bus) + /// or not based on the value within its counters. + /// + /// For this reason we will hold the PCs and SPs within the F3850 implementation. + /// + /// We are currently also *not* using a separate F3851 implementation. In reality the F3851 chip has/does: + /// * 1024 byte masked ROM + /// * x2 16-bit program counters + /// * x1 16-bit data counter + /// * Programmable timer + /// * Interrupt logic + /// + /// However, the Channel F does not use the timer or interrupt logic at all (as far as I can see) so we can hopefully just + /// maintain the PC and DC here in the CPU and move the ROMs into the core. + /// + public sealed partial class F3850 + { + // operations that can take place in an instruction + + //public const ushort OP = 1; + //public const ushort LR_8 = 2; + //public const ushort LR_16 = 3; + + + public const ushort ROMC_00_S = 40; + public const ushort ROMC_00_L = 41; + public const ushort ROMC_01 = 1; + public const ushort ROMC_02 = 2; + public const ushort ROMC_03_S = 3; + public const ushort ROMC_03_L = 33; + public const ushort ROMC_04 = 4; + public const ushort ROMC_05 = 5; + public const ushort ROMC_06 = 6; + public const ushort ROMC_07 = 7; + public const ushort ROMC_08 = 8; + public const ushort ROMC_09 = 9; + public const ushort ROMC_0A = 10; + public const ushort ROMC_0B = 11; + public const ushort ROMC_0C = 12; + public const ushort ROMC_0D = 13; + public const ushort ROMC_0E = 14; + public const ushort ROMC_0F = 15; + public const ushort ROMC_10 = 16; + public const ushort ROMC_11 = 17; + public const ushort ROMC_12 = 18; + public const ushort ROMC_13 = 19; + public const ushort ROMC_14 = 20; + public const ushort ROMC_15 = 21; + public const ushort ROMC_16 = 22; + public const ushort ROMC_17 = 23; + public const ushort ROMC_18 = 24; + public const ushort ROMC_19 = 25; + public const ushort ROMC_1A = 26; + public const ushort ROMC_1B = 27; + public const ushort ROMC_1C_S = 28; + public const ushort ROMC_1C_L = 34; + public const ushort ROMC_1D = 29; + public const ushort ROMC_1E = 30; + public const ushort ROMC_1F = 31; + + public const ushort IDLE = 0; + public const ushort END = 51; + + public const ushort OP_LR_8 = 100; + public const ushort OP_SHFT_R = 101; + public const ushort OP_SHFT_L = 102; + public const ushort OP_COM = 103; + public const ushort OP_LNK = 104; + public const ushort OP_DI = 105; + public const ushort OP_EI = 106; + public const ushort OP_INC8 = 107; + + + public F3850() + { + Reset(); + } + + public void Reset() + { + ResetRegisters(); + TotalExecutedCycles = 0; + instr_pntr = 0; + + PopulateCURINSTR( + ROMC_08, // S + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, + IDLE, + IDLE, + IDLE, + END); + + FlagICB = false; + } + + public IMemoryCallbackSystem MemoryCallbacks { get; set; } + + // Memory Access + public Func ReadMemory; + public Action WriteMemory; + public Func PeekMemory; + public Func DummyReadMemory; + + // Hardware I/O Port Access + public Func ReadHardware; + public Action WriteHardware; + + public Action OnExecFetch; + + public void SetCallbacks + ( + Func ReadMemory, + Func DummyReadMemory, + Func PeekMemory, + Action WriteMemory, + Func ReadHardware, + Action WriteHardware + ) + { + this.ReadMemory = ReadMemory; + this.DummyReadMemory = DummyReadMemory; + this.PeekMemory = PeekMemory; + this.WriteMemory = WriteMemory; + this.ReadHardware = ReadHardware; + this.WriteHardware = WriteHardware; + } + + /// + /// Runs a single CPU clock cycle + /// + public void ExecuteOne() + { + switch (cur_instr[instr_pntr++]) + { + // always the last tick within an opcode instruction cycle + case END: + opcode = databus; + instr_pntr = 0; + FetchInstruction(); + break; + + // used as timing 'padding' + case IDLE: + break; + + // load one register into another (or databus) + case OP_LR_8: + LoadReg_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // Shift register n bit positions to the right (zero fill) + case OP_SHFT_R: + ShiftRight_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // Shift register n bit positions to the left (zero fill) + case OP_SHFT_L: + ShiftLeft_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // A <- A ^ 255 + case OP_COM: + COM_Func(A); + break; + + // A <- (A) + (C) + case OP_LNK: + ADD8_Func(Regs[A], (ushort)(FlagC ? 1 : 0)); + break; + + case OP_DI: + FlagICB = false; + break; + + case OP_EI: + FlagICB = true; + break; + + case OP_INC8: + INC8_Func(cur_instr[instr_pntr++]); + break; + + + + // instruction fetch + // The device whose address space includes the contents of the PC0 register must place on the data bus the op code addressed by PC0; + // then all devices increments the content of PC0. + // CYCLE LENGTH: S + case ROMC_00_S: + databus = ReadMemory(RegPC0++); + break; + + // instruction fetch + // The device whose address space includes the contents of the PC0 register must place on the data bus the op code addressed by PC0; + // then all devices increments the content of PC0. + // CYCLE LENGTH: L + case ROMC_00_L: + databus = ReadMemory(RegPC0++); + break; + + // The device whose address space includes the contents of the PC0 register must place on the data bus the contents of the memory location + // addressed by by PC0; then all devices add the 8-bit value on the data bus, as a signed binary number, to PC0 + // CYCLE LENGTH: L + case ROMC_01: + databus = ReadMemory(RegPC0); + IncrementBySignedByte(RegPC0, databus); + break; + + // The device whose DC0 address addresses a memory word within the address space of that device must place on the data bus the contents + // of the memory location addressed by DC0; then all devices increment DC0 + // CYCLE LENGTH: L + case ROMC_02: + databus = ReadMemory(RegDC0++); + break; + + // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches + // CYCLE LENGTH: S + case ROMC_03_S: + databus = ReadMemory(RegPC0++); + iobus = databus; + break; + + // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches + // CYCLE LENGTH: L + case ROMC_03_L: + databus = ReadMemory(RegPC0++); + iobus = databus; + break; + + // Copy the contents of PC1 into PC0 + // CYCLE LENGTH: S + case ROMC_04: + RegPC0 = RegPC1; + break; + + // Store the data bus contents into the memory location pointed to by DC0; increment DC0 + // CYCLE LENGTH: L + case ROMC_05: + WriteMemory(RegDC0++, databus); + break; + + // Place the high order byte of DC0 on the data bus + // CYCLE LENGTH: L + case ROMC_06: + databus = (byte)Regs[DC0h]; + break; + + // Place the high order byte of PC1 on the data bus + // CYCLE LENGTH: L + case ROMC_07: + databus = (byte)Regs[PC1h]; + break; + + // All devices copy the contents of PC0 into PC1. The CPU outputs zero on the data bus in this ROMC state. + // Load the data bus into both halves of PC0, this clearing the register. + // CYCLE LENGTH: L + case ROMC_08: + RegPC1 = RegPC0; + databus = 0; + Regs[PC0h] = 0; + Regs[PC0l] = 0; + break; + + // The device whose address space includes the contents of the DC0 register must place the low order byte of DC0 onto the data bus + // CYCLE LENGTH: L + case ROMC_09: + databus = (byte)Regs[DC0l]; + break; + + // All devices add the 8-bit value on the data bus, treated as a signed binary number, to the data counter + // CYCLE LENGTH: L + case ROMC_0A: + IncrementBySignedByte(RegDC0, databus); + break; + + // The device whose address space includes the value in PC1 must place the low order byte of PC1 on the data bus + // CYCLE LENGTH: L + case ROMC_0B: + databus = (byte)Regs[PC1l]; + break; + + // The device whose address space includes the contents of the PC0 register must place the contents of the memory word addressed by PC0 + // onto the data bus; then all devices move the value that has just been placed on the data bus into the low order byte of PC0 + // CYCLE LENGTH: L + case ROMC_0C: + databus = ReadMemory(RegPC0); + Regs[PC0l] = databus; + break; + + // All devices store in PC1 the current contents of PC0, incremented by 1; PC1 is unaltered + // CYCLE LENGTH: S + case ROMC_0D: + RegPC1 = (ushort)(RegPC0 + 1); + break; + + // The device whose address space includes the contents of PC0 must place the contents of the word addressed by PC0 onto the data bus. + // The value on the data bus is then moved to the low order byte of DC0 by all devices + // CYCLE LENGTH: L + case ROMC_0E: + databus = ReadMemory(RegPC0); + Regs[DC0l] = databus; + break; + + // The interrupting device with the highest priority must place the low order byte of the interrupt vector on the data bus. + // All devices must copy the contents of PC0 into PC1. All devices must move the contents of the data bus into the low order byte of PC0 + // CYCLE LENGTH: L + case ROMC_0F: + throw new NotImplementedException("ROMC 0x0F not implemented"); + break; + + // Inhibit any modification to the interrupt priority logic + // CYCLE LENGTH: L + case ROMC_10: + throw new NotImplementedException("ROMC 0x10 not implemented"); + break; + + // The device whose memory space includes the contents of PC0 must place the contents of the addressed memory word on the data bus. + // All devices must then move the contents of the data bus to the upper byte of DC0 + // CYCLE LENGTH: L + case ROMC_11: + databus = ReadMemory(RegPC0); + Regs[DC0h] = databus; + break; + + // All devices copy the contents of PC0 into PC1. All devices then move the contents of the data bus into the low order byte of PC0 + // CYCLE LENGTH: L + case ROMC_12: + RegPC1 = RegPC0; + Regs[PC0l] = databus; + break; + + // The interrupting device with the highest priority must move the high order half of the interrupt vector onto the data bus. + // All devices must move the conetnts of the data bus into the high order byte of of PC0. The interrupting device resets its + // interrupt circuitry (so that it is no longer requesting CPU servicing and can respond to another interrupt) + // CYCLE LENGTH: L + case ROMC_13: + throw new NotImplementedException("ROMC 0x13 not implemented"); + break; + + // All devices move the contents of the data bus into the high order byte of PC0 + // CYCLE LENGTH: L + case ROMC_14: + Regs[PC0h] = databus; + break; + + // All devices move the contents of the data bus into the high order byte of PC1 + // CYCLE LENGTH: L + case ROMC_15: + Regs[PC1h] = databus; + break; + + // All devices move the contents of the data bus into the high order byte of DC0 + // CYCLE LENGTH: L + case ROMC_16: + Regs[DC0h] = databus; + break; + + // All devices move the contents of the data bus into the low order byte of PC0 + // CYCLE LENGTH: L + case ROMC_17: + Regs[PC0l] = databus; + break; + + // All devices move the contents of the data bus into the low order byte of PC1 + // CYCLE LENGTH: L + case ROMC_18: + Regs[PC1l] = databus; + break; + + // All devices move the contents of the data bus into the low order byte of DC0 + // CYCLE LENGTH: L + case ROMC_19: + Regs[DC0l] = databus; + break; + + // During the prior cycle, an I/O port timer or interrupt control register was addressed; the device containing the addressed + // port must move the current contents of the data bus into the addressed port + // CYCLE LENGTH: L + case ROMC_1A: + WriteHardware(iobus, databus); + break; + + // During the prior cycle, the data bus specified the address of an I/O port. The device containing the addressed I/O port + // must place the contents of the I/O port on the data bus. (Note that the contents of the timer and interrupt control + // registers cannot be read back onto the data bus) + // CYCLE LENGTH: L + case ROMC_1B: + databus = ReadHardware(iobus); + break; + + // None + // CYCLE LENGTH: S + case ROMC_1C_S: + break; + + // None + // CYCLE LENGTH: L + case ROMC_1C_L: + break; + + // Devices with DC0 and DC1 registers must switch registers. Devices without a DC1 register perform no operation + // CYCLE LENGTH: S + case ROMC_1D: + // we have no DC1 in this implementation + break; + + // The device whose address space includes the contents of PC0 must place the low order byte of PC0 onto the data bus + // CYCLE LENGTH: L + case ROMC_1E: + databus = (byte)Regs[PC0l]; + break; + + // The device whose address space includes the contents of PC0 must place the high order byte of PC0 onto the data bus + // CYCLE LENGTH: L + case ROMC_1F: + databus = (byte)Regs[PC0h]; + break; + } + + TotalExecutedCycles++; + } + + + /// + /// Optimization method to set cur_instr + /// + private void PopulateCURINSTR(ushort d0 = 0, ushort d1 = 0, ushort d2 = 0, ushort d3 = 0, ushort d4 = 0, ushort d5 = 0, ushort d6 = 0, ushort d7 = 0, ushort d8 = 0, + ushort d9 = 0, ushort d10 = 0, ushort d11 = 0, ushort d12 = 0, ushort d13 = 0, ushort d14 = 0, ushort d15 = 0, ushort d16 = 0, ushort d17 = 0, ushort d18 = 0, + ushort d19 = 0, ushort d20 = 0, ushort d21 = 0, ushort d22 = 0, ushort d23 = 0, ushort d24 = 0, ushort d25 = 0, ushort d26 = 0, ushort d27 = 0, ushort d28 = 0, + ushort d29 = 0, ushort d30 = 0, ushort d31 = 0, ushort d32 = 0, ushort d33 = 0, ushort d34 = 0, ushort d35 = 0, ushort d36 = 0, ushort d37 = 0) + { + cur_instr[0] = d0; cur_instr[1] = d1; cur_instr[2] = d2; + cur_instr[3] = d3; cur_instr[4] = d4; cur_instr[5] = d5; + cur_instr[6] = d6; cur_instr[7] = d7; cur_instr[8] = d8; + cur_instr[9] = d9; cur_instr[10] = d10; cur_instr[11] = d11; + cur_instr[12] = d12; cur_instr[13] = d13; cur_instr[14] = d14; + cur_instr[15] = d15; cur_instr[16] = d16; cur_instr[17] = d17; + cur_instr[18] = d18; cur_instr[19] = d19; cur_instr[20] = d20; + cur_instr[21] = d21; cur_instr[22] = d22; cur_instr[23] = d23; + cur_instr[24] = d24; cur_instr[25] = d25; cur_instr[26] = d26; + cur_instr[27] = d27; cur_instr[28] = d28; cur_instr[29] = d29; + cur_instr[30] = d30; cur_instr[31] = d31; cur_instr[32] = d32; + cur_instr[33] = d33; cur_instr[34] = d34; cur_instr[35] = d35; + cur_instr[36] = d36; cur_instr[37] = d37; + } + + public void SyncState(Serializer ser) + { + ser.BeginSection(nameof(F3850)); + + ser.EndSection(); + } + } +} From 6214de366ba99d4ec0a7e513decc8ae9d932f8a9 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 17 Apr 2019 22:28:12 +0100 Subject: [PATCH 021/138] ChannelF: Some progress --- .../BizHawk.Emulation.Cores.csproj | 1 + .../ChannelF/ChannelF.IDebuggable.cs | 113 +++ .../Fairchild/ChannelF/ChannelF.IEmulator.cs | 9 + .../Fairchild/ChannelF/ChannelF.IO.cs | 6 +- .../ChannelF/ChannelF.IVideoProvider.cs | 9 +- .../ChannelF/ChannelF.MemoryDomains.cs | 35 +- .../Consoles/Fairchild/ChannelF/ChannelF.cs | 8 + .../ChannelF/F8/F3850.Disassembler.cs | 304 ++++++- .../Fairchild/ChannelF/F8/F3850.Execute.cs | 237 +++++- .../Fairchild/ChannelF/F8/F3850.Operations.cs | 209 ++++- .../Fairchild/ChannelF/F8/F3850.Registers.cs | 186 ++-- .../Fairchild/ChannelF/F8/F3850.Tables.cs | 802 +++++++++++++++++- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 398 +++++++-- 13 files changed, 2084 insertions(+), 233 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 0e3a43dcd8..22e5ff52a4 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -595,6 +595,7 @@ + diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs new file mode 100644 index 0000000000..16a48c9684 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + public partial class ChannelF : IDebuggable + { + public IDictionary GetCpuFlagsAndRegisters() + { + var res = new Dictionary + { + ["A"] = CPU.Regs[CPU.A], + ["W"] = CPU.Regs[CPU.W], + ["ISAR"] = CPU.Regs[CPU.ISAR], + ["PC0"] = CPU.RegPC0, + ["PC1"] = CPU.RegPC1, + ["DC0"] = CPU.RegDC0, + ["DB"] = CPU.Regs[CPU.DB], + ["IO"] = CPU.Regs[CPU.IO], + ["J"] = CPU.Regs[CPU.J], + ["H"] = CPU.Regs[CPU.Hl] + (CPU.Regs[CPU.Hh] << 8), + ["K"] = CPU.Regs[CPU.Kl] + (CPU.Regs[CPU.Kh] << 8), + ["Q"] = CPU.Regs[CPU.Ql] + (CPU.Regs[CPU.Qh] << 8), + ["Flag C"] = CPU.FlagC, + ["Flag O"] = CPU.FlagO, + ["Flag Z"] = CPU.FlagZ, + ["Flag S"] = CPU.FlagS, + ["Flag I"] = CPU.FlagICB + }; + + for (int i = 0; i < 64; i++) + { + res.Add("SPR" + i, CPU.Regs[i]); + } + + return res; + } + + public void SetCpuRegister(string register, int value) + { + if (register.StartsWith("SPR")) + { + var reg = Convert.ToInt32(register.Replace("SPR", "")); + + if (reg > 63) + throw new InvalidOperationException(); + + CPU.Regs[reg] = (ushort) value; + } + else + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + CPU.Regs[CPU.A] = (ushort)value; + break; + case "W": + CPU.Regs[CPU.W] = (ushort)value; + break; + case "ISAR": + CPU.Regs[CPU.ISAR] = (ushort)(value & 0x3F); + break; + case "PC0": + CPU.RegPC0 = (ushort)value; + break; + case "PC1": + CPU.RegPC1 = (ushort)value; + break; + case "DC0": + CPU.RegDC0 = (ushort)value; + break; + case "DB": + CPU.Regs[CPU.DB] = (ushort)value; + break; + case "IO": + CPU.Regs[CPU.IO] = (ushort)value; + break; + case "J": + CPU.Regs[CPU.J] = (ushort)value; + break; + case "H": + CPU.Regs[CPU.Hl] = (ushort)(value & 0xFF); + CPU.Regs[CPU.Hh] = (ushort)(value & 0xFF00); + break; + case "K": + CPU.Regs[CPU.Kl] = (ushort)(value & 0xFF); + CPU.Regs[CPU.Kh] = (ushort)(value & 0xFF00); + break; + case "Q": + CPU.Regs[CPU.Ql] = (ushort)(value & 0xFF); + CPU.Regs[CPU.Qh] = (ushort)(value & 0xFF00); + break; + } + } + } + + public IMemoryCallbackSystem MemoryCallbacks { get; } + + public bool CanStep(StepType type) => false; + + [FeatureNotImplemented] + public void Step(StepType type) + { + throw new NotImplementedException(); + } + + public long TotalExecutedCycles => CPU.TotalExecutedCycles; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs index 459d8d8d7c..026fb361fb 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs @@ -28,6 +28,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FrameAdvance(IController controller, bool render, bool renderSound) { + if (_tracer.Enabled) + { + CPU.TraceCallback = s => _tracer.Put(s); + } + else + { + CPU.TraceCallback = null; + } + while (FrameClock++ < ClockPerFrame) { CPU.ExecuteOne(); diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs index 7ccc2ede1b..1a53e983bf 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs @@ -14,6 +14,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public byte[] Cartridge = new byte[0x2000 - 0x800]; + public byte[] PortLatch = new byte[64]; + public byte ReadBus(ushort addr) { if (addr < 0x400) @@ -69,12 +71,12 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public byte ReadPort(ushort addr) { - return 0xff; + return 0x00; } public void WritePort(ushort addr, byte value) { - + var port = addr & 0x7; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs index f04ca98ea0..d8d3307a63 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -4,7 +4,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Consoles.ChannelF { - public partial class ChannelF : IVideoProvider + public partial class ChannelF : IVideoProvider, IRegionable { public int _frameHz = 60; @@ -22,5 +22,12 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public int BackgroundColor => unchecked((int)0xFF000000); public int VsyncNumerator => _frameHz; public int VsyncDenominator => 1; + + + #region IRegionable + + public DisplayType Region => DisplayType.NTSC; + + #endregion } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs index 002ef63130..af0370f03b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using BizHawk.Common.BufferExtensions; using BizHawk.Emulation.Common; @@ -13,12 +14,42 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void SetupMemoryDomains() { + var domains = new List + { + new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Big, + (addr) => + { + if (addr < 0 || addr >= 65536) + { + throw new ArgumentOutOfRangeException(); + } + return ReadBus((ushort)addr); + }, + (addr, value) => + { + if (addr < 0 || addr >= 65536) + { + throw new ArgumentOutOfRangeException(); + } + WriteBus((ushort)addr, value); + }, 1) + }; + + SyncAllByteArrayDomains(); + + memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + (ServiceProvider as BasicServiceProvider)?.Register(memoryDomains); + + _memoryDomainsInit = true; } private void SyncAllByteArrayDomains() { - + SyncByteArrayDomain("BIOS1", BIOS01); + SyncByteArrayDomain("BIOS2", BIOS02); + SyncByteArrayDomain("ROM", Cartridge); + SyncByteArrayDomain("VRAM", FrameBuffer); } private void SyncByteArrayDomain(string name, byte[] data) @@ -30,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } else { - var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); + var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Big, data, false, 1); _byteArrayDomains.Add(name, m); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs index 957f7d6c5a..3c088e0341 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs @@ -18,6 +18,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ServiceProvider = ser; CoreComm = comm; InputCallbacks = new InputCallbackSystem(); + MemoryCallbacks = new MemoryCallbackSystem(new[] { "System Bus" }); ControllerDefinition = ChannelFControllerDefinition; @@ -30,6 +31,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF DummyReadMemory = ReadBus }; + _tracer = new TraceBuffer { Header = CPU.TraceHeader }; + byte[] bios01 = comm.CoreFileProvider.GetFirmware("ChannelF", "ChannelF_sl131253", true); byte[] bios02 = comm.CoreFileProvider.GetFirmware("ChannelF", "ChannelF_sl131254", true); @@ -41,8 +44,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF CalcClock(); ser.Register(this); + ser.Register(_tracer); + ser.Register(CPU); + + SetupMemoryDomains(); } public F3850 CPU; + private readonly TraceBuffer _tracer; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs index bb63cbe99e..bba6c4a581 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs @@ -13,10 +13,309 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// public sealed partial class F3850 : IDisassemblable { + static string Result(string format, Func read, ref ushort addr) + { + //d immediately succeeds the opcode + //n immediate succeeds the opcode and the displacement (if present) + //nn immediately succeeds the opcode and the displacement (if present) + if (format.IndexOf("nn") != -1) format = format.Replace("nn", $"{read(addr++) << 8 + (read(addr++)):X4}h"); // MSB is read first + if (format.IndexOf("n") != -1) format = format.Replace("n", $"{read(addr++):X2}h"); + + if (format.IndexOf("+d") != -1) format = format.Replace("+d", "d"); + if (format.IndexOf("d") != -1) + { + var b = unchecked((sbyte)read(addr++)); + format = format.Replace("d", $"{(b < 0 ? '-' : '+')}{(b < 0 ? -b : b):X2}h"); + } + + return format; + } + + + readonly static string[] mnemonics = new string[] + { + "LR A, KU", // 0x00 + "LR A, KL", // 0x01 + "LR A, QU", // 0x02 + "LR A, QL", // 0x03 + "LR KU, A", // 0x04 + "LR KL, A", // 0x05 + "LR QU, A", // 0x06 + "LR QL, A", // 0x07 + "LR K, P", // 0x08 + "LR P, K", // 0x09 + "LR A, IS", // 0x0A + "LR IS, A", // 0x0B + "PK", // 0x0C + "LR P0, Q", // 0x0D + "LR Q, DC", // 0x0E + "LR DC, Q", // 0x0F + "LR DC, H", // 0x10 + "LR H, DC", // 0x11 + "SR 1", // 0x12 + "SL 1", // 0x13 + "SR 4", // 0x14 + "SL 4", // 0x15 + "LM", // 0x16 + "ST", // 0x17 + "COM", // 0x18 + "LNK", // 0x19 + "DI", // 0x1A + "EI", // 0x1B + "POP", // 0x1C + "LR W, J", // 0x1D + "LR J, W", // 0x1E + "INC", // 0x1F + "LI n", // 0x20 + "NI n", // 0x21 + "IO n", // 0x22 + "XI n", // 0x23 + "AI n", // 0x24 + "CI n", // 0x25 + "IN n", // 0x26 + "OUT n", // 0x27 + "PI nn", // 0x28 + "JMP nn", // 0x29 + "DCI nn", // 0x2A + "NOP", // 0x2B + "XDC", // 0x2C + "ILLEGAL", // 0x2D + "ILLEGAL", // 0x2E + "ILLEGAL", // 0x2F + "DS r00", // 0x30 + "DS r01", // 0x31 + "DS r02", // 0x32 + "DS r03", // 0x33 + "DS r04", // 0x34 + "DS r05", // 0x35 + "DS r06", // 0x36 + "DS r07", // 0x37 + "DS r08", // 0x38 + "DS r09", // 0x39 + "DS r10", // 0x3A + "DS r11", // 0x3B + "DS ISAR", // 0x3C + "DS ISAR INC", // 0x3D + "DS ISAR DEC", // 0x3E + "ILLEGAL", // 0x3F + "LR A, r00", // 0x40 + "LR A, r01", // 0x41 + "LR A, r02", // 0x42 + "LR A, r03", // 0x43 + "LR A, r04", // 0x44 + "LR A, r05", // 0x45 + "LR A, r06", // 0x46 + "LR A, r07", // 0x47 + "LR A, r08", // 0x48 + "LR A, r09", // 0x49 + "LR A, r10", // 0x4A + "LR A, r11", // 0x4B + "LR A, ISAR", // 0x4C + "LR A, ISAR INC", // 0x4D + "LR A, ISAR DEC", // 0x4E + "ILLEGAL", // 0x4F + "LR r00, A", // 0x50 + "LR r01, A", // 0x51 + "LR r02, A", // 0x52 + "LR r03, A", // 0x53 + "LR r04, A", // 0x54 + "LR r05, A", // 0x55 + "LR r06, A", // 0x56 + "LR r07, A", // 0x57 + "LR r08, A", // 0x58 + "LR r09, A", // 0x59 + "LR r10, A", // 0x5A + "LR r11, A", // 0x5B + "LR ((ISAR)), A", // 0x5C + "LR (ISAR), A INC", // 0x5D + "LR (ISAR), A DEC", // 0x5E + "ILLEGAL", // 0x5F + "LISU 0x00", // 0x60 + "LISU 0x08", // 0x61 + "LISU 0x10", // 0x62 + "LISU 0x18", // 0x63 + "LISU 0x20", // 0x64 + "LISU 0x28", // 0x65 + "LISU 0x30", // 0x66 + "LISU 0x38", // 0x67 + "LISU 0x00", // 0x68 + "LISU 0x01", // 0x69 + "LISU 0x02", // 0x6A + "LISU 0x03", // 0x6B + "LISU 0x04", // 0x6C + "LISU 0x05", // 0x6D + "LISU 0x06", // 0x6E + "LISU 0x07", // 0x6F + "LIS 0x0", // 0x70 + "LIS 0x01", // 0x71 + "LIS 0x2", // 0x72 + "LIS 0x3", // 0x73 + "LIS 0x4", // 0x74 + "LIS 0x5", // 0x75 + "LIS 0x6", // 0x76 + "LIS 0x7", // 0x77 + "LIS 0x8", // 0x78 + "LIS 0x9", // 0x79 + "LIS 0xA", // 0x7A + "LIS 0xB", // 0x7B + "LIS 0xC", // 0x7C + "LIS 0xD", // 0x7D + "LIS 0xE", // 0x7E + "LIS 0xF", // 0x7F + "BT 0", // 0x80 + "BT 1", // 0x81 + "BT 2", // 0x82 + "BT 3", // 0x83 + "BT 4", // 0x84 + "BT 5", // 0x85 + "BT 6", // 0x86 + "BT 7", // 0x87 + "AM", // 0x88 + "AMD", // 0x89 + "NM", // 0x8A + "OM", // 0x8B + "XM", // 0x8C + "CM", // 0x8D + "ADC", // 0x8E + "BR7 n", // 0x8F + "BF 0x0 n", // 0x90 + "BF 0x1 n", // 0x91 + "BF 0x2 n", // 0x92 + "BF 0x3 n", // 0x93 + "BF 0x4 n", // 0x94 + "BF 0x5 n", // 0x95 + "BF 0x6 n", // 0x96 + "BF 0x7 n", // 0x97 + "BF 0x8 n", // 0x98 + "BF 0x9 n", // 0x99 + "BF 0xA n", // 0x9A + "BF 0xB n", // 0x9B + "BF 0xC n", // 0x9C + "BF 0xD n", // 0x9D + "BF 0xE n", // 0x9E + "BF 0xF n", // 0x9F + "INS 0", // 0xA0 + "INS 1", // 0xA1 + "ILLEGAL", // 0xA2 + "ILLEGAL", // 0xA3 + "INS 4", // 0xA4 + "INS 5", // 0xA5 + "INS 6", // 0xA6 + "INS 7", // 0xA7 + "INS 8", // 0xA8 + "INS 9", // 0xA9 + "INS 10", // 0xAA + "INS 11", // 0xAB + "INS 12", // 0xAC + "INS 13", // 0xAD + "INS 14", // 0xAE + "INS 16", // 0xAF + "OUTS 0", // 0xB0 + "OUTS 1", // 0xB1 + "ILLEGAL", // 0xB2 + "ILLEGAL", // 0xB3 + "OUTS 4", // 0xB4 + "OUTS 5", // 0xB5 + "OUTS 6", // 0xB6 + "OUTS 7", // 0xB7 + "OUTS 8", // 0xB8 + "OUTS 9", // 0xB9 + "OUTS 10", // 0xBA + "OUTS 11", // 0xBB + "OUTS 12", // 0xBC + "OUTS 13", // 0xBD + "OUTS 14", // 0xBE + "OUTS 15", // 0xBF + "AS r00", // 0xC0 + "AS r01", // 0xC1 + "AS r02", // 0xC2 + "AS r03", // 0xC3 + "AS r04", // 0xC4 + "AS r05", // 0xC5 + "AS r06", // 0xC6 + "AS r07", // 0xC7 + "AS r08", // 0xC8 + "AS r09", // 0xC9 + "AS r10", // 0xCA + "AS r11", // 0xCB + "AS ISAR", // 0xCC + "AS ISAR INC", // 0xCD + "AS ISAR DEC", // 0xCE + "ILLEGAL", // 0xCF + "ASD r00", // 0xD0 + "ASD r01", // 0xD1 + "ASD r02", // 0xD2 + "ASD r03", // 0xD3 + "ASD r04", // 0xD4 + "ASD r05", // 0xD5 + "ASD r06", // 0xD6 + "ASD r07", // 0xD7 + "ASD r08", // 0xD8 + "ASD r09", // 0xD9 + "ASD r10", // 0xDA + "ASD r11", // 0xDB + "ASD ISAR", // 0xDC + "ASD ISAR INC", // 0xDD + "ASD ISAR DEC", // 0xDE + "ILLEGAL", // 0xDF + "XS r00", // 0xE0 + "XS r01", // 0xE1 + "XS r02", // 0xE2 + "XS r03", // 0xE3 + "XS r04", // 0xE4 + "XS r05", // 0xE5 + "XS r06", // 0xE6 + "XS r07", // 0xE7 + "XS r08", // 0xE8 + "XS r09", // 0xE9 + "XS r10", // 0xEA + "XS r11", // 0xEB + "XS ISAR", // 0xEC + "XS ISAR INC", // 0xED + "XS ISAR DEC", // 0xEE + "ILLEGAL", // 0xEF + "NS r00", // 0xF0 + "NS r01", // 0xF1 + "NS r02", // 0xF2 + "NS r03", // 0xF3 + "NS r04", // 0xF4 + "NS r05", // 0xF5 + "NS r06", // 0xF6 + "NS r07", // 0xF7 + "NS r08", // 0xF8 + "NS r09", // 0xF9 + "NS r10", // 0xFA + "NS r11", // 0xFB + "NS ISAR", // 0xFC + "NS ISAR INC", // 0xFD + "NS ISAR DEC", // 0xFE + "ILLEGAL", // 0xFF + }; + + public string Disassemble(ushort addr, Func read, out int size) + { + ushort start_addr = addr; + ushort extra_inc = 0; + byte A = read(addr++); + string format; + format = mnemonics[A]; + + string temp = Result(format, read, ref addr); + size = addr - start_addr; + + if (addr < start_addr) + { + size = (0x10000 + addr) - start_addr; + } + + return temp; + } #region IDisassemblable + #endregion + public string Cpu { get { return "F3850"; } @@ -35,11 +334,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public string Disassemble(MemoryDomain m, uint addr, out int length) { - length = 0; - string ret = "";// Disassemble((ushort)addr, a => m.PeekByte(a), out length); + string ret = Disassemble((ushort)addr, a => m.PeekByte(a), out length); return ret; } - - #endregion } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs index 9bd5b37b3b..c2a792a444 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -18,8 +18,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public ushort[] cur_instr = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime public ushort[] cur_romc = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime public byte opcode; - public byte databus; - public ushort iobus; public void FetchInstruction() { @@ -49,19 +47,240 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x15: SHIFT_L(4); break; // Shift (A) left four bit positions (zero fill) case 0x16: LM(); break; // A <- ((DC0)) case 0x17: ST(); break; // (DC) <- (A) - case 0x18: COM(); break; // A <- A ^ 255 - case 0x1A: DI(); break; // Clear ICB - case 0x1B: EI(); break; // Set ICB + case 0x18: COM(); break; // A <- A XOR 255 (complement A) + case 0x1A: DI(); break; // Clear ICB + case 0x1B: EI(); break; // Set ICB case 0x1C: POP(); break; // PC0 <- PC1 case 0x1D: LR_W_J(); break; // W <- (r9) case 0x1E: LR_J_W(); break; // r9 <- (W) - case 0x1F: INC(); break; // A <- (A) + 1 + case 0x1F: INC(); break; // A <- (A) + 1 + case 0x20: LI(); break; // A <- H'aa' + case 0x21: NI(); break; // A <- (A) AND H'aa' + case 0x22: OI(); break; // A <- (A) OR H'aa' + case 0x23: XI(); break; // A <- (A) XOR H'aa' + case 0x24: AI(); break; // A <- (A) + H'aa' + case 0x25: CI(); break; // H'aa' + (A) + 1 (modify flags without saving result) + case 0x26: IN(); break; // DB <- PP; A <- (I/O Port PP) + case 0x27: OUT(); break; // DB <- PP; I/O Port PP <- (A) + case 0x28: PI(); break; // A <- H'ii'; PC1 <- (PC0) + 1; PC0l <- H'jj'; PC0h <- (A) + case 0x29: JMP(); break; // A <- H'ii'; PC0l <- H'jj'; PC0h <- (A) + case 0x2A: DCI(); break; // DC0h <- ii; increment PC0; DC0l <- jj; increment PC0 + case 0x2B: NOP(); break; // No operation (4 cycles - fetch next opcode) + case 0x2C: XDC(); break; // DC0 <-> DC1 + + + + case 0x30: DS(0); break; // SR <- (SR) + H'FF' + case 0x31: DS(1); break; // SR <- (SR) + H'FF' + case 0x32: DS(2); break; // SR <- (SR) + H'FF' + case 0x33: DS(3); break; // SR <- (SR) + H'FF' + case 0x34: DS(4); break; // SR <- (SR) + H'FF' + case 0x35: DS(5); break; // SR <- (SR) + H'FF' + case 0x36: DS(6); break; // SR <- (SR) + H'FF' + case 0x37: DS(7); break; // SR <- (SR) + H'FF' + case 0x38: DS(8); break; // SR <- (SR) + H'FF' + case 0x39: DS(9); break; // SR <- (SR) + H'FF' + case 0x3A: DS(10); break; // SR <- (SR) + H'FF' + case 0x3B: DS(11); break; // SR <- (SR) + H'FF' + case 0x3C: DS_ISAR(); break; // SR <- (SR) + H'FF' (SR pointed to by the ISAR) + case 0x3D: DS_ISAR_INC(); break; // SR <- (SR) + H'FF' (SR pointed to by the ISAR); ISAR incremented + case 0x3E: DS_ISAR_DEC(); break; // SR <- (SR) + H'FF' (SR pointed to by the ISAR); ISAR decremented + + case 0x40: LR_A_R(0); break; // A <- (SR) + case 0x41: LR_A_R(1); break; // A <- (SR) + case 0x42: LR_A_R(2); break; // A <- (SR) + case 0x43: LR_A_R(3); break; // A <- (SR) + case 0x44: LR_A_R(4); break; // A <- (SR) + case 0x45: LR_A_R(5); break; // A <- (SR) + case 0x46: LR_A_R(6); break; // A <- (SR) + case 0x47: LR_A_R(7); break; // A <- (SR) + case 0x48: LR_A_R(8); break; // A <- (SR) + case 0x49: LR_A_R(9); break; // A <- (SR) + case 0x4A: LR_A_R(10); break; // A <- (SR) + case 0x4B: LR_A_R(11); break; // A <- (SR) + case 0x4C: LR_A_ISAR(); break; // A <- (SR) (SR pointed to by the ISAR) + case 0x4D: LR_A_ISAR_INC(); break; // A <- (SR) (SR pointed to by the ISAR); ISAR incremented + case 0x4E: LR_A_ISAR_DEC(); break; // A <- (SR) (SR pointed to by the ISAR); ISAR decremented + + case 0x50: LR_R_A(0); break; // SR <- (A) + case 0x51: LR_R_A(1); break; // SR <- (A) + case 0x52: LR_R_A(2); break; // SR <- (A) + case 0x53: LR_R_A(3); break; // SR <- (A) + case 0x54: LR_R_A(4); break; // SR <- (A) + case 0x55: LR_R_A(5); break; // SR <- (A) + case 0x56: LR_R_A(6); break; // SR <- (A) + case 0x57: LR_R_A(7); break; // SR <- (A) + case 0x58: LR_R_A(8); break; // SR <- (A) + case 0x59: LR_R_A(9); break; // SR <- (A) + case 0x5A: LR_R_A(10); break; // SR <- (A) + case 0x5B: LR_R_A(11); break; // SR <- (A) + case 0x5C: LR_ISAR_A(); break; // SR <- (A) (SR pointed to by the ISAR) + case 0x5D: LR_ISAR_A_INC(); break; // SR <- (A) (SR pointed to by the ISAR); ISAR incremented + case 0x5E: LR_ISAR_A_DEC(); break; // SR <- (A) (SR pointed to by the ISAR); ISAR decremented + + case 0x60: LISU(0); break; // ISARU <- 0'e' (octal) + case 0x61: LISU(8); break; // ISARU <- 0'e' (octal) + case 0x62: LISU(16); break; // ISARU <- 0'e' (octal) + case 0x63: LISU(24); break; // ISARU <- 0'e' (octal) + case 0x64: LISU(32); break; // ISARU <- 0'e' (octal) + case 0x65: LISU(40); break; // ISARU <- 0'e' (octal) + case 0x66: LISU(48); break; // ISARU <- 0'e' (octal) + case 0x67: LISU(56); break; // ISARU <- 0'e' (octal) + case 0x68: LISL(0); break; // ISARL <- 0'e' (octal) + case 0x69: LISL(1); break; // ISARL <- 0'e' (octal) + case 0x6A: LISL(2); break; // ISARL <- 0'e' (octal) + case 0x6B: LISL(3); break; // ISARL <- 0'e' (octal) + case 0x6C: LISL(4); break; // ISARL <- 0'e' (octal) + case 0x6D: LISL(5); break; // ISARL <- 0'e' (octal) + case 0x6E: LISL(6); break; // ISARL <- 0'e' (octal) + case 0x6F: LISL(7); break; // ISARL <- 0'e' (octal) + + case 0x70: LIS(0); break; // A <- H'0a' + case 0x71: LIS(1); break; // A <- H'0a' + case 0x72: LIS(2); break; // A <- H'0a' + case 0x73: LIS(3); break; // A <- H'0a' + case 0x74: LIS(4); break; // A <- H'0a' + case 0x75: LIS(5); break; // A <- H'0a' + case 0x76: LIS(6); break; // A <- H'0a' + case 0x77: LIS(7); break; // A <- H'0a' + case 0x78: LIS(8); break; // A <- H'0a' + case 0x79: LIS(9); break; // A <- H'0a' + case 0x7a: LIS(10); break; // A <- H'0a' + case 0x7b: LIS(11); break; // A <- H'0a' + case 0x7c: LIS(12); break; // A <- H'0a' + case 0x7d: LIS(13); break; // A <- H'0a' + case 0x7e: LIS(14); break; // A <- H'0a' + case 0x7f: LIS(15); break; // A <- H'0a' + case 0x80: BT(0); break; // Test operand against W (Branching instruction) + case 0x81: BT(1); break; // Test operand against W (Branching instruction) + case 0x82: BT(2); break; // Test operand against W (Branching instruction) + case 0x83: BT(3); break; // Test operand against W (Branching instruction) + case 0x84: BT(4); break; // Test operand against W (Branching instruction) + case 0x85: BT(5); break; // Test operand against W (Branching instruction) + case 0x86: BT(6); break; // Test operand against W (Branching instruction) + case 0x87: BT(7); break; // Test operand against W (Branching instruction) + case 0x88: AM(); break; // A <- (A) + ((DC0))Binary; DC0 <- (DC0) + 1 + case 0x89: AMD(); break; // A <- (A) + ((DC0))Decimal; DC0 <- (DC0) + 1 + case 0x8A: NM(); break; // A <- (A) AND ((DC0)); DC0 <- (DC0) + 1 + case 0x8B: OM(); break; // A <- (A) OR ((DC0)); DC0 <- (DC0) + 1 + case 0x8C: XM(); break; // A <- (A) XOR ((DC0)); DC0 <- (DC0) + 1 + case 0x8D: CM(); break; // Set status flags on basis of: ((DC)) + (A) + 1; DC0 <- (DC0) + 1; DC <- (DC) + (A) + case 0x8E: ADC(); break; // DC <- (DC) + (A) + case 0x8F: BR7(); break; // DC <- (DC) + (A) + case 0x90: BF(0); break; // PC0 <- PC0+n+1 + case 0x91: BF(1); break; // PC0 <- PC0+n+1 + case 0x92: BF(2); break; // PC0 <- PC0+n+1 + case 0x93: BF(3); break; // PC0 <- PC0+n+1 + case 0x94: BF(4); break; // PC0 <- PC0+n+1 + case 0x95: BF(5); break; // PC0 <- PC0+n+1 + case 0x96: BF(6); break; // PC0 <- PC0+n+1 + case 0x97: BF(7); break; // PC0 <- PC0+n+1 + case 0x98: BF(8); break; // PC0 <- PC0+n+1 + case 0x99: BF(9); break; // PC0 <- PC0+n+1 + case 0x9A: BF(10); break; // PC0 <- PC0+n+1 + case 0x9B: BF(11); break; // PC0 <- PC0+n+1 + case 0x9C: BF(12); break; // PC0 <- PC0+n+1 + case 0x9D: BF(13); break; // PC0 <- PC0+n+1 + case 0x9E: BF(14); break; // PC0 <- PC0+n+1 + case 0x9F: BF(15); break; // PC0 <- PC0+n+1 + case 0xA0: INS_0(0); break; // A <- (I/O Port 0 or 1) + case 0xA1: INS_0(1); break; // A <- (I/O Port 0 or 1) + + + case 0xA4: INS_1(4); break; // DB <- Port Address (4 thru 15) + case 0xA5: INS_1(5); break; // DB <- Port Address (4 thru 15) + case 0xA6: INS_1(6); break; // DB <- Port Address (4 thru 15) + case 0xA7: INS_1(7); break; // DB <- Port Address (4 thru 15) + case 0xA8: INS_1(8); break; // DB <- Port Address (4 thru 15) + case 0xA9: INS_1(9); break; // DB <- Port Address (4 thru 15) + case 0xAA: INS_1(10); break; // DB <- Port Address (4 thru 15) + case 0xAB: INS_1(11); break; // DB <- Port Address (4 thru 15) + case 0xAC: INS_1(12); break; // DB <- Port Address (4 thru 15) + case 0xAD: INS_1(13); break; // DB <- Port Address (4 thru 15) + case 0xAE: INS_1(14); break; // DB <- Port Address (4 thru 15) + case 0xAF: INS_1(15); break; // DB <- Port Address (4 thru 15) + case 0xB0: OUTS_0(0); break; // I/O Port 0 or 1 <- (A) + case 0xB1: OUTS_0(1); break; // I/O Port 0 or 1 <- (A) + + + case 0xB4: OUTS_1(4); break; // DB <- Port Address (4 thru 15) + case 0xB5: OUTS_1(5); break; // DB <- Port Address (4 thru 15) + case 0xB6: OUTS_1(6); break; // DB <- Port Address (4 thru 15) + case 0xB7: OUTS_1(7); break; // DB <- Port Address (4 thru 15) + case 0xB8: OUTS_1(8); break; // DB <- Port Address (4 thru 15) + case 0xB9: OUTS_1(9); break; // DB <- Port Address (4 thru 15) + case 0xBA: OUTS_1(10); break; // DB <- Port Address (4 thru 15) + case 0xBB: OUTS_1(11); break; // DB <- Port Address (4 thru 15) + case 0xBC: OUTS_1(12); break; // DB <- Port Address (4 thru 15) + case 0xBD: OUTS_1(13); break; // DB <- Port Address (4 thru 15) + case 0xBE: OUTS_1(14); break; // DB <- Port Address (4 thru 15) + case 0xBF: OUTS_1(15); break; // DB <- Port Address (4 thru 15) + case 0xC0: AS(0); break; // A <- (A) + (r) Binary + case 0xC1: AS(1); break; // A <- (A) + (r) Binary + case 0xC2: AS(2); break; // A <- (A) + (r) Binary + case 0xC3: AS(3); break; // A <- (A) + (r) Binary + case 0xC4: AS(4); break; // A <- (A) + (r) Binary + case 0xC5: AS(5); break; // A <- (A) + (r) Binary + case 0xC6: AS(6); break; // A <- (A) + (r) Binary + case 0xC7: AS(7); break; // A <- (A) + (r) Binary + case 0xC8: AS(8); break; // A <- (A) + (r) Binary + case 0xC9: AS(9); break; // A <- (A) + (r) Binary + case 0xCA: AS(10); break; // A <- (A) + (r) Binary + case 0xCB: AS(11); break; // A <- (A) + (r) Binary + case 0xCC: AS_IS(); break; // A <- (A) + (r addressed via ISAR) Binary + case 0xCD: AS_IS_INC(); break; // A <- (A) + (r addressed via ISAR) Binary; Increment ISAR + case 0xCE: AS_IS_DEC(); break; // A <- (A) + (r addressed via ISAR) Binary; Decrement ISAR + + case 0xD0: ASD(0); break; // A <- (A) + (r) Decimal + case 0xD1: ASD(1); break; // A <- (A) + (r) Decimal + case 0xD2: ASD(2); break; // A <- (A) + (r) Decimal + case 0xD3: ASD(3); break; // A <- (A) + (r) Decimal + case 0xD4: ASD(4); break; // A <- (A) + (r) Decimal + case 0xD5: ASD(5); break; // A <- (A) + (r) Decimal + case 0xD6: ASD(6); break; // A <- (A) + (r) Decimal + case 0xD7: ASD(7); break; // A <- (A) + (r) Decimal + case 0xD8: ASD(8); break; // A <- (A) + (r) Decimal + case 0xD9: ASD(9); break; // A <- (A) + (r) Decimal + case 0xDA: ASD(10); break; // A <- (A) + (r) Decimal + case 0xDB: ASD(11); break; // A <- (A) + (r) Decimal + case 0xDC: ASD_IS(); break; // A <- (A) + (r addressed via ISAR) Decimal + case 0xDD: ASD_IS_INC(); break; // A <- (A) + (r addressed via ISAR) Decimal; Increment ISAR + case 0xDE: ASD_IS_DEC(); break; // A <- (A) + (r addressed via ISAR) Decimal; Decrement ISAR + + case 0xE0: XS(0); break; // A <- (A) XOR (r) + case 0xE1: XS(1); break; // A <- (A) XOR (r) + case 0xE2: XS(2); break; // A <- (A) XOR (r) + case 0xE3: XS(3); break; // A <- (A) XOR (r) + case 0xE4: XS(4); break; // A <- (A) XOR (r) + case 0xE5: XS(5); break; // A <- (A) XOR (r) + case 0xE6: XS(6); break; // A <- (A) XOR (r) + case 0xE7: XS(7); break; // A <- (A) XOR (r) + case 0xE8: XS(8); break; // A <- (A) XOR (r) + case 0xE9: XS(9); break; // A <- (A) XOR (r) + case 0xEA: XS(10); break; // A <- (A) XOR (r) + case 0xEB: XS(11); break; // A <- (A) XOR (r) + case 0xEC: XS_IS(); break; // A <- (A) XOR (r addressed via ISAR) + case 0xED: XS_IS_INC(); break; // A <- (A) XOR (r addressed via ISAR); Increment ISAR + case 0xEE: XS_IS_DEC(); break; // A <- (A) XOR (r addressed via ISAR); Decrement ISAR + + case 0xF0: NS(0); break; // A <- (A) XOR (r) + case 0xF1: NS(1); break; // A <- (A) XOR (r) + case 0xF2: NS(2); break; // A <- (A) XOR (r) + case 0xF3: NS(3); break; // A <- (A) XOR (r) + case 0xF4: NS(4); break; // A <- (A) XOR (r) + case 0xF5: NS(5); break; // A <- (A) XOR (r) + case 0xF6: NS(6); break; // A <- (A) XOR (r) + case 0xF7: NS(7); break; // A <- (A) XOR (r) + case 0xF8: NS(8); break; // A <- (A) XOR (r) + case 0xF9: NS(9); break; // A <- (A) XOR (r) + case 0xFA: NS(10); break; // A <- (A) XOR (r) + case 0xFB: NS(11); break; // A <- (A) XOR (r) + case 0xFC: NS_IS(); break; // A <- (A) XOR (r addressed via ISAR) + case 0xFD: NS_IS_INC(); break; // A <- (A) XOR (r addressed via ISAR); Increment ISAR + case 0xFE: NS_IS_DEC(); break; // A <- (A) XOR (r addressed via ISAR); Decrement ISAR default: ILLEGAL(); break; // Illegal Opcode } } - - - } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs index 6888816acc..0a3ef3f4fe 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs @@ -11,6 +11,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public sealed partial class F3850 { + /* private void IncrementBySignedByte(ushort dest, byte src) { if (src >= 0x80) @@ -34,8 +35,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF dest += (byte)(src & 0x80); } } + */ - public void LoadReg_Func(ushort dest, ushort src) + public void LR8_Func(ushort dest, ushort src) { if (dest == DB) { @@ -53,7 +55,31 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } } - public void ShiftRight_Func(ushort src, ushort index) + public void LR8_IO_Func(ushort dest, ushort src) + { + if (dest == DB) + { + // byte storage + Regs[dest] = (ushort)(Regs[src] & 0xFF); + } + else if (dest == W) + { + // mask for status register + Regs[dest] = (ushort)(Regs[src] & 0x1F); + } + else + { + Regs[dest] = Regs[src]; + } + + // update flags + FlagO = false; + FlagC = false; + FlagZ = (Regs[dest] & 0xFF) == 0; + FlagS = Regs[dest] > 127; + } + + public void SR_Func(ushort src, ushort index) { int shft = (Regs[src] >> index) & 0xFF; FlagO = false; @@ -63,7 +89,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[src] = (ushort)shft; } - public void ShiftLeft_Func(ushort src, ushort index) + public void SL_Func(ushort src, ushort index) { int shft = (Regs[src] << index) & 0xFF; FlagO = false; @@ -73,17 +99,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[src] = (ushort)shft; } - public void COM_Func(ushort src) - { - byte b = (byte)Regs[src]; - var r = (byte)~b; - FlagO = false; - FlagC = false; - FlagZ = r == 0; - FlagS = (~r & 0x80) != 0; - Regs[src] = (ushort)r; - } - public void ADD8_Func(ushort dest, ushort src) { int Reg16_d = Regs[dest]; @@ -100,6 +115,104 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[dest] = ans; } + public void ADDS_Func(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) + { + int Reg16_d = Regs[dest_l]; + int Reg16_s = Regs[src_l]; + + Reg16_d += Reg16_s; + + ushort temp = 0; + + // since this is signed addition, calculate the high byte carry appropriately + // note that flags are unaffected by this operation + if (Reg16_s.Bit(7)) + { + if (((Reg16_d & 0xFF) >= Regs[dest_l])) + { + temp = 0xFF; + } + else + { + temp = 0; + } + } + else + { + temp = (ushort)(Reg16_d.Bit(8) ? 1 : 0); + } + + ushort ans_l = (ushort)(Reg16_d & 0xFF); + + Regs[dest_l] = ans_l; + Regs[dest_h] += temp; + Regs[dest_h] &= 0xFF; + } + + public void ADD8D_Func(ushort dest, ushort src) + { + // from MAME f8.cpp (BSD-3) + // https://github.com/mamedev/mame/blob/97b67170277437131adf6ed4d60139c172529e4f/src/devices/cpu/f8/f8.cpp#L264 + byte d = (byte) Regs[dest]; + byte s = (byte) Regs[src]; + byte tmp = (byte)(d + s); + + byte c = 0; // high order carry + byte ic = 0; // low order carry + + if (((d + s) & 0xFF0) > 0xF0) + { + c = 1; + } + + if ((d & 0x0F) + (s & 0x0F) > 0x0F) + { + ic = 1; + } + + // binary addition performed and flags set accordingly + int Reg16_d = Regs[dest]; + Reg16_d += Regs[src]; + ushort ans = (ushort)(Reg16_d & 0xFF); + + FlagC = tmp.Bit(8); + FlagZ = (tmp & 0xFF) == 0; + + FlagO = (Regs[dest].Bit(7) == Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + FlagS = ans > 127; + + if (c == 0 && ic == 0) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + if (c == 0 && ic == 1) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + (tmp & 0x0f)); + } + + if (c == 1 && ic == 0) + { + tmp = (byte)((tmp & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + Regs[dest] = tmp; + } + + public void SUB8_Func(ushort dest, ushort src) + { + int Reg16_d = Regs[dest]; + Reg16_d -= Regs[src]; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + FlagS = ans > 127; + } + public void INC8_Func(ushort src) { int Reg16_d = Regs[src]; @@ -116,6 +229,74 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF FlagO = Regs[src] == 0x80; } + public void AND8_Func(ushort dest, ushort src) + { + Regs[dest] = (ushort)(Regs[dest] & Regs[src]); + + FlagZ = Regs[dest] == 0; + FlagC = false; + FlagO = false; + FlagS = Regs[dest] > 127; + } + + public void OR8_Func(ushort dest, ushort src) + { + Regs[dest] = (ushort)(Regs[dest] | Regs[src]); + FlagZ = Regs[dest] == 0; + FlagC = false; + FlagO = false; + FlagS = Regs[dest] > 127; + } + + public void XOR8_Func(ushort dest, ushort src) + { + Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + FlagZ = Regs[dest] == 0; + FlagC = false; + FlagO = false; + FlagS = Regs[dest] > 127; + } + + public void XOR8C_Func(ushort dest, ushort src) + { + // TODO + Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + FlagZ = Regs[dest] == 0; + FlagC = false; + FlagO = false; + FlagS = Regs[dest] > 127; + } + + /* + * + * public void COM_Func(ushort src) + { + byte b = (byte)Regs[src]; + var r = (byte)~b; + FlagO = false; + FlagC = false; + FlagZ = r == 0; + FlagS = (~r & 0x80) != 0; + Regs[src] = (ushort)r; + } + */ + + public void IN_Func(ushort dest, ushort src) + { + Regs[dest] = ReadHardware(Regs[src]); + + FlagZ = Regs[dest] == 0; + FlagO = false; + FlagC = false; + FlagS = Regs[dest].Bit(7); + } + + public void OUT_Func(ushort dest, ushort src) + { + WriteHardware(Regs[dest], (byte) Regs[src]); + } + + public void Read_Func(ushort dest, ushort src) { Regs[dest] = Regs[src]; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs index 5dffa31a5e..ae058d262f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -14,127 +14,79 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// public sealed partial class F3850 { - /// - /// Accumulator - /// - public ushort A = 0; - /// - /// Status Register - /// - public ushort W = 1; - /// - /// Indirect Scratchpad Address Register - /// (6bit) - /// - public ushort ISAR = 2; - /// - /// Primary Program Counter (low byte) - /// - public ushort PC0l = 3; - /// - /// Primary Program Counter (high byte) - /// - public ushort PC0h = 4; - /// - /// Backup Program Counter (low byte) - /// - public ushort PC1l = 5; - /// - /// Backup Program Counter (high byte) - /// - public ushort PC1h = 6; - /// - /// Data Counter (low byte) - /// - public ushort DC0l = 7; - /// - /// Data counter (high byte) - /// - public ushort DC0h = 8; - /// - /// Temporary Arithmetic Storage - /// - public ushort ALU = 9; - /// - /// Data Bus - /// - public ushort DB = 10; - /// - /// IO Bus - /// - public ushort IO = 11; - /// /// Registers (counters and scratchpad) /// public ushort[] Regs = new ushort[100]; - // scratchpad registers - public ushort SR0 = 20; - public ushort SR1 = 21; - public ushort SR2 = 22; - public ushort SR3 = 23; - public ushort SR4 = 24; - public ushort SR5 = 25; - public ushort SR6 = 26; - public ushort SR7 = 27; - public ushort SR8 = 28; - public ushort SR9 = 29; - public ushort SR10 = 30; - public ushort SR11 = 31; - public ushort SR12 = 32; - public ushort SR13 = 33; - public ushort SR14 = 34; - public ushort SR15 = 35; - public ushort SR16 = 36; - public ushort SR17 = 37; - public ushort SR18 = 38; - public ushort SR19 = 39; - public ushort SR20 = 40; - public ushort SR21 = 41; - public ushort SR22 = 42; - public ushort SR23 = 43; - public ushort SR24 = 44; - public ushort SR25 = 45; - public ushort SR26 = 46; - public ushort SR27 = 47; - public ushort SR28 = 48; - public ushort SR29 = 49; - public ushort SR30 = 50; - public ushort SR31 = 51; - public ushort SR32 = 52; - public ushort SR33 = 53; - public ushort SR34 = 54; - public ushort SR35 = 55; - public ushort SR36 = 56; - public ushort SR37 = 57; - public ushort SR38 = 58; - public ushort SR39 = 59; - public ushort SR40 = 60; - public ushort SR41 = 61; - public ushort SR42 = 62; - public ushort SR43 = 63; - public ushort SR44 = 64; - public ushort SR45 = 65; - public ushort SR46 = 66; - public ushort SR47 = 67; - public ushort SR48 = 68; - public ushort SR49 = 69; - public ushort SR50 = 70; - public ushort SR51 = 71; - public ushort SR52 = 72; - public ushort SR53 = 73; - public ushort SR54 = 74; - public ushort SR55 = 75; - public ushort SR56 = 76; - public ushort SR57 = 77; - public ushort SR58 = 78; - public ushort SR59 = 79; - public ushort SR60 = 80; - public ushort SR61 = 81; - public ushort SR62 = 82; - public ushort SR63 = 83; - public ushort SR64 = 84; + // scratchpad registers live in Regs 0-64 + public ushort J = 9; + public ushort Hh = 10; + public ushort Hl = 11; + public ushort Kh = 12; + public ushort Kl = 13; + public ushort Qh = 14; + public ushort Ql = 15; + + // Internal CPU counters kept after the scratchpad for ease of implementation + /// + /// Accumulator + /// + public ushort A = 65; + /// + /// Status Register + /// + public ushort W = 66; + /// + /// Indirect Scratchpad Address Register + /// (6bit) + /// + public ushort ISAR = 67; + /// + /// Primary Program Counter (high byte) + /// + public ushort PC0h = 68; + /// + /// Primary Program Counter (low byte) + /// + public ushort PC0l = 69; + /// + /// Backup Program Counter (high byte) + /// + public ushort PC1h = 70; + /// + /// Backup Program Counter (low byte) + /// + public ushort PC1l = 71; + /// + /// Data counter (high byte) + /// + public ushort DC0h = 72; + /// + /// Data Counter (low byte) + /// + public ushort DC0l = 73; + /// + /// Temporary Arithmetic Storage + /// + public ushort ALU = 74; + /// + /// Data Bus + /// + public ushort DB = 75; + /// + /// IO Bus/Latch + /// + public ushort IO = 76; + /// + /// 0x00 value for arithmetic ops + /// + public ushort ZERO = 77; + /// + /// 0xff value for arithmetic ops + /// + public ushort BYTE = 78; + /// /// Status Register - Sign Flag @@ -226,6 +178,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { Regs[i] = 0; } + + Regs[BYTE] = 0xff; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs index d6a1f5fbf0..aef0ad6a51 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_KU() { PopulateCURINSTR( - OP_LR_8, A, SR12, // S + OP_LR8, A, Kh, // S ROMC_00_S, IDLE, END); @@ -25,7 +25,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_KL() { PopulateCURINSTR( - OP_LR_8, A, SR13, // S + OP_LR8, A, Kl, // S ROMC_00_S, IDLE, END); @@ -34,7 +34,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_QU() { PopulateCURINSTR( - OP_LR_8, A, SR14, // S + OP_LR8, A, Qh, // S ROMC_00_S, IDLE, END); @@ -43,7 +43,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_QL() { PopulateCURINSTR( - OP_LR_8, A, SR15, // S + OP_LR8, A, Ql, // S ROMC_00_S, IDLE, END); @@ -52,7 +52,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_KU_A() { PopulateCURINSTR( - OP_LR_8, SR12, A, // S + OP_LR8, Kh, A, // S ROMC_00_S, IDLE, END); @@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_KL_A() { PopulateCURINSTR( - OP_LR_8, SR13, A, // S + OP_LR8, Kl, A, // S ROMC_00_S, IDLE, END); @@ -70,7 +70,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_QU_A() { PopulateCURINSTR( - OP_LR_8, SR14, A, // S + OP_LR8, Qh, A, // S ROMC_00_S, IDLE, END); @@ -79,7 +79,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_QL_A() { PopulateCURINSTR( - OP_LR_8, SR15, A, // S + OP_LR8, Ql, A, // S ROMC_00_S, IDLE, END); @@ -91,13 +91,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_07, // L IDLE, IDLE, - OP_LR_8, SR12, DB, + OP_LR8, Kh, DB, IDLE, IDLE, ROMC_0B, // L IDLE, IDLE, - OP_LR_8, SR13, DB, + OP_LR8, Kl, DB, IDLE, IDLE, ROMC_00_S, // S @@ -109,13 +109,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_P_K() { PopulateCURINSTR( - OP_LR_8, DB, SR12, // L + OP_LR8, DB, Kh, // L IDLE, IDLE, ROMC_15, IDLE, IDLE, - OP_LR_8, DB, SR13, // L + OP_LR8, DB, Kl, // L IDLE, IDLE, ROMC_18, @@ -130,7 +130,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_IS() { PopulateCURINSTR( - OP_LR_8, A, ISAR, // S + OP_LR8, A, ISAR, // S ROMC_00_S, IDLE, END); @@ -139,7 +139,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_IS_A() { PopulateCURINSTR( - OP_LR_8, ISAR, A, // S + OP_LR8, ISAR, A, // S ROMC_00_S, IDLE, END); @@ -148,13 +148,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_PK() { PopulateCURINSTR( - OP_LR_8, DB, SR13, // L + OP_LR8, DB, Kh, // L IDLE, IDLE, ROMC_12, IDLE, IDLE, - OP_LR_8, DB, SR12, // L + OP_LR8, DB, Kl, // L IDLE, IDLE, ROMC_14, @@ -169,13 +169,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_P0_Q() { PopulateCURINSTR( - OP_LR_8, DB, SR15, // L + OP_LR8, DB, Ql, // L IDLE, IDLE, ROMC_17, IDLE, IDLE, - OP_LR_8, DB, SR14, // L + OP_LR8, DB, Qh, // L IDLE, IDLE, ROMC_14, @@ -193,13 +193,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_06, // L IDLE, IDLE, - OP_LR_8, SR14, DB, + OP_LR8, Qh, DB, IDLE, IDLE, ROMC_09, // L IDLE, IDLE, - OP_LR_8, SR15, DB, + OP_LR8, Ql, DB, IDLE, IDLE, ROMC_00_S, // S @@ -211,13 +211,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_DC_Q() { PopulateCURINSTR( - OP_LR_8, DB, SR14, // L + OP_LR8, DB, Qh, // L IDLE, IDLE, ROMC_16, IDLE, IDLE, - OP_LR_8, DB, SR15, // L + OP_LR8, DB, Ql, // L IDLE, IDLE, ROMC_19, @@ -232,13 +232,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_DC_H() { PopulateCURINSTR( - OP_LR_8, DB, SR10, // L + OP_LR8, DB, Hh, // L IDLE, IDLE, ROMC_16, IDLE, IDLE, - OP_LR_8, DB, SR11, // L + OP_LR8, DB, Hl, // L IDLE, IDLE, ROMC_19, @@ -256,13 +256,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_06, // L IDLE, IDLE, - OP_LR_8, SR10, DB, + OP_LR8, Hh, DB, IDLE, IDLE, ROMC_09, // L IDLE, IDLE, - OP_LR_8, SR11, DB, + OP_LR8, Hl, DB, IDLE, IDLE, ROMC_00_S, // S @@ -295,7 +295,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_02, // L IDLE, IDLE, - OP_LR_8, DB, A, + OP_LR8, DB, A, IDLE, IDLE, ROMC_00_S, // S @@ -307,7 +307,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ST() { PopulateCURINSTR( - OP_LR_8, DB, A, // L + OP_LR8, DB, A, // L IDLE, IDLE, ROMC_05, @@ -322,7 +322,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void COM() { PopulateCURINSTR( - OP_COM, // S + OP_XOR8C, A, DB, // S ROMC_00_S, IDLE, END); @@ -381,7 +381,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF PopulateCURINSTR( ROMC_1C_S, // S IDLE, - OP_LR_8, W, SR9, + OP_LR8, W, J, IDLE, ROMC_00_S, // S IDLE, @@ -392,7 +392,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_J_W() { PopulateCURINSTR( - OP_LR_8, SR9, W, // S + OP_LR8, J, W, // S ROMC_00_S, IDLE, END); @@ -407,6 +407,96 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } + private void LI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_LR8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void NI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_AND8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void OI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_OR8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void XI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_XOR8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void AI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_ADD8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void CI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_CI, A, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + private void ILLEGAL() { @@ -416,5 +506,655 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, END); } + + private void IN() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_1B, // L + IDLE, + IDLE, + OP_LR8_IO, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void OUT() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_LR8, DB, A, + IDLE, + IDLE, + ROMC_1A, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void PI() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_LR8, A, DB, + IDLE, + IDLE, + ROMC_0D, // S + IDLE, + IDLE, + IDLE, + ROMC_0C, // L + IDLE, + IDLE, + OP_LR8, DB, A, + IDLE, + IDLE, + ROMC_14, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void JMP() + { + PopulateCURINSTR( + ROMC_03_L, // L + IDLE, + IDLE, + OP_LR8, A, DB, + IDLE, + IDLE, + ROMC_0C, // L + IDLE, + IDLE, + OP_LR8, DB, A, + IDLE, + IDLE, + ROMC_14, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void DCI() + { + PopulateCURINSTR( + ROMC_11, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_03_S, // S + IDLE, + IDLE, + IDLE, + ROMC_0E, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_03_S, // S + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void NOP() + { + PopulateCURINSTR( + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void XDC() + { + PopulateCURINSTR( + ROMC_1D, // S + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void DS(ushort rIndex) + { + PopulateCURINSTR( + OP_LR8, rIndex, BYTE, // L + IDLE, + ROMC_00_L, + IDLE, + IDLE, + END); + } + private void DS_ISAR() + { + PopulateCURINSTR( + OP_DS_IS, // L + IDLE, + ROMC_00_L, + IDLE, + IDLE, + END); + } + + private void DS_ISAR_INC() + { + PopulateCURINSTR( + OP_DS_IS, // L + OP_IS_INC, + ROMC_00_L, + IDLE, + IDLE, + END); + } + + private void DS_ISAR_DEC() + { + PopulateCURINSTR( + OP_DS_IS, // L + OP_IS_DEC, + ROMC_00_L, + IDLE, + IDLE, + END); + } + + private void LR_A_R(ushort rIndex) + { + PopulateCURINSTR( + OP_LR8, A, rIndex, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_A_ISAR() + { + PopulateCURINSTR( + OP_LR_A_IS, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_A_ISAR_INC() + { + PopulateCURINSTR( + OP_LR_A_IS, A, // S + OP_IS_INC, + ROMC_00_S, + END); + } + + private void LR_A_ISAR_DEC() + { + PopulateCURINSTR( + OP_LR_A_IS, A, // S + OP_IS_DEC, + ROMC_00_S, + END); + } + + private void LR_R_A(ushort rIndex) + { + PopulateCURINSTR( + OP_LR8, rIndex, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_ISAR_A() + { + PopulateCURINSTR( + OP_LR_IS_A, A, // S + ROMC_00_S, + IDLE, + END); + } + + private void LR_ISAR_A_INC() + { + PopulateCURINSTR( + OP_LR_IS_A, A, // S + OP_IS_INC, + ROMC_00_S, + END); + } + + private void LR_ISAR_A_DEC() + { + PopulateCURINSTR( + OP_LR_IS_A, A, // S + OP_IS_DEC, + ROMC_00_S, + END); + } + + private void LISU(ushort octal) + { + PopulateCURINSTR( + OP_LISU, octal, // S + ROMC_00_S, + IDLE, + END); + } + + private void LISL(ushort octal) + { + PopulateCURINSTR( + OP_LISL, octal, // S + ROMC_00_S, + IDLE, + END); + } + + private void LIS(ushort index) + { + PopulateCURINSTR( + OP_LR8, A, index, // S + ROMC_00_S, + IDLE, + END); + } + + private void BT(ushort index) + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + IDLE, + OP_BT, index); // no END as there is branching logic within OP_BT + } + + private void AM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_ADD8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void AMD() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_ADD8D, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void NM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_AND8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void OM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_OR8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void XM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_XOR8, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void CM() + { + PopulateCURINSTR( + ROMC_02, // L + IDLE, + IDLE, + OP_CM, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void ADC() + { + PopulateCURINSTR( + OP_LR8, DB, A, // L + IDLE, + IDLE, + ROMC_0A, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void BR7() + { + PopulateCURINSTR( + OP_BR7); // no END as there is branching logic within OP_BR7 + } + + private void BF(ushort index) + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + IDLE, + OP_BF, index); // no END as there is branching logic within OP_BF + } + + private void INS_0(ushort index) + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_IN, A, index, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void INS_1(ushort index) + { + PopulateCURINSTR( + ROMC_1C_L, // L + IDLE, + IDLE, + OP_LR8, IO, index, + IDLE, + IDLE, + ROMC_1B, // L + IDLE, + IDLE, + OP_LR8_IO, A, DB, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void OUTS_0(ushort index) + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_OUT, index, A, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void OUTS_1(ushort index) + { + PopulateCURINSTR( + ROMC_1C_L, // L + IDLE, + IDLE, + OP_LR8, IO, index, + OP_LR8, DB, A, + IDLE, + ROMC_1A, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void AS(ushort rIndex) + { + PopulateCURINSTR( + OP_ADD8, A, rIndex, // S + ROMC_00_S, + IDLE, + END); + } + + private void AS_IS() + { + PopulateCURINSTR( + OP_AS_IS, // S + ROMC_00_S, + IDLE, + END); + } + + private void AS_IS_INC() + { + PopulateCURINSTR( + OP_AS_IS, // S + OP_IS_INC, + ROMC_00_S, + END); + } + + private void AS_IS_DEC() + { + PopulateCURINSTR( + OP_AS_IS, // S + OP_IS_DEC, + ROMC_00_S, + END); + } + + private void ASD(ushort rIndex) + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_ADD8D, A, rIndex, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void ASD_IS() + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_ASD_IS, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void ASD_IS_INC() + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_ASD_IS, + OP_IS_INC, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void ASD_IS_DEC() + { + PopulateCURINSTR( + ROMC_1C_S, // S + IDLE, + OP_ASD_IS, + OP_IS_DEC, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + + private void XS(ushort rIndex) + { + PopulateCURINSTR( + OP_XOR8, A, rIndex, // S + ROMC_00_S, + IDLE, + END); + } + + private void XS_IS() + { + PopulateCURINSTR( + OP_XS_IS, // S + ROMC_00_S, + IDLE, + END); + } + + private void XS_IS_INC() + { + PopulateCURINSTR( + OP_XS_IS, // S + OP_IS_INC, + ROMC_00_S, + END); + } + + private void XS_IS_DEC() + { + PopulateCURINSTR( + OP_XS_IS, // S + OP_IS_DEC, + ROMC_00_S, + END); + } + + private void NS(ushort rIndex) + { + PopulateCURINSTR( + OP_AND8, A, rIndex, // S + ROMC_00_S, + IDLE, + END); + } + + private void NS_IS() + { + PopulateCURINSTR( + OP_NS_IS, // S + ROMC_00_S, + IDLE, + END); + } + + private void NS_IS_INC() + { + PopulateCURINSTR( + OP_NS_IS, // S + OP_IS_INC, + ROMC_00_S, + END); + } + + private void NS_IS_DEC() + { + PopulateCURINSTR( + OP_NS_IS, // S + OP_IS_DEC, + ROMC_00_S, + END); + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index 217463a018..013a0abc47 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using BizHawk.Common; +using BizHawk.Common.NumberExtensions; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Consoles.ChannelF @@ -82,14 +84,38 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort IDLE = 0; public const ushort END = 51; - public const ushort OP_LR_8 = 100; + public const ushort OP_LR8 = 100; public const ushort OP_SHFT_R = 101; public const ushort OP_SHFT_L = 102; - public const ushort OP_COM = 103; - public const ushort OP_LNK = 104; - public const ushort OP_DI = 105; - public const ushort OP_EI = 106; - public const ushort OP_INC8 = 107; + public const ushort OP_LNK = 103; + public const ushort OP_DI = 104; + public const ushort OP_EI = 105; + public const ushort OP_INC8 = 106; + public const ushort OP_AND8 = 107; + public const ushort OP_OR8 = 108; + public const ushort OP_XOR8 = 109; + public const ushort OP_XOR8C = 110; + public const ushort OP_ADD8 = 111; + public const ushort OP_CI = 112; + public const ushort OP_LR8_IO = 113; + public const ushort OP_DS_IS = 114; + public const ushort OP_IS_INC = 115; + public const ushort OP_IS_DEC = 116; + public const ushort OP_LR_A_IS = 117; + public const ushort OP_LR_IS_A = 118; + public const ushort OP_LISU = 119; + public const ushort OP_LISL = 120; + public const ushort OP_BT = 121; + public const ushort OP_ADD8D = 122; + public const ushort OP_CM = 123; + public const ushort OP_BR7 = 124; + public const ushort OP_BF = 125; + public const ushort OP_IN = 126; + public const ushort OP_OUT = 127; + public const ushort OP_AS_IS = 128; + public const ushort OP_ASD_IS = 129; + public const ushort OP_XS_IS = 130; + public const ushort OP_NS_IS = 131; public F3850() @@ -104,14 +130,17 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF instr_pntr = 0; PopulateCURINSTR( - ROMC_08, // S + ROMC_1C_S, // S + IDLE, + IDLE, + IDLE, + ROMC_08, // L IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, - IDLE, + ROMC_00_S, // S IDLE, IDLE, END); @@ -160,7 +189,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { // always the last tick within an opcode instruction cycle case END: - opcode = databus; + OnExecFetch?.Invoke(RegPC0); + TraceCallback?.Invoke(State()); + opcode = (byte)Regs[DB]; instr_pntr = 0; FetchInstruction(); break; @@ -170,23 +201,28 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; // load one register into another (or databus) - case OP_LR_8: - LoadReg_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + case OP_LR8: + LR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // Shift register n bit positions to the right (zero fill) case OP_SHFT_R: - ShiftRight_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + SR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // Shift register n bit positions to the left (zero fill) case OP_SHFT_L: - ShiftLeft_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + SL_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - // A <- A ^ 255 - case OP_COM: - COM_Func(A); + // x <- (x) ADD y + case OP_ADD8: + ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // x <- (x) ADD y (decimal) + case OP_ADD8D: + ADD8D_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // A <- (A) + (C) @@ -194,18 +230,222 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ADD8_Func(Regs[A], (ushort)(FlagC ? 1 : 0)); break; + // Clear ICB status bit case OP_DI: FlagICB = false; break; + // Set ICB status bit case OP_EI: FlagICB = true; break; + // x <- (y) XOR DB + case OP_XOR8: + XOR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // x <- (y) XOR DB (complement accumulator) + case OP_XOR8C: + XOR8C_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // x <- (x) + 1 case OP_INC8: INC8_Func(cur_instr[instr_pntr++]); break; + // x <- (y) & DB + case OP_AND8: + AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // x <- (y) | DB + case OP_OR8: + OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // DB + (x) + 1 (modify flags without saving result) + case OP_CI: + var tmpX = cur_instr[instr_pntr++]; + var tmpOperand = Regs[DB]; + INC8_Func(tmpX); + ADD8_Func(tmpOperand, tmpX); + break; + + // load one register into another (or databus) + // ALU also runs flag status checking + case OP_LR8_IO: + LR8_IO_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // DS op performed indirectly on the ScratchPad register pointed to by the ISAR + case OP_DS_IS: + LR8_Func(Regs[ISAR], Regs[BYTE]); + break; + + // ISAR is incremented + case OP_IS_INC: + Regs[ISAR] = (ushort)((Regs[ISAR]& 0x38) | ((Regs[ISAR] + 1) & 0x07)); + break; + + // ISAR is decremented + case OP_IS_DEC: + Regs[ISAR] = (ushort)((Regs[ISAR] & 0x38) | ((Regs[ISAR] - 1) & 0x07)); + break; + + // x <- (SR) (as pointed to by ISAR) + case OP_LR_A_IS: + LR8_Func(cur_instr[instr_pntr++], Regs[ISAR]); + break; + + // x <- (SR) (as pointed to by ISAR) + case OP_LR_IS_A: + LR8_Func(Regs[ISAR], cur_instr[instr_pntr++]); + break; + + // set the upper octal ISAR bits (b3,b4,b5) + case OP_LISU: + var isVala = (Regs[ISAR] & 0x07) | cur_instr[instr_pntr++]; + Regs[ISAR] = (ushort)(isVala & 0x3F); + break; + + // set the lower octal ISAR bits (b0,b1,b2) + case OP_LISL: + var isValb = (Regs[ISAR] & 0x38) | cur_instr[instr_pntr++]; + Regs[ISAR] = (ushort)(isValb & 0x3F); + break; + + // test operand against status register + case OP_BT: + instr_pntr = 0; + if ((Regs[W] & cur_instr[instr_pntr++]) != 0) + { + PopulateCURINSTR( + ROMC_01, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + else + { + PopulateCURINSTR( + ROMC_03_S, // S + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + break; + + // DC0 - A - set status only + case OP_CM: + var tmpDB = Regs[DB]; + var tmpA = Regs[A]; + SUB8_Func(tmpDB, tmpA); + break; + + // Branch based on ISARL + case OP_BR7: + instr_pntr = 0; + if ((Regs[ISAR] & 7) == 7) + { + PopulateCURINSTR( + ROMC_03_S, // S + //IDLE, <- lose a cycle that was stolen in the table + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + else + { + PopulateCURINSTR( + ROMC_01, // L + //IDLE, <- lose a cycle that was stolen in the table + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + break; + + // PC0 <- PC0+n+1 + case OP_BF: + instr_pntr = 0; + if ((Regs[W] & cur_instr[instr_pntr++]) != 0) + { + PopulateCURINSTR( + ROMC_03_S, // S + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + else + { + PopulateCURINSTR( + ROMC_01, // L + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + ROMC_00_S, // S + IDLE, + IDLE, + END); + } + break; + + // A <- (I/O Port 0 or 1) + case OP_IN: + IN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // I/O Port 0 or 1 <- (A) + case OP_OUT: + OUT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // Add the content of the SR register addressed by ISAR to A (Binary) + case OP_AS_IS: + ADD8_Func(A, Regs[ISAR]); + break; + + // Add the content of the SR register addressed by ISAR to A (Decimal) + case OP_ASD_IS: + ADD8D_Func(A, Regs[ISAR]); + break; + + // XOR the content of the SR register addressed by ISAR to A + case OP_XS_IS: + XOR8_Func(A, Regs[ISAR]); + break; + + // AND the content of the SR register addressed by ISAR to A + case OP_NS_IS: + AND8_Func(A, Regs[ISAR]); + break; + // instruction fetch @@ -213,7 +453,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // then all devices increments the content of PC0. // CYCLE LENGTH: S case ROMC_00_S: - databus = ReadMemory(RegPC0++); + Regs[DB] = ReadMemory(RegPC0++); break; // instruction fetch @@ -221,36 +461,36 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // then all devices increments the content of PC0. // CYCLE LENGTH: L case ROMC_00_L: - databus = ReadMemory(RegPC0++); + Regs[DB] = ReadMemory(RegPC0++); break; // The device whose address space includes the contents of the PC0 register must place on the data bus the contents of the memory location // addressed by by PC0; then all devices add the 8-bit value on the data bus, as a signed binary number, to PC0 // CYCLE LENGTH: L case ROMC_01: - databus = ReadMemory(RegPC0); - IncrementBySignedByte(RegPC0, databus); + Regs[DB] = ReadMemory(RegPC0); + ADDS_Func(PC0l, PC0h, DB, ZERO); break; // The device whose DC0 address addresses a memory word within the address space of that device must place on the data bus the contents // of the memory location addressed by DC0; then all devices increment DC0 // CYCLE LENGTH: L case ROMC_02: - databus = ReadMemory(RegDC0++); + Regs[DB] = ReadMemory(RegDC0++); break; // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches // CYCLE LENGTH: S case ROMC_03_S: - databus = ReadMemory(RegPC0++); - iobus = databus; + Regs[DB] = ReadMemory(RegPC0++); + Regs[IO] = Regs[DB]; break; // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches // CYCLE LENGTH: L case ROMC_03_L: - databus = ReadMemory(RegPC0++); - iobus = databus; + Regs[DB] = ReadMemory(RegPC0++); + Regs[IO] = Regs[DB]; break; // Copy the contents of PC1 into PC0 @@ -262,19 +502,19 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Store the data bus contents into the memory location pointed to by DC0; increment DC0 // CYCLE LENGTH: L case ROMC_05: - WriteMemory(RegDC0++, databus); + WriteMemory(RegDC0++, (byte)Regs[DB]); break; // Place the high order byte of DC0 on the data bus // CYCLE LENGTH: L case ROMC_06: - databus = (byte)Regs[DC0h]; + Regs[DB] = (byte)Regs[DC0h]; break; // Place the high order byte of PC1 on the data bus // CYCLE LENGTH: L case ROMC_07: - databus = (byte)Regs[PC1h]; + Regs[DB] = (byte)Regs[PC1h]; break; // All devices copy the contents of PC0 into PC1. The CPU outputs zero on the data bus in this ROMC state. @@ -282,7 +522,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // CYCLE LENGTH: L case ROMC_08: RegPC1 = RegPC0; - databus = 0; + Regs[DB] = 0; Regs[PC0h] = 0; Regs[PC0l] = 0; break; @@ -290,27 +530,27 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // The device whose address space includes the contents of the DC0 register must place the low order byte of DC0 onto the data bus // CYCLE LENGTH: L case ROMC_09: - databus = (byte)Regs[DC0l]; + Regs[DB] = (byte)Regs[DC0l]; break; // All devices add the 8-bit value on the data bus, treated as a signed binary number, to the data counter // CYCLE LENGTH: L case ROMC_0A: - IncrementBySignedByte(RegDC0, databus); + ADDS_Func(DC0l, DC0h, DB, ZERO); break; // The device whose address space includes the value in PC1 must place the low order byte of PC1 on the data bus // CYCLE LENGTH: L case ROMC_0B: - databus = (byte)Regs[PC1l]; + Regs[DB] = (byte)Regs[PC1l]; break; // The device whose address space includes the contents of the PC0 register must place the contents of the memory word addressed by PC0 // onto the data bus; then all devices move the value that has just been placed on the data bus into the low order byte of PC0 // CYCLE LENGTH: L case ROMC_0C: - databus = ReadMemory(RegPC0); - Regs[PC0l] = databus; + Regs[DB] = ReadMemory(RegPC0); + Regs[PC0l] = Regs[DB]; break; // All devices store in PC1 the current contents of PC0, incremented by 1; PC1 is unaltered @@ -323,8 +563,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // The value on the data bus is then moved to the low order byte of DC0 by all devices // CYCLE LENGTH: L case ROMC_0E: - databus = ReadMemory(RegPC0); - Regs[DC0l] = databus; + Regs[DB] = ReadMemory(RegPC0); + Regs[DC0l] = Regs[DB]; break; // The interrupting device with the highest priority must place the low order byte of the interrupt vector on the data bus. @@ -332,27 +572,25 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // CYCLE LENGTH: L case ROMC_0F: throw new NotImplementedException("ROMC 0x0F not implemented"); - break; // Inhibit any modification to the interrupt priority logic // CYCLE LENGTH: L case ROMC_10: throw new NotImplementedException("ROMC 0x10 not implemented"); - break; // The device whose memory space includes the contents of PC0 must place the contents of the addressed memory word on the data bus. // All devices must then move the contents of the data bus to the upper byte of DC0 // CYCLE LENGTH: L case ROMC_11: - databus = ReadMemory(RegPC0); - Regs[DC0h] = databus; + Regs[DB] = ReadMemory(RegPC0); + Regs[DC0h] = Regs[DB]; break; // All devices copy the contents of PC0 into PC1. All devices then move the contents of the data bus into the low order byte of PC0 // CYCLE LENGTH: L case ROMC_12: RegPC1 = RegPC0; - Regs[PC0l] = databus; + Regs[PC0l] = Regs[DB]; break; // The interrupting device with the highest priority must move the high order half of the interrupt vector onto the data bus. @@ -361,49 +599,48 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // CYCLE LENGTH: L case ROMC_13: throw new NotImplementedException("ROMC 0x13 not implemented"); - break; // All devices move the contents of the data bus into the high order byte of PC0 // CYCLE LENGTH: L case ROMC_14: - Regs[PC0h] = databus; + Regs[PC0h] = Regs[DB]; break; // All devices move the contents of the data bus into the high order byte of PC1 // CYCLE LENGTH: L case ROMC_15: - Regs[PC1h] = databus; + Regs[PC1h] = Regs[DB]; break; // All devices move the contents of the data bus into the high order byte of DC0 // CYCLE LENGTH: L case ROMC_16: - Regs[DC0h] = databus; + Regs[DC0h] = Regs[DB]; break; // All devices move the contents of the data bus into the low order byte of PC0 // CYCLE LENGTH: L case ROMC_17: - Regs[PC0l] = databus; + Regs[PC0l] = Regs[DB]; break; // All devices move the contents of the data bus into the low order byte of PC1 // CYCLE LENGTH: L case ROMC_18: - Regs[PC1l] = databus; + Regs[PC1l] = Regs[DB]; break; // All devices move the contents of the data bus into the low order byte of DC0 // CYCLE LENGTH: L case ROMC_19: - Regs[DC0l] = databus; + Regs[DC0l] = Regs[DB]; break; // During the prior cycle, an I/O port timer or interrupt control register was addressed; the device containing the addressed // port must move the current contents of the data bus into the addressed port // CYCLE LENGTH: L case ROMC_1A: - WriteHardware(iobus, databus); + WriteHardware(Regs[IO], (byte)Regs[DB]); break; // During the prior cycle, the data bus specified the address of an I/O port. The device containing the addressed I/O port @@ -411,7 +648,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // registers cannot be read back onto the data bus) // CYCLE LENGTH: L case ROMC_1B: - databus = ReadHardware(iobus); + Regs[DB] = ReadHardware(Regs[IO]); break; // None @@ -433,19 +670,71 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // The device whose address space includes the contents of PC0 must place the low order byte of PC0 onto the data bus // CYCLE LENGTH: L case ROMC_1E: - databus = (byte)Regs[PC0l]; + Regs[DB] = (byte)Regs[PC0l]; break; // The device whose address space includes the contents of PC0 must place the high order byte of PC0 onto the data bus // CYCLE LENGTH: L case ROMC_1F: - databus = (byte)Regs[PC0h]; + Regs[DB] = (byte)Regs[PC0h]; break; } TotalExecutedCycles++; } + public Action TraceCallback; + + public string TraceHeader => "F3850: PC, machine code, mnemonic, operands, registers (R0, R1, R2, R3, R4, R5, R6, R7, R8, J, HU, HL, KU, KL, QU, QL, Cy), flags (IOZCS)"; + + public TraceInfo State(bool disassemble = true) + { + int bytes_read = 0; + string disasm = disassemble ? Disassemble(RegPC0, ReadMemory, out bytes_read) : "---"; + string byte_code = null; + + for (ushort i = 0; i < bytes_read; i++) + { + byte_code += ReadMemory((ushort)(RegPC0 + i)).ToHexString(2); + if (i < (bytes_read - 1)) + { + byte_code += " "; + } + } + + return new TraceInfo + { + Disassembly = string.Format( + "{0:X4}: {1} {2}", + RegPC0, + byte_code.PadRight(12), + disasm.PadRight(26)), + RegisterInfo = string.Format( + "R0:{0:X2} R1:{1:X2} R2:{2:X2} R3:{3:X2} R4:{4:X2} R5:{5:X2} R6:{6:X2} R7:{7:X2} R8:{8:X2} J:{9:X2} HU:{10:X2} HL:{11:X2} KU:{12:X2} KL:{13:X2} QU:{14:X2} QL:{15:X2} Cy:{16} {17}{18}{19}{20}{21}", + Regs[0], + Regs[1], + Regs[2], + Regs[3], + Regs[4], + Regs[5], + Regs[6], + Regs[7], + Regs[8], + Regs[J], + Regs[Hh], + Regs[Hl], + Regs[Kh], + Regs[Kl], + Regs[Qh], + Regs[Ql], + TotalExecutedCycles, + FlagICB ? "I" : "i", + FlagO ? "O" : "o", + FlagZ ? "Z" : "z", + FlagC ? "C" : "c", + FlagS ? "S" : "s") + }; + } /// /// Optimization method to set cur_instr @@ -473,7 +762,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public void SyncState(Serializer ser) { ser.BeginSection(nameof(F3850)); - + ser.Sync(nameof(Regs), ref Regs, false); + ser.Sync(nameof(cur_instr), ref cur_instr, false); ser.EndSection(); } } From 7915ec8bc10989c61b469909ecaf6a988793cf8b Mon Sep 17 00:00:00 2001 From: vadosnaprimer Date: Thu, 18 Apr 2019 19:11:27 +0300 Subject: [PATCH 022/138] tsm decay: try to work around some more removal bugs --- BizHawk.Client.Common/movie/tasproj/StateManagerDecay.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.Common/movie/tasproj/StateManagerDecay.cs b/BizHawk.Client.Common/movie/tasproj/StateManagerDecay.cs index 4d551f86e6..f7b3130881 100644 --- a/BizHawk.Client.Common/movie/tasproj/StateManagerDecay.cs +++ b/BizHawk.Client.Common/movie/tasproj/StateManagerDecay.cs @@ -156,6 +156,8 @@ namespace BizHawk.Client.Common backwardFrame = currentFrame; } } + + int decayStatesLast = decayStates; if (forwardFrame > -1 && backwardFrame > -1) { @@ -192,10 +194,11 @@ namespace BizHawk.Client.Common decayStates--; } } - else - { + // we're very sorry about failing to find states to remove, but we can't go beyond capacity, so remove at least something // this shouldn't happen, but if we don't do it here, nothing good will happen either + if (decayStatesLast == decayStates) + { if (_tsm.RemoveState(_tsm.GetStateFrameByIndex(1))) { // decrementing this if no state was removed is BAD From ab020cfad279253fd04246b9be373a737b7998d8 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sat, 20 Apr 2019 14:52:32 -0400 Subject: [PATCH 023/138] fix crash disposing unavailable pipelines (was already done in GL display method but not d3d.) fixes #1546 without walls of text discussion and KBs of pointless diffs --- Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs index b8d48b4981..912d9ba634 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs @@ -520,6 +520,10 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX { var pw = pipeline.Opaque as PipelineWrapper; + //unavailable pipelines will have no opaque + if (pw == null) + return; + pw.VertexDeclaration.Dispose(); pw.FragmentShader.IGLShader.Release(); pw.VertexShader.IGLShader.Release(); From 6f1d61420d7694695aa6a770ba7e9f52a9982cbb Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 21 Apr 2019 05:18:42 +1000 Subject: [PATCH 024/138] Catch OverflowException when parsing address (hex str), resolves #1549 --- BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs index a92d3a89fb..afe14a1f66 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs @@ -933,7 +933,16 @@ namespace BizHawk.Client.EmuHawk { if (prompt.PromptText.IsHex()) { - var addr = int.Parse(prompt.PromptText, NumberStyles.HexNumber); + int addr; + try + { + addr = int.Parse(prompt.PromptText, NumberStyles.HexNumber); + } + catch (OverflowException e) + { + //TODO repeat dialog `prompt` / show error? + return; + } for (int index = 0; index < _searches.Count; index++) { From 655729f29c495ae98041b3457258f2b3374c47a3 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Apr 2019 08:46:50 -0400 Subject: [PATCH 025/138] TAStudio: orderly shutdown if starting TAStudio returned nullEmulator. --- BizHawk.Client.EmuHawk/MainForm.Movie.cs | 5 +++++ BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs index e8838d9d46..b9bc4db335 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs @@ -104,6 +104,11 @@ namespace BizHawk.Client.EmuHawk GlobalWin.OSD.AddMessage("Warning: Movie hash does not match the ROM"); } + if (Emulator is NullEmulator) + { + return false; + } + return true; } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 19ccbdb782..c9a866b822 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -416,6 +416,12 @@ namespace BizHawk.Client.EmuHawk StartNewTasMovie(); } + if (Global.Emulator is NullEmulator) + { + DisengageTastudio(); + return false; + } + EngageTastudio(); return true; } @@ -648,8 +654,11 @@ namespace BizHawk.Client.EmuHawk CurrentTasMovie.PopulateWithDefaultHeaderValues(); SetTasMovieCallbacks(); CurrentTasMovie.ClearChanges(); // Don't ask to save changes here. - HandleMovieLoadStuff(); - CurrentTasMovie.TasStateManager.Capture(); // Capture frame 0 always. + + if (HandleMovieLoadStuff()) + { + CurrentTasMovie.TasStateManager.Capture(); // Capture frame 0 always. + } // clear all selections TasView.DeselectAll(); @@ -699,7 +708,7 @@ namespace BizHawk.Client.EmuHawk { movie = CurrentTasMovie; } - + SetTasMovieCallbacks(movie as TasMovie); bool result = Mainform.StartNewMovie(movie, record); From 1c9182a2903e99f6f037d6e7b8539ab58ca2d39b Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Apr 2019 09:06:16 -0400 Subject: [PATCH 026/138] Fix exception when statrting from saveram multple times --- BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs index e042e1bd39..41ca3d7015 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs @@ -93,11 +93,17 @@ namespace BizHawk.Client.Common { if (value) { - Header.Add(HeaderKeys.STARTSFROMSAVERAM, "True"); + if (!Header.ContainsKey(HeaderKeys.STARTSFROMSAVERAM)) + { + Header.Add(HeaderKeys.STARTSFROMSAVERAM, "True"); + } } else { - Header.Remove(HeaderKeys.STARTSFROMSAVERAM); + if (Header.ContainsKey(HeaderKeys.STARTSFROMSAVERAM)) + { + Header.Remove(HeaderKeys.STARTSFROMSAVERAM); + } } } } From f599b33ee2c7c639a3f9dffbf5799838929610d8 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 21 Apr 2019 14:24:58 +0000 Subject: [PATCH 027/138] Don't change cell selection while context menu is open (resolves #1551) --- BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs index e85de140a0..3cd63c326b 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs @@ -1196,7 +1196,7 @@ namespace BizHawk.Client.EmuHawk if (AllowRightClickSelecton && e.Button == MouseButtons.Right) { - if (!IsHoveringOnColumnCell) + if (!IsHoveringOnColumnCell && CurrentCell != null) { _currentX = e.X; _currentY = e.Y; From 2bb63c2bf10fc59e9298ad9e3ed4cc8f0ef8070c Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Mon, 22 Apr 2019 01:09:18 +1000 Subject: [PATCH 028/138] Fix go to address UX in RAM Search --- .../tools/Watch/RamSearch.cs | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs index afe14a1f66..11adfdccb6 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs @@ -927,32 +927,31 @@ namespace BizHawk.Client.EmuHawk Message = "Enter a hexadecimal value" }; - var result = prompt.ShowHawkDialog(); - - if (result == DialogResult.OK) + while (prompt.ShowHawkDialog() == DialogResult.OK) { - if (prompt.PromptText.IsHex()) + try { - int addr; - try - { - addr = int.Parse(prompt.PromptText, NumberStyles.HexNumber); - } - catch (OverflowException e) - { - //TODO repeat dialog `prompt` / show error? - return; - } - + var addr = int.Parse(prompt.PromptText, NumberStyles.HexNumber); for (int index = 0; index < _searches.Count; index++) { - if (addr == _searches[index].Address) + if (_searches[index].Address == addr) { WatchListView.SelectItem(index, true); WatchListView.ensureVisible(); - break; + return; // Don't re-show dialog on success } } + //TODO add error text to dialog? + // Re-show dialog if the address isn't found + } + catch (FormatException e) + { + // Re-show dialog if given invalid text (shouldn't happen) + } + catch (OverflowException e) + { + //TODO add error text to dialog? + // Re-show dialog if the address isn't valid } } } From 27460c26ae16eae3d34ba4c67a3070bbee51d5e5 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Apr 2019 15:29:13 -0400 Subject: [PATCH 029/138] update VRC7 sounds per #1527 --- BizHawk.Emulation.Cores/Sound/YM2413.cs | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/BizHawk.Emulation.Cores/Sound/YM2413.cs b/BizHawk.Emulation.Cores/Sound/YM2413.cs index 91268635e9..2698714e69 100644 --- a/BizHawk.Emulation.Cores/Sound/YM2413.cs +++ b/BizHawk.Emulation.Cores/Sound/YM2413.cs @@ -139,23 +139,23 @@ namespace BizHawk.Emulation.Common.Components */ new byte[] { - // http://forums.nesdev.com/viewtopic.php?f=6&t=9141 + // March 15, 2019 dumped by Nuke.YKT 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x21, 0x05, 0x06, 0xB8, 0x82, 0x42, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x41, 0x13, 0x0D, 0xD8, 0xD6, 0x23, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x31, 0x11, 0x08, 0x08, 0xFA, 0x9A, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x31, 0x61, 0x18, 0x07, 0x78, 0x64, 0x30, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x21, 0x1E, 0x06, 0xF0, 0x76, 0x08, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x06, 0x00, 0xF0, 0xF2, 0x03, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x61, 0x1D, 0x07, 0x82, 0x81, 0x16, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x21, 0x1A, 0x17, 0xCF, 0x72, 0x25, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x11, 0x25, 0x00, 0x4F, 0x71, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x85, 0x01, 0x12, 0x0F, 0x99, 0xA2, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xC1, 0x69, 0x07, 0xF3, 0xF5, 0xA7, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x23, 0x0D, 0x06, 0x66, 0x75, 0x23, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0xD3, 0x05, 0xA3, 0x92, 0xF7, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x63, 0x0C, 0x00, 0x94, 0xAF, 0x34, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x62, 0x0D, 0x00, 0xB1, 0xA0, 0x54, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x21, 0x05, 0x06, 0xE8, 0x81, 0x42, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x41, 0x14, 0x0D, 0xD8, 0xF6, 0x23, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x11, 0x08, 0x08, 0xFA, 0xB2, 0x20, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x61, 0x0C, 0x07, 0xA8, 0x64, 0x61, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x21, 0x1E, 0x06, 0xE1, 0x76, 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x01, 0x06, 0x00, 0xA3, 0xE2, 0xF4, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x61, 0x1D, 0x07, 0x82, 0x81, 0x11, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x21, 0x22, 0x17, 0xA2, 0x72, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x35, 0x11, 0x25, 0x00, 0x40, 0x73, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB5, 0x01, 0x0F, 0x0F, 0xA8, 0xA5, 0x51, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0xC1, 0x24, 0x07, 0xF8, 0xF8, 0x22, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x23, 0x11, 0x06, 0x65, 0x74, 0x18, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0xD3, 0x05, 0xC9, 0x95, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x63, 0x0C, 0x00, 0x94, 0xC0, 0x33, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x72, 0x0D, 0x00, 0xC1, 0xD5, 0x56, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 From 1976e8e0270aa4b005e3e597ead1a1c09bec7198 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Apr 2019 19:01:13 -0400 Subject: [PATCH 030/138] Disassembler: mouse wheel scrolling --- .../Debugger/GenericDebugger.Designer.cs | 1 + .../Debugger/GenericDebugger.Disassembler.cs | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs index e0d3f9b754..ff6dc13a11 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs @@ -261,6 +261,7 @@ this.DisassemblerView.Scroll += new System.Windows.Forms.ScrollEventHandler(this.DisassemblerView_Scroll); this.DisassemblerView.SizeChanged += new System.EventHandler(this.DisassemblerView_SizeChanged); this.DisassemblerView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DisassemblerView_KeyDown); + this.DisassemblerView.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.DisassemblerView_Wheel); // // Address // diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs index d8e5001f9f..cefc2830e9 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs @@ -148,6 +148,35 @@ namespace BizHawk.Client.EmuHawk } } + private void DisassemblerView_Wheel(object sender, MouseEventArgs e) + { + if (e.Delta > 0) + { + SmallDecrement(); + } + if (e.Delta > 120) + { + SmallDecrement(); + } + if (e.Delta > 240) + { + SmallDecrement(); + } + + if (e.Delta < 0) + { + SmallIncrement(); + } + if (e.Delta < -120) + { + SmallIncrement(); + } + if (e.Delta < -240) + { + SmallIncrement(); + } + } + private void SetDisassemblerItemCount() { DisassemblerView.ItemCount = DisassemblerView.NumberOfVisibleRows + 1; From 25d4d6a840e1666ab280ce490e0b914935184a29 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Apr 2019 19:11:45 -0400 Subject: [PATCH 031/138] Vectrex: some cleanup --- .../CPUs/MC6809/Indexed_Modes.cs | 1 - BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 4 +- .../Consoles/GCE/Vectrex/HW_Registers.cs | 86 ++++++++++++++++++- .../Consoles/GCE/Vectrex/MemoryMap.cs | 6 +- 4 files changed, 89 insertions(+), 8 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 0021e13260..1477134f3f 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -125,7 +125,6 @@ namespace BizHawk.Emulation.Common.Components.MC6809 WR_HI_INC, IDX_EA, ADDR, WR_DEC_LO, IDX_EA, B); - Console.WriteLine("here"); IRQS = 3; } diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 2686587b09..feb963cf83 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -37,7 +37,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort CWAI = 26; public const ushort SYNC = 27; public const ushort INT_GET = 28; - public const ushort HALT_CHK = 29; // when in halt mode, actually check I Flag here + public const ushort HALT_CHK = 29; public const ushort RD_INC = 30; public const ushort SET_ADDR = 31; public const ushort NEG = 32; @@ -148,7 +148,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // Execute instructions public void ExecuteOne() { - Console.Write(opcode_see + " "); + //Console.Write(opcode_see + " "); switch (cur_instr[instr_pntr++]) { case IDLE: diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs index ebada2c06f..7c911c601c 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs @@ -5,15 +5,61 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Consoles.Vectrex { + // MOS6522 Interface + + /* Port B writes to both the PSG and the DAC simultaneously + * The trick here is that bits 3 and 4 both zero represent PSG disabled + * So it's easy to not interfere with the PSG + * However, the DAC will always receive some input, controlled by the multiplexer and selector bits + * BIOS functions keep everything in order + */ public partial class VectrexHawk { + public byte dir_dac, dir_ctrl; + + public byte portB_ret, portA_ret; + public byte Read_Registers(int addr) { byte ret = 0; switch (addr) { - default: + case 0x0: + ret = portB_ret; + break; + case 0x1: + ret = portA_ret; + break; + case 0x2: + ret = dir_ctrl; + break; + case 0x3: + ret = dir_dac; + break; + case 0x4: + break; + case 0x5: + break; + case 0x6: + break; + case 0x7: + break; + case 0x8: + break; + case 0x9: + break; + case 0xA: + break; + case 0xB: + break; + case 0xC: + break; + case 0xD: + break; + case 0xE: + break; + case 0xF: break; } return ret; @@ -21,9 +67,45 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public void Write_Registers(int addr, byte value) { + byte wrt_val = 0; + switch (addr) { - default: + case 0x0: + wrt_val = (byte)(value & dir_ctrl); + break; + case 0x1: + wrt_val = (byte)(value & dir_dac); + break; + case 0x2: + dir_ctrl = value; + break; + case 0x3: + dir_dac = value; + break; + case 0x4: + break; + case 0x5: + break; + case 0x6: + break; + case 0x7: + break; + case 0x8: + break; + case 0x9: + break; + case 0xA: + break; + case 0xB: + break; + case 0xC: + break; + case 0xD: + break; + case 0xE: + break; + case 0xF: break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs index 176bc1beaa..eddf0b6f67 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs @@ -33,7 +33,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } else if (addr < 0xD800) { - return 0xFF; + return Read_Registers(addr & 0xF); } else if (addr < 0xE000) { @@ -67,7 +67,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } else if (addr < 0xD800) { - + Write_Registers(addr & 0xF, value); } else if (addr < 0xE000) { @@ -99,7 +99,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex } else if (addr < 0xD800) { - return 0xFF; + return Read_Registers(addr & 0xF); } else if (addr < 0xE000) { From 41c854c030a5b4cf034537e429b0928d18608860 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 22 Apr 2019 23:54:07 -0400 Subject: [PATCH 032/138] fix some null reference exception I got while porting old HelloWorld externaltool. I dont understand any of this plumbing, so I can't describe it any better than that --- BizHawk.Client.ApiHawk/Classes/ClientApi.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs index 0a1e1caa42..5449083ff1 100644 --- a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs @@ -97,7 +97,9 @@ namespace BizHawk.Client.ApiHawk method = mainFormClass.GetMethod(name, typeList.ToArray()); } else method = mainFormClass.GetMethod(name); - method.Invoke(clientMainFormInstance, paramList); + + if(method != null) + method.Invoke(clientMainFormInstance, paramList); } private static object GetMainFormField(string name) From 033fe5776334cec66d7b341f526a60b6ff1103a5 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 22 Apr 2019 23:58:34 -0400 Subject: [PATCH 033/138] rebuild HelloWorld externaltool, AND include the zipfile sources, which DO get distributed along with it, so that people have a prayer of actually using this system. (it's all small, so it should be ok) --- Dist/HelloWorld_BizHawkTool.dll | Bin 13824 -> 16896 bytes Dist/HelloWorld_BizHawkTool.zip | Bin 0 -> 13493 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Dist/HelloWorld_BizHawkTool.zip diff --git a/Dist/HelloWorld_BizHawkTool.dll b/Dist/HelloWorld_BizHawkTool.dll index 9aea3925c62a168ab36a5f5ea9d944dbd3ae3c1c..0f48d06611eb5ad749882e8d110ac106c34d25ec 100644 GIT binary patch literal 16896 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 literal 0 HcmV?d00001 From 7d961d85bdf588072f344f220266002dee8ebc5a Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 24 Apr 2019 14:39:03 +0100 Subject: [PATCH 034/138] F8: Some commenting --- .../Fairchild/ChannelF/F8/F3850.Execute.cs | 4 +- .../Fairchild/ChannelF/F8/F3850.Operations.cs | 47 +-- .../Fairchild/ChannelF/F8/F3850.Registers.cs | 4 +- .../Fairchild/ChannelF/F8/F3850.Tables.cs | 375 +++++++++++------- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 23 +- 5 files changed, 277 insertions(+), 176 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs index c2a792a444..1388066c80 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -35,11 +35,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x09: LR_P_K(); break; // LR P, (K) case 0x0A: LR_A_IS(); break; // LR A, (ISAR) case 0x0B: LR_IS_A(); break; // LR ISAR, (A) - case 0x0C: LR_PK(); break; // LR PC1, (PC0); LR PC0l <- (r13); LR PC0h, (r12) + case 0x0C: PK(); break; // LR PC1, (PC0); LR PC0l <- (r13); LR PC0h, (r12) case 0x0D: LR_P0_Q(); break; // LR PC0l, (r15); LR PC0h <- (r14) case 0x0E: LR_Q_DC(); break; // LR r14, (DC0h); r15 <- (DC0l) case 0x0F: LR_DC_Q(); break; // LR DC0h, (r14); DC0l <- (r15) - case 0x10: LR_DC_Q(); break; // LR DC0h, (r10); DC0l <- (r11) + case 0x10: LR_DC_H(); break; // LR DC0h, (r10); DC0l <- (r11) case 0x11: LR_H_DC(); break; // LR r10, (DC0h); r11 <- (DC0l) case 0x12: SHIFT_R(1); break; // Shift (A) right one bit position (zero fill) case 0x13: SHIFT_L(1); break; // Shift (A) left one bit position (zero fill) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs index 0a3ef3f4fe..2d33637bec 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs @@ -11,32 +11,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public sealed partial class F3850 { - /* - private void IncrementBySignedByte(ushort dest, byte src) - { - if (src >= 0x80) - { - dest -= (ushort)(src & 0x80); - } - else - { - dest += (ushort)(src & 0x80); - } - } - - private void IncrementBySignedByte(byte dest, byte src) - { - if (src >= 0x80) - { - dest -= (byte)(src & 0x80); - } - else - { - dest += (byte)(src & 0x80); - } - } - */ - public void LR8_Func(ushort dest, ushort src) { if (dest == DB) @@ -49,6 +23,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // mask for status register Regs[dest] = (ushort)(Regs[src] & 0x1F); } + else if (dest == ISAR) + { + // mask for ISAR register + Regs[dest] = (ushort)(Regs[src] & 0x3F); + } else { Regs[dest] = Regs[src]; @@ -67,6 +46,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // mask for status register Regs[dest] = (ushort)(Regs[src] & 0x1F); } + else if (dest == ISAR) + { + // mask for ISAR register + Regs[dest] = (ushort)(Regs[src] & 0x3F); + } else { Regs[dest] = Regs[src]; @@ -79,6 +63,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF FlagS = Regs[dest] > 127; } + public void SZ_FLAG_TEST(ushort value) + { + // SZ only + FlagO = false; + FlagC = false; + FlagZ = (value & 0xFF) == 0; + FlagS = value > 127; + } + public void SR_Func(ushort src, ushort index) { int shft = (Regs[src] >> index) & 0xFF; @@ -211,6 +204,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); FlagS = ans > 127; + + Regs[dest] = ans; } public void INC8_Func(ushort src) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs index ae058d262f..f47c03521b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -85,7 +85,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// 0xff value for arithmetic ops /// - public ushort BYTE = 78; + public ushort ONE = 78; /// @@ -179,7 +179,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[i] = 0; } - Regs[BYTE] = 0xff; + Regs[ONE] = 1; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs index aef0ad6a51..4a1ca15be2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using BizHawk.Common; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Components; namespace BizHawk.Emulation.Cores.Consoles.ChannelF { @@ -16,8 +17,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_KU() { PopulateCURINSTR( - OP_LR8, A, Kh, // S - ROMC_00_S, + // S + OP_LR8, A, Kh, // A <- (r12) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -25,8 +27,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_KL() { PopulateCURINSTR( - OP_LR8, A, Kl, // S - ROMC_00_S, + // S + OP_LR8, A, Kl, // A <- (r13) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -34,8 +37,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_QU() { PopulateCURINSTR( - OP_LR8, A, Qh, // S - ROMC_00_S, + // S + OP_LR8, A, Qh, // A <- (r14) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -43,8 +47,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_QL() { PopulateCURINSTR( - OP_LR8, A, Ql, // S - ROMC_00_S, + // S + OP_LR8, A, Ql, // A <- (r15) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -52,8 +57,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_KU_A() { PopulateCURINSTR( - OP_LR8, Kh, A, // S - ROMC_00_S, + // S + OP_LR8, Kh, A, // r12 <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -61,8 +67,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_KL_A() { PopulateCURINSTR( - OP_LR8, Kl, A, // S - ROMC_00_S, + // S + OP_LR8, Kl, A, // r13 <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -70,8 +77,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_QU_A() { PopulateCURINSTR( - OP_LR8, Qh, A, // S - ROMC_00_S, + // S + OP_LR8, Qh, A, // r14 <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -79,8 +87,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_QL_A() { PopulateCURINSTR( - OP_LR8, Ql, A, // S - ROMC_00_S, + // S + OP_LR8, Ql, A, // r15 <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -88,19 +97,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_K_P() { PopulateCURINSTR( - ROMC_07, // L + // L + ROMC_07, // DB <- (PC1h) IDLE, IDLE, - OP_LR8, Kh, DB, + OP_LR8, Kh, DB, // r12 <- (DB) IDLE, IDLE, - ROMC_0B, // L + // L + ROMC_0B, // DB <- (PC1l) IDLE, IDLE, - OP_LR8, Kl, DB, + OP_LR8, Kl, DB, // r13 <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -109,19 +121,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_P_K() { PopulateCURINSTR( - OP_LR8, DB, Kh, // L + // L + OP_LR8, DB, Kh, // DB <- (r12) IDLE, IDLE, - ROMC_15, + ROMC_15, // PC1h <- (DB) IDLE, IDLE, - OP_LR8, DB, Kl, // L + // L + OP_LR8, DB, Kl, // DB <- (r13) IDLE, IDLE, - ROMC_18, + ROMC_18, // PC1l <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -130,8 +145,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_IS() { PopulateCURINSTR( - OP_LR8, A, ISAR, // S - ROMC_00_S, + // S + OP_LR8, A, ISAR, // A <- (ISAR) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -139,28 +155,32 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_IS_A() { PopulateCURINSTR( - OP_LR8, ISAR, A, // S - ROMC_00_S, + // S + OP_LR8, ISAR, A, // ISAR <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } - private void LR_PK() + private void PK() { PopulateCURINSTR( - OP_LR8, DB, Kh, // L + // L + OP_LR8, DB, Kl, // DB <- (r13) IDLE, IDLE, - ROMC_12, + ROMC_12, // PC1 <- (PC0); PC0l <- (DB) IDLE, IDLE, - OP_LR8, DB, Kl, // L + // L + OP_LR8, DB, Kh, // DB <- (r12) IDLE, IDLE, - ROMC_14, + ROMC_14, // PC0h <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -169,19 +189,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_P0_Q() { PopulateCURINSTR( - OP_LR8, DB, Ql, // L + // L + OP_LR8, DB, Ql, // DB <- (r15) IDLE, IDLE, - ROMC_17, + ROMC_17, // PC0l <- (DB) IDLE, IDLE, - OP_LR8, DB, Qh, // L + // L + OP_LR8, DB, Qh, // DB <- (r14) IDLE, IDLE, - ROMC_14, + ROMC_14, // PC0h <- DB IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -190,19 +213,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_Q_DC() { PopulateCURINSTR( - ROMC_06, // L + // L + ROMC_06, // DB <- (DC0h) IDLE, IDLE, - OP_LR8, Qh, DB, + OP_LR8, Qh, DB, // r14 <- (DB) IDLE, IDLE, - ROMC_09, // L + // L + ROMC_09, // DB <- (DC0l) IDLE, IDLE, - OP_LR8, Ql, DB, + OP_LR8, Ql, DB, // r15 <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -211,19 +237,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_DC_Q() { PopulateCURINSTR( - OP_LR8, DB, Qh, // L + // L + OP_LR8, DB, Qh, // DB <- (r14) IDLE, IDLE, - ROMC_16, + ROMC_16, // DC0h <- (DB) IDLE, IDLE, - OP_LR8, DB, Ql, // L + // L + OP_LR8, DB, Ql, // DB <- (r15) IDLE, IDLE, - ROMC_19, + ROMC_19, // DC0l <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -232,19 +261,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_DC_H() { PopulateCURINSTR( - OP_LR8, DB, Hh, // L + // L + OP_LR8, DB, Hh, // DB <- (r10) IDLE, IDLE, - ROMC_16, + ROMC_16, // DC0h <- (DB) IDLE, IDLE, - OP_LR8, DB, Hl, // L + // L + OP_LR8, DB, Hl, // DB <- (r11) IDLE, IDLE, - ROMC_19, + ROMC_19, // DC0l <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -253,19 +285,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_H_DC() { PopulateCURINSTR( - ROMC_06, // L + // L + ROMC_06, // DB <- (DC0h) IDLE, IDLE, - OP_LR8, Hh, DB, + OP_LR8, Hh, DB, // r10 <- (DB) IDLE, IDLE, - ROMC_09, // L + // L + ROMC_09, // DB <- (DC0l) IDLE, IDLE, - OP_LR8, Hl, DB, + OP_LR8, Hl, DB, // r11 <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -274,8 +309,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void SHIFT_R(ushort index) { PopulateCURINSTR( - OP_SHFT_R, A, index, // S - ROMC_00_S, + // S + OP_SHFT_R, A, index, // A >> (index) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -283,8 +319,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void SHIFT_L(ushort index) { PopulateCURINSTR( - OP_SHFT_L, A, index, // S - ROMC_00_S, + // S + OP_SHFT_L, A, index, // A << (index) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -292,13 +329,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ IDLE, IDLE, - OP_LR8, DB, A, + OP_LR8, A, DB, // A <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -307,13 +346,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ST() { PopulateCURINSTR( - OP_LR8, DB, A, // L + // L + OP_LR8, DB, A, // DB <- (A) IDLE, IDLE, - ROMC_05, + ROMC_05, // ((DC0)) <- (DB); DC0++ IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -322,8 +363,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void COM() { PopulateCURINSTR( - OP_XOR8C, A, DB, // S - ROMC_00_S, + // S + OP_XOR8C, A, ONE, // A <- A XOR 0xFF + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -331,8 +373,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LNK() { PopulateCURINSTR( - OP_LNK, // S - ROMC_00_S, + // S + OP_LNK, // A <- A + FlagC + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -340,11 +383,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void DI() { PopulateCURINSTR( - ROMC_1C_S, // S - OP_DI, + // S + ROMC_1C_S, // Idle + OP_DI, // Clear ICB IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -353,11 +398,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void EI() { PopulateCURINSTR( - ROMC_1C_S, // S - OP_EI, + // S + ROMC_1C_S, // Idle + OP_EI, // Set ICB IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -366,11 +413,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void POP() { PopulateCURINSTR( - ROMC_04, // S + // S + ROMC_04, // PC0 <- (PC1) IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -379,11 +428,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_W_J() { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, - OP_LR8, W, J, + OP_LR8, W, J, // W <- (r9) IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -392,8 +443,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_J_W() { PopulateCURINSTR( - OP_LR8, J, W, // S - ROMC_00_S, + // S + OP_LR8, J, W, // r9 <- (W) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -401,8 +453,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void INC() { PopulateCURINSTR( - OP_INC8, A, // S - ROMC_00_S, + // S + OP_INC8, A, // A <- A + 1 + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -410,13 +463,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_LR8, A, DB, + OP_LR8, A, DB, // A <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -425,13 +480,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void NI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_AND8, A, DB, + OP_AND8, A, DB, // A <- (A) AND (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -440,13 +497,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void OI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_OR8, A, DB, + OP_OR8, A, DB, // A <- (A) OR (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -455,13 +514,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_XOR8, A, DB, + OP_XOR8, A, DB, // A <- (A) XOR (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -470,13 +531,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void AI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_ADD8, A, DB, + OP_ADD8, A, DB, // A <- (A) + (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -485,13 +548,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void CI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, - OP_CI, A, + OP_CI, A, // Set flags for A <- (A) + (DB) + 1 (do not store result in A) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -501,7 +566,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ILLEGAL() { PopulateCURINSTR( - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -510,19 +576,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void IN() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_1B, // L + // L + ROMC_1B, // DB <- ((IO)); IDLE, IDLE, - OP_LR8_IO, A, DB, + OP_LR8_IO, A, DB, // A <- (DB) IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -531,19 +600,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void OUT() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, - OP_LR8, DB, A, + OP_LR8, DB, A, // DB <- (A) IDLE, IDLE, - ROMC_1A, // L + // L + ROMC_1A, // ((IO)) <- DB IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -552,29 +624,34 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void PI() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, - OP_LR8, A, DB, + OP_LR8, A, DB, // A <- (DB) IDLE, IDLE, - ROMC_0D, // S + // S + ROMC_0D, // PC1 <- PC0 + 1 IDLE, IDLE, IDLE, - ROMC_0C, // L + // L + ROMC_0C, // DB <- ((PC0)); PC0l <- (DB) IDLE, IDLE, - OP_LR8, DB, A, + OP_LR8, DB, A, // DB <- (A) IDLE, IDLE, - ROMC_14, // L + // L + ROMC_14, // PC0h <- (DB) IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -583,25 +660,29 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void JMP() { PopulateCURINSTR( - ROMC_03_L, // L + // L + ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, - OP_LR8, A, DB, + OP_LR8, A, DB, // A <- (DB) IDLE, IDLE, - ROMC_0C, // L + // L + ROMC_0C, // DB <- ((PC0)); PC0l <- DB IDLE, IDLE, - OP_LR8, DB, A, + OP_LR8, DB, A, // DB <- (A) IDLE, IDLE, - ROMC_14, // L + // L + ROMC_14, // PC0h <- (DB) IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -610,27 +691,32 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void DCI() { PopulateCURINSTR( - ROMC_11, // L + // L + ROMC_11, // DB <- ((PC0)); DC0h <- DB IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_03_S, // S + // S + ROMC_03_S, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, IDLE, - ROMC_0E, // L + // L + ROMC_0E, // DB <- ((PC0)); DC0l <- (DB) IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_03_S, // S + // S + ROMC_03_S, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -639,7 +725,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void NOP() { PopulateCURINSTR( - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -648,11 +735,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XDC() { PopulateCURINSTR( - ROMC_1D, // S + // S + ROMC_1D, // DC0 <-> DC1 IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -661,9 +750,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void DS(ushort rIndex) { PopulateCURINSTR( - OP_LR8, rIndex, BYTE, // L + // L + OP_SUB8, rIndex, ONE, IDLE, - ROMC_00_L, + ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -671,9 +761,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void DS_ISAR() { PopulateCURINSTR( - OP_DS_IS, // L + // L + OP_DS_IS, IDLE, - ROMC_00_L, + ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index 013a0abc47..0cf4ebe0a4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -116,6 +116,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort OP_ASD_IS = 129; public const ushort OP_XS_IS = 130; public const ushort OP_NS_IS = 131; + public const ushort OP_AFTEST = 132; + public const ushort OP_SUB8 = 133; public F3850() @@ -281,7 +283,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // DS op performed indirectly on the ScratchPad register pointed to by the ISAR case OP_DS_IS: - LR8_Func(Regs[ISAR], Regs[BYTE]); + SUB8_Func(Regs[ISAR], ONE); break; // ISAR is incremented @@ -418,12 +420,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // A <- (I/O Port 0 or 1) case OP_IN: - IN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + Regs[cur_instr[instr_pntr++]] = ReadHardware(cur_instr[instr_pntr++]); + //IN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // I/O Port 0 or 1 <- (A) case OP_OUT: - OUT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + WriteHardware(cur_instr[instr_pntr++], (byte)cur_instr[instr_pntr++]); + //OUT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // Add the content of the SR register addressed by ISAR to A (Binary) @@ -446,6 +450,16 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF AND8_Func(A, Regs[ISAR]); break; + // Set flags based on accumulator + case OP_AFTEST: + break; + + // subtraction + case OP_SUB8: + SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // instruction fetch @@ -553,7 +567,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[PC0l] = Regs[DB]; break; - // All devices store in PC1 the current contents of PC0, incremented by 1; PC1 is unaltered + // All devices store in PC1 the current contents of PC0, incremented by 1; PC0 is unaltered // CYCLE LENGTH: S case ROMC_0D: RegPC1 = (ushort)(RegPC0 + 1); @@ -648,6 +662,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // registers cannot be read back onto the data bus) // CYCLE LENGTH: L case ROMC_1B: + //Regs[DB] = ReadHardware(Regs[IO]); Regs[DB] = ReadHardware(Regs[IO]); break; From 74c6d33f16399293869889c92224549f33438c20 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Thu, 25 Apr 2019 23:52:35 +0100 Subject: [PATCH 035/138] F8: some fixes --- .../BizHawk.Emulation.Cores.csproj | 2 +- .../Fairchild/ChannelF/ChannelF.IO.cs | 4 +- .../ChannelF/ChannelF.IVideoProvider.cs | 44 ++ .../Fairchild/ChannelF/F8/F3850.ALU.cs | 319 +++++++++++++++ .../Fairchild/ChannelF/F8/F3850.Execute.cs | 3 +- .../Fairchild/ChannelF/F8/F3850.Operations.cs | 300 -------------- .../Fairchild/ChannelF/F8/F3850.Registers.cs | 21 +- .../Fairchild/ChannelF/F8/F3850.Tables.cs | 377 +++++++++++------- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 231 +++++------ 9 files changed, 717 insertions(+), 584 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs delete mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 22e5ff52a4..375e04e43d 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -605,10 +605,10 @@ + - diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs index 1a53e983bf..0df6d3e1a0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs @@ -76,7 +76,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public void WritePort(ushort addr, byte value) { - var port = addr & 0x7; + PortLatch[addr] = value; + + VID_PortIN(addr, value); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs index d8d3307a63..a009e491e0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -12,6 +12,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public int[] GetVideoBuffer() { + int row; + int col; + int color; + int pal; + + + + return _vidbuffer; } @@ -24,6 +32,42 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public int VsyncDenominator => 1; + private int[] colors = { 0x101010, 0xFDFDFD, 0x5331FF, 0x5DCC02, 0xF33F4B, 0xE0E0E0, 0xA6FF91, 0xD0CEFF }; + private int[] palette = {0,1,1,1, 7,2,4,3, 6,2,4,3, 5,2,4,3}; + private int[] buffer = new int[8192]; + + int ARM = 0; + int X = 0; + int Y = 0; + int Color = 2; + + public void VID_PortIN(ushort port, byte val) + { + switch (port) + { + case 0: // ARM + val &= 0x60; + if (val == 0x40 && ARM == 0x60) // Strobed + { + // Write to display buffer + buffer[(Y << 7) + X] = Color; + } + ARM = val; + break; + + case 1: // Set Color (bits 6 and 7) + Color = ((val ^ 0xFF) >> 6) & 3; + break; + case 4: // X coordinate, inverted (bits 0-6) + X = (val ^ 0xFF) & 0x7F; + break; + case 5: // Y coordinate, inverted (bits 0-5) + Y = (val ^ 0xFF) & 0x3F; + break; + } + } + + #region IRegionable public DisplayType Region => DisplayType.NTSC; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs new file mode 100644 index 0000000000..002452e1cd --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common.NumberExtensions; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// ALU Operations + /// The arithmetic and logic unit provides all data manipulating logic for the F3850. + /// It contains logic that operates on a single 8-bit source data work or combines two 8-bit words of source data + /// to generate a single 8-bit result. Additional information is reported in status flags, where appropriate. + /// + /// Operations Performed: + /// * Addition + /// * Compare + /// * AND + /// * OR + /// * XOR + /// + public sealed partial class F3850 + { + /// + /// Clears all status flags (excluding the ICB flag) + /// + public void ALU_ClearFlags() + { + FlagC = false; + FlagO = false; + FlagS = false; + FlagZ = false; + } + + /// + /// Sets the SIGN and ZERO flags based on the supplied byte + /// + /// + public void ALU_SetFlags_SZ(ushort src) + { + FlagZ = (byte)Regs[src] == 0; + FlagS = (~((byte)Regs[src]) & 0x80) != 0; + } + + /// + /// Performs addition and sets the CARRY and OVERFLOW flags accordingly + /// + /// + /// + /// + public void ALU_ADD8_Func(ushort dest, ushort src, bool carry = false) + { + byte d = (byte)Regs[dest]; + byte s = (byte)Regs[src]; + byte c = carry ? (byte)1 : (byte)0; + ushort result = (ushort)(d + s + c); + + FlagC = (result & 0x100) != 0; + FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; + + Regs[dest] = (ushort)(result & 0xFF); + } + + /// + /// Performs addition and sets the CARRY and OVERFLOW flags accordingly WITHOUT saving to destination + /// + /// + /// + /// + public void ALU_ADD8_FLAGSONLY_Func(ushort dest, ushort src) + { + byte d = (byte)Regs[dest]; + byte s = (byte)Regs[src]; + ushort result = (ushort)(d + s); + + FlagC = (result & 0x100) != 0; + FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; + } + + /// + /// Performs decimal addition based on the two supplied bytes + /// (looks like this is only used in the AMD operation) + /// + /// + /// + public void ALU_ADD8D_Func(ushort dest, ushort src) + { + // from MAME f8.cpp (BSD-3) + // https://github.com/mamedev/mame/blob/97b67170277437131adf6ed4d60139c172529e4f/src/devices/cpu/f8/f8.cpp#L264 + byte d = (byte)Regs[dest]; + byte s = (byte)Regs[src]; + byte tmp = (byte)(d + s); + + byte c = 0; // high order carry + byte ic = 0; // low order carry + + if (((d + s) & 0xFF0) > 0xF0) + { + c = 1; + } + + if ((d & 0x0F) + (s & 0x0F) > 0x0F) + { + ic = 1; + } + + ALU_ClearFlags(); + ALU_ADD8_FLAGSONLY_Func(dest, src); + ALU_SetFlags_SZ(tmp); + + if (c == 0 && ic == 0) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + if (c == 0 && ic == 1) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + (tmp & 0x0f)); + } + + if (c == 1 && ic == 0) + { + tmp = (byte)((tmp & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + Regs[dest] = tmp; + } + + public void ALU_SUB8_Func(ushort dest, ushort src) + { + byte d = (byte)Regs[dest]; + byte s = (byte)Regs[src]; + ushort result = (ushort)(d - s); + + FlagC = (result & 0x100) != 0; + FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; + + int Reg16_d = Regs[dest]; + Reg16_d -= Regs[src]; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + FlagS = ans > 127; + + Regs[dest] = ans; + } + + /* + public void ALU_SUB8_Func(ushort dest, ushort src) + { + int Reg16_d = Regs[dest]; + Reg16_d -= Regs[src]; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); + FlagS = ans > 127; + + Regs[dest] = ans; + } + */ + + /// + /// Right shift 'src' 'shift' positions (zero fill) + /// + /// + /// + public void ALU_SR_Func(ushort src, ushort shift) + { + Regs[src] = (ushort)((Regs[src] >> shift) & 0xFF); + ALU_ClearFlags(); + ALU_SetFlags_SZ(src); + } + + /// + /// Left shit 'src' 'shift' positions (zero fill) + /// + /// + /// + public void ALU_SL_Func(ushort src, ushort shift) + { + Regs[src] = (ushort)((Regs[src] << shift) & 0xFF); + ALU_ClearFlags(); + ALU_SetFlags_SZ(src); + } + + /// + /// AND + /// + /// + /// + public void ALU_AND8_Func(ushort dest, ushort src) + { + ALU_ClearFlags(); + Regs[dest] = (ushort)(Regs[dest] & Regs[src]); + ALU_SetFlags_SZ(dest); + } + + public void ALU_OR8_Func(ushort dest, ushort src) + { + ALU_ClearFlags(); + Regs[dest] = (ushort)(Regs[dest] | Regs[src]); + ALU_SetFlags_SZ(dest); + } + + public void ALU_XOR8_Func(ushort dest, ushort src) + { + ALU_ClearFlags(); + Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + ALU_SetFlags_SZ(dest); + } + /* + public void ALU_XOR8C_Func(ushort dest, ushort src) + { + // TODO + Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + FlagZ = Regs[dest] == 0; + FlagC = false; + FlagO = false; + FlagS = Regs[dest] > 127; + } + */ + + public void ADDS_Func(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) + { + int Reg16_d = Regs[dest_l]; + int Reg16_s = Regs[src_l]; + + Reg16_d += Reg16_s; + + ushort temp = 0; + + // since this is signed addition, calculate the high byte carry appropriately + // note that flags are unaffected by this operation + if (Reg16_s.Bit(7)) + { + if (((Reg16_d & 0xFF) >= Regs[dest_l])) + { + temp = 0xFF; + } + else + { + temp = 0; + } + } + else + { + temp = (ushort)(Reg16_d.Bit(8) ? 1 : 0); + } + + ushort ans_l = (ushort)(Reg16_d & 0xFF); + + Regs[dest_l] = ans_l; + Regs[dest_h] += temp; + Regs[dest_h] &= 0xFF; + } + + public void Read_Func(ushort dest, ushort src_l, ushort src_h) + { + Regs[dest] = ReadMemory((ushort)(Regs[src_l] | (Regs[src_h]) << 8)); + } + + public void Write_Func(ushort dest_l, ushort dest_h, ushort src) + { + WriteMemory((ushort)(Regs[dest_l] | (Regs[dest_h] << 8)), (byte)Regs[src]); + } + + public void LR8_Func(ushort dest, ushort src) + { + if (dest == DB) + { + // byte storage + Regs[dest] = (ushort)(Regs[src] & 0xFF); + } + else if (dest == W) + { + // mask for status register + Regs[dest] = (ushort)(Regs[src] & 0x1F); + } + else if (dest == ISAR) + { + // mask for ISAR register + Regs[dest] = (ushort)(Regs[src] & 0x3F); + } + else + { + Regs[dest] = Regs[src]; + } + } + + /* + public void ALU_INC8_Func(ushort src) + { + int Reg16_d = Regs[src]; + Reg16_d += 1; + + FlagC = Reg16_d.Bit(8); + FlagZ = (Reg16_d & 0xFF) == 0; + + ushort ans = (ushort)(Reg16_d & 0xFF); + + Regs[src] = ans; + + FlagS = Regs[src].Bit(7); + FlagO = Regs[src] == 0x80; + } + */ + + + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs index 1388066c80..f1a5283654 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -47,7 +47,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x15: SHIFT_L(4); break; // Shift (A) left four bit positions (zero fill) case 0x16: LM(); break; // A <- ((DC0)) case 0x17: ST(); break; // (DC) <- (A) - case 0x18: COM(); break; // A <- A XOR 255 (complement A) + case 0x18: COM(); break; // A <- A XOR 255 (complement A) + case 0x19: LNK(); break; // A <- (A) + (C) case 0x1A: DI(); break; // Clear ICB case 0x1B: EI(); break; // Set ICB case 0x1C: POP(); break; // PC0 <- PC1 diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs deleted file mode 100644 index 2d33637bec..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs +++ /dev/null @@ -1,300 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BizHawk.Common; -using BizHawk.Common.NumberExtensions; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Consoles.ChannelF -{ - public sealed partial class F3850 - { - public void LR8_Func(ushort dest, ushort src) - { - if (dest == DB) - { - // byte storage - Regs[dest] = (ushort)(Regs[src] & 0xFF); - } - else if (dest == W) - { - // mask for status register - Regs[dest] = (ushort)(Regs[src] & 0x1F); - } - else if (dest == ISAR) - { - // mask for ISAR register - Regs[dest] = (ushort)(Regs[src] & 0x3F); - } - else - { - Regs[dest] = Regs[src]; - } - } - - public void LR8_IO_Func(ushort dest, ushort src) - { - if (dest == DB) - { - // byte storage - Regs[dest] = (ushort)(Regs[src] & 0xFF); - } - else if (dest == W) - { - // mask for status register - Regs[dest] = (ushort)(Regs[src] & 0x1F); - } - else if (dest == ISAR) - { - // mask for ISAR register - Regs[dest] = (ushort)(Regs[src] & 0x3F); - } - else - { - Regs[dest] = Regs[src]; - } - - // update flags - FlagO = false; - FlagC = false; - FlagZ = (Regs[dest] & 0xFF) == 0; - FlagS = Regs[dest] > 127; - } - - public void SZ_FLAG_TEST(ushort value) - { - // SZ only - FlagO = false; - FlagC = false; - FlagZ = (value & 0xFF) == 0; - FlagS = value > 127; - } - - public void SR_Func(ushort src, ushort index) - { - int shft = (Regs[src] >> index) & 0xFF; - FlagO = false; - FlagC = false; - FlagZ = shft == 0; - FlagS = (~shft & 0x80) != 0; - Regs[src] = (ushort)shft; - } - - public void SL_Func(ushort src, ushort index) - { - int shft = (Regs[src] << index) & 0xFF; - FlagO = false; - FlagC = false; - FlagZ = shft == 0; - FlagS = (~shft & 0x80) != 0; - Regs[src] = (ushort)shft; - } - - public void ADD8_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - Reg16_d += Regs[src]; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - FlagO = (Regs[dest].Bit(7) == Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); - FlagS = ans > 127; - - Regs[dest] = ans; - } - - public void ADDS_Func(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) - { - int Reg16_d = Regs[dest_l]; - int Reg16_s = Regs[src_l]; - - Reg16_d += Reg16_s; - - ushort temp = 0; - - // since this is signed addition, calculate the high byte carry appropriately - // note that flags are unaffected by this operation - if (Reg16_s.Bit(7)) - { - if (((Reg16_d & 0xFF) >= Regs[dest_l])) - { - temp = 0xFF; - } - else - { - temp = 0; - } - } - else - { - temp = (ushort)(Reg16_d.Bit(8) ? 1 : 0); - } - - ushort ans_l = (ushort)(Reg16_d & 0xFF); - - Regs[dest_l] = ans_l; - Regs[dest_h] += temp; - Regs[dest_h] &= 0xFF; - } - - public void ADD8D_Func(ushort dest, ushort src) - { - // from MAME f8.cpp (BSD-3) - // https://github.com/mamedev/mame/blob/97b67170277437131adf6ed4d60139c172529e4f/src/devices/cpu/f8/f8.cpp#L264 - byte d = (byte) Regs[dest]; - byte s = (byte) Regs[src]; - byte tmp = (byte)(d + s); - - byte c = 0; // high order carry - byte ic = 0; // low order carry - - if (((d + s) & 0xFF0) > 0xF0) - { - c = 1; - } - - if ((d & 0x0F) + (s & 0x0F) > 0x0F) - { - ic = 1; - } - - // binary addition performed and flags set accordingly - int Reg16_d = Regs[dest]; - Reg16_d += Regs[src]; - ushort ans = (ushort)(Reg16_d & 0xFF); - - FlagC = tmp.Bit(8); - FlagZ = (tmp & 0xFF) == 0; - - FlagO = (Regs[dest].Bit(7) == Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); - FlagS = ans > 127; - - if (c == 0 && ic == 0) - { - tmp = (byte)(((tmp + 0xa0) & 0xf0) + ((tmp + 0x0a) & 0x0f)); - } - - if (c == 0 && ic == 1) - { - tmp = (byte)(((tmp + 0xa0) & 0xf0) + (tmp & 0x0f)); - } - - if (c == 1 && ic == 0) - { - tmp = (byte)((tmp & 0xf0) + ((tmp + 0x0a) & 0x0f)); - } - - Regs[dest] = tmp; - } - - public void SUB8_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - Reg16_d -= Regs[src]; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); - FlagS = ans > 127; - - Regs[dest] = ans; - } - - public void INC8_Func(ushort src) - { - int Reg16_d = Regs[src]; - Reg16_d += 1; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - Regs[src] = ans; - - FlagS = Regs[src].Bit(7); - FlagO = Regs[src] == 0x80; - } - - public void AND8_Func(ushort dest, ushort src) - { - Regs[dest] = (ushort)(Regs[dest] & Regs[src]); - - FlagZ = Regs[dest] == 0; - FlagC = false; - FlagO = false; - FlagS = Regs[dest] > 127; - } - - public void OR8_Func(ushort dest, ushort src) - { - Regs[dest] = (ushort)(Regs[dest] | Regs[src]); - FlagZ = Regs[dest] == 0; - FlagC = false; - FlagO = false; - FlagS = Regs[dest] > 127; - } - - public void XOR8_Func(ushort dest, ushort src) - { - Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); - FlagZ = Regs[dest] == 0; - FlagC = false; - FlagO = false; - FlagS = Regs[dest] > 127; - } - - public void XOR8C_Func(ushort dest, ushort src) - { - // TODO - Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); - FlagZ = Regs[dest] == 0; - FlagC = false; - FlagO = false; - FlagS = Regs[dest] > 127; - } - - /* - * - * public void COM_Func(ushort src) - { - byte b = (byte)Regs[src]; - var r = (byte)~b; - FlagO = false; - FlagC = false; - FlagZ = r == 0; - FlagS = (~r & 0x80) != 0; - Regs[src] = (ushort)r; - } - */ - - public void IN_Func(ushort dest, ushort src) - { - Regs[dest] = ReadHardware(Regs[src]); - - FlagZ = Regs[dest] == 0; - FlagO = false; - FlagC = false; - FlagS = Regs[dest].Bit(7); - } - - public void OUT_Func(ushort dest, ushort src) - { - WriteHardware(Regs[dest], (byte) Regs[src]); - } - - - public void Read_Func(ushort dest, ushort src) - { - Regs[dest] = Regs[src]; - } - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs index f47c03521b..6e5e057dd4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -69,23 +69,31 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// Temporary Arithmetic Storage /// - public ushort ALU = 74; + public ushort ALU0 = 74; + /// + /// Temporary Arithmetic Storage + /// + public ushort ALU1 = 75; /// /// Data Bus /// - public ushort DB = 75; + public ushort DB = 76; /// /// IO Bus/Latch /// - public ushort IO = 76; + public ushort IO = 77; /// /// 0x00 value for arithmetic ops /// - public ushort ZERO = 77; + public ushort ZERO = 78; /// - /// 0xff value for arithmetic ops + /// 0x01 value for arithmetic ops /// - public ushort ONE = 78; + public ushort ONE = 79; + /// + /// 0xFF value for arithmetic ops + /// + public ushort BYTE = 80; /// @@ -180,6 +188,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } Regs[ONE] = 1; + Regs[BYTE] = 0xFF; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs index 4a1ca15be2..7bd4680a4f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -364,7 +364,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_XOR8C, A, ONE, // A <- A XOR 0xFF + OP_COM, // A <- A XOR 0xFF (compliment accumulator) ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -454,7 +454,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_INC8, A, // A <- A + 1 + OP_INC8, A, ONE, // A <- A + 1 ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -466,9 +466,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - IDLE, + OP_CLEAR_FLAGS, OP_LR8, A, DB, // A <- (DB) - IDLE, + OP_SET_FLAGS_SZ, A, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -534,9 +534,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - IDLE, + OP_CLEAR_FLAGS, OP_ADD8, A, DB, // A <- (A) + (DB) - IDLE, + OP_SET_FLAGS_SZ, A, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -551,8 +551,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - IDLE, - OP_CI, A, // Set flags for A <- (A) + (DB) + 1 (do not store result in A) + OP_CLEAR_FLAGS, + OP_CI, A, DB, // Set flags for A <- (A) + (DB) + 1 (do not store result in A) IDLE, IDLE, // S @@ -580,16 +580,16 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, - IDLE, + OP_CLEAR_FLAGS, IDLE, IDLE, // L ROMC_1B, // DB <- ((IO)); IDLE, IDLE, - OP_LR8_IO, A, DB, // A <- (DB) - IDLE, + OP_LR8, A, DB, // A <- (DB) IDLE, + OP_SET_FLAGS_SZ, A, // S ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, @@ -751,52 +751,55 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - OP_SUB8, rIndex, ONE, - IDLE, + OP_CLEAR_FLAGS, + OP_ADD8, rIndex, BYTE, + OP_SET_FLAGS_SZ, rIndex, ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, - IDLE, END); } private void DS_ISAR() { PopulateCURINSTR( // L - OP_DS_IS, - IDLE, + OP_CLEAR_FLAGS, + OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff + OP_SET_FLAGS_SZ, Regs[ISAR], ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, - IDLE, END); } private void DS_ISAR_INC() { PopulateCURINSTR( - OP_DS_IS, // L - OP_IS_INC, - ROMC_00_L, - IDLE, - IDLE, + // L + OP_CLEAR_FLAGS, + OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff + OP_SET_FLAGS_SZ, Regs[ISAR], + OP_IS_INC, // Inc ISAR + ROMC_00_L, // DB <- ((PC0)); PC0++ END); } private void DS_ISAR_DEC() { PopulateCURINSTR( - OP_DS_IS, // L - OP_IS_DEC, - ROMC_00_L, - IDLE, - IDLE, + // L + OP_CLEAR_FLAGS, + OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff + OP_SET_FLAGS_SZ, Regs[ISAR], + OP_IS_DEC, // Dec ISAR + ROMC_00_L, // DB <- ((PC0)); PC0++ END); } private void LR_A_R(ushort rIndex) { PopulateCURINSTR( - OP_LR8, A, rIndex, // S - ROMC_00_S, + // S + OP_LR8, A, rIndex, // A <- (rIndex) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -804,8 +807,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_ISAR() { PopulateCURINSTR( - OP_LR_A_IS, A, // S - ROMC_00_S, + // S + OP_LR8, A, Regs[ISAR], // A <- ((ISAR)) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -813,26 +817,29 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_ISAR_INC() { PopulateCURINSTR( - OP_LR_A_IS, A, // S - OP_IS_INC, - ROMC_00_S, + // S + OP_LR8, A, Regs[ISAR], // A <- ((ISAR)) + OP_IS_INC, // Inc ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void LR_A_ISAR_DEC() { PopulateCURINSTR( - OP_LR_A_IS, A, // S - OP_IS_DEC, - ROMC_00_S, + // S + OP_LR8, A, Regs[ISAR], // A <- ((ISAR)) + OP_IS_DEC, // Dec ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void LR_R_A(ushort rIndex) { PopulateCURINSTR( - OP_LR8, rIndex, A, // S - ROMC_00_S, + // S + OP_LR8, rIndex, A, // rIndex <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -840,8 +847,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_ISAR_A() { PopulateCURINSTR( - OP_LR_IS_A, A, // S - ROMC_00_S, + // S + OP_LR8, Regs[ISAR], A, // rIndex <- (A) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -849,26 +857,29 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_ISAR_A_INC() { PopulateCURINSTR( - OP_LR_IS_A, A, // S - OP_IS_INC, - ROMC_00_S, + // S + OP_LR8, Regs[ISAR], A, // rIndex <- (A) + OP_IS_INC, // Inc ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void LR_ISAR_A_DEC() { PopulateCURINSTR( - OP_LR_IS_A, A, // S - OP_IS_DEC, - ROMC_00_S, + // S + OP_LR8, Regs[ISAR], A, // rIndex <- (A) + OP_IS_DEC, // Dec ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void LISU(ushort octal) { PopulateCURINSTR( - OP_LISU, octal, // S - ROMC_00_S, + // S + OP_LISU, octal, // set the upper octal ISAR bits (b3,b4,b5) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -876,8 +887,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LISL(ushort octal) { PopulateCURINSTR( - OP_LISL, octal, // S - ROMC_00_S, + // S + OP_LISL, octal, // set the lower octal ISAR bits (b0,b1,b2) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -885,8 +897,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LIS(ushort index) { PopulateCURINSTR( - OP_LR8, A, index, // S - ROMC_00_S, + // S + OP_LR8, A, index, // A <- index + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -894,22 +907,25 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void BT(ushort index) { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, IDLE, - OP_BT, index); // no END as there is branching logic within OP_BT + OP_BT, index); // no END as there is branching logic within OP_BT } private void AM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ + OP_CLEAR_FLAGS, IDLE, + OP_ADD8, A, DB, // A <- (DB) + OP_SET_FLAGS_SZ, A, IDLE, - OP_ADD8, A, DB, - IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -918,13 +934,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void AMD() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ IDLE, IDLE, - OP_ADD8D, A, DB, + OP_ADD8D, A, DB, // A <- (A) + (DB) decimal IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -933,13 +951,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void NM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ IDLE, + OP_CLEAR_FLAGS, + OP_AND8, A, DB, // A <- (A) AND (DB) + OP_SET_FLAGS_SZ, A, IDLE, - OP_AND8, A, DB, - IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -948,13 +968,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void OM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ IDLE, + OP_CLEAR_FLAGS, + OP_OR8, A, DB, // A <- (A) OR (DB) + OP_SET_FLAGS_SZ, A, IDLE, - OP_OR8, A, DB, - IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -963,13 +985,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ IDLE, + OP_CLEAR_FLAGS, + OP_XOR8, A, DB, // A <- (A) XOR (DB) + OP_SET_FLAGS_SZ, A, IDLE, - OP_XOR8, A, DB, - IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -978,13 +1002,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void CM() { PopulateCURINSTR( - ROMC_02, // L + // L + ROMC_02, // DB <- ((DC0)); DC0++ + IDLE, + OP_CLEAR_FLAGS, + OP_CI, A, IDLE, IDLE, - OP_CM, - IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -993,13 +1019,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ADC() { PopulateCURINSTR( - OP_LR8, DB, A, // L + // L + OP_LR8, DB, A, // DB <- (A) IDLE, IDLE, ROMC_0A, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1014,20 +1042,23 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void BF(ushort index) { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, IDLE, - OP_BF, index); // no END as there is branching logic within OP_BF + OP_BF, index); // no END as there is branching logic within OP_BF } private void INS_0(ushort index) { PopulateCURINSTR( - ROMC_1C_S, // S - IDLE, - OP_IN, A, index, - IDLE, - ROMC_00_S, // S + // S + ROMC_1C_S, // Idle + OP_CLEAR_FLAGS, + OP_IN, A, index, // A <- ((Port index - 0/1)) + OP_SET_FLAGS_SZ, A, + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1035,20 +1066,25 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void INS_1(ushort index) { + Regs[IO] = index; // latch port index early + PopulateCURINSTR( - ROMC_1C_L, // L + // L + ROMC_1C_L, // Idle IDLE, IDLE, - OP_LR8, IO, index, IDLE, IDLE, - ROMC_1B, // L IDLE, + // L + ROMC_1B, // DB <- ((IO)) IDLE, - OP_LR8_IO, A, DB, + OP_CLEAR_FLAGS, + OP_LR8, A, DB, // A <- (DB) + OP_SET_FLAGS_SZ, A, IDLE, - IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1057,11 +1093,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void OUTS_0(ushort index) { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, - OP_OUT, index, A, + OP_OUT, index, A, // Port <- (A) IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1069,20 +1107,25 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void OUTS_1(ushort index) { + Regs[IO] = index; // latch port index early + PopulateCURINSTR( - ROMC_1C_L, // L + // L + ROMC_1C_L, // Idle IDLE, IDLE, - OP_LR8, IO, index, - OP_LR8, DB, A, + OP_LR8, DB, A, // DB <- (A) IDLE, - ROMC_1A, // L + IDLE, + // L + ROMC_1A, // ((IO)) <- (DB) IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1090,48 +1133,59 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void AS(ushort rIndex) { + ALU_ClearFlags(); // clear flags early (as not enough cycle space for commands) + PopulateCURINSTR( - OP_ADD8, A, rIndex, // S - ROMC_00_S, - IDLE, + // S + OP_ADD8, A, rIndex, // A <- (A) + (rIndex) + OP_SET_FLAGS_SZ, A, + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void AS_IS() { PopulateCURINSTR( - OP_AS_IS, // S - ROMC_00_S, + // S + OP_CLEAR_FLAGS, + OP_AS_IS, // A <- (A) + ((ISAR)); setSZ IDLE, + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void AS_IS_INC() { PopulateCURINSTR( - OP_AS_IS, // S - OP_IS_INC, - ROMC_00_S, + // S + OP_CLEAR_FLAGS, + OP_AS_IS, // A <- (A) + ((ISAR)); setSZ + OP_IS_INC, // Inc ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void AS_IS_DEC() { PopulateCURINSTR( - OP_AS_IS, // S - OP_IS_DEC, - ROMC_00_S, + // S + OP_CLEAR_FLAGS, + OP_AS_IS, // A <- (A) + ((ISAR)); setSZ + OP_IS_DEC, // Dec ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void ASD(ushort rIndex) { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, OP_ADD8D, A, rIndex, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1140,11 +1194,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ASD_IS() { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, - OP_ASD_IS, + OP_ADD8D, A, Regs[ISAR], IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1153,11 +1209,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ASD_IS_INC() { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, - OP_ASD_IS, - OP_IS_INC, - ROMC_00_S, // S + OP_ADD8D, A, Regs[ISAR], + OP_IS_INC, // Inc ISAR + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1166,11 +1224,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ASD_IS_DEC() { PopulateCURINSTR( - ROMC_1C_S, // S + // S + ROMC_1C_S, // Idle IDLE, - OP_ASD_IS, - OP_IS_DEC, - ROMC_00_S, // S + OP_ADD8D, A, Regs[ISAR], + OP_IS_DEC, // Dec ISAR + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -1179,17 +1239,20 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XS(ushort rIndex) { PopulateCURINSTR( - OP_XOR8, A, rIndex, // S - ROMC_00_S, - IDLE, + // S + OP_CLEAR_FLAGS, + OP_XOR8, A, rIndex, // A <- (A) XOR (reg) + OP_SET_FLAGS_SZ, A, + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void XS_IS() { PopulateCURINSTR( - OP_XS_IS, // S - ROMC_00_S, + // S + OP_XS_IS, // A <- (A) XOR ((ISAR)) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -1197,35 +1260,41 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XS_IS_INC() { PopulateCURINSTR( - OP_XS_IS, // S - OP_IS_INC, - ROMC_00_S, + // S + OP_XS_IS, // A <- (A) XOR ((ISAR)) + OP_IS_INC, // Inc ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void XS_IS_DEC() { PopulateCURINSTR( - OP_XS_IS, // S - OP_IS_DEC, - ROMC_00_S, + // S + OP_XS_IS, // A <- (A) XOR ((ISAR)) + OP_IS_DEC, // Dec ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void NS(ushort rIndex) { + ALU_ClearFlags(); // clear flags early (as not enough cycle space for commands) + PopulateCURINSTR( - OP_AND8, A, rIndex, // S - ROMC_00_S, - IDLE, + // S + OP_AND8, A, rIndex, // A <- (A) AND (reg) + OP_SET_FLAGS_SZ, A, + ROMC_00_S, // DB <- ((PC0)); PC0++ END); } private void NS_IS() { PopulateCURINSTR( - OP_NS_IS, // S - ROMC_00_S, + // S + OP_NS_IS, // A <- (A) AND ((ISAR)) + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } @@ -1233,18 +1302,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void NS_IS_INC() { PopulateCURINSTR( - OP_NS_IS, // S - OP_IS_INC, - ROMC_00_S, + // S + OP_NS_IS, // A <- (A) AND ((ISAR)) + OP_IS_INC, // Inc ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ + IDLE, END); } private void NS_IS_DEC() { PopulateCURINSTR( - OP_NS_IS, // S - OP_IS_DEC, - ROMC_00_S, + // S + OP_NS_IS, // A <- (A) AND ((ISAR)) + OP_IS_DEC, // Dec ISAR + ROMC_00_S, // DB <- ((PC0)); PC0++ + IDLE, END); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index 0cf4ebe0a4..df96c4aa1c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -39,18 +39,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public sealed partial class F3850 { // operations that can take place in an instruction - - //public const ushort OP = 1; - //public const ushort LR_8 = 2; - //public const ushort LR_16 = 3; - - - public const ushort ROMC_00_S = 40; - public const ushort ROMC_00_L = 41; public const ushort ROMC_01 = 1; public const ushort ROMC_02 = 2; public const ushort ROMC_03_S = 3; - public const ushort ROMC_03_L = 33; public const ushort ROMC_04 = 4; public const ushort ROMC_05 = 5; public const ushort ROMC_06 = 6; @@ -76,10 +67,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort ROMC_1A = 26; public const ushort ROMC_1B = 27; public const ushort ROMC_1C_S = 28; - public const ushort ROMC_1C_L = 34; public const ushort ROMC_1D = 29; public const ushort ROMC_1E = 30; public const ushort ROMC_1F = 31; + public const ushort ROMC_00_S = 32; + public const ushort ROMC_00_L = 33; + public const ushort ROMC_03_L = 34; + public const ushort ROMC_1C_L = 35; public const ushort IDLE = 0; public const ushort END = 51; @@ -94,30 +88,24 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort OP_AND8 = 107; public const ushort OP_OR8 = 108; public const ushort OP_XOR8 = 109; - public const ushort OP_XOR8C = 110; + public const ushort OP_COM = 110; public const ushort OP_ADD8 = 111; public const ushort OP_CI = 112; - public const ushort OP_LR8_IO = 113; - public const ushort OP_DS_IS = 114; - public const ushort OP_IS_INC = 115; - public const ushort OP_IS_DEC = 116; - public const ushort OP_LR_A_IS = 117; - public const ushort OP_LR_IS_A = 118; - public const ushort OP_LISU = 119; - public const ushort OP_LISL = 120; - public const ushort OP_BT = 121; - public const ushort OP_ADD8D = 122; - public const ushort OP_CM = 123; - public const ushort OP_BR7 = 124; - public const ushort OP_BF = 125; - public const ushort OP_IN = 126; - public const ushort OP_OUT = 127; - public const ushort OP_AS_IS = 128; - public const ushort OP_ASD_IS = 129; - public const ushort OP_XS_IS = 130; - public const ushort OP_NS_IS = 131; - public const ushort OP_AFTEST = 132; - public const ushort OP_SUB8 = 133; + public const ushort OP_IS_INC = 113; + public const ushort OP_IS_DEC = 114; + public const ushort OP_LISU = 115; + public const ushort OP_LISL = 116; + public const ushort OP_BT = 117; + public const ushort OP_ADD8D = 118; + public const ushort OP_BR7 = 119; + public const ushort OP_BF = 120; + public const ushort OP_IN = 121; + public const ushort OP_OUT = 122; + public const ushort OP_AS_IS = 123; + public const ushort OP_XS_IS = 124; + public const ushort OP_NS_IS = 125; + public const ushort OP_CLEAR_FLAGS = 126; + public const ushort OP_SET_FLAGS_SZ = 127; public F3850() @@ -147,6 +135,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, END); + ALU_ClearFlags(); FlagICB = false; } @@ -202,6 +191,16 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case IDLE: break; + // clears all flags except for ICB + case OP_CLEAR_FLAGS: + ALU_ClearFlags(); + break; + + // sets SIGN and CARRY flags based upon the supplied value + case OP_SET_FLAGS_SZ: + ALU_SetFlags_SZ(cur_instr[instr_pntr++]); + break; + // load one register into another (or databus) case OP_LR8: LR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); @@ -209,27 +208,35 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Shift register n bit positions to the right (zero fill) case OP_SHFT_R: - SR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_SR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // Shift register n bit positions to the left (zero fill) case OP_SHFT_L: - SL_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_SL_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (x) ADD y case OP_ADD8: - ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (x) ADD y (decimal) case OP_ADD8D: - ADD8D_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_ADD8D_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // A <- (A) + (C) case OP_LNK: - ADD8_Func(Regs[A], (ushort)(FlagC ? 1 : 0)); + bool fc = FlagC; + ALU_ClearFlags(); + + if (fc) + { + ALU_ADD8_Func(A, ONE); + } + + ALU_SetFlags_SZ(A); break; // Clear ICB status bit @@ -244,46 +251,38 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // x <- (y) XOR DB case OP_XOR8: - XOR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_XOR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (y) XOR DB (complement accumulator) - case OP_XOR8C: - XOR8C_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + case OP_COM: + Regs[A] = (byte)~Regs[A]; + ALU_ClearFlags(); + ALU_SetFlags_SZ(A); break; // x <- (x) + 1 case OP_INC8: - INC8_Func(cur_instr[instr_pntr++]); + ALU_ClearFlags(); + ALU_ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_SetFlags_SZ(A); break; // x <- (y) & DB case OP_AND8: - AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (y) | DB case OP_OR8: - OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // DB + (x) + 1 (modify flags without saving result) case OP_CI: - var tmpX = cur_instr[instr_pntr++]; - var tmpOperand = Regs[DB]; - INC8_Func(tmpX); - ADD8_Func(tmpOperand, tmpX); - break; - - // load one register into another (or databus) - // ALU also runs flag status checking - case OP_LR8_IO: - LR8_IO_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - - // DS op performed indirectly on the ScratchPad register pointed to by the ISAR - case OP_DS_IS: - SUB8_Func(Regs[ISAR], ONE); + Regs[ALU0] = (byte)~Regs[cur_instr[instr_pntr++]]; + ALU_ADD8_Func(ALU0, DB, true); + ALU_SetFlags_SZ(ALU0); break; // ISAR is incremented @@ -296,26 +295,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[ISAR] = (ushort)((Regs[ISAR] & 0x38) | ((Regs[ISAR] - 1) & 0x07)); break; - // x <- (SR) (as pointed to by ISAR) - case OP_LR_A_IS: - LR8_Func(cur_instr[instr_pntr++], Regs[ISAR]); - break; - - // x <- (SR) (as pointed to by ISAR) - case OP_LR_IS_A: - LR8_Func(Regs[ISAR], cur_instr[instr_pntr++]); - break; - // set the upper octal ISAR bits (b3,b4,b5) case OP_LISU: - var isVala = (Regs[ISAR] & 0x07) | cur_instr[instr_pntr++]; - Regs[ISAR] = (ushort)(isVala & 0x3F); + Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x07) | cur_instr[instr_pntr++]) & 0x3F); break; // set the lower octal ISAR bits (b0,b1,b2) case OP_LISL: - var isValb = (Regs[ISAR] & 0x38) | cur_instr[instr_pntr++]; - Regs[ISAR] = (ushort)(isValb & 0x3F); + Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x38) | cur_instr[instr_pntr++]) & 0x3F); break; // test operand against status register @@ -324,13 +311,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF if ((Regs[W] & cur_instr[instr_pntr++]) != 0) { PopulateCURINSTR( - ROMC_01, // L + // L + ROMC_01, IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -338,35 +327,32 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF else { PopulateCURINSTR( - ROMC_03_S, // S + // S + ROMC_03_S, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB < -((PC0)); PC0++ IDLE, IDLE, END); } break; - - // DC0 - A - set status only - case OP_CM: - var tmpDB = Regs[DB]; - var tmpA = Regs[A]; - SUB8_Func(tmpDB, tmpA); - break; - + // Branch based on ISARL case OP_BR7: instr_pntr = 0; if ((Regs[ISAR] & 7) == 7) { PopulateCURINSTR( - ROMC_03_S, // S + // S + ROMC_03_S, // DB/IO <- ((PC0)); PC0++ //IDLE, <- lose a cycle that was stolen in the table IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -374,13 +360,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF else { PopulateCURINSTR( - ROMC_01, // L + // L + ROMC_01, //IDLE, <- lose a cycle that was stolen in the table IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -393,11 +380,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF if ((Regs[W] & cur_instr[instr_pntr++]) != 0) { PopulateCURINSTR( - ROMC_03_S, // S + // S + ROMC_03_S, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -405,13 +394,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF else { PopulateCURINSTR( - ROMC_01, // L + // L + ROMC_01, IDLE, IDLE, IDLE, IDLE, IDLE, - ROMC_00_S, // S + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, IDLE, END); @@ -421,7 +412,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // A <- (I/O Port 0 or 1) case OP_IN: Regs[cur_instr[instr_pntr++]] = ReadHardware(cur_instr[instr_pntr++]); - //IN_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // I/O Port 0 or 1 <- (A) @@ -432,42 +422,33 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Add the content of the SR register addressed by ISAR to A (Binary) case OP_AS_IS: - ADD8_Func(A, Regs[ISAR]); - break; - - // Add the content of the SR register addressed by ISAR to A (Decimal) - case OP_ASD_IS: - ADD8D_Func(A, Regs[ISAR]); + ALU_ClearFlags(); + ALU_ADD8_Func(A, Regs[ISAR]); + ALU_SetFlags_SZ(A); break; // XOR the content of the SR register addressed by ISAR to A case OP_XS_IS: - XOR8_Func(A, Regs[ISAR]); + ALU_ClearFlags(); + ALU_XOR8_Func(A, Regs[ISAR]); + ALU_SetFlags_SZ(A); break; // AND the content of the SR register addressed by ISAR to A case OP_NS_IS: - AND8_Func(A, Regs[ISAR]); - break; - - // Set flags based on accumulator - case OP_AFTEST: - break; - - // subtraction - case OP_SUB8: - SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ALU_ClearFlags(); + ALU_AND8_Func(A, Regs[ISAR]); + ALU_SetFlags_SZ(A); break; - - // instruction fetch // The device whose address space includes the contents of the PC0 register must place on the data bus the op code addressed by PC0; // then all devices increments the content of PC0. // CYCLE LENGTH: S case ROMC_00_S: - Regs[DB] = ReadMemory(RegPC0++); + Read_Func(DB, PC0l, PC0h); + RegPC0++; break; // instruction fetch @@ -475,14 +456,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // then all devices increments the content of PC0. // CYCLE LENGTH: L case ROMC_00_L: - Regs[DB] = ReadMemory(RegPC0++); + Read_Func(DB, PC0l, PC0h); + RegPC0++; break; // The device whose address space includes the contents of the PC0 register must place on the data bus the contents of the memory location // addressed by by PC0; then all devices add the 8-bit value on the data bus, as a signed binary number, to PC0 // CYCLE LENGTH: L case ROMC_01: - Regs[DB] = ReadMemory(RegPC0); + Read_Func(DB, PC0l, PC0h); ADDS_Func(PC0l, PC0h, DB, ZERO); break; @@ -490,20 +472,23 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // of the memory location addressed by DC0; then all devices increment DC0 // CYCLE LENGTH: L case ROMC_02: - Regs[DB] = ReadMemory(RegDC0++); + Read_Func(DB, DC0l, DC0h); + RegDC0++; break; // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches // CYCLE LENGTH: S case ROMC_03_S: - Regs[DB] = ReadMemory(RegPC0++); + Read_Func(DB, PC0l, PC0h); + RegPC0++; Regs[IO] = Regs[DB]; break; // Similar to 0x00, except that it is used for Immediate Operand fetches (using PC0) instead of instruction fetches // CYCLE LENGTH: L case ROMC_03_L: - Regs[DB] = ReadMemory(RegPC0++); + Read_Func(DB, PC0l, PC0h); + RegPC0++; Regs[IO] = Regs[DB]; break; @@ -516,7 +501,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Store the data bus contents into the memory location pointed to by DC0; increment DC0 // CYCLE LENGTH: L case ROMC_05: - WriteMemory(RegDC0++, (byte)Regs[DB]); + Write_Func(DC0l, DC0h, DB); break; // Place the high order byte of DC0 on the data bus @@ -563,7 +548,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // onto the data bus; then all devices move the value that has just been placed on the data bus into the low order byte of PC0 // CYCLE LENGTH: L case ROMC_0C: - Regs[DB] = ReadMemory(RegPC0); + Read_Func(DB, PC0l, PC0h); Regs[PC0l] = Regs[DB]; break; @@ -577,7 +562,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // The value on the data bus is then moved to the low order byte of DC0 by all devices // CYCLE LENGTH: L case ROMC_0E: - Regs[DB] = ReadMemory(RegPC0); + Read_Func(DB, PC0l, PC0h); Regs[DC0l] = Regs[DB]; break; @@ -596,7 +581,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // All devices must then move the contents of the data bus to the upper byte of DC0 // CYCLE LENGTH: L case ROMC_11: - Regs[DB] = ReadMemory(RegPC0); + Read_Func(DB, PC0l, PC0h); Regs[DC0h] = Regs[DB]; break; @@ -662,7 +647,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // registers cannot be read back onto the data bus) // CYCLE LENGTH: L case ROMC_1B: - //Regs[DB] = ReadHardware(Regs[IO]); Regs[DB] = ReadHardware(Regs[IO]); break; @@ -779,6 +763,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ser.BeginSection(nameof(F3850)); ser.Sync(nameof(Regs), ref Regs, false); ser.Sync(nameof(cur_instr), ref cur_instr, false); + ser.Sync(nameof(instr_pntr), ref instr_pntr); ser.EndSection(); } } From 356039638a18b4b96fb3184426acdcb3892aa790 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Fri, 26 Apr 2019 17:51:45 +0100 Subject: [PATCH 036/138] F8: more bug hunting --- .../Fairchild/ChannelF/ChannelF.IO.cs | 3 +- .../ChannelF/ChannelF.IVideoProvider.cs | 85 +++++++++++++------ .../Fairchild/ChannelF/F8/F3850.ALU.cs | 5 +- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 20 +++-- 4 files changed, 74 insertions(+), 39 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs index 0df6d3e1a0..7aa343ee03 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs @@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public byte[] BIOS01 = new byte[1024]; public byte[] BIOS02 = new byte[1024]; - public byte[] FrameBuffer = new byte[2048]; + public byte[] FrameBuffer = new byte[0x2000]; public byte[] Cartridge = new byte[0x2000 - 0x800]; @@ -31,6 +31,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF else if (addr < 0x2000) { // Cart + return 0; return Cartridge[addr - 0x800]; } else if (addr < 0x2000 + 2048) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs index a009e491e0..4efe72af28 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -1,4 +1,5 @@ using System; +using BizHawk.Common; using BizHawk.Common.BufferExtensions; using BizHawk.Emulation.Common; @@ -6,63 +7,91 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public partial class ChannelF : IVideoProvider, IRegionable { + public static readonly int[] FPalette = + { + Colors.ARGB(0x10, 0x10, 0x10), // Black + Colors.ARGB(0xFD, 0xFD, 0xFD), // White + Colors.ARGB(0xFF, 0x31, 0x53), // Red + Colors.ARGB(0x02, 0xCC, 0x5D), // Green + Colors.ARGB(0x4B, 0x3F, 0xF3), // Blue + Colors.ARGB(0xE0, 0xE0, 0xE0), // Gray + Colors.ARGB(0x91, 0xFF, 0xA6), // BGreen + Colors.ARGB(0xCE, 0xD0, 0xFF), // BBlue + }; + + public static readonly int[] CMap = + { + 0, 1, 1, 1, + 7, 4, 2, 3, + 5, 4, 2, 3, + 6, 4, 2, 3, + }; + public int _frameHz = 60; - public int[] _vidbuffer = new int[102 * 58]; + public int[] _vidbuffer = new int[108 * 64]; public int[] GetVideoBuffer() { - int row; - int col; - int color; - int pal; - + int colour; + int a = 0; + int pOff; + // rows + for (int y = 0; y < 64; y++) + { + pOff = ((FrameBuffer[(y * 128) + 125] & 0x3) & 0x02) | ((FrameBuffer[(y * 128) + 126] & 0x3) >> 1) << 2; + for (int x = a; x < a + 128; x++) + { + colour = pOff + (FrameBuffer[x | (y << 7)] & 0x03); + var yM = y * 64; + _vidbuffer[yM + x] = FPalette[CMap[colour]]; + } + } return _vidbuffer; } - public int VirtualWidth => 102 * 2; - public int VirtualHeight => 58 * 2; - public int BufferWidth => 102; - public int BufferHeight => 58; + public int VirtualWidth => BufferWidth * 2; + public int VirtualHeight => BufferHeight * 2; + public int BufferWidth => 108; // 102 + public int BufferHeight => 64; // 58 public int BackgroundColor => unchecked((int)0xFF000000); public int VsyncNumerator => _frameHz; public int VsyncDenominator => 1; - - private int[] colors = { 0x101010, 0xFDFDFD, 0x5331FF, 0x5DCC02, 0xF33F4B, 0xE0E0E0, 0xA6FF91, 0xD0CEFF }; - private int[] palette = {0,1,1,1, 7,2,4,3, 6,2,4,3, 5,2,4,3}; - private int[] buffer = new int[8192]; - - int ARM = 0; - int X = 0; - int Y = 0; - int Color = 2; + private int row = 0; + private int col = 0; + private byte value = 0; public void VID_PortIN(ushort port, byte val) { switch (port) { - case 0: // ARM - val &= 0x60; - if (val == 0x40 && ARM == 0x60) // Strobed + case 0: + + int o; + PortLatch[port] = val; + if ((val & 0x20) != 0) { - // Write to display buffer - buffer[(Y << 7) + X] = Color; + o = (row * 128) + col; + FrameBuffer[o] = value; } - ARM = val; break; case 1: // Set Color (bits 6 and 7) - Color = ((val ^ 0xFF) >> 6) & 3; + PortLatch[port] = val; + value = (byte)(((val ^ 0xFF) >> 6) & 0x03); break; case 4: // X coordinate, inverted (bits 0-6) - X = (val ^ 0xFF) & 0x7F; + PortLatch[2] = val; + col = (val | 0x80) ^ 0xFF; break; case 5: // Y coordinate, inverted (bits 0-5) - Y = (val ^ 0xFF) & 0x3F; + PortLatch[3] = val; + //sound TODO + row = (val | 0xC0) ^ 0xFF; break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs index 002452e1cd..ccc6d9f234 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs @@ -107,7 +107,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ALU_ClearFlags(); ALU_ADD8_FLAGSONLY_Func(dest, src); - ALU_SetFlags_SZ(tmp); + Regs[ALU0] = tmp; + ALU_SetFlags_SZ(ALU0); if (c == 0 && ic == 0) { @@ -229,7 +230,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } */ - public void ADDS_Func(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) + public void ADDS_FuncX(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { int Reg16_d = Regs[dest_l]; int Reg16_s = Regs[src_l]; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index df96c4aa1c..42d0ac06c2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -307,9 +307,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // test operand against status register case OP_BT: - instr_pntr = 0; if ((Regs[W] & cur_instr[instr_pntr++]) != 0) { + instr_pntr = 0; PopulateCURINSTR( // L ROMC_01, @@ -326,6 +326,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } else { + instr_pntr = 0; PopulateCURINSTR( // S ROMC_03_S, @@ -342,9 +343,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Branch based on ISARL case OP_BR7: - instr_pntr = 0; if ((Regs[ISAR] & 7) == 7) { + instr_pntr = 0; PopulateCURINSTR( // S ROMC_03_S, // DB/IO <- ((PC0)); PC0++ @@ -359,6 +360,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } else { + instr_pntr = 0; PopulateCURINSTR( // L ROMC_01, @@ -376,9 +378,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // PC0 <- PC0+n+1 case OP_BF: - instr_pntr = 0; if ((Regs[W] & cur_instr[instr_pntr++]) != 0) { + instr_pntr = 0; PopulateCURINSTR( // S ROMC_03_S, // DB/IO <- ((PC0)); PC0++ @@ -393,6 +395,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } else { + instr_pntr = 0; PopulateCURINSTR( // L ROMC_01, @@ -465,7 +468,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // CYCLE LENGTH: L case ROMC_01: Read_Func(DB, PC0l, PC0h); - ADDS_Func(PC0l, PC0h, DB, ZERO); + RegPC0 += (ushort)((SByte) Regs[DB]); break; // The device whose DC0 address addresses a memory word within the address space of that device must place on the data bus the contents @@ -535,7 +538,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // All devices add the 8-bit value on the data bus, treated as a signed binary number, to the data counter // CYCLE LENGTH: L case ROMC_0A: - ADDS_Func(DC0l, DC0h, DB, ZERO); + RegDC0 += (ushort) ((sbyte) Regs[DB]); break; // The device whose address space includes the value in PC1 must place the low order byte of PC1 on the data bus @@ -689,12 +692,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public TraceInfo State(bool disassemble = true) { int bytes_read = 0; - string disasm = disassemble ? Disassemble(RegPC0, ReadMemory, out bytes_read) : "---"; + ushort pc = (ushort)(RegPC0 - 1); + string disasm = disassemble ? Disassemble(pc, ReadMemory, out bytes_read) : "---"; string byte_code = null; for (ushort i = 0; i < bytes_read; i++) { - byte_code += ReadMemory((ushort)(RegPC0 + i)).ToHexString(2); + byte_code += ReadMemory((ushort)(pc + i)).ToHexString(2); if (i < (bytes_read - 1)) { byte_code += " "; @@ -705,7 +709,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { Disassembly = string.Format( "{0:X4}: {1} {2}", - RegPC0, + pc, byte_code.PadRight(12), disasm.PadRight(26)), RegisterInfo = string.Format( From d726a6476fc7a34ba32f34b6969efa6e837848d1 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 27 Apr 2019 07:59:10 -0400 Subject: [PATCH 037/138] Fix #1555 --- .../tools/TAStudio/TAStudio.MenuItems.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 880445af5f..600a0579e6 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -862,7 +862,18 @@ namespace BizHawk.Client.EmuHawk DialogResult result = prompt.ShowDialog(); if (result == DialogResult.OK) { - int val = int.Parse(prompt.PromptText); + int val = 0; + try + { + val = int.Parse(prompt.PromptText); + } + catch + { + val = 100; + + MessageBox.Show("Invalid Entry. Restoring Default.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + if (val > 0) { CurrentTasMovie.ChangeLog.MaxSteps = val; From 7c3d4f7e488f3f1b948cc907e92f756d1138c3e0 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 27 Apr 2019 10:30:50 -0400 Subject: [PATCH 038/138] use previous value --- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 600a0579e6..672ec1656f 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -869,9 +869,7 @@ namespace BizHawk.Client.EmuHawk } catch { - val = 100; - - MessageBox.Show("Invalid Entry. Restoring Default.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Invalid Entry.", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } if (val > 0) From 865e1cb10af75a2aecd27c881051217463fbbf2f Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 30 Apr 2019 16:48:30 +1000 Subject: [PATCH 039/138] Update Win10 version 1803 goes EOL 2019-11-12 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a28abebc08..2887b247a5 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ Before you start (by running `EmuHawk.exe`), you'll need the following Windows-o BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive — as long as you keep all the files together, and the prerequisites are installed when you go to run it. -Following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet), Win10 is supported from 1709 "Redstone 3", Win8 is supported from 8.1, and Win7 is supported from SP1 (ends Jan 2020, upgrade to Win10 or try [ReactOS](https://reactos.org/joining/faqs)). +Following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet), Win10 is supported from 1803 "Redstone 4", Win8 is supported from 8.1, and Win7 is supported from SP1 (ends Jan 2020, upgrade to Win10 or try [ReactOS](https://reactos.org/joining/faqs)). A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for users of Windows XP and/or 32-bit Windows. Being in the 1.x series, many bugs remain and features are missing. From 38a8cddcfceaec67d7a1559fc58d8f2e913d592d Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 30 Apr 2019 22:44:12 +1000 Subject: [PATCH 040/138] Fix spelling of Intellivision --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2887b247a5..2660602c32 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Supported consoles and computers: * Bandai WonderSwan + Color * CBM Commodore 64 * Coleco Industries ColecoVision -* Mattel IntelliVision +* Mattel Intellivision * NEC * PC Engine / TurboGrafx-16 + SuperGrafx + CD * PC-FX @@ -245,7 +245,7 @@ Commodore 64 | C64Hawk | ColecoVision | ColecoHawk | Game Boy / Color | GBHawk | Gambatte Game Boy Advance | mGBA | VBA-Next -IntelliVision | IntelliHawk | +Intellivision | IntelliHawk | N64 | Mupen64Plus | Neo Geo Pocket / Color | NeoPop | NES | NesHawk | QuickNes | From 1ee19f17e1139ca21591ff6844cf6dcc8d6805f2 Mon Sep 17 00:00:00 2001 From: feos Date: Fri, 3 May 2019 11:32:59 +0300 Subject: [PATCH 041/138] OpenAdvanced_OpenRom wasn't working since 2.2.1 nobody noticed because nobody uses it. then why do we have it? maybe it could be fixed by better routing. yet again nobody uses it. --- BizHawk.Client.EmuHawk/MainForm.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 523042f42a..10120587b1 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -3642,7 +3642,9 @@ namespace BizHawk.Client.EmuHawk if (ioa is OpenAdvanced_OpenRom) { var ioa_openrom = (OpenAdvanced_OpenRom)ioa; - path = ioa_openrom.Path; + // path already has the right value, while ioa.Path is null (interestingly, these are swapped below) + // I doubt null is meant to be assigned here, and it just prevents gameload + //path = ioa_openrom.Path; } CoreFileProvider.SyncCoreCommInputSignals(nextComm); From 3abf6dc5bb685884ce9ce3a2a0920b57eb7e2af1 Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 5 May 2019 11:18:27 +0300 Subject: [PATCH 042/138] Update README.md In-game Saves and DISCLAIMER --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 2660602c32..5cbaee75de 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,28 @@ Running scripts have a "▶️" beside their name, and stopped scripts (manually "Toggle script" does just that (paused scripts are stopped). "Reload script" stops it and loads changes to the file, running scripts are then started again. "Remove script" stops it and removes it from the list. +#### In-game Saves + +Games may internally [save your progress](https://en.wikipedia.org/wiki/Saved_game) into memory (SRAM, memory cards) or file. When this happens, BizHawk stores this in-game save in the Operating System memory and makes the `File` > `Save RAM` menu bold. + +BizHawk can write in-game saves to disk - this is called flushing. Every time you save in the game (not to be confusing with *emulator savestates*), you should backup your saves! Go to `File` > `Save RAM` and hit `Flush Save Ram`. Note that some systems use SRAM for irrelevant tasks and store temporary data there, and the menu may become bold without in-game saves involved. Be aware when the game is *supposed to save* and flush accordingly. + +BizHawk can be configured to flush saves to disk automatically in `Config` > `Customize` > `Advanced AutoSaveRAM`. Opon closing the ROM (which includes any core reboot) BizHawk may try to flush save RAM automatically as well. + +``` + +DISCLAIMER + +Automatic flushing is extremely unreliable and not being maintained. +It may corrupt your previous saves! +It will be completely removed in future. +Develop a habit to always flush saves manually every time you save in the game. +Make backups of in-game save files! +If you don't flush saves manually and backup them, and something breaks, you're on your own. +If your save has been corrupted, there's nothing we can do about it. + +``` + [to top](#bizhawk) ### TASing From a2289dde100fd870a8731d37799061991af2d68e Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 5 May 2019 11:24:59 +0300 Subject: [PATCH 043/138] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cbaee75de..2594b56d72 100644 --- a/README.md +++ b/README.md @@ -225,7 +225,7 @@ Automatic flushing is extremely unreliable and not being maintained. It may corrupt your previous saves! It will be completely removed in future. Develop a habit to always flush saves manually every time you save in the game. -Make backups of in-game save files! +Make backups of the flushed save files! If you don't flush saves manually and backup them, and something breaks, you're on your own. If your save has been corrupted, there's nothing we can do about it. From ca5585dfaa51f7ac303096e7f30aede54ff34557 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 5 May 2019 07:53:28 -0400 Subject: [PATCH 044/138] A2600: boost grip controller --- .../tools/VirtualPads/schema/A26Schema.cs | 69 +++++++++++++++++++ .../Atari/2600/Atari2600ControllerDeck.cs | 1 + .../Atari/2600/Atari2600Controllers.cs | 65 +++++++++++++++++ .../Consoles/Atari/2600/Tia/TIA.cs | 4 +- 4 files changed, 137 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A26Schema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A26Schema.cs index 900eac92db..c15d0f3095 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A26Schema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A26Schema.cs @@ -39,6 +39,8 @@ namespace BizHawk.Client.EmuHawk return StandardController(controller); case Atari2600ControllerTypes.Paddle: return PaddleController(controller); + case Atari2600ControllerTypes.BoostGrip: + return BoostGripController(controller); case Atari2600ControllerTypes.Driving: return DrivingController(controller); } @@ -145,6 +147,73 @@ namespace BizHawk.Client.EmuHawk }; } + private static PadSchema BoostGripController(int controller) + { + return new PadSchema + { + DisplayName = $"Player {controller}", + IsConsole = false, + DefaultSize = new Size(174, 74), + MaxSize = new Size(174, 74), + Buttons = new[] + { + new PadSchema.ButtonSchema + { + Name = $"P{controller} Up", + DisplayName = "", + Icon = Properties.Resources.BlueUp, + Location = new Point(23, 15), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Down", + DisplayName = "", + Icon = Properties.Resources.BlueDown, + Location = new Point(23, 36), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Left", + DisplayName = "", + Icon = Properties.Resources.Back, + Location = new Point(2, 24), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Right", + DisplayName = "", + Icon = Properties.Resources.Forward, + Location = new Point(44, 24), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Button", + DisplayName = "B", + Location = new Point(132, 24), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Button 1", + DisplayName = "B1", + Location = new Point(68, 36), + Type = PadSchema.PadInputType.Boolean + }, + new PadSchema.ButtonSchema + { + Name = $"P{controller} Button 2", + DisplayName = "B2", + Location = new Point(100, 36), + Type = PadSchema.PadInputType.Boolean + } + } + }; + } + private static PadSchema DrivingController(int controller) { return new PadSchema diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600ControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600ControllerDeck.cs index 2578acdd99..baa68e39ec 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600ControllerDeck.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600ControllerDeck.cs @@ -15,6 +15,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 typeof(UnpluggedController), // Order must match Atari2600ControllerTypes enum values typeof(StandardController), typeof(PaddleController), + typeof(BoostGripController), typeof(DrivingController) }; diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600Controllers.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600Controllers.cs index bbe1d0333e..1b44676c6d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600Controllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600Controllers.cs @@ -12,6 +12,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 Unplugged, Joystick, Paddle, + BoostGrip, Driving } @@ -161,6 +162,70 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 } } + public class BoostGripController : IPort + { + public BoostGripController(int portNum) + { + PortNum = portNum; + Definition = new ControllerDefinition + { + BoolButtons = BaseDefinition + .Select(b => $"P{PortNum} " + b) + .ToList() + }; + } + + public int PortNum { get; } + + public void SyncState(Serializer ser) + { + // Nothing todo, I think + } + + public ControllerDefinition Definition { get; } + + private static readonly string[] BaseDefinition = + { + "Up", "Down", "Left", "Right", "Button", + "Button 1", + "Button 2" + }; + + public byte Read(IController c) + { + byte result = 0xFF; + + if (c.IsPressed($"P{PortNum} Up")) { result &= 0xEF; } + if (c.IsPressed($"P{PortNum} Down")) { result &= 0xDF; } + if (c.IsPressed($"P{PortNum} Left")) { result &= 0xBF; } + if (c.IsPressed($"P{PortNum} Right")) { result &= 0x7F; } + if (c.IsPressed($"P{PortNum} Button")) { result &= 0xF7; } + + return result; + } + + public int Read_Pot(IController c, int pot) + { + bool is_pressed = false; + + if (pot == 0) + { + is_pressed = c.IsPressed($"P{PortNum} Button 1"); + } + else + { + is_pressed = c.IsPressed($"P{PortNum} Button 2"); + } + + if (is_pressed) + { + return 10; + } + + return 65535; + } + } + public class DrivingController : IPort { public DrivingController(int portNum) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs index 49d42d352a..93f6a3b1ad 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs @@ -908,7 +908,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 // 6105 roughly centers the paddle in Breakout if (maskedAddr == 0x08) // INPT0 { - if (_core.ReadPot1(0)>0 && _capCharging && _core.Cpu.TotalExecutedCycles - _capChargeStart >= _core.ReadPot1(0)) + if (_core.ReadPot1(0) > 0 && _capCharging && _core.Cpu.TotalExecutedCycles - _capChargeStart >= _core.ReadPot1(0)) { coll = 0x80; } @@ -922,7 +922,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 if (maskedAddr == 0x09) // INPT1 { - if (_core.ReadPot1(1) > 0 && _capCharging && _core.Cpu.TotalExecutedCycles - _capChargeStart >= _core.ReadPot1(1)) + if (_core.ReadPot1(1) > 0 && _capCharging && _core.Cpu.TotalExecutedCycles - _capChargeStart >= _core.ReadPot1(1)) { coll = 0x80; } From 86461b0692c4649fd57a43d0c09e85f0a00a083e Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 5 May 2019 08:03:43 -0400 Subject: [PATCH 045/138] A2600: gamedb update --- Assets/gamedb/gamedb_a2600.txt | 58 +++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Assets/gamedb/gamedb_a2600.txt b/Assets/gamedb/gamedb_a2600.txt index 93ce35d520..ac1e2450b7 100644 --- a/Assets/gamedb/gamedb_a2600.txt +++ b/Assets/gamedb/gamedb_a2600.txt @@ -50,9 +50,9 @@ sha1:a65f487740069640952803218b70580b2fb724b7 A-Team, The (Atari) (Prototype) ( sha1:821cffe5f5940b2951f280d07d2691e140f54ad2 A-Team, The (Atari) (Prototype) (PAL-60) [!] A26 m=F8;NTSC=true sha1:53413577afe7def1d390e3892c45822405513c07 A-Team, The (Atari) (Prototype) [!] A26 m=F8;NTSC=true sha1:3607f46475f4b1b8989f7327f90ca53a4ac0e9fe A-VCS-tec Challenge (beta 5) (PD) A26 m=F8;NTSC=true -sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 m=F6;PAL=true -sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 m=F8;PAL=true -sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 m=F8;NTSC=true +sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 SP_FRAME=true;m=F6;PAL=true +sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 SP_FRAME=true;m=F8;PAL=true +sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 SP_FRAME=true;m=F8;NTSC=true sha1:9e6fb047ee9fa0a454ca23673ed9693430032dc6 Action Force (1983) (Parker Bros) (PAL) [!] A26 m=4K;PAL=true sha1:bfcc35feee3713f5028122844d027c88a84772b6 2 Pak Special Red - Motocross,Boom Bang (1990) (PAL) [!] A26 m=F6;PAL=true sha1:8a503416ca6f2404bc52382e337f31238bba9534 3-D Corridor Demo 2 (29-03-2003) (MP) A26 m=4K;NTSC=true @@ -68,13 +68,13 @@ sha1:317a7b8693af44095c23437253a32cc748824ccf Adventure (Color Scrolling) [h1] sha1:4ffe36c5113305714e27c72d7f3abecc9b08a630 Adventure (New Graphics) [h1] A26 m=4K;NTSC=true sha1:0b0875ad1bd494c9dd8de4ff0a06938e699f60d5 Adventure 34 by Kurt Howe (Adventure Hack) A26 m=4K;NTSC=true sha1:8501444b12f7f9e2103cd2bcf0c8d3f5b7536569 Adventure II (Adventure Hack) A26 m=4K;NTSC=true -sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 m=4K;NTSC=true +sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true sha1:6e420544bf91f603639188824a2b570738bb7e02 Adventures on GX-12 (Telegames) (PAL) [!] A26 m=4K;PAL=true sha1:3b02e7dacb418c44d0d3dc77d60a9663b90b0fbc Air Raid (Men-A-Vision) A26 m=4K;NTSC=true -sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true -sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 m=4K;NTSC=true -sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 m=4K;NTSC=true -sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 m=4K;NTSC=true +sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true +sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 SP_FRAME=true;m=4K;NTSC=true +sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 SP_FRAME=true;m=4K;NTSC=true sha1:b96c7a509bf610f61f82377bfd506db3dba2b423 Air-Sea Battle (1977) (Atari) (PAL) [!] A26 m=2K;PAL=true sha1:a746fdc82b336a9d499bf17f50b41e0193ba595e Air-Sea Battle (1977) (Atari) [!] A26 m=2K;NTSC=true sha1:d3897fc60585e420ae816a2db909400f6cbadd88 Air-Sea Battle (1977) (Atari) [o1] A26 m=2K;NTSC=true @@ -323,9 +323,9 @@ sha1:67387d0d3d48a44800c44860bf15339a81f41aa9 Bugs (1982) (Data Age) [!] A26 m sha1:a8aedea627c67c38032cdde441fb98dad226916a Bugs (1983) (Gameworld) (PAL) [!] A26 m=4K;PAL=true sha1:9c0e13af336a986c271fe828fafdca250afba647 Bugs Bunny (Atari) (Prototype) [!] A26 m=F8;NTSC=true sha1:13534da5c382ed20d070ffe93f35c4c11b36e1bc Bullet Demo (20-12-2002) (CT) A26 m=4K;NTSC=true -sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 m=F6;NTSC=true -sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 m=E7;NTSC=true -sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 m=F8;PAL=true +sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 SP_FRAME=true;m=F6;NTSC=true +sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 SP_FRAME=true;m=E7;NTSC=true +sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 SP_FRAME=true;m=F8;PAL=true sha1:ad48f4952e867a2b97900d965b69f50fddf8ba2d Bumper Bash (1983) (Spectravideo) (PAL) [!] A26 m=4K;PAL=true sha1:6c199782c79686dc0cbce6d5fe805f276a86a3f5 Bumper Bash (1983) (Spectravideo) A26 m=4K;NTSC=true sha1:49e01b8048ae344cb65838f6b1c1de0e1f416f29 Burgertime (1982) (Mattel) A26 SP_RESET=true;m=E7;NTSC=true @@ -855,8 +855,8 @@ sha1:6b9e591cc53844795725fc66c564f0364d1fbe40 Frogger II - Threedeep! (1983) (P sha1:bce92de22fc8950f0eebb643d96fe9fa5dba2b72 Frogger II - Threedeep! (1984) (Parker Bros) (PAL) [!] A26 m=E0;PAL=true sha1:5215cf9051e833482e115d16ff90fee5f01c3e84 Frogger Preview (1982) (Starpath) [a1] A26 m=AR;NTSC=true sha1:2edb64be1bb6f4215f520ec2f487b19f29724b8d Frogger Preview (1982) (Starpath) A26 m=AR;NTSC=true -sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true -sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 m=4K;NTSC=true +sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true sha1:cf32bfcd7f2c3b7d2a6ad2f298aea2dfad8242e7 Front Line (1982) (Coleco) A26 m=F8;NTSC=true sha1:58a6f82434ccf49ca420596809ce9545373845a2 Frostbite (1983) (Activision) (PAL) [!] A26 m=4K;PAL=true sha1:8ad03667bbf73d3c7760cb82f2c4442f8745483c Frostbite (1983) (Activision) (PAL) [p1][!] A26 m=4K;PAL=true @@ -1256,9 +1256,9 @@ sha1:128c3a98d78b043edabe8964cf7998955342fa2d Kiss Meets Pacman (Cody Pittman) sha1:45623a1c8fb5074de98c37f005edd5b1d0937dae Klax (1990) (Atari) (PAL) [!] A26 m=F6SC;PAL=true sha1:3162259c6dbfbb57a2ea41d849155702151ee39b Klax (1990) (Atari) A26 m=F6SC;NTSC=true sha1:759597d1d779cfdfd7aa30fd28a59acc58ca2533 Knight on the Town (1982) (Playaround) A26 m=4K;NTSC=true -sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 m=4K;NTSC=true -sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 m=4K;NTSC=true -sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 m=4K;NTSC=true +sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true +sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 SP_FRAME=true;m=4K;NTSC=true +sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 SP_FRAME=true;m=4K;NTSC=true sha1:82e64366795b011c2a2f1755bf899cc2c0617fe8 Krieg Der Sterne (Atlantis-Ariola) (PAL) [!] A26 m=4K;PAL=true sha1:4bdf1cf73316bdb0002606facf11b6ddcb287207 Krull (1983) (Atari) [!] A26 m=F8;NTSC=true sha1:07a1c1b1a2297c4edde0e16f610b5ec23c775217 Krull (CCE) A26 m=F8;NTSC=true @@ -1305,9 +1305,9 @@ sha1:4f3e51f68c10d2fa7c4b9764b0cb81fdded0fde4 Lilly Adventure (Starsoft) (NTSC sha1:63f4776aa4c35d124001918b733cdb4d46dfbe9b Lilly Adventure (Starsoft) (PAL) [!] A26 m=4K;PAL=true sha1:5425578808363ee72dbba6195533549679137777 Lines Demo (Eckhard Stolberg) (PAL) (PD) A26 m=2K;PAL=true sha1:fe208ad775cbf9523e7a99632b9f10f2c9c7aa87 Lochjaw (1982) (Apollo) A26 m=4K;NTSC=true -sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true -sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 m=4K;NTSC=true -sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 m=4K;PAL=true +sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true +sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true sha1:ef02fdb94ac092247bfcd5f556e01a68c06a4832 Lord of The Rings (1983) (Parker Bros) (Prototype) A26 m=E0;NTSC=true sha1:43575ed97f8a585c5bae6fb1a7b2133c87b4d256 Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) [a1] A26 m=4K;NTSC=true sha1:721514e5c31c8f2b30b4a2bf2cda69a810cac75b Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) A26 m=4K;NTSC=true @@ -1359,8 +1359,8 @@ sha1:6ef010513e01520560616994cbe3f10995490996 Max3 (2001) (Maxime Beauvais) (PD sha1:a2b13017d759346174e3d8dd53b6347222d3b85d Maze (AKA Slot Racers) (1978) (Sears) [!] A26 m=2K;NTSC=true sha1:05f8d0e9f9bec192dfe5947965039817c8c390df Maze (AKA Slot Racers) (1978) (Sears) [o1] A26 m=2K;NTSC=true sha1:365a3af336d71f8f80345de9fcebb100f5141182 Maze 003 Demo (PD) A26 m=4K;NTSC=true -sha1:4a255c1d277f9ceb98dfe61ec2c6f7537ca4e7bf Maze Craze (1978) (Atari) (PAL) [!] A26 m=4K;PAL=true -sha1:aba25089d87cd6fee8d206b880baa5d938aae255 Maze Craze (1978) (Atari) A26 m=4K;NTSC=true +sha1:4a255c1d277f9ceb98dfe61ec2c6f7537ca4e7bf Maze Craze (1978) (Atari) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:aba25089d87cd6fee8d206b880baa5d938aae255 Maze Craze (1978) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true sha1:43c309177fde4adf59c99ba5d3865df2a588a79e Maze Demo 1 (PD) A26 m=4K;NTSC=true sha1:648e91958afdf264e8e6b45521ecb542fb340586 Maze Demo 2 (PD) A26 m=4K;NTSC=true sha1:0103b35b1aef6b10c1c0a44b213ebf30af708df6 McDonald's (1983) (Parker Bros) (Prototype) [!] A26 m=4K;NTSC=true @@ -1559,9 +1559,9 @@ sha1:03eb4a3b3db04c1782e1a91d27ea515163d258fb Oink! (CCE) A26 m=4K;NTSC=true sha1:7feef3965706bc64f0f0a940149b2523e0735ce6 Okie Dokie (4K) (PD) A26 m=4K;NTSC=true sha1:7bd1cbddefcf3bd24da570be015234d0c444a7e5 Okie Dokie (Older) (PD) A26 m=2K;NTSC=true sha1:8a47b1930971f271a935c50d423e152aaea6ac59 Okie Dokie (PD) A26 m=2K;NTSC=true -sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 m=F6SC;NTSC=true -sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 m=FA;NTSC=true -sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 m=FA;NTSC=true +sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 SP_FRAME=true;m=F6SC;NTSC=true +sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 SP_FRAME=true;m=FA;NTSC=true +sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 SP_FRAME=true;m=FA;NTSC=true sha1:fbf180f8f35178099244bc1ae341ccff87838907 One Blue Bar Demo (PD) A26 m=4K;NTSC=true sha1:e52ca6e73c931ef71c63e164704fb398086e4308 One On One by Angelino (Basketball Hack) A26 m=2K;NTSC=true sha1:98007f26356b4032a2ae4e9fddea5a38a988eb13 Oscar's Trash Race (1983) (Atari) (PAL) [!] A26 m=F8;PAL=true @@ -2302,8 +2302,8 @@ sha1:7c2a2ddbdef639ed2985ce66ae717b2285a94ae0 Star Raiders (1982) (Atari) (PAL) sha1:e10cce1a438c82bd499e1eb31a3f07d7254198f5 Star Raiders (1982) (Atari) A26 m=F8;NTSC=true sha1:d2b6290afb81bad126321d923d222c26e2de5fa8 Star Ship - Outer Space (1977) [o1] A26 m=2K;NTSC=true sha1:878e78ed46e29c44949d0904a2198826e412ed81 Star Ship - Outer Space (1977) A26 m=2K;NTSC=true -sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 m=4K;NTSC=true -sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 m=4K;PAL=true +sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true +sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true sha1:667a528e8cf3fd7f533cf67993f48bcc3c100e0d Star Trek - Strategic Operations Simulator (1983) (Sega) (PAL) [!] A26 m=F8;PAL=true sha1:61a3ebbffa0bfb761295c66e189b62915f4818d9 Star Trek - Strategic Operations Simulator (1983) (Sega) A26 m=F8;NTSC=true sha1:417bb89e1117413321ffba48a17e005b2687680b Star Voyager (1982) (CCE) [!] A26 m=4K;NTSC=true @@ -2554,8 +2554,8 @@ sha1:ccf422636180f24becaa8af0cc391f95e599a330 Tunnel Demo (28-03-2003) (AD) A26 sha1:0f6552a0afe40cc1c448313569db8c9a8cda6d21 Tunnel Demo (Cycling Colours 2) (29-03-2003) (AD) A26 m=4K;NTSC=true sha1:8dad50a3918c7462811c2def42f289cd123822af Tunnel Demo (Red Spiral) (30-03-2003) (AD) A26 m=4K;NTSC=true sha1:4df103678f9c88b017e64f1e14e741fc6e15340c Tunnel Demo 2 (27-03-2003) (CT) A26 m=4K;NTSC=true -sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 m=FA;NTSC=true -sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 m=FA;NTSC=true +sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 SP_FRAME=true;m=FA;NTSC=true +sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 SP_FRAME=true;m=FA;NTSC=true sha1:0921fab66ce4b712701326ce105e1a84ac47b497 Turbo (Coleco) Prototype Fake v0.1 (TJ) A26 m=2K;NTSC=true sha1:b594a9acedd4734070776bf69d0f08abb5c261bf Turbo WIP (TJ) A26 m=F8;NTSC=true sha1:1162fe46977f01b4d25efab813e0d05ec90aeadc Turmoil (1982) (20th Century Fox) [!] A26 m=4K;NTSC=true @@ -2596,7 +2596,7 @@ sha1:082a7bc7d0fdbf307501cd146e18ed3d03b9ec0f Vertical Ship Demo 1 (PD) A26 m= sha1:1d641abfb95e3b4b7abaad42a8760c8c9ce993a6 Vertically Scrolling Playfield (02-02-2003) (Aaron Bergstrom) A26 m=4K;NTSC=true sha1:24c1c6e1a495137bec53818c2cd8bd83c8336d21 Video Checkers (1978) (Atari) (PAL) [!] A26 m=4K;PAL=true sha1:babae88a832b76d8c5af6ea63b8f10a0da5bb992 Video Checkers (1978) (Atari) A26 m=4K;NTSC=true -sha1:043ef523e4fcb9fc2fc2fda21f15671bf8620fc3 Video Chess (1978) (Atari) A26 m=4K;NTSC=true +sha1:043ef523e4fcb9fc2fc2fda21f15671bf8620fc3 Video Chess (1978) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true sha1:3f2ad3666eb713b20484e3677d8e1cac8fbd323e Video Cube (CCE) A26 m=4K;NTSC=true sha1:1554b146d076b64776bf49136cea01f60eeba4c1 Video Jogger (Exus) (PAL) A26 m=4K;PAL=true sha1:19d4f52d399c2ab70e411be51b715341db7a41bf Video Life (CommaVid) [h1] A26 m=CV;NTSC=true From c036e670bee39af9bd9a7bd20e42a194f9f00060 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 6 May 2019 06:24:56 -0400 Subject: [PATCH 046/138] A2600: another DB update --- Assets/gamedb/gamedb_a2600.txt | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Assets/gamedb/gamedb_a2600.txt b/Assets/gamedb/gamedb_a2600.txt index ac1e2450b7..cac5fb3048 100644 --- a/Assets/gamedb/gamedb_a2600.txt +++ b/Assets/gamedb/gamedb_a2600.txt @@ -50,9 +50,9 @@ sha1:a65f487740069640952803218b70580b2fb724b7 A-Team, The (Atari) (Prototype) ( sha1:821cffe5f5940b2951f280d07d2691e140f54ad2 A-Team, The (Atari) (Prototype) (PAL-60) [!] A26 m=F8;NTSC=true sha1:53413577afe7def1d390e3892c45822405513c07 A-Team, The (Atari) (Prototype) [!] A26 m=F8;NTSC=true sha1:3607f46475f4b1b8989f7327f90ca53a4ac0e9fe A-VCS-tec Challenge (beta 5) (PD) A26 m=F8;NTSC=true -sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 SP_FRAME=true;m=F6;PAL=true -sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 SP_FRAME=true;m=F8;PAL=true -sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 SP_FRAME=true;m=F8;NTSC=true +sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 SP_RESET=true;m=F6;PAL=true +sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 SP_RESET=true;m=F8;PAL=true +sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 SP_RESET=true;m=F8;NTSC=true sha1:9e6fb047ee9fa0a454ca23673ed9693430032dc6 Action Force (1983) (Parker Bros) (PAL) [!] A26 m=4K;PAL=true sha1:bfcc35feee3713f5028122844d027c88a84772b6 2 Pak Special Red - Motocross,Boom Bang (1990) (PAL) [!] A26 m=F6;PAL=true sha1:8a503416ca6f2404bc52382e337f31238bba9534 3-D Corridor Demo 2 (29-03-2003) (MP) A26 m=4K;NTSC=true @@ -68,13 +68,13 @@ sha1:317a7b8693af44095c23437253a32cc748824ccf Adventure (Color Scrolling) [h1] sha1:4ffe36c5113305714e27c72d7f3abecc9b08a630 Adventure (New Graphics) [h1] A26 m=4K;NTSC=true sha1:0b0875ad1bd494c9dd8de4ff0a06938e699f60d5 Adventure 34 by Kurt Howe (Adventure Hack) A26 m=4K;NTSC=true sha1:8501444b12f7f9e2103cd2bcf0c8d3f5b7536569 Adventure II (Adventure Hack) A26 m=4K;NTSC=true -sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true +sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true sha1:6e420544bf91f603639188824a2b570738bb7e02 Adventures on GX-12 (Telegames) (PAL) [!] A26 m=4K;PAL=true sha1:3b02e7dacb418c44d0d3dc77d60a9663b90b0fbc Air Raid (Men-A-Vision) A26 m=4K;NTSC=true -sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true -sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true -sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 SP_FRAME=true;m=4K;NTSC=true -sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 SP_FRAME=true;m=4K;NTSC=true +sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true +sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true +sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 SP_RESET=true;m=4K;NTSC=true +sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 SP_RESET=true;m=4K;NTSC=true sha1:b96c7a509bf610f61f82377bfd506db3dba2b423 Air-Sea Battle (1977) (Atari) (PAL) [!] A26 m=2K;PAL=true sha1:a746fdc82b336a9d499bf17f50b41e0193ba595e Air-Sea Battle (1977) (Atari) [!] A26 m=2K;NTSC=true sha1:d3897fc60585e420ae816a2db909400f6cbadd88 Air-Sea Battle (1977) (Atari) [o1] A26 m=2K;NTSC=true @@ -323,9 +323,9 @@ sha1:67387d0d3d48a44800c44860bf15339a81f41aa9 Bugs (1982) (Data Age) [!] A26 m sha1:a8aedea627c67c38032cdde441fb98dad226916a Bugs (1983) (Gameworld) (PAL) [!] A26 m=4K;PAL=true sha1:9c0e13af336a986c271fe828fafdca250afba647 Bugs Bunny (Atari) (Prototype) [!] A26 m=F8;NTSC=true sha1:13534da5c382ed20d070ffe93f35c4c11b36e1bc Bullet Demo (20-12-2002) (CT) A26 m=4K;NTSC=true -sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 SP_FRAME=true;m=F6;NTSC=true -sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 SP_FRAME=true;m=E7;NTSC=true -sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 SP_FRAME=true;m=F8;PAL=true +sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 SP_RESET=true;m=F6;NTSC=true +sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 SP_RESET=true;m=E7;NTSC=true +sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 SP_RESET=true;m=F8;PAL=true sha1:ad48f4952e867a2b97900d965b69f50fddf8ba2d Bumper Bash (1983) (Spectravideo) (PAL) [!] A26 m=4K;PAL=true sha1:6c199782c79686dc0cbce6d5fe805f276a86a3f5 Bumper Bash (1983) (Spectravideo) A26 m=4K;NTSC=true sha1:49e01b8048ae344cb65838f6b1c1de0e1f416f29 Burgertime (1982) (Mattel) A26 SP_RESET=true;m=E7;NTSC=true @@ -855,8 +855,8 @@ sha1:6b9e591cc53844795725fc66c564f0364d1fbe40 Frogger II - Threedeep! (1983) (P sha1:bce92de22fc8950f0eebb643d96fe9fa5dba2b72 Frogger II - Threedeep! (1984) (Parker Bros) (PAL) [!] A26 m=E0;PAL=true sha1:5215cf9051e833482e115d16ff90fee5f01c3e84 Frogger Preview (1982) (Starpath) [a1] A26 m=AR;NTSC=true sha1:2edb64be1bb6f4215f520ec2f487b19f29724b8d Frogger Preview (1982) (Starpath) A26 m=AR;NTSC=true -sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true -sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true +sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true +sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true sha1:cf32bfcd7f2c3b7d2a6ad2f298aea2dfad8242e7 Front Line (1982) (Coleco) A26 m=F8;NTSC=true sha1:58a6f82434ccf49ca420596809ce9545373845a2 Frostbite (1983) (Activision) (PAL) [!] A26 m=4K;PAL=true sha1:8ad03667bbf73d3c7760cb82f2c4442f8745483c Frostbite (1983) (Activision) (PAL) [p1][!] A26 m=4K;PAL=true @@ -1256,9 +1256,9 @@ sha1:128c3a98d78b043edabe8964cf7998955342fa2d Kiss Meets Pacman (Cody Pittman) sha1:45623a1c8fb5074de98c37f005edd5b1d0937dae Klax (1990) (Atari) (PAL) [!] A26 m=F6SC;PAL=true sha1:3162259c6dbfbb57a2ea41d849155702151ee39b Klax (1990) (Atari) A26 m=F6SC;NTSC=true sha1:759597d1d779cfdfd7aa30fd28a59acc58ca2533 Knight on the Town (1982) (Playaround) A26 m=4K;NTSC=true -sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true -sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 SP_FRAME=true;m=4K;NTSC=true -sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 SP_FRAME=true;m=4K;NTSC=true +sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true +sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 SP_RESET=true;m=4K;NTSC=true +sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 SP_RESET=true;m=4K;NTSC=true sha1:82e64366795b011c2a2f1755bf899cc2c0617fe8 Krieg Der Sterne (Atlantis-Ariola) (PAL) [!] A26 m=4K;PAL=true sha1:4bdf1cf73316bdb0002606facf11b6ddcb287207 Krull (1983) (Atari) [!] A26 m=F8;NTSC=true sha1:07a1c1b1a2297c4edde0e16f610b5ec23c775217 Krull (CCE) A26 m=F8;NTSC=true @@ -1305,9 +1305,9 @@ sha1:4f3e51f68c10d2fa7c4b9764b0cb81fdded0fde4 Lilly Adventure (Starsoft) (NTSC sha1:63f4776aa4c35d124001918b733cdb4d46dfbe9b Lilly Adventure (Starsoft) (PAL) [!] A26 m=4K;PAL=true sha1:5425578808363ee72dbba6195533549679137777 Lines Demo (Eckhard Stolberg) (PAL) (PD) A26 m=2K;PAL=true sha1:fe208ad775cbf9523e7a99632b9f10f2c9c7aa87 Lochjaw (1982) (Apollo) A26 m=4K;NTSC=true -sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 SP_FRAME=true;m=4K;PAL=true -sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 SP_FRAME=true;m=4K;NTSC=true -sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true +sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true +sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 SP_RESET=true;m=4K;PAL=true sha1:ef02fdb94ac092247bfcd5f556e01a68c06a4832 Lord of The Rings (1983) (Parker Bros) (Prototype) A26 m=E0;NTSC=true sha1:43575ed97f8a585c5bae6fb1a7b2133c87b4d256 Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) [a1] A26 m=4K;NTSC=true sha1:721514e5c31c8f2b30b4a2bf2cda69a810cac75b Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) A26 m=4K;NTSC=true @@ -1559,9 +1559,9 @@ sha1:03eb4a3b3db04c1782e1a91d27ea515163d258fb Oink! (CCE) A26 m=4K;NTSC=true sha1:7feef3965706bc64f0f0a940149b2523e0735ce6 Okie Dokie (4K) (PD) A26 m=4K;NTSC=true sha1:7bd1cbddefcf3bd24da570be015234d0c444a7e5 Okie Dokie (Older) (PD) A26 m=2K;NTSC=true sha1:8a47b1930971f271a935c50d423e152aaea6ac59 Okie Dokie (PD) A26 m=2K;NTSC=true -sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 SP_FRAME=true;m=F6SC;NTSC=true -sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 SP_FRAME=true;m=FA;NTSC=true -sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 SP_FRAME=true;m=FA;NTSC=true +sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 SP_RESET=true;m=F6SC;NTSC=true +sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 SP_RESET=true;m=FA;NTSC=true +sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 SP_RESET=true;m=FA;NTSC=true sha1:fbf180f8f35178099244bc1ae341ccff87838907 One Blue Bar Demo (PD) A26 m=4K;NTSC=true sha1:e52ca6e73c931ef71c63e164704fb398086e4308 One On One by Angelino (Basketball Hack) A26 m=2K;NTSC=true sha1:98007f26356b4032a2ae4e9fddea5a38a988eb13 Oscar's Trash Race (1983) (Atari) (PAL) [!] A26 m=F8;PAL=true @@ -2302,8 +2302,8 @@ sha1:7c2a2ddbdef639ed2985ce66ae717b2285a94ae0 Star Raiders (1982) (Atari) (PAL) sha1:e10cce1a438c82bd499e1eb31a3f07d7254198f5 Star Raiders (1982) (Atari) A26 m=F8;NTSC=true sha1:d2b6290afb81bad126321d923d222c26e2de5fa8 Star Ship - Outer Space (1977) [o1] A26 m=2K;NTSC=true sha1:878e78ed46e29c44949d0904a2198826e412ed81 Star Ship - Outer Space (1977) A26 m=2K;NTSC=true -sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 SP_FRAME=true;m=4K;NTSC=true -sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true +sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true +sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 SP_RESET=true;m=4K;PAL=true sha1:667a528e8cf3fd7f533cf67993f48bcc3c100e0d Star Trek - Strategic Operations Simulator (1983) (Sega) (PAL) [!] A26 m=F8;PAL=true sha1:61a3ebbffa0bfb761295c66e189b62915f4818d9 Star Trek - Strategic Operations Simulator (1983) (Sega) A26 m=F8;NTSC=true sha1:417bb89e1117413321ffba48a17e005b2687680b Star Voyager (1982) (CCE) [!] A26 m=4K;NTSC=true @@ -2554,8 +2554,8 @@ sha1:ccf422636180f24becaa8af0cc391f95e599a330 Tunnel Demo (28-03-2003) (AD) A26 sha1:0f6552a0afe40cc1c448313569db8c9a8cda6d21 Tunnel Demo (Cycling Colours 2) (29-03-2003) (AD) A26 m=4K;NTSC=true sha1:8dad50a3918c7462811c2def42f289cd123822af Tunnel Demo (Red Spiral) (30-03-2003) (AD) A26 m=4K;NTSC=true sha1:4df103678f9c88b017e64f1e14e741fc6e15340c Tunnel Demo 2 (27-03-2003) (CT) A26 m=4K;NTSC=true -sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 SP_FRAME=true;m=FA;NTSC=true -sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 SP_FRAME=true;m=FA;NTSC=true +sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 SP_RESET=true;m=FA;NTSC=true +sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 SP_RESET=true;m=FA;NTSC=true sha1:0921fab66ce4b712701326ce105e1a84ac47b497 Turbo (Coleco) Prototype Fake v0.1 (TJ) A26 m=2K;NTSC=true sha1:b594a9acedd4734070776bf69d0f08abb5c261bf Turbo WIP (TJ) A26 m=F8;NTSC=true sha1:1162fe46977f01b4d25efab813e0d05ec90aeadc Turmoil (1982) (20th Century Fox) [!] A26 m=4K;NTSC=true From 47a5ce279804c2c1d152b31b10c5398dbca1ff41 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Tue, 7 May 2019 14:43:36 +0100 Subject: [PATCH 047/138] ChannelF: some more changes --- .../BizHawk.Emulation.Cores.csproj | 6 +- .../Computers/SinclairSpectrum/Machine/ULA.cs | 2 +- .../Consoles/Fairchild/ChannelF/Cart.cs | 16 + .../ChannelF/ChannelF.Controllers.cs | 147 ++++++- .../Fairchild/ChannelF/ChannelF.IEmulator.cs | 7 +- .../Fairchild/ChannelF/ChannelF.IO.cs | 85 ---- .../Fairchild/ChannelF/ChannelF.IStatable.cs | 10 +- .../ChannelF/ChannelF.IVideoProvider.cs | 118 ++---- .../ChannelF/ChannelF.MemoryDomains.cs | 4 +- .../Consoles/Fairchild/ChannelF/ChannelF.cs | 4 +- .../Fairchild/ChannelF/F8/F3850.ALU.cs | 111 +---- .../ChannelF/F8/F3850.Disassembler.cs | 92 ++-- .../Fairchild/ChannelF/F8/F3850.Execute.cs | 82 ++-- .../Fairchild/ChannelF/F8/F3850.Operations.cs | 281 +++++++++++++ .../Fairchild/ChannelF/F8/F3850.Registers.cs | 4 + .../Fairchild/ChannelF/F8/F3850.Tables.cs | 192 ++++++--- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 397 ++++++++++-------- .../Consoles/Fairchild/ChannelF/Memory.cs | 55 +++ .../Consoles/Fairchild/ChannelF/Ports.cs | 188 +++++++++ .../Consoles/Fairchild/ChannelF/Video.cs | 120 ++++++ 20 files changed, 1307 insertions(+), 614 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Cart.cs delete mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 375e04e43d..5ed3b20e4f 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -596,7 +596,6 @@ - @@ -605,12 +604,17 @@ + + + + + diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs index df7541189e..6ab1341a93 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs @@ -940,7 +940,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum return croppedBuffer; case ZXSpectrum.BorderType.None: - // all border sizes now 24 + // all border sizes now 0 var lR__ = BorderLeftWidth; var rR__ = BorderRightWidth; var tR__ = BorderTopHeight; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Cart.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Cart.cs new file mode 100644 index 0000000000..d2d52dda5b --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Cart.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Cartridge and related functions + /// + public partial class ChannelF + { + public byte[] Rom = new byte[4096]; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs index b0fa1ec6bb..80a2ae7931 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.Controllers.cs @@ -1,12 +1,127 @@ using System; using System.Collections.Generic; +using System.Windows.Forms; using BizHawk.Common.BufferExtensions; +using BizHawk.Common.NumberExtensions; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public partial class ChannelF { + public bool[] StateConsole = new bool[4]; + public string[] ButtonsConsole = new string[] + { + "TIME", "MODE", "HOLD", "START" + }; + public byte DataConsole + { + get + { + int w = 0; + for (int i = 0; i < 4; i++) + { + byte mask = (byte) (1 << i); + w = StateConsole[i] ? w | mask : w & ~mask; + } + + return (byte)(w & 0xFF); + } + } + + public bool[] StateRight = new bool[8]; + public string[] ButtonsRight = new string[] + { + "Right", "Left", "Back", "Forward", "CCW", "CW", "Pull", "Push" + }; + public byte DataRight + { + get + { + int w = 0; + for (int i = 0; i < 8; i++) + { + byte mask = (byte)(1 << i); + w = StateRight[i] ? w | mask : w & ~mask; + } + + return (byte)(w & 0xFF); + } + } + + public bool[] StateLeft = new bool[8]; + public string[] ButtonsLeft = new string[] + { + "Right", "Left", "Back", "Forward", "CCW", "CW", "Pull", "Push" + }; + public byte DataLeft + { + get + { + int w = 0; + for (int i = 0; i < 8; i++) + { + byte mask = (byte)(1 << i); + w = StateLeft[i] ? w | mask : w & ~mask; + } + + return (byte)(w & 0xFF); + } + } + + + /// + /// Cycles through all the input callbacks + /// This should be done once per frame + /// + public bool PollInput() + { + bool noInput = true; + + InputCallbacks.Call(); + + lock (this) + { + for (int i = 0; i < ButtonsConsole.Length; i++) + { + var key = ButtonsConsole[i]; + bool prevState = StateConsole[i]; // CTRLConsole.Bit(i); + bool currState = _controller.IsPressed(key); + if (currState != prevState) + { + StateConsole[i] = currState; + noInput = false; + } + } + + for (int i = 0; i < ButtonsRight.Length; i++) + { + var key = "P1 " + ButtonsRight[i]; + bool prevState = StateRight[i]; + bool currState = _controller.IsPressed(key); + if (currState != prevState) + { + StateRight[i] = currState; + noInput = false; + } + } + + for (int i = 0; i < ButtonsLeft.Length; i++) + { + var key = "P2 " + ButtonsLeft[i]; + bool prevState = StateLeft[i]; + bool currState = _controller.IsPressed(key); + if (currState != prevState) + { + StateLeft[i] = currState; + noInput = false; + } + } + } + + return noInput; + } + public ControllerDefinition ChannelFControllerDefinition { get @@ -14,23 +129,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ControllerDefinition definition = new ControllerDefinition(); definition.Name = "ChannelF Controller"; + string pre = "P1 "; + // sticks - List stickL = new List - { - // P1 (left) stick - "P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Button Up", "P1 Button Down", "P1 Rotate Left", "P1 Rotate Right" - }; - - foreach (var s in stickL) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "Left Controller"; - } - List stickR = new List { - // P1 (left) stick - "P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Button Up", "P2 Button Down", "P2 Rotate Left", "P2 Rotate Right" + // P1 (right) stick + pre + "Forward", pre + "Back", pre + "Left", pre + "Right", pre + "CCW", pre + "CW", pre + "Pull", pre + "Push" }; foreach (var s in stickR) @@ -39,6 +144,20 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF definition.CategoryLabels[s] = "Right Controller"; } + pre = "P2 "; + + List stickL = new List + { + // P2 (left) stick + pre + "Forward", pre + "Back", pre + "Left", pre + "Right", pre + "CCW", pre + "CW", pre + "Pull", pre + "Push" + }; + + foreach (var s in stickL) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Left Controller"; + } + // console List consoleButtons = new List { diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs index 026fb361fb..4ce4fcaaa9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs @@ -22,12 +22,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void CalcClock() { - var c = (cpuFreq * 1000000) / refreshRate; + var c = ((cpuFreq * 1000000) / refreshRate) * 4; ClockPerFrame = (int) c; } public bool FrameAdvance(IController controller, bool render, bool renderSound) { + _controller = controller; + _isLag = false; + if (_tracer.Enabled) { CPU.TraceCallback = s => _tracer.Put(s); @@ -37,6 +40,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF CPU.TraceCallback = null; } + _isLag = PollInput(); + while (FrameClock++ < ClockPerFrame) { CPU.ExecuteOne(); diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs deleted file mode 100644 index 7aa343ee03..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IO.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using BizHawk.Common.BufferExtensions; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Consoles.ChannelF -{ - - public partial class ChannelF - { - public byte[] BIOS01 = new byte[1024]; - public byte[] BIOS02 = new byte[1024]; - - public byte[] FrameBuffer = new byte[0x2000]; - - public byte[] Cartridge = new byte[0x2000 - 0x800]; - - public byte[] PortLatch = new byte[64]; - - public byte ReadBus(ushort addr) - { - if (addr < 0x400) - { - // Rom0 - return BIOS01[addr]; - } - else if (addr < 0x800) - { - // Rom1 - return BIOS02[addr - 0x400]; - } - else if (addr < 0x2000) - { - // Cart - return 0; - return Cartridge[addr - 0x800]; - } - else if (addr < 0x2000 + 2048) - { - // Framebuffer - return FrameBuffer[addr - 0x2000]; - } - else - { - return 0xFF; - } - } - - public void WriteBus(ushort addr, byte value) - { - if (addr < 0x400) - { - // Rom0 - } - else if (addr < 0x800) - { - // Rom1 - } - else if (addr < 0x2000) - { - // Cart - } - else if (addr < 0x2000 + 2048) - { - // Framebuffer - FrameBuffer[addr - 0x2000] = value; - } - else - { - - } - } - - public byte ReadPort(ushort addr) - { - return 0x00; - } - - public void WritePort(ushort addr, byte value) - { - PortLatch[addr] = value; - - VID_PortIN(addr, value); - } - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs index d0c2cd3208..101f1fd378 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IStatable.cs @@ -41,7 +41,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void SyncState(Serializer ser) { - + ser.BeginSection("ChannelF"); + ser.Sync(nameof(VRAM), ref VRAM, false); + ser.Sync(nameof(_colour), ref _colour); + ser.Sync(nameof(_x), ref _x); + ser.Sync(nameof(_y), ref _y); + ser.Sync(nameof(_arm), ref _arm); + ser.Sync(nameof(ControllersEnabled), ref ControllersEnabled); + CPU.SyncState(ser); + ser.EndSection(); /* byte[] core = null; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs index 4efe72af28..d67cdd1a94 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -7,95 +7,61 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public partial class ChannelF : IVideoProvider, IRegionable { - public static readonly int[] FPalette = - { - Colors.ARGB(0x10, 0x10, 0x10), // Black - Colors.ARGB(0xFD, 0xFD, 0xFD), // White - Colors.ARGB(0xFF, 0x31, 0x53), // Red - Colors.ARGB(0x02, 0xCC, 0x5D), // Green - Colors.ARGB(0x4B, 0x3F, 0xF3), // Blue - Colors.ARGB(0xE0, 0xE0, 0xE0), // Gray - Colors.ARGB(0x91, 0xFF, 0xA6), // BGreen - Colors.ARGB(0xCE, 0xD0, 0xFF), // BBlue - }; - - public static readonly int[] CMap = - { - 0, 1, 1, 1, - 7, 4, 2, 3, - 5, 4, 2, 3, - 6, 4, 2, 3, - }; - public int _frameHz = 60; - public int[] _vidbuffer = new int[108 * 64]; + public int[] CroppedBuffer = new int[(128*64) * 2]; //new int[102 * 58]; - public int[] GetVideoBuffer() - { - int colour; - int a = 0; - int pOff; - - // rows - for (int y = 0; y < 64; y++) - { - pOff = ((FrameBuffer[(y * 128) + 125] & 0x3) & 0x02) | ((FrameBuffer[(y * 128) + 126] & 0x3) >> 1) << 2; - - for (int x = a; x < a + 128; x++) - { - colour = pOff + (FrameBuffer[x | (y << 7)] & 0x03); - var yM = y * 64; - _vidbuffer[yM + x] = FPalette[CMap[colour]]; - } - } - - return _vidbuffer; - } + #region IVideoProvider public int VirtualWidth => BufferWidth * 2; - public int VirtualHeight => BufferHeight * 2; - public int BufferWidth => 108; // 102 - public int BufferHeight => 64; // 58 - public int BackgroundColor => unchecked((int)0xFF000000); + public int VirtualHeight => (int)((double)BufferHeight * 1.5) * 2; + public int BufferWidth => 128;// 102; + public int BufferHeight => 64; // 58; + public int BackgroundColor => Colors.ARGB(0x00, 0x00, 0x00); public int VsyncNumerator => _frameHz; public int VsyncDenominator => 1; - private int row = 0; - private int col = 0; - private byte value = 0; - - public void VID_PortIN(ushort port, byte val) + public int[] GetVideoBuffer() { - switch (port) + BuildFrame(); + /* + for (int i = 0; i < frameBuffer.Length; i++) { - case 0: - - int o; - PortLatch[port] = val; - if ((val & 0x20) != 0) - { - o = (row * 128) + col; - FrameBuffer[o] = value; - } - break; - - case 1: // Set Color (bits 6 and 7) - PortLatch[port] = val; - value = (byte)(((val ^ 0xFF) >> 6) & 0x03); - break; - case 4: // X coordinate, inverted (bits 0-6) - PortLatch[2] = val; - col = (val | 0x80) ^ 0xFF; - break; - case 5: // Y coordinate, inverted (bits 0-5) - PortLatch[3] = val; - //sound TODO - row = (val | 0xC0) ^ 0xFF; - break; + CroppedBuffer[i] = frameBuffer[i]; + CroppedBuffer[i + frameBuffer.Length] = frameBuffer[i]; } + + return CroppedBuffer; + */ + return frameBuffer; + + // crop to visible area + var lR = 4; + var rR = 128 - BufferWidth - lR; + var tR = 4; + var bR = 64 - BufferHeight - tR; + var sW = 128 - lR - rR; + var startP = 128 * tR; + var endP = 128 * bR; + + int index2 = 0; + + // line by line + for (int i = startP; i < CroppedBuffer.Length - endP; i += sW + lR + rR) + { + // each pixel in each line + for (int p = lR; p < sW + lR + rR - rR; p++) + { + if (index2 == CroppedBuffer.Length) + break; + CroppedBuffer[index2++] = frameBuffer[i + p]; + } + } + + return CroppedBuffer; } + #endregion #region IRegionable diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs index af0370f03b..0f62cab512 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.MemoryDomains.cs @@ -48,8 +48,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { SyncByteArrayDomain("BIOS1", BIOS01); SyncByteArrayDomain("BIOS2", BIOS02); - SyncByteArrayDomain("ROM", Cartridge); - SyncByteArrayDomain("VRAM", FrameBuffer); + SyncByteArrayDomain("ROM", Rom); + SyncByteArrayDomain("VRAM", VRAM); } private void SyncByteArrayDomain(string name, byte[] data) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs index 3c088e0341..7e19c5f260 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs @@ -1,4 +1,5 @@ using System; +using BizHawk.Common; using BizHawk.Common.BufferExtensions; using BizHawk.Emulation.Common; @@ -39,7 +40,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF BIOS01 = bios01; BIOS02 = bios02; - Array.Copy(rom, 0, Cartridge, 0, rom.Length); + Array.Copy(rom, 0, Rom, 0, rom.Length); CalcClock(); @@ -52,5 +53,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public F3850 CPU; private readonly TraceBuffer _tracer; + public IController _controller; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs index ccc6d9f234..70858f7576 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs @@ -25,7 +25,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// Clears all status flags (excluding the ICB flag) /// - public void ALU_ClearFlags() + public void ALU_ClearFlags_() { FlagC = false; FlagO = false; @@ -37,19 +37,19 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// Sets the SIGN and ZERO flags based on the supplied byte /// /// - public void ALU_SetFlags_SZ(ushort src) + public void ALU_SetFlags_SZ_(ushort src) { FlagZ = (byte)Regs[src] == 0; FlagS = (~((byte)Regs[src]) & 0x80) != 0; } - + /* /// /// Performs addition and sets the CARRY and OVERFLOW flags accordingly /// /// /// /// - public void ALU_ADD8_Func(ushort dest, ushort src, bool carry = false) + public void ALU_ADD8_Func_(ushort dest, ushort src, bool carry = false) { byte d = (byte)Regs[dest]; byte s = (byte)Regs[src]; @@ -61,6 +61,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[dest] = (ushort)(result & 0xFF); } + */ /// /// Performs addition and sets the CARRY and OVERFLOW flags accordingly WITHOUT saving to destination @@ -84,49 +85,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// /// - public void ALU_ADD8D_Func(ushort dest, ushort src) - { - // from MAME f8.cpp (BSD-3) - // https://github.com/mamedev/mame/blob/97b67170277437131adf6ed4d60139c172529e4f/src/devices/cpu/f8/f8.cpp#L264 - byte d = (byte)Regs[dest]; - byte s = (byte)Regs[src]; - byte tmp = (byte)(d + s); - - byte c = 0; // high order carry - byte ic = 0; // low order carry - - if (((d + s) & 0xFF0) > 0xF0) - { - c = 1; - } - - if ((d & 0x0F) + (s & 0x0F) > 0x0F) - { - ic = 1; - } - - ALU_ClearFlags(); - ALU_ADD8_FLAGSONLY_Func(dest, src); - Regs[ALU0] = tmp; - ALU_SetFlags_SZ(ALU0); - - if (c == 0 && ic == 0) - { - tmp = (byte)(((tmp + 0xa0) & 0xf0) + ((tmp + 0x0a) & 0x0f)); - } - - if (c == 0 && ic == 1) - { - tmp = (byte)(((tmp + 0xa0) & 0xf0) + (tmp & 0x0f)); - } - - if (c == 1 && ic == 0) - { - tmp = (byte)((tmp & 0xf0) + ((tmp + 0x0a) & 0x0f)); - } - - Regs[dest] = tmp; - } + public void ALU_SUB8_Func(ushort dest, ushort src) { @@ -169,55 +128,18 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF } */ - /// - /// Right shift 'src' 'shift' positions (zero fill) - /// - /// - /// - public void ALU_SR_Func(ushort src, ushort shift) - { - Regs[src] = (ushort)((Regs[src] >> shift) & 0xFF); - ALU_ClearFlags(); - ALU_SetFlags_SZ(src); - } - - /// - /// Left shit 'src' 'shift' positions (zero fill) - /// - /// - /// - public void ALU_SL_Func(ushort src, ushort shift) - { - Regs[src] = (ushort)((Regs[src] << shift) & 0xFF); - ALU_ClearFlags(); - ALU_SetFlags_SZ(src); - } + /// /// AND /// /// /// - public void ALU_AND8_Func(ushort dest, ushort src) - { - ALU_ClearFlags(); - Regs[dest] = (ushort)(Regs[dest] & Regs[src]); - ALU_SetFlags_SZ(dest); - } + - public void ALU_OR8_Func(ushort dest, ushort src) - { - ALU_ClearFlags(); - Regs[dest] = (ushort)(Regs[dest] | Regs[src]); - ALU_SetFlags_SZ(dest); - } + - public void ALU_XOR8_Func(ushort dest, ushort src) - { - ALU_ClearFlags(); - Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); - ALU_SetFlags_SZ(dest); - } + /* public void ALU_XOR8C_Func(ushort dest, ushort src) { @@ -264,16 +186,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[dest_h] &= 0xFF; } - public void Read_Func(ushort dest, ushort src_l, ushort src_h) - { - Regs[dest] = ReadMemory((ushort)(Regs[src_l] | (Regs[src_h]) << 8)); - } - - public void Write_Func(ushort dest_l, ushort dest_h, ushort src) - { - WriteMemory((ushort)(Regs[dest_l] | (Regs[dest_h] << 8)), (byte)Regs[src]); - } - + + /* public void LR8_Func(ushort dest, ushort src) { if (dest == DB) @@ -296,6 +210,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[dest] = Regs[src]; } } + */ /* public void ALU_INC8_Func(ushort src) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs index bba6c4a581..223eba1a51 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs @@ -19,7 +19,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF //n immediate succeeds the opcode and the displacement (if present) //nn immediately succeeds the opcode and the displacement (if present) - if (format.IndexOf("nn") != -1) format = format.Replace("nn", $"{read(addr++) << 8 + (read(addr++)):X4}h"); // MSB is read first + if (format.IndexOf("nn") != -1) + { + format = format.Replace("nn", read(addr++) + .ToString("X2") + read(addr++) + .ToString("X2") + "h"); // MSB is read first + } + if (format.IndexOf("n") != -1) format = format.Replace("n", $"{read(addr++):X2}h"); if (format.IndexOf("+d") != -1) format = format.Replace("+d", "d"); @@ -67,13 +73,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "LR W, J", // 0x1D "LR J, W", // 0x1E "INC", // 0x1F - "LI n", // 0x20 - "NI n", // 0x21 - "IO n", // 0x22 - "XI n", // 0x23 - "AI n", // 0x24 - "CI n", // 0x25 - "IN n", // 0x26 + "LI n", // 0x20 + "NI n", // 0x21 + "OI n", // 0x22 + "XI n", // 0x23 + "AI n", // 0x24 + "CI n", // 0x25 + "IN n", // 0x26 "OUT n", // 0x27 "PI nn", // 0x28 "JMP nn", // 0x29 @@ -111,9 +117,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "LR A, r09", // 0x49 "LR A, r10", // 0x4A "LR A, r11", // 0x4B - "LR A, ISAR", // 0x4C - "LR A, ISAR INC", // 0x4D - "LR A, ISAR DEC", // 0x4E + "LR A, (ISAR)", // 0x4C + "LR A, (ISAR) INC", // 0x4D + "LR A, (ISAR) DEC", // 0x4E "ILLEGAL", // 0x4F "LR r00, A", // 0x50 "LR r01, A", // 0x51 @@ -131,38 +137,38 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "LR (ISAR), A INC", // 0x5D "LR (ISAR), A DEC", // 0x5E "ILLEGAL", // 0x5F - "LISU 0x00", // 0x60 - "LISU 0x08", // 0x61 - "LISU 0x10", // 0x62 - "LISU 0x18", // 0x63 - "LISU 0x20", // 0x64 - "LISU 0x28", // 0x65 - "LISU 0x30", // 0x66 - "LISU 0x38", // 0x67 - "LISU 0x00", // 0x68 - "LISU 0x01", // 0x69 - "LISU 0x02", // 0x6A - "LISU 0x03", // 0x6B - "LISU 0x04", // 0x6C - "LISU 0x05", // 0x6D - "LISU 0x06", // 0x6E - "LISU 0x07", // 0x6F - "LIS 0x0", // 0x70 - "LIS 0x01", // 0x71 - "LIS 0x2", // 0x72 - "LIS 0x3", // 0x73 - "LIS 0x4", // 0x74 - "LIS 0x5", // 0x75 - "LIS 0x6", // 0x76 - "LIS 0x7", // 0x77 - "LIS 0x8", // 0x78 - "LIS 0x9", // 0x79 - "LIS 0xA", // 0x7A - "LIS 0xB", // 0x7B - "LIS 0xC", // 0x7C - "LIS 0xD", // 0x7D - "LIS 0xE", // 0x7E - "LIS 0xF", // 0x7F + "LISU 0", // 0x60 + "LISU 1", // 0x61 + "LISU 2", // 0x62 + "LISU 3", // 0x63 + "LISU 4", // 0x64 + "LISU 5", // 0x65 + "LISU 6", // 0x66 + "LISU 7", // 0x67 + "LISL 0", // 0x68 + "LISL 1", // 0x69 + "LISL 2", // 0x6A + "LISL 3", // 0x6B + "LISL 4", // 0x6C + "LISL 5", // 0x6D + "LISL 6", // 0x6E + "LISL 7", // 0x6F + "LIS 0", // 0x70 + "LIS 1", // 0x71 + "LIS 2", // 0x72 + "LIS 3", // 0x73 + "LIS 4", // 0x74 + "LIS 5", // 0x75 + "LIS 6", // 0x76 + "LIS 7", // 0x77 + "LIS 8", // 0x78 + "LIS 9", // 0x79 + "LIS A", // 0x7A + "LIS B", // 0x7B + "LIS C", // 0x7C + "LIS D", // 0x7D + "LIS E", // 0x7E + "LIS F", // 0x7F "BT 0", // 0x80 "BT 1", // 0x81 "BT 2", // 0x82 diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs index f1a5283654..8a2f952e67 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -119,22 +119,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x5D: LR_ISAR_A_INC(); break; // SR <- (A) (SR pointed to by the ISAR); ISAR incremented case 0x5E: LR_ISAR_A_DEC(); break; // SR <- (A) (SR pointed to by the ISAR); ISAR decremented - case 0x60: LISU(0); break; // ISARU <- 0'e' (octal) - case 0x61: LISU(8); break; // ISARU <- 0'e' (octal) - case 0x62: LISU(16); break; // ISARU <- 0'e' (octal) - case 0x63: LISU(24); break; // ISARU <- 0'e' (octal) - case 0x64: LISU(32); break; // ISARU <- 0'e' (octal) - case 0x65: LISU(40); break; // ISARU <- 0'e' (octal) - case 0x66: LISU(48); break; // ISARU <- 0'e' (octal) - case 0x67: LISU(56); break; // ISARU <- 0'e' (octal) - case 0x68: LISL(0); break; // ISARL <- 0'e' (octal) - case 0x69: LISL(1); break; // ISARL <- 0'e' (octal) - case 0x6A: LISL(2); break; // ISARL <- 0'e' (octal) - case 0x6B: LISL(3); break; // ISARL <- 0'e' (octal) - case 0x6C: LISL(4); break; // ISARL <- 0'e' (octal) - case 0x6D: LISL(5); break; // ISARL <- 0'e' (octal) - case 0x6E: LISL(6); break; // ISARL <- 0'e' (octal) - case 0x6F: LISL(7); break; // ISARL <- 0'e' (octal) + case 0x60: LISU(0); break; // ISARU <- 0'e' (octal) + case 0x61: LISU(1); break; // ISARU <- 0'e' (octal) + case 0x62: LISU(2); break; // ISARU <- 0'e' (octal) + case 0x63: LISU(3); break; // ISARU <- 0'e' (octal) + case 0x64: LISU(4); break; // ISARU <- 0'e' (octal) + case 0x65: LISU(5); break; // ISARU <- 0'e' (octal) + case 0x66: LISU(6); break; // ISARU <- 0'e' (octal) + case 0x67: LISU(7); break; // ISARU <- 0'e' (octal) + case 0x68: LISL(0); break; // ISARL <- 0'e' (octal) + case 0x69: LISL(1); break; // ISARL <- 0'e' (octal) + case 0x6A: LISL(2); break; // ISARL <- 0'e' (octal) + case 0x6B: LISL(3); break; // ISARL <- 0'e' (octal) + case 0x6C: LISL(4); break; // ISARL <- 0'e' (octal) + case 0x6D: LISL(5); break; // ISARL <- 0'e' (octal) + case 0x6E: LISL(6); break; // ISARL <- 0'e' (octal) + case 0x6F: LISL(7); break; // ISARL <- 0'e' (octal) case 0x70: LIS(0); break; // A <- H'0a' case 0x71: LIS(1); break; // A <- H'0a' @@ -152,14 +152,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x7d: LIS(13); break; // A <- H'0a' case 0x7e: LIS(14); break; // A <- H'0a' case 0x7f: LIS(15); break; // A <- H'0a' - case 0x80: BT(0); break; // Test operand against W (Branching instruction) - case 0x81: BT(1); break; // Test operand against W (Branching instruction) - case 0x82: BT(2); break; // Test operand against W (Branching instruction) - case 0x83: BT(3); break; // Test operand against W (Branching instruction) - case 0x84: BT(4); break; // Test operand against W (Branching instruction) - case 0x85: BT(5); break; // Test operand against W (Branching instruction) - case 0x86: BT(6); break; // Test operand against W (Branching instruction) - case 0x87: BT(7); break; // Test operand against W (Branching instruction) + case 0x80: BT(0); break; // Branch on true - test operand against W register + case 0x81: BT(1); break; // Branch if positive (sign bit is set) + case 0x82: BT(2); break; // Branch on carry (carry bit is set) + case 0x83: BT(3); break; // Branch on true - test operand against W register + case 0x84: BT(4); break; // Branch on zero (zero bit is set) + case 0x85: BT(5); break; // Branch on true - test operand against W register + case 0x86: BT(6); break; // Branch on true - test operand against W register + case 0x87: BT(7); break; // Branch on true - test operand against W register case 0x88: AM(); break; // A <- (A) + ((DC0))Binary; DC0 <- (DC0) + 1 case 0x89: AMD(); break; // A <- (A) + ((DC0))Decimal; DC0 <- (DC0) + 1 case 0x8A: NM(); break; // A <- (A) AND ((DC0)); DC0 <- (DC0) + 1 @@ -167,23 +167,23 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case 0x8C: XM(); break; // A <- (A) XOR ((DC0)); DC0 <- (DC0) + 1 case 0x8D: CM(); break; // Set status flags on basis of: ((DC)) + (A) + 1; DC0 <- (DC0) + 1; DC <- (DC) + (A) case 0x8E: ADC(); break; // DC <- (DC) + (A) - case 0x8F: BR7(); break; // DC <- (DC) + (A) - case 0x90: BF(0); break; // PC0 <- PC0+n+1 - case 0x91: BF(1); break; // PC0 <- PC0+n+1 - case 0x92: BF(2); break; // PC0 <- PC0+n+1 - case 0x93: BF(3); break; // PC0 <- PC0+n+1 - case 0x94: BF(4); break; // PC0 <- PC0+n+1 - case 0x95: BF(5); break; // PC0 <- PC0+n+1 - case 0x96: BF(6); break; // PC0 <- PC0+n+1 - case 0x97: BF(7); break; // PC0 <- PC0+n+1 - case 0x98: BF(8); break; // PC0 <- PC0+n+1 - case 0x99: BF(9); break; // PC0 <- PC0+n+1 - case 0x9A: BF(10); break; // PC0 <- PC0+n+1 - case 0x9B: BF(11); break; // PC0 <- PC0+n+1 - case 0x9C: BF(12); break; // PC0 <- PC0+n+1 - case 0x9D: BF(13); break; // PC0 <- PC0+n+1 - case 0x9E: BF(14); break; // PC0 <- PC0+n+1 - case 0x9F: BF(15); break; // PC0 <- PC0+n+1 + case 0x8F: BR7(); break; // Branch on ISAR (any of the low 3 bits of ISAR are reset) + case 0x90: BF(0); break; // Unconditional branch (always) + case 0x91: BF(1); break; // Branch if negative (sign bit is reset) + case 0x92: BF(2); break; // Branch if no carry (carry bit is reset) + case 0x93: BF(3); break; // Branch on false - test operand against W register + case 0x94: BF(4); break; // Branch on not zero (zero bit is reset) + case 0x95: BF(5); break; // Branch on false - test operand against W register + case 0x96: BF(6); break; // Branch on false - test operand against W register + case 0x97: BF(7); break; // Branch on false - test operand against W register + case 0x98: BF(8); break; // Branch if no overflow (OVF bit is reset) + case 0x99: BF(9); break; // Branch on false - test operand against W register + case 0x9A: BF(10); break; // Branch on false - test operand against W register + case 0x9B: BF(11); break; // Branch on false - test operand against W register + case 0x9C: BF(12); break; // Branch on false - test operand against W register + case 0x9D: BF(13); break; // Branch on false - test operand against W register + case 0x9E: BF(14); break; // Branch on false - test operand against W register + case 0x9F: BF(15); break; // Branch on false - test operand against W register case 0xA0: INS_0(0); break; // A <- (I/O Port 0 or 1) case 0xA1: INS_0(1); break; // A <- (I/O Port 0 or 1) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs new file mode 100644 index 0000000000..7698d0060a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common.NumberExtensions; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// ALU Operations + /// + public sealed partial class F3850 + { + public void Read_Func(ushort dest, ushort src_l, ushort src_h) + { + Regs[dest] = ReadMemory((ushort)(Regs[src_l] | (Regs[src_h]) << 8)); + } + + public void Write_Func(ushort dest_l, ushort dest_h, ushort src) + { + WriteMemory((ushort)(Regs[dest_l] | (Regs[dest_h] << 8)), (byte)Regs[src]); + } + + public void IN_Func(ushort dest, ushort src) + { + Regs[dest] = ReadHardware(Regs[src]); + } + + public void LR_A_IO_Func(ushort dest, ushort src) + { + // helper method that simulates transferring DB to accumulator (as part of an IN operation) + // this sets flags accordingly + // dest should always == A and src should always == DB for this function + + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[dest] = Regs[src]; + + FlagZ = Regs[dest] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[dest].Bit(7) == false; + + // ICB flag not affected + } + + public void ClearFlags_Func() + { + FlagC = false; + FlagO = false; + FlagS = false; + FlagZ = false; + } + + public void LR_Func(ushort dest, ushort src) + { + if (dest == DB) + { + // byte storage + Regs[dest] = (ushort)(Regs[src] & 0xFF); + } + else if (dest == W) + { + // mask for status register + Regs[dest] = (ushort)(Regs[src] & 0x1F); + } + else if (dest == ISAR) + { + // mask for ISAR register + Regs[dest] = (ushort)(Regs[src] & 0x3F); + } + else + { + Regs[dest] = Regs[src]; + } + } + + /// + /// Right shift 'src' 'shift' positions (zero fill) + /// + /// + /// + public void SR_Func(ushort src, ushort shift) + { + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[src] = (ushort)((Regs[src] >> shift) & 0xFF); + + FlagZ = Regs[src] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[src].Bit(7) == false; + + // ICB flag not affected + } + + /// + /// Left shit 'src' 'shift' positions (zero fill) + /// + /// + /// + public void SL_Func(ushort src, ushort shift) + { + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[src] = (ushort)((Regs[src] << shift) & 0xFF); + + FlagZ = Regs[src] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[src].Bit(7) == false; + + // ICB flag not affected + } + + public void ADD_Func(ushort dest, ushort src) + { + // addition of 2 signed bytes + ushort dest16 = Regs[dest]; + + dest16 += Regs[src]; + + FlagC = dest16.Bit(8); + FlagZ = (dest16 & 0xFF) == 0; + + ushort ans = (ushort)(dest16 & 0xFF); + + // Sign SET if MSB == 0 (positive signed number) + FlagS = ans.Bit(7) == false; + + // overflow based on carry out of bit6 XOR carry out of bit7 + var b6c = dest16 >> 7; + var b7c = dest16 >> 8; + FlagO = (b6c ^ b7c) != 0; + + Regs[dest] = ans; + } + + public void SUB_Func(ushort dest, ushort src) + { + Regs[ALU0] = (ushort)((Regs[src] ^ 0xff) + 1); + ADD_Func(dest, ALU0); + } + + public void ADDD_Func(ushort dest, ushort src) + { + var d = Regs[dest]; + var s = Regs[src]; + var bcdRes = d + s; + + var carryIntermediate = ((d & 0x0F) + (s & 0x0F)) > 0x0F; + var carryUpper = bcdRes >= 0x100; + + // temporary storage and set flags + Regs[ALU0] = Regs[dest]; + Regs[ALU1] = Regs[src]; + ADD_Func(ALU0, ALU1); + + if (!carryIntermediate) + { + bcdRes = (bcdRes & 0xF0) | ((bcdRes + 0x0A) & 0x0F); + } + + if (!carryUpper) + { + bcdRes = (bcdRes + 0xA0); + } + + Regs[dest] = (ushort)(bcdRes & 0xFF); + } + + public void CI_Func() + { + // compare immediate + // we need to achieve DB - A + 1 + // flags set - results not stored + var comp = ((Regs[A] ^ 0xFF) + 1); + Regs[ALU0] = (ushort)comp; + ADD_Func(DB, ALU0); + } + + public void ADDD_Func_(ushort dest, ushort src) + { + // from MAME f8.cpp (BSD-3) + // https://github.com/mamedev/mame/blob/97b67170277437131adf6ed4d60139c172529e4f/src/devices/cpu/f8/f8.cpp#L264 + byte d = (byte)Regs[dest]; + byte s = (byte)Regs[src]; + byte tmp = (byte)(d + s); + + byte c = 0; // high order carry + byte ic = 0; // low order carry + + if (((d + s) & 0xFF0) > 0xF0) + { + c = 1; + } + + if ((d & 0x0F) + (s & 0x0F) > 0x0F) + { + ic = 1; + } + + //ALU_ClearFlags(); + ALU_ADD8_FLAGSONLY_Func(dest, src); + Regs[ALU0] = tmp; + //ALU_SetFlags_SZ(ALU0); + + if (c == 0 && ic == 0) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + if (c == 0 && ic == 1) + { + tmp = (byte)(((tmp + 0xa0) & 0xf0) + (tmp & 0x0f)); + } + + if (c == 1 && ic == 0) + { + tmp = (byte)((tmp & 0xf0) + ((tmp + 0x0a) & 0x0f)); + } + + Regs[dest] = tmp; + } + + public void AND_Func(ushort dest, ushort src) + { + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[dest] = (ushort)(Regs[dest] & Regs[src]); + + FlagZ = Regs[src] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[src].Bit(7) == false; + + // ICB flag not affected + } + + public void OR_Func(ushort dest, ushort src) + { + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[dest] = (ushort)(Regs[dest] | Regs[src]); + + FlagZ = Regs[src] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[src].Bit(7) == false; + + // ICB flag not affected + } + + public void XOR_Func(ushort dest, ushort src) + { + // overflow and carry unconditionally reset + FlagO = false; + FlagC = false; + + Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + + FlagZ = Regs[src] == 0; + + // Sign SET if MSB == 0 (positive signed number) + FlagS = Regs[src].Bit(7) == false; + + // ICB flag not affected + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs index 6e5e057dd4..b426d9d4e4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -189,6 +189,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[ONE] = 1; Regs[BYTE] = 0xFF; + + // testing only - fill scratchpad with 0xff + for (int i = 0; i < 64; i++) + Regs[i] = 0xff; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs index 7bd4680a4f..ef80c0e7a7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -190,8 +190,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - OP_LR8, DB, Ql, // DB <- (r15) - IDLE, + OP_LR8, DB, Ql, // DB <- (r15) + OP_EI, // Set ICB Flag IDLE, ROMC_17, // PC0l <- (DB) IDLE, @@ -364,7 +364,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_COM, // A <- A XOR 0xFF (compliment accumulator) + OP_XOR8, A, BYTE, // A <- A XOR 0xFF (compliment accumulator) + //OP_COM, // A <- A XOR 0xFF (compliment accumulator) ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -420,7 +421,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } @@ -435,7 +436,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } @@ -466,9 +467,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - OP_CLEAR_FLAGS, + IDLE, //OP_CLEAR_FLAGS, OP_LR8, A, DB, // A <- (DB) - OP_SET_FLAGS_SZ, A, + IDLE, //OP_SET_FLAGS_SZ, A, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -534,9 +535,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - OP_CLEAR_FLAGS, + IDLE, OP_ADD8, A, DB, // A <- (A) + (DB) - OP_SET_FLAGS_SZ, A, + IDLE, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -551,8 +552,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_03_L, // DB <- ((PC0)); PC0++ IDLE, - OP_CLEAR_FLAGS, - OP_CI, A, DB, // Set flags for A <- (A) + (DB) + 1 (do not store result in A) + IDLE, + OP_CI, // Set flags for A <- (DB) + (-A) + 1 (do not store result in A) IDLE, IDLE, // S @@ -580,16 +581,16 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ROMC_03_L, // DB/IO <- ((PC0)); PC0++ IDLE, IDLE, - OP_CLEAR_FLAGS, + IDLE, IDLE, IDLE, // L ROMC_1B, // DB <- ((IO)); IDLE, IDLE, - OP_LR8, A, DB, // A <- (DB) + OP_LR_A_DB_IO, A, DB, // A <- (DB) - flags set as result of IN or INS operation + IDLE, IDLE, - OP_SET_FLAGS_SZ, A, // S ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, @@ -616,7 +617,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } @@ -652,7 +653,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } @@ -683,7 +684,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } @@ -749,11 +750,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void DS(ushort rIndex) { + // only scratch registers 0-16 + rIndex = (ushort)(rIndex & 0x0F); + PopulateCURINSTR( // L - OP_CLEAR_FLAGS, - OP_ADD8, rIndex, BYTE, - OP_SET_FLAGS_SZ, rIndex, + IDLE, + OP_SUB8, rIndex, ONE, + //OP_ADD8, rIndex, BYTE, + IDLE, ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, END); @@ -762,9 +767,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - OP_CLEAR_FLAGS, - OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff - OP_SET_FLAGS_SZ, Regs[ISAR], + IDLE, + OP_SUB8, Regs[ISAR], ONE, // r[ISAR] = r[ISAR] + 0xff + IDLE, ROMC_00_L, // DB <- ((PC0)); PC0++ IDLE, END); @@ -774,9 +779,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - OP_CLEAR_FLAGS, - OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff - OP_SET_FLAGS_SZ, Regs[ISAR], + IDLE, + OP_SUB8, Regs[ISAR], ONE, // r[ISAR] = r[ISAR] + 0xff + IDLE, OP_IS_INC, // Inc ISAR ROMC_00_L, // DB <- ((PC0)); PC0++ END); @@ -786,9 +791,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - OP_CLEAR_FLAGS, - OP_ADD8, Regs[ISAR], BYTE, // r[ISAR] = r[ISAR] + 0xff - OP_SET_FLAGS_SZ, Regs[ISAR], + IDLE, + OP_SUB8, Regs[ISAR], ONE, // r[ISAR] = r[ISAR] + 0xff + IDLE, OP_IS_DEC, // Dec ISAR ROMC_00_L, // DB <- ((PC0)); PC0++ END); @@ -796,6 +801,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_A_R(ushort rIndex) { + // only scratch registers 0-16 + rIndex = (ushort)(rIndex & 0x0F); + PopulateCURINSTR( // S OP_LR8, A, rIndex, // A <- (rIndex) @@ -836,6 +844,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void LR_R_A(ushort rIndex) { + // only scratch registers 0-16 + rIndex = (ushort)(rIndex & 0x0F); + PopulateCURINSTR( // S OP_LR8, rIndex, A, // rIndex <- (A) @@ -898,7 +909,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_LR8, A, index, // A <- index + OP_LIS, index, // A <- index ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -918,11 +929,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // L - ROMC_02, // DB <- ((DC0)); DC0++ - OP_CLEAR_FLAGS, + ROMC_02, // DB <- ((DC0)); DC0++ + IDLE, + IDLE, + OP_ADD8, A, DB, // A <- (DB) IDLE, - OP_ADD8, A, DB, // A <- (DB) - OP_SET_FLAGS_SZ, A, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -954,9 +965,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_02, // DB <- ((DC0)); DC0++ IDLE, - OP_CLEAR_FLAGS, - OP_AND8, A, DB, // A <- (A) AND (DB) - OP_SET_FLAGS_SZ, A, + IDLE, + OP_AND8, A, DB, // A <- (A) AND (DB) + IDLE, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -971,9 +982,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_02, // DB <- ((DC0)); DC0++ IDLE, - OP_CLEAR_FLAGS, - OP_OR8, A, DB, // A <- (A) OR (DB) - OP_SET_FLAGS_SZ, A, + IDLE, + OP_OR8, A, DB, // A <- (A) OR (DB) + IDLE, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -988,9 +999,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_02, // DB <- ((DC0)); DC0++ IDLE, - OP_CLEAR_FLAGS, + IDLE, OP_XOR8, A, DB, // A <- (A) XOR (DB) - OP_SET_FLAGS_SZ, A, + IDLE, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -1005,7 +1016,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_02, // DB <- ((DC0)); DC0++ IDLE, - OP_CLEAR_FLAGS, + IDLE, OP_CI, A, IDLE, IDLE, @@ -1054,9 +1065,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF PopulateCURINSTR( // S ROMC_1C_S, // Idle - OP_CLEAR_FLAGS, - OP_IN, A, index, // A <- ((Port index - 0/1)) - OP_SET_FLAGS_SZ, A, + IDLE, + OP_IN, A, index, // A <- ((Port index - 0/1)) + OP_LR_A_DB_IO, A, A, // A <- (A) - flags set as result of IN or INS operation // S ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, @@ -1079,9 +1090,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // L ROMC_1B, // DB <- ((IO)) IDLE, - OP_CLEAR_FLAGS, - OP_LR8, A, DB, // A <- (DB) - OP_SET_FLAGS_SZ, A, + IDLE, + OP_LR_A_DB_IO, A, DB, // A <- (DB) - flags set as result of IN or INS operation + IDLE, IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ @@ -1126,19 +1137,20 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, // S ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, + OP_EI, // Set ICB Flag IDLE, END); } private void AS(ushort rIndex) { - ALU_ClearFlags(); // clear flags early (as not enough cycle space for commands) + // only scratch registers 0-15 + rIndex = (ushort) (rIndex & 0x0F); PopulateCURINSTR( // S - OP_ADD8, A, rIndex, // A <- (A) + (rIndex) - OP_SET_FLAGS_SZ, A, + OP_ADD8, A, rIndex, // A <- (A) + (rIndex) + IDLE, ROMC_00_S, // DB <- ((PC0)); PC0++ END); } @@ -1147,8 +1159,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_CLEAR_FLAGS, - OP_AS_IS, // A <- (A) + ((ISAR)); setSZ + IDLE, + OP_ADD8, A, Regs[ISAR], // A <- (A) + ((ISAR)); IDLE, ROMC_00_S, // DB <- ((PC0)); PC0++ END); @@ -1158,8 +1170,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_CLEAR_FLAGS, - OP_AS_IS, // A <- (A) + ((ISAR)); setSZ + IDLE, + OP_ADD8, A, Regs[ISAR], // A <- (A) + ((ISAR)); OP_IS_INC, // Inc ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ END); @@ -1169,8 +1181,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_CLEAR_FLAGS, - OP_AS_IS, // A <- (A) + ((ISAR)); setSZ + IDLE, + OP_ADD8, A, Regs[ISAR], // A <- (A) + ((ISAR)); OP_IS_DEC, // Dec ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ END); @@ -1178,6 +1190,9 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void ASD(ushort rIndex) { + // only scratch registers 0-15 + rIndex = (ushort)(rIndex & 0x0F); + PopulateCURINSTR( // S ROMC_1C_S, // Idle @@ -1238,11 +1253,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void XS(ushort rIndex) { + // only scratch registers 0-15 + rIndex = (ushort)(rIndex & 0x0F); + PopulateCURINSTR( // S - OP_CLEAR_FLAGS, - OP_XOR8, A, rIndex, // A <- (A) XOR (reg) - OP_SET_FLAGS_SZ, A, + IDLE, + OP_XOR8, A, rIndex, // A <- (A) XOR (reg) + IDLE, ROMC_00_S, // DB <- ((PC0)); PC0++ END); } @@ -1251,7 +1269,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_XS_IS, // A <- (A) XOR ((ISAR)) + OP_XOR8, A, Regs[ISAR], // A <- (A) XOR ((ISAR)) ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -1261,7 +1279,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_XS_IS, // A <- (A) XOR ((ISAR)) + OP_XOR8, A, Regs[ISAR], // A <- (A) XOR ((ISAR)) OP_IS_INC, // Inc ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ END); @@ -1271,7 +1289,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_XS_IS, // A <- (A) XOR ((ISAR)) + OP_XOR8, A, Regs[ISAR], // A <- (A) XOR ((ISAR)) OP_IS_DEC, // Dec ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ END); @@ -1279,12 +1297,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void NS(ushort rIndex) { - ALU_ClearFlags(); // clear flags early (as not enough cycle space for commands) + // only scratch registers 0-15 + rIndex = (ushort)(rIndex & 0x0F); PopulateCURINSTR( // S OP_AND8, A, rIndex, // A <- (A) AND (reg) - OP_SET_FLAGS_SZ, A, + IDLE, ROMC_00_S, // DB <- ((PC0)); PC0++ END); } @@ -1293,7 +1312,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_NS_IS, // A <- (A) AND ((ISAR)) + OP_AND8, A, Regs[ISAR], // A <- (A) AND ((ISAR)) ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); @@ -1303,7 +1322,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_NS_IS, // A <- (A) AND ((ISAR)) + OP_AND8, A, Regs[ISAR], // A <- (A) AND ((ISAR)) OP_IS_INC, // Inc ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, @@ -1314,11 +1333,44 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { PopulateCURINSTR( // S - OP_NS_IS, // A <- (A) AND ((ISAR)) + OP_AND8, A, Regs[ISAR], // A <- (A) AND ((ISAR)) OP_IS_DEC, // Dec ISAR ROMC_00_S, // DB <- ((PC0)); PC0++ IDLE, END); } + + + private void DO_BRANCH() + { + PopulateCURINSTR( + // L + IDLE, + ROMC_01, // forward or backward displacement + IDLE, + IDLE, + IDLE, + IDLE, + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ + IDLE, + IDLE, + END); + } + + private void DONT_BRANCH() + { + PopulateCURINSTR( + // S + IDLE, + ROMC_03_S, // immediate operand fetch + IDLE, + IDLE, + // S + ROMC_00_S, // DB <- ((PC0)); PC0++ + IDLE, + IDLE, + END); + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index 42d0ac06c2..3e0b240769 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using BizHawk.Common; @@ -88,7 +89,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort OP_AND8 = 107; public const ushort OP_OR8 = 108; public const ushort OP_XOR8 = 109; - public const ushort OP_COM = 110; + //public const ushort OP_COM = 110; + public const ushort OP_SUB8 = 110; public const ushort OP_ADD8 = 111; public const ushort OP_CI = 112; public const ushort OP_IS_INC = 113; @@ -101,11 +103,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public const ushort OP_BF = 120; public const ushort OP_IN = 121; public const ushort OP_OUT = 122; - public const ushort OP_AS_IS = 123; - public const ushort OP_XS_IS = 124; - public const ushort OP_NS_IS = 125; - public const ushort OP_CLEAR_FLAGS = 126; - public const ushort OP_SET_FLAGS_SZ = 127; + //public const ushort OP_AS_IS = 123; + //public const ushort OP_XS_IS = 124; + //public const ushort OP_NS_IS = 125; + public const ushort OP_LR_A_DB_IO = 126; + public const ushort OP_DS = 127; + //public const ushort OP_CLEAR_FLAGS = 126; + //public const ushort OP_SET_FLAGS_SZ = 127; + public const ushort OP_LIS = 128; public F3850() @@ -135,7 +140,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF IDLE, END); - ALU_ClearFlags(); + ClearFlags_Func(); FlagICB = false; } @@ -191,52 +196,51 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF case IDLE: break; - // clears all flags except for ICB - case OP_CLEAR_FLAGS: - ALU_ClearFlags(); - break; - - // sets SIGN and CARRY flags based upon the supplied value - case OP_SET_FLAGS_SZ: - ALU_SetFlags_SZ(cur_instr[instr_pntr++]); - break; - // load one register into another (or databus) case OP_LR8: - LR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + LR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // load DB into A (as a part of an IN or INS instruction) + case OP_LR_A_DB_IO: + LR_A_IO_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // loads supplied index value into register + case OP_LIS: + Regs[ALU1] = (ushort)(cur_instr[instr_pntr++] & 0x0F); + LR_Func(A, ALU1); break; // Shift register n bit positions to the right (zero fill) case OP_SHFT_R: - ALU_SR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + SR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // Shift register n bit positions to the left (zero fill) case OP_SHFT_L: - ALU_SL_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + SL_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (x) ADD y case OP_ADD8: - ALU_ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ADD_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + + // x <- (x) MINUS y + case OP_SUB8: + SUB_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (x) ADD y (decimal) case OP_ADD8D: - ALU_ADD8D_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + ADDD_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // A <- (A) + (C) case OP_LNK: - bool fc = FlagC; - ALU_ClearFlags(); - - if (fc) - { - ALU_ADD8_Func(A, ONE); - } - - ALU_SetFlags_SZ(A); + Regs[ALU0] = (ushort)(FlagC ? 1 : 0); + ADD_Func(A, ALU0); break; // Clear ICB status bit @@ -251,38 +255,27 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // x <- (y) XOR DB case OP_XOR8: - ALU_XOR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; - - // x <- (y) XOR DB (complement accumulator) - case OP_COM: - Regs[A] = (byte)~Regs[A]; - ALU_ClearFlags(); - ALU_SetFlags_SZ(A); + XOR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (x) + 1 case OP_INC8: - ALU_ClearFlags(); - ALU_ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - ALU_SetFlags_SZ(A); + ADD_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (y) & DB case OP_AND8: - ALU_AND8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + AND_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // x <- (y) | DB case OP_OR8: - ALU_OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + OR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; // DB + (x) + 1 (modify flags without saving result) case OP_CI: - Regs[ALU0] = (byte)~Regs[cur_instr[instr_pntr++]]; - ALU_ADD8_Func(ALU0, DB, true); - ALU_SetFlags_SZ(ALU0); + CI_Func(); break; // ISAR is incremented @@ -297,124 +290,178 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // set the upper octal ISAR bits (b3,b4,b5) case OP_LISU: - Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x07) | cur_instr[instr_pntr++]) & 0x3F); + Regs[ISAR] = (ushort)((((Regs[ISAR] & 0x07) | (cur_instr[instr_pntr++] & 0x07) << 3)) & 0x3F); break; // set the lower octal ISAR bits (b0,b1,b2) case OP_LISL: - Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x38) | cur_instr[instr_pntr++]) & 0x3F); + Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x38) | (cur_instr[instr_pntr++] & 0x07)) & 0x3F); break; - // test operand against status register + // decrement scratchpad byte + //case OP_DS: + //SUB_Func(cur_instr[instr_pntr++], ONE); + //break; + + // Branch on TRUE case OP_BT: - if ((Regs[W] & cur_instr[instr_pntr++]) != 0) + bool branchBT = false; + switch (cur_instr[instr_pntr++]) { - instr_pntr = 0; - PopulateCURINSTR( - // L - ROMC_01, - IDLE, - IDLE, - IDLE, - IDLE, - IDLE, - // S - ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, - IDLE, - END); - } - else - { - instr_pntr = 0; - PopulateCURINSTR( - // S - ROMC_03_S, - IDLE, - IDLE, - IDLE, - // S - ROMC_00_S, // DB < -((PC0)); PC0++ - IDLE, - IDLE, - END); + case 0: + // do not branch + break; + + case 1: + // branch if positive (sign bit is set) + if (FlagS) branchBT = true; + break; + + case 2: + // branch on carry (carry bit is set) + if (FlagC) branchBT = true; + break; + + case 3: + // branch if positive or on carry + if (FlagS || FlagC) branchBT = true; + break; + + case 4: + // branch if zero (zero bit is set) + if (FlagZ) branchBT = true; + break; + + case 5: + // branch if positive (same as t==1) + if (FlagS) branchBT = true; + break; + + case 6: + // branch if zero or on carry + if (FlagZ || FlagC) branchBT = true; + break; + case 7: + // branch if positive or on carry (same as t==3) + if (FlagS || FlagC) branchBT = true; + break; } + + instr_pntr = 0; + if (branchBT) DO_BRANCH(); + else DONT_BRANCH(); break; - // Branch based on ISARL + // Branch on ISARL case OP_BR7: - if ((Regs[ISAR] & 7) == 7) + instr_pntr = 1; // lose a cycle + if (!Regs[ISAR].Bit(0) || !Regs[ISAR].Bit(1) || !Regs[ISAR].Bit(2)) { - instr_pntr = 0; - PopulateCURINSTR( - // S - ROMC_03_S, // DB/IO <- ((PC0)); PC0++ - //IDLE, <- lose a cycle that was stolen in the table - IDLE, - IDLE, - // S - ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, - IDLE, - END); + DO_BRANCH(); } else { - instr_pntr = 0; - PopulateCURINSTR( - // L - ROMC_01, - //IDLE, <- lose a cycle that was stolen in the table - IDLE, - IDLE, - IDLE, - IDLE, - ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, - IDLE, - END); + DONT_BRANCH(); } break; - // PC0 <- PC0+n+1 + // Branch on FALSE case OP_BF: - if ((Regs[W] & cur_instr[instr_pntr++]) != 0) + bool branchBF = false; + switch (cur_instr[instr_pntr++]) { - instr_pntr = 0; - PopulateCURINSTR( - // S - ROMC_03_S, // DB/IO <- ((PC0)); PC0++ - IDLE, - IDLE, - IDLE, - // S - ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, - IDLE, - END); - } - else - { - instr_pntr = 0; - PopulateCURINSTR( - // L - ROMC_01, - IDLE, - IDLE, - IDLE, - IDLE, - IDLE, - // S - ROMC_00_S, // DB <- ((PC0)); PC0++ - IDLE, - IDLE, - END); + case 0: + // unconditional branch relative + branchBF = true; + break; + + case 1: + // branch on negative (sign bit is reset) + if (!FlagS) branchBF = true; + break; + + case 2: + // branch if no carry (carry bit is reset) + if (!FlagC) branchBF = true; + break; + + case 3: + // branch if no carry and negative + if (!FlagC && !FlagS) branchBF = true; + break; + + case 4: + // branch if not zero (zero bit is reset) + if (!FlagZ) branchBF = true; + break; + + case 5: + // same as t==1 + if (!FlagS) branchBF = true; + break; + + case 6: + // branch if no carry and result is no zero + if (!FlagC && !FlagZ) branchBF = true; + break; + + case 7: + // same as t==3 + if (!FlagS && !FlagC) branchBF = true; + break; + + case 8: + // branch if there is no overflow (OVF bit is reset) + if (!FlagO) branchBF = true; + break; + + case 9: + // branch if negative and no overflow + if (!FlagS && !FlagO) branchBF = true; + break; + + case 0xA: + // branch if no overflow and no carry + if (!FlagO && !FlagC) branchBF = true; + break; + + case 0xB: + // branch if no overflow, no carry & negative + if (!FlagO && !FlagC && !FlagS) branchBF = true; + break; + + case 0xC: + // branch if no overflow and not zero + if (!FlagO && !FlagZ) branchBF = true; + break; + + case 0xD: + // same as t==9 + if (!FlagS && !FlagO) branchBF = true; + break; + + case 0xE: + // branch if no overflow, no carry & not zero + if (!FlagO && !FlagC && !FlagZ) branchBF = true; + break; + + case 0xF: + // same as t=0xB + if (!FlagO && !FlagC && !FlagS) branchBF = true; + break; } + + instr_pntr = 0; + if (branchBF) DO_BRANCH(); + else DONT_BRANCH(); break; // A <- (I/O Port 0 or 1) case OP_IN: - Regs[cur_instr[instr_pntr++]] = ReadHardware(cur_instr[instr_pntr++]); + instr_pntr++; // dest == A + Regs[ALU0] = cur_instr[instr_pntr++]; // src + IN_Func(A, ALU0); + //Regs[cur_instr[instr_pntr++]] = ReadHardware(cur_instr[instr_pntr++]); break; // I/O Port 0 or 1 <- (A) @@ -423,28 +470,6 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF //OUT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - // Add the content of the SR register addressed by ISAR to A (Binary) - case OP_AS_IS: - ALU_ClearFlags(); - ALU_ADD8_Func(A, Regs[ISAR]); - ALU_SetFlags_SZ(A); - break; - - // XOR the content of the SR register addressed by ISAR to A - case OP_XS_IS: - ALU_ClearFlags(); - ALU_XOR8_Func(A, Regs[ISAR]); - ALU_SetFlags_SZ(A); - break; - - // AND the content of the SR register addressed by ISAR to A - case OP_NS_IS: - ALU_ClearFlags(); - ALU_AND8_Func(A, Regs[ISAR]); - ALU_SetFlags_SZ(A); - break; - - // instruction fetch // The device whose address space includes the contents of the PC0 register must place on the data bus the op code addressed by PC0; // then all devices increments the content of PC0. @@ -650,7 +675,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // registers cannot be read back onto the data bus) // CYCLE LENGTH: L case ROMC_1B: - Regs[DB] = ReadHardware(Regs[IO]); + IN_Func(DB, IO); + //Regs[DB] = ReadHardware(Regs[IO]); break; // None @@ -687,7 +713,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public Action TraceCallback; - public string TraceHeader => "F3850: PC, machine code, mnemonic, operands, registers (R0, R1, R2, R3, R4, R5, R6, R7, R8, J, HU, HL, KU, KL, QU, QL, Cy), flags (IOZCS)"; + public string TraceHeader => "F3850: PC, machine code, mnemonic, operands, flags (IOZCS), registers (PC1, DC0, A, ISAR, DB, IO, J, H, K, Q, R00-R63), Cycles"; public TraceInfo State(bool disassemble = true) { @@ -713,29 +739,40 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF byte_code.PadRight(12), disasm.PadRight(26)), RegisterInfo = string.Format( - "R0:{0:X2} R1:{1:X2} R2:{2:X2} R3:{3:X2} R4:{4:X2} R5:{5:X2} R6:{6:X2} R7:{7:X2} R8:{8:X2} J:{9:X2} HU:{10:X2} HL:{11:X2} KU:{12:X2} KL:{13:X2} QU:{14:X2} QL:{15:X2} Cy:{16} {17}{18}{19}{20}{21}", - Regs[0], - Regs[1], - Regs[2], - Regs[3], - Regs[4], - Regs[5], - Regs[6], - Regs[7], - Regs[8], + "Flags:{75}{76}{77}{78}{79} " + + "PC1:{0:X4} DC0:{1:X4} A:{2:X2} ISAR:{3:X2} DB:{4:X2} IO:{5:X2} J:{6:X2} H:{7:X4} K:{8:X4} Q:{9:X4} " + + "R0:{10:X2} R1:{11:X2} R2:{12:X2} R3:{13:X2} R4:{14:X2} R5:{15:X2} R6:{16:X2} R7:{17:X2} R8:{18:X2} R9:{19:X2} " + + "R10:{20:X2} R11:{21:X2} R12:{22:X2} R13:{23:X2} R14:{24:X2} R15:{25:X2} R16:{26:X2} R17:{27:X2} R18:{28:X2} R19:{29:X2} " + + "R20:{30:X2} R21:{31:X2} R22:{32:X2} R23:{33:X2} R24:{34:X2} R25:{35:X2} R26:{36:X2} R27:{37:X2} R28:{38:X2} R29:{39:X2} " + + "R30:{40:X2} R31:{41:X2} R32:{42:X2} R33:{43:X2} R34:{44:X2} R35:{45:X2} R36:{46:X2} R37:{47:X2} R38:{48:X2} R39:{49:X2} " + + "R40:{50:X2} R41:{51:X2} R42:{52:X2} R43:{53:X2} R44:{54:X2} R45:{55:X2} R46:{56:X2} R47:{57:X2} R48:{58:X2} R49:{59:X2} " + + "R50:{60:X2} R51:{61:X2} R52:{62:X2} R53:{63:X2} R54:{64:X2} R55:{65:X2} R56:{66:X2} R57:{67:X2} R58:{68:X2} R59:{69:X2} " + + "R60:{70:X2} R61:{71:X2} R62:{72:X2} R63:{73:X2} " + + "Cy:{74}", + RegPC1, + RegDC0, + Regs[A], + Regs[ISAR], + Regs[DB], + Regs[IO], Regs[J], - Regs[Hh], - Regs[Hl], - Regs[Kh], - Regs[Kl], - Regs[Qh], - Regs[Ql], + (ushort)(Regs[Hl] | (Regs[Hh] << 8)), + (ushort)(Regs[Kl] | (Regs[Kh] << 8)), + (ushort)(Regs[Ql] | (Regs[Qh] << 8)), + Regs[0], Regs[1], Regs[2], Regs[3], Regs[4], Regs[5], Regs[6], Regs[7], Regs[8], Regs[9], + Regs[10], Regs[11], Regs[12], Regs[13], Regs[14], Regs[15], Regs[16], Regs[17], Regs[18], Regs[19], + Regs[20], Regs[21], Regs[22], Regs[23], Regs[24], Regs[25], Regs[26], Regs[27], Regs[28], Regs[29], + Regs[30], Regs[31], Regs[32], Regs[33], Regs[34], Regs[35], Regs[36], Regs[37], Regs[38], Regs[39], + Regs[40], Regs[41], Regs[42], Regs[43], Regs[44], Regs[45], Regs[46], Regs[47], Regs[48], Regs[49], + Regs[50], Regs[51], Regs[52], Regs[53], Regs[54], Regs[55], Regs[56], Regs[57], Regs[58], Regs[59], + Regs[60], Regs[61], Regs[62], Regs[63], TotalExecutedCycles, FlagICB ? "I" : "i", FlagO ? "O" : "o", FlagZ ? "Z" : "z", FlagC ? "C" : "c", - FlagS ? "S" : "s") + FlagS ? "S" : "s"), + }; } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs new file mode 100644 index 0000000000..6cf6ced0ca --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Memory and related functions + /// + public partial class ChannelF + { + public byte[] BIOS01 = new byte[1024]; + public byte[] BIOS02 = new byte[1024]; + + /// + /// Simulates reading a byte of data from the address space + /// + /// + /// + public byte ReadBus(ushort addr) + { + if (addr < 0x400) + { + // Rom0 + return BIOS01[addr]; + } + else if (addr < 0x800) + { + // Rom1 + return BIOS02[addr - 0x400]; + } + else if (addr < 0x2000) + { + // Cart + return 0; + return Rom[addr - 0x800]; + } + + return 0xFF; + } + + /// + /// Simulates writing a byte of data to the address space (in its default configuration, there is no writeable RAM in the + /// Channel F addressable through the address space) + /// + /// + /// + public void WriteBus(ushort addr, byte value) + { + + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs new file mode 100644 index 0000000000..079f952168 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Remoting.Messaging; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common.NumberExtensions; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Ports and related functions + /// + public partial class ChannelF + { + /// + /// The Channel F has 4 8-bit IO ports connected. + /// CPU - ports 0 and 1 + /// PSU - ports 4 and 5 + /// (the second PSU has no IO ports wired up) + /// + public byte[] PortLatch = new byte[4]; + + public bool ControllersEnabled; + + public const int PORT0 = 0; + public const int PORT1 = 1; + public const int PORT4 = 2; + public const int PORT5 = 3; + + /// + /// CPU attempts to read data byte from the requested port + /// + /// + /// + public byte ReadPort(ushort addr) + { + byte port = (byte) (addr & 0x07); + + switch (port) + { + // Console buttons + // b0: TIME + // b1: MODE + // b2: HOLD + // b3: START + case 0: + return (byte)((DataConsole ^ 0xFF) & 0x0F); + + // Right controller + // b0: RIGHT + // b1: LEFT + // b2: BACK + // b3: FORWARD + // b4: CCW + // b5: CW + // b6: PULL + // b7: PUSH + case 1: + if (ControllersEnabled) + { + return (byte)((DataRight ^ 0xFF) & 0xFF); + } + return 0; + + // Left controller + // b0: RIGHT + // b1: LEFT + // b2: BACK + // b3: FORWARD + // b4: CCW + // b5: CW + // b6: PULL + // b7: PUSH + case 4: + if (ControllersEnabled) + { + return (byte)((DataLeft ^ 0xFF) & 0xFF); + } + return 0; + } + + return 0xFF; + } + + /// + /// CPU attempts to write data to the requested port (latch) + /// + /// + /// + public void WritePort(ushort addr, byte value) + { + byte port = (byte)(addr & 0x07); + + switch (port) + { + case 0: + + ControllersEnabled = (value & 0x40) == 0; + + var val = value & 0x60; + if (val == 0x40)// && _arm == 0x60) + { + VRAM[(128 * _y) + _x] = (byte)_colour; + } + + /* + + // RAM WRT - A pulse here executes a write to video RAM + bool ramWrt = value.Bit(5); + + // Enable data from controllers (1 equals enable) + // also needs pulse to write to video RAM + bool controllerDataEnable = value.Bit(6); + + if (ramWrt || controllerDataEnable) + { + // triggered write to VRAM + var yxIndex = (_y * 128) + _x; + var byteIndex = yxIndex / 4; + var byteRem = yxIndex % 4; + + switch (byteRem) + { + case 0: + VRAM[byteIndex] |= (byte) _colour; + break; + case 1: + VRAM[byteIndex] |= (byte) (_colour << 2); + break; + case 2: + VRAM[byteIndex] |= (byte)(_colour << 4); + break; + case 3: + VRAM[byteIndex] |= (byte)(_colour << 6); + break; + } + + } + */ + + _arm = value; + + PortLatch[PORT0] = value; + + break; + + case 1: + + // Write Data0 - indicates that valid data is present for both VRAM ODD0 and EVEN0 + bool data0 = value.Bit(6); + // Write Data1 - indicates that valid data is present for both VRAM ODD1 and EVEN1 + bool data1 = value.Bit(7); + + _colour = ((value ^ 0xff) >> 6) & 0x03; + + PortLatch[PORT1] = value; + + break; + + case 4: + + // video horizontal position + // 0 - video select + // 1-6 - horiz A-F + + _x = (value ^ 0xff) & 0x7f; + + PortLatch[PORT4] = value; + + break; + + + case 5: + + // video vertical position and sound + // 0-5 - Vertical A-F + // 6 - Tone AN, 7 - Tone BN + + _y = (value ^ 0xff) & 0x3f; + + PortLatch[PORT5] = value; + + break; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs new file mode 100644 index 0000000000..864e228c2a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Video related functions + /// + public partial class ChannelF + { + /// + /// 128x64 pixels - 8192x2bits (2 KB) + /// For the purposes of this core we will use 8192 bytes and just & 0x03 + /// + public byte[] VRAM = new byte[(128 * 64)]; + + public static readonly int[] FPalette = + { + Colors.ARGB(0x10, 0x10, 0x10), // Black + Colors.ARGB(0xFD, 0xFD, 0xFD), // White + Colors.ARGB(0xFF, 0x31, 0x53), // Red + Colors.ARGB(0x02, 0xCC, 0x5D), // Green + Colors.ARGB(0x4B, 0x3F, 0xF3), // Blue + Colors.ARGB(0xE0, 0xE0, 0xE0), // Gray + Colors.ARGB(0x91, 0xFF, 0xA6), // BGreen + Colors.ARGB(0xCE, 0xD0, 0xFF), // BBlue + }; + + public static readonly int[] CMap = + { + 0, 1, 1, 1, + 7, 4, 2, 3, + 5, 4, 2, 3, + 6, 4, 2, 3, + }; + + private int _colour = 2; + private int _x; + private int _y; + private int _arm; + + private int[] frameBuffer = new int[128 * 64]; + + private void BuildFrame() + { + // rows + int counter = 0; + for (int row = 0; row < 64; row++) + { + // columns 125 and 126 hold the palette index modifier for the entire row + var rIndex = 64 * row; + var c125 = (VRAM[rIndex + 125] & 0x02) >> 1; + var c126 = (VRAM[rIndex + 126] & 0x03); + var pModifier = ((c125 | c126) << 2) & 0x0C; + + // columns + for (int col = 0; col < 128; col++, counter++) + { + int colour = (VRAM[rIndex + col]) & 0x03; + var finalColorIndex = pModifier | colour; + var paletteLookup = CMap[finalColorIndex & 0x0f] & 0x07; + frameBuffer[counter] = FPalette[paletteLookup]; + } + } + } + + private void BuildFrame1() + { + int cnt = 0; + // rows + for (int row = 0; row < 64; row++) + { + var yIndex = row * 128; + var yByte = yIndex / 4; + + // last byte for this row contains palette modifier + var pModifier = (byte)(VRAM[yByte + 31] & 0x0C); + + // columns + for (int col = 0; col < 128; col++) + { + var fbIndex = (row * 64) + col; + + var xByte = col / 4; + var xRem = col % 4; + var xyByte = yByte + xByte; + + // each byte contains 4 pixel colour values, b0b1, b2b3, b4b5, b6b7 + int colour = 0; + + switch (xRem) + { + case 0: + colour = VRAM[xyByte] & 0x03; + break; + case 1: + colour = VRAM[xyByte] & 0x0C; + break; + case 2: + colour = VRAM[xyByte] & 0x30; + break; + case 3: + colour = VRAM[xyByte] & 0xC0; + break; + } + + var finalColorIndex = pModifier | colour; + var paletteLookup = CMap[finalColorIndex & 0x0f] & 0x07; + frameBuffer[fbIndex] = FPalette[paletteLookup]; + + cnt++; + } + } + } + } +} From 038bab2bff4e000fbe9b43fb6e24cf0ae69b4c16 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 8 May 2019 09:48:01 +0100 Subject: [PATCH 048/138] ChannelF: more bugfixes and disam update --- .../BizHawk.Emulation.Cores.csproj | 2 +- .../Consoles/Fairchild/ChannelF/Audio.cs | 108 ++++++++ .../ChannelF/ChannelF.IDebuggable.cs | 26 +- .../Fairchild/ChannelF/ChannelF.IEmulator.cs | 4 +- .../ChannelF/ChannelF.IVideoProvider.cs | 55 ++-- .../Consoles/Fairchild/ChannelF/ChannelF.cs | 1 + .../Fairchild/ChannelF/F8/F3850.ALU.cs | 235 ------------------ .../ChannelF/F8/F3850.Disassembler.cs | 48 ++-- .../Fairchild/ChannelF/F8/F3850.Execute.cs | 4 +- .../Fairchild/ChannelF/F8/F3850.Operations.cs | 74 +++--- .../Fairchild/ChannelF/F8/F3850.Registers.cs | 70 +++--- .../Fairchild/ChannelF/F8/F3850.Tables.cs | 50 ++-- .../Consoles/Fairchild/ChannelF/F8/F3850.cs | 192 +++++++------- .../Consoles/Fairchild/ChannelF/Memory.cs | 2 +- .../Consoles/Fairchild/ChannelF/Ports.cs | 123 ++++----- .../Consoles/Fairchild/ChannelF/Video.cs | 72 ++---- 16 files changed, 447 insertions(+), 619 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Audio.cs delete mode 100644 BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 5ed3b20e4f..ef1d8c3a49 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -605,13 +605,13 @@ - + diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Audio.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Audio.cs new file mode 100644 index 0000000000..6390adea4a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Audio.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Consoles.ChannelF +{ + /// + /// Audio related functions + /// + public partial class ChannelF : ISoundProvider + { + private double SampleRate = 44100; + private int SamplesPerFrame; + private double Period; + private double CyclesPerSample; + + + private int tone = 0; + + private double[] tone_freqs = new double[] { 0, 1000, 500, 120 }; + private double amplitude = 0; + private double decay = 0.998; + private double time = 0; + private double cycles = 0; + private int samplePos = 0; + private int lastCycle = 0; + + private BlipBuffer _blip; + + private short[] SampleBuffer; + + private void SetupAudio() + { + Period = (double)1 / SampleRate; + SamplesPerFrame = (int)(SampleRate / refreshRate); + CyclesPerSample = (double)ClockPerFrame / (double)SamplesPerFrame; + SampleBuffer = new short[SamplesPerFrame]; + _blip = new BlipBuffer(SamplesPerFrame); + _blip.SetRates(ClockPerFrame * refreshRate, SampleRate); + } + + private void AudioChange() + { + if (tone == 0) + { + // silence + } + else + { + int SamplesPerWave = (int)(SampleRate / tone_freqs[tone]); + double RadPerSample = (Math.PI * 2) / (double) SamplesPerWave; + double SinVal = 0; + + int NumSamples = (int)(((double)FrameClock - (double)lastCycle) / CyclesPerSample); + + int startPos = lastCycle; + + for (int i = 0; i < NumSamples; i++) + { + SinVal = Math.Sin(RadPerSample * (double) (i * SamplesPerWave)); + _blip.AddDelta((uint)startPos, (int) (Math.Floor(SinVal * 127) + 128) * 1024); + startPos += (int)CyclesPerSample; + } + } + } + + public bool CanProvideAsync => false; + + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + SampleBuffer = new short[SamplesPerFrame]; + samplePos = 0; + lastCycle = 0; + } + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + AudioChange(); + + _blip.EndFrame((uint)ClockPerFrame); + nsamp = _blip.SamplesAvailable(); + samples = new short[nsamp * 2]; + _blip.ReadSamples(samples, nsamp, true); + + for (int i = 0; i < nsamp * 2; i += 2) + { + samples[i + 1] = samples[i]; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs index 16a48c9684..ee961bcf67 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IDebuggable.cs @@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF if (reg > 63) throw new InvalidOperationException(); - CPU.Regs[reg] = (ushort) value; + CPU.Regs[reg] = (byte) value; } else { @@ -56,13 +56,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF default: throw new InvalidOperationException(); case "A": - CPU.Regs[CPU.A] = (ushort)value; + CPU.Regs[CPU.A] = (byte)value; break; case "W": - CPU.Regs[CPU.W] = (ushort)value; + CPU.Regs[CPU.W] = (byte)value; break; case "ISAR": - CPU.Regs[CPU.ISAR] = (ushort)(value & 0x3F); + CPU.Regs[CPU.ISAR] = (byte)(value & 0x3F); break; case "PC0": CPU.RegPC0 = (ushort)value; @@ -74,25 +74,25 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF CPU.RegDC0 = (ushort)value; break; case "DB": - CPU.Regs[CPU.DB] = (ushort)value; + CPU.Regs[CPU.DB] = (byte)value; break; case "IO": - CPU.Regs[CPU.IO] = (ushort)value; + CPU.Regs[CPU.IO] = (byte)value; break; case "J": - CPU.Regs[CPU.J] = (ushort)value; + CPU.Regs[CPU.J] = (byte)value; break; case "H": - CPU.Regs[CPU.Hl] = (ushort)(value & 0xFF); - CPU.Regs[CPU.Hh] = (ushort)(value & 0xFF00); + CPU.Regs[CPU.Hl] = (byte)(value & 0xFF); + CPU.Regs[CPU.Hh] = (byte)(value & 0xFF00); break; case "K": - CPU.Regs[CPU.Kl] = (ushort)(value & 0xFF); - CPU.Regs[CPU.Kh] = (ushort)(value & 0xFF00); + CPU.Regs[CPU.Kl] = (byte)(value & 0xFF); + CPU.Regs[CPU.Kh] = (byte)(value & 0xFF00); break; case "Q": - CPU.Regs[CPU.Ql] = (ushort)(value & 0xFF); - CPU.Regs[CPU.Qh] = (ushort)(value & 0xFF00); + CPU.Regs[CPU.Ql] = (byte)(value & 0xFF); + CPU.Regs[CPU.Qh] = (byte)(value & 0xFF00); break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs index 4ce4fcaaa9..fa44fd2e45 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IEmulator.cs @@ -22,8 +22,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF private void CalcClock() { - var c = ((cpuFreq * 1000000) / refreshRate) * 4; + var c = ((cpuFreq * 1000000) / refreshRate); ClockPerFrame = (int) c; + + SetupAudio(); } public bool FrameAdvance(IController controller, bool render, bool renderSound) diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs index d67cdd1a94..5393e91dcf 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.IVideoProvider.cs @@ -9,14 +9,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF { public int _frameHz = 60; - public int[] CroppedBuffer = new int[(128*64) * 2]; //new int[102 * 58]; + public int[] CroppedBuffer = new int[102 * 58]; #region IVideoProvider public int VirtualWidth => BufferWidth * 2; - public int VirtualHeight => (int)((double)BufferHeight * 1.5) * 2; - public int BufferWidth => 128;// 102; - public int BufferHeight => 64; // 58; + public int VirtualHeight => (int)((double)BufferHeight * 1.3) * 2; + public int BufferWidth => 102; //128 + public int BufferHeight => 58; //64 public int BackgroundColor => Colors.ARGB(0x00, 0x00, 0x00); public int VsyncNumerator => _frameHz; public int VsyncDenominator => 1; @@ -24,41 +24,32 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public int[] GetVideoBuffer() { BuildFrame(); - /* - for (int i = 0; i < frameBuffer.Length; i++) + + var lBorderWidth = 4; + var rBorderWidth = 128 - 102 - lBorderWidth; + var tBorderHeight = 4; + var bBorderHeight = 64 - 58 - tBorderHeight; + var startP = 128 * tBorderHeight; + var endP = 128 * bBorderHeight; + + int index = 0; + + for (int i = startP; i < frameBuffer.Length - endP; i += 128) { - CroppedBuffer[i] = frameBuffer[i]; - CroppedBuffer[i + frameBuffer.Length] = frameBuffer[i]; - } - - return CroppedBuffer; - */ - return frameBuffer; - - // crop to visible area - var lR = 4; - var rR = 128 - BufferWidth - lR; - var tR = 4; - var bR = 64 - BufferHeight - tR; - var sW = 128 - lR - rR; - var startP = 128 * tR; - var endP = 128 * bR; - - int index2 = 0; - - // line by line - for (int i = startP; i < CroppedBuffer.Length - endP; i += sW + lR + rR) - { - // each pixel in each line - for (int p = lR; p < sW + lR + rR - rR; p++) + for (int p = lBorderWidth; p < 128 - rBorderWidth; p++) { - if (index2 == CroppedBuffer.Length) + if (index == CroppedBuffer.Length) break; - CroppedBuffer[index2++] = frameBuffer[i + p]; + + CroppedBuffer[index++] = FPalette[frameBuffer[i + p]]; } } return CroppedBuffer; + + //return frameBuffer; + + } #endregion diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs index 7e19c5f260..78a54ecc79 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs @@ -47,6 +47,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF ser.Register(this); ser.Register(_tracer); ser.Register(CPU); + ser.Register(this); SetupMemoryDomains(); } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs deleted file mode 100644 index 70858f7576..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.ALU.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using BizHawk.Common.NumberExtensions; - -namespace BizHawk.Emulation.Cores.Consoles.ChannelF -{ - /// - /// ALU Operations - /// The arithmetic and logic unit provides all data manipulating logic for the F3850. - /// It contains logic that operates on a single 8-bit source data work or combines two 8-bit words of source data - /// to generate a single 8-bit result. Additional information is reported in status flags, where appropriate. - /// - /// Operations Performed: - /// * Addition - /// * Compare - /// * AND - /// * OR - /// * XOR - /// - public sealed partial class F3850 - { - /// - /// Clears all status flags (excluding the ICB flag) - /// - public void ALU_ClearFlags_() - { - FlagC = false; - FlagO = false; - FlagS = false; - FlagZ = false; - } - - /// - /// Sets the SIGN and ZERO flags based on the supplied byte - /// - /// - public void ALU_SetFlags_SZ_(ushort src) - { - FlagZ = (byte)Regs[src] == 0; - FlagS = (~((byte)Regs[src]) & 0x80) != 0; - } - /* - /// - /// Performs addition and sets the CARRY and OVERFLOW flags accordingly - /// - /// - /// - /// - public void ALU_ADD8_Func_(ushort dest, ushort src, bool carry = false) - { - byte d = (byte)Regs[dest]; - byte s = (byte)Regs[src]; - byte c = carry ? (byte)1 : (byte)0; - ushort result = (ushort)(d + s + c); - - FlagC = (result & 0x100) != 0; - FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; - - Regs[dest] = (ushort)(result & 0xFF); - } - */ - - /// - /// Performs addition and sets the CARRY and OVERFLOW flags accordingly WITHOUT saving to destination - /// - /// - /// - /// - public void ALU_ADD8_FLAGSONLY_Func(ushort dest, ushort src) - { - byte d = (byte)Regs[dest]; - byte s = (byte)Regs[src]; - ushort result = (ushort)(d + s); - - FlagC = (result & 0x100) != 0; - FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; - } - - /// - /// Performs decimal addition based on the two supplied bytes - /// (looks like this is only used in the AMD operation) - /// - /// - /// - - - public void ALU_SUB8_Func(ushort dest, ushort src) - { - byte d = (byte)Regs[dest]; - byte s = (byte)Regs[src]; - ushort result = (ushort)(d - s); - - FlagC = (result & 0x100) != 0; - FlagO = ((d ^ result) & (s ^ result) & 0x80) != 0; - - int Reg16_d = Regs[dest]; - Reg16_d -= Regs[src]; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); - FlagS = ans > 127; - - Regs[dest] = ans; - } - - /* - public void ALU_SUB8_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - Reg16_d -= Regs[src]; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - FlagO = (Regs[dest].Bit(7) != Regs[src].Bit(7)) && (Regs[dest].Bit(7) != ans.Bit(7)); - FlagS = ans > 127; - - Regs[dest] = ans; - } - */ - - - - /// - /// AND - /// - /// - /// - - - - - - /* - public void ALU_XOR8C_Func(ushort dest, ushort src) - { - // TODO - Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); - FlagZ = Regs[dest] == 0; - FlagC = false; - FlagO = false; - FlagS = Regs[dest] > 127; - } - */ - - public void ADDS_FuncX(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) - { - int Reg16_d = Regs[dest_l]; - int Reg16_s = Regs[src_l]; - - Reg16_d += Reg16_s; - - ushort temp = 0; - - // since this is signed addition, calculate the high byte carry appropriately - // note that flags are unaffected by this operation - if (Reg16_s.Bit(7)) - { - if (((Reg16_d & 0xFF) >= Regs[dest_l])) - { - temp = 0xFF; - } - else - { - temp = 0; - } - } - else - { - temp = (ushort)(Reg16_d.Bit(8) ? 1 : 0); - } - - ushort ans_l = (ushort)(Reg16_d & 0xFF); - - Regs[dest_l] = ans_l; - Regs[dest_h] += temp; - Regs[dest_h] &= 0xFF; - } - - - /* - public void LR8_Func(ushort dest, ushort src) - { - if (dest == DB) - { - // byte storage - Regs[dest] = (ushort)(Regs[src] & 0xFF); - } - else if (dest == W) - { - // mask for status register - Regs[dest] = (ushort)(Regs[src] & 0x1F); - } - else if (dest == ISAR) - { - // mask for ISAR register - Regs[dest] = (ushort)(Regs[src] & 0x3F); - } - else - { - Regs[dest] = Regs[src]; - } - } - */ - - /* - public void ALU_INC8_Func(ushort src) - { - int Reg16_d = Regs[src]; - Reg16_d += 1; - - FlagC = Reg16_d.Bit(8); - FlagZ = (Reg16_d & 0xFF) == 0; - - ushort ans = (ushort)(Reg16_d & 0xFF); - - Regs[src] = ans; - - FlagS = Regs[src].Bit(7); - FlagO = Regs[src] == 0x80; - } - */ - - - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs index 223eba1a51..f3e4510f89 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Disassembler.cs @@ -169,14 +169,14 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "LIS D", // 0x7D "LIS E", // 0x7E "LIS F", // 0x7F - "BT 0", // 0x80 - "BT 1", // 0x81 - "BT 2", // 0x82 - "BT 3", // 0x83 - "BT 4", // 0x84 - "BT 5", // 0x85 - "BT 6", // 0x86 - "BT 7", // 0x87 + "BT NOBRANCH", // 0x80 + "BP d", // 0x81 + "BC d", // 0x82 + "BP or C d", // 0x83 + "BZ d", // 0x84 + "BP d", // 0x85 + "BZ or C d", // 0x86 + "BP or C d", // 0x87 "AM", // 0x88 "AMD", // 0x89 "NM", // 0x8A @@ -185,22 +185,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "CM", // 0x8D "ADC", // 0x8E "BR7 n", // 0x8F - "BF 0x0 n", // 0x90 - "BF 0x1 n", // 0x91 - "BF 0x2 n", // 0x92 - "BF 0x3 n", // 0x93 - "BF 0x4 n", // 0x94 - "BF 0x5 n", // 0x95 - "BF 0x6 n", // 0x96 - "BF 0x7 n", // 0x97 - "BF 0x8 n", // 0x98 - "BF 0x9 n", // 0x99 - "BF 0xA n", // 0x9A - "BF 0xB n", // 0x9B - "BF 0xC n", // 0x9C - "BF 0xD n", // 0x9D - "BF 0xE n", // 0x9E - "BF 0xF n", // 0x9F + "BF UNCON d", // 0x90 + "BN d", // 0x91 + "BNC d", // 0x92 + "BNC & deg d", // 0x93 + "BNZ d", // 0x94 + "BN d", // 0x95 + "BNC & dZ d", // 0x96 + "BNC & deg d", // 0x97 + "BNO d", // 0x98 + "BN & dO d", // 0x99 + "BNO & dC d", // 0x9A + "BNO & dC & deg d", // 0x9B + "BNO & dZ d", // 0x9C + "BN & dO d", // 0x9D + "BNO & dC & dZ d", // 0x9E + "BNO & dC & deg d", // 0x9F "INS 0", // 0xA0 "INS 1", // 0xA1 "ILLEGAL", // 0xA2 diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs index 8a2f952e67..7c5ae0e707 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Execute.cs @@ -15,8 +15,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public long TotalExecutedCycles; public int instr_pntr = 0; - public ushort[] cur_instr = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime - public ushort[] cur_romc = new ushort[MaxInstructionLength]; // fixed size - do not change at runtime + public byte[] cur_instr = new byte[MaxInstructionLength]; // fixed size - do not change at runtime + public byte[] cur_romc = new byte[MaxInstructionLength]; // fixed size - do not change at runtime public byte opcode; public void FetchInstruction() diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs index 7698d0060a..648f3120d3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Operations.cs @@ -12,22 +12,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// public sealed partial class F3850 { - public void Read_Func(ushort dest, ushort src_l, ushort src_h) + public void Read_Func(byte dest, byte src_l, byte src_h) { Regs[dest] = ReadMemory((ushort)(Regs[src_l] | (Regs[src_h]) << 8)); } - public void Write_Func(ushort dest_l, ushort dest_h, ushort src) + public void Write_Func(byte dest_l, byte dest_h, byte src) { - WriteMemory((ushort)(Regs[dest_l] | (Regs[dest_h] << 8)), (byte)Regs[src]); + WriteMemory((ushort)(Regs[dest_l] | (Regs[dest_h] << 8)), Regs[src]); } - public void IN_Func(ushort dest, ushort src) + public void IN_Func(byte dest, byte src) { Regs[dest] = ReadHardware(Regs[src]); } - public void LR_A_IO_Func(ushort dest, ushort src) + public void LR_A_IO_Func(byte dest, byte src) { // helper method that simulates transferring DB to accumulator (as part of an IN operation) // this sets flags accordingly @@ -55,22 +55,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF FlagZ = false; } - public void LR_Func(ushort dest, ushort src) + public void LR_Func(byte dest, byte src) { if (dest == DB) { // byte storage - Regs[dest] = (ushort)(Regs[src] & 0xFF); + Regs[dest] = (byte)(Regs[src] & 0xFF); } else if (dest == W) { // mask for status register - Regs[dest] = (ushort)(Regs[src] & 0x1F); + Regs[dest] = (byte)(Regs[src] & 0x1F); } else if (dest == ISAR) { // mask for ISAR register - Regs[dest] = (ushort)(Regs[src] & 0x3F); + Regs[dest] = (byte)(Regs[src] & 0x3F); } else { @@ -83,13 +83,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// /// - public void SR_Func(ushort src, ushort shift) + public void SR_Func(byte src, byte shift) { // overflow and carry unconditionally reset FlagO = false; FlagC = false; - Regs[src] = (ushort)((Regs[src] >> shift) & 0xFF); + Regs[src] = (byte)((Regs[src] >> shift) & 0xFF); FlagZ = Regs[src] == 0; @@ -104,13 +104,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// /// - public void SL_Func(ushort src, ushort shift) + public void SL_Func(byte src, byte shift) { // overflow and carry unconditionally reset FlagO = false; FlagC = false; - Regs[src] = (ushort)((Regs[src] << shift) & 0xFF); + Regs[src] = (byte)((Regs[src] << shift) & 0xFF); FlagZ = Regs[src] == 0; @@ -120,7 +120,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // ICB flag not affected } - public void ADD_Func(ushort dest, ushort src) + public void ADD_Func_(byte dest, byte src) { // addition of 2 signed bytes ushort dest16 = Regs[dest]; @@ -140,16 +140,32 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF var b7c = dest16 >> 8; FlagO = (b6c ^ b7c) != 0; - Regs[dest] = ans; + Regs[dest] = (byte)ans; } - public void SUB_Func(ushort dest, ushort src) + public void ADD_Func(byte dest, byte src) { - Regs[ALU0] = (ushort)((Regs[src] ^ 0xff) + 1); + // addition of 2 signed bytes + var sD = Regs[dest] & 0x80; + var sS = Regs[src] & 0x80; + var res = Regs[dest] + Regs[src]; + var sR = res & 0x80; + + FlagS = !((res & 0x80) > 0); + FlagZ = (res & 0xff) == 0; + FlagO = (sD == sS && sD != sR); + FlagC = (res & 0x100) > 0; + + Regs[dest] = (byte) (res & 0xff); + } + + public void SUB_Func(byte dest, byte src) + { + Regs[ALU0] = (byte)((Regs[src] ^ 0xff) + 1); ADD_Func(dest, ALU0); } - public void ADDD_Func(ushort dest, ushort src) + public void ADDD_Func(byte dest, byte src) { var d = Regs[dest]; var s = Regs[src]; @@ -173,7 +189,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF bcdRes = (bcdRes + 0xA0); } - Regs[dest] = (ushort)(bcdRes & 0xFF); + Regs[dest] = (byte)(bcdRes & 0xFF); } public void CI_Func() @@ -182,10 +198,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // we need to achieve DB - A + 1 // flags set - results not stored var comp = ((Regs[A] ^ 0xFF) + 1); - Regs[ALU0] = (ushort)comp; - ADD_Func(DB, ALU0); + Regs[ALU0] = (byte)comp; + Regs[ALU1] = Regs[DB]; + ADD_Func(ALU1, ALU0); } - + /* public void ADDD_Func_(ushort dest, ushort src) { // from MAME f8.cpp (BSD-3) @@ -229,14 +246,15 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Regs[dest] = tmp; } + */ - public void AND_Func(ushort dest, ushort src) + public void AND_Func(byte dest, byte src) { // overflow and carry unconditionally reset FlagO = false; FlagC = false; - Regs[dest] = (ushort)(Regs[dest] & Regs[src]); + Regs[dest] = (byte)(Regs[dest] & Regs[src]); FlagZ = Regs[src] == 0; @@ -246,13 +264,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // ICB flag not affected } - public void OR_Func(ushort dest, ushort src) + public void OR_Func(byte dest, byte src) { // overflow and carry unconditionally reset FlagO = false; FlagC = false; - Regs[dest] = (ushort)(Regs[dest] | Regs[src]); + Regs[dest] = (byte)(Regs[dest] | Regs[src]); FlagZ = Regs[src] == 0; @@ -262,13 +280,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // ICB flag not affected } - public void XOR_Func(ushort dest, ushort src) + public void XOR_Func(byte dest, byte src) { // overflow and carry unconditionally reset FlagO = false; FlagC = false; - Regs[dest] = (ushort)(Regs[dest] ^ Regs[src]); + Regs[dest] = (byte)(Regs[dest] ^ Regs[src]); FlagZ = Regs[src] == 0; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs index b426d9d4e4..c084cc402f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Registers.cs @@ -17,83 +17,83 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// Registers (counters and scratchpad) /// - public ushort[] Regs = new ushort[100]; + public byte[] Regs = new byte[100]; // scratchpad registers live in Regs 0-64 - public ushort J = 9; - public ushort Hh = 10; - public ushort Hl = 11; - public ushort Kh = 12; - public ushort Kl = 13; - public ushort Qh = 14; - public ushort Ql = 15; + public byte J = 9; + public byte Hh = 10; + public byte Hl = 11; + public byte Kh = 12; + public byte Kl = 13; + public byte Qh = 14; + public byte Ql = 15; // Internal CPU counters kept after the scratchpad for ease of implementation /// /// Accumulator /// - public ushort A = 65; + public byte A = 65; /// /// Status Register /// - public ushort W = 66; + public byte W = 66; /// /// Indirect Scratchpad Address Register /// (6bit) /// - public ushort ISAR = 67; + public byte ISAR = 67; /// /// Primary Program Counter (high byte) /// - public ushort PC0h = 68; + public byte PC0h = 68; /// /// Primary Program Counter (low byte) /// - public ushort PC0l = 69; + public byte PC0l = 69; /// /// Backup Program Counter (high byte) /// - public ushort PC1h = 70; + public byte PC1h = 70; /// /// Backup Program Counter (low byte) /// - public ushort PC1l = 71; + public byte PC1l = 71; /// /// Data counter (high byte) /// - public ushort DC0h = 72; + public byte DC0h = 72; /// /// Data Counter (low byte) /// - public ushort DC0l = 73; + public byte DC0l = 73; /// /// Temporary Arithmetic Storage /// - public ushort ALU0 = 74; + public byte ALU0 = 74; /// /// Temporary Arithmetic Storage /// - public ushort ALU1 = 75; + public byte ALU1 = 75; /// /// Data Bus /// - public ushort DB = 76; + public byte DB = 76; /// /// IO Bus/Latch /// - public ushort IO = 77; + public byte IO = 77; /// /// 0x00 value for arithmetic ops /// - public ushort ZERO = 78; + public byte ZERO = 78; /// /// 0x01 value for arithmetic ops /// - public ushort ONE = 79; + public byte ONE = 79; /// /// 0xFF value for arithmetic ops /// - public ushort BYTE = 80; + public byte BYTE = 80; /// @@ -102,7 +102,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FlagS { get { return (Regs[W] & 0x01) != 0; } - set { Regs[W] = (ushort)((Regs[W] & ~0x01) | (value ? 0x01 : 0x00)); } + set { Regs[W] = (byte)((Regs[W] & ~0x01) | (value ? 0x01 : 0x00)); } } /// @@ -111,7 +111,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FlagC { get { return (Regs[W] & 0x02) != 0; } - set { Regs[W] = (ushort)((Regs[W] & ~0x02) | (value ? 0x02 : 0x00)); } + set { Regs[W] = (byte)((Regs[W] & ~0x02) | (value ? 0x02 : 0x00)); } } /// @@ -120,7 +120,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FlagZ { get { return (Regs[W] & 0x04) != 0; } - set { Regs[W] = (ushort)((Regs[W] & ~0x04) | (value ? 0x04 : 0x00)); } + set { Regs[W] = (byte)((Regs[W] & ~0x04) | (value ? 0x04 : 0x00)); } } /// @@ -129,7 +129,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FlagO { get { return (Regs[W] & 0x08) != 0; } - set { Regs[W] = (ushort)((Regs[W] & ~0x08) | (value ? 0x08 : 0x00)); } + set { Regs[W] = (byte)((Regs[W] & ~0x08) | (value ? 0x08 : 0x00)); } } /// @@ -138,7 +138,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public bool FlagICB { get { return (Regs[W] & 0x10) != 0; } - set { Regs[W] = (ushort)((Regs[W] & ~0x10) | (value ? 0x10 : 0x00)); } + set { Regs[W] = (byte)((Regs[W] & ~0x10) | (value ? 0x10 : 0x00)); } } /// @@ -149,8 +149,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF get { return (ushort)(Regs[PC0l] | (Regs[PC0h] << 8)); } set { - Regs[PC0l] = (ushort)(value & 0xFF); - Regs[PC0h] = (ushort)((value >> 8) & 0xFF); + Regs[PC0l] = (byte)(value & 0xFF); + Regs[PC0h] = (byte)((value >> 8) & 0xFF); } } @@ -162,8 +162,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF get { return (ushort)(Regs[PC1l] | (Regs[PC1h] << 8)); } set { - Regs[PC1l] = (ushort)(value & 0xFF); - Regs[PC1h] = (ushort)((value >> 8) & 0xFF); + Regs[PC1l] = (byte)(value & 0xFF); + Regs[PC1h] = (byte)((value >> 8) & 0xFF); } } @@ -175,8 +175,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF get { return (ushort)(Regs[DC0l] | (Regs[DC0h] << 8)); } set { - Regs[DC0l] = (ushort)(value & 0xFF); - Regs[DC0h] = (ushort)((value >> 8) & 0xFF); + Regs[DC0l] = (byte)(value & 0xFF); + Regs[DC0h] = (byte)((value >> 8) & 0xFF); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs index ef80c0e7a7..8273969482 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.Tables.cs @@ -306,7 +306,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void SHIFT_R(ushort index) + private void SHIFT_R(byte index) { PopulateCURINSTR( // S @@ -316,7 +316,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void SHIFT_L(ushort index) + private void SHIFT_L(byte index) { PopulateCURINSTR( // S @@ -748,10 +748,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void DS(ushort rIndex) + private void DS(byte rIndex) { // only scratch registers 0-16 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // L @@ -799,10 +799,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void LR_A_R(ushort rIndex) + private void LR_A_R(byte rIndex) { // only scratch registers 0-16 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // S @@ -842,10 +842,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void LR_R_A(ushort rIndex) + private void LR_R_A(byte rIndex) { // only scratch registers 0-16 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // S @@ -885,7 +885,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void LISU(ushort octal) + private void LISU(byte octal) { PopulateCURINSTR( // S @@ -895,7 +895,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void LISL(ushort octal) + private void LISL(byte octal) { PopulateCURINSTR( // S @@ -905,7 +905,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void LIS(ushort index) + private void LIS(byte index) { PopulateCURINSTR( // S @@ -915,7 +915,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void BT(ushort index) + private void BT(byte index) { PopulateCURINSTR( // S @@ -1050,7 +1050,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF OP_BR7); // no END as there is branching logic within OP_BR7 } - private void BF(ushort index) + private void BF(byte index) { PopulateCURINSTR( // S @@ -1060,7 +1060,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF OP_BF, index); // no END as there is branching logic within OP_BF } - private void INS_0(ushort index) + private void INS_0(byte index) { PopulateCURINSTR( // S @@ -1075,7 +1075,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void INS_1(ushort index) + private void INS_1(byte index) { Regs[IO] = index; // latch port index early @@ -1101,7 +1101,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void OUTS_0(ushort index) + private void OUTS_0(byte index) { PopulateCURINSTR( // S @@ -1116,7 +1116,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void OUTS_1(ushort index) + private void OUTS_1(byte index) { Regs[IO] = index; // latch port index early @@ -1142,10 +1142,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void AS(ushort rIndex) + private void AS(byte rIndex) { // only scratch registers 0-15 - rIndex = (ushort) (rIndex & 0x0F); + rIndex = (byte) (rIndex & 0x0F); PopulateCURINSTR( // S @@ -1188,10 +1188,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void ASD(ushort rIndex) + private void ASD(byte rIndex) { // only scratch registers 0-15 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // S @@ -1251,10 +1251,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void XS(ushort rIndex) + private void XS(byte rIndex) { // only scratch registers 0-15 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // S @@ -1295,10 +1295,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF END); } - private void NS(ushort rIndex) + private void NS(byte rIndex) { // only scratch registers 0-15 - rIndex = (ushort)(rIndex & 0x0F); + rIndex = (byte)(rIndex & 0x0F); PopulateCURINSTR( // S diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs index 3e0b240769..1532d09ba0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/F8/F3850.cs @@ -40,77 +40,77 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public sealed partial class F3850 { // operations that can take place in an instruction - public const ushort ROMC_01 = 1; - public const ushort ROMC_02 = 2; - public const ushort ROMC_03_S = 3; - public const ushort ROMC_04 = 4; - public const ushort ROMC_05 = 5; - public const ushort ROMC_06 = 6; - public const ushort ROMC_07 = 7; - public const ushort ROMC_08 = 8; - public const ushort ROMC_09 = 9; - public const ushort ROMC_0A = 10; - public const ushort ROMC_0B = 11; - public const ushort ROMC_0C = 12; - public const ushort ROMC_0D = 13; - public const ushort ROMC_0E = 14; - public const ushort ROMC_0F = 15; - public const ushort ROMC_10 = 16; - public const ushort ROMC_11 = 17; - public const ushort ROMC_12 = 18; - public const ushort ROMC_13 = 19; - public const ushort ROMC_14 = 20; - public const ushort ROMC_15 = 21; - public const ushort ROMC_16 = 22; - public const ushort ROMC_17 = 23; - public const ushort ROMC_18 = 24; - public const ushort ROMC_19 = 25; - public const ushort ROMC_1A = 26; - public const ushort ROMC_1B = 27; - public const ushort ROMC_1C_S = 28; - public const ushort ROMC_1D = 29; - public const ushort ROMC_1E = 30; - public const ushort ROMC_1F = 31; - public const ushort ROMC_00_S = 32; - public const ushort ROMC_00_L = 33; - public const ushort ROMC_03_L = 34; - public const ushort ROMC_1C_L = 35; + public const byte ROMC_01 = 1; + public const byte ROMC_02 = 2; + public const byte ROMC_03_S = 3; + public const byte ROMC_04 = 4; + public const byte ROMC_05 = 5; + public const byte ROMC_06 = 6; + public const byte ROMC_07 = 7; + public const byte ROMC_08 = 8; + public const byte ROMC_09 = 9; + public const byte ROMC_0A = 10; + public const byte ROMC_0B = 11; + public const byte ROMC_0C = 12; + public const byte ROMC_0D = 13; + public const byte ROMC_0E = 14; + public const byte ROMC_0F = 15; + public const byte ROMC_10 = 16; + public const byte ROMC_11 = 17; + public const byte ROMC_12 = 18; + public const byte ROMC_13 = 19; + public const byte ROMC_14 = 20; + public const byte ROMC_15 = 21; + public const byte ROMC_16 = 22; + public const byte ROMC_17 = 23; + public const byte ROMC_18 = 24; + public const byte ROMC_19 = 25; + public const byte ROMC_1A = 26; + public const byte ROMC_1B = 27; + public const byte ROMC_1C_S = 28; + public const byte ROMC_1D = 29; + public const byte ROMC_1E = 30; + public const byte ROMC_1F = 31; + public const byte ROMC_00_S = 32; + public const byte ROMC_00_L = 33; + public const byte ROMC_03_L = 34; + public const byte ROMC_1C_L = 35; - public const ushort IDLE = 0; - public const ushort END = 51; + public const byte IDLE = 0; + public const byte END = 51; - public const ushort OP_LR8 = 100; - public const ushort OP_SHFT_R = 101; - public const ushort OP_SHFT_L = 102; - public const ushort OP_LNK = 103; - public const ushort OP_DI = 104; - public const ushort OP_EI = 105; - public const ushort OP_INC8 = 106; - public const ushort OP_AND8 = 107; - public const ushort OP_OR8 = 108; - public const ushort OP_XOR8 = 109; - //public const ushort OP_COM = 110; - public const ushort OP_SUB8 = 110; - public const ushort OP_ADD8 = 111; - public const ushort OP_CI = 112; - public const ushort OP_IS_INC = 113; - public const ushort OP_IS_DEC = 114; - public const ushort OP_LISU = 115; - public const ushort OP_LISL = 116; - public const ushort OP_BT = 117; - public const ushort OP_ADD8D = 118; - public const ushort OP_BR7 = 119; - public const ushort OP_BF = 120; - public const ushort OP_IN = 121; - public const ushort OP_OUT = 122; - //public const ushort OP_AS_IS = 123; - //public const ushort OP_XS_IS = 124; - //public const ushort OP_NS_IS = 125; - public const ushort OP_LR_A_DB_IO = 126; - public const ushort OP_DS = 127; - //public const ushort OP_CLEAR_FLAGS = 126; - //public const ushort OP_SET_FLAGS_SZ = 127; - public const ushort OP_LIS = 128; + public const byte OP_LR8 = 100; + public const byte OP_SHFT_R = 101; + public const byte OP_SHFT_L = 102; + public const byte OP_LNK = 103; + public const byte OP_DI = 104; + public const byte OP_EI = 105; + public const byte OP_INC8 = 106; + public const byte OP_AND8 = 107; + public const byte OP_OR8 = 108; + public const byte OP_XOR8 = 109; + //public const byte OP_COM = 110; + public const byte OP_SUB8 = 110; + public const byte OP_ADD8 = 111; + public const byte OP_CI = 112; + public const byte OP_IS_INC = 113; + public const byte OP_IS_DEC = 114; + public const byte OP_LISU = 115; + public const byte OP_LISL = 116; + public const byte OP_BT = 117; + public const byte OP_ADD8D = 118; + public const byte OP_BR7 = 119; + public const byte OP_BF = 120; + public const byte OP_IN = 121; + public const byte OP_OUT = 122; + //public const byte OP_AS_IS = 123; + //public const byte OP_XS_IS = 124; + //public const byte OP_NS_IS = 125; + public const byte OP_LR_A_DB_IO = 126; + public const byte OP_DS = 127; + //public const byte OP_CLEAR_FLAGS = 126; + //public const byte OP_SET_FLAGS_SZ = 127; + public const byte OP_LIS = 128; public F3850() @@ -208,7 +208,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // loads supplied index value into register case OP_LIS: - Regs[ALU1] = (ushort)(cur_instr[instr_pntr++] & 0x0F); + Regs[ALU1] = (byte)(cur_instr[instr_pntr++] & 0x0F); LR_Func(A, ALU1); break; @@ -239,7 +239,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // A <- (A) + (C) case OP_LNK: - Regs[ALU0] = (ushort)(FlagC ? 1 : 0); + Regs[ALU0] = (byte)(FlagC ? 1 : 0); ADD_Func(A, ALU0); break; @@ -280,22 +280,22 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // ISAR is incremented case OP_IS_INC: - Regs[ISAR] = (ushort)((Regs[ISAR]& 0x38) | ((Regs[ISAR] + 1) & 0x07)); + Regs[ISAR] = (byte)((Regs[ISAR]& 0x38) | ((Regs[ISAR] + 1) & 0x07)); break; // ISAR is decremented case OP_IS_DEC: - Regs[ISAR] = (ushort)((Regs[ISAR] & 0x38) | ((Regs[ISAR] - 1) & 0x07)); + Regs[ISAR] = (byte)((Regs[ISAR] & 0x38) | ((Regs[ISAR] - 1) & 0x07)); break; // set the upper octal ISAR bits (b3,b4,b5) case OP_LISU: - Regs[ISAR] = (ushort)((((Regs[ISAR] & 0x07) | (cur_instr[instr_pntr++] & 0x07) << 3)) & 0x3F); + Regs[ISAR] = (byte)((((Regs[ISAR] & 0x07) | (cur_instr[instr_pntr++] & 0x07) << 3)) & 0x3F); break; // set the lower octal ISAR bits (b0,b1,b2) case OP_LISL: - Regs[ISAR] = (ushort) (((Regs[ISAR] & 0x38) | (cur_instr[instr_pntr++] & 0x07)) & 0x3F); + Regs[ISAR] = (byte) (((Regs[ISAR] & 0x38) | (cur_instr[instr_pntr++] & 0x07)) & 0x3F); break; // decrement scratchpad byte @@ -333,8 +333,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; case 5: - // branch if positive (same as t==1) - if (FlagS) branchBT = true; + // branch if positive and zero + if (FlagS || FlagZ) branchBT = true; break; case 6: @@ -342,8 +342,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF if (FlagZ || FlagC) branchBT = true; break; case 7: - // branch if positive or on carry (same as t==3) - if (FlagS || FlagC) branchBT = true; + // branch if positive or on carry or zero + if (FlagS || FlagC || FlagZ) branchBT = true; break; } @@ -355,13 +355,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // Branch on ISARL case OP_BR7: instr_pntr = 1; // lose a cycle - if (!Regs[ISAR].Bit(0) || !Regs[ISAR].Bit(1) || !Regs[ISAR].Bit(2)) + if (Regs[ISAR].Bit(0) && Regs[ISAR].Bit(1) && Regs[ISAR].Bit(2)) { - DO_BRANCH(); + DONT_BRANCH(); } else { - DONT_BRANCH(); + DO_BRANCH(); } break; @@ -396,8 +396,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; case 5: - // same as t==1 - if (!FlagS) branchBF = true; + // branch if not zero and negative + if (!FlagS && !FlagZ) branchBF = true; break; case 6: @@ -406,8 +406,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; case 7: - // same as t==3 - if (!FlagS && !FlagC) branchBF = true; + // branch if not zero, carry and sign + if (!FlagS && !FlagC && !FlagZ) branchBF = true; break; case 8: @@ -436,8 +436,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; case 0xD: - // same as t==9 - if (!FlagS && !FlagO) branchBF = true; + // branch if no overflow, not zero and neg + if (!FlagS && !FlagO && !FlagZ) branchBF = true; break; case 0xE: @@ -446,8 +446,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF break; case 0xF: - // same as t=0xB - if (!FlagO && !FlagC && !FlagS) branchBF = true; + // all neg + if (!FlagO && !FlagC && !FlagS && FlagZ) branchBF = true; break; } @@ -461,13 +461,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF instr_pntr++; // dest == A Regs[ALU0] = cur_instr[instr_pntr++]; // src IN_Func(A, ALU0); - //Regs[cur_instr[instr_pntr++]] = ReadHardware(cur_instr[instr_pntr++]); break; // I/O Port 0 or 1 <- (A) case OP_OUT: - WriteHardware(cur_instr[instr_pntr++], (byte)cur_instr[instr_pntr++]); - //OUT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + WriteHardware(cur_instr[instr_pntr++], (byte)Regs[cur_instr[instr_pntr++]]); break; // instruction fetch @@ -779,10 +777,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// /// Optimization method to set cur_instr /// - private void PopulateCURINSTR(ushort d0 = 0, ushort d1 = 0, ushort d2 = 0, ushort d3 = 0, ushort d4 = 0, ushort d5 = 0, ushort d6 = 0, ushort d7 = 0, ushort d8 = 0, - ushort d9 = 0, ushort d10 = 0, ushort d11 = 0, ushort d12 = 0, ushort d13 = 0, ushort d14 = 0, ushort d15 = 0, ushort d16 = 0, ushort d17 = 0, ushort d18 = 0, - ushort d19 = 0, ushort d20 = 0, ushort d21 = 0, ushort d22 = 0, ushort d23 = 0, ushort d24 = 0, ushort d25 = 0, ushort d26 = 0, ushort d27 = 0, ushort d28 = 0, - ushort d29 = 0, ushort d30 = 0, ushort d31 = 0, ushort d32 = 0, ushort d33 = 0, ushort d34 = 0, ushort d35 = 0, ushort d36 = 0, ushort d37 = 0) + private void PopulateCURINSTR(byte d0 = 0, byte d1 = 0, byte d2 = 0, byte d3 = 0, byte d4 = 0, byte d5 = 0, byte d6 = 0, byte d7 = 0, byte d8 = 0, + byte d9 = 0, byte d10 = 0, byte d11 = 0, byte d12 = 0, byte d13 = 0, byte d14 = 0, byte d15 = 0, byte d16 = 0, byte d17 = 0, byte d18 = 0, + byte d19 = 0, byte d20 = 0, byte d21 = 0, byte d22 = 0, byte d23 = 0, byte d24 = 0, byte d25 = 0, byte d26 = 0, byte d27 = 0, byte d28 = 0, + byte d29 = 0, byte d30 = 0, byte d31 = 0, byte d32 = 0, byte d33 = 0, byte d34 = 0, byte d35 = 0, byte d36 = 0, byte d37 = 0) { cur_instr[0] = d0; cur_instr[1] = d1; cur_instr[2] = d2; cur_instr[3] = d3; cur_instr[4] = d4; cur_instr[5] = d5; diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs index 6cf6ced0ca..41fbd55593 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Memory.cs @@ -34,7 +34,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF else if (addr < 0x2000) { // Cart - return 0; + //return 0; return Rom[addr - 0x800]; } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs index 079f952168..acf9373e9e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Ports.cs @@ -35,9 +35,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// public byte ReadPort(ushort addr) { - byte port = (byte) (addr & 0x07); - - switch (port) + switch (addr) { // Console buttons // b0: TIME @@ -45,7 +43,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // b2: HOLD // b3: START case 0: - return (byte)((DataConsole ^ 0xFF) & 0x0F); + return (byte)((DataConsole ^ 0xff) | PortLatch[PORT0]); // Right controller // b0: RIGHT @@ -57,11 +55,16 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // b6: PULL // b7: PUSH case 1: - if (ControllersEnabled) + byte ed1; + if ((PortLatch[PORT0] & 0x40) == 0) { - return (byte)((DataRight ^ 0xFF) & 0xFF); + ed1 = DataRight; } - return 0; + else + { + ed1 = (byte) (0xC0 | DataRight); + } + return (byte) ((ed1 ^ 0xff) | PortLatch[PORT1]); // Left controller // b0: RIGHT @@ -73,14 +76,23 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF // b6: PULL // b7: PUSH case 4: - if (ControllersEnabled) + byte ed4; + if ((PortLatch[PORT0] & 0x40) == 0) { - return (byte)((DataLeft ^ 0xFF) & 0xFF); + ed4 = DataLeft; } + else + { + ed4 = 0xff; + } + return (byte)((ed4 ^ 0xff) | PortLatch[PORT4]); + + case 5: + return (byte) (0 | PortLatch[PORT5]); + + default: return 0; } - - return 0xFF; } /// @@ -90,97 +102,70 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF /// public void WritePort(ushort addr, byte value) { - byte port = (byte)(addr & 0x07); - - switch (port) + switch (addr) { case 0: - - ControllersEnabled = (value & 0x40) == 0; - - var val = value & 0x60; - if (val == 0x40)// && _arm == 0x60) - { - VRAM[(128 * _y) + _x] = (byte)_colour; - } - - /* - - // RAM WRT - A pulse here executes a write to video RAM - bool ramWrt = value.Bit(5); - - // Enable data from controllers (1 equals enable) - // also needs pulse to write to video RAM - bool controllerDataEnable = value.Bit(6); - - if (ramWrt || controllerDataEnable) - { - // triggered write to VRAM - var yxIndex = (_y * 128) + _x; - var byteIndex = yxIndex / 4; - var byteRem = yxIndex % 4; - - switch (byteRem) - { - case 0: - VRAM[byteIndex] |= (byte) _colour; - break; - case 1: - VRAM[byteIndex] |= (byte) (_colour << 2); - break; - case 2: - VRAM[byteIndex] |= (byte)(_colour << 4); - break; - case 3: - VRAM[byteIndex] |= (byte)(_colour << 6); - break; - } - - } - */ - - _arm = value; - PortLatch[PORT0] = value; - + if ((value & 0x20) != 0) + { + var offset = _x + (_y * 128); + VRAM[offset] = (byte)(_colour); + } break; case 1: + PortLatch[PORT1] = value; + // Write Data0 - indicates that valid data is present for both VRAM ODD0 and EVEN0 bool data0 = value.Bit(6); // Write Data1 - indicates that valid data is present for both VRAM ODD1 and EVEN1 bool data1 = value.Bit(7); - _colour = ((value ^ 0xff) >> 6) & 0x03; - - PortLatch[PORT1] = value; - + //_colour = ((value) >> 6) & 3; + _colour = ((value ^ 0xff) >> 6) & 0x3; break; case 4: + PortLatch[PORT4] = value; + _x = (value ^ 0xff) & 0x7f; + //_x = (value | 0x80) ^ 0xFF; + /* // video horizontal position // 0 - video select // 1-6 - horiz A-F - _x = (value ^ 0xff) & 0x7f; + - PortLatch[PORT4] = value; + */ break; case 5: + PortLatch[PORT5] = value; + //_y = (value & 31); // ^ 0xff; + //_y = (value | 0xC0) ^ 0xff; + + //_y = (value ^ 0xff) & 0x1f; + // video vertical position and sound // 0-5 - Vertical A-F // 6 - Tone AN, 7 - Tone BN _y = (value ^ 0xff) & 0x3f; - PortLatch[PORT5] = value; - + // audio + var aVal = ((value >> 6) & 0x03); // (value & 0xc0) >> 6; + if (aVal != tone) + { + tone = aVal; + time = 0; + amplitude = 1; + AudioChange(); + } break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs index 864e228c2a..9c26fec92f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/Video.cs @@ -1,4 +1,5 @@ using System; +using System.CodeDom; using System.Collections.Generic; using System.Linq; using System.Text; @@ -20,6 +21,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF public static readonly int[] FPalette = { + /* + 0x101010, 0xFDFDFD, 0x5331FF, 0x5DCC02, 0xF33F4B, 0xE0E0E0, 0xA6FF91, 0xD0CEFF + */ + Colors.ARGB(0x10, 0x10, 0x10), // Black Colors.ARGB(0xFD, 0xFD, 0xFD), // White Colors.ARGB(0xFF, 0x31, 0x53), // Red @@ -28,6 +33,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF Colors.ARGB(0xE0, 0xE0, 0xE0), // Gray Colors.ARGB(0x91, 0xFF, 0xA6), // BGreen Colors.ARGB(0xCE, 0xD0, 0xFF), // BBlue + }; public static readonly int[] CMap = @@ -52,67 +58,21 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF for (int row = 0; row < 64; row++) { // columns 125 and 126 hold the palette index modifier for the entire row - var rIndex = 64 * row; - var c125 = (VRAM[rIndex + 125] & 0x02) >> 1; + var rIndex = 128 * row; + var c125 = (VRAM[rIndex + 125] & 0x03); var c126 = (VRAM[rIndex + 126] & 0x03); - var pModifier = ((c125 | c126) << 2) & 0x0C; + var pModifier = (((c126 & 0x02) | c125 >> 1) << 2); + + pModifier = ((VRAM[(row << 7) + 125] & 2) >> 1) | (VRAM[(row << 7) + 126] & 3); + pModifier = (pModifier << 2) & 0xc; // columns for (int col = 0; col < 128; col++, counter++) { - int colour = (VRAM[rIndex + col]) & 0x03; - var finalColorIndex = pModifier | colour; - var paletteLookup = CMap[finalColorIndex & 0x0f] & 0x07; - frameBuffer[counter] = FPalette[paletteLookup]; - } - } - } - - private void BuildFrame1() - { - int cnt = 0; - // rows - for (int row = 0; row < 64; row++) - { - var yIndex = row * 128; - var yByte = yIndex / 4; - - // last byte for this row contains palette modifier - var pModifier = (byte)(VRAM[yByte + 31] & 0x0C); - - // columns - for (int col = 0; col < 128; col++) - { - var fbIndex = (row * 64) + col; - - var xByte = col / 4; - var xRem = col % 4; - var xyByte = yByte + xByte; - - // each byte contains 4 pixel colour values, b0b1, b2b3, b4b5, b6b7 - int colour = 0; - - switch (xRem) - { - case 0: - colour = VRAM[xyByte] & 0x03; - break; - case 1: - colour = VRAM[xyByte] & 0x0C; - break; - case 2: - colour = VRAM[xyByte] & 0x30; - break; - case 3: - colour = VRAM[xyByte] & 0xC0; - break; - } - - var finalColorIndex = pModifier | colour; - var paletteLookup = CMap[finalColorIndex & 0x0f] & 0x07; - frameBuffer[fbIndex] = FPalette[paletteLookup]; - - cnt++; + int cl = (VRAM[(row << 7) + col]) & 0x3; + frameBuffer[(row << 7) + col] = CMap[pModifier | cl] & 0x7; + //var nCol = pModifier + (VRAM[col | (row << 7)] & 0x03); + //frameBuffer[counter] = FPalette[CMap[nCol]]; } } } From be0f5f81cc32a323468ba39f5d9768e3d72cb06a Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Wed, 8 May 2019 17:39:15 -0400 Subject: [PATCH 049/138] GG: Link support initial capability --- .../Sega/GGHawkLink/GGHawkLink.IEmulator.cs | 120 +++++++++++++++++- .../Sega/GGHawkLink/GGHawkLink.IStatable.cs | 2 + .../Consoles/Sega/SMS/SMS.IStatable.cs | 4 + .../Consoles/Sega/SMS/SMS.cs | 16 ++- 4 files changed, 132 insertions(+), 10 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IEmulator.cs index 54f009a9b3..19c04a4312 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IEmulator.cs @@ -10,6 +10,8 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; + public int L_NMI_CD, R_NMI_CD; + public bool FrameAdvance(IController controller, bool render, bool rendersound) { //Console.WriteLine("-----------------------FRAME-----------------------"); @@ -62,6 +64,33 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink L.FrameAdvancePrep(); R.FrameAdvancePrep(); + if (!_cableconnected) + { + if ((L.Port05 & 0x38) == 0x38) + { + L.Port05 |= 4; + L.Cpu.NonMaskableInterrupt = true; + } + + if ((R.Port05 & 0x38) == 0x38) + { + R.Port05 |= 4; + R.Cpu.NonMaskableInterrupt = true; + } + } + else + { + if ((L.Port05 & 0x38) == 0x38) + { + L.Port05 &= 0xFB; + } + + if ((R.Port05 & 0x38) == 0x38) + { + R.Port05 &= 0xFB; + } + } + int scanlinesPerFrame = 262; L.Vdp.ScanLine = 0; @@ -84,11 +113,92 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink L.Cpu.ExecuteOne(); R.Cpu.ExecuteOne(); - /* - * - * Linking code goes here - * - */ + // linking code + if (L.p3_write) + { + L.p3_write = false; + + if (((L.Port05 & 0x38) == 0x38) && _cableconnected) + { + L.Port05 |= 1; + + if ((R.Port05 & 0x38) == 0x38) + { + R.Port05 |= 2; + R.Port04 = L.Port03; + R_NMI_CD = 256; + //R.Cpu.NonMaskableInterrupt = true; + } + } + } + + if (L.p4_read) + { + L.p4_read = false; + L.Cpu.NonMaskableInterrupt = false; + + if (((L.Port05 & 0x38) == 0x38) && _cableconnected) + { + L.Port05 &= 0xFD; + + if ((R.Port05 & 0x38) == 0x38) + { + R.Port05 &= 0xFE; + } + } + } + + if (R.p3_write) + { + R.p3_write = false; + + if (((R.Port05 & 0x38) == 0x38) && _cableconnected) + { + R.Port05 |= 1; + + if ((L.Port05 & 0x38) == 0x38) + { + L.Port05 |= 2; + L.Port04 = R.Port03; + L_NMI_CD = 256; + //L.Cpu.NonMaskableInterrupt = true; + } + } + } + + if (R.p4_read) + { + R.p4_read = false; + R.Cpu.NonMaskableInterrupt = false; + + if (((R.Port05 & 0x38) == 0x38) && _cableconnected) + { + R.Port05 &= 0xFD; + + if ((L.Port05 & 0x38) == 0x38) + { + L.Port05 &= 0xFE; + } + } + } + + if (L_NMI_CD > 0) + { + L_NMI_CD--; + if (L_NMI_CD == 0) + { + L.Cpu.NonMaskableInterrupt = true; + } + } + + if (R_NMI_CD > 0) + { + R_NMI_CD--; + if (R_NMI_CD == 0) + { + R.Cpu.NonMaskableInterrupt = true; + } + } L.PSG.generate_sound(); R.PSG.generate_sound(); diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IStatable.cs index 5da5d644d7..920fa985f6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.IStatable.cs @@ -59,6 +59,8 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink ser.Sync(nameof(_cableconnected), ref _cableconnected); ser.Sync(nameof(_cablediscosignal), ref _cablediscosignal); ser.Sync(nameof(do_r_next), ref do_r_next); + ser.Sync(nameof(L_NMI_CD), ref L_NMI_CD); + ser.Sync(nameof(L_NMI_CD), ref R_NMI_CD); _controllerDeck.SyncState(ser); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs index ac07eeac62..1ba1712d05 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs @@ -64,6 +64,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem ser.Sync(nameof(Bios_bank), ref Bios_bank); ser.Sync(nameof(Port01), ref Port01); ser.Sync(nameof(Port02), ref Port02); + ser.Sync(nameof(Port03), ref Port03); + ser.Sync(nameof(Port04), ref Port04); ser.Sync(nameof(Port05), ref Port05); ser.Sync(nameof(Port3E), ref Port3E); ser.Sync(nameof(Port3F), ref Port3F); @@ -74,6 +76,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem ser.Sync(nameof(cntr_rd_0), ref cntr_rd_0); ser.Sync(nameof(cntr_rd_1), ref cntr_rd_1); ser.Sync(nameof(cntr_rd_2), ref cntr_rd_2); + ser.Sync(nameof(p3_write), ref p3_write); + ser.Sync(nameof(p4_read), ref p4_read); ser.Sync(nameof(stand_alone), ref stand_alone); ser.Sync(nameof(disablePSG), ref disablePSG); ser.Sync(nameof(sampleclock), ref sampleclock); diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs index ba12a7c4c1..68d48916a4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs @@ -245,8 +245,10 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem private int _frame = 0; private byte Port01 = 0xFF; - private byte Port02 = 0xFF; - private byte Port05 = 0x00; + public byte Port02 = 0xFF; + public byte Port03 = 0x00; + public byte Port04 = 0xFF; + public byte Port05 = 0x00; private byte Port3E = 0xAF; private byte Port3F = 0xFF; private byte PortDE = 0x00; @@ -260,6 +262,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem public byte cntr_rd_1; public byte cntr_rd_2; public bool stand_alone = true; + public bool p3_write; + public bool p4_read; public DisplayType Region { get; set; } @@ -345,8 +349,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem case 0x00: if (stand_alone) { return ReadPort0(); } else { _lagged = false; return cntr_rd_0; } case 0x01: return Port01; case 0x02: return Port02; - case 0x03: return 0x00; - case 0x04: return 0xFF; + case 0x03: return Port03; + case 0x04: p4_read = true; return Port04; case 0x05: return Port05; case 0x06: return 0xFF; case 0x3E: return Port3E; @@ -388,7 +392,9 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem { case 0x01: Port01 = value; break; case 0x02: Port02 = value; break; - case 0x05: Port05 = value; break; + case 0x03: p3_write = true; Port03 = value; break; + case 0x04: /*Port04 = value*/; break; // receive port, not sure what writing does + case 0x05: Port05 = (byte)(value & 0xF8); break; case 0x06: PSG.Set_Panning(value); break; case 0x3E: Port3E = value; break; case 0x3F: Port3F = value; break; From bfa8f20cf95fd81cad484c9ba0537e6fedd9c0cc Mon Sep 17 00:00:00 2001 From: sornerol <47842483+sornerol@users.noreply.github.com> Date: Mon, 13 May 2019 13:45:27 -0500 Subject: [PATCH 050/138] Set state.spu.ch1.master = true (Fixes #1539) This fixes #1539. Prior to 2.2.2, state.spu.ch1.master was set to false when using a BIOS. Starting with 2.2.2, the Game Boy BIOS is required. Setting this to true causes a buzzing sound while the Nintendo logo drops during BIOS. --- libgambatte/src/initstate.cpp | 2 +- output/dll/libgambatte.dll | Bin 170496 -> 170496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index f8c488efcc..6f6e3a6e7c 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1278,7 +1278,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch1.lcounter.counter = SoundUnit::COUNTER_DISABLED; state.spu.ch1.lcounter.lengthCounter = 0; state.spu.ch1.nr4 = 0; - state.spu.ch1.master = true; + state.spu.ch1.master = false; state.spu.ch2.duty.nextPosUpdate = SoundUnit::COUNTER_DISABLED; state.spu.ch2.duty.nr3 = 0; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 6b005e507a671b2cd9d373febd482676f80d9a8f..03e8ecd3795aa1a79f1a3e1a4ead98f60f0141ea 100644 GIT binary patch delta 8839 zcmeI1dw5hun#R8>I*>p@x(ShRQJSmCaM>tPB6w*o1IR>dNKnKeO)ip15+X#5;c_|< zND$G+Ace?`&4`K)J4S=X3l3prl)+m@U1guqnMTnEU3Tn9R8$uC{Z3UMT2}wvzc$bF z@_Xy6s#A69T)MtPa9_{hzMi3=RhV49*P8O?@ z{2L{8xrnAVZxN4+i(0Rcd3W^*XGvIj+g6&ox}JE2~wl942PE$4KJ9gg!7$ zt}7;|w%s$KZ!CC0TreXR91s^A6boK7rrEXnS98OHW^7K#-6bg1(-_7i|0MBGYGz6T zYBs%<>bbAQE+=pqP1<#B54&_$uMT7a%wC%EiO1C z7MvLu%!>tQ#RdJb;GDQ%K`eL!%#3yamVv=$)He^e`pD|h&AHYJ`KO1QTdc3MZrq8p z-L!5y&(p&vc>@Beo*C}c%!He5>+>QS*xCA4@ZIi$T7TboXQ4RNJmC13vfGl@UY}mw zOT5xLGkU0(xVJg=%w&0UL393@%VleR^QJQki-AKa;hBp{~W_ZM~#c+q=HglZY zOxYfk$Rb}z4{QRo+mw55)$t9cTy5Cb#P^%>tA^VRW5*e}MfX2_UfgXaGQegr(HExS zTZYdVjx-Hdm~x4sG;uQJkYQ}#nWjA1FuQHhx8ff?+WbPcrz*FQKINMz1IqWKct<_s zk!K%uOQGBz8E$LoBSV>O;fb<6LAF<_qDk^{>0hGcWH7K)eGG~+_18)AU&J2u#AG>M zRZo_=(p{x?aMKf&Y667(h zOGdmeX;*4g4B?FnWo%xrAvk?)Ye#0GG+MhC3%-hN~}27hL6U7QN(gl*Tj?Pr+l+zvZ^S+KlA)D#fvFmI4b*@ zjv0vCozhfft{x+|O46R6X&S+q#f=e|D>J(JE2J7#AV-K?^>n@*m|h!q_I?~Eu6=ER z%;@iptLJ$ib=si&u;enF;$bvt$E?&Pv*e)UcC0Q2p%bx4k{^*KoT{6bt>2bxm%Vb` z!j)1j%$Gwm&KqI7GlIP`xtO)`=1X^iGqp4o&BxUEwB!G3F{0B(FRARPQ18!?Lq&@^ z=$8YNviXW&ya3-8&QxS=Rok|?a(<61?^>|`iwpORibs+#46)5~jS+)<ox6oe6)SQ6o#_)ma4`_qfP&s3#>9B+-?}F!PTwo@wut)#egBp>}h=JUNNf5+S>JfqJ<_ zUVPbyrbovqqW^^KvRU`&cUY6}O$>uOW!1k_juWHRb){J6(UzH`5Og;*TGf~0z+n!% zB)Mvc>U!fX3hgmX&oBE?$FZ>bs8kkvV)sHvwxG021huQ#x8kRwMb+Ob({5T7)Z?w5 zCg?FJR<4HUSPS1td`93I)|bVYP9wyx6m|UQfn*i=baaJJrF(a@2_T>@ddbN}@=Kpx>4X(lOkJv9j`% z$uzxAIB;aKpiamh$XtNPGC|)!v5VxC)lFqs`HHoAaQ|{a4?z`bGl#dDRSwk%ItXo5 z2g_vs7+Po6SgNe?_L-Khgj*Ee8N=8#TV9m7nVg${2N^aiw5B`lHSE*rhx%sofa@*RS9LAe~m zq|Yz=QOB{-s&a`OCW30q61*KkruE2&aaTdHasYd3js?}9m&ofqQPZsBajfMYK~XiL zLQeGLZqQ=|TCluOuDZQK4i*h+ONH!rZHQ~rU6hVjbwWWR6}IB`gm#-==a)A=BkVSI zKfbOgbF4viR>*OEk{k74k=F#heHg3Vs4lORBh&qM9JfYEGDY7IG~rEw-O}xq(()WN zUHo4Ps)vrYi7NRU(ZB0%Nw|M#q){z?n%s!(QKd`eLzZikq`uGyXgo9>ng`WF_d#Lk zDd-^d@6adEX(;6$NyDIAXcn{>S`BT39);SV*PxG}?;!VPNf$#?phBnyYThg_pvPbi zKu4h{l!D*Gi`yQkmJfHc{P*Eh&0i6A>OnVl2ywB`5DOu;CoYzQ4fs*S+T&sch(!_e zqJ8Xd1!8`WB>w%4{hi_T1MSS;maLTj&w&09GN2(ViSIQXjHkyw%_~h<~WV;A3e-&%GWGo1o|6ot-f}Z=PS+fb0Ju3NX|Gb-^<~fLz$Y zF+YL^!AHQaAil=bh~<3%mkIIeZA2>{B+7#ig13eBvR8vAcIg|fdN)=VvR4tbH{597 zwHs$1+l@1q{DEjIDwq@gh{52Q70~nW)nL=p`amIY!LvvK5D$O_&*^vo{Ck_Z_TW`7 z;KoB6A2{em-Np;f!xsOf#hsnKzO?uJ{sXvsu}f#Jg)-qo;FA%eT=*7{_xrrbclQ18 zqdz8UgKFWKuR|et=DtsGIpCQeLi^z(ptb9BJ<}HO{x6LO6QZ~zXygVbLVUMVC($U# zevZE)`Vq3@NF!c>_->C+D>%Ja-G#HqahPde6P@#E9=?(^9-qKCbmGI1cNoWVptm%op5>Fyo(4!FFbb%B>dB}Ho zr|#rF@O2h~u|$b^7}}2t=9^FlJo8&90#B*fI%Z(!2cHcl4As5`%pIl&^MUJ)4}qT< z9|e8GO&hQYvfuw9nEfLKxq>)ja9<|2ZhS4l^eo-M3sxE50S+D`C00QiLQE#TZ7vy9-t%XMcjcyv5g z3{Ox5?3JsJ;|Etx)F%)GJFmuG83WTbg6{R{_8nkw3SSN^BbzBmBl+y(Q_A>slhe+F z)6oHKm`}|>N&(M220afS1>c>iCmI3Y%hR5&6Eq6q`zby>4~^dUU+ zMJNjIyB88* z??DzycJ~`(keZp$Ih>&G7e+L!7Gt-b=m%%fyfokEIk3dcEOzRo^vl9g;9fyxk z)j4JF3}SMKGk<_i!ZQ=<1)YJ9PrT!k^7w?E6ZhlLRAko7&!Kq@c>lARyB0G=1+y5c zg?BP_+@+ks=R-}1GdV5a3Gbxm@SL_!Uyqj;JhNp3a&&m+1&!J>Ta9NPX~fxaqa!Fh z)ucW1UE`V4H|jX^PUD&U5#TubIv)dYjrpU%{JZhkA!C!67dCrSpa3iJKrDR`8&i^ zd^PaHGx;k*4YvX9uLiWTmmto5BH+i6565JF5BZzqaNBqUW{KG`#~9BnhFlwEo2O2$ S6K%b>$(C-ytqwdWC;bo2WiE99 delta 8775 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 A-T(jq From 6d5f51b5ba79e8140bbf4e079c62d83b712027ce Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 14:04:53 +1000 Subject: [PATCH 051/138] Update .gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 20ffa86c34..a8f5a6d362 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ svnrev.cs **/ipch/** *.ilk +*.il *.tlog *.obj *.o @@ -74,3 +75,7 @@ libsnes/vs2015/libsnes.VC.db waterbox/**/*.wbx waterbox/**/*.wbx.in /BizHawkTool_template.zip + +mono_crash* + +.idea From 77a6e9c3ace34a0df3c2d775340cc3044da4dc20 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 14:05:41 +1000 Subject: [PATCH 052/138] Remove unused shell script --- subwcrev.sh | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100755 subwcrev.sh diff --git a/subwcrev.sh b/subwcrev.sh deleted file mode 100755 index 4e445b6947..0000000000 --- a/subwcrev.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -cd "`dirname "$0"`" - -if test -d .git ; then - REV="`git svn info | grep Revision: | cut -d' ' -f2`" -else - REV="`svn info | grep Revision: | cut -d' ' -f2`" -fi - -sed -e 's/\$WCREV\$/'$REV'/g' "$1/Properties/svnrev_template" > "$1/Properties/svnrev.cs.tmp" -cmp -s "$1/Properties/svnrev.cs.tmp" "$1/Properties/svnrev.cs" || cp "$1/Properties/svnrev.cs.tmp" "$1/Properties/svnrev.cs" From e8f66570adde3f5ebd24ef049b253583276e270b Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 14:09:50 +1000 Subject: [PATCH 053/138] Update EmuHawkMono.sh --- Assets/EmuHawkMono.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Assets/EmuHawkMono.sh b/Assets/EmuHawkMono.sh index a42a52a5f6..0e59998135 100755 --- a/Assets/EmuHawkMono.sh +++ b/Assets/EmuHawkMono.sh @@ -8,11 +8,14 @@ libpath="" if [ "$(command -v lsb_release)" ]; then case "$(lsb_release -i | cut -c17- | tr -d "\n")" in "Arch"|"ManjaroLinux") libpath="/usr/lib/wine";; - "Debian"|"Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; + "Debian"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; + "Ubuntu") libpath="/usr/lib/x86_64-linux-gnu/wine"; export MONO_WINFORMS_XIM_STYLE=disabled;; # see https://bugzilla.xamarin.com/show_bug.cgi?id=28047#c9 esac +else + printf "Distro does not provide LSB release info API! (You've met with a terrible fate, haven't you?)\n" fi if [ -z "$libpath" ]; then printf "%s\n" "Unknown distro, assuming WINE library location is /usr/lib/wine..." libpath="/usr/lib/wine" fi -LD_LIBRARY_PATH="$libpath" mono ./EmuHawk.exe +LD_LIBRARY_PATH="$libpath" mono ./EmuHawk.exe >EmuHawkMono_laststdout.txt From 2d5b069793ff76c9f143b8d633a56f68ff9aeb8d Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 14:27:50 +1000 Subject: [PATCH 054/138] Inline PlatformSpecificMainLoopCrashHandler and implentations UnixMono copy contained workaround for a bug that has since been fixed --- BizHawk.Client.EmuHawk/Program.cs | 168 +++++++++--------------------- 1 file changed, 51 insertions(+), 117 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 02189ec31d..747ac8b7f8 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -89,121 +89,6 @@ namespace BizHawk.Client.EmuHawk return SubMain(args); } - private interface PlatformSpecificMainLoopCrashHandler - { - void TryCatchFinally(string[] args); - } - private class Win32MainLoopCrashHandler : PlatformSpecificMainLoopCrashHandler - { - public void TryCatchFinally(string[] args) - { - try - { - if (Global.Config.SingleInstanceMode) - { - try - { - new SingleInstanceController(args).Run(args); - } - catch (ObjectDisposedException) - { - // Eat it, MainForm disposed itself and Run attempts to dispose of itself. Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error - } - } - else - { - using (var mf = new MainForm(args)) - { - var title = mf.Text; - mf.Show(); - mf.Text = title; - try - { - GlobalWin.ExitCode = mf.ProgramRunLoop(); - } - catch (Exception e) when (!Debugger.IsAttached && !VersionInfo.DeveloperBuild && Global.MovieSession.Movie.IsActive) - { - var result = MessageBox.Show( - "EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may not succeed)", - $"Fatal error: {e.GetType().Name}", - MessageBoxButtons.YesNo, - MessageBoxIcon.Exclamation - ); - if (result == DialogResult.Yes) - { - Global.MovieSession.Movie.Save(); - } - } - } - } - } - catch (Exception e) when (!Debugger.IsAttached) - { - new ExceptionBox(e).ShowDialog(); - } - finally - { - if (GlobalWin.Sound != null) - { - GlobalWin.Sound.Dispose(); - GlobalWin.Sound = null; - } - GlobalWin.GL.Dispose(); - Input.Cleanup(); - } - } - } - private class UnixMonoMainLoopCrashHandler : PlatformSpecificMainLoopCrashHandler - { - // Identical to the implementation in Win32MainLoopCrashHandler sans the single-instance check. - public void TryCatchFinally(string[] args) - { - try - { - using (var mf = new MainForm(args)) - { - var title = mf.Text; - mf.Show(); - mf.Text = title; - try - { - GlobalWin.ExitCode = mf.ProgramRunLoop(); - } - catch (Exception e) when (!Debugger.IsAttached && !VersionInfo.DeveloperBuild && Global.MovieSession.Movie.IsActive) - { - var result = MessageBox.Show( - "EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may not succeed)", - $"Fatal error: {e.GetType().Name}", - MessageBoxButtons.YesNo, - MessageBoxIcon.Exclamation - ); - if (result == DialogResult.Yes) - { - Global.MovieSession.Movie.Save(); - } - } - } - } - catch (Exception e) when (!Debugger.IsAttached) - { - new ExceptionBox(e).ShowDialog(); - } - finally - { - if (GlobalWin.Sound != null) - { - GlobalWin.Sound.Dispose(); - GlobalWin.Sound = null; - } - GlobalWin.GL.Dispose(); - Input.Cleanup(); - } - } - } - private static PlatformSpecificMainLoopCrashHandler mainLoopCrashHandler = EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix - ? (PlatformSpecificMainLoopCrashHandler) new UnixMonoMainLoopCrashHandler() - : (PlatformSpecificMainLoopCrashHandler) new Win32MainLoopCrashHandler(); - //NoInlining should keep this code from getting jammed into Main() which would create dependencies on types which havent been setup by the resolver yet... or something like that [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] static int SubMain(string[] args) @@ -324,8 +209,57 @@ namespace BizHawk.Client.EmuHawk SetDllDirectory(dllDir); } - // Using a simple conditional to skip the single-instancing step caused crashes on GNU+Linux, even though the single-instancing step wasn't being executed. Something about the way instantiation works in C# means this workaround is possible. - mainLoopCrashHandler.TryCatchFinally(args); + try + { + if (Global.Config.SingleInstanceMode) + { + try + { + new SingleInstanceController(args).Run(args); + } + catch (ObjectDisposedException) + { + // Eat it, MainForm disposed itself and Run attempts to dispose of itself. Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error + } + } + else + { + using (var mf = new MainForm(args)) + { + var title = mf.Text; + mf.Show(); + mf.Text = title; + try + { + GlobalWin.ExitCode = mf.ProgramRunLoop(); + } + catch (Exception e) when (Global.MovieSession.Movie.IsActive && !(Debugger.IsAttached || VersionInfo.DeveloperBuild)) + { + var result = MessageBox.Show( + "EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may not succeed)", + $"Fatal error: {e.GetType().Name}", + MessageBoxButtons.YesNo, + MessageBoxIcon.Exclamation + ); + if (result == DialogResult.Yes) + { + Global.MovieSession.Movie.Save(); + } + } + } + } + } + catch (Exception e) when (!Debugger.IsAttached) + { + new ExceptionBox(e).ShowDialog(); + } + finally + { + GlobalWin.Sound?.Dispose(); + GlobalWin.Sound = null; + GlobalWin.GL.Dispose(); + Input.Cleanup(); + } //cleanup: //cleanup IGL stuff so we can get better refcounts when exiting process, for debugging From 752f8cfd49368c65d0b3f6ff89d09c9c5e9f789f Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 14:34:15 +1000 Subject: [PATCH 055/138] Don't bother checking for Windows prereqs on Unix --- BizHawk.Client.EmuHawk/Program.cs | 83 +++++++++++++++---------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 747ac8b7f8..86692bdd87 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -23,50 +23,49 @@ namespace BizHawk.Client.EmuHawk Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - var libLoader = EXE_PROJECT.PlatformLinkedLibSingleton.LinkedLibManager; - - //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips - - //try loading libraries we know we'll need - //something in the winforms, etc. code below will cause .net to popup a missing msvcr100.dll in case that one's missing - //but oddly it lets us proceed and we'll then catch it here - var libExt = EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix ? ".dll.so" : ".dll"; - var d3dx9 = libLoader.LoadPlatformSpecific($"d3dx9_43{libExt}"); - var vc2015 = libLoader.LoadPlatformSpecific($"vcruntime140{libExt}"); - var vc2012 = libLoader.LoadPlatformSpecific($"msvcr120{libExt}"); //TODO - check version? - var vc2010 = libLoader.LoadPlatformSpecific($"msvcr100{libExt}"); //TODO - check version? - var vc2010p = libLoader.LoadPlatformSpecific($"msvcp100{libExt}"); - bool fail = false, warn = false; - warn |= d3dx9 == IntPtr.Zero; - fail |= vc2015 == IntPtr.Zero; - fail |= vc2010 == IntPtr.Zero; - fail |= vc2012 == IntPtr.Zero; - fail |= vc2010p == IntPtr.Zero; - if (fail || warn) - { - var sw = new System.IO.StringWriter(); - sw.WriteLine("[ OK ] .Net 4.6.1 (You couldn't even get here without it)"); - sw.WriteLine("[{0}] Direct3d 9", d3dx9 == IntPtr.Zero ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2010 SP1 Runtime", (vc2010 == IntPtr.Zero || vc2010p == IntPtr.Zero) ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2012 Runtime", (vc2012 == IntPtr.Zero) ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2015 Runtime", (vc2015 == IntPtr.Zero) ? "FAIL" : " OK "); - var str = sw.ToString(); - var box = new BizHawk.Client.EmuHawk.CustomControls.PrereqsAlert(!fail); - box.textBox1.Text = str; - box.ShowDialog(); - if (!fail) { } - else - System.Diagnostics.Process.GetCurrentProcess().Kill(); - } - - libLoader.FreePlatformSpecific(d3dx9); - libLoader.FreePlatformSpecific(vc2015); - libLoader.FreePlatformSpecific(vc2012); - libLoader.FreePlatformSpecific(vc2010); - libLoader.FreePlatformSpecific(vc2010p); - if (!EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) { + var libLoader = EXE_PROJECT.PlatformLinkedLibSingleton.LinkedLibManager; + + //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips + + //try loading libraries we know we'll need + //something in the winforms, etc. code below will cause .net to popup a missing msvcr100.dll in case that one's missing + //but oddly it lets us proceed and we'll then catch it here + var d3dx9 = libLoader.LoadPlatformSpecific("d3dx9_43.dll"); + var vc2015 = libLoader.LoadPlatformSpecific("vcruntime140.dll"); + var vc2012 = libLoader.LoadPlatformSpecific("msvcr120.dll"); //TODO - check version? + var vc2010 = libLoader.LoadPlatformSpecific("msvcr100.dll"); //TODO - check version? + var vc2010p = libLoader.LoadPlatformSpecific("msvcp100.dll"); + bool fail = false, warn = false; + warn |= d3dx9 == IntPtr.Zero; + fail |= vc2015 == IntPtr.Zero; + fail |= vc2010 == IntPtr.Zero; + fail |= vc2012 == IntPtr.Zero; + fail |= vc2010p == IntPtr.Zero; + if (fail || warn) + { + var sw = new System.IO.StringWriter(); + sw.WriteLine("[ OK ] .Net 4.6.1 (You couldn't even get here without it)"); + sw.WriteLine("[{0}] Direct3d 9", d3dx9 == IntPtr.Zero ? "FAIL" : " OK "); + sw.WriteLine("[{0}] Visual C++ 2010 SP1 Runtime", (vc2010 == IntPtr.Zero || vc2010p == IntPtr.Zero) ? "FAIL" : " OK "); + sw.WriteLine("[{0}] Visual C++ 2012 Runtime", (vc2012 == IntPtr.Zero) ? "FAIL" : " OK "); + sw.WriteLine("[{0}] Visual C++ 2015 Runtime", (vc2015 == IntPtr.Zero) ? "FAIL" : " OK "); + var str = sw.ToString(); + var box = new BizHawk.Client.EmuHawk.CustomControls.PrereqsAlert(!fail); + box.textBox1.Text = str; + box.ShowDialog(); + if (!fail) { } + else + System.Diagnostics.Process.GetCurrentProcess().Kill(); + } + + libLoader.FreePlatformSpecific(d3dx9); + libLoader.FreePlatformSpecific(vc2015); + libLoader.FreePlatformSpecific(vc2012); + libLoader.FreePlatformSpecific(vc2010); + libLoader.FreePlatformSpecific(vc2010p); + // this will look in subdirectory "dll" to load pinvoked stuff string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); SetDllDirectory(dllDir); From 436b6452fbe0a791ce8f7487d021d41c5f01a4bb Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:14:08 +1000 Subject: [PATCH 056/138] Misc. refactoring --- BizHawk.Client.EmuHawk/Program.cs | 138 +++++++++++++----------------- 1 file changed, 59 insertions(+), 79 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 86692bdd87..b09c9b6a51 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using System.Diagnostics; using System.IO; using System.Collections.Generic; @@ -15,7 +14,7 @@ using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - static class Program + internal static class Program { static Program() { @@ -37,27 +36,24 @@ namespace BizHawk.Client.EmuHawk var vc2012 = libLoader.LoadPlatformSpecific("msvcr120.dll"); //TODO - check version? var vc2010 = libLoader.LoadPlatformSpecific("msvcr100.dll"); //TODO - check version? var vc2010p = libLoader.LoadPlatformSpecific("msvcp100.dll"); - bool fail = false, warn = false; - warn |= d3dx9 == IntPtr.Zero; - fail |= vc2015 == IntPtr.Zero; - fail |= vc2010 == IntPtr.Zero; - fail |= vc2012 == IntPtr.Zero; - fail |= vc2010p == IntPtr.Zero; + var fail = vc2015 == IntPtr.Zero || vc2010 == IntPtr.Zero || vc2012 == IntPtr.Zero || vc2010p == IntPtr.Zero; + var warn = d3dx9 == IntPtr.Zero; if (fail || warn) { - var sw = new System.IO.StringWriter(); - sw.WriteLine("[ OK ] .Net 4.6.1 (You couldn't even get here without it)"); - sw.WriteLine("[{0}] Direct3d 9", d3dx9 == IntPtr.Zero ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2010 SP1 Runtime", (vc2010 == IntPtr.Zero || vc2010p == IntPtr.Zero) ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2012 Runtime", (vc2012 == IntPtr.Zero) ? "FAIL" : " OK "); - sw.WriteLine("[{0}] Visual C++ 2015 Runtime", (vc2015 == IntPtr.Zero) ? "FAIL" : " OK "); - var str = sw.ToString(); - var box = new BizHawk.Client.EmuHawk.CustomControls.PrereqsAlert(!fail); - box.textBox1.Text = str; + var alertLines = new[] + { + "[ OK ] .NET CLR (You wouldn't even get here without it)", + $"[{(d3dx9 == IntPtr.Zero ? "WARN" : " OK ")}] Direct3d 9", + $"[{(vc2010 == IntPtr.Zero || vc2010p == IntPtr.Zero ? "FAIL" : " OK ")}] Visual C++ 2010 SP1 Runtime", + $"[{(vc2012 == IntPtr.Zero ? "FAIL" : " OK ")}] Visual C++ 2012 Runtime", + $"[{(vc2015 == IntPtr.Zero ? "FAIL" : " OK ")}] Visual C++ 2015 Runtime" + }; + var box = new BizHawk.Client.EmuHawk.CustomControls.PrereqsAlert(!fail) + { + textBox1 = { Text = string.Concat("\n", alertLines) } + }; box.ShowDialog(); - if (!fail) { } - else - System.Diagnostics.Process.GetCurrentProcess().Kill(); + if (fail) System.Diagnostics.Process.GetCurrentProcess().Kill(); } libLoader.FreePlatformSpecific(d3dx9); @@ -67,11 +63,11 @@ namespace BizHawk.Client.EmuHawk libLoader.FreePlatformSpecific(vc2010p); // this will look in subdirectory "dll" to load pinvoked stuff - string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); + var dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); SetDllDirectory(dllDir); //in case assembly resolution fails, such as if we moved them into the dll subdiretory, this event handler can reroute to them - AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); + AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; //but before we even try doing that, whack the MOTW from everything in that directory (thats a dll) //otherwise, some people will have crashes at boot-up due to .net security disliking MOTW. @@ -83,14 +79,14 @@ namespace BizHawk.Client.EmuHawk } [STAThread] - static int Main(string[] args) + private static int Main(string[] args) { return SubMain(args); } //NoInlining should keep this code from getting jammed into Main() which would create dependencies on types which havent been setup by the resolver yet... or something like that [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - static int SubMain(string[] args) + private static int SubMain(string[] args) { // this check has to be done VERY early. i stepped through a debug build with wrong .dll versions purposely used, // and there was a TypeLoadException before the first line of SubMain was reached (some static ColorType init?) @@ -112,7 +108,7 @@ namespace BizHawk.Client.EmuHawk HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler(); - ArgParser argParser = new ArgParser(); + var argParser = new ArgParser(); argParser.ParseArguments(args); if (argParser.cmdConfigFile != null) PathManager.SetDefaultIniPath(argParser.cmdConfigFile); @@ -132,13 +128,9 @@ namespace BizHawk.Client.EmuHawk BizHawk.Client.Common.StringLogUtil.DefaultToAWE = Global.Config.MoviesInAWE; // super hacky! this needs to be done first. still not worth the trouble to make this system fully proper - for (int i = 0; i < args.Length; i++) + if (Array.Exists(args, arg => arg.StartsWith("--gdi", StringComparison.InvariantCultureIgnoreCase))) { - var arg = args[i].ToLower(); - if (arg.StartsWith("--gdi")) - { - Global.Config.DispMethod = Config.EDispMethod.GdiPlus; - } + Global.Config.DispMethod = Config.EDispMethod.GdiPlus; } // create IGL context. we do this whether or not the user has selected OpenGL, so that we can run opengl-based emulator cores @@ -161,8 +153,7 @@ namespace BizHawk.Client.EmuHawk } catch(Exception ex) { - var e2 = new Exception("Initialization of Direct3d 9 Display Method failed; falling back to GDI+", ex); - new ExceptionBox(e2).ShowDialog(); + new ExceptionBox(new Exception("Initialization of Direct3d 9 Display Method failed; falling back to GDI+", ex)).ShowDialog(); // fallback Global.Config.DispMethod = Config.EDispMethod.GdiPlus; @@ -174,8 +165,7 @@ namespace BizHawk.Client.EmuHawk GlobalWin.GL = GlobalWin.IGL_GL; // check the opengl version and dont even try to boot this crap up if its too old - int version = GlobalWin.IGL_GL.Version; - if (version < 200) + if (GlobalWin.IGL_GL.Version < 200) { // fallback Global.Config.DispMethod = Config.EDispMethod.GdiPlus; @@ -190,8 +180,8 @@ namespace BizHawk.Client.EmuHawk } catch(Exception ex) { - var e2 = new Exception("Initialization of Display Method failed; falling back to GDI+", ex); - new ExceptionBox(e2).ShowDialog(); + new ExceptionBox(new Exception("Initialization of Display Method failed; falling back to GDI+", ex)).ShowDialog(); + //fallback Global.Config.DispMethod = Config.EDispMethod.GdiPlus; goto REDO_DISPMETHOD; @@ -204,7 +194,7 @@ namespace BizHawk.Client.EmuHawk //It isn't clear whether we need the earlier SetDllDirectory(), but I think we do. //note: this is pasted instead of being put in a static method due to this initialization code being sensitive to things like that, and not wanting to cause it to break //pasting should be safe (not affecting the jit order of things) - string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); + var dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); SetDllDirectory(dllDir); } @@ -214,7 +204,7 @@ namespace BizHawk.Client.EmuHawk { try { - new SingleInstanceController(args).Run(args); + new SingleInstanceController(args).Run(); } catch (ObjectDisposedException) { @@ -273,20 +263,21 @@ namespace BizHawk.Client.EmuHawk return GlobalWin.ExitCode; } //SubMain - //declared here instead of a more usual place to avoid dependencies on the more usual place #if WINDOWS + //declared here instead of a more usual place to avoid dependencies on the more usual place + [DllImport("kernel32.dll", SetLastError = true)] - static extern uint SetDllDirectory(string lpPathName); + private static extern uint SetDllDirectory(string lpPathName); [DllImport("kernel32.dll", EntryPoint = "DeleteFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true)] - static extern bool DeleteFileW([MarshalAs(UnmanagedType.LPWStr)]string lpFileName); + private static extern bool DeleteFileW([MarshalAs(UnmanagedType.LPWStr)]string lpFileName); - public static void RemoveMOTW(string path) + private static void RemoveMOTW(string path) { DeleteFileW($"{path}:Zone.Identifier"); } - static void WhackAllMOTW(string dllDir) + private static void WhackAllMOTW(string dllDir) { var todo = new Queue(new[] { new DirectoryInfo(dllDir) }); while (todo.Count > 0) @@ -298,14 +289,12 @@ namespace BizHawk.Client.EmuHawk foreach (var fi in di.GetFiles("*.exe")) RemoveMOTW(fi.FullName); } - } #endif - - static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) + private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { - string requested = args.Name; + var requested = args.Name; //mutate filename depending on selection of lua core. here's how it works //1. we build NLua to the output/dll/lua directory. that brings KopiLua with it @@ -313,52 +302,43 @@ namespace BizHawk.Client.EmuHawk //3. When NLua assembly attempts to load, it can't find it //I. if LuaInterface is selected by the user, we switch to requesting that. // (those DLLs are built into the output/DLL directory) - //II. if NLua is selected by the user, we skip over this part; + //II. if NLua is selected by the user, we skip over this part; // later, we look for NLua or KopiLua assembly names and redirect them to files located in the output/DLL/nlua directory if (new AssemblyName(requested).Name == "NLua") { //this method referencing Global.Config makes assemblies get loaded, which isnt smart from the assembly resolver. //so.. we're going to resort to something really bad. //avert your eyes. - bool UseNLua = true; - string configPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini"); - if (File.Exists(configPath)) + var configPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini"); + if (File.Exists(configPath) + && (Array.Find(File.ReadAllLines(configPath), line => line.Contains(" \"UseNLua\": ")) ?? string.Empty) + .Contains("false")) { - var cfg = File.ReadAllLines(configPath); - var usenlua_key = cfg.FirstOrDefault(line=>line.Contains(" \"UseNLua\": ")); - if (usenlua_key != null) - if (usenlua_key.Contains("false")) - UseNLua = false; + requested = "LuaInterface"; } - - if (UseNLua) { } - else requested = "LuaInterface"; } lock (AppDomain.CurrentDomain) { - var asms = AppDomain.CurrentDomain.GetAssemblies(); - foreach (var asm in asms) - if (asm.FullName == requested) - return asm; + var firstAsm = Array.Find(AppDomain.CurrentDomain.GetAssemblies(), asm => asm.FullName == requested); + if (firstAsm != null) return firstAsm; //load missing assemblies by trying to find them in the dll directory - string dllname = $"{new AssemblyName(requested).Name}.dll"; - string directory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); - string simpleName = new AssemblyName(requested).Name; + var dllname = $"{new AssemblyName(requested).Name}.dll"; + var directory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); + var simpleName = new AssemblyName(requested).Name; if (simpleName == "NLua" || simpleName == "KopiLua") directory = Path.Combine(directory, "nlua"); - string fname = Path.Combine(directory, dllname); - if (!File.Exists(fname)) return null; - - //it is important that we use LoadFile here and not load from a byte array; otherwise mixed (managed/unamanged) assemblies can't load - return Assembly.LoadFile(fname); + var fname = Path.Combine(directory, dllname); + //it is important that we use LoadFile here and not load from a byte array; otherwise mixed (managed/unmanaged) assemblies can't load + return File.Exists(fname) ? Assembly.LoadFile(fname) : null; } } #if WINDOWS - public class SingleInstanceController : WindowsFormsApplicationBase + private class SingleInstanceController : WindowsFormsApplicationBase { - readonly string[] cmdArgs; + private readonly string[] cmdArgs; + public SingleInstanceController(string[] args) { cmdArgs = args; @@ -366,10 +346,12 @@ namespace BizHawk.Client.EmuHawk StartupNextInstance += this_StartupNextInstance; } - void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) + public void Run() => Run(cmdArgs); + + private void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) { if (e.CommandLine.Count >= 1) - (MainForm as MainForm).LoadRom(e.CommandLine[0], new MainForm.LoadRomArgs() { OpenAdvanced = new OpenAdvanced_OpenRom() }); + ((MainForm)MainForm).LoadRom(e.CommandLine[0], new MainForm.LoadRomArgs { OpenAdvanced = new OpenAdvanced_OpenRom() }); } protected override void OnCreateMainForm() @@ -378,11 +360,9 @@ namespace BizHawk.Client.EmuHawk var title = MainForm.Text; MainForm.Show(); MainForm.Text = title; - GlobalWin.ExitCode = (MainForm as MainForm).ProgramRunLoop(); + GlobalWin.ExitCode = ((MainForm)MainForm).ProgramRunLoop(); } } - - #endif } } From d76e1a8a8b7483b052574e8fa62e657ec80ebc4e Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:30:29 +1000 Subject: [PATCH 057/138] Refactor PlatformLinkedLibSingleton and replace RunningOnUnix with CurrentOS --- BizHawk.Client.EmuHawk/Input/Input.cs | 30 ++++---- BizHawk.Client.EmuHawk/Program.cs | 10 +-- BizHawk.Client.EmuHawk/ScreenSaver.cs | 6 +- BizHawk.Client.EmuHawk/Sound/Sound.cs | 2 +- BizHawk.Client.EmuHawk/Throttle.cs | 2 +- BizHawk.Client.EmuHawk/config/InputWidget.cs | 4 +- .../tools/Lua/LuaConsole.cs | 6 +- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 2 +- BizHawk.Common/PlatformLinkedLibSingleton.cs | 70 ++++++++++++++----- 9 files changed, 85 insertions(+), 47 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Input/Input.cs b/BizHawk.Client.EmuHawk/Input/Input.cs index 519594fe34..2f84152d7f 100644 --- a/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/BizHawk.Client.EmuHawk/Input/Input.cs @@ -123,24 +123,24 @@ namespace BizHawk.Client.EmuHawk public static void Initialize() { - if (PlatformLinkedLibSingleton.RunningOnUnix) - { - OTK_Keyboard.Initialize(); -// OTK_Gamepad.Initialize(); - } - else + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) { KeyInput.Initialize(); IPCKeyInput.Initialize(); GamePad.Initialize(); GamePad360.Initialize(); } + else + { + OTK_Keyboard.Initialize(); +// OTK_Gamepad.Initialize(); + } Instance = new Input(); } public static void Cleanup() { - if (!PlatformLinkedLibSingleton.RunningOnUnix) + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) { KeyInput.Cleanup(); GamePad.Cleanup(); @@ -331,18 +331,18 @@ namespace BizHawk.Client.EmuHawk { while (true) { - var keyEvents = PlatformLinkedLibSingleton.RunningOnUnix - ? OTK_Keyboard.Update() - : KeyInput.Update().Concat(IPCKeyInput.Update()); - if (PlatformLinkedLibSingleton.RunningOnUnix) - { - //TODO - } - else + var keyEvents = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + ? KeyInput.Update().Concat(IPCKeyInput.Update()) + : OTK_Keyboard.Update(); + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) { GamePad.UpdateAll(); GamePad360.UpdateAll(); } + else + { + //TODO + } //this block is going to massively modify data structures that the binding method uses, so we have to lock it all lock (this) diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index b09c9b6a51..6993c8f3f8 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -22,7 +22,7 @@ namespace BizHawk.Client.EmuHawk Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - if (!EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) + if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS == EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) { var libLoader = EXE_PROJECT.PlatformLinkedLibSingleton.LinkedLibManager; @@ -141,8 +141,10 @@ namespace BizHawk.Client.EmuHawk GlobalWin.GLManager = GLManager.Instance; //now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen - if (EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; - REDO_DISPMETHOD: + if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS != EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) + Global.Config.DispMethod = Config.EDispMethod.GdiPlus; + +REDO_DISPMETHOD: if (Global.Config.DispMethod == Config.EDispMethod.GdiPlus) GlobalWin.GL = new Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus(); else if (Global.Config.DispMethod == Config.EDispMethod.SlimDX9) @@ -187,7 +189,7 @@ namespace BizHawk.Client.EmuHawk goto REDO_DISPMETHOD; } - if (!EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) + if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS == EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) { //WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff. //The relevant initialization happened just before in "create IGL context". diff --git a/BizHawk.Client.EmuHawk/ScreenSaver.cs b/BizHawk.Client.EmuHawk/ScreenSaver.cs index d362b4b2c2..d09ea9b8a9 100644 --- a/BizHawk.Client.EmuHawk/ScreenSaver.cs +++ b/BizHawk.Client.EmuHawk/ScreenSaver.cs @@ -41,9 +41,9 @@ namespace BizHawk.Client.EmuHawk //TODO implement } } - private static PlatformSpecificScreenBlankInterface screenBlankInterface = PlatformLinkedLibSingleton.RunningOnUnix - ? (PlatformSpecificScreenBlankInterface) new MiscUnixScreenBlankInterface() - : (PlatformSpecificScreenBlankInterface) new WinScreenBlankInterface(); + private static PlatformSpecificScreenBlankInterface screenBlankInterface = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + ? (PlatformSpecificScreenBlankInterface) new WinScreenBlankInterface() + : (PlatformSpecificScreenBlankInterface) new MiscUnixScreenBlankInterface(); private const int SPI_GETSCREENSAVERTIMEOUT = 14; private const int SPI_SETSCREENSAVERTIMEOUT = 15; diff --git a/BizHawk.Client.EmuHawk/Sound/Sound.cs b/BizHawk.Client.EmuHawk/Sound/Sound.cs index 1edaaae699..cd6891bd9d 100644 --- a/BizHawk.Client.EmuHawk/Sound/Sound.cs +++ b/BizHawk.Client.EmuHawk/Sound/Sound.cs @@ -27,7 +27,7 @@ namespace BizHawk.Client.EmuHawk { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL) _outputDevice = new OpenALSoundOutput(this); - if (!PlatformLinkedLibSingleton.RunningOnUnix) + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.DirectSound) _outputDevice = new DirectSoundSoundOutput(this, mainWindowHandle); diff --git a/BizHawk.Client.EmuHawk/Throttle.cs b/BizHawk.Client.EmuHawk/Throttle.cs index af7334ef81..d703bce4ac 100644 --- a/BizHawk.Client.EmuHawk/Throttle.cs +++ b/BizHawk.Client.EmuHawk/Throttle.cs @@ -160,7 +160,7 @@ namespace BizHawk.Client.EmuHawk return timeBeginPeriod(ms); } } - static PlatformSpecificSysTimer sysTimer = PlatformLinkedLibSingleton.RunningOnUnix ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); + static PlatformSpecificSysTimer sysTimer = PlatformLinkedLibSingleton.CurrentOS != PlatformLinkedLibSingleton.DistinctOS.Windows ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); static uint TimeBeginPeriod(uint ms) { return sysTimer.TimeBeginPeriod(ms); diff --git a/BizHawk.Client.EmuHawk/config/InputWidget.cs b/BizHawk.Client.EmuHawk/config/InputWidget.cs index 79167ea11f..b6ffe91457 100644 --- a/BizHawk.Client.EmuHawk/config/InputWidget.cs +++ b/BizHawk.Client.EmuHawk/config/InputWidget.cs @@ -71,7 +71,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnMouseClick(MouseEventArgs e) { - if (!PlatformLinkedLibSingleton.RunningOnUnix) HideCaret(Handle); + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) HideCaret(Handle); base.OnMouseClick(e); } @@ -264,7 +264,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnGotFocus(EventArgs e) { - if (!PlatformLinkedLibSingleton.RunningOnUnix) HideCaret(Handle); + if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) HideCaret(Handle); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 17b646b63c..92f954e0c2 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -186,9 +186,9 @@ namespace BizHawk.Client.EmuHawk } var currentScripts = LuaImp?.ScriptList; // Temp fix for now - LuaImp = PlatformLinkedLibSingleton.RunningOnUnix - ? (PlatformEmuLuaLibrary) new NotReallyLuaLibrary() - : (PlatformEmuLuaLibrary) new EmuLuaLibrary(Emulator.ServiceProvider); + LuaImp = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + ? (PlatformEmuLuaLibrary) new EmuLuaLibrary(Emulator.ServiceProvider) + : (PlatformEmuLuaLibrary) new NotReallyLuaLibrary(); if (currentScripts != null) { LuaImp.ScriptList.AddRange(currentScripts); diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 1d4f348f0f..5d381b2184 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -740,7 +740,7 @@ namespace BizHawk.Client.EmuHawk return false; } - if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) return false; + if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.CurrentOS != PlatformLinkedLibSingleton.DistinctOS.Windows) return false; var tool = Assembly .GetExecutingAssembly() diff --git a/BizHawk.Common/PlatformLinkedLibSingleton.cs b/BizHawk.Common/PlatformLinkedLibSingleton.cs index 14ed9c29e6..afc8b46054 100644 --- a/BizHawk.Common/PlatformLinkedLibSingleton.cs +++ b/BizHawk.Common/PlatformLinkedLibSingleton.cs @@ -1,24 +1,53 @@ using System; -using System.Runtime.InteropServices; - -//put in a different namespace for EXE so we can have an instance of this type (by linking to this file rather than copying it) built-in to the exe -//so the exe doesnt implicitly depend on the dll +using System.Diagnostics; +using System.Runtime.InteropServices; + +//put in a different namespace for EXE so we can have an instance of this type (by linking to this file rather than copying it) built-in to the exe +//so the exe doesnt implicitly depend on the dll #if EXE_PROJECT namespace EXE_PROJECT #else namespace BizHawk.Common #endif -{ - -public sealed class PlatformLinkedLibSingleton +{ + public sealed class PlatformLinkedLibSingleton { - public static readonly bool RunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; + /// macOS doesn't use PlatformID.MacOSX + public static readonly DistinctOS CurrentOS = Environment.OSVersion.Platform == PlatformID.Unix + ? currentIsMacOS() ? DistinctOS.macOS : DistinctOS.Linux + : DistinctOS.Windows; - private static readonly Lazy lazy = new Lazy(() => RunningOnUnix - ? (PlatformLinkedLibManager) new UnixMonoLinkedLibManager() - : (PlatformLinkedLibManager) new Win32LinkedLibManager()); + private static readonly Lazy lazy = new Lazy(() => + { + switch (CurrentOS) + { + case DistinctOS.Linux: + case DistinctOS.macOS: + return new UnixMonoLinkedLibManager(); + case DistinctOS.Windows: + return new Win32LinkedLibManager(); + default: + throw new ArgumentOutOfRangeException(); + } + }); - public static PlatformLinkedLibManager LinkedLibManager { get { return lazy.Value; } } + public static PlatformLinkedLibManager LinkedLibManager => lazy.Value; + + private static bool currentIsMacOS() + { + var proc = new Process { + StartInfo = new ProcessStartInfo { + Arguments = "-s", + CreateNoWindow = true, + FileName = "uname", + RedirectStandardOutput = true, + UseShellExecute = false + } + }; + proc.Start(); + if (proc.StandardOutput.EndOfStream) throw new Exception("Can't determine OS (uname wrote nothing to stdout)!"); + return proc.StandardOutput.ReadLine() == "Darwin"; + } private PlatformLinkedLibSingleton() {} @@ -29,16 +58,16 @@ public sealed class PlatformLinkedLibSingleton int FreePlatformSpecific(IntPtr hModule); } - public class UnixMonoLinkedLibManager : PlatformLinkedLibManager + private class UnixMonoLinkedLibManager : PlatformLinkedLibManager { // This class is copied from a tutorial, so don't git blame and then email me expecting insight. const int RTLD_NOW = 2; [DllImport("libdl.so.2")] - private static extern IntPtr dlopen(String fileName, int flags); + private static extern IntPtr dlopen(string fileName, int flags); [DllImport("libdl.so.2")] private static extern IntPtr dlerror(); [DllImport("libdl.so.2")] - private static extern IntPtr dlsym(IntPtr handle, String symbol); + private static extern IntPtr dlsym(IntPtr handle, string symbol); [DllImport("libdl.so.2")] private static extern int dlclose(IntPtr handle); public IntPtr LoadPlatformSpecific(string dllToLoad) @@ -59,7 +88,7 @@ public sealed class PlatformLinkedLibSingleton } } - public class Win32LinkedLibManager : PlatformLinkedLibManager + private class Win32LinkedLibManager : PlatformLinkedLibManager { [DllImport("kernel32.dll")] private static extern UInt32 GetLastError(); @@ -89,5 +118,12 @@ public sealed class PlatformLinkedLibSingleton return FreeLibrary(hModule) ? 1 : 0; } } + + public enum DistinctOS : byte + { + Linux = 0, + macOS = 1, + Windows = 2 + } } -} +} \ No newline at end of file From 58c738957ce78bc87e1d2f8464e9c37f1eee7c24 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:38:51 +1000 Subject: [PATCH 058/138] Rename PlatformLinkedLibSingleton and children --- BizHawk.Client.Common/7z/LibraryManager.cs | 2 +- .../BizHawk.Client.EmuHawk.csproj | 6 ++-- BizHawk.Client.EmuHawk/Input/Input.cs | 8 ++--- BizHawk.Client.EmuHawk/Program.cs | 8 ++--- BizHawk.Client.EmuHawk/ScreenSaver.cs | 2 +- BizHawk.Client.EmuHawk/Sound/Sound.cs | 2 +- BizHawk.Client.EmuHawk/Throttle.cs | 2 +- BizHawk.Client.EmuHawk/config/InputWidget.cs | 4 +-- .../tools/Lua/LuaConsole.cs | 2 +- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 2 +- BizHawk.Common/BizHawk.Common.csproj | 2 +- .../BizInvoke/DynamicLibraryImportResolver.cs | 4 +-- ...inkedLibSingleton.cs => OSTailoredCode.cs} | 30 +++++++++---------- .../N64/NativeApi/mupen64plusCoreApi.cs | 2 +- 14 files changed, 38 insertions(+), 38 deletions(-) rename BizHawk.Common/{PlatformLinkedLibSingleton.cs => OSTailoredCode.cs} (82%) diff --git a/BizHawk.Client.Common/7z/LibraryManager.cs b/BizHawk.Client.Common/7z/LibraryManager.cs index ac0aedd2ee..6f2f375862 100644 --- a/BizHawk.Client.Common/7z/LibraryManager.cs +++ b/BizHawk.Client.Common/7z/LibraryManager.cs @@ -89,7 +89,7 @@ namespace SevenZip // private static string _LibraryVersion; private static bool? _modifyCapabale; - private static readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; + private static readonly OSTailoredCode.ILinkedLibManager libLoader = OSTailoredCode.LinkedLibManager; private static void InitUserInFormat(object user, InArchiveFormat format) { diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 97a06e1c3b..f8710bbc42 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -113,8 +113,8 @@ - - PlatformLinkedLibSingleton.cs + + OSTailoredCode.cs svnrev.cs @@ -2283,4 +2283,4 @@ - \ No newline at end of file + diff --git a/BizHawk.Client.EmuHawk/Input/Input.cs b/BizHawk.Client.EmuHawk/Input/Input.cs index 2f84152d7f..a890029682 100644 --- a/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/BizHawk.Client.EmuHawk/Input/Input.cs @@ -123,7 +123,7 @@ namespace BizHawk.Client.EmuHawk public static void Initialize() { - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) { KeyInput.Initialize(); IPCKeyInput.Initialize(); @@ -140,7 +140,7 @@ namespace BizHawk.Client.EmuHawk public static void Cleanup() { - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) { KeyInput.Cleanup(); GamePad.Cleanup(); @@ -331,10 +331,10 @@ namespace BizHawk.Client.EmuHawk { while (true) { - var keyEvents = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + var keyEvents = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows ? KeyInput.Update().Concat(IPCKeyInput.Update()) : OTK_Keyboard.Update(); - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) { GamePad.UpdateAll(); GamePad360.UpdateAll(); diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 6993c8f3f8..c46f0c961c 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -22,9 +22,9 @@ namespace BizHawk.Client.EmuHawk Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS == EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) + if (EXE_PROJECT.OSTailoredCode.CurrentOS == EXE_PROJECT.OSTailoredCode.DistinctOS.Windows) { - var libLoader = EXE_PROJECT.PlatformLinkedLibSingleton.LinkedLibManager; + var libLoader = EXE_PROJECT.OSTailoredCode.LinkedLibManager; //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips @@ -141,7 +141,7 @@ namespace BizHawk.Client.EmuHawk GlobalWin.GLManager = GLManager.Instance; //now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen - if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS != EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) + if (EXE_PROJECT.OSTailoredCode.CurrentOS != EXE_PROJECT.OSTailoredCode.DistinctOS.Windows) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; REDO_DISPMETHOD: @@ -189,7 +189,7 @@ REDO_DISPMETHOD: goto REDO_DISPMETHOD; } - if (EXE_PROJECT.PlatformLinkedLibSingleton.CurrentOS == EXE_PROJECT.PlatformLinkedLibSingleton.DistinctOS.Windows) + if (EXE_PROJECT.OSTailoredCode.CurrentOS == EXE_PROJECT.OSTailoredCode.DistinctOS.Windows) { //WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff. //The relevant initialization happened just before in "create IGL context". diff --git a/BizHawk.Client.EmuHawk/ScreenSaver.cs b/BizHawk.Client.EmuHawk/ScreenSaver.cs index d09ea9b8a9..64a90807f2 100644 --- a/BizHawk.Client.EmuHawk/ScreenSaver.cs +++ b/BizHawk.Client.EmuHawk/ScreenSaver.cs @@ -41,7 +41,7 @@ namespace BizHawk.Client.EmuHawk //TODO implement } } - private static PlatformSpecificScreenBlankInterface screenBlankInterface = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + private static PlatformSpecificScreenBlankInterface screenBlankInterface = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows ? (PlatformSpecificScreenBlankInterface) new WinScreenBlankInterface() : (PlatformSpecificScreenBlankInterface) new MiscUnixScreenBlankInterface(); diff --git a/BizHawk.Client.EmuHawk/Sound/Sound.cs b/BizHawk.Client.EmuHawk/Sound/Sound.cs index cd6891bd9d..6461747c50 100644 --- a/BizHawk.Client.EmuHawk/Sound/Sound.cs +++ b/BizHawk.Client.EmuHawk/Sound/Sound.cs @@ -27,7 +27,7 @@ namespace BizHawk.Client.EmuHawk { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL) _outputDevice = new OpenALSoundOutput(this); - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.DirectSound) _outputDevice = new DirectSoundSoundOutput(this, mainWindowHandle); diff --git a/BizHawk.Client.EmuHawk/Throttle.cs b/BizHawk.Client.EmuHawk/Throttle.cs index d703bce4ac..20aed07964 100644 --- a/BizHawk.Client.EmuHawk/Throttle.cs +++ b/BizHawk.Client.EmuHawk/Throttle.cs @@ -160,7 +160,7 @@ namespace BizHawk.Client.EmuHawk return timeBeginPeriod(ms); } } - static PlatformSpecificSysTimer sysTimer = PlatformLinkedLibSingleton.CurrentOS != PlatformLinkedLibSingleton.DistinctOS.Windows ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); + static PlatformSpecificSysTimer sysTimer = OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); static uint TimeBeginPeriod(uint ms) { return sysTimer.TimeBeginPeriod(ms); diff --git a/BizHawk.Client.EmuHawk/config/InputWidget.cs b/BizHawk.Client.EmuHawk/config/InputWidget.cs index b6ffe91457..7026051674 100644 --- a/BizHawk.Client.EmuHawk/config/InputWidget.cs +++ b/BizHawk.Client.EmuHawk/config/InputWidget.cs @@ -71,7 +71,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnMouseClick(MouseEventArgs e) { - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) HideCaret(Handle); + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) HideCaret(Handle); base.OnMouseClick(e); } @@ -264,7 +264,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnGotFocus(EventArgs e) { - if (PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows) HideCaret(Handle); + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) HideCaret(Handle); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 92f954e0c2..01e632f799 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -186,7 +186,7 @@ namespace BizHawk.Client.EmuHawk } var currentScripts = LuaImp?.ScriptList; // Temp fix for now - LuaImp = PlatformLinkedLibSingleton.CurrentOS == PlatformLinkedLibSingleton.DistinctOS.Windows + LuaImp = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows ? (PlatformEmuLuaLibrary) new EmuLuaLibrary(Emulator.ServiceProvider) : (PlatformEmuLuaLibrary) new NotReallyLuaLibrary(); if (currentScripts != null) diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 5d381b2184..fee0f9b269 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -740,7 +740,7 @@ namespace BizHawk.Client.EmuHawk return false; } - if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.CurrentOS != PlatformLinkedLibSingleton.DistinctOS.Windows) return false; + if (t == typeof(LuaConsole) && OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) return false; var tool = Assembly .GetExecutingAssembly() diff --git a/BizHawk.Common/BizHawk.Common.csproj b/BizHawk.Common/BizHawk.Common.csproj index 33f8d29023..57821a4430 100644 --- a/BizHawk.Common/BizHawk.Common.csproj +++ b/BizHawk.Common/BizHawk.Common.csproj @@ -85,7 +85,7 @@ - + diff --git a/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs b/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs index 9bc02c487b..e71a78fbef 100644 --- a/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs +++ b/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs @@ -8,12 +8,12 @@ namespace BizHawk.Common.BizInvoke public class DynamicLibraryImportResolver : IImportResolver, IDisposable { private IntPtr _p; - private readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; + private readonly OSTailoredCode.ILinkedLibManager libLoader = OSTailoredCode.LinkedLibManager; public DynamicLibraryImportResolver(string dllName) { _p = libLoader.LoadPlatformSpecific(dllName); - if (_p == IntPtr.Zero) throw new InvalidOperationException($"null pointer returned by {nameof(PlatformLinkedLibSingleton.PlatformLinkedLibManager.LoadPlatformSpecific)}"); + if (_p == IntPtr.Zero) throw new InvalidOperationException($"null pointer returned by {nameof(libLoader.LoadPlatformSpecific)}"); } public IntPtr Resolve(string entryPoint) diff --git a/BizHawk.Common/PlatformLinkedLibSingleton.cs b/BizHawk.Common/OSTailoredCode.cs similarity index 82% rename from BizHawk.Common/PlatformLinkedLibSingleton.cs rename to BizHawk.Common/OSTailoredCode.cs index afc8b46054..fa7c882556 100644 --- a/BizHawk.Common/PlatformLinkedLibSingleton.cs +++ b/BizHawk.Common/OSTailoredCode.cs @@ -10,28 +10,28 @@ namespace EXE_PROJECT namespace BizHawk.Common #endif { - public sealed class PlatformLinkedLibSingleton + public sealed class OSTailoredCode { /// macOS doesn't use PlatformID.MacOSX public static readonly DistinctOS CurrentOS = Environment.OSVersion.Platform == PlatformID.Unix ? currentIsMacOS() ? DistinctOS.macOS : DistinctOS.Linux : DistinctOS.Windows; - private static readonly Lazy lazy = new Lazy(() => + private static readonly Lazy lazy = new Lazy(() => { switch (CurrentOS) { case DistinctOS.Linux: case DistinctOS.macOS: - return new UnixMonoLinkedLibManager(); + return new UnixMonoLLManager(); case DistinctOS.Windows: - return new Win32LinkedLibManager(); + return new WindowsLLManager(); default: throw new ArgumentOutOfRangeException(); } }); - public static PlatformLinkedLibManager LinkedLibManager => lazy.Value; + public static ILinkedLibManager LinkedLibManager => lazy.Value; private static bool currentIsMacOS() { @@ -49,19 +49,19 @@ namespace BizHawk.Common return proc.StandardOutput.ReadLine() == "Darwin"; } - private PlatformLinkedLibSingleton() {} + private OSTailoredCode() {} - public interface PlatformLinkedLibManager + public interface ILinkedLibManager { IntPtr LoadPlatformSpecific(string dllToLoad); IntPtr GetProcAddr(IntPtr hModule, string procName); int FreePlatformSpecific(IntPtr hModule); } - private class UnixMonoLinkedLibManager : PlatformLinkedLibManager + /// This class is copied from a tutorial, so don't git blame and then email me expecting insight. + private class UnixMonoLLManager : ILinkedLibManager { - // This class is copied from a tutorial, so don't git blame and then email me expecting insight. - const int RTLD_NOW = 2; + private const int RTLD_NOW = 2; [DllImport("libdl.so.2")] private static extern IntPtr dlopen(string fileName, int flags); [DllImport("libdl.so.2")] @@ -88,10 +88,10 @@ namespace BizHawk.Common } } - private class Win32LinkedLibManager : PlatformLinkedLibManager + private class WindowsLLManager : ILinkedLibManager { [DllImport("kernel32.dll")] - private static extern UInt32 GetLastError(); + private static extern uint GetLastError(); // was annotated `[DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)]` in SevenZip.NativeMethods // param dllToLoad was annotated `[MarshalAs(UnmanagedType.LPStr)]` in SevenZip.NativeMethods [DllImport("kernel32.dll")] @@ -121,9 +121,9 @@ namespace BizHawk.Common public enum DistinctOS : byte { - Linux = 0, - macOS = 1, - Windows = 2 + Linux, + macOS, + Windows } } } \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs index c499855ae5..3547d5459c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs @@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi bool event_frameend = false; bool event_breakpoint = false; - private static readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; + private static readonly OSTailoredCode.ILinkedLibManager libLoader = OSTailoredCode.LinkedLibManager; public enum m64p_error { From e208edd573be1f125c049cbf63beaa5a95dc049d Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:42:32 +1000 Subject: [PATCH 059/138] Refactor ScreenSaver --- BizHawk.Client.EmuHawk/ScreenSaver.cs | 102 +++++++++++--------------- 1 file changed, 44 insertions(+), 58 deletions(-) diff --git a/BizHawk.Client.EmuHawk/ScreenSaver.cs b/BizHawk.Client.EmuHawk/ScreenSaver.cs index 64a90807f2..5b40fe8af3 100644 --- a/BizHawk.Client.EmuHawk/ScreenSaver.cs +++ b/BizHawk.Client.EmuHawk/ScreenSaver.cs @@ -1,80 +1,66 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; -using BizHawk.Client.Common; using BizHawk.Common; namespace BizHawk.Client.EmuHawk { - // Derived from http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx + /// Derived from http://www.codeproject.com/KB/cs/ScreenSaverControl.aspx public static class ScreenSaver { - private interface PlatformSpecificScreenBlankInterface + private interface IScreenBlankTimer { - Int32 Get(); - void Set(Int32 v); + /// + /// The screen saver timeout setting, in seconds + /// + int Duration { get; set; } } - private class WinScreenBlankInterface : PlatformSpecificScreenBlankInterface + + private class Win32ScreenBlankTimer : IScreenBlankTimer { [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern bool SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int flags); - public Int32 Get() - { - Int32 value = 0; - SystemParametersInfo(SPI_GETSCREENSAVERTIMEOUT, 0, ref value, 0); - return value; - } - public void Set(Int32 v) - { - int nullVar = 0; - SystemParametersInfo(SPI_SETSCREENSAVERTIMEOUT, v, ref nullVar, SPIF_SENDWININICHANGE); - } - } - private class MiscUnixScreenBlankInterface : PlatformSpecificScreenBlankInterface - { - public Int32 Get() - { - return 0; //TODO implement - } - public void Set(Int32 v) - { - //TODO implement - } - } - private static PlatformSpecificScreenBlankInterface screenBlankInterface = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows - ? (PlatformSpecificScreenBlankInterface) new WinScreenBlankInterface() - : (PlatformSpecificScreenBlankInterface) new MiscUnixScreenBlankInterface(); - private const int SPI_GETSCREENSAVERTIMEOUT = 14; - private const int SPI_SETSCREENSAVERTIMEOUT = 15; - private const int SPIF_SENDWININICHANGE = 2; + private const int SPI_GETSCREENSAVERTIMEOUT = 14; + private const int SPI_SETSCREENSAVERTIMEOUT = 15; + private const int SPIF_SENDWININICHANGE = 2; + + public int Duration + { + get + { + var value = 0; + SystemParametersInfo(SPI_GETSCREENSAVERTIMEOUT, 0, ref value, 0); + return value; + } + set + { + var nullVar = 0; + SystemParametersInfo(SPI_SETSCREENSAVERTIMEOUT, value, ref nullVar, SPIF_SENDWININICHANGE); + } + } + } + + private class UnixScreenBlankTimer : IScreenBlankTimer + { + public int Duration { get; set; } = 0; //TODO implementation + } + + private static readonly IScreenBlankTimer _screenBlankTimer = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? (IScreenBlankTimer) new Win32ScreenBlankTimer() + : new UnixScreenBlankTimer(); + + private static int ctr; public static void ResetTimerImmediate() { - SetScreenSaverTimeout(GetScreenSaverTimeout()); + _screenBlankTimer.Duration = _screenBlankTimer.Duration; } - private static int ctr; public static void ResetTimerPeriodically() { - ctr++; - if (ctr == 120) - { - SetScreenSaverTimeout(GetScreenSaverTimeout()); - ctr = 0; - } - } - - // Returns the screen saver timeout setting, in seconds - private static Int32 GetScreenSaverTimeout() - { - return screenBlankInterface.Get(); - } - - // Pass in the number of seconds to set the screen saver timeout value. - private static void SetScreenSaverTimeout(Int32 Value) - { - screenBlankInterface.Set(Value); + if (++ctr < 120) return; + ctr = 0; + ResetTimerImmediate(); } } -} +} \ No newline at end of file From cefba8e16e1f24caa6f4133999c1f2ce35755945 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:45:49 +1000 Subject: [PATCH 060/138] Refactor CurrentOS usage in Throttle --- BizHawk.Client.EmuHawk/Throttle.cs | 39 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Throttle.cs b/BizHawk.Client.EmuHawk/Throttle.cs index 20aed07964..d25af833ca 100644 --- a/BizHawk.Client.EmuHawk/Throttle.cs +++ b/BizHawk.Client.EmuHawk/Throttle.cs @@ -153,14 +153,16 @@ namespace BizHawk.Client.EmuHawk } private class UnixMonoSysTimer : PlatformSpecificSysTimer { - [DllImport("winmm.dll.so", EntryPoint = "timeBeginPeriod")] - private static extern uint timeBeginPeriod(uint uMilliseconds); public uint TimeBeginPeriod(uint ms) { - return timeBeginPeriod(ms); + // we are not going to bother trying to set a minimum resolution for periodic timers + // (on linux I don't think you can set this in user code) + return ms; } } - static PlatformSpecificSysTimer sysTimer = OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); + static PlatformSpecificSysTimer sysTimer = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? (PlatformSpecificSysTimer) new WinSysTimer() + : new UnixMonoSysTimer(); static uint TimeBeginPeriod(uint ms) { return sysTimer.TimeBeginPeriod(ms); @@ -362,18 +364,23 @@ namespace BizHawk.Client.EmuHawk int sleepTime = (int)((timePerFrame - elapsedTime) * 1000 / afsfreq); if (sleepTime >= 2 || paused) { -#if WINDOWS - // Assuming a timer period of 1 ms (i.e. TimeBeginPeriod(1)): The actual sleep time - // on Windows XP is generally within a half millisecond either way of the requested - // time. The actual sleep time on Windows 8 is generally between the requested time - // and up to a millisecond over. So we'll subtract 1 ms from the time to avoid - // sleeping longer than desired. - sleepTime -= 1; -#else - // The actual sleep time on OS X with Mono is generally between the request time - // and up to 25% over. So we'll scale the sleep time back to account for that. - sleepTime = sleepTime * 4 / 5; -#endif + switch (OSTailoredCode.CurrentOS) + { + case OSTailoredCode.DistinctOS.Linux: //TODO repro + case OSTailoredCode.DistinctOS.macOS: + // The actual sleep time on OS X with Mono is generally between the request time + // and up to 25% over. So we'll scale the sleep time back to account for that. + sleepTime = sleepTime * 4 / 5; + break; + case OSTailoredCode.DistinctOS.Windows: + // Assuming a timer period of 1 ms (i.e. TimeBeginPeriod(1)): The actual sleep time + // on Windows XP is generally within a half millisecond either way of the requested + // time. The actual sleep time on Windows 8 is generally between the requested time + // and up to a millisecond over. So we'll subtract 1 ms from the time to avoid + // sleeping longer than desired. + sleepTime -= 1; + break; + } Thread.Sleep(Math.Max(sleepTime, 1)); } From 18874202445c7549b3f122fbf120b3ebd1a4f026 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 15:51:37 +1000 Subject: [PATCH 061/138] Refactor CurrentOS usage in Sound --- BizHawk.Client.EmuHawk/Sound/Sound.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Sound/Sound.cs b/BizHawk.Client.EmuHawk/Sound/Sound.cs index 6461747c50..85aaa2502d 100644 --- a/BizHawk.Client.EmuHawk/Sound/Sound.cs +++ b/BizHawk.Client.EmuHawk/Sound/Sound.cs @@ -25,15 +25,17 @@ namespace BizHawk.Client.EmuHawk public Sound(IntPtr mainWindowHandle) { - if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL) - _outputDevice = new OpenALSoundOutput(this); if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) { + if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL) + _outputDevice = new OpenALSoundOutput(this); if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.DirectSound) _outputDevice = new DirectSoundSoundOutput(this, mainWindowHandle); if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.XAudio2) _outputDevice = new XAudio2SoundOutput(this); } + else _outputDevice = new OpenALSoundOutput(this); // at the moment unix/mono can only support OpenAL (so ignore whatever is set in the config) + if (_outputDevice == null) _outputDevice = new DummySoundOutput(this); } From 35056ae2d9e0504be87cf500e63f013153d23219 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 20:17:02 +1000 Subject: [PATCH 062/138] Remove #if WINDOWS, using runtime check where applicable --- BizHawk.Client.Common/config/Config.cs | 9 ++- BizHawk.Client.Common/lua/LuaSandbox.cs | 60 ++++++++++--------- BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs | 10 ++-- BizHawk.Client.EmuHawk/MainForm.cs | 23 +++---- BizHawk.Client.EmuHawk/PresentationPanel.cs | 3 - BizHawk.Client.EmuHawk/Program.cs | 7 +-- .../Sound/Output/DirectSoundSoundOutput.cs | 4 +- .../Sound/Output/XAudio2SoundOutput.cs | 4 +- BizHawk.Client.EmuHawk/config/SoundConfig.cs | 23 ++++--- BizHawk.Common/TempFileManager.cs | 12 ++-- 10 files changed, 75 insertions(+), 80 deletions(-) diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index 2ff5988861..37221da1d1 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; +using BizHawk.Common; using BizHawk.Emulation.Common; // ReSharper disable FieldCanBeMadeReadOnly.Global @@ -370,11 +371,9 @@ namespace BizHawk.Client.Common public int DispCropBottom = 0; // Sound options -#if WINDOWS - public ESoundOutputMethod SoundOutputMethod = ESoundOutputMethod.DirectSound; -#else - public ESoundOutputMethod SoundOutputMethod = ESoundOutputMethod.OpenAL; -#endif + public ESoundOutputMethod SoundOutputMethod = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? ESoundOutputMethod.DirectSound + : ESoundOutputMethod.OpenAL; // force OpenAL for Unix when config is generated public bool SoundEnabled = true; public bool SoundEnabledNormal = true; public bool SoundEnabledRWFF = true; diff --git a/BizHawk.Client.Common/lua/LuaSandbox.cs b/BizHawk.Client.Common/lua/LuaSandbox.cs index 920984300d..ab1ebdd9e3 100644 --- a/BizHawk.Client.Common/lua/LuaSandbox.cs +++ b/BizHawk.Client.Common/lua/LuaSandbox.cs @@ -1,5 +1,8 @@ using System; using System.Runtime.InteropServices; + +using BizHawk.Common; + using NLua; // TODO - evaluate for re-entrancy problems @@ -18,12 +21,10 @@ namespace BizHawk.Client.Common private string _currentDirectory; - #if WINDOWS [DllImport("kernel32.dll", SetLastError = true)] static extern bool SetCurrentDirectoryW(byte* lpPathName); [DllImport("kernel32.dll", SetLastError=true)] static extern uint GetCurrentDirectoryW(uint nBufferLength, byte* pBuffer); - #endif private bool CoolSetCurrentDirectory(string path, string currDirSpeedHack = null) { @@ -42,40 +43,43 @@ namespace BizHawk.Client.Common return true; } - // WARNING: setting the current directory is SLOW!!! security checks for some reason. - // so we're bypassing it with windows hacks - #if WINDOWS + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + { + // WARNING: setting the current directory is SLOW!!! security checks for some reason. + // so we're bypassing it with windows hacks fixed (byte* pstr = &System.Text.Encoding.Unicode.GetBytes($"{target}\0")[0]) return SetCurrentDirectoryW(pstr); - #else - if (System.IO.Directory.Exists(CurrentDirectory)) // race condition for great justice - { - Environment.CurrentDirectory = CurrentDirectory; // thats right, you can't set a directory as current that doesnt exist because .net's got to do SENSELESS SLOW-ASS SECURITY CHECKS on it and it can't do that on a NONEXISTENT DIRECTORY - return true; - } - else - { - return false; - } - #endif + } + else + { + if (System.IO.Directory.Exists(_currentDirectory)) // race condition for great justice + { + Environment.CurrentDirectory = _currentDirectory; // thats right, you can't set a directory as current that doesnt exist because .net's got to do SENSELESS SLOW-ASS SECURITY CHECKS on it and it can't do that on a NONEXISTENT DIRECTORY + return true; + } + else + { + return false; + } + } } private string CoolGetCurrentDirectory() { - // GUESS WHAT! - // .NET DOES A SECURITY CHECK ON THE DIRECTORY WE JUST RETRIEVED - // AS IF ASKING FOR THE CURRENT DIRECTORY IS EQUIVALENT TO TRYING TO ACCESS IT - // SCREW YOU - #if WINDOWS + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + { + // GUESS WHAT! + // .NET DOES A SECURITY CHECK ON THE DIRECTORY WE JUST RETRIEVED + // AS IF ASKING FOR THE CURRENT DIRECTORY IS EQUIVALENT TO TRYING TO ACCESS IT + // SCREW YOU var buf = new byte[32768]; - fixed(byte* pBuf = &buf[0]) - { - uint ret = GetCurrentDirectoryW(32767, pBuf); - return System.Text.Encoding.Unicode.GetString(buf, 0, (int)ret*2); - } - #else + fixed (byte* pBuf = &buf[0]) + return System.Text.Encoding.Unicode.GetString(buf, 0, 2 * (int) GetCurrentDirectoryW(32767, pBuf)); + } + else + { return Environment.CurrentDirectory; - #endif + } } private void Sandbox(Action callback, Action exceptionCallback) diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs index 6f71c4b682..ccb9f64379 100644 --- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Windows.Forms; using BizHawk.Client.Common; +using BizHawk.Common; using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk @@ -85,12 +86,9 @@ namespace BizHawk.Client.EmuHawk try { _ffmpeg = new Process(); -#if WINDOWS - _ffmpeg.StartInfo.FileName = Path.Combine(PathManager.GetDllDirectory(), "ffmpeg.exe"); -#else - ffmpeg.StartInfo.FileName = "ffmpeg"; // expecting native version to be in path -#endif - + _ffmpeg.StartInfo.FileName = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? Path.Combine(PathManager.GetDllDirectory(), "ffmpeg.exe") + : "ffmpeg"; _ffmpeg.StartInfo.Arguments = $"-y -f nut -i - {_token.Commandline} \"{_baseName}{(_segment == 0 ? string.Empty : $"_{_segment}")}{_ext}\""; _ffmpeg.StartInfo.CreateNoWindow = true; diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 10120587b1..283cb22aa5 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -1052,7 +1052,7 @@ namespace BizHawk.Client.EmuHawk if (!_inFullscreen) { SuspendLayout(); -#if WINDOWS + // Work around an AMD driver bug in >= vista: // It seems windows will activate opengl fullscreen mode when a GL control is occupying the exact space of a screen (0,0 and dimensions=screensize) // AMD cards manifest a problem under these circumstances, flickering other monitors. @@ -1060,7 +1060,9 @@ namespace BizHawk.Client.EmuHawk // (this could be determined with more work; other side affects of the fullscreen mode include: corrupted taskbar, no modal boxes on top of GL control, no screenshots) // At any rate, we can solve this by adding a 1px black border around the GL control // Please note: It is important to do this before resizing things, otherwise momentarily a GL control without WS_BORDER will be at the magic dimensions and cause the flakeout - if (Global.Config.DispFullscreenHacks && Global.Config.DispMethod == Config.EDispMethod.OpenGL) + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + && Global.Config.DispFullscreenHacks + && Global.Config.DispMethod == Config.EDispMethod.OpenGL) { //ATTENTION: this causes the statusbar to not work well, since the backcolor is now set to black instead of SystemColors.Control. //It seems that some statusbar elements composite with the backcolor. @@ -1071,7 +1073,6 @@ namespace BizHawk.Client.EmuHawk // FUTURE WORK: // re-add this padding back into the display manager (so the image will get cut off a little but, but a few more resolutions will fully fit into the screen) } -#endif _windowedLocation = Location; @@ -1088,13 +1089,15 @@ namespace BizHawk.Client.EmuHawk WindowState = FormWindowState.Normal; -#if WINDOWS - // do this even if DispFullscreenHacks arent enabled, to restore it in case it changed underneath us or something - Padding = new Padding(0); - // it's important that we set the form color back to this, because the statusbar icons blend onto the mainform, not onto the statusbar-- - // so we need the statusbar and mainform backdrop color to match - BackColor = SystemColors.Control; -#endif + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + { + // do this even if DispFullscreenHacks arent enabled, to restore it in case it changed underneath us or something + Padding = new Padding(0); + + // it's important that we set the form color back to this, because the statusbar icons blend onto the mainform, not onto the statusbar-- + // so we need the statusbar and mainform backdrop color to match + BackColor = SystemColors.Control; + } _inFullscreen = false; diff --git a/BizHawk.Client.EmuHawk/PresentationPanel.cs b/BizHawk.Client.EmuHawk/PresentationPanel.cs index a20b656ac8..b647f2ce01 100644 --- a/BizHawk.Client.EmuHawk/PresentationPanel.cs +++ b/BizHawk.Client.EmuHawk/PresentationPanel.cs @@ -6,9 +6,6 @@ using sysdrawing2d=System.Drawing.Drawing2D; using System.IO; using System.Threading; using System.Windows.Forms; -#if WINDOWS -using SlimDX; -#endif using BizHawk.Client.Common; using BizHawk.Bizware.BizwareGL; diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index c46f0c961c..96e98ff548 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -5,9 +5,8 @@ using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; -#if WINDOWS + using Microsoft.VisualBasic.ApplicationServices; -#endif using BizHawk.Common; using BizHawk.Client.Common; @@ -265,7 +264,6 @@ REDO_DISPMETHOD: return GlobalWin.ExitCode; } //SubMain -#if WINDOWS //declared here instead of a more usual place to avoid dependencies on the more usual place [DllImport("kernel32.dll", SetLastError = true)] @@ -292,7 +290,6 @@ REDO_DISPMETHOD: RemoveMOTW(fi.FullName); } } -#endif private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { @@ -336,7 +333,6 @@ REDO_DISPMETHOD: } } -#if WINDOWS private class SingleInstanceController : WindowsFormsApplicationBase { private readonly string[] cmdArgs; @@ -365,6 +361,5 @@ REDO_DISPMETHOD: GlobalWin.ExitCode = ((MainForm)MainForm).ProgramRunLoop(); } } -#endif } } diff --git a/BizHawk.Client.EmuHawk/Sound/Output/DirectSoundSoundOutput.cs b/BizHawk.Client.EmuHawk/Sound/Output/DirectSoundSoundOutput.cs index df362aa7aa..21ca8bd90f 100644 --- a/BizHawk.Client.EmuHawk/Sound/Output/DirectSoundSoundOutput.cs +++ b/BizHawk.Client.EmuHawk/Sound/Output/DirectSoundSoundOutput.cs @@ -1,5 +1,4 @@ -#if WINDOWS -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -164,4 +163,3 @@ namespace BizHawk.Client.EmuHawk } } } -#endif diff --git a/BizHawk.Client.EmuHawk/Sound/Output/XAudio2SoundOutput.cs b/BizHawk.Client.EmuHawk/Sound/Output/XAudio2SoundOutput.cs index 913fb91c94..e5bf4f8dc0 100644 --- a/BizHawk.Client.EmuHawk/Sound/Output/XAudio2SoundOutput.cs +++ b/BizHawk.Client.EmuHawk/Sound/Output/XAudio2SoundOutput.cs @@ -1,5 +1,4 @@ -#if WINDOWS -using System; +using System; using System.Collections.Generic; using System.Linq; @@ -185,4 +184,3 @@ namespace BizHawk.Client.EmuHawk } } } -#endif diff --git a/BizHawk.Client.EmuHawk/config/SoundConfig.cs b/BizHawk.Client.EmuHawk/config/SoundConfig.cs index 782ae648aa..97faed7762 100644 --- a/BizHawk.Client.EmuHawk/config/SoundConfig.cs +++ b/BizHawk.Client.EmuHawk/config/SoundConfig.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Windows.Forms; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -24,10 +25,14 @@ namespace BizHawk.Client.EmuHawk cbEnableNormal.Checked = Global.Config.SoundEnabledNormal; cbEnableRWFF.Checked = Global.Config.SoundEnabledRWFF; cbMuteFrameAdvance.Checked = Global.Config.MuteFrameAdvance; -#if !WINDOWS - rbOutputMethodDirectSound.Enabled = false; - rbOutputMethodXAudio2.Enabled = false; -#endif + + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) + { + // Disable DirectSound and XAudio2 on Mono + rbOutputMethodDirectSound.Enabled = false; + rbOutputMethodXAudio2.Enabled = false; + } + rbOutputMethodDirectSound.Checked = Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.DirectSound; rbOutputMethodXAudio2.Checked = Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.XAudio2; rbOutputMethodOpenAL.Checked = Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL; @@ -83,11 +88,13 @@ namespace BizHawk.Client.EmuHawk private void PopulateDeviceList() { IEnumerable deviceNames = Enumerable.Empty(); -#if WINDOWS - if (rbOutputMethodDirectSound.Checked) deviceNames = DirectSoundSoundOutput.GetDeviceNames(); - if (rbOutputMethodXAudio2.Checked) deviceNames = XAudio2SoundOutput.GetDeviceNames(); -#endif + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + { + if (rbOutputMethodDirectSound.Checked) deviceNames = DirectSoundSoundOutput.GetDeviceNames(); + if (rbOutputMethodXAudio2.Checked) deviceNames = XAudio2SoundOutput.GetDeviceNames(); + } if (rbOutputMethodOpenAL.Checked) deviceNames = OpenALSoundOutput.GetDeviceNames(); + listBoxSoundDevices.Items.Clear(); listBoxSoundDevices.Items.Add(""); listBoxSoundDevices.SelectedIndex = 0; diff --git a/BizHawk.Common/TempFileManager.cs b/BizHawk.Common/TempFileManager.cs index d21da556bd..88d5b628cc 100644 --- a/BizHawk.Common/TempFileManager.cs +++ b/BizHawk.Common/TempFileManager.cs @@ -59,10 +59,8 @@ namespace BizHawk.Common } } - #if WINDOWS [DllImport("kernel32.dll", EntryPoint = "DeleteFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true)] static extern bool DeleteFileW([MarshalAs(UnmanagedType.LPWStr)]string lpFileName); - #endif static void ThreadProc() { @@ -94,12 +92,10 @@ namespace BizHawk.Common { try { - // SHUT. UP. THE. EXCEPTIONS. - #if WINDOWS - DeleteFileW(fi.FullName); - #else - fi.Delete(); - #endif + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + DeleteFileW(fi.FullName); // SHUT. UP. THE. EXCEPTIONS. + else + fi.Delete(); } catch { From df232e6184430988b766a56674e802844e395233 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 18 May 2019 20:25:33 +1000 Subject: [PATCH 063/138] Add additional CurrentOS checks --- BizHawk.Client.Common/config/Config.cs | 9 ++++++-- BizHawk.Client.EmuHawk/MainForm.Events.cs | 10 ++++++++- BizHawk.Client.EmuHawk/MainForm.cs | 21 +++++++++++++++++-- BizHawk.Client.EmuHawk/Program.cs | 11 ++++++++-- .../config/DisplayConfigLite.cs | 11 ++++++++++ .../config/FirmwaresConfig.cs | 2 ++ BizHawk.Client.EmuHawk/tools/CDL.cs | 12 ++++++++++- BizHawk.Client.EmuHawk/tools/ToolBox.cs | 3 +++ BizHawk.Common/BizInvoke/MemoryBlock.cs | 3 +++ 9 files changed, 74 insertions(+), 8 deletions(-) diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index 37221da1d1..c0bf196702 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -342,8 +342,13 @@ namespace BizHawk.Client.Common public int DispPrescale = 1; - // warning: we dont even want to deal with changing this at runtime. but we want it changed here for config purposes. so dont check this variable. check in GlobalWin or something like that. - public EDispMethod DispMethod = EDispMethod.SlimDX9; + /// + /// warning: we dont even want to deal with changing this at runtime. but we want it changed here for config purposes. so dont check this variable. check in GlobalWin or something like that. + /// force DX for Windows and GDI+ for Unix when a new config is generated + /// + public EDispMethod DispMethod = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? EDispMethod.SlimDX9 + : EDispMethod.GdiPlus; public int DispChrome_FrameWindowed = 2; public bool DispChrome_StatusBarWindowed = true; diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 65878e36e2..4ece99a72f 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -25,6 +25,7 @@ using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; using BizHawk.Emulation.Cores.Computers.AppleII; using BizHawk.Client.ApiHawk; +using BizHawk.Common; using BizHawk.Emulation.Cores.Computers.Commodore64; using BizHawk.Emulation.Cores.Nintendo.Gameboy; using BizHawk.Emulation.Cores.Computers.SinclairSpectrum; @@ -1469,7 +1470,14 @@ namespace BizHawk.Client.EmuHawk private void RamSearchMenuItem_Click(object sender, EventArgs e) { - GlobalWin.Tools.Load(); + var ramSearch = GlobalWin.Tools.Load(); + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) + { + // this is apparently needed for weird mono-forms-on-different-thread issues + // dont do .Show() within Load() for RamSearch - instead put an instance of it here on MainForm, then show here + // the mono winforms implementation is.... weird and buggy + ramSearch.Show(); + } } private void LuaConsoleMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 283cb22aa5..4623b15806 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -161,7 +161,9 @@ namespace BizHawk.Client.EmuHawk Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt")); // TODO GL - a lot of disorganized wiring-up here - CGC.CGCBinPath = Path.Combine(PathManager.GetDllDirectory(), "cgc.exe"); + CGC.CGCBinPath = OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows + ? Path.Combine(PathManager.GetDllDirectory(), "cgc.exe") + : "cgc"; // installed separately (via package manager or from https://developer.nvidia.com/cg-toolkit-download), look in $PATH PresentationPanel = new PresentationPanel(); PresentationPanel.GraphicsControl.MainWindow = true; GlobalWin.DisplayManager = new DisplayManager(PresentationPanel); @@ -2069,7 +2071,22 @@ namespace BizHawk.Client.EmuHawk // sends an alt+mnemonic combination private void SendAltKeyChar(char c) { - typeof(ToolStrip).InvokeMember("ProcessMnemonicInternal", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, MainformMenu, new object[] { c }); + switch (OSTailoredCode.CurrentOS) + { + case OSTailoredCode.DistinctOS.Linux: + case OSTailoredCode.DistinctOS.macOS: + // no mnemonics for you + break; + case OSTailoredCode.DistinctOS.Windows: + //HACK + var _ = typeof(ToolStrip).InvokeMember( + "ProcessMnemonicInternal", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, + null, + MainformMenu, + new object[] { c }); + break; + } } public static string FormatFilter(params string[] args) diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 96e98ff548..2b0f14d079 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -80,7 +80,13 @@ namespace BizHawk.Client.EmuHawk [STAThread] private static int Main(string[] args) { - return SubMain(args); + var exitCode = SubMain(args); + if (EXE_PROJECT.OSTailoredCode.CurrentOS == EXE_PROJECT.OSTailoredCode.DistinctOS.Linux) + { + Console.WriteLine("BizHawk has completed its shutdown routines, killing process..."); + Process.GetCurrentProcess().Kill(); + } + return exitCode; } //NoInlining should keep this code from getting jammed into Main() which would create dependencies on types which havent been setup by the resolver yet... or something like that @@ -309,7 +315,8 @@ REDO_DISPMETHOD: //so.. we're going to resort to something really bad. //avert your eyes. var configPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini"); - if (File.Exists(configPath) + if (EXE_PROJECT.OSTailoredCode.CurrentOS == EXE_PROJECT.OSTailoredCode.DistinctOS.Windows // LuaInterface is not currently working on Mono + && File.Exists(configPath) && (Array.Find(File.ReadAllLines(configPath), line => line.Contains(" \"UseNLua\": ")) ?? string.Empty) .Contains("false")) { diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs index a094247ef3..cb4f4f7515 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs @@ -3,6 +3,7 @@ using System.IO; using System.Windows.Forms; using BizHawk.Emulation.Common; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -91,6 +92,16 @@ namespace BizHawk.Client.EmuHawk txtCropBottom.Text = Global.Config.DispCropBottom.ToString(); RefreshAspectRatioOptions(); + + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) + { + // Disable SlimDX on Unix + rbD3D9.Enabled = false; + rbD3D9.AutoCheck = false; + cbAlternateVsync.Enabled = false; + label13.Enabled = false; + label8.Enabled = false; + } } private void btnOk_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs index 826df7d025..69a302c097 100644 --- a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs +++ b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs @@ -358,6 +358,8 @@ namespace BizHawk.Client.EmuHawk private void tbbOpenFolder_Click(object sender, EventArgs e) { var frmWares = PathManager.MakeAbsolutePath(Global.Config.PathEntries.FirmwaresPathFragment, null); + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows && !Directory.Exists(frmWares)) + Directory.CreateDirectory(frmWares); System.Diagnostics.Process.Start(frmWares); } diff --git a/BizHawk.Client.EmuHawk/tools/CDL.cs b/BizHawk.Client.EmuHawk/tools/CDL.cs index 0571d4e4ac..92fee7a5c5 100644 --- a/BizHawk.Client.EmuHawk/tools/CDL.cs +++ b/BizHawk.Client.EmuHawk/tools/CDL.cs @@ -7,6 +7,7 @@ using BizHawk.Emulation.Common; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.ToolExtensions; +using BizHawk.Common; //TODO - select which memorydomains go out to the CDL file. will this cause a problem when re-importing it? //perhaps missing domains shouldnt fail a check @@ -98,7 +99,16 @@ namespace BizHawk.Client.EmuHawk if (_cdl == null) { lvCDL.BeginUpdate(); - lvCDL.Items.Clear(); + if (OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows) + { + lvCDL.Items.Clear(); + } + else + { + // this is a winforms implementation problem for mono + // see https://github.com/mono/mono/issues/11070 + // until this is resolved in mono we should just skip this call + } lvCDL.EndUpdate(); return; } diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.cs b/BizHawk.Client.EmuHawk/tools/ToolBox.cs index 67aefdfd0f..23c3a8df8c 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using BizHawk.Emulation.Common; using BizHawk.Client.ApiHawk; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -68,6 +69,8 @@ namespace BizHawk.Client.EmuHawk continue; // if (!ApiInjector.IsAvailable(, t)) // continue; + if (t == typeof(HexView) && OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) + continue; // Skip this tool on Unix. It isn't finished and only causes exceptions var instance = Activator.CreateInstance(t); diff --git a/BizHawk.Common/BizInvoke/MemoryBlock.cs b/BizHawk.Common/BizInvoke/MemoryBlock.cs index ae3c867adf..7bbdf04f36 100644 --- a/BizHawk.Common/BizInvoke/MemoryBlock.cs +++ b/BizHawk.Common/BizInvoke/MemoryBlock.cs @@ -79,6 +79,9 @@ namespace BizHawk.Common.BizInvoke /// public MemoryBlock(ulong start, ulong size) { + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) + throw new InvalidOperationException("MemoryBlock ctor called on Unix"); + if (!WaterboxUtils.Aligned(start)) throw new ArgumentOutOfRangeException(); if (size == 0) From 2377e644e6fde55cffd02a7978f3f13f9cdb5a62 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 19 May 2019 14:59:11 +1000 Subject: [PATCH 064/138] Add build scripts for Unix --- Dist/BuildDebug.sh | 2 ++ Dist/BuildRelease.sh | 2 ++ 2 files changed, 4 insertions(+) create mode 100755 Dist/BuildDebug.sh create mode 100755 Dist/BuildRelease.sh diff --git a/Dist/BuildDebug.sh b/Dist/BuildDebug.sh new file mode 100755 index 0000000000..388cc5536d --- /dev/null +++ b/Dist/BuildDebug.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd "$(dirname "$0")/.." && msbuild /p:Configuration=Debug BizHawk.sln diff --git a/Dist/BuildRelease.sh b/Dist/BuildRelease.sh new file mode 100755 index 0000000000..203546a22c --- /dev/null +++ b/Dist/BuildRelease.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd "$(dirname "$0")/.." && msbuild /p:Configuration=Release BizHawk.sln From ddbe3c7942fa5f265f81216ec31e9f75a2222e0f Mon Sep 17 00:00:00 2001 From: Asnivor Date: Mon, 20 May 2019 08:59:59 +0100 Subject: [PATCH 065/138] Remove Virtu.csproj references from solution (because they shouldnt be there - my bad) --- BizHawk.sln | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/BizHawk.sln b/BizHawk.sln index 5c6cd2044b..53559fc6dc 100644 --- a/BizHawk.sln +++ b/BizHawk.sln @@ -59,8 +59,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BizHawk.Client.MultiHawk", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BizHawk.Client.ApiHawk", "BizHawk.Client.ApiHawk\BizHawk.Client.ApiHawk.csproj", "{8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Virtu", "ExternalCoreProjects\Virtu\Virtu.csproj", "{8E522778-7A2C-4364-BDCE-0BA5623828E1}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -127,18 +125,6 @@ Global {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|Any CPU.Build.0 = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|x64.Build.0 = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Debug|x86.Build.0 = Debug|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|Any CPU.Build.0 = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|x64.ActiveCfg = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|x64.Build.0 = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|x86.ActiveCfg = Release|Any CPU - {8E522778-7A2C-4364-BDCE-0BA5623828E1}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 5a60e7f9269569386a9d6e6bd769d77ea888a448 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Mon, 20 May 2019 18:38:09 +1000 Subject: [PATCH 066/138] Rewrite IsAvailable, call to Assembly.GetTypes is now lazy --- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 57 ++++++--------------- 1 file changed, 15 insertions(+), 42 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 1d4f348f0f..18dc99da8a 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -728,60 +728,33 @@ namespace BizHawk.Client.EmuHawk } } - public bool IsAvailable() - { - return IsAvailable(typeof(T)); - } + private static readonly Lazy lazyAsmTypes = new Lazy(() => Assembly.ReflectionOnlyLoadFrom(Assembly.GetExecutingAssembly().Location).GetTypes()); - public bool IsAvailable(Type t) + public bool IsAvailable(Type tool) { - if (!ServiceInjector.IsAvailable(Global.Emulator.ServiceProvider, t)) + if (!ServiceInjector.IsAvailable(Global.Emulator.ServiceProvider, tool) + || (tool == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) // simply doesn't work (for now) + || !Array.Exists(lazyAsmTypes.Value, t => t == tool)) // not a tool { return false; } - if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) return false; - - var tool = Assembly - .GetExecutingAssembly() - .GetTypes() - .FirstOrDefault(type => type == t); - - if (tool == null) // This isn't a tool, must not be available + ToolAttribute attr; + try { - return false; + attr = tool.GetCustomAttributes(false).OfType().Single(); } - - var attr = tool.GetCustomAttributes(false) - .OfType() - .FirstOrDefault(); - - // start with the assumption that if no supported systems are mentioned and no unsupported cores are mentioned - // then this is available for all - bool supported = true; - - if (attr?.SupportedSystems != null && attr.SupportedSystems.Any()) + catch (InvalidOperationException e) // no ToolAttribute on given type { - // supported systems are available - supported = attr.SupportedSystems.Contains(Global.Emulator.SystemId); - - if (supported) - { - // check for a core not supported override - if (attr.UnsupportedCores.Contains(Global.Emulator.DisplayName())) - supported = false; - } + return true; } - else if (attr?.UnsupportedCores != null && attr.UnsupportedCores.Any()) - { - // no supported system specified, but unsupported cores are - if (attr.UnsupportedCores.Contains(Global.Emulator.DisplayName())) - supported = false; - } - - return supported; + var sysName = Global.Emulator.DisplayName(); + return !attr.UnsupportedCores.Contains(sysName) // not unsupported + && (!attr.SupportedSystems.Any() || attr.SupportedSystems.Contains(sysName)); // supported (no supported list -> assumed all supported) } + public bool IsAvailable() => IsAvailable(typeof(T)); + // Note: Referencing these properties creates an instance of the tool and persists it. They should be referenced by type if this is not desired #region Tools From d11e35dc44bf4dec5249053bac968e14b0ca55a6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Mon, 20 May 2019 23:32:46 +1000 Subject: [PATCH 067/138] Add CurrentOS check paired with the one in MainForm.Events.cs --- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index fee0f9b269..27d1ed70e8 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -159,7 +159,15 @@ namespace BizHawk.Client.EmuHawk } newTool.Restart(); - newTool.Show(); + if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows + && newTool is RamSearch) + { + // the mono winforms implementation is buggy, skip to the return statement and call Show in MainForm instead + } + else + { + newTool.Show(); + } return (T)newTool; } From 7a805600054a0c9c80430a8d999c890205afe294 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Wed, 22 May 2019 17:30:04 -0400 Subject: [PATCH 068/138] GBHawk: 10 second timeout if ppu not running --- .../Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs | 2 +- BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs index ca42c1472e..8b22b682ee 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs @@ -161,7 +161,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } ticker++; - // if (ticker > 10000000) { vblank_rise = true; }//throw new Exception("ERROR: Unable to Resolve Frame"); } + if (ticker > 42134400) { throw new Exception("ERROR: Unable to Resolve Frame"); } in_vblank_old = in_vblank; REG_FF0F_OLD = REG_FF0F; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index 00e89a039e..cf3a5123f2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -158,10 +158,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk Buffer.BlockCopy(rom, 0x100, header, 0, 0x50); - string hash_md5 = null; - hash_md5 = "md5:" + rom.HashMD5(0, rom.Length); - Console.WriteLine(hash_md5); - + Console.WriteLine("MD5: " + rom.HashMD5(0, rom.Length)); + Console.WriteLine("SHA1: " + rom.HashSHA1(0, rom.Length)); _rom = rom; Setup_Mapper(); From 2bd332c862bc31072bbc83846e4bc7bf9ced081c Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 18:08:14 +0200 Subject: [PATCH 069/138] fix psg ch3 regression introduced in r165 --- libgambatte/src/sound/channel3.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libgambatte/src/sound/channel3.cpp b/libgambatte/src/sound/channel3.cpp index 0d0d069f9f..aeab458d6b 100644 --- a/libgambatte/src/sound/channel3.cpp +++ b/libgambatte/src/sound/channel3.cpp @@ -168,12 +168,9 @@ void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign break; } } else { - if (outBase) { - const unsigned long out = outBase * (0 - 15ul); - - *buf += out - prevOut; - prevOut = out; - } + const unsigned long out = outBase * (0 - 15ul); + *buf += out - prevOut; + prevOut = out; cycleCounter += cycles; From 289439528d203112533022c0cd40918c9d023c7b Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 18:11:32 +0200 Subject: [PATCH 070/138] c++11 narrowing conversion warnings --- libgambatte/src/video/ppu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index c1f10175f5..fde43224fb 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -105,9 +105,9 @@ enum { WIN_DRAW_START = 1, WIN_DRAW_STARTED = 2 }; enum { M2_DS_OFFSET = 3 }; enum { MAX_M3START_CYCLES = 80 }; -static inline unsigned weMasterCheckPriorToLyIncLineCycle(const bool cgb) { return 450 - cgb; } -static inline unsigned weMasterCheckAfterLyIncLineCycle(const bool cgb) { return 454 - cgb; } -static inline unsigned m3StartLineCycle(const bool /*cgb*/) { return 83; } +static inline int weMasterCheckPriorToLyIncLineCycle(const bool cgb) { return 450 - cgb; } +static inline int weMasterCheckAfterLyIncLineCycle(const bool cgb) { return 454 - cgb; } +static inline int m3StartLineCycle(const bool /*cgb*/) { return 83; } static inline void nextCall(const int cycles, const PPUState &state, PPUPriv &p) { const int c = p.cycles - cycles; From a3ee854022ca4ff18d735676051d7bcdd8e87e67 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 18:27:08 +0200 Subject: [PATCH 071/138] more ideomatic use of sizeof --- libgambatte/libgambatte.vcxproj | 2 +- libgambatte/src/gambatte.cpp | 2 +- libgambatte/src/initstate.cpp | 22 +++++++++++----------- libgambatte/src/newstate.h | 10 +++++----- libgambatte/src/sound.cpp | 2 +- libgambatte/src/video.cpp | 2 +- libgambatte/src/video/ppu.cpp | 6 +++--- libgambatte/src/video/sprite_mapper.cpp | 4 ++-- output/dll/libgambatte.dll | Bin 170496 -> 143872 bytes 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/libgambatte/libgambatte.vcxproj b/libgambatte/libgambatte.vcxproj index 3d744a9a8c..4eecef7e04 100644 --- a/libgambatte/libgambatte.vcxproj +++ b/libgambatte/libgambatte.vcxproj @@ -22,7 +22,7 @@ {5D630682-7BDA-474D-B387-0EB420DDC199} Win32Proj libgambatte - 10.0.17763.0 + 8.1 diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index a1e3dfa65c..818c09c48d 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -75,7 +75,7 @@ void GB::blitTo(gambatte::uint_least32_t *videoBuf, int pitch) for (int i = 0; i < 144; i++) { - std::memcpy(dst, src, sizeof(gambatte::uint_least32_t) * 160); + std::memcpy(dst, src, sizeof gambatte::uint_least32_t * 160); src += 160; dst += pitch; } diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 6f6e3a6e7c..d539354112 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -700,7 +700,7 @@ static void setInitialCgbWram(unsigned char *const wram) { std::memset(wram + 0x2000, 0, 0x1000); - for (std::size_t i = 0; i < sizeof(cgbWramDumpDiff) / sizeof(cgbWramDumpDiff[0]); ++i) + for (std::size_t i = 0; i < sizeof cgbWramDumpDiff / sizeof cgbWramDumpDiff[0]; ++i) wram[cgbWramDumpDiff[i].addr] = cgbWramDumpDiff[i].val; } @@ -972,7 +972,7 @@ static void setInitialDmgWram(unsigned char *const wram) { std::memcpy(wram + 0x1000, wram, 0x1000); - for (std::size_t i = 0; i < sizeof(dmgWramDumpDiff) / sizeof(dmgWramDumpDiff[0]); ++i) + for (std::size_t i = 0; i < sizeof dmgWramDumpDiff / sizeof dmgWramDumpDiff[0]; ++i) wram[dmgWramDumpDiff[i].addr] = dmgWramDumpDiff[i].val; } @@ -1007,7 +1007,7 @@ static void setInitialVram(unsigned char *const vram, const bool cgb) { std::memset(vram, 0, 0x4000); - for (std::size_t i = 0; i < sizeof(even_numbered_8010_to_81a0_dump) / sizeof(even_numbered_8010_to_81a0_dump[0]); ++i) { + for (std::size_t i = 0; i < sizeof even_numbered_8010_to_81a0_dump; ++i) { vram[0x0010 + i * 2] = even_numbered_8010_to_81a0_dump[i]; } @@ -1076,8 +1076,8 @@ static void setInitialCgbIoamhram(unsigned char *const ioamhram) { }; std::memset(ioamhram, 0x00, 0x0A0); - std::memcpy(ioamhram + 0x0A0, feaxDump, sizeof(feaxDump)); - std::memcpy(ioamhram + 0x100, ffxxDump, sizeof(ffxxDump)); + std::memcpy(ioamhram + 0x0A0, feaxDump, sizeof feaxDump); + std::memcpy(ioamhram + 0x100, ffxxDump, sizeof ffxxDump); } static void setInitialDmgIoamhram(unsigned char *const ioamhram) { @@ -1139,9 +1139,9 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { 0x59, 0xEA, 0x39, 0x01, 0x2E, 0x00, 0x69, 0x00 }; - std::memcpy(ioamhram , oamDump, sizeof(oamDump)); + std::memcpy(ioamhram , oamDump, sizeof oamDump); std::memset(ioamhram + 0x0A0, 0x00, 0x060); - std::memcpy(ioamhram + 0x100, ffxxDump, sizeof(ffxxDump)); + std::memcpy(ioamhram + 0x100, ffxxDump, sizeof ffxxDump); } } // anon namespace @@ -1223,7 +1223,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.ppu.bgpData.ptr[i + 1] = 0x7F; } - std::memcpy(state.ppu.objpData.ptr, cgbObjpDump, sizeof(cgbObjpDump)); + std::memcpy(state.ppu.objpData.ptr, cgbObjpDump, sizeof cgbObjpDump); if (!cgb) { state.ppu.bgpData.ptr[0] = state.mem.ioamhram.get()[0x147]; @@ -1235,9 +1235,9 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.ppu.oamReaderBuf.ptr[pos] = state.mem.ioamhram.ptr[(pos * 2 & ~3) | (pos & 1)]; std::fill_n(state.ppu.oamReaderSzbuf.ptr, 40, false); - std::memset(state.ppu.spAttribList, 0, sizeof(state.ppu.spAttribList)); - std::memset(state.ppu.spByte0List, 0, sizeof(state.ppu.spByte0List)); - std::memset(state.ppu.spByte1List, 0, sizeof(state.ppu.spByte1List)); + std::memset(state.ppu.spAttribList, 0, sizeof state.ppu.spAttribList); + std::memset(state.ppu.spByte0List, 0, sizeof state.ppu.spByte0List); + std::memset(state.ppu.spByte1List, 0, sizeof state.ppu.spByte1List); state.ppu.videoCycles = 0; state.ppu.enableDisplayM0Time = state.cpu.cycleCounter; state.ppu.winYPos = 0xFF; diff --git a/libgambatte/src/newstate.h b/libgambatte/src/newstate.h index 2457a83669..d741879cff 100644 --- a/libgambatte/src/newstate.h +++ b/libgambatte/src/newstate.h @@ -80,18 +80,18 @@ public: // first line is default value in converted enum; last line is default value in argument x -#define EBS(x,d) do { int _ttmp = (d); if (isReader) ns->Load(&_ttmp, sizeof(_ttmp), #x); if (0) +#define EBS(x,d) do { int _ttmp = (d); if (isReader) ns->Load(&_ttmp, sizeof _ttmp, #x); if (0) #define EVS(x,v,n) else if (!isReader && (x) == (v)) _ttmp = (n); else if (isReader && _ttmp == (n)) (x) = (v) -#define EES(x,d) else if (isReader) (x) = (d); if (!isReader) ns->Save(&_ttmp, sizeof(_ttmp), #x); } while (0) +#define EES(x,d) else if (isReader) (x) = (d); if (!isReader) ns->Save(&_ttmp, sizeof _ttmp, #x); } while (0) #define RSS(x,b) do { if (isReader)\ -{ ptrdiff_t _ttmp; ns->Load(&_ttmp, sizeof(_ttmp), #x); (x) = (_ttmp == (ptrdiff_t)0xdeadbeef ? 0 : (b) + _ttmp); }\ +{ ptrdiff_t _ttmp; ns->Load(&_ttmp, sizeof _ttmp, #x); (x) = (_ttmp == (ptrdiff_t)0xdeadbeef ? 0 : (b) + _ttmp); }\ else\ -{ ptrdiff_t _ttmp = (x) == 0 ? 0xdeadbeef : (x) - (b); ns->Save(&_ttmp, sizeof(_ttmp), #x); } } while (0) +{ ptrdiff_t _ttmp = (x) == 0 ? 0xdeadbeef : (x) - (b); ns->Save(&_ttmp, sizeof _ttmp, #x); } } while (0) #define PSS(x,s) do { if (isReader) ns->Load((x), (s), #x); else ns->Save((x), (s), #x); } while (0) -#define NSS(x) do { if (isReader) ns->Load(&(x), sizeof(x), #x); else ns->Save(&(x), sizeof(x), #x); } while (0) +#define NSS(x) do { if (isReader) ns->Load(&(x), sizeof x, #x); else ns->Save(&(x), sizeof x, #x); } while (0) #define SSS(x) do { ns->EnterSection(#x); (x).SyncState(ns); ns->ExitSection(#x); } while (0) diff --git a/libgambatte/src/sound.cpp b/libgambatte/src/sound.cpp index 01685afc74..508ebaf827 100644 --- a/libgambatte/src/sound.cpp +++ b/libgambatte/src/sound.cpp @@ -85,7 +85,7 @@ void PSG::loadState(const SaveState &state) { void PSG::accumulate_channels(const unsigned long cycles) { uint_least32_t *const buf = buffer + bufferPos; - std::memset(buf, 0, cycles * sizeof(uint_least32_t)); + std::memset(buf, 0, cycles * sizeof *buf); ch1.update(buf, soVol, cycles); ch2.update(buf, soVol, cycles); ch3.update(buf, soVol, cycles); diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index bb9a206932..c2b82a6495 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -57,7 +57,7 @@ LCD::LCD(const unsigned char *const oamram, const unsigned char *const vram, con std::memset( bgpData, 0, sizeof bgpData); std::memset(objpData, 0, sizeof objpData); - for (std::size_t i = 0; i < sizeof(dmgColorsRgb32) / sizeof(dmgColorsRgb32[0]); ++i) + for (std::size_t i = 0; i < sizeof dmgColorsRgb32 / sizeof dmgColorsRgb32[0]; ++i) setDmgPaletteColor(i, (3 - (i & 3)) * 85 * 0x010101); reset(oamram, vram, false); diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index fde43224fb..70d7db9e54 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -149,7 +149,7 @@ namespace M2 { }; static void f0(PPUPriv &p) { - std::memset(&p.spLut, 0, sizeof(p.spLut)); + std::memset(&p.spLut, 0, sizeof p.spLut); p.reg0 = 0; p.nextSprite = 0; p.nextCallPtr = &f1_; @@ -1638,7 +1638,7 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { p_.nextCallPtr = m3loopState; p_.cycles = -1; } else if (vcycs < 143 * 456L + static_cast(m3StartLineCycle(p_.cgb)) + MAX_M3START_CYCLES) { - const struct CycleState lineCycleStates[] = { + const CycleState lineCycleStates[] = { { &M3Start::f0_, m3StartLineCycle(p_.cgb) }, { &M3Start::f1_, m3StartLineCycle(p_.cgb) + MAX_M3START_CYCLES }, { &M2::LyNon0::f0_, weMasterCheckPriorToLyIncLineCycle(p_.cgb) }, @@ -1647,7 +1647,7 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { }; const std::size_t pos = - upperBound(lineCycleStates, lineCycles); + upperBound(lineCycleStates, lineCycles); p_.cycles = lineCycles - lineCycleStates[pos].cycle; p_.nextCallPtr = lineCycleStates[pos].state; diff --git a/libgambatte/src/video/sprite_mapper.cpp b/libgambatte/src/video/sprite_mapper.cpp index cd2e28b1b2..208b80e8e7 100644 --- a/libgambatte/src/video/sprite_mapper.cpp +++ b/libgambatte/src/video/sprite_mapper.cpp @@ -107,7 +107,7 @@ void SpriteMapper::OamReader::change(const unsigned long cc) { void SpriteMapper::OamReader::setStatePtrs(SaveState &state) { state.ppu.oamReaderBuf.set(buf, sizeof buf); - state.ppu.oamReaderSzbuf.set(szbuf, sizeof(szbuf) / sizeof(bool)); + state.ppu.oamReaderSzbuf.set(szbuf, sizeof szbuf / sizeof *szbuf); } void SpriteMapper::OamReader::loadState(const SaveState &ss, const unsigned char *const oamram) { @@ -129,7 +129,7 @@ SYNCFUNC(SpriteMapper::OamReader) } void SpriteMapper::OamReader::enableDisplay(const unsigned long cc) { - std::memset(buf, 0x00, sizeof(buf)); + std::memset(buf, 0x00, sizeof buf); std::fill(szbuf, szbuf + 40, false); lu = cc + (80 << lyCounter.isDoubleSpeed()); lastChange = 80; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 03e8ecd3795aa1a79f1a3e1a4ead98f60f0141ea..980a355abd9a40816cef4cc19e6ec16b03e12ac9 100644 GIT binary patch literal 143872 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·ZN;S1k8IqSc&T z&jQ4AxTQ0&Y9e@+eTuCo>;FblqKRJ`r4`dtzBhV!6iK2Zu!>$i?U7vNlSr-ywt}n# z-1 zF=UdGwv%b-y?GsGZf2T>CIP}V<|Fw1*WO3ck!=#U z(>HH^@Avp|taH}cXMe1{_F8MNz4qGw{LhG0-GpZSo-$I;d zT-8_?UyJKUxC#)_YB8=$xF&WZHaM=;xFqCbGN-sK*3>kY_?K>*kdbM3P0W%UlP2Gi zeXHxX+jH*t!kts}*Dlu=NBsNJ)Z8z-?z%hgp09j$+Sl%NIj8^0*Z(yC8#ChRV>bme z@B8Ncc$npyJ$v>8+~1Mnl_2J=qgsBQCIaNh<^NulcJUoJoxINZgm5}xJ3ufaoKA+; z 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 j#h9-|fA+HzY!-U53jId$JYU84@e@3Swg literal 170496 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 z Date: Sat, 25 May 2019 18:58:49 +0200 Subject: [PATCH 072/138] return more informative load result --- libgambatte/include/gambatte.h | 5 +- libgambatte/include/loadres.h | 23 ++++++ libgambatte/src/cpu.h | 2 +- libgambatte/src/gambatte.cpp | 10 +-- libgambatte/src/mem/cartridge.cpp | 124 ++++++++++++++---------------- libgambatte/src/mem/cartridge.h | 3 +- libgambatte/src/memory.cpp | 6 +- libgambatte/src/memory.h | 2 +- output/dll/libgambatte.dll | Bin 143872 -> 142336 bytes 9 files changed, 95 insertions(+), 80 deletions(-) create mode 100644 libgambatte/include/loadres.h diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 94bab7befb..a3553bc139 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -20,6 +20,7 @@ #define GAMBATTE_H #include "gbint.h" +#include "loadres.h" #include #include #include @@ -48,7 +49,7 @@ class GB { public: GB(); ~GB(); - + enum LoadFlag { FORCE_DMG = 1, /**< Treat the ROM as not having CGB support regardless of what its header advertises. */ GBA_CGB = 2, /**< Use GBA intial CPU register values when in CGB mode. */ @@ -61,7 +62,7 @@ public: * @param flags ORed combination of LoadFlags. * @return 0 on success, negative value on failure. */ - int load(const char *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); + LoadRes load(const char *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); int loadGBCBios(const char* biosfiledata); int loadDMGBios(const char* biosfiledata); diff --git a/libgambatte/include/loadres.h b/libgambatte/include/loadres.h new file mode 100644 index 0000000000..6ee5e370b5 --- /dev/null +++ b/libgambatte/include/loadres.h @@ -0,0 +1,23 @@ +#ifndef GAMBATTE_LOADRES_H +#define GAMBATTE_LOADRES_H + +#include + +namespace gambatte { + +enum LoadRes { + LOADRES_BAD_FILE_OR_UNKNOWN_MBC = -0x7FFF, + LOADRES_IO_ERROR, + LOADRES_UNSUPPORTED_MBC_HUC3 = -0x1FE, + LOADRES_UNSUPPORTED_MBC_TAMA5, + LOADRES_UNSUPPORTED_MBC_POCKET_CAMERA, + LOADRES_UNSUPPORTED_MBC_MBC7 = -0x122, + LOADRES_UNSUPPORTED_MBC_MBC6 = -0x120, + LOADRES_UNSUPPORTED_MBC_MBC4 = -0x117, + LOADRES_UNSUPPORTED_MBC_MMM01 = -0x10D, + LOADRES_OK = 0 +}; + +} + +#endif diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 427847e95d..8d3d7c99a7 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -104,7 +104,7 @@ public: memory.setLinkCallback(callback); } - int load(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat) { + LoadRes load(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat) { return memory.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 818c09c48d..0c05ed4e1a 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -140,13 +140,13 @@ void GB::setLinkCallback(void(*callback)()) { p_->cpu.setLinkCallback(callback); } -int GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_t now, const unsigned flags, const unsigned div) { +LoadRes GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_t now, unsigned const flags, const unsigned div) { //if (p_->cpu.loaded()) // p_->cpu.saveSavedata(); - const int failed = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); + LoadRes const loadres = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); - if (!failed) { + if (loadres == LOADRES_OK) { SaveState state; p_->cpu.setStatePtrs(state); p_->loadflags = flags; @@ -155,7 +155,7 @@ int GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_ //p_->cpu.loadSavedata(); } - return failed; + return loadres; } int GB::loadGBCBios(const char* biosfiledata) { @@ -223,7 +223,7 @@ const std::string GB::romTitle() const { if (p_->cpu.loaded()) { char title[0x11]; std::memcpy(title, p_->cpu.romTitle(), 0x10); - title[(title[0xF] & 0x80) ? 0xF : 0x10] = '\0'; + title[title[0xF] & 0x80 ? 0xF : 0x10] = '\0'; return std::string(title); } diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index e062fb0c96..63e48171f3 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -525,7 +525,23 @@ static unsigned pow2ceil(unsigned n) { return n; } -int Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { +static bool isMbc2(unsigned char h147) { return h147 == 5 || h147 == 6; } + +static unsigned numRambanksFromH14x(unsigned char h147, unsigned char h149) { + switch (h149) { + case 0x00: return isMbc2(h147) ? 1 : 0; + case 0x01: + case 0x02: return 1; + } + + return 4; +} + +static bool presumedMulti64Mbc1(unsigned char const header[], unsigned const rombanks) { + return header[0x147] == 1 && header[0x149] == 0 && rombanks == 64; +} + +LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool const forceDmg, bool const multicartCompat) { //const std::auto_ptr rom(newFileInstance(romfile)); //if (rom->fail()) @@ -542,39 +558,39 @@ int Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, const bo if (romfilelength >= sizeof header) std::memcpy(header, romfiledata, sizeof header); else - return -1; + return LOADRES_IO_ERROR; switch (header[0x0147]) { - case 0x00: std::puts("Plain ROM loaded."); type = PLAIN; break; - case 0x01: std::puts("MBC1 ROM loaded."); type = MBC1; break; - case 0x02: std::puts("MBC1 ROM+RAM loaded."); type = MBC1; break; - case 0x03: std::puts("MBC1 ROM+RAM+BATTERY loaded."); type = MBC1; break; - case 0x05: std::puts("MBC2 ROM loaded."); type = MBC2; break; - case 0x06: std::puts("MBC2 ROM+BATTERY loaded."); type = MBC2; break; - case 0x08: std::puts("Plain ROM with additional RAM loaded."); type = PLAIN; break; - case 0x09: std::puts("Plain ROM with additional RAM and Battery loaded."); type = PLAIN; break; - case 0x0B: std::puts("MM01 ROM not supported."); return -1; - case 0x0C: std::puts("MM01 ROM not supported."); return -1; - case 0x0D: std::puts("MM01 ROM not supported."); return -1; - case 0x0F: std::puts("MBC3 ROM+TIMER+BATTERY loaded."); type = MBC3; break; - case 0x10: std::puts("MBC3 ROM+TIMER+RAM+BATTERY loaded."); type = MBC3; break; - case 0x11: std::puts("MBC3 ROM loaded."); type = MBC3; break; - case 0x12: std::puts("MBC3 ROM+RAM loaded."); type = MBC3; break; - case 0x13: std::puts("MBC3 ROM+RAM+BATTERY loaded."); type = MBC3; break; - case 0x15: std::puts("MBC4 ROM not supported."); return -1; - case 0x16: std::puts("MBC4 ROM not supported."); return -1; - case 0x17: std::puts("MBC4 ROM not supported."); return -1; - case 0x19: std::puts("MBC5 ROM loaded."); type = MBC5; break; - case 0x1A: std::puts("MBC5 ROM+RAM loaded."); type = MBC5; break; - case 0x1B: std::puts("MBC5 ROM+RAM+BATTERY loaded."); type = MBC5; break; - case 0x1C: std::puts("MBC5+RUMBLE ROM not supported."); type = MBC5; break; - case 0x1D: std::puts("MBC5+RUMBLE+RAM ROM not suported."); type = MBC5; break; - case 0x1E: std::puts("MBC5+RUMBLE+RAM+BATTERY ROM not supported."); type = MBC5; break; - case 0xFC: std::puts("Pocket Camera ROM not supported."); return -1; - case 0xFD: std::puts("Bandai TAMA5 ROM not supported."); return -1; - case 0xFE: std::puts("HuC3 ROM not supported."); return -1; - case 0xFF: std::puts("HuC1 ROM+RAM+BATTERY loaded."); type = HUC1; break; - default: std::puts("Wrong data-format, corrupt or unsupported ROM."); return -1; + case 0x00: type = PLAIN; break; + case 0x01: + case 0x02: + case 0x03: type = MBC1; break; + case 0x05: + case 0x06: type = MBC2; break; + case 0x08: + case 0x09: type = PLAIN; break; + case 0x0B: + case 0x0C: + case 0x0D: return LOADRES_UNSUPPORTED_MBC_MMM01; + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: type = MBC3; break; + case 0x15: + case 0x16: + case 0x17: return LOADRES_UNSUPPORTED_MBC_MBC4; + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: type = MBC5; break; + case 0xFC: return LOADRES_UNSUPPORTED_MBC_POCKET_CAMERA; + case 0xFD: return LOADRES_UNSUPPORTED_MBC_TAMA5; + case 0xFE: return LOADRES_UNSUPPORTED_MBC_HUC3; + case 0xFF: type = HUC1; break; + default: return LOADRES_BAD_FILE_OR_UNKNOWN_MBC; } /*switch (header[0x0148]) { @@ -591,40 +607,15 @@ int Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, const bo case 0x53: rombanks = 80; break; case 0x54: rombanks = 96; break; default: return -1; - } + }*/ - std::printf("rombanks: %u\n", rombanks);*/ - - switch (header[0x0149]) { - case 0x00: /*std::puts("No RAM");*/ rambanks = type == MBC2; break; - case 0x01: /*std::puts("2kB RAM");*/ /*rambankrom=1; break;*/ - case 0x02: /*std::puts("8kB RAM");*/ - rambanks = 1; - break; - case 0x03: /*std::puts("32kB RAM");*/ - rambanks = 4; - break; - case 0x04: /*std::puts("128kB RAM");*/ - rambanks = 16; - break; - case 0x05: /*std::puts("undocumented kB RAM");*/ - rambanks = 16; - break; - default: /*std::puts("Wrong data-format, corrupt or unsupported ROM loaded.");*/ - rambanks = 16; - break; - } - - cgb = !forceDmg; - std::printf("cgb: %d\n", cgb); - } - - std::printf("rambanks: %u\n", rambanks); - - const std::size_t filesize = romfilelength; //rom->size(); - rombanks = std::max(pow2ceil(filesize / 0x4000), 2u); - std::printf("rombanks: %u\n", static_cast(filesize / 0x4000)); + rambanks = numRambanksFromH14x(header[0x147], header[0x149]); + cgb = !forceDmg; + } + std::size_t const filesize = romfilelength; //rom->size(); + rombanks = std::max(pow2ceil(filesize / 0x4000), 2u); + mbc.reset(); memptrs.reset(rombanks, rambanks, cgb ? 8 : 2); rtc.set(false, 0); @@ -641,8 +632,7 @@ int Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, const bo switch (type) { case PLAIN: mbc.reset(new Mbc0(memptrs)); break; case MBC1: - if (!rambanks && rombanks == 64 && multicartCompat) { - std::puts("Multi-ROM \"MBC1\" presumed"); + if (multicartCompat && presumedMulti64Mbc1(memptrs.romdata(), rombanks)) { mbc.reset(new Mbc1Multi64(memptrs)); } else mbc.reset(new Mbc1(memptrs)); @@ -654,7 +644,7 @@ int Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, const bo case HUC1: mbc.reset(new HuC1(memptrs)); break; } - return 0; + return LOADRES_OK; } static bool hasBattery(const unsigned char headerByte0x147) { diff --git a/libgambatte/src/mem/cartridge.h b/libgambatte/src/mem/cartridge.h index 511c4438ae..934d44df7e 100644 --- a/libgambatte/src/mem/cartridge.h +++ b/libgambatte/src/mem/cartridge.h @@ -19,6 +19,7 @@ #ifndef CARTRIDGE_H #define CARTRIDGE_H +#include "loadres.h" #include "memptrs.h" #include "rtc.h" #include "savestate.h" @@ -98,7 +99,7 @@ public: bool getMemoryArea(int which, unsigned char **data, int *length) const; - int loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); + LoadRes loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); const char * romTitle() const { return reinterpret_cast(memptrs.romdata() + 0x134); } void setRTCCallback(std::uint32_t (*callback)()) { diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 0b92460ca5..657a647fcf 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -1056,14 +1056,14 @@ void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsig ioamhram[P - 0xFE00] = data; } -int Memory::loadROM(const char *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { - if (const int fail = cart.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat)) +LoadRes Memory::loadROM(const char *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { + if (LoadRes const fail = cart.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat)) return fail; sound.init(cart.isCgb()); display.reset(ioamhram, cart.vramdata(), cart.isCgb()); - return 0; + return LOADRES_OK; } unsigned Memory::fillSoundBuffer(const unsigned long cycleCounter) { diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 3ea2eec6ac..fcd7981730 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -296,7 +296,7 @@ public: unsigned long event(unsigned long cycleCounter); unsigned long resetCounters(unsigned long cycleCounter); - int loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); + LoadRes loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); void setInputGetter(unsigned (*getInput)()) { this->getInput = getInput; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 980a355abd9a40816cef4cc19e6ec16b03e12ac9..4fac65dc3a39e0105e69397bffed25ce7456143c 100644 GIT binary patch delta 25769 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�K?u#B1denB!Y3UM6z%&e>2LSmBB9tOU!T; z05aE&9Kzoli8~5=6Zt2d=Zw##oJ%>F8fQu{C7O~<@n*ZZz+7a0!m>C`NL!Xxm=etG!9PRy$31NLQ~rtZUFsF|IIfGhQ)rDU(w2 zQvPEaV7}9Q!2E?-Z&_n`&eCq-(iCaRG*wzcT4GvKTCy`ulV(UWr6pODts1MrYO-3b z4(m+oV%+O}$d+JFv?tke|$YQlC$4O#LjCH(hUqwb(3oSRSw(v3zG4l$M>gGVRf{x6}TeHrzVNdXII#^?mDA z>$SESwhgu#+vm1EcAI^f{So^+_DE-XTzXFWwDkGu%hK;j-<)2NUYWixy(+yLXPLDA zFT(Q)?TgyCv>#}{*8W@DQ#VAHth4DR>*nhUbsKcMbd|anbmw%*`YHNb^tbC*>(}ac z>G$eu^>67v(zoh=(f2mQ8?=T};{(PgjIS9#!_XK~rlj1Ga!<;mDW9Y``=s8Jx;6Fw z)SA>|snxb~HcrjBIQXqx?Q7bT+E29?wZEd#fx0A}S$C7}7Tq%48l6Y?knVu4PIp{) zR@b8YLC5R+>l5_`{Z{=$`lt1;>QCxF)wlZ_9&eazxXrNAu-;H^c*0O?_?zKv!)Jyz z18?kaOfcT!G!`4T7#}h|W3;8_rp`@Wk-9#0TdFs;D)r^mcT)e6dLi}a)ZV5+rctI; zQ;w;?RAGA7^t$PksoC^{Db9SoIo&+fyvV%5yve-F{Fu4M{D%4O=4K4Xbr_H-mW7so zSiiIWZ0%)>vnAWiwwr9X*p}JW*>>0-$3Pshowhl@vR$(EuwQ4l+i$kdwclkgwR`N3 z+h4H1Y5&0fPx}>nuk@kmH>8hCpPqgj4N3x*5Ev4hK36|ize2xWzfJGeSLt8Yzpej3 z|E2y%Ju?h2j54Gc))?G|3d6I8*A1r(7Y$bpQO4m$ozZT***MpDm$B5i9i4v8*x)pt zHntf5ZRAt*cwy$JtW0sGTurG=eLHoc=}FT+P1WX8=3mVHEQyvBOO9o>Wtrt<+AG#6 zwna9<-eG?*ozpOBg8NGQhT%-=6XvJQkS>F9w0ln1{@u#q%YT|VFKgO0oK~S#YE@db zHd-rcn^P{OC{mrVsmZBUsD5_p9jR-e`Ug{=Og)tPR_X_-U!;DQdNs9=X_#q@$zr~uwBEGS^tkC6)2pTvrhk~eH-(us<}7ob`401X^G@^Q=4Z{XLEvWd1@jeiFUwHN zSc}Cn!IEzgEcaM8;r;llqW%cqv_;RjS{acS2((`;$e(r!^wW~(K`k_BDlS{#-6mv}d*F;0OMrjZGa2t9se=k!h9LYaVZzZn?#Bwj|sY zcERSex7#PDFHPr4@dkj=BU+~WTsKZ{g9V>4{M!(gVoKr48Fv9?Tkz7=>yE;$oYVR6 z2K=lG)2s9Y^uzR{^%}idKVE;cJ`Wbs$8?QJYf3X^n|7Gq^7fABuXo;PS)Nvr_F~$} zwC1!+X-aFH^#<#B>kRn2d#yXHd##78jn+?KwVbWLZ4_+wM%ygg9kzRHWwwWGPuX6F z&3}UIu3ZyphdtqhXfePQyCGPD7=k#_*Qm6T|lgg>jH^tTEGA zU|epz&*(KCFdi{}XgrUp^yBo- zdHQGcHTu89S)A8j*7q^w7^WH)8CJkylo~c0?lE`Gb=mg9JMY`AFesZ80ILK{E2#Go-6 zAhgw(0kLz8xez?hIJ*F{FEB2K^vjHekiW#Z7VdDPaVvUJZrp9$W30eLyw6x=tTxsd z4;kx?hm8%!qsHULlg1|F8RJ>wIb$BX^J*s4V0^2tQYjl^riZZ`rTL$Rq3nsNA+j)XZ3CR zOPIJhgVK;-NHioFtcF~}9ITTT8`i=)_h3S+G#oP28=Bw{&l)Zm+Oc#}!#)$SfJ&Bz zInRmLS036D|8UYU9+!r#bHG$7aVZHYi7D2UjFc>_wj3#oQ-qX~l(mu#)uc3}G^LzL zIg52^OG6R90$UYC-Cp)S}dlsk>A6q*kO>rXIKWEVQCb!m!bbweFmT LPh?^fU-7>HhoMe| delta 27187 zcmd_TeRxyF_CLC3H-)rK+W-X$6etjock}+<7oaUwc?nPoC@%#H1T0XXm5N}BfkF*| z>PCZ#S`d|^RSQLnik_kz3W^GfiXPOe98W5!RXH9|wD+_2PSPam_v^jS{XO@O+lSdR z^O-ek)~s2xX7*$fD$mI)FUV``{1xt=%(1TV$^qV(Rg*srhWNPipT;6TrPqYdcrm{5 zvqUkz>9aU7p7dEK#Gh{8^eICevue_(!x1m)mG@aMF`g{eThy!mQ>wqH*F-Ttb?HJU zwZR4c9Jw4ffyEBuR+hBR4uUNlKOli6C3E{3$8D3)$p-~3o0QnnkLNDSIPUBqp4%pP zS^qeFH;!xR!gHnf4CvF{(Us@2gKQ{nVq6^x?&aeQPlA~e5HSUZ@V|79D;mAJcz)S@ z6gyFZYTPo!bwVb89qS=1#xqUW&i78D<~Rq>aVd!VHN3#z$b=SNd5g2YktzL&k1}r7 z>!Felb`Us4p# z@MIJVx5(7|eNPBp*~hF=aK=vS`5@z*rz>N)LjNnfh@oPcY=-~fu7-DG=P;%c)SdI# zpoX=by)5k`j@#5!HpsK37UC9q8n+@E(N^e~=AXS+NRKN>JNL%~(;WUwdxV;}sqCEa zWt>5A_&8H~CthjJy;7nORPlob6VUEZcsc=fHX##xB9-Ts$sC^CEA2`NJ}s2QTjGhb zIY*_~sSuuvzdpI6;sll4*(7`upUO@Pof0O86V6NcJ>kO%y+GKQkW(yj%)L~p;FTU$ zo!jOaBdgB6>=`4k&b{Ipqwr3=RGoXxpYR>WdCKM9+)EBmlK-0-$mL!_nX^LzWFkes zB#C~>d0LpK7`f=LHFU?f;SIeq^RG4Jkdcz8r8dR4${HF*xo6_FdAhge`Zw1I-zGlG z&Ne)p^ckv_6FG4y9;HN_3S-iF9MiL>6Nv zi1--06!jP?#i>#x_N1BZZ1ALR8^^{rq|WXpcU^(md*1PMZgi9aKTxCuMrl$4qf{w@L0!%d4330GDN_QYv?+m6>Xg7J zeG=%rEZn-d_lOSVNt98_lR!y(LjB^D9v%9UiX??Ke7tx=4D&V2T&7~|Heti9YE~>f zduwW++eB|T+~cl=VS5^a-g1Wjp{$0_Z@rnZa>2ell^>ER6fPgql{~ilm~0-V?Ofek zxA_017Pc?{j=6+8S9q=)1s`1lF5W6xXO44LBI)q+cF|pLePm`F%;IhT=pzm4mDe#g zT9{d?<$tmY+e()!X~ih?v{mOSmchgKvI=pl26iFPI|<%SF=ZJTePt2stNQSRtir5S zCN@&IXH_~oFC1KT<8>+v<2-9poU{&7{S@Tg$5Oq8O5Mri{+l2M$KAcLQW&(ljbCCG zx~~~HzSSg3rF%EI@$R;BOqu+`T|Xe&D$@YCECD}-fGZO4a|pO50lx`%uIW2%Gk7H{ zWAk}l`Dz=yN^%!*=>aqo5OU;DkaJ48CMj1T8xS2*{CuJfW>@NVomy*)s0O#~pqS zje9o8Uu_eHmG2wS)=Ziry>LX{C0mK4Qc9*Hncnbi`Ry|PMRmi{b#`8{A8PPi?!j~Z zSMF>$us(sYO5v3a>Fg=t(+%@kg^+z`3%jjhfa`IdEfktJ=Cg$j%DWaY{@Lpq%G{k| z*u%mdRlQkL!~IoHG4^W1n62Gq>`7t9wgYUR5a;dN>wa3oU z9OwV+#fB`eg0aKGgzb5F3fnXAJhQzA`%&<3KbN?Q1L+Qt^yniEZ|%6k_qm4#tOAuS zkB-Fiwy&k~Y5vSZ4K4SsXQ?|l&Ner7&5xc9ZJs%DPwq9(#LEu9)hm?kT-n zbKSwDk-F>IaBT`L5=ToKe%)EY*uxFC-CxGoMB$?E!5$Mh4*M)`)p@dvfW!+Q5+2%h zkZlzvJurtkg}Mjku_c1y!Kv(VVcvt+vpQkNgKL;ihxJ3-Y)M!+p?%RRdKYoRgMS+&oY*&z z%@!{1n~6qq9xp)pfyW}Fy6lXKWC;nI`0;kj^s0iK8VU*8A2o%Y7d5`%cGM&2D4h=Id@ZLPrn z?PE4W_~dVQ)NL)*ixbG>D7tTJG%1S zbf}?+kp4uRu)VHlc*%LGfVt~V8bmVKt&hG6EAxL@iPn0?2d#L4M{Ioc!GAD8 zFgL8jv!P)NyH~Isx*gBw4~+x@@j83+c!$6Ly+Zq;9_&uB&dBF`bS2{ta6d}i-`F4) zr5}QZLPQrjV<&xl58;eJnZvcdMbeD zb>P(=;l7s-vY`$6N9OX9@p=Nrd+^l_-B%Nzq{^wN?ssmGq z>79Xc?~WswJ^qb`0F8u8G`l1k&knqGVBSpguy%)1tSyxUsKizko^CGh7Mje?S^!S+ z;||Z8*hqErZc#uj&N{%fBMe|l!j42@=M}(C6Nb%NfbJ8*&PQUO5_TyP`%K{icsUYm zAwmvLB8*`hVRFI(!jNiGkQY_wZA>A-^1%lZ1e94xTvdg5+vw)aQ#rR%Hq?{6q0XHI zjGQjXOzfyS?S?^K;4FwFpXn@$1ZF#(kwB5NlmJNw!l)CyT;05lX_yOJ#sz8+N;;t?_KRt7omA%kDnCFVff7MokYM{+n3T)E zU{ZicDv*fkLqzmaGZGUB>s}TK?j*2MSpN^z zpU(N~0=kg=fTXXeIsd&jK=bEwp8Y?X^Vqxpe$q=|)U21lsA(^OQS)8`qbB}TnTuNb zjAnGl%$G=`roIG5&3%A0qHW1+WC-YwvA}`zlNJzK`kdSZ} zFjYoAp!g4cK%l*#6Od#K_W}~Ta5o?!;eJ3u$PozrPWE(>N~Gx>n)W|p(fPkO?e7^A zsPSjhz9ug~5IyZ(ArAfN+DjSma+Ek`=obZ??iepEp+(bYR6xxtX+(+e=8x)-LityYU zqZEO<3eoOwm2VGZhlI!89>Tl33va$Xhrf^_41dR( z_|wOna^OEX9;WzO{?6=-v5!hI9?;K+-^{`x9CkK7Y3lOVoYF zDQ`r$1!0*GcXk24DqUpoLb9;yYyrTOepeDM!FZNjdes2hN)BBpB-j#*^x)Z|I z_Z@s$lJN2SMZFIuQJbOmFusz;WnT&f9~31%@dc-R72!03UpV?fF@Ig6aNUPR{Gvpm z`osDB0)=qt!z%vc1flHQs<j z&IM!Kc&QjG>&6WV2cl_(GpZ-36v=nZ!*-U=f7h$hU&KO=x9;Q@HmR0?B;y*g$y+`_ zGI`Tmc)G9jOWyKtBw!%hzTuRfj9S>PQyq&9#)mlJ(fza4kJ12~Bf>8O;9B2yb>K6@ z@Wu|fGz_lofNLZeyIQWbx&z)92Cwdbn?zU=Wo`%TkHzE;iZ~v)Gp!S^Y@O37B&;6! z_77iEo8x zCps#&g~2!g2=bG67G)*si+2Rt7#fBx31InQm}^=9EC~a%oV$=~oe4ok{R(c$oAQx# z`&sfPvy>={cc#Giv>G~Oy(}>RfP*6$*~(HV#(gDr?J$^y{98_`YjXd>C+}>k&QU2Z zrr|RUCF90I)~=KkrIu3)hf8>!&Q-eGn8TTaR{Yj);1tVLsZIywMj}Tp>FcDa&LRN9 znU6=hz*FzPcnKwCDisc{Jlp9V$y-HFl%;MyS*GwXcwD7~k-A~8FYLzC|MY9nVU8*V za^t8W?IkXoab89KVXlSaj((n4xk1S#=e!nkVoLS)dZMoceRUO8MU9uZN^FR|Te)nJ zNm_RGb^zSbmZX>yV5&UYl32aH7D&tqVsw~G$3W8qEUUL;`_9E2m5$@8tM(!1U-lNq zHCNGVsH97UN2KypRRXH+RGlZQ&XZT?DZCrG?DqERywd7CwF{Ya%2asXuFf-iMB!pd zq~@wRRKrL>;!X6-QtROh8u=cW16XpW1mLjI!m_E@eGOt#~-9@M+&IcaG1q>-Mt zJyI^uS)Etn|B9wZRV|7~aZN;7!{JrWQ$>A=rL)26s%>IYjp2YeWz~6l|3RvBKj}=W z>e)`69r0Q$*VNuV;zV`TA!NN(M+khQdi!A_Jb{r*IiB5vJD#n);xFm}2(HOft~mNt zQlV!fF~gA+b<>6O$Q`Fpo}(Iy&+|s)DxiM{sb5sBr;=zzeZ(Ah_!B@0D)%q3$y=;E zxvhuOVV}zs{!dg8`2dGRC6@-XJ$joRZPY7diY=b$!KhW@SI=^dF%5r>RS>0#(}PcgqS%Ri3S+?7OSSkKwq=tI4b5Dz7Tn z$_}uLy!K@ESefo85T$H7Nn$1E9B<}_q7PH6$I2HskA*8eJ~oN--yYeN*n@Yc`WHmP z=z%)W16N?c$`(t5bwm z|II0bf#`Z6uSOV;Fc+a5f$(krcF{u$1l*7GGYH2J&LLbv;D9efs0f6+5N`{Fkrz>h zka~$z&P4bKp$8W7;65<NO|Qo#_vdawZtk}Y z%UaZowFwV>UX}PAr))&{6ycZe8b*JS&3gR6DZRPZnscwgL~zVpn2r;P8+QtuzBK(| z(XWDV=F0-h_ndMSLKXsAb&bec;mtl{(PM910sK%(EDFQ_{(v^SVUaBundtR zUbq)gYP|3gB2~Qb1tN945dYN>-X1S#5#`4VHzO*D7w$q-6fZo5s3cx^7g0sL@H3)K z@xs7=58-R#g&Ps=ju%!V+8-}Gi0Dwf@EW3~c;RbAr{aaK{vrIic)^P3LcFj5QCqxl zH==9t!a+px1mR;uDG37KI)qP85QZZfnIKF>WKIy)A<9V*_O=e=9SOo)h-N1UR}eW9 zgh5{q<0}$`Nr<*42)85Jl_2axv_C<32hrgK;peZ1X-_0zD&)$&6Xl*x%VbkT754DD zX>oF%Lm8doyp4k|V6@CQFC+-lFJ8w(@poSAliHzpya$JC{=mf^z3MS4?M6>m8mqS* z^rDW>^W{#AM9am2ozBx7j1h`14W`k!{?c$7jax1a@65%cU|bHBbXJIIxk!a^`3%J> z5mJc7YB4=QOxwk@QY6JN?f7PR=K>K*5sQn&bb**I5!0z6DMl^p+u@xziBOtYTqCAu zi|O5BI$b2iAbtnZLn5RSi<`uBv6wz3riY587}H0;8{YYX2#pkr+r)HJB z6XS#(eE$6?vIFH0qsR`j5Wx;sAc7q{jOavyaO#JQ?tvkv!3rDkem{;_%<%E*nC{JE zWXc$(tY)u!$D|4d5=OXHfHE zp4z&o%peI4({?L4=R`G(y)&8OwLm-6N>6W|+$k5&BVECJ3pmV837k+$w<_|K&U6BB zMiBtIIEO|8U7hMkpqtYi38Xl)!vMON~4x4r)kbU`B*HSVi?dFR8Vjf;cbS7VSSO<+v!~2Ti2NK>{2?_75OM=4tDmXPosOGx)XpGl7r(nC7<6?-iq)a{_I z>AXeytTnh|of0Np8OK_Md#_~S)5mwOJeyUP$Sb{TS5>=Y-pTgr8S?5sNXJWdp;dR%(*I7zB;l2l_PsaPG+&BDfMi~{o}C~JCB!--$) zGM4syEPIl%THiB_;j`MtPZ(Pn!*=>6#0gCWuaAde6cfC1VUPOI)_FAB~EoD zQ0g=j(4o3jPJ5#7v(Btdg zRW0$8bS+6IA>q0Xv>**ul(GYw_Kt%tL=OacgWAp{{YdP>^(`Uc3J)|OX@$cPLn@AFg2u30JX%kd7OliDNbF|L@bNf0*Tk53MvMFDZOCE7;g* zGj~Lrc|o+9&x|(n+0kY`hs^v(1snE%#>`6-S@${rhs>OI7O=uE64~`rX}(wAF@emy zhv#iL$$(vlYecfSaFs|%xK1R5l+w5`iB<5fo#Yj83r^Z1(I$f20r_Yw-02}d7TBc> z4Y~UOFe2pc3FxR!*Gcn6hQ=>ItqzS}0MNTa0~kQe&fNjW6#(qc{gFU+$aMxN#yAfX zg}CC=mDRklAtMM-jB_4|q{wj|lYr5|{a3E@R3u3rbQHmLJi6-Z+?A;!bcXkpj$Z#x zX;3%h3D=s0gsTlm2Z!J3O`;E1+*FsyR3D}}i6~rk5)!UE2?sO) zD$Arkg)|u2c!g_Fsur$72@!R;q#Mh{F5{VQtS09FUB4K%od0fnp%<6)FgIkN)g0T4 zu&qk?3ggG<2evBq&@>2aa-_0^U15N7`jzInN8(WT49UkU0hSMPdU! zTPn+n_IndT^CnQ)5t=svpdd8(0bpjxHd`Fopz@{%&!P*usG(dU5{~ zB}?4GwJaenQO^N22iX1ZdiKsUOCD}~xUMCRIRSl#R`&>POEewoP8GKR)Cp-sJC=7@ z@1SFym+u`vA;Pha4_CRwGF;~p60UR!5w*U#Hymq4lCQlt+k;DTzP)`I4my&2Z}ws9 zDZU|%-Awr7X>2UzThrLt=OIfy7jyW}9!C9qSL-lOKtZCuxnO=YaY_f~)Q4WgIR+0K-Tqj>wCt|%Lv z{KB{-eCC+^!q$q$g#%bDlT*=qU*Lw}#+_q*2M4l=Z2kR%*h+T5S2~C-W#fGx4`Th; zG~d-hY$%)7I8cQb4fc+2>R>jHt!z9vn6-6|TMr&(@{L!wHa~aPO4H9=Ys|SeGnWoUL?eZch#l;^{+w2@~)8RLF7d zMh==~*`fPBhY3?gV)=3$O{Ed0mgvOG0}^jfjJNR$)me{x)D1J2Jamm~YvheEg>=O% z?7|vV58kHQ8f5K0u5^lb)zS;WTD+~69(`L)C9z8DkW8wMD?%=GcVrk}bC9pMaRM&D zJ9i39af>F_+2o2uIz{jYN#}qB zQiA~G&QoDkNXt^Ik_7oEBj1Y~LbFK%KhcJ%P%0Nk7Dw=$vtU>lGgO*S;Ot0j0bwP{ zzSxOuM7X&e82`VT3+6VMM%jx5Mi~sizhW_TQ3Mtfyz|pxG9pu)porHJ#SRBJ{sp6v zxP@Dd#4X%x0^D37!}-g0BXJKmoB*%CW;s&zpy}XXOuTR<8Bb`OBzeP)M?%7_M?%8Q zCm_dPvmc2#!}&W4iWDN+g2Yz01Wc%L>11|u430~VO@*J^>FYX;Ekdqh8gpP|6fv)P^~C~pqiqm-DnB)=d#EfM~A4$JGilqvs) zunl1)!c+tULMp;FXXDLtSp!Q6)C`Iti7=puX?V7#aoPg*24gji{fgNQh<(mQY);=* zOeshBx)k4{M0ggV24OYA^wP#J7BL*hPH4P-32Tk%L@xcst-gM@vfEi|i*L>sFvY-E8JbjZZ*k;uBeNe&r z6PN#1FnndB!Y5nD^ysW*9lKrOdJtdt%RQZnUbOxVhsH>&DgCgNwo@9H*9liqdb5;P zAboK?K#me?kSLo|^`NMx1WWJzoc~Ik)98QNRmZk*l8Q zZ_d56lTy>$nsYDL`tr81d{*b%v5gtodf)MFtpD_#OnDUHErgE{{)O-@!ovHc@L!}k zq~j2}BJ@E}Aq2}uA#Fs+LdZv$f^hSFKC74QOBve-*8nCtJjX}iBgYEIGH#0hdfyLT zHiOkR-nbpR7oJo49@)Wqx|B*>Yp;al!P9m(U2|}z170>VgpDLjO<0c*HkPn#!a{GC z?s0@U!Z7y)Aoys3jJ;eD_-LW^Zh#r2r*aoz^zlOLTEa+UA{l+c&`KAoGDzbhL?1G= zP9cc&Ekg8JLu)2MWJMx`3ld!G2!hC%L;tBeUATl-)!j&+t6*nKa3^F?r!m%;e`XWJOfFguj?b2PN3^GL#!o@VMRUj%d zN)bv%`&?@!VPv1;M=5k~=VECFnW>oXLiwVM)6`}9Xa;xcxQmVqvRN@t-vq};HDtPC zK85n?46S-~VjkB&=%bp$$iIYZhAw~bV#A?#WtW+hA(p%}M~u#|Aj<#pQ$ObZ9SZd&A= zLnEhIZ$dbcs#Sa7^+X-25$tAbuzS$dhwyrKQe&H33<2jIDIl&3#pYEICDSrFLIU#Al=8 zihR5KY7)}oqP*OFH5qAfU7qj0szh2`ny0(3c0pQPoo{eo?TR$Hyo(v`tKE?HA9W#v z4`Nf0Azw!y#CAtoTB+Svdmt??)`_}z50i6qU+tNk`&zZQ{)i_95#CJtJk%ZK%%pLM z@@5h^o37Y~`7;TPa%ePUq1pW>4h@@q{BXeUJzAjdpSm;`D*jcchPjVc0v^qq2hS1s z{5jgIiM@z+YZ4gc*QA5hswmGE5c)Lc%kN#=|K!<3E#!r}HnG*baNi~&LFYD`{9m9w z$z#%SaI||9>xBEaKrK*4`8SC&;NX1U?_%9t9ZpRujPhy{80FR^Fv_nI=Hwg^*w?_U!_AkaPKL11P ziEfL2Yo9geb=(6BeNEzmZ_jRaBXj#M?Pj0%^y5~Z|MTD4+fTmUy0G}Sc2Le~9bW9a z@G$ndpZG>S!qlod?7VPCv$J20CHG>gpT67a@c#q5s#$vWqK0T$q zJgvPv)t`$hv(OEHH%StOvjX2E@lPQ5b$&G=^O4e?pHDYK08&mz2a8lGsxy+O{E zcRn6lh8oOIH@5v2lt4({PQK^bmw6z zt*6qNKKWiYENMOJc-q{VTv`7@3}e<_)&uW1g?riHN!?)EhJ<$0+At_e*>G*4zv3Mb|iYMhOtUywI;kyZ)C+={Xj4^S)J&u^xj?qCxzEMfnAHJ1ZZE zQRz30jKqHc__RVwt@l0k7HM`08-VOnjD#&z<74M10nWPbHq1w7RC(+XrWhNCBSG z{UT3+O70!2@Z5M=cfx=6hxYcvY6#uB1S2dGG{@SZ9r{V1*M&2DuFE=<=kCM~Y&SwZ z!ZCyvgv$s?C@V!MKv;mh3NigD221e@#5;jG5L*!{5bi~Igy<2|-!a5L1k$)<%Hcax z+zSW~BHTHIzn+_o#8?D1!YLv~d>(=RdLT|hxE5gW>hr!wo?_ZgZC%lYr+gng#eA+J zrgR8+smI@Gq>JbUAAjldnX)v1S0deVkA$}%t-e=Em#$~ZwjE4)AL#4vV9HvgY1ei7 zcBahUj#DP2Yk)g|(@W;*b3897 zpa%izwoQnEyOFMULm=QAkyZj%1HTJtt`dzwP%o0%*qo`6-iEYe0~)TukC!0bawk(N zfqRgy-N2HSr%_OiOgakMY8uzou}-pqySwp9t{&q!ikS;}Bgm3}rCdB<38~4_; zJ2PF5lKD$lq)(kZF}-Bv{NhE$qrqw7*m0UDD1?oeIwqVn0v|DUOhG~J)LCJys9gI8 zyhIH2uHRMY5NPevGH3ey;^L)cOINO#Uy>f#^8ZXXe?@Wn*!g8;i&ozrCe6f&YN=x@ zR+go&DK9Nu=~`VzeTI}el5#}B4HI*x{=Oek<&fmhX~Np;;2SA>2k!bqR^kxoMYV+_ z4GC)a19ghn9}G;9=uUxStoqh>$)Z&$^m(MR7nZ9u4YS-%W(z5iGtJBL@i1t8YkYtz!3zsag zrVlR0j)db@&tJY^{)$`I04OJ5^~%Wn#PX7|rK70N1EDm{!1U79i`JAcUsMd*<%^b= zmaSgHtu9;0Enl#Z+m^yB(?8^tr5|w0CKnzKgf@hFgpq;5mM?)_kjiTQh3{4(T~B48 z>4)DV3=i4eC5ETZbIO`eq&mt^(E!rfL4NpVY8$?lnhlyFgwseXQEy_?=bSPfUlpxv zkt#ZnFG5-wsMrQc>+xM$60+zc&>_96htyyVzVMk2K|^JYac%5JUV8=Qj!y8!2;_h$ zH1*__ZOAJ-!>u7W5H5hO6j*&H-{>FNaqXs5UU@nhzE=rfj5_!QGG%r*_;G|Hq-#-D ziEuc8x25`qTxK`M+j|Ad(tPVKvwp@C!TbQUgEaAIQ=u;5z|@1lA3@(+YA<~lBqxXJ#*{3&rdab8d zd3t}Bf^WzbHtA+Eq2SM8(#n>PFchBz;46?+6e^=bPdaNXMOkT78J&La0{JGCZ3>n7 z-nhaF|D}NnaT`|G*!%vRn%CX#p(TcjhYV*@;LhyZPR@%K8nP9Yua6 zEKgk4W5Yl+GsUW!!%@ZiP|U$vPDJ6_4bhABCl8dF56Z zOF!aSvPF~vH>~8s0JhzU>n3} zY*Uf14>jZa4NVUwnz9hqK~MGQu)i2(#Xj~6>*+hu&J=NkwLu)Shz&m#)+`m(qUdat z1_C{O_8OWam4ZzCBYHXVDukf6Xqb4hM-yqZ0+ga8HBn6+i&BaiJq{O#dh7s?*ICF38R)v!t#VsN2mvS-^SlqPrfYGcjs@c_W%c6*-(V& z$wMp@z>7rkxv5CDp?36SA+j8lQ47I8xenep3?mx+&SnIS9yDdZ&Vnc0!02|?!$55W zc~D#rnp0sI@i~vYA0a4iy(nHkB1;z?Z6ph-BJ1UQww?8!qeMBe4gKkPWi(a<>^$f$ zAq1NU(i5-xC?0yymjcuK4z#nLV<@>3p)%k;p#%& zzPA`(?0S-Mqstaml&O}lpjt$oj#$DfIQ$YaN1xS6`P*rCBmEFFVM}RmrNWPcLBUN- z{2}JiYW2d!OE7N1{J5zFs+r@)5Y3@TY&v1=uV`35<2Yvs!)_KESA}B*5*^MM0*#?= zfkcN_c&?rV5L;GNAj!1=qu2x}0wB0P-HfN%ogQ-uE_Bo5@cAqWP9@dz^zmLpUn)FLz@yoYcJK?Xey z8pQYHj7UsIa3WM9JdDsdsPT9w{*f5hPADn(HxkOx!%TLEVF!WXREKK{!#Es~6ahOG zhNT0;(G7Pk3>ynP>;B@&jBj-U{}T*r-n{t>SC`FO zx^lt1#pNp&aspRcUbcqzA@k;~DJx#Oa^Av~%a^ZQG4Hm;rK^{&C|lgPM8S7sDf3I0 zj#|EE)Y_#hMxp*Fk+g9|B7ZNBUtdqXU&-5J>9p#CZ;X=f$u9V2DfvN&HYoAK?H7EH zD|sEFkCgoNh~m14k);bi0=Y#}bdMChB1NrI)V-@nGNvov2b2d8`6{~dsYu_`mG3V> z#PRd4Vl#2wL~?@^&F{ufCK4%PDWV956p>_p3V##Io{_-MQ$%L0JIUNQxI2GG94;X3 z>Bm3jI%D|G5N{l5{LMJh#G6aZrRFkog?XiAyJf%SnB@oSA=_cw5nGdOrG2~oDSQ9S z%*^YvxE8FZFp>#shq^#LQ$0^}r{+P;Da~H3OefbVbV}W$hF1+A8>Sg&8Rr^HjpfEI z#%;z&jE@oe*Y$GBa1CaE*jCF+ONZ>ZxmX_|b^RE=w%rbKhQ zrb@G0Q>)ph*{`Y7?A1N5`-kp*-M@7I(Z%cg=tt@^^po`S^riZZ`g`=X`UCp&`jLjo zhFc6v3~LPQ4fh!K7#a-!FnnleHT+^oH1;=YjFqPQOnXhQm_9XKHR;Wh&9|6u$6$PH zPO{u?*=o7hQg1nKsmnT_#kuh7HJ2gT1l=pTQ@T%d-|ButqdoOQ^%nh&`djoR`gMA* z{sH|H`bPZ;{W<*w{r7s_(9NJS=nY#94;Y>@ylgmS_{4B6(C}E}B;z9ED&w8T8slDL zgYoailg3YtZARYI4K{R(sob>1^nmGUQ-)=NWsYTq#dW9UZi^3g{G#Oz%ReobEI(Tk zt-Y*6tR`!|b*6Q<^%?7{)_1He*6*!pwo$e$+Z5XZ+X~xe+dZ~NZ1uL+Z134xFdQQ= zAd~I$?f=aDCiCaagsilzky)0k8?$c7D#_ZAwLR-m48+l_ceB3Cx=h27&bUK}V$~yD z>P+=b>N)C_>Pod&{iynY`gQgD>VK=RsuMJQHP>s#Xr^fvVNfy*6AW_M9ELySh_I-|$9+xU#}RpUFxZ;ihilT8CKXEIGUndX>Qnkr4( z(C=qWO{RBE7fk=bJkgman&+8atITfmujX3INy~WaW7dCL>um4XezA46tL#R5zWru< ziTzZ@OPQ0i7G!a1#-&1Pr@CEzzvfHbYsRydy|$-pTsGtAG$2d&UM7btL;I1wqP?c& zbitXPq7!s2=F4W8CDk(0Vu$K)wk)-*gXZsdSst?-vi!sHzU6bvHN7u71);A?zHW&J!*T#_6o#pv0buVwI$g5 z+DF^1_B?x`-D$twz8Ul5N&AcTH|?L;zq8{~S4LXKsEmw^sToT$AYl>XvJtsnS9j5@ z)tu10sXec?8ZH=rF742>)nyLJ#$ayq0HvYk72o7R=2Dnu-hB5W@RnSx;?8p>w&Dl zWxWc!{VMC{EUuPubU`agJy5Mxk5$itE2&U>)IRl->ci?&>K657wOo^`QEAkgY|RwS z0?iuDMvb6((xrJ>^N!|A&3`os+WuOdcD(i$?NY5<>(f51{k!%(m`V@bXx%v7Ox<#w zOZSlODcy@u=ZCtl;DBWMZu)_GjXqmH8Qx%tevRIx_vn54$MnzXUxqe5)Bm9FY)CU` z(Eq81W#asJ1YY4K%#Y6vKN%8?=|-2vm|?sD>&&gj4aObDT6p1q7(X_CXOx+GnMRw& znP!@no9;6COi!4Onm#aHG;!v&)>_Q_X6w7wkE~a%?bcXZf~||Kr>&oDux+GGXS3SI z*z#=-+e}-Lt;AMtTW71Z-EG@x+h;puJ7#;!X0v~0Z^uHjIAdGJL#~WxGhWJgBjcYL z-)D5n?2|b#b7-bDGbghy^To`TOn)ZJ+MIO=?%|89f0I$v<9~}m#HnM|U9oT$sduO! zfQnyKpHUCc=rrGGhGP+0tKF=vh5oX1`8tPgo32*(BsA8dYlZ1?`YzB)S7^mx7-N`g za6N6PH@pXDanW$akYvm^PBAVpu7Ja+G*%h!#d`aS@ipW7##XouW=b*jhNB!}8VToN zhWp4d-H6qy&@|h$z~nToFqOfTRKd3&G`(PgkWGx+gs4t^2;+Z2?N?t?uh&#+wraL% zc4~HsYf9Y`O}*x@=7{DPrrBxDSU8zugm2Nc=`QQ8=oI=ieY#$yH|y>C z33`XV0IOE1eye_$em9oOeb^2hap{|2tS9uR^k?;#^lkdf*dHh`K>~QT4Ly@7_ z;53vN$_(2KHHMwoH`HO&P8iM^&KoWpWJbABVN@DZjcG=e(QcezbQlYavyElOO;8A_ z;;``uT*f)$c`SC9VcBw1swvH+$N1%A%j7CHm6%Gg>8LU7#J;J{bi{PZblP;*bjj3a zlA9G~rCDVjYR)$2VBa)b+~QT5Ys@>%yUe@I_2xt7W9Ad)bLR8r7PH^XS!5QuCC!p< zF~7C#nM**L4*nr>BFv#mK;S0`8t ztR>d<)@{}r>rSk(hpfk}C#GnH8D4Fl1*l&%xt1W)J68 G?EeBj{w87o From 567756d6cc841408bf3363fc064dcbfc7703058d Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 19:18:15 +0200 Subject: [PATCH 073/138] formatting/readability --- libgambatte/Makefile | 2 +- libgambatte/include/gambatte.h | 16 +- libgambatte/src/common/array.h | 4 +- libgambatte/src/cpu.cpp | 278 +++++------ libgambatte/src/cpu.h | 30 +- libgambatte/src/file/stdfile.h | 2 +- libgambatte/src/gambatte.cpp | 22 +- libgambatte/src/initstate.cpp | 102 ++-- libgambatte/src/insertion_sort.h | 12 +- libgambatte/src/interrupter.cpp | 2 +- libgambatte/src/interruptrequester.cpp | 18 +- libgambatte/src/interruptrequester.h | 24 +- libgambatte/src/mem/cartridge.cpp | 20 +- libgambatte/src/mem/cartridge.h | 12 +- libgambatte/src/mem/memptrs.cpp | 6 +- libgambatte/src/mem/memptrs.h | 8 +- libgambatte/src/mem/rtc.cpp | 14 +- libgambatte/src/mem/rtc.h | 22 +- libgambatte/src/memory.cpp | 48 +- libgambatte/src/memory.h | 30 +- libgambatte/src/minkeeper.h | 40 +- libgambatte/src/newstate.h | 2 +- libgambatte/src/savestate.h | 28 +- libgambatte/src/sound.cpp | 20 +- libgambatte/src/sound.h | 12 +- libgambatte/src/sound/channel1.cpp | 50 +- libgambatte/src/sound/channel1.h | 24 +- libgambatte/src/sound/channel2.cpp | 32 +- libgambatte/src/sound/channel2.h | 18 +- libgambatte/src/sound/channel3.cpp | 42 +- libgambatte/src/sound/channel3.h | 28 +- libgambatte/src/sound/channel4.cpp | 68 +-- libgambatte/src/sound/channel4.h | 26 +- libgambatte/src/sound/duty_unit.cpp | 14 +- libgambatte/src/sound/duty_unit.h | 2 +- libgambatte/src/sound/envelope_unit.cpp | 28 +- libgambatte/src/sound/envelope_unit.h | 4 +- libgambatte/src/sound/length_counter.cpp | 12 +- libgambatte/src/sound/master_disabler.h | 2 +- libgambatte/src/sound/sound_unit.h | 2 +- libgambatte/src/tima.cpp | 28 +- libgambatte/src/tima.h | 14 +- libgambatte/src/video.cpp | 146 +++--- libgambatte/src/video.h | 44 +- libgambatte/src/video/ly_counter.cpp | 12 +- libgambatte/src/video/ly_counter.h | 8 +- libgambatte/src/video/lyc_irq.cpp | 12 +- libgambatte/src/video/lyc_irq.h | 8 +- libgambatte/src/video/next_m0_time.h | 2 +- libgambatte/src/video/ppu.cpp | 562 +++++++++++------------ libgambatte/src/video/ppu.h | 8 +- libgambatte/src/video/sprite_mapper.cpp | 6 +- libgambatte/src/video/sprite_mapper.h | 2 +- output/dll/libgambatte.dll | Bin 142336 -> 142336 bytes 54 files changed, 989 insertions(+), 989 deletions(-) diff --git a/libgambatte/Makefile b/libgambatte/Makefile index 33e7712716..5ae56f6a29 100644 --- a/libgambatte/Makefile +++ b/libgambatte/Makefile @@ -61,6 +61,6 @@ $(TARGET) : $(OBJS) clean: $(RM) $(OBJS) $(RM) $(TARGET) - + install: $(CP) $(TARGET) $(DEST_$(ARCH)) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index a3553bc139..c90620eb01 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -55,7 +55,7 @@ public: GBA_CGB = 2, /**< Use GBA intial CPU register values when in CGB mode. */ MULTICART_COMPAT = 4, /**< Use heuristics to detect and support some multicart MBCs disguised as MBC1. */ }; - + /** Load ROM image. * * @param romfile Path to rom image file. Typically a .gbc, .gb, or .zip-file (if zip-support is compiled in). @@ -63,7 +63,7 @@ public: * @return 0 on success, negative value on failure. */ LoadRes load(const char *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); - + int loadGBCBios(const char* biosfiledata); int loadDMGBios(const char* biosfiledata); @@ -96,17 +96,17 @@ public: * Equivalent to reloading a ROM image, or turning a Game Boy Color off and on again. */ void reset(std::uint32_t now, unsigned div); - + /** @param palNum 0 <= palNum < 3. One of BG_PALETTE, SP1_PALETTE and SP2_PALETTE. * @param colorNum 0 <= colorNum < 4 */ void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned rgb32); - + void setCgbPalette(unsigned *lut); /** Sets the callback used for getting input state. */ void setInputGetter(unsigned (*getInput)()); - + void setReadCallback(MemoryCallback); void setWriteCallback(MemoryCallback); void setExecCallback(MemoryCallback); @@ -118,7 +118,7 @@ public: /** Returns true if the currently loaded ROM image is treated as having CGB support. */ bool isCgb() const; - + /** Returns true if a ROM image is loaded. */ bool isLoaded() const; @@ -126,10 +126,10 @@ public: void loadSavedata(const char *data); int saveSavedataLength(); void saveSavedata(char *dest); - + // 0 = vram, 1 = rom, 2 = wram, 3 = cartram, 4 = oam, 5 = hram bool getMemoryArea(int which, unsigned char **data, int *length); - + /** ROM header title of currently loaded ROM image. */ const std::string romTitle() const; diff --git a/libgambatte/src/common/array.h b/libgambatte/src/common/array.h index c650390d4e..cc45e8584a 100644 --- a/libgambatte/src/common/array.h +++ b/libgambatte/src/common/array.h @@ -26,7 +26,7 @@ template class Array : Uncopyable { T *a; std::size_t sz; - + public: explicit Array(const std::size_t size = 0) : a(size ? new T[size] : 0), sz(size) {} ~Array() { delete []a; } @@ -39,7 +39,7 @@ public: template class ScopedArray : Uncopyable { T *a_; - + public: explicit ScopedArray(T *a = 0) : a_(a) {} ~ScopedArray() { delete []a_; } diff --git a/libgambatte/src/cpu.cpp b/libgambatte/src/cpu.cpp index 8ea6714cb3..f884e897a6 100644 --- a/libgambatte/src/cpu.cpp +++ b/libgambatte/src/cpu.cpp @@ -47,12 +47,12 @@ CPU::CPU() long CPU::runFor(const unsigned long cycles) { memory.setBasetime(cycleCounter_); process(cycles/* << memory.isDoubleSpeed()*/); - + const long csb = memory.cyclesSinceBlit(cycleCounter_); - + if (cycleCounter_ & 0x80000000) cycleCounter_ = memory.resetCounters(cycleCounter_); - + return csb; } @@ -63,7 +63,7 @@ long CPU::runFor(const unsigned long cycles) { static void calcHF(const unsigned HF1, unsigned& HF2) { unsigned arg1 = HF1 & 0xF; unsigned arg2 = (HF2 & 0xF) + (HF2 >> 8 & 1); - + if (HF2 & 0x800) { arg1 = arg2; arg2 = 1; @@ -73,7 +73,7 @@ static void calcHF(const unsigned HF1, unsigned& HF2) { arg1 -= arg2; else arg1 = (arg1 + arg2) << 5; - + HF2 |= arg1 & 0x200; } @@ -93,7 +93,7 @@ void CPU::setStatePtrs(SaveState &state) { void CPU::loadState(const SaveState &state) { memory.loadState(state/*, cycleCounter_*/); - + cycleCounter_ = state.cpu.cycleCounter; PC = state.cpu.PC & 0xFFFF; SP = state.cpu.SP & 0xFFFF; @@ -497,10 +497,10 @@ void CPU::process(const unsigned long cycles) { //unsigned char A = A_; unsigned long cycleCounter = cycleCounter_; - + while (memory.isActive()) { //unsigned short PC = PC_; - + if (memory.halted()) { if (cycleCounter < memory.nextEventTime()) { const unsigned long cycles = memory.nextEventTime() - cycleCounter; @@ -508,7 +508,7 @@ void CPU::process(const unsigned long cycles) { } } else while (cycleCounter < memory.nextEventTime()) { unsigned char opcode = 0x00; - + int FullPC = PC; if (PC >= 0x4000 && PC <= 0x7FFF) @@ -552,7 +552,7 @@ void CPU::process(const unsigned long cycles) { skip = false; } } - + switch (opcode) { //nop (4 cycles): //Do nothing for 4 cycles: @@ -591,12 +591,12 @@ void CPU::process(const unsigned long cycles) { case 0x08: { unsigned l, h; - + PC_READ(l); PC_READ(h); - + const unsigned addr = h << 8 | l; - + WRITE(addr, SP & 0xFF); WRITE((addr + 1) & 0xFFFF, SP >> 8); } @@ -669,7 +669,7 @@ void CPU::process(const unsigned long cycles) { CF = A << 1; A = (CF | oldcf) & 0xFF; } - + HF2 = 0; ZF = 1; break; @@ -704,7 +704,7 @@ void CPU::process(const unsigned long cycles) { CF = A << 8; A = (A | oldcf) >> 1; } - + HF2 = 0; ZF = 1; break; @@ -728,9 +728,9 @@ void CPU::process(const unsigned long cycles) { case 0x22: { unsigned addr = HL(); - + WRITE(addr, A); - + addr = (addr + 1) & 0xFFFF; L = addr; H = addr >> 8; @@ -756,38 +756,38 @@ void CPU::process(const unsigned long cycles) { case 0x27: /*{ unsigned correction = ((A > 0x99) || (CF & 0x100)) ? 0x60 : 0x00; - + calcHF(HF1, HF2); - + if ((A & 0x0F) > 0x09 || (HF2 & 0x200)) correction |= 0x06; - + HF1 = A; HF2 = (HF2 & 0x400) | correction; CF = (correction & 0x40) << 2; A = (HF2 & 0x400) ? A - correction : (A + correction); ZF = A; }*/ - + calcHF(HF1, HF2); - + { unsigned correction = (CF & 0x100) ? 0x60 : 0x00; - + if (HF2 & 0x200) correction |= 0x06; - + if (!(HF2 &= 0x400)) { if ((A & 0x0F) > 0x09) correction |= 0x06; - + if (A > 0x99) correction |= 0x60; - + A += correction; } else A -= correction; - + CF = correction << 2 & 0x100; ZF = A; A &= 0xFF; @@ -815,9 +815,9 @@ void CPU::process(const unsigned long cycles) { case 0x2A: { unsigned addr = HL(); - + READ(A, addr); - + addr = (addr + 1) & 0xFFFF; L = addr; H = addr >> 8; @@ -859,10 +859,10 @@ void CPU::process(const unsigned long cycles) { case 0x31: { unsigned l, h; - + PC_READ(l); PC_READ(h); - + SP = h << 8 | l; } break; @@ -872,9 +872,9 @@ void CPU::process(const unsigned long cycles) { case 0x32: { unsigned addr = HL(); - + WRITE(addr, A); - + addr = (addr - 1) & 0xFFFF; L = addr; H = addr >> 8; @@ -888,10 +888,10 @@ void CPU::process(const unsigned long cycles) { //inc (hl) (12 cycles): //Increment value at address in hl, check flags except CF: - case 0x34: + case 0x34: { const unsigned addr = HL(); - + READ(HF2, addr); ZF = HF2 + 1; WRITE(addr, ZF & 0xFF); @@ -904,7 +904,7 @@ void CPU::process(const unsigned long cycles) { case 0x35: { const unsigned addr = HL(); - + READ(HF2, addr); ZF = HF2 - 1; WRITE(addr, ZF & 0xFF); @@ -917,7 +917,7 @@ void CPU::process(const unsigned long cycles) { case 0x36: { unsigned tmp; - + PC_READ(tmp); WRITE(HL(), tmp); } @@ -958,10 +958,10 @@ void CPU::process(const unsigned long cycles) { case 0x3A: { unsigned addr = HL(); - + A = memory.read(addr, cycleCounter); cycleCounter += 4; - + addr = (addr - 1) & 0xFFFF; L = addr; H = addr >> 8; @@ -1221,7 +1221,7 @@ void CPU::process(const unsigned long cycles) { unsigned data; READ(data, HL()); - + add_a_u8(data); } break; @@ -1249,9 +1249,9 @@ void CPU::process(const unsigned long cycles) { case 0x8E: { unsigned data; - + READ(data, HL()); - + adc_a_u8(data); } break; @@ -1279,9 +1279,9 @@ void CPU::process(const unsigned long cycles) { case 0x96: { unsigned data; - + READ(data, HL()); - + sub_a_u8(data); } break; @@ -1311,9 +1311,9 @@ void CPU::process(const unsigned long cycles) { case 0x9E: { unsigned data; - + READ(data, HL()); - + sbc_a_u8(data); } break; @@ -1341,9 +1341,9 @@ void CPU::process(const unsigned long cycles) { case 0xA6: { unsigned data; - + READ(data, HL()); - + and_a_u8(data); } break; @@ -1374,9 +1374,9 @@ void CPU::process(const unsigned long cycles) { case 0xAE: { unsigned data; - + READ(data, HL()); - + xor_a_u8(data); } break; @@ -1405,9 +1405,9 @@ void CPU::process(const unsigned long cycles) { case 0xB6: { unsigned data; - + READ(data, HL()); - + or_a_u8(data); } break; @@ -1437,9 +1437,9 @@ void CPU::process(const unsigned long cycles) { case 0xBE: { unsigned data; - + READ(data, HL()); - + cp_a_u8(data); } break; @@ -1453,7 +1453,7 @@ void CPU::process(const unsigned long cycles) { //Pop two bytes from the stack and jump to that address, if ZF is unset: case 0xC0: cycleCounter += 4; - + if (ZF & 0xFF) { ret(); } @@ -1495,9 +1495,9 @@ void CPU::process(const unsigned long cycles) { case 0xC6: { unsigned data; - + PC_READ(data); - + add_a_u8(data); } break; @@ -1509,11 +1509,11 @@ void CPU::process(const unsigned long cycles) { //Pop two bytes from the stack and jump to that address, if ZF is set: case 0xC8: cycleCounter += 4; - + if (!(ZF & 0xFF)) { ret(); } - + break; //ret (16 cycles): @@ -1537,7 +1537,7 @@ void CPU::process(const unsigned long cycles) { //CB OPCODES (Shifts, rotates and bits): case 0xCB: PC_READ(opcode); - + switch (opcode) { case 0x00: rlc_r(B); @@ -1562,14 +1562,14 @@ void CPU::process(const unsigned long cycles) { case 0x06: { const unsigned addr = HL(); - + READ(CF, addr); CF <<= 1; - + ZF = CF | (CF >> 8); WRITE(addr, ZF & 0xFF); - + HF2 = 0; } break; @@ -1599,13 +1599,13 @@ void CPU::process(const unsigned long cycles) { case 0x0E: { const unsigned addr = HL(); - + READ(ZF, addr); - + CF = ZF << 8; - + WRITE(addr, (ZF | CF) >> 1 & 0xFF); - + HF2 = 0; } break; @@ -1636,14 +1636,14 @@ void CPU::process(const unsigned long cycles) { { const unsigned addr = HL(); const unsigned oldcf = CF >> 8 & 1; - + READ(CF, addr); CF <<= 1; - + ZF = CF | oldcf; - + WRITE(addr, ZF & 0xFF); - + HF2 = 0; } break; @@ -1673,15 +1673,15 @@ void CPU::process(const unsigned long cycles) { case 0x1E: { const unsigned addr = HL(); - + READ(ZF, addr); - + const unsigned oldcf = CF & 0x100; CF = ZF << 8; ZF = (ZF | oldcf) >> 1; - + WRITE(addr, ZF); - + HF2 = 0; } break; @@ -1711,14 +1711,14 @@ void CPU::process(const unsigned long cycles) { case 0x26: { const unsigned addr = HL(); - + READ(CF, addr); CF <<= 1; - + ZF = CF; - + WRITE(addr, ZF & 0xFF); - + HF2 = 0; } break; @@ -1748,13 +1748,13 @@ void CPU::process(const unsigned long cycles) { case 0x2E: { const unsigned addr = HL(); - + READ(CF, addr); - + ZF = CF >> 1; - + WRITE(addr, ZF | (CF & 0x80)); - + CF <<= 8; HF2 = 0; } @@ -1785,11 +1785,11 @@ void CPU::process(const unsigned long cycles) { case 0x36: { const unsigned addr = HL(); - + READ(ZF, addr); - + WRITE(addr, (ZF << 4 | ZF >> 4) & 0xFF); - + CF = HF2 = 0; } break; @@ -1819,13 +1819,13 @@ void CPU::process(const unsigned long cycles) { case 0x3E: { const unsigned addr = HL(); - + READ(CF, addr); - + ZF = CF >> 1; - + WRITE(addr, ZF); - + CF <<= 8; HF2 = 0; } @@ -1854,9 +1854,9 @@ void CPU::process(const unsigned long cycles) { case 0x46: { unsigned data; - + READ(data, HL()); - + bit0_u8(data); } break; @@ -1884,9 +1884,9 @@ void CPU::process(const unsigned long cycles) { case 0x4E: { unsigned data; - + READ(data, HL()); - + bit1_u8(data); } break; @@ -1914,9 +1914,9 @@ void CPU::process(const unsigned long cycles) { case 0x56: { unsigned data; - + READ(data, HL()); - + bit2_u8(data); } break; @@ -1944,9 +1944,9 @@ void CPU::process(const unsigned long cycles) { case 0x5E: { unsigned data; - + READ(data, HL()); - + bit3_u8(data); } break; @@ -1974,9 +1974,9 @@ void CPU::process(const unsigned long cycles) { case 0x66: { unsigned data; - + READ(data, HL()); - + bit4_u8(data); } break; @@ -2004,9 +2004,9 @@ void CPU::process(const unsigned long cycles) { case 0x6E: { unsigned data; - + READ(data, HL()); - + bit5_u8(data); } break; @@ -2034,9 +2034,9 @@ void CPU::process(const unsigned long cycles) { case 0x76: { unsigned data; - + READ(data, HL()); - + bit6_u8(data); } break; @@ -2064,9 +2064,9 @@ void CPU::process(const unsigned long cycles) { case 0x7E: { unsigned data; - + READ(data, HL()); - + bit7_u8(data); } break; @@ -2479,9 +2479,9 @@ void CPU::process(const unsigned long cycles) { case 0xCE: { unsigned data; - + PC_READ(data); - + adc_a_u8(data); } break; @@ -2493,11 +2493,11 @@ void CPU::process(const unsigned long cycles) { //Pop two bytes from the stack and jump to that address, if CF is unset: case 0xD0: cycleCounter += 4; - + if (!(CF & 0x100)) { ret(); } - + break; case 0xD1: @@ -2537,9 +2537,9 @@ void CPU::process(const unsigned long cycles) { case 0xD6: { unsigned data; - + PC_READ(data); - + sub_a_u8(data); } break; @@ -2551,11 +2551,11 @@ void CPU::process(const unsigned long cycles) { //Pop two bytes from the stack and jump to that address, if CF is set: case 0xD8: cycleCounter += 4; - + if (CF & 0x100) { ret(); } - + break; //reti (16 cycles): @@ -2563,11 +2563,11 @@ void CPU::process(const unsigned long cycles) { case 0xD9: { unsigned l, h; - + pop_rr(h, l); - + memory.ei(cycleCounter); - + PC_MOD(h << 8 | l); } break; @@ -2607,9 +2607,9 @@ void CPU::process(const unsigned long cycles) { case 0xDE: { unsigned data; - + PC_READ(data); - + sbc_a_u8(data); } break; @@ -2622,9 +2622,9 @@ void CPU::process(const unsigned long cycles) { case 0xE0: { unsigned tmp; - + PC_READ(tmp); - + FF_WRITE(0xFF00 | tmp, A); } break; @@ -2652,9 +2652,9 @@ void CPU::process(const unsigned long cycles) { case 0xE6: { unsigned data; - + PC_READ(data); - + and_a_u8(data); } break; @@ -2690,10 +2690,10 @@ void CPU::process(const unsigned long cycles) { case 0xEA: { unsigned l, h; - + PC_READ(l); PC_READ(h); - + WRITE(h << 8 | l, A); } break; @@ -2713,9 +2713,9 @@ void CPU::process(const unsigned long cycles) { case 0xEE: { unsigned data; - + PC_READ(data); - + xor_a_u8(data); } break; @@ -2728,9 +2728,9 @@ void CPU::process(const unsigned long cycles) { case 0xF0: { unsigned tmp; - + PC_READ(tmp); - + FF_READ(A, 0xFF00 | tmp); } break; @@ -2738,9 +2738,9 @@ void CPU::process(const unsigned long cycles) { case 0xF1: /*pop_rr(A, F); Cycles(12); break;*/ { unsigned F; - + pop_rr(A, F); - + FROM_F(F); } break; @@ -2762,10 +2762,10 @@ void CPU::process(const unsigned long cycles) { break; case 0xF5: /*push_rr(A, F); Cycles(16); break;*/ calcHF(HF1, HF2); - + { unsigned F = F(); - + push_rr(A, F); } break; @@ -2775,7 +2775,7 @@ void CPU::process(const unsigned long cycles) { unsigned data; PC_READ(data); - + or_a_u8(data); } break; @@ -2816,10 +2816,10 @@ void CPU::process(const unsigned long cycles) { case 0xFA: { unsigned l, h; - + PC_READ(l); PC_READ(h); - + READ(A, h << 8 | l); } break; @@ -2843,7 +2843,7 @@ void CPU::process(const unsigned long cycles) { unsigned data; PC_READ(data); - + cp_a_u8(data); } break; @@ -2853,11 +2853,11 @@ void CPU::process(const unsigned long cycles) { // default: break; } } - + //PC_ = PC; cycleCounter = memory.event(cycleCounter); } - + //A_ = A; cycleCounter_ = cycleCounter; } diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 8d3d7c99a7..d7ffcd7b17 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -26,48 +26,48 @@ namespace gambatte { class CPU { Memory memory; - + unsigned long cycleCounter_; unsigned short PC; unsigned short SP; - + unsigned HF1, HF2, ZF, CF; unsigned char A, B, C, D, E, /*F,*/ H, L; bool skip; - + int *interruptAddresses; int numInterruptAddresses; int hitInterruptAddress; void process(unsigned long cycles); - + void (*tracecallback)(void *); public: - + CPU(); // void halt(); // unsigned interrupt(unsigned address, unsigned cycleCounter); - + long runFor(unsigned long cycles); void setStatePtrs(SaveState &state); void loadState(const SaveState &state); void setLayers(unsigned mask) { memory.setLayers(mask); } - + void loadSavedata(const char *data) { memory.loadSavedata(data); } int saveSavedataLength() {return memory.saveSavedataLength(); } void saveSavedata(char *dest) { memory.saveSavedata(dest); } - + bool getMemoryArea(int which, unsigned char **data, int *length) { return memory.getMemoryArea(which, data, length); } void setVideoBuffer(uint_least32_t *const videoBuf, const int pitch) { memory.setVideoBuffer(videoBuf, pitch); } - + void setInputGetter(unsigned (*getInput)()) { memory.setInputGetter(getInput); } @@ -103,19 +103,19 @@ public: void setLinkCallback(void(*callback)()) { memory.setLinkCallback(callback); } - + LoadRes load(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat) { return memory.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat); } - + bool loaded() const { return memory.loaded(); } const char * romTitle() const { return memory.romTitle(); } - + void setSoundBuffer(uint_least32_t *const buf) { memory.setSoundBuffer(buf); } unsigned fillSoundBuffer() { return memory.fillSoundBuffer(cycleCounter_); } - + bool isCgb() const { return memory.isCgb(); } - + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned rgb32) { memory.setDmgPaletteColor(palNum, colorNum, rgb32); } @@ -123,7 +123,7 @@ public: void setCgbPalette(unsigned *lut) { memory.setCgbPalette(lut); } - + unsigned char* cgbBiosBuffer() { return memory.cgbBiosBuffer(); } unsigned char* dmgBiosBuffer() { return memory.dmgBiosBuffer(); } bool gbIsCgb() { return memory.gbIsCgb(); } diff --git a/libgambatte/src/file/stdfile.h b/libgambatte/src/file/stdfile.h index 625e765c57..72947b11a7 100644 --- a/libgambatte/src/file/stdfile.h +++ b/libgambatte/src/file/stdfile.h @@ -41,7 +41,7 @@ public: stream.seekg(0, std::ios::beg); } } - + virtual void rewind() { stream.seekg(0, std::ios::beg); } virtual std::size_t size() const { return fsize; }; virtual void read(char *buffer, std::size_t amount) { stream.read(buffer, amount); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 0c05ed4e1a..e8580829c5 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -30,7 +30,7 @@ struct GB::Priv { unsigned layersMask; uint_least32_t vbuff[160*144]; - + Priv() : loadflags(0), layersMask(LAYER_MASK_BG | LAYER_MASK_OBJ) { } @@ -39,13 +39,13 @@ struct GB::Priv { { } }; - + GB::GB() : p_(new Priv) {} GB::~GB() { //if (p_->cpu.loaded()) // p_->cpu.saveSavedata(); - + delete p_; } @@ -54,12 +54,12 @@ long GB::runFor(gambatte::uint_least32_t *const soundBuf, unsigned &samples) { samples = 0; return -1; } - + p_->cpu.setVideoBuffer(p_->vbuff, 160); p_->cpu.setSoundBuffer(soundBuf); const long cyclesSinceBlit = p_->cpu.runFor(samples * 2); samples = p_->cpu.fillSoundBuffer(); - + return cyclesSinceBlit < 0 ? cyclesSinceBlit : static_cast(samples) - (cyclesSinceBlit >> 1); } @@ -83,7 +83,7 @@ void GB::blitTo(gambatte::uint_least32_t *videoBuf, int pitch) void GB::reset(const std::uint32_t now, const unsigned div) { if (p_->cpu.loaded()) { - + int length = p_->cpu.saveSavedataLength(); char *s; if (length > 0) @@ -91,7 +91,7 @@ void GB::reset(const std::uint32_t now, const unsigned div) { s = (char *) std::malloc(length); p_->cpu.saveSavedata(s); } - + SaveState state; p_->cpu.setStatePtrs(state); setInitState(state, !(p_->loadflags & FORCE_DMG), p_->loadflags & GBA_CGB, now, div); @@ -143,9 +143,9 @@ void GB::setLinkCallback(void(*callback)()) { LoadRes GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_t now, unsigned const flags, const unsigned div) { //if (p_->cpu.loaded()) // p_->cpu.saveSavedata(); - + LoadRes const loadres = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); - + if (loadres == LOADRES_OK) { SaveState state; p_->cpu.setStatePtrs(state); @@ -154,7 +154,7 @@ LoadRes GB::load(const char *romfiledata, unsigned romfilelength, const std::uin p_->cpu.loadState(state); //p_->cpu.loadSavedata(); } - + return loadres; } @@ -226,7 +226,7 @@ const std::string GB::romTitle() const { title[title[0xF] & 0x80 ? 0xF : 0x10] = '\0'; return std::string(title); } - + return std::string(); } diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index d539354112..7134577e2d 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -677,29 +677,29 @@ static void setInitialCgbWram(unsigned char *const wram) { { 0x7FCD, 0xBF }, { 0x7FCE, 0x7F }, { 0x7FCF, 0xFB }, { 0x7FDB, 0xF7 }, { 0x7FDF, 0x7F }, { 0x7FE8, 0xDF }, { 0x7FEC, 0xFB }, { 0x7FF2, 0xF7 } }; - + for (unsigned addr = 0x0000; addr < 0x0800; addr += 0x10) { std::memset(wram + addr + 0x00, 0xFF, 0x08); std::memset(wram + addr + 0x08, 0x00, 0x08); } - + for (unsigned addr = 0x0800; addr < 0x1000; addr += 0x10) { std::memset(wram + addr + 0x00, 0x00, 0x08); std::memset(wram + addr + 0x08, 0xFF, 0x08); } - + for (unsigned addr = 0x0E00; addr < 0x1000; addr += 0x10) { wram[addr + 0x02] = 0xFF; wram[addr + 0x0A] = 0x00; } - + for (unsigned addr = 0x1000; addr < 0x8000; addr += 0x1000) { if (0x2000 != addr) std::memcpy(wram + addr, wram, 0x1000); } - + std::memset(wram + 0x2000, 0, 0x1000); - + for (std::size_t i = 0; i < sizeof cgbWramDumpDiff / sizeof cgbWramDumpDiff[0]; ++i) wram[cgbWramDumpDiff[i].addr] = cgbWramDumpDiff[i].val; } @@ -959,19 +959,19 @@ static void setInitialDmgWram(unsigned char *const wram) { { 0x1FA2, 0x40 }, { 0x1FB6, 0x80 }, { 0x1FC6, 0x10 }, { 0x1FCC, 0x20 }, { 0x1FD2, 0x20 }, { 0x1FD8, 0x04 }, { 0x1FDC, 0x10 }, { 0x1FDE, 0x04 } }; - + for (unsigned addr = 0x0000; addr < 0x0800; addr += 0x200) { std::memset(wram + addr , 0x00, 0x100); std::memset(wram + addr + 0x100, 0xFF, 0x100); } - + for (unsigned addr = 0x0800; addr < 0x1000; addr += 0x200) { std::memset(wram + addr , 0xFF, 0x100); std::memset(wram + addr + 0x100, 0x00, 0x100); } - + std::memcpy(wram + 0x1000, wram, 0x1000); - + for (std::size_t i = 0; i < sizeof dmgWramDumpDiff / sizeof dmgWramDumpDiff[0]; ++i) wram[dmgWramDumpDiff[i].addr] = dmgWramDumpDiff[i].val; } @@ -1004,21 +1004,21 @@ static void setInitialVram(unsigned char *const vram, const bool cgb) { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xFC, 0xFC, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0x42, 0x3C }; - + std::memset(vram, 0, 0x4000); - + for (std::size_t i = 0; i < sizeof even_numbered_8010_to_81a0_dump; ++i) { vram[0x0010 + i * 2] = even_numbered_8010_to_81a0_dump[i]; } - + if (!cgb) { unsigned i = 1; - + for (unsigned addr = 0x1904; addr < 0x1910; ++addr) vram[addr] = i++; - + vram[0x1910] = 0x19; - + for (unsigned addr = 0x1924; addr < 0x1930; ++addr) vram[addr] = i++; } @@ -1039,7 +1039,7 @@ static void setInitialCgbIoamhram(unsigned char *const ioamhram) { 0x24, 0x13, 0xFD, 0x3A, 0x10, 0x10, 0xAD, 0x45, 0x24, 0x13, 0xFD, 0x3A, 0x10, 0x10, 0xAD, 0x45 }; - + static const unsigned char ffxxDump[0x100] = { 0xCF, 0x00, 0x7C, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, @@ -1074,7 +1074,7 @@ static void setInitialCgbIoamhram(unsigned char *const ioamhram) { 0x98, 0xD1, 0x71, 0x02, 0x4D, 0x01, 0xC1, 0xFF, 0x0D, 0x00, 0xD3, 0x05, 0xF9, 0x00, 0x0B, 0x00 }; - + std::memset(ioamhram, 0x00, 0x0A0); std::memcpy(ioamhram + 0x0A0, feaxDump, sizeof feaxDump); std::memcpy(ioamhram + 0x100, ffxxDump, sizeof ffxxDump); @@ -1103,7 +1103,7 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { 0x24, 0x40, 0x42, 0x05, 0x0E, 0x04, 0x20, 0xA6, 0x5E, 0xC1, 0x97, 0x7E, 0x44, 0x05, 0x01, 0xA9 }; - + static const unsigned char ffxxDump[0x100] = { 0xCF, 0x00, 0x7E, 0xFF, 0xD3, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, @@ -1138,7 +1138,7 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { 0xBC, 0x7F, 0x7E, 0xD0, 0xC7, 0xC3, 0xBD, 0xCF, 0x59, 0xEA, 0x39, 0x01, 0x2E, 0x00, 0x69, 0x00 }; - + std::memcpy(ioamhram , oamDump, sizeof oamDump); std::memset(ioamhram + 0x0A0, 0x00, 0x060); std::memcpy(ioamhram + 0x100, ffxxDump, sizeof ffxxDump); @@ -1148,24 +1148,24 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbMode, const std::uint32_t now, const unsigned div) { static const unsigned char cgbObjpDump[0x40] = { - 0x00, 0x00, 0xF2, 0xAB, - 0x61, 0xC2, 0xD9, 0xBA, - 0x88, 0x6E, 0xDD, 0x63, - 0x28, 0x27, 0xFB, 0x9F, - 0x35, 0x42, 0xD6, 0xD4, - 0x50, 0x48, 0x57, 0x5E, - 0x23, 0x3E, 0x3D, 0xCA, - 0x71, 0x21, 0x37, 0xC0, - 0xC6, 0xB3, 0xFB, 0xF9, - 0x08, 0x00, 0x8D, 0x29, - 0xA3, 0x20, 0xDB, 0x87, - 0x62, 0x05, 0x5D, 0xD4, - 0x0E, 0x08, 0xFE, 0xAF, - 0x20, 0x02, 0xD7, 0xFF, - 0x07, 0x6A, 0x55, 0xEC, + 0x00, 0x00, 0xF2, 0xAB, + 0x61, 0xC2, 0xD9, 0xBA, + 0x88, 0x6E, 0xDD, 0x63, + 0x28, 0x27, 0xFB, 0x9F, + 0x35, 0x42, 0xD6, 0xD4, + 0x50, 0x48, 0x57, 0x5E, + 0x23, 0x3E, 0x3D, 0xCA, + 0x71, 0x21, 0x37, 0xC0, + 0xC6, 0xB3, 0xFB, 0xF9, + 0x08, 0x00, 0x8D, 0x29, + 0xA3, 0x20, 0xDB, 0x87, + 0x62, 0x05, 0x5D, 0xD4, + 0x0E, 0x08, 0xFE, 0xAF, + 0x20, 0x02, 0xD7, 0xFF, + 0x07, 0x6A, 0x55, 0xEC, 0x83, 0x40, 0x0B, 0x77 }; - + state.cpu.cycleCounter = 8; state.cpu.PC = 0; state.cpu.SP = 0; @@ -1183,7 +1183,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.agbMode = gbaCgbMode; std::memset(state.mem.sram.ptr, 0xFF, state.mem.sram.getSz()); - + setInitialVram(state.mem.vram.ptr, cgb); if (cgb) { @@ -1193,11 +1193,11 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM setInitialDmgWram(state.mem.wram.ptr); setInitialDmgIoamhram(state.mem.ioamhram.ptr); } - + state.mem.ioamhram.ptr[0x104] = 0; state.mem.ioamhram.ptr[0x140] = 0; state.mem.ioamhram.ptr[0x144] = 0x00; - + state.mem.divLastUpdate = 0 - div; state.mem.timaLastUpdate = 0; state.mem.tmatime = DISABLED_TIME; @@ -1217,23 +1217,23 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.hdmaTransfer = false; state.mem.gbIsCgb = cgb; - + for (unsigned i = 0x00; i < 0x40; i += 0x02) { state.ppu.bgpData.ptr[i ] = 0xFF; state.ppu.bgpData.ptr[i + 1] = 0x7F; } - + std::memcpy(state.ppu.objpData.ptr, cgbObjpDump, sizeof cgbObjpDump); - + if (!cgb) { state.ppu.bgpData.ptr[0] = state.mem.ioamhram.get()[0x147]; state.ppu.objpData.ptr[0] = state.mem.ioamhram.get()[0x148]; state.ppu.objpData.ptr[1] = state.mem.ioamhram.get()[0x149]; } - + for (unsigned pos = 0; pos < 80; ++pos) state.ppu.oamReaderBuf.ptr[pos] = state.mem.ioamhram.ptr[(pos * 2 & ~3) | (pos & 1)]; - + std::fill_n(state.ppu.oamReaderSzbuf.ptr, 40, false); std::memset(state.ppu.spAttribList, 0, sizeof state.ppu.spAttribList); std::memset(state.ppu.spByte0List, 0, sizeof state.ppu.spByte0List); @@ -1263,9 +1263,9 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.ppu.pendingLcdstatIrq = false; state.ppu.isCgb = cgb; - + state.spu.cycleCounter = 0; // spu.cycleCounter >> 12 & 7 represents the frame sequencer position. - + state.spu.ch1.sweep.counter = SoundUnit::COUNTER_DISABLED; state.spu.ch1.sweep.shadow = 0; state.spu.ch1.sweep.nr0 = 0; @@ -1279,7 +1279,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch1.lcounter.lengthCounter = 0; state.spu.ch1.nr4 = 0; state.spu.ch1.master = false; - + state.spu.ch2.duty.nextPosUpdate = SoundUnit::COUNTER_DISABLED; state.spu.ch2.duty.nr3 = 0; state.spu.ch2.duty.pos = 0; @@ -1289,10 +1289,10 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch2.lcounter.lengthCounter = 0; state.spu.ch2.nr4 = 0; state.spu.ch2.master = false; - + for (unsigned i = 0; i < 0x10; ++i) state.spu.ch3.waveRam.ptr[i] = state.mem.ioamhram.get()[0x130 + i]; - + state.spu.ch3.lcounter.counter = SoundUnit::COUNTER_DISABLED; state.spu.ch3.lcounter.lengthCounter = 0x100; state.spu.ch3.waveCounter = SoundUnit::COUNTER_DISABLED; @@ -1302,7 +1302,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch3.wavePos = 0; state.spu.ch3.sampleBuf = 0; state.spu.ch3.master = false; - + state.spu.ch4.lfsr.counter = state.spu.cycleCounter + 4; state.spu.ch4.lfsr.reg = 0xFF; state.spu.ch4.env.counter = SoundUnit::COUNTER_DISABLED; @@ -1311,7 +1311,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch4.lcounter.lengthCounter = 0; state.spu.ch4.nr4 = 0; state.spu.ch4.master = false; - + state.rtc.baseTime = now; state.rtc.haltTime = state.rtc.baseTime; state.rtc.dataDh = 0; diff --git a/libgambatte/src/insertion_sort.h b/libgambatte/src/insertion_sort.h index f6a3c991a4..cfcd3fbd25 100644 --- a/libgambatte/src/insertion_sort.h +++ b/libgambatte/src/insertion_sort.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Sindre Aams * + * Copyright (C) 2007 by Sindre Aam�s * * aamas@stud.ntnu.no * * * * This program is free software; you can redistribute it and/or modify * @@ -26,19 +26,19 @@ template void insertionSort(T *const start, T *const end, Less less) { if (start >= end) return; - + T *a = start; - + while (++a < end) { const T e = *a; - + T *b = a; - + while (b != start && less(e, *(b - 1))) { *b = *(b - 1); b = b - 1; } - + *b = e; } } diff --git a/libgambatte/src/interrupter.cpp b/libgambatte/src/interrupter.cpp index 9eac990516..4223c11a8b 100644 --- a/libgambatte/src/interrupter.cpp +++ b/libgambatte/src/interrupter.cpp @@ -35,7 +35,7 @@ unsigned long Interrupter::interrupt(const unsigned address, unsigned long cycle memory.write(SP, PC & 0xFF, cycleCounter); PC = address; cycleCounter += 8; - + return cycleCounter; } diff --git a/libgambatte/src/interruptrequester.cpp b/libgambatte/src/interruptrequester.cpp index c656ad2368..8e57790d7a 100644 --- a/libgambatte/src/interruptrequester.cpp +++ b/libgambatte/src/interruptrequester.cpp @@ -28,13 +28,13 @@ void InterruptRequester::loadState(const SaveState &state) { ifreg_ = state.mem.ioamhram.get()[0x10F]; iereg_ = state.mem.ioamhram.get()[0x1FF] & 0x1F; intFlags.set(state.mem.IME, state.mem.halted); - + eventTimes.setValue(intFlags.imeOrHalted() && pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); } void InterruptRequester::resetCc(const unsigned long oldCc, const unsigned long newCc) { minIntTime = minIntTime < oldCc ? 0 : minIntTime - (oldCc - newCc); - + if (eventTimes.value(INTERRUPTS) != DISABLED_TIME) eventTimes.setValue(minIntTime); } @@ -42,35 +42,35 @@ void InterruptRequester::resetCc(const unsigned long oldCc, const unsigned long void InterruptRequester::ei(const unsigned long cc) { intFlags.setIme(); minIntTime = cc + 1; - + if (pendingIrqs()) eventTimes.setValue(minIntTime); } void InterruptRequester::di() { intFlags.unsetIme(); - + if (!intFlags.imeOrHalted()) eventTimes.setValue(DISABLED_TIME); } void InterruptRequester::halt() { intFlags.setHalted(); - + if (pendingIrqs()) eventTimes.setValue(minIntTime); } void InterruptRequester::unhalt() { intFlags.unsetHalted(); - + if (!intFlags.imeOrHalted()) eventTimes.setValue(DISABLED_TIME); } void InterruptRequester::flagIrq(const unsigned bit) { ifreg_ |= bit; - + if (intFlags.imeOrHalted() && pendingIrqs()) eventTimes.setValue(minIntTime); } @@ -82,14 +82,14 @@ void InterruptRequester::ackIrq(const unsigned bit) { void InterruptRequester::setIereg(const unsigned iereg) { iereg_ = iereg & 0x1F; - + if (intFlags.imeOrHalted()) eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); } void InterruptRequester::setIfreg(const unsigned ifreg) { ifreg_ = ifreg; - + if (intFlags.imeOrHalted()) eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); } diff --git a/libgambatte/src/interruptrequester.h b/libgambatte/src/interruptrequester.h index 8d22e35afb..5e5cb7d10c 100644 --- a/libgambatte/src/interruptrequester.h +++ b/libgambatte/src/interruptrequester.h @@ -32,41 +32,41 @@ class InterruptRequester { unsigned long minIntTime; unsigned ifreg_; unsigned iereg_; - + class IntFlags { friend class InterruptRequester; unsigned char flags_; enum { IME_MASK = 1, HALTED_MASK = 2 }; - + public: IntFlags() : flags_(0) {} - + bool ime() const { return flags_ & IME_MASK; } bool halted() const { return flags_ & HALTED_MASK; } bool imeOrHalted() const { return flags_; } - + void setIme() { flags_ |= IME_MASK; } void unsetIme() { flags_ &= ~IME_MASK; } - + void setHalted() { flags_ |= HALTED_MASK; } void unsetHalted() { flags_ &= ~HALTED_MASK; } - + void set(const bool ime, const bool halted) { flags_ = halted * HALTED_MASK + ime * IME_MASK; } } intFlags; - + public: InterruptRequester(); - + void loadState(const SaveState &); - + void resetCc(unsigned long oldCc, unsigned long newCc); - + unsigned ifreg() const { return ifreg_; } unsigned iereg() const { return iereg_; } unsigned pendingIrqs() const { return ifreg_ & iereg_; } bool ime() const { return intFlags.ime(); } bool halted() const { return intFlags.halted(); } - + void ei(unsigned long cc); void di(); void halt(); @@ -75,7 +75,7 @@ public: void ackIrq(unsigned bit); void setIereg(unsigned iereg); void setIfreg(unsigned ifreg); - + MemEventId minEventId() const { return static_cast(eventTimes.min()); } unsigned long minEventTime() const { return eventTimes.minValue(); } template void setEventTime(unsigned long value) { eventTimes.setValue(value); } diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 63e48171f3..5d3dea9e4d 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -76,11 +76,11 @@ public: }; static inline unsigned rambanks(const MemPtrs &memptrs) { - return static_cast(memptrs.rambankdataend() - memptrs.rambankdata()) / 0x2000; + return std::size_t(memptrs.rambankdataend() - memptrs.rambankdata()) / 0x2000; } static inline unsigned rombanks(const MemPtrs &memptrs) { - return static_cast(memptrs.romdataend() - memptrs.romdata() ) / 0x4000; + return std::size_t(memptrs.romdataend() - memptrs.romdata() ) / 0x4000; } class Mbc1 : public DefaultMbc { @@ -219,7 +219,7 @@ public: memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); setRombank(); } - + virtual bool isAddressWithinAreaRombankCanBeMappedTo(unsigned addr, unsigned bank) const { return (addr < 0x4000) == ((bank & 0xF) == 0); } @@ -287,10 +287,10 @@ class Mbc3 : public DefaultMbc { static unsigned adjustedRombank(unsigned bank) { return bank & 0x7F ? bank : bank | 1; } void setRambank() const { unsigned flags = enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0; - + if (rtc) { rtc->set(enableRam, rambank); - + if (rtc->getActive()) flags |= MemPtrs::RTC_EN; } @@ -546,7 +546,7 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool //if (rom->fail()) // return -1; - + unsigned rambanks = 1; unsigned rombanks = 2; bool cgb = false; @@ -609,8 +609,8 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool default: return -1; }*/ - rambanks = numRambanksFromH14x(header[0x147], header[0x149]); - + rambanks = numRambanksFromH14x(header[0x147], header[0x149]); + cgb = !forceDmg; } std::size_t const filesize = romfilelength; //rom->size(); @@ -625,10 +625,10 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool std::memcpy(memptrs.romdata(), romfiledata, (filesize / 0x4000) * 0x4000ul); std::memset(memptrs.romdata() + (filesize / 0x4000) * 0x4000ul, 0xFF, (rombanks - filesize / 0x4000) * 0x4000ul); enforce8bit(memptrs.romdata(), rombanks * 0x4000ul); - + //if (rom->fail()) // return -1; - + switch (type) { case PLAIN: mbc.reset(new Mbc0(memptrs)); break; case MBC1: diff --git a/libgambatte/src/mem/cartridge.h b/libgambatte/src/mem/cartridge.h index 934d44df7e..a71fc5a0f8 100644 --- a/libgambatte/src/mem/cartridge.h +++ b/libgambatte/src/mem/cartridge.h @@ -63,13 +63,13 @@ class Cartridge { MemPtrs memptrs; Rtc rtc; std::auto_ptr mbc; - + public: void setStatePtrs(SaveState &); void loadState(const SaveState &); - + bool loaded() const { return mbc.get(); } - + const unsigned char * rmem(unsigned area) const { return memptrs.rmem(area); } unsigned char * wmem(unsigned area) const { return memptrs.wmem(area); } unsigned char * vramdata() const { return memptrs.vramdata(); } @@ -85,14 +85,14 @@ public: void setVrambank(unsigned bank) { memptrs.setVrambank(bank); } void setWrambank(unsigned bank) { memptrs.setWrambank(bank); } void setOamDmaSrc(OamDmaSrc oamDmaSrc) { memptrs.setOamDmaSrc(oamDmaSrc); } - + void mbcWrite(unsigned addr, unsigned data) { mbc->romWrite(addr, data); } bool isCgb() const { return gambatte::isCgb(memptrs); } - + void rtcWrite(unsigned data) { rtc.write(data); } unsigned char rtcRead() const { return *rtc.getActive(); } - + void loadSavedata(const char *data); int saveSavedataLength(); void saveSavedata(char *dest); diff --git a/libgambatte/src/mem/memptrs.cpp b/libgambatte/src/mem/memptrs.cpp index bd166e86cf..7b6c2c2ee6 100644 --- a/libgambatte/src/mem/memptrs.cpp +++ b/libgambatte/src/mem/memptrs.cpp @@ -45,7 +45,7 @@ void MemPtrs::reset(const unsigned rombanks, const unsigned rambanks, const unsi wramdataend_ = wramdata_[0] + wrambanks * 0x1000ul; std::memset(rdisabledRamw(), 0xFF, 0x2000); - + oamDmaSrc_ = OAM_DMA_SRC_OFF; rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; rmem_[0xC] = wmem_[0xC] = wramdata_[0] - 0xC000; @@ -87,7 +87,7 @@ void MemPtrs::setRambank(const unsigned flags, const unsigned rambank) { } void MemPtrs::setWrambank(const unsigned bank) { - wramdata_[1] = wramdata_[0] + ((bank & 0x07) ? (bank & 0x07) : 1) * 0x1000; + wramdata_[1] = wramdata_[0] + (bank & 0x07 ? bank & 0x07 : 1) * 0x1000; rmem_[0xD] = wmem_[0xD] = wramdata_[1] - 0xD000; disconnectOamDmaAreas(); } @@ -100,7 +100,7 @@ void MemPtrs::setOamDmaSrc(const OamDmaSrc oamDmaSrc) { rmem_[0xC] = wmem_[0xC] = wramdata_[0] - 0xC000; rmem_[0xD] = wmem_[0xD] = wramdata_[1] - 0xD000; rmem_[0xE] = wmem_[0xE] = wramdata_[0] - 0xE000; - + oamDmaSrc_ = oamDmaSrc; disconnectOamDmaAreas(); } diff --git a/libgambatte/src/mem/memptrs.h b/libgambatte/src/mem/memptrs.h index 68fd2b0006..3d2c6ca3ca 100644 --- a/libgambatte/src/mem/memptrs.h +++ b/libgambatte/src/mem/memptrs.h @@ -29,7 +29,7 @@ enum OamDmaSrc { OAM_DMA_SRC_ROM, OAM_DMA_SRC_SRAM, OAM_DMA_SRC_VRAM, class MemPtrs { const unsigned char *rmem_[0x10]; unsigned char *wmem_[0x10]; - + unsigned char *romdata_[2]; unsigned char *wramdata_[2]; unsigned char *vrambankptr_; @@ -38,7 +38,7 @@ class MemPtrs { unsigned char *memchunk_; unsigned char *rambankdata_; unsigned char *wramdataend_; - + OamDmaSrc oamDmaSrc_; unsigned curRomBank_; @@ -54,11 +54,11 @@ class MemPtrs { unsigned char * wdisabledRam() const { return wramdataend_ + 0x2000; } public: enum RamFlag { READ_EN = 1, WRITE_EN = 2, RTC_EN = 4 }; - + MemPtrs(); ~MemPtrs(); void reset(unsigned rombanks, unsigned rambanks, unsigned wrambanks); - + const unsigned char * rmem(unsigned area) const { return rmem_[area]; } unsigned char * wmem(unsigned area) const { return wmem_[area]; } unsigned char * vramdata() const { return rambankdata_ - 0x4000; } diff --git a/libgambatte/src/mem/rtc.cpp b/libgambatte/src/mem/rtc.cpp index ae97d0876c..57b2964548 100644 --- a/libgambatte/src/mem/rtc.cpp +++ b/libgambatte/src/mem/rtc.cpp @@ -41,24 +41,24 @@ Rtc::Rtc() void Rtc::doLatch() { std::uint32_t tmp = ((dataDh & 0x40) ? haltTime : timeCB()) - baseTime; - + while (tmp > 0x1FF * 86400) { baseTime += 0x1FF * 86400; tmp -= 0x1FF * 86400; dataDh |= 0x80; } - + dataDl = (tmp / 86400) & 0xFF; dataDh &= 0xFE; dataDh |= ((tmp / 86400) & 0x100) >> 8; tmp %= 86400; - + dataH = tmp / 3600; tmp %= 3600; - + dataM = tmp / 60; tmp %= 60; - + dataS = tmp; } @@ -99,7 +99,7 @@ void Rtc::loadState(const SaveState &state) { dataM = state.rtc.dataM; dataS = state.rtc.dataS; lastLatchData = state.rtc.lastLatchData; - + doSwapActive(); } @@ -108,7 +108,7 @@ void Rtc::setDh(const unsigned new_dh) { const std::uint32_t old_highdays = ((unixtime - baseTime) / 86400) & 0x100; baseTime += old_highdays * 86400; baseTime -= ((new_dh & 0x1) << 8) * 86400; - + if ((dataDh ^ new_dh) & 0x40) { if (new_dh & 0x40) haltTime = timeCB(); diff --git a/libgambatte/src/mem/rtc.h b/libgambatte/src/mem/rtc.h index cdbd7e66d0..67eedb863b 100644 --- a/libgambatte/src/mem/rtc.h +++ b/libgambatte/src/mem/rtc.h @@ -41,7 +41,7 @@ private: bool enabled; bool lastLatchData; std::uint32_t (*timeCB)(); - + void doLatch(); void doSwapActive(); void setDh(unsigned new_dh); @@ -49,37 +49,37 @@ private: void setH(unsigned new_hours); void setM(unsigned new_minutes); void setS(unsigned new_seconds); - + public: Rtc(); - + const unsigned char* getActive() const { return activeData; } std::uint32_t getBaseTime() const { return baseTime; } - + void setBaseTime(const std::uint32_t baseTime) { this->baseTime = baseTime; // doLatch(); } - + void latch(const unsigned data) { if (!lastLatchData && data == 1) doLatch(); - + lastLatchData = data; } - + void loadState(const SaveState &state); - + void set(const bool enabled, unsigned bank) { bank &= 0xF; bank -= 8; - + this->enabled = enabled; this->index = bank; - + doSwapActive(); } - + void write(const unsigned data) { // if (activeSet) (this->*activeSet)(data); diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 657a647fcf..a9fa6a031c 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -98,7 +98,7 @@ void Memory::loadState(const SaveState &state) { intreq.setEventTime((ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : state.cpu.cycleCounter); blanklcd = false; - + if (!isCgb()) std::memset(cart.vramdata() + 0x2000, 0, 0x2000); } @@ -106,7 +106,7 @@ void Memory::loadState(const SaveState &state) { void Memory::setEndtime(const unsigned long cycleCounter, const unsigned long inc) { if (intreq.eventTime(BLIT) <= cycleCounter) intreq.setEventTime(intreq.eventTime(BLIT) + (70224 << isDoubleSpeed())); - + intreq.setEventTime(cycleCounter + (inc << isDoubleSpeed())); } @@ -165,7 +165,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { while (cycleCounter >= intreq.minEventTime() && intreq.eventTime(END) != DISABLED_TIME) cycleCounter = event(cycleCounter); - + intreq.setEventTime(DISABLED_TIME); break; @@ -173,17 +173,17 @@ unsigned long Memory::event(unsigned long cycleCounter) { { const bool lcden = ioamhram[0x140] >> 7 & 1; unsigned long blitTime = intreq.eventTime(BLIT); - + if (lcden | blanklcd) { display.updateScreen(blanklcd, cycleCounter); intreq.setEventTime(DISABLED_TIME); intreq.setEventTime(DISABLED_TIME); - + while (cycleCounter >= intreq.minEventTime()) cycleCounter = event(cycleCounter); } else blitTime += 70224 << isDoubleSpeed(); - + blanklcd = lcden ^ 1; intreq.setEventTime(blitTime); } @@ -202,7 +202,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { unsigned dmaDest = dmaDestination; unsigned dmaLength = ((ioamhram[0x155] & 0x7F) + 0x1) * 0x10; unsigned length = hdmaReqFlagged(intreq) ? 0x10 : dmaLength; - + ackDmaReq(&intreq); if ((static_cast(dmaDest) + length) & 0x10000) { @@ -255,7 +255,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { if ((ioamhram[0x155] & 0x80) && display.hdmaIsEnabled()) { if (lastOamDmaUpdate != DISABLED_TIME) updateOamDma(cycleCounter); - + display.disableHdma(cycleCounter); } } @@ -275,11 +275,11 @@ unsigned long Memory::event(unsigned long cycleCounter) { if (halted()) { if (gbIsCgb_ || (!gbIsCgb_ && cycleCounter <= halttime + 4)) cycleCounter += 4; - + intreq.unhalt(); intreq.setEventTime(DISABLED_TIME); } - + if (ime()) { unsigned address; @@ -297,7 +297,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { cycleCounter += 4; display.update(cycleCounter); const unsigned n = pendingIrqs & -pendingIrqs; - + if (n == 0) { address = 0; } @@ -306,11 +306,11 @@ unsigned long Memory::event(unsigned long cycleCounter) { address = lut[n-1]; } else address = 0x50 + n; - + intreq.ackIrq(n); PC = address; } - + break; } @@ -319,15 +319,15 @@ unsigned long Memory::event(unsigned long cycleCounter) { unsigned long Memory::stop(unsigned long cycleCounter) { cycleCounter += 4; - + if (ioamhram[0x14D] & isCgb()) { sound.generate_samples(cycleCounter, isDoubleSpeed()); - + display.speedChange(cycleCounter); ioamhram[0x14D] ^= 0x81; intreq.setEventTime((ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : cycleCounter + (70224 << isDoubleSpeed())); - + if (intreq.eventTime(END) > cycleCounter) { intreq.setEventTime(cycleCounter + (isDoubleSpeed() ? (intreq.eventTime(END) - cycleCounter) << 1 : (intreq.eventTime(END) - cycleCounter) >> 1)); @@ -381,7 +381,7 @@ unsigned long Memory::resetCounters(unsigned long cycleCounter) { decEventCycles(UNHALT, dec); cycleCounter -= dec; - + intreq.resetCc(oldCC, cycleCounter); tima.resetCc(oldCC, cycleCounter, TimaInterruptRequester(intreq)); display.resetCc(oldCC, cycleCounter); @@ -453,7 +453,7 @@ const unsigned char * Memory::oamDmaSrcPtr() const { case OAM_DMA_SRC_INVALID: case OAM_DMA_SRC_OFF: break; } - + return ioamhram[0x146] == 0xFF && !isCgb() ? oamDmaSrcZero() : cart.rdisabledRam(); } @@ -536,7 +536,7 @@ unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleC static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned addr, const bool cgb) { struct Area { unsigned short areaUpper, exceptAreaLower, exceptAreaWidth, pad; }; - + static const Area cgbAreas[] = { { 0xC000, 0x8000, 0x2000, 0 }, { 0xC000, 0x8000, 0x2000, 0 }, @@ -545,7 +545,7 @@ static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned add { 0xC000, 0x8000, 0x2000, 0 }, { 0x0000, 0x0000, 0x0000, 0 } }; - + static const Area dmgAreas[] = { { 0xFE00, 0x8000, 0x2000, 0 }, { 0xFE00, 0x8000, 0x2000, 0 }, @@ -554,7 +554,7 @@ static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned add { 0xFE00, 0x8000, 0x2000, 0 }, { 0x0000, 0x0000, 0x0000, 0 } }; - + const Area *const a = cgb ? cgbAreas : dmgAreas; return addr < a[oamDmaSrc].areaUpper && addr - a[oamDmaSrc].exceptAreaLower >= a[oamDmaSrc].exceptAreaWidth; @@ -564,7 +564,7 @@ unsigned Memory::nontrivial_read(const unsigned P, const unsigned long cycleCoun if (P < 0xFF80) { if (lastOamDmaUpdate != DISABLED_TIME) { updateOamDma(cycleCounter); - + if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) return ioamhram[oamDmaPos]; } @@ -830,7 +830,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned if ((ioamhram[0x140] ^ data) & 0x80) { const unsigned lyc = display.getStat(ioamhram[0x145], cycleCounter) & 4; const bool hdmaEnabled = display.hdmaIsEnabled(); - + display.lcdcChange(data, cycleCounter); ioamhram[0x144] = 0; ioamhram[0x141] &= 0xF8; @@ -1022,7 +1022,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { if (lastOamDmaUpdate != DISABLED_TIME) { updateOamDma(cycleCounter); - + if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) { ioamhram[oamDmaPos] = data; return; diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index fcd7981730..5529fa71e9 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -57,13 +57,13 @@ class Memory { unsigned (*getInput)(); unsigned long divLastUpdate; unsigned long lastOamDmaUpdate; - + InterruptRequester intreq; Tima tima; LCD display; PSG sound; Interrupter interrupter; - + unsigned short dmaSource; unsigned short dmaDestination; unsigned char oamDmaPos; @@ -80,24 +80,24 @@ class Memory { void startOamDma(unsigned long cycleCounter); void endOamDma(unsigned long cycleCounter); const unsigned char * oamDmaSrcPtr() const; - + unsigned nontrivial_ff_read(unsigned P, unsigned long cycleCounter); unsigned nontrivial_read(unsigned P, unsigned long cycleCounter); void nontrivial_ff_write(unsigned P, unsigned data, unsigned long cycleCounter); void nontrivial_write(unsigned P, unsigned data, unsigned long cycleCounter); - + unsigned nontrivial_peek(unsigned P); unsigned nontrivial_ff_peek(unsigned P); void updateSerial(unsigned long cc); void updateTimaIrq(unsigned long cc); void updateIrqs(unsigned long cc); - + bool isDoubleSpeed() const { return display.isDoubleSpeed(); } public: explicit Memory(const Interrupter &interrupter, unsigned short &sp, unsigned short &pc); - + bool loaded() const { return cart.loaded(); } unsigned curRomBank() const { return cart.curRomBank(); } const char * romTitle() const { return cart.romTitle(); } @@ -124,9 +124,9 @@ public: unsigned long nextEventTime() const { return intreq.minEventTime(); } void setLayers(unsigned mask) { display.setLayers(mask); } - + bool isActive() const { return intreq.eventTime(END) != DISABLED_TIME; } - + long cyclesSinceBlit(const unsigned long cc) const { return cc < intreq.eventTime(BLIT) ? -1 : static_cast((cc - intreq.eventTime(BLIT)) >> isDoubleSpeed()); } @@ -155,7 +155,7 @@ public: CDMapResult ret = { eCDLog_AddrType_ROM, P }; return ret; } - else if(P<0x8000) + else if(P<0x8000) { unsigned bank = cart.rmem(P>>12) - cart.rmem(0); unsigned addr = P+bank; @@ -187,7 +187,7 @@ public: return ret; } else if(P<0xFF80) {} - else + else { ////this is just for debugging, really, it's pretty useless //CDMapResult ret = { eCDLog_AddrType_HRAM, (P-0xFF80) }; @@ -262,7 +262,7 @@ public: } else nontrivial_write(P, data, cycleCounter); } - + void write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { if (cart.wmem(P >> 12)) { cart.wmem(P >> 12)[P] = data; @@ -277,7 +277,7 @@ public: cdCallback(map.addr,map.type,eCDLog_Flags_Data); } } - + void ff_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { if (P - 0xFF80u < 0x7Fu) { ioamhram[P - 0xFE00] = data; @@ -329,14 +329,14 @@ public: void setBasetime(unsigned long cc) { basetime = cc; } void setEndtime(unsigned long cc, unsigned long inc); - + void setSoundBuffer(uint_least32_t *const buf) { sound.setBuffer(buf); } unsigned fillSoundBuffer(unsigned long cc); - + void setVideoBuffer(uint_least32_t *const videoBuf, const int pitch) { display.setVideoBuffer(videoBuf, pitch); } - + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned long rgb32); void setCgbPalette(unsigned *lut); diff --git a/libgambatte/src/minkeeper.h b/libgambatte/src/minkeeper.h index ad2d6f79d2..5816a0fad7 100644 --- a/libgambatte/src/minkeeper.h +++ b/libgambatte/src/minkeeper.h @@ -42,26 +42,26 @@ class MinKeeper { enum { LEVELS = MinKeeperUtil::CeiledLog2::R }; template struct Num { enum { R = MinKeeperUtil::RoundedDiv2n::R }; }; template struct Sum { enum { R = MinKeeperUtil::Sum::R }; }; - + template struct UpdateValue { enum { P = Sum::R + id }; enum { C0 = Sum::R + id * 2 }; - + static void updateValue(MinKeeper &m) { // GCC 4.3 generates better code with the ternary operator on i386. m.a[P] = (id * 2 + 1 == Num::R || m.values[m.a[C0]] < m.values[m.a[C0 + 1]]) ? m.a[C0] : m.a[C0 + 1]; UpdateValue::updateValue(m); } }; - + template struct UpdateValue { static void updateValue(MinKeeper &m) { m.minValue_ = m.values[m.a[0]]; } }; - + class UpdateValueLut { template struct FillLut { static void fillLut(UpdateValueLut & l) { @@ -69,42 +69,42 @@ class MinKeeper { FillLut::fillLut(l); } }; - + template struct FillLut<-1,dummy> { static void fillLut(UpdateValueLut &) {} }; - + void (*lut_[Num::R])(MinKeeper&); - + public: UpdateValueLut() { FillLut::R-1,0>::fillLut(*this); } void call(int id, MinKeeper &mk) const { lut_[id](mk); } }; - + static UpdateValueLut updateValueLut; unsigned long values[ids]; unsigned long minValue_; int a[Sum::R]; - + template static void updateValue(MinKeeper &m); - + public: explicit MinKeeper(unsigned long initValue = 0xFFFFFFFF); - + int min() const { return a[0]; } unsigned long minValue() const { return minValue_; } - + template void setValue(const unsigned long cnt) { values[id] = cnt; updateValue(*this); } - + void setValue(const int id, const unsigned long cnt) { values[id] = cnt; updateValueLut.call(id >> 1, *this); } - + unsigned long value(const int id) const { return values[id]; } // not sure if i understood everything in minkeeper correctly, so something might be missing here? @@ -122,28 +122,28 @@ template typename MinKeeper::UpdateValueLut MinKeeper::update template MinKeeper::MinKeeper(const unsigned long initValue) { std::fill(values, values + ids, initValue); - + for (int i = 0; i < Num::R; ++i) { a[Sum::R + i] = (i * 2 + 1 == ids || values[i * 2] < values[i * 2 + 1]) ? i * 2 : i * 2 + 1; } - + int n = Num::R; int off = Sum::R; - + while (off) { const int pn = (n + 1) >> 1; const int poff = off - pn; - + for (int i = 0; i < pn; ++i) { a[poff + i] = (i * 2 + 1 == n || values[a[off + i * 2]] < values[a[off + i * 2 + 1]]) ? a[off + i * 2] : a[off + i * 2 + 1]; } - + off = poff; n = pn; } - + minValue_ = values[a[0]]; } diff --git a/libgambatte/src/newstate.h b/libgambatte/src/newstate.h index d741879cff..576da30bfb 100644 --- a/libgambatte/src/newstate.h +++ b/libgambatte/src/newstate.h @@ -65,7 +65,7 @@ public: virtual void ExitSection(const char *name); }; -// defines and explicitly instantiates +// defines and explicitly instantiates #define SYNCFUNC(x)\ template void x::SyncState(NewState *ns);\ template void x::SyncState(NewState *ns);\ diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index 014efbb4c8..598426edd8 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -30,13 +30,13 @@ struct SaveState { class Ptr { T *ptr; unsigned long sz; - + public: Ptr() : ptr(0), sz(0) {} const T* get() const { return ptr; } unsigned long getSz() const { return sz; } void set(T *ptr, const unsigned long sz) { this->ptr = ptr; this->sz = sz; } - + friend class SaverList; friend void setInitState(SaveState &, bool, bool, std::uint32_t, unsigned); }; @@ -55,7 +55,7 @@ struct SaveState { unsigned char L; bool skip; } cpu; - + struct Mem { Ptr vram; Ptr sram; @@ -83,14 +83,14 @@ struct SaveState { bool agbMode; bool gbIsCgb; } mem; - + struct PPU { Ptr bgpData; Ptr objpData; //SpriteMapper::OamReader Ptr oamReaderBuf; Ptr oamReaderSzbuf; - + unsigned long videoCycles; unsigned long enableDisplayM0Time; unsigned short lastM0Time; @@ -119,24 +119,24 @@ struct SaveState { bool pendingLcdstatIrq; bool isCgb; } ppu; - + struct SPU { struct Duty { unsigned long nextPosUpdate; unsigned char nr3; unsigned char pos; }; - + struct Env { unsigned long counter; unsigned char volume; }; - + struct LCounter { unsigned long counter; unsigned short lengthCounter; }; - + struct { struct { unsigned long counter; @@ -150,7 +150,7 @@ struct SaveState { unsigned char nr4; bool master; } ch1; - + struct { Duty duty; Env env; @@ -158,7 +158,7 @@ struct SaveState { unsigned char nr4; bool master; } ch2; - + struct { Ptr waveRam; LCounter lcounter; @@ -170,7 +170,7 @@ struct SaveState { unsigned char sampleBuf; bool master; } ch3; - + struct { struct { unsigned long counter; @@ -181,10 +181,10 @@ struct SaveState { unsigned char nr4; bool master; } ch4; - + unsigned long cycleCounter; } spu; - + struct RTC { unsigned long baseTime; unsigned long haltTime; diff --git a/libgambatte/src/sound.cpp b/libgambatte/src/sound.cpp index 508ebaf827..68449b158e 100644 --- a/libgambatte/src/sound.cpp +++ b/libgambatte/src/sound.cpp @@ -75,7 +75,7 @@ void PSG::loadState(const SaveState &state) { ch2.loadState(state); ch3.loadState(state); ch4.loadState(state); - + lastUpdate = state.cpu.cycleCounter; set_so_volume(state.mem.ioamhram.get()[0x124]); map_so(state.mem.ioamhram.get()[0x125]); @@ -84,7 +84,7 @@ void PSG::loadState(const SaveState &state) { void PSG::accumulate_channels(const unsigned long cycles) { uint_least32_t *const buf = buffer + bufferPos; - + std::memset(buf, 0, cycles * sizeof *buf); ch1.update(buf, soVol, cycles); ch2.update(buf, soVol, cycles); @@ -98,7 +98,7 @@ void PSG::generate_samples(const unsigned long cycleCounter, const unsigned doub if (cycles) accumulate_channels(cycles); - + bufferPos += cycles; } @@ -111,10 +111,10 @@ unsigned PSG::fillBuffer() { uint_least32_t sum = rsum; uint_least32_t *b = buffer; unsigned n = bufferPos; - + if (unsigned n2 = n >> 3) { n -= n2 << 3; - + do { sum += b[0]; b[0] = sum ^ 0x8000; @@ -132,18 +132,18 @@ unsigned PSG::fillBuffer() { b[6] = sum ^ 0x8000; sum += b[7]; b[7] = sum ^ 0x8000; - + b += 8; } while (--n2); } - + while (n--) { sum += *b; *b++ = sum ^ 0x8000; // xor away the initial rsum value of 0x8000 (which prevents borrows from the high word) from the low word } - + rsum = sum; - + return bufferPos; } @@ -161,7 +161,7 @@ void PSG::set_so_volume(const unsigned nr50) { void PSG::map_so(const unsigned nr51) { const unsigned long tmp = nr51 * so1Mul + (nr51 >> 4) * so2Mul; - + ch1.setSo((tmp & 0x00010001) * 0xFFFF); ch2.setSo((tmp >> 1 & 0x00010001) * 0xFFFF); ch3.setSo((tmp >> 2 & 0x00010001) * 0xFFFF); diff --git a/libgambatte/src/sound.h b/libgambatte/src/sound.h index 7d430d613d..367a10f1a8 100644 --- a/libgambatte/src/sound.h +++ b/libgambatte/src/sound.h @@ -32,16 +32,16 @@ class PSG { Channel2 ch2; Channel3 ch3; Channel4 ch4; - + uint_least32_t *buffer; - + unsigned long lastUpdate; unsigned long soVol; - + uint_least32_t rsum; - + unsigned bufferPos; - + bool enabled; void accumulate_channels(unsigned long cycles); @@ -57,7 +57,7 @@ public: void resetCounter(unsigned long newCc, unsigned long oldCc, unsigned doubleSpeed); unsigned fillBuffer(); void setBuffer(uint_least32_t *const buf) { buffer = buf; bufferPos = 0; } - + bool isEnabled() const { return enabled; } void setEnabled(bool value) { enabled = value; } diff --git a/libgambatte/src/sound/channel1.cpp b/libgambatte/src/sound/channel1.cpp index eae98c966c..4a9f0a7578 100644 --- a/libgambatte/src/sound/channel1.cpp +++ b/libgambatte/src/sound/channel1.cpp @@ -33,31 +33,31 @@ Channel1::SweepUnit::SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit) : unsigned Channel1::SweepUnit::calcFreq() { unsigned freq = shadow >> (nr0 & 0x07); - + if (nr0 & 0x08) { freq = shadow - freq; negging = true; } else freq = shadow + freq; - + if (freq & 2048) disableMaster(); - + return freq; } void Channel1::SweepUnit::event() { const unsigned long period = nr0 >> 4 & 0x07; - + if (period) { const unsigned freq = calcFreq(); - + if (!(freq & 2048) && (nr0 & 0x07)) { shadow = freq; dutyUnit.setFreq(freq, counter); calcFreq(); } - + counter += period << 14; } else counter += 8ul << 14; @@ -66,22 +66,22 @@ void Channel1::SweepUnit::event() { void Channel1::SweepUnit::nr0Change(const unsigned newNr0) { if (negging && !(newNr0 & 0x08)) disableMaster(); - + nr0 = newNr0; } void Channel1::SweepUnit::nr4Init(const unsigned long cc) { negging = false; shadow = dutyUnit.getFreq(); - + const unsigned period = nr0 >> 4 & 0x07; const unsigned shift = nr0 & 0x07; - + if (period | shift) counter = ((cc >> 14) + (period ? period : 8)) << 14; else counter = COUNTER_DISABLED; - + if (shift) calcFreq(); } @@ -139,7 +139,7 @@ void Channel1::setNr0(const unsigned data) { void Channel1::setNr1(const unsigned data) { lengthCounter.nr1Change(data, nr4, cycleCounter); dutyUnit.nr1Change(data, cycleCounter); - + setEvent(); } @@ -148,7 +148,7 @@ void Channel1::setNr2(const unsigned data) { disableMaster(); else staticOutputTest(cycleCounter); - + setEvent(); } @@ -159,18 +159,18 @@ void Channel1::setNr3(const unsigned data) { void Channel1::setNr4(const unsigned data) { lengthCounter.nr4Change(nr4, data, cycleCounter); - + nr4 = data; - + dutyUnit.nr4Change(data, cycleCounter); - + if (data & 0x80) { //init-bit nr4 &= 0x7F; master = !envelopeUnit.nr4Init(cycleCounter); sweepUnit.nr4Init(cycleCounter); staticOutputTest(cycleCounter); } - + setEvent(); } @@ -187,7 +187,7 @@ void Channel1::reset() { dutyUnit.reset(); envelopeUnit.reset(); sweepUnit.reset(); - + setEvent(); } @@ -200,7 +200,7 @@ void Channel1::loadState(const SaveState &state) { dutyUnit.loadState(state.spu.ch1.duty, state.mem.ioamhram.get()[0x111], state.spu.ch1.nr4, state.spu.cycleCounter); envelopeUnit.loadState(state.spu.ch1.env, state.mem.ioamhram.get()[0x112], state.spu.cycleCounter); lengthCounter.loadState(state.spu.ch1.lcounter, state.spu.cycleCounter); - + cycleCounter = state.spu.cycleCounter; nr4 = state.spu.ch1.nr4; master = state.spu.ch1.master; @@ -210,42 +210,42 @@ void Channel1::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; const unsigned long outLow = outBase * (0 - 15ul); const unsigned long endCycles = cycleCounter + cycles; - + for (;;) { const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; - + while (dutyUnit.getCounter() <= nextMajorEvent) { *buf = out - prevOut; prevOut = out; buf += dutyUnit.getCounter() - cycleCounter; cycleCounter = dutyUnit.getCounter(); - + dutyUnit.event(); out = dutyUnit.isHighState() ? outHigh : outLow; } - + if (cycleCounter < nextMajorEvent) { *buf = out - prevOut; prevOut = out; buf += nextMajorEvent - cycleCounter; cycleCounter = nextMajorEvent; } - + if (nextEventUnit->getCounter() == nextMajorEvent) { nextEventUnit->event(); setEvent(); } else break; } - + if (cycleCounter & SoundUnit::COUNTER_MAX) { dutyUnit.resetCounters(cycleCounter); lengthCounter.resetCounters(cycleCounter); envelopeUnit.resetCounters(cycleCounter); sweepUnit.resetCounters(cycleCounter); - + cycleCounter -= SoundUnit::COUNTER_MAX; } } diff --git a/libgambatte/src/sound/channel1.h b/libgambatte/src/sound/channel1.h index 5cd7c23ed2..113629bb8a 100644 --- a/libgambatte/src/sound/channel1.h +++ b/libgambatte/src/sound/channel1.h @@ -38,9 +38,9 @@ class Channel1 { unsigned short shadow; unsigned char nr0; bool negging; - + unsigned calcFreq(); - + public: SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit); void event(); @@ -51,27 +51,27 @@ class Channel1 { templatevoid SyncState(NewState *ns); }; - + friend class StaticOutputTester; - + StaticOutputTester staticOutputTest; DutyMasterDisabler disableMaster; LengthCounter lengthCounter; DutyUnit dutyUnit; EnvelopeUnit envelopeUnit; SweepUnit sweepUnit; - + SoundUnit *nextEventUnit; - + unsigned long cycleCounter; unsigned long soMask; unsigned long prevOut; - + unsigned char nr4; bool master; - + void setEvent(); - + public: Channel1(); void setNr0(unsigned data); @@ -79,12 +79,12 @@ public: void setNr2(unsigned data); void setNr3(unsigned data); void setNr4(unsigned data); - + void setSo(unsigned long soMask); bool isActive() const { return master; } - + void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - + void reset(); void init(bool cgb); void loadState(const SaveState &state); diff --git a/libgambatte/src/sound/channel2.cpp b/libgambatte/src/sound/channel2.cpp index b3135e2299..13bcc23b4a 100644 --- a/libgambatte/src/sound/channel2.cpp +++ b/libgambatte/src/sound/channel2.cpp @@ -46,7 +46,7 @@ void Channel2::setEvent() { void Channel2::setNr1(const unsigned data) { lengthCounter.nr1Change(data, nr4, cycleCounter); dutyUnit.nr1Change(data, cycleCounter); - + setEvent(); } @@ -55,7 +55,7 @@ void Channel2::setNr2(const unsigned data) { disableMaster(); else staticOutputTest(cycleCounter); - + setEvent(); } @@ -66,17 +66,17 @@ void Channel2::setNr3(const unsigned data) { void Channel2::setNr4(const unsigned data) { lengthCounter.nr4Change(nr4, data, cycleCounter); - + nr4 = data; - + if (data & 0x80) { //init-bit nr4 &= 0x7F; master = !envelopeUnit.nr4Init(cycleCounter); staticOutputTest(cycleCounter); } - + dutyUnit.nr4Change(data, cycleCounter); - + setEvent(); } @@ -88,11 +88,11 @@ void Channel2::setSo(const unsigned long soMask) { void Channel2::reset() { cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. - + // lengthCounter.reset(); dutyUnit.reset(); envelopeUnit.reset(); - + setEvent(); } @@ -104,7 +104,7 @@ void Channel2::loadState(const SaveState &state) { dutyUnit.loadState(state.spu.ch2.duty, state.mem.ioamhram.get()[0x116], state.spu.ch2.nr4,state.spu.cycleCounter); envelopeUnit.loadState(state.spu.ch2.env, state.mem.ioamhram.get()[0x117], state.spu.cycleCounter); lengthCounter.loadState(state.spu.ch2.lcounter, state.spu.cycleCounter); - + cycleCounter = state.spu.cycleCounter; nr4 = state.spu.ch2.nr4; master = state.spu.ch2.master; @@ -114,41 +114,41 @@ void Channel2::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; const unsigned long outLow = outBase * (0 - 15ul); const unsigned long endCycles = cycleCounter + cycles; - + for (;;) { const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; - + while (dutyUnit.getCounter() <= nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += dutyUnit.getCounter() - cycleCounter; cycleCounter = dutyUnit.getCounter(); - + dutyUnit.event(); out = dutyUnit.isHighState() ? outHigh : outLow; } - + if (cycleCounter < nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += nextMajorEvent - cycleCounter; cycleCounter = nextMajorEvent; } - + if (nextEventUnit->getCounter() == nextMajorEvent) { nextEventUnit->event(); setEvent(); } else break; } - + if (cycleCounter & SoundUnit::COUNTER_MAX) { dutyUnit.resetCounters(cycleCounter); lengthCounter.resetCounters(cycleCounter); envelopeUnit.resetCounters(cycleCounter); - + cycleCounter -= SoundUnit::COUNTER_MAX; } } diff --git a/libgambatte/src/sound/channel2.h b/libgambatte/src/sound/channel2.h index 9cc2ef28b6..611d8cd51c 100644 --- a/libgambatte/src/sound/channel2.h +++ b/libgambatte/src/sound/channel2.h @@ -32,37 +32,37 @@ struct SaveState; class Channel2 { friend class StaticOutputTester; - + StaticOutputTester staticOutputTest; DutyMasterDisabler disableMaster; LengthCounter lengthCounter; DutyUnit dutyUnit; EnvelopeUnit envelopeUnit; - + SoundUnit *nextEventUnit; - + unsigned long cycleCounter; unsigned long soMask; unsigned long prevOut; - + unsigned char nr4; bool master; - + void setEvent(); - + public: Channel2(); void setNr1(unsigned data); void setNr2(unsigned data); void setNr3(unsigned data); void setNr4(unsigned data); - + void setSo(unsigned long soMask); // void deactivate() { disableMaster(); setEvent(); } bool isActive() const { return master; } - + void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - + void reset(); void init(bool cgb); void loadState(const SaveState &state); diff --git a/libgambatte/src/sound/channel3.cpp b/libgambatte/src/sound/channel3.cpp index aeab458d6b..d91be4416b 100644 --- a/libgambatte/src/sound/channel3.cpp +++ b/libgambatte/src/sound/channel3.cpp @@ -47,33 +47,33 @@ Channel3::Channel3() : void Channel3::setNr0(const unsigned data) { nr0 = data & 0x80; - + if (!(data & 0x80)) disableMaster(); } void Channel3::setNr2(const unsigned data) { rShift = (data >> 5 & 3U) - 1; - + if (rShift > 3) rShift = 4; } void Channel3::setNr4(const unsigned data) { lengthCounter.nr4Change(nr4, data, cycleCounter); - + nr4 = data & 0x7F; - + if (data & nr0/* & 0x80*/) { if (!cgb && waveCounter == cycleCounter + 1) { const unsigned pos = ((wavePos + 1) & 0x1F) >> 1; - + if (pos < 4) waveRam[0] = waveRam[pos]; else std::memcpy(waveRam, waveRam + (pos & ~3), 4); } - + master = true; wavePos = 0; lastReadTime = waveCounter = cycleCounter + toPeriod(nr3, data) + 3; @@ -102,7 +102,7 @@ void Channel3::setStatePtrs(SaveState &state) { void Channel3::loadState(const SaveState &state) { lengthCounter.loadState(state.spu.ch3.lcounter, state.spu.cycleCounter); - + cycleCounter = state.spu.cycleCounter; waveCounter = std::max(state.spu.ch3.waveCounter, state.spu.cycleCounter); lastReadTime = state.spu.ch3.lastReadTime; @@ -111,7 +111,7 @@ void Channel3::loadState(const SaveState &state) { wavePos = state.spu.ch3.wavePos & 0x1F; sampleBuf = state.spu.ch3.sampleBuf; master = state.spu.ch3.master; - + nr0 = state.mem.ioamhram.get()[0x11A] & 0x80; setNr2(state.mem.ioamhram.get()[0x11C]); } @@ -133,20 +133,20 @@ void Channel3::updateWaveCounter(const unsigned long cc) { void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { const unsigned long outBase = (nr0/* & 0x80*/) ? soBaseVol & soMask : 0; - + if (outBase && rShift != 4) { const unsigned long endCycles = cycleCounter + cycles; - + for (;;) { const unsigned long nextMajorEvent = lengthCounter.getCounter() < endCycles ? lengthCounter.getCounter() : endCycles; unsigned long out = outBase * (master ? ((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul : 0 - 15ul); - + while (waveCounter <= nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += waveCounter - cycleCounter; cycleCounter = waveCounter; - + lastReadTime = waveCounter; waveCounter += toPeriod(nr3, nr4); ++wavePos; @@ -154,14 +154,14 @@ void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign sampleBuf = waveRam[wavePos >> 1]; out = outBase * (/*master ? */((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul/* : 0 - 15ul*/); } - + if (cycleCounter < nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += nextMajorEvent - cycleCounter; cycleCounter = nextMajorEvent; } - + if (lengthCounter.getCounter() == nextMajorEvent) { lengthCounter.event(); } else @@ -171,23 +171,23 @@ void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign const unsigned long out = outBase * (0 - 15ul); *buf += out - prevOut; prevOut = out; - + cycleCounter += cycles; - + while (lengthCounter.getCounter() <= cycleCounter) { updateWaveCounter(lengthCounter.getCounter()); lengthCounter.event(); } - + updateWaveCounter(cycleCounter); } - + if (cycleCounter & SoundUnit::COUNTER_MAX) { lengthCounter.resetCounters(cycleCounter); - + if (waveCounter != SoundUnit::COUNTER_DISABLED) waveCounter -= SoundUnit::COUNTER_MAX; - + lastReadTime -= SoundUnit::COUNTER_MAX; cycleCounter -= SoundUnit::COUNTER_MAX; } @@ -196,7 +196,7 @@ void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign SYNCFUNC(Channel3) { NSS(waveRam); - + SSS(lengthCounter); NSS(cycleCounter); diff --git a/libgambatte/src/sound/channel3.h b/libgambatte/src/sound/channel3.h index fe81789899..a6c5253c44 100644 --- a/libgambatte/src/sound/channel3.h +++ b/libgambatte/src/sound/channel3.h @@ -31,35 +31,35 @@ struct SaveState; class Channel3 { class Ch3MasterDisabler : public MasterDisabler { unsigned long &waveCounter; - + public: Ch3MasterDisabler(bool &m, unsigned long &wC) : MasterDisabler(m), waveCounter(wC) {} void operator()() { MasterDisabler::operator()(); waveCounter = SoundUnit::COUNTER_DISABLED; } }; - + unsigned char waveRam[0x10]; - + Ch3MasterDisabler disableMaster; LengthCounter lengthCounter; - + unsigned long cycleCounter; unsigned long soMask; unsigned long prevOut; unsigned long waveCounter; unsigned long lastReadTime; - + unsigned char nr0; unsigned char nr3; unsigned char nr4; unsigned char wavePos; unsigned char rShift; unsigned char sampleBuf; - + bool master; bool cgb; - + void updateWaveCounter(unsigned long cc); - + public: Channel3(); bool isActive() const { return master; } @@ -74,26 +74,26 @@ public: void setNr4(unsigned data); void setSo(unsigned long soMask); void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - + unsigned waveRamRead(unsigned index) const { if (master) { if (!cgb && cycleCounter != lastReadTime) return 0xFF; - + index = wavePos >> 1; } - + return waveRam[index]; } - + void waveRamWrite(unsigned index, unsigned data) { if (master) { if (!cgb && cycleCounter != lastReadTime) return; - + index = wavePos >> 1; } - + waveRam[index] = data; } diff --git a/libgambatte/src/sound/channel4.cpp b/libgambatte/src/sound/channel4.cpp index 31c0590646..cc5a29799f 100644 --- a/libgambatte/src/sound/channel4.cpp +++ b/libgambatte/src/sound/channel4.cpp @@ -23,12 +23,12 @@ static unsigned long toPeriod(const unsigned nr3) { unsigned s = (nr3 >> 4) + 3; unsigned r = nr3 & 7; - + if (!r) { r = 1; --s; } - + return r << s; } @@ -46,13 +46,13 @@ void Channel4::Lfsr::updateBackupCounter(const unsigned long cc) { const unsigned long period = toPeriod(nr3); backupCounter = cc - (cc - backupCounter) % period + period; }*/ - + if (backupCounter <= cc) { const unsigned long period = toPeriod(nr3); unsigned long periods = (cc - backupCounter) / period + 1; - + backupCounter += periods * period; - + if (master && nr3 < 0xE0) { if (nr3 & 8) { while (periods > 6) { @@ -60,7 +60,7 @@ void Channel4::Lfsr::updateBackupCounter(const unsigned long cc) { reg = (reg >> 6 & ~0x7E) | xored | xored << 8; periods -= 6; } - + const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; reg = (reg >> periods & ~(0x80 - (0x80 >> periods))) | xored | xored << 8; } else { @@ -68,7 +68,7 @@ void Channel4::Lfsr::updateBackupCounter(const unsigned long cc) { reg = reg ^ reg >> 1; periods -= 15; } - + reg = reg >> periods | (((reg ^ reg >> 1) << (15 - periods)) & 0x7FFF); } } @@ -95,27 +95,27 @@ inline void Channel4::Lfsr::event() { if (nr3 < 0xE0) { const unsigned shifted = reg >> 1; const unsigned xored = (reg ^ shifted) & 1; - + reg = shifted | xored << 14; - + if (nr3 & 8) reg = (reg & ~0x40) | xored << 6; } - + counter += toPeriod(nr3); backupCounter = counter; - - + + /*if (nr3 < 0xE0) { const unsigned periods = nextStateDistance[reg & 0x3F]; const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; - + reg = reg >> periods | xored << 8; - + if (nr3 & 8) reg = reg & ~(0x80 - (0x80 >> periods)) | xored; } - + const unsigned long period = toPeriod(nr3); backupCounter = counter + period; counter += period * nextStateDistance[reg & 0x3F];*/ @@ -124,7 +124,7 @@ inline void Channel4::Lfsr::event() { void Channel4::Lfsr::nr3Change(const unsigned newNr3, const unsigned long cc) { updateBackupCounter(cc); nr3 = newNr3; - + // if (counter != COUNTER_DISABLED) // counter = backupCounter + toPeriod(nr3) * (nextStateDistance[reg & 0x3F] - 1); } @@ -191,7 +191,7 @@ void Channel4::setEvent() { void Channel4::setNr1(const unsigned data) { lengthCounter.nr1Change(data, nr4, cycleCounter); - + setEvent(); } @@ -200,26 +200,26 @@ void Channel4::setNr2(const unsigned data) { disableMaster(); else staticOutputTest(cycleCounter); - + setEvent(); } void Channel4::setNr4(const unsigned data) { lengthCounter.nr4Change(nr4, data, cycleCounter); - + nr4 = data; - + if (data & 0x80) { //init-bit nr4 &= 0x7F; - + master = !envelopeUnit.nr4Init(cycleCounter); - + if (master) lfsr.nr4Init(cycleCounter); - + staticOutputTest(cycleCounter); } - + setEvent(); } @@ -235,7 +235,7 @@ void Channel4::reset() { // lengthCounter.reset(); lfsr.reset(cycleCounter); envelopeUnit.reset(); - + setEvent(); } @@ -247,7 +247,7 @@ void Channel4::loadState(const SaveState &state) { lfsr.loadState(state); envelopeUnit.loadState(state.spu.ch4.env, state.mem.ioamhram.get()[0x121], state.spu.cycleCounter); lengthCounter.loadState(state.spu.ch4.lcounter, state.spu.cycleCounter); - + cycleCounter = state.spu.cycleCounter; nr4 = state.spu.ch4.nr4; master = state.spu.ch4.master; @@ -257,41 +257,41 @@ void Channel4::update(uint_least32_t *buf, const unsigned long soBaseVol, unsign const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; const unsigned long outLow = outBase * (0 - 15ul); const unsigned long endCycles = cycleCounter + cycles; - + for (;;) { const unsigned long outHigh = /*master ? */outBase * (envelopeUnit.getVolume() * 2 - 15ul)/* : outLow*/; const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; unsigned long out = lfsr.isHighState() ? outHigh : outLow; - + while (lfsr.getCounter() <= nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += lfsr.getCounter() - cycleCounter; cycleCounter = lfsr.getCounter(); - + lfsr.event(); out = lfsr.isHighState() ? outHigh : outLow; } - + if (cycleCounter < nextMajorEvent) { *buf += out - prevOut; prevOut = out; buf += nextMajorEvent - cycleCounter; cycleCounter = nextMajorEvent; } - + if (nextEventUnit->getCounter() == nextMajorEvent) { nextEventUnit->event(); setEvent(); } else break; } - + if (cycleCounter & SoundUnit::COUNTER_MAX) { lengthCounter.resetCounters(cycleCounter); lfsr.resetCounters(cycleCounter); envelopeUnit.resetCounters(cycleCounter); - + cycleCounter -= SoundUnit::COUNTER_MAX; } } @@ -311,7 +311,7 @@ SYNCFUNC(Channel4) NSS(cycleCounter); NSS(soMask); NSS(prevOut); - + NSS(nr4); NSS(master); } diff --git a/libgambatte/src/sound/channel4.h b/libgambatte/src/sound/channel4.h index 785c98f2f6..4490404fa2 100644 --- a/libgambatte/src/sound/channel4.h +++ b/libgambatte/src/sound/channel4.h @@ -36,9 +36,9 @@ class Channel4 { unsigned short reg; unsigned char nr3; bool master; - + void updateBackupCounter(unsigned long cc); - + public: Lfsr(); void event(); @@ -54,45 +54,45 @@ class Channel4 { templatevoid SyncState(NewState *ns); }; - + class Ch4MasterDisabler : public MasterDisabler { Lfsr &lfsr; public: Ch4MasterDisabler(bool &m, Lfsr &lfsr) : MasterDisabler(m), lfsr(lfsr) {} void operator()() { MasterDisabler::operator()(); lfsr.disableMaster(); } }; - + friend class StaticOutputTester; - + StaticOutputTester staticOutputTest; Ch4MasterDisabler disableMaster; LengthCounter lengthCounter; EnvelopeUnit envelopeUnit; Lfsr lfsr; - + SoundUnit *nextEventUnit; - + unsigned long cycleCounter; unsigned long soMask; unsigned long prevOut; - + unsigned char nr4; bool master; - + void setEvent(); - + public: Channel4(); void setNr1(unsigned data); void setNr2(unsigned data); void setNr3(unsigned data) { lfsr.nr3Change(data, cycleCounter); /*setEvent();*/ } void setNr4(unsigned data); - + void setSo(unsigned long soMask); bool isActive() const { return master; } - + void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - + void reset(); void init(bool cgb); void loadState(const SaveState &state); diff --git a/libgambatte/src/sound/duty_unit.cpp b/libgambatte/src/sound/duty_unit.cpp index 02ba2a8a04..4d2a0ddde6 100644 --- a/libgambatte/src/sound/duty_unit.cpp +++ b/libgambatte/src/sound/duty_unit.cpp @@ -21,7 +21,7 @@ static inline bool toOutState(const unsigned duty, const unsigned pos) { static const unsigned char duties[4] = { 0x80, 0x81, 0xE1, 0x7E }; - + return duties[duty] >> pos & 1; } @@ -52,7 +52,7 @@ void DutyUnit::setCounter() { 0, 3, 2, 1, 0, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 1 }; - + if (enableEvents && nextPosUpdate != COUNTER_DISABLED) counter = nextPosUpdate + period * nextStateDistance[(duty * 8) | pos]; else @@ -67,13 +67,13 @@ void DutyUnit::setFreq(const unsigned newFreq, const unsigned long cc) { void DutyUnit::event() { unsigned inc = period << duty; - + if (duty == 3) inc -= period * 2; - + if (!(high ^= true)) inc = period * 8 - inc; - + counter += inc; } @@ -89,7 +89,7 @@ void DutyUnit::nr3Change(const unsigned newNr3, const unsigned long cc) { void DutyUnit::nr4Change(const unsigned newNr4, const unsigned long cc) { setFreq((newNr4 << 8 & 0x700) | (getFreq() & 0xFF), cc); - + if (newNr4 & 0x80) { nextPosUpdate = (cc & ~1) + period; setCounter(); @@ -124,7 +124,7 @@ void DutyUnit::loadState(const SaveState::SPU::Duty &dstate, const unsigned nr1, void DutyUnit::resetCounters(const unsigned long oldCc) { if (nextPosUpdate == COUNTER_DISABLED) return; - + updatePos(oldCc); nextPosUpdate -= COUNTER_MAX; SoundUnit::resetCounters(oldCc); diff --git a/libgambatte/src/sound/duty_unit.h b/libgambatte/src/sound/duty_unit.h index 0a5f3e9412..a45294133e 100644 --- a/libgambatte/src/sound/duty_unit.h +++ b/libgambatte/src/sound/duty_unit.h @@ -50,7 +50,7 @@ public: void resetCounters(unsigned long oldCc); void killCounter(); void reviveCounter(unsigned long cc); - + //intended for use by SweepUnit only. unsigned getFreq() const { return 2048 - (period >> 1); } void setFreq(unsigned newFreq, unsigned long cc); diff --git a/libgambatte/src/sound/envelope_unit.cpp b/libgambatte/src/sound/envelope_unit.cpp index 7c81607fa0..917c73bc13 100644 --- a/libgambatte/src/sound/envelope_unit.cpp +++ b/libgambatte/src/sound/envelope_unit.cpp @@ -25,21 +25,21 @@ EnvelopeUnit::VolOnOffEvent EnvelopeUnit::nullEvent; void EnvelopeUnit::event() { const unsigned long period = nr2 & 7; - + if (period) { unsigned newVol = volume; - + if (nr2 & 8) ++newVol; else --newVol; - + if (newVol < 0x10U) { volume = newVol; - + if (volume < 2) volOnOffEvent(counter); - + counter += period << 15; } else counter = COUNTER_DISABLED; @@ -52,32 +52,32 @@ bool EnvelopeUnit::nr2Change(const unsigned newNr2) { ++volume; else if (!(nr2 & 8)) volume += 2; - + if ((nr2 ^ newNr2) & 8) volume = 0x10 - volume; - + volume &= 0xF; - + nr2 = newNr2; - + return !(newNr2 & 0xF8); } bool EnvelopeUnit::nr4Init(const unsigned long cc) { { unsigned long period = nr2 & 7; - + if (!period) period = 8; - + if (!(cc & 0x7000)) ++period; - + counter = cc - ((cc - 0x1000) & 0x7FFF) + period * 0x8000; } - + volume = nr2 >> 4; - + return !(nr2 & 0xF8); } diff --git a/libgambatte/src/sound/envelope_unit.h b/libgambatte/src/sound/envelope_unit.h index 4a0587d141..69f74d1997 100644 --- a/libgambatte/src/sound/envelope_unit.h +++ b/libgambatte/src/sound/envelope_unit.h @@ -31,13 +31,13 @@ public: virtual ~VolOnOffEvent() {} virtual void operator()(unsigned long /*cc*/) {} }; - + private: static VolOnOffEvent nullEvent; VolOnOffEvent &volOnOffEvent; unsigned char nr2; unsigned char volume; - + public: explicit EnvelopeUnit(VolOnOffEvent &volOnOffEvent = nullEvent); void event(); diff --git a/libgambatte/src/sound/length_counter.cpp b/libgambatte/src/sound/length_counter.cpp index e1e9f00862..7822fb934f 100644 --- a/libgambatte/src/sound/length_counter.cpp +++ b/libgambatte/src/sound/length_counter.cpp @@ -44,23 +44,23 @@ void LengthCounter::nr1Change(const unsigned newNr1, const unsigned nr4, const u void LengthCounter::nr4Change(const unsigned oldNr4, const unsigned newNr4, const unsigned long cycleCounter) { if (counter != COUNTER_DISABLED) lengthCounter = (counter >> 13) - (cycleCounter >> 13); - + { unsigned dec = 0; - + if (newNr4 & 0x40) { dec = ~cycleCounter >> 12 & 1; - + if (!(oldNr4 & 0x40) && lengthCounter) { if (!(lengthCounter -= dec)) disableMaster(); } } - + if ((newNr4 & 0x80) && !lengthCounter) lengthCounter = lengthMask + 1 - dec; } - + if ((newNr4 & 0x40) && lengthCounter) counter = ((cycleCounter >> 13) + lengthCounter) << 13; else @@ -69,7 +69,7 @@ void LengthCounter::nr4Change(const unsigned oldNr4, const unsigned newNr4, cons /*void LengthCounter::reset() { counter = COUNTER_DISABLED; - + if (cgb) lengthCounter = lengthMask + 1; }*/ diff --git a/libgambatte/src/sound/master_disabler.h b/libgambatte/src/sound/master_disabler.h index e9f75382e6..efbc37f114 100644 --- a/libgambatte/src/sound/master_disabler.h +++ b/libgambatte/src/sound/master_disabler.h @@ -22,7 +22,7 @@ namespace gambatte { class MasterDisabler { bool &master; - + public: MasterDisabler(bool &m) : master(m) {} virtual ~MasterDisabler() {} diff --git a/libgambatte/src/sound/sound_unit.h b/libgambatte/src/sound/sound_unit.h index b1ca691e8a..d2a00582ad 100644 --- a/libgambatte/src/sound/sound_unit.h +++ b/libgambatte/src/sound/sound_unit.h @@ -26,7 +26,7 @@ protected: unsigned long counter; public: enum { COUNTER_MAX = 0x80000000u, COUNTER_DISABLED = 0xFFFFFFFFu }; - + SoundUnit() : counter(COUNTER_DISABLED) {} virtual ~SoundUnit() {} virtual void event() = 0; diff --git a/libgambatte/src/tima.cpp b/libgambatte/src/tima.cpp index 979ffded65..276385e782 100644 --- a/libgambatte/src/tima.cpp +++ b/libgambatte/src/tima.cpp @@ -34,11 +34,11 @@ tac_(0) void Tima::loadState(const SaveState &state, const TimaInterruptRequester timaIrq) { lastUpdate_ = state.mem.timaLastUpdate; tmatime_ = state.mem.tmatime; - + tima_ = state.mem.ioamhram.get()[0x105]; tma_ = state.mem.ioamhram.get()[0x106]; tac_ = state.mem.ioamhram.get()[0x107]; - + timaIrq.setNextIrqEventTime((tac_ & 4) ? (tmatime_ != DISABLED_TIME && tmatime_ > state.cpu.cycleCounter @@ -51,14 +51,14 @@ void Tima::loadState(const SaveState &state, const TimaInterruptRequester timaIr void Tima::resetCc(const unsigned long oldCc, const unsigned long newCc, const TimaInterruptRequester timaIrq) { const unsigned long dec = oldCc - newCc; - + if (tac_ & 0x04) { updateIrq(oldCc, timaIrq); updateTima(oldCc); - + lastUpdate_ -= dec; timaIrq.setNextIrqEventTime(timaIrq.nextIrqEventTime() - dec); - + if (tmatime_ != DISABLED_TIME) tmatime_ -= dec; } @@ -106,7 +106,7 @@ void Tima::setTima(const unsigned data, const unsigned long cycleCounter, const timaIrq.setNextIrqEventTime(lastUpdate_ + ((256u - data) << timaClock[tac_ & 3]) + 3); } - + tima_ = data; } @@ -115,14 +115,14 @@ void Tima::setTma(const unsigned data, const unsigned long cycleCounter, const T updateIrq(cycleCounter, timaIrq); updateTima(cycleCounter); } - + tma_ = data; } void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const TimaInterruptRequester timaIrq, bool gbIsCgb) { if (tac_ ^ data) { unsigned long nextIrqEventTime = timaIrq.nextIrqEventTime(); - + if (tac_ & 0x04) { updateIrq(cycleCounter, timaIrq); updateTima(cycleCounter); @@ -130,10 +130,10 @@ void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const T lastUpdate_ -= (1u << (timaClock[tac_ & 3] - 1)) + 3; tmatime_ -= (1u << (timaClock[tac_ & 3] - 1)) + 3; nextIrqEventTime -= (1u << (timaClock[tac_ & 3] - 1)) + 3; - + if (cycleCounter >= nextIrqEventTime) timaIrq.flagIrq(); - + updateTima(cycleCounter); tmatime_ = DISABLED_TIME; @@ -143,18 +143,18 @@ void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const T if (data & 4) { lastUpdate_ = (cycleCounter >> timaClock[data & 3]) << timaClock[data & 3]; unsigned long diff = cycleCounter - basetime_; - + if (gbIsCgb) { if (((diff >> (timaClock[tac_ & 3] - 1)) & 1) == 1 && ((diff >> (timaClock[data & 3] - 1)) & 1) == 0) tima_++; - } + } lastUpdate_ = basetime_ + ((diff >> timaClock[data & 3]) << timaClock[data & 3]); nextIrqEventTime = lastUpdate_ + ((256u - tima_) << timaClock[data & 3]) + 3; } - + timaIrq.setNextIrqEventTime(nextIrqEventTime); } - + tac_ = data; } diff --git a/libgambatte/src/tima.h b/libgambatte/src/tima.h index a66f987837..df866a903e 100644 --- a/libgambatte/src/tima.h +++ b/libgambatte/src/tima.h @@ -25,7 +25,7 @@ namespace gambatte { class TimaInterruptRequester { InterruptRequester &intreq; - + public: explicit TimaInterruptRequester(InterruptRequester &intreq) : intreq(intreq) {} void flagIrq() const { intreq.flagIrq(4); } @@ -37,29 +37,29 @@ class Tima { unsigned long basetime_; unsigned long lastUpdate_; unsigned long tmatime_; - + unsigned char tima_; unsigned char tma_; unsigned char tac_; - + void updateIrq(const unsigned long cc, const TimaInterruptRequester timaIrq) { while (cc >= timaIrq.nextIrqEventTime()) doIrqEvent(timaIrq); } - + void updateTima(unsigned long cc); - + public: Tima(); void loadState(const SaveState &, TimaInterruptRequester timaIrq); void resetCc(unsigned long oldCc, unsigned long newCc, TimaInterruptRequester timaIrq); - + void setTima(unsigned tima, unsigned long cc, TimaInterruptRequester timaIrq); void setTma(unsigned tma, unsigned long cc, TimaInterruptRequester timaIrq); void setTac(unsigned tac, unsigned long cc, TimaInterruptRequester timaIrq, bool gbIsCgb); void resTac(unsigned long cc, TimaInterruptRequester timaIrq); unsigned tima(unsigned long cc); - + void doIrqEvent(TimaInterruptRequester timaIrq); templatevoid SyncState(NewState *ns); diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index c2b82a6495..a30bf98c01 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -23,7 +23,7 @@ namespace gambatte { -void LCD::setDmgPalette(unsigned long *const palette, const unsigned long *const dmgColors, const unsigned data) { +void LCD::setDmgPalette(unsigned long palette[], const unsigned long dmgColors[], unsigned data) { palette[0] = dmgColors[data & 3]; palette[1] = dmgColors[data >> 2 & 3]; palette[2] = dmgColors[data >> 4 & 3]; @@ -77,18 +77,18 @@ void LCD::setCgb(bool cgb) { static unsigned long mode2IrqSchedule(const unsigned statReg, const LyCounter &lyCounter, const unsigned long cycleCounter) { if (!(statReg & 0x20)) return DISABLED_TIME; - + unsigned next = lyCounter.time() - cycleCounter; - + if (lyCounter.ly() >= 143 || (lyCounter.ly() == 142 && next <= 4) || (statReg & 0x08)) { next += (153u - lyCounter.ly()) * lyCounter.lineTime(); } else { if (next <= 4) next += lyCounter.lineTime(); - + next -= 4; } - + return cycleCounter + next; } @@ -96,12 +96,12 @@ static inline unsigned long m0IrqTimeFromXpos166Time(const unsigned long xpos166 return xpos166Time + cgb - ds; } -static inline unsigned long hdmaTimeFromM0Time(const unsigned long m0Time, const bool ds) { +static inline unsigned long hdmaTimeFromM0Time(unsigned long m0Time, bool ds) { return m0Time + 1 - ds; } -static unsigned long nextHdmaTime(const unsigned long lastM0Time, - const unsigned long nextM0Time, const unsigned long cycleCounter, const bool ds) { +static unsigned long nextHdmaTime(unsigned long lastM0Time, + unsigned long nextM0Time, unsigned long cycleCounter, bool ds) { return cycleCounter < hdmaTimeFromM0Time(lastM0Time, ds) ? hdmaTimeFromM0Time(lastM0Time, ds) : hdmaTimeFromM0Time(nextM0Time, ds); @@ -125,7 +125,7 @@ void LCD::loadState(const SaveState &state, const unsigned char *const oamram) { if (ppu.lcdc() & 0x80) { nextM0Time_.predictNextM0Time(ppu); lycIrq.reschedule(ppu.lyCounter(), ppu.now()); - + eventTimes_.setm(state.ppu.pendingLcdstatIrq ? ppu.now() + 1 : static_cast(DISABLED_TIME)); eventTimes_.setm(state.ppu.oldWy != state.mem.ioamhram.get()[0x14A] @@ -140,8 +140,8 @@ void LCD::loadState(const SaveState &state, const unsigned char *const oamram) { ? nextHdmaTime(ppu.lastM0Time(), nextM0Time_.predictedNextM0Time(), ppu.now(), isDoubleSpeed()) : static_cast(DISABLED_TIME)); } else for (int i = 0; i < NUM_MEM_EVENTS; ++i) - eventTimes_.set(static_cast(i), DISABLED_TIME); - + eventTimes_.set(MemEvent(i), DISABLED_TIME); + refreshPalettes(); } @@ -200,7 +200,7 @@ static void clear(T *buf, const unsigned long color, const int dpitch) { void LCD::updateScreen(const bool blanklcd, const unsigned long cycleCounter) { update(cycleCounter); - + if (blanklcd && ppu.frameBuf().fb()) { const unsigned long color = ppu.cgb() ? gbcToRgb32(0xFFFF) : dmgColorsRgb32[0]; clear(ppu.frameBuf().fb(), color, ppu.frameBuf().pitch()); @@ -210,18 +210,18 @@ void LCD::updateScreen(const bool blanklcd, const unsigned long cycleCounter) { void LCD::resetCc(const unsigned long oldCc, const unsigned long newCc) { update(oldCc); ppu.resetCc(oldCc, newCc); - + if (ppu.lcdc() & 0x80) { const unsigned long dec = oldCc - newCc; - + nextM0Time_.invalidatePredictedNextM0Time(); lycIrq.reschedule(ppu.lyCounter(), newCc); - + for (int i = 0; i < NUM_MEM_EVENTS; ++i) { - if (eventTimes_(static_cast(i)) != DISABLED_TIME) - eventTimes_.set(static_cast(i), eventTimes_(static_cast(i)) - dec); + if (eventTimes_(MemEvent(i)) != DISABLED_TIME) + eventTimes_.set(MemEvent(i), eventTimes_(MemEvent(i)) - dec); } - + eventTimes_.set(ppu.lyCounter().time()); } } @@ -229,20 +229,20 @@ void LCD::resetCc(const unsigned long oldCc, const unsigned long newCc) { void LCD::speedChange(const unsigned long cycleCounter) { update(cycleCounter); ppu.speedChange(cycleCounter); - + if (ppu.lcdc() & 0x80) { nextM0Time_.predictNextM0Time(ppu); lycIrq.reschedule(ppu.lyCounter(), cycleCounter); - + eventTimes_.set(ppu.lyCounter().time()); eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), cycleCounter)); eventTimes_.setm(lycIrq.time()); eventTimes_.setm(ppu.lyCounter().nextFrameCycle(144 * 456, cycleCounter)); eventTimes_.setm(mode2IrqSchedule(statReg, ppu.lyCounter(), cycleCounter)); - + if (eventTimes_(MODE0_IRQ) != DISABLED_TIME && eventTimes_(MODE0_IRQ) - cycleCounter > 1) eventTimes_.setm(m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed())); - + if (hdmaIsEnabled() && eventTimes_(HDMA_REQ) - cycleCounter > 1) { eventTimes_.setm(nextHdmaTime(ppu.lastM0Time(), nextM0Time_.predictedNextM0Time(), cycleCounter, isDoubleSpeed())); @@ -261,7 +261,7 @@ unsigned long LCD::m0TimeOfCurrentLine(const unsigned long cc) { update(cc); nextM0Time_.predictNextM0Time(ppu); } - + return gambatte::m0TimeOfCurrentLine(ppu.lyCounter().time(), ppu.lastM0Time(), nextM0Time_.predictedNextM0Time()); } @@ -269,7 +269,7 @@ static bool isHdmaPeriod(const LyCounter &lyCounter, const unsigned long m0TimeOfCurrentLy, const unsigned long cycleCounter) { const unsigned timeToNextLy = lyCounter.time() - cycleCounter; - + return /*(ppu.lcdc & 0x80) && */lyCounter.ly() < 144 && timeToNextLy > 4 && cycleCounter >= hdmaTimeFromM0Time(m0TimeOfCurrentLy, lyCounter.isDoubleSpeed()); } @@ -280,27 +280,27 @@ void LCD::enableHdma(const unsigned long cycleCounter) { nextM0Time_.predictNextM0Time(ppu); } else if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - + if (isHdmaPeriod(ppu.lyCounter(), gambatte::m0TimeOfCurrentLine(ppu.lyCounter().time(), ppu.lastM0Time(), nextM0Time_.predictedNextM0Time()), cycleCounter)) { eventTimes_.flagHdmaReq(); } - + eventTimes_.setm(nextHdmaTime(ppu.lastM0Time(), nextM0Time_.predictedNextM0Time(), cycleCounter, isDoubleSpeed())); } void LCD::disableHdma(const unsigned long cycleCounter) { if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - + eventTimes_.setm(DISABLED_TIME); } bool LCD::vramAccessible(const unsigned long cycleCounter) { if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - + return !(ppu.lcdc() & 0x80) || ppu.lyCounter().ly() >= 144 || ppu.lyCounter().lineCycles(cycleCounter) < 80U || cycleCounter + isDoubleSpeed() - ppu.cgb() + 2 >= m0TimeOfCurrentLine(cycleCounter); @@ -309,7 +309,7 @@ bool LCD::vramAccessible(const unsigned long cycleCounter) { bool LCD::cgbpAccessible(const unsigned long cycleCounter) { if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - + return !(ppu.lcdc() & 0x80) || ppu.lyCounter().ly() >= 144 || ppu.lyCounter().lineCycles(cycleCounter) < 80U + isDoubleSpeed() || cycleCounter >= m0TimeOfCurrentLine(cycleCounter) + 3 - isDoubleSpeed(); @@ -319,17 +319,17 @@ void LCD::doCgbColorChange(unsigned char *const pdata, unsigned long *const palette, unsigned index, const unsigned data) { pdata[index] = data; index >>= 1; - palette[index] = gbcToRgb32(pdata[index << 1] | pdata[(index << 1) + 1] << 8); + palette[index] = gbcToRgb32(pdata[index * 2] | pdata[(index * 2) + 1] << 8); } -void LCD::doCgbBgColorChange(unsigned index, const unsigned data, const unsigned long cycleCounter) { +void LCD::doCgbBgColorChange(unsigned index, unsigned data, unsigned long cycleCounter) { if (cgbpAccessible(cycleCounter)) { update(cycleCounter); doCgbColorChange(bgpData, ppu.bgPalette(), index, data); } } -void LCD::doCgbSpColorChange(unsigned index, const unsigned data, const unsigned long cycleCounter) { +void LCD::doCgbSpColorChange(unsigned index, unsigned data, unsigned long cycleCounter) { if (cgbpAccessible(cycleCounter)) { update(cycleCounter); doCgbColorChange(objpData, ppu.spPalette(), index, data); @@ -339,7 +339,7 @@ void LCD::doCgbSpColorChange(unsigned index, const unsigned data, const unsigned bool LCD::oamReadable(const unsigned long cycleCounter) { if (!(ppu.lcdc() & 0x80) || ppu.inactivePeriodAfterDisplayEnable(cycleCounter)) return true; - + if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); @@ -352,7 +352,7 @@ bool LCD::oamReadable(const unsigned long cycleCounter) { bool LCD::oamWritable(const unsigned long cycleCounter) { if (!(ppu.lcdc() & 0x80) || ppu.inactivePeriodAfterDisplayEnable(cycleCounter)) return true; - + if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); @@ -387,7 +387,7 @@ void LCD::wyChange(const unsigned newValue, const unsigned long cycleCounter) { update(cycleCounter + 1); ppu.setWy(newValue); // mode3CyclesChange(); // should be safe to wait until after wy2 delay, because no mode3 events are close to when wy1 is read. - + // wy2 is a delayed version of wy. really just slowness of ly == wy comparison. if (ppu.cgb() && (ppu.lcdc() & 0x80)) { eventTimes_.setm(cycleCounter + 5); @@ -420,7 +420,7 @@ void LCD::oamChange(const unsigned long cycleCounter) { void LCD::oamChange(const unsigned char *const oamram, const unsigned long cycleCounter) { update(cycleCounter); ppu.oamChange(oamram, cycleCounter); - + if (ppu.lcdc() & 0x80) eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), cycleCounter)); } @@ -428,53 +428,53 @@ void LCD::oamChange(const unsigned char *const oamram, const unsigned long cycle void LCD::lcdcChange(const unsigned data, const unsigned long cycleCounter) { const unsigned oldLcdc = ppu.lcdc(); update(cycleCounter); - + if ((oldLcdc ^ data) & 0x80) { ppu.setLcdc(data, cycleCounter); - + if (data & 0x80) { lycIrq.lcdReset(); m0Irq_.lcdReset(statReg, lycIrq.lycReg()); - + if (lycIrq.lycReg() == 0 && (statReg & 0x40)) eventTimes_.flagIrq(2); nextM0Time_.predictNextM0Time(ppu); lycIrq.reschedule(ppu.lyCounter(), cycleCounter); - + eventTimes_.set(ppu.lyCounter().time()); eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), cycleCounter)); eventTimes_.setm(lycIrq.time()); eventTimes_.setm(ppu.lyCounter().nextFrameCycle(144 * 456, cycleCounter)); eventTimes_.setm(mode2IrqSchedule(statReg, ppu.lyCounter(), cycleCounter)); - + if (statReg & 0x08) eventTimes_.setm(m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed())); - + if (hdmaIsEnabled()) { eventTimes_.setm(nextHdmaTime(ppu.lastM0Time(), nextM0Time_.predictedNextM0Time(), cycleCounter, isDoubleSpeed())); } } else for (int i = 0; i < NUM_MEM_EVENTS; ++i) - eventTimes_.set(static_cast(i), DISABLED_TIME); + eventTimes_.set(MemEvent(i), DISABLED_TIME); } else if (data & 0x80) { if (ppu.cgb()) { ppu.setLcdc((oldLcdc & ~0x14) | (data & 0x14), cycleCounter); - + if ((oldLcdc ^ data) & 0x04) eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), cycleCounter)); - + update(cycleCounter + isDoubleSpeed() + 1); ppu.setLcdc(data, cycleCounter + isDoubleSpeed() + 1); - + if ((oldLcdc ^ data) & 0x20) mode3CyclesChange(); } else { ppu.setLcdc(data, cycleCounter); - + if ((oldLcdc ^ data) & 0x04) eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), cycleCounter)); - + if ((oldLcdc ^ data) & 0x22) mode3CyclesChange(); } @@ -512,7 +512,7 @@ void LCD::lcdstatChange(unsigned const data, unsigned long const cycleCounter) { unsigned const old = statReg; statReg = data; lycIrq.statRegChange(data, ppu.lyCounter(), cycleCounter); - + if (ppu.lcdc() & 0x80) { int const timeToNextLy = ppu.lyCounter().time() - cycleCounter; LyCnt const lycCmp = getLycCmpLy(ppu.lyCounter(), cycleCounter); @@ -565,12 +565,12 @@ void LCD::lcdstatChange(unsigned const data, unsigned long const cycleCounter) { eventTimes_.setm(mode2IrqSchedule(data, ppu.lyCounter(), cycleCounter)); eventTimes_.setm(lycIrq.time()); } - + m2IrqStatReg_ = eventTimes_(MODE2_IRQ) - cycleCounter > (ppu.cgb() - isDoubleSpeed()) * 4U ? data : (m2IrqStatReg_ & 0x10) | (statReg & ~0x10); m1IrqStatReg_ = eventTimes_(MODE1_IRQ) - cycleCounter > (ppu.cgb() - isDoubleSpeed()) * 4U ? data : (m1IrqStatReg_ & 0x08) | (statReg & ~0x08); - + m0Irq_.statRegChange(data, eventTimes_(MODE0_IRQ), cycleCounter, ppu.cgb()); } @@ -583,16 +583,16 @@ void LCD::lycRegChange(unsigned const data, unsigned long const cycleCounter) { if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - m0Irq_.lycRegChange(data, eventTimes_(MODE0_IRQ), cycleCounter, isDoubleSpeed(), ppu.cgb()); + m0Irq_.lycRegChange(data, eventTimes_(MODE0_IRQ), cycleCounter, isDoubleSpeed(), ppu.cgb()); lycIrq.lycRegChange(data, ppu.lyCounter(), cycleCounter); - + if (!(ppu.lcdc() & 0x80)) return; - + eventTimes_.setm(lycIrq.time()); int const timeToNextLy = ppu.lyCounter().time() - cycleCounter; - + if ((statReg & 0x40) && data < 154 && (ppu.lyCounter().ly() < 144 ? !(statReg & 0x08) || cycleCounter < m0TimeOfCurrentLine(cycleCounter) || timeToNextLy <= 4 << ppu.cgb() @@ -649,22 +649,22 @@ inline void LCD::doMode2IrqEvent() { const unsigned ly = eventTimes_(LY_COUNT) - eventTimes_(MODE2_IRQ) < 8 ? (ppu.lyCounter().ly() == 153 ? 0 : ppu.lyCounter().ly() + 1) : ppu.lyCounter().ly(); - + if ((ly != 0 || !(m2IrqStatReg_ & 0x10)) && (!(m2IrqStatReg_ & 0x40) || (lycIrq.lycReg() != 0 ? ly != (lycIrq.lycReg() + 1U) : ly > 1))) { eventTimes_.flagIrq(2); } - + m2IrqStatReg_ = statReg; - + if (!(statReg & 0x08)) { unsigned long nextTime = eventTimes_(MODE2_IRQ) + ppu.lyCounter().lineTime(); - + if (ly == 0) { nextTime -= 4; } else if (ly == 143) nextTime += ppu.lyCounter().lineTime() * 10 + 4; - + eventTimes_.setm(nextTime); } else eventTimes_.setm(eventTimes_(MODE2_IRQ) + (70224 << isDoubleSpeed())); @@ -679,7 +679,7 @@ inline void LCD::event() { m1IrqStatReg_ = statReg; eventTimes_.setm(eventTimes_(MODE1_IRQ) + (70224 << isDoubleSpeed())); break; - + case LYC_IRQ: { unsigned char ifreg = 0; lycIrq.doEvent(&ifreg, ppu.lyCounter()); @@ -687,48 +687,48 @@ inline void LCD::event() { eventTimes_.setm(lycIrq.time()); break; } - + case SPRITE_MAP: eventTimes_.setm(ppu.doSpriteMapEvent(eventTimes_(SPRITE_MAP))); mode3CyclesChange(); break; - + case HDMA_REQ: eventTimes_.flagHdmaReq(); nextM0Time_.predictNextM0Time(ppu); eventTimes_.setm(hdmaTimeFromM0Time(nextM0Time_.predictedNextM0Time(), isDoubleSpeed())); break; - + case MODE2_IRQ: doMode2IrqEvent(); break; - + case MODE0_IRQ: { unsigned char ifreg = 0; m0Irq_.doEvent(&ifreg, ppu.lyCounter().ly(), statReg, lycIrq.lycReg()); eventTimes_.flagIrq(ifreg); } - - eventTimes_.setm((statReg & 0x08) + + eventTimes_.setm(statReg & 0x08 ? m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed()) : static_cast(DISABLED_TIME)); break; - + case ONESHOT_LCDSTATIRQ: eventTimes_.flagIrq(2); eventTimes_.setm(DISABLED_TIME); break; - + case ONESHOT_UPDATEWY2: ppu.updateWy2(); mode3CyclesChange(); eventTimes_.setm(DISABLED_TIME); break; } - + break; - + case LY_COUNT: ppu.doLyCountEvent(); eventTimes_.set(ppu.lyCounter().time()); @@ -741,12 +741,12 @@ inline void LCD::event() { void LCD::update(const unsigned long cycleCounter) { if (!(ppu.lcdc() & 0x80)) return; - + while (cycleCounter >= eventTimes_.nextEventTime()) { ppu.update(eventTimes_.nextEventTime()); event(); } - + ppu.update(cycleCounter); } diff --git a/libgambatte/src/video.h b/libgambatte/src/video.h index a42bd5608f..7b5628b938 100644 --- a/libgambatte/src/video.h +++ b/libgambatte/src/video.h @@ -31,7 +31,7 @@ namespace gambatte { class VideoInterruptRequester { InterruptRequester * intreq; - + public: explicit VideoInterruptRequester(InterruptRequester * intreq) : intreq(intreq) {} void flagHdmaReq() const { gambatte::flagHdmaReq(intreq); } @@ -42,40 +42,40 @@ public: class M0Irq { unsigned char statReg_; unsigned char lycReg_; - + public: M0Irq() : statReg_(0), lycReg_(0) {} - + void lcdReset(const unsigned statReg, const unsigned lycReg) { statReg_ = statReg; lycReg_ = lycReg; } - + void statRegChange(const unsigned statReg, const unsigned long nextM0IrqTime, const unsigned long cc, const bool cgb) { if (nextM0IrqTime - cc > cgb * 2U) statReg_ = statReg; } - + void lycRegChange(const unsigned lycReg, const unsigned long nextM0IrqTime, const unsigned long cc, const bool ds, const bool cgb) { if (nextM0IrqTime - cc > cgb * 5 + 1U - ds) lycReg_ = lycReg; } - + void doEvent(unsigned char *const ifreg, const unsigned ly, const unsigned statReg, const unsigned lycReg) { if (((statReg_ | statReg) & 0x08) && (!(statReg_ & 0x40) || ly != lycReg_)) *ifreg |= 2; - + statReg_ = statReg; lycReg_ = lycReg; } - + void loadState(const SaveState &state) { lycReg_ = state.ppu.m0lyc; statReg_ = state.mem.ioamhram.get()[0x141]; } - + unsigned statReg() const { return statReg_; } template @@ -90,33 +90,33 @@ class LCD { enum Event { MEM_EVENT, LY_COUNT }; enum { NUM_EVENTS = LY_COUNT + 1 }; enum MemEvent { ONESHOT_LCDSTATIRQ, ONESHOT_UPDATEWY2, MODE1_IRQ, LYC_IRQ, SPRITE_MAP, HDMA_REQ, MODE2_IRQ, MODE0_IRQ }; enum { NUM_MEM_EVENTS = MODE0_IRQ + 1 }; - + class EventTimes { MinKeeper eventMin_; MinKeeper memEventMin_; VideoInterruptRequester memEventRequester_; - + void setMemEvent() { const unsigned long nmet = nextMemEventTime(); eventMin_.setValue(nmet); memEventRequester_.setNextEventTime(nmet); } - + public: explicit EventTimes(const VideoInterruptRequester memEventRequester) : memEventRequester_(memEventRequester) {} - + Event nextEvent() const { return static_cast(eventMin_.min()); } unsigned long nextEventTime() const { return eventMin_.minValue(); } unsigned long operator()(const Event e) const { return eventMin_.value(e); } template void set(const unsigned long time) { eventMin_.setValue(time); } void set(const Event e, const unsigned long time) { eventMin_.setValue(e, time); } - + MemEvent nextMemEvent() const { return static_cast(memEventMin_.min()); } unsigned long nextMemEventTime() const { return memEventMin_.minValue(); } unsigned long operator()(const MemEvent e) const { return memEventMin_.value(e); } template void setm(const unsigned long time) { memEventMin_.setValue(time); setMemEvent(); } void set(const MemEvent e, const unsigned long time) { memEventMin_.setValue(e, time); setMemEvent(); } - + void flagIrq(const unsigned bit) { memEventRequester_.flagIrq(bit); } void flagHdmaReq() { memEventRequester_.flagHdmaReq(); } @@ -128,7 +128,7 @@ class LCD { //SSS(memEventRequester_); // not needed } }; - + PPU ppu; unsigned long dmgColorsRgb32[3 * 4]; unsigned long cgbColorsRgb32[32768]; @@ -144,7 +144,7 @@ class LCD { unsigned char m2IrqStatReg_; unsigned char m1IrqStatReg_; - static void setDmgPalette(unsigned long *palette, const unsigned long *dmgColors, unsigned data); + static void setDmgPalette(unsigned long palette[], const unsigned long dmgColors[], unsigned data); void setDmgPaletteColor(unsigned index, unsigned long rgb32); unsigned long gbcToRgb32(const unsigned bgr15); @@ -158,7 +158,7 @@ class LCD { unsigned long m0TimeOfCurrentLine(unsigned long cc); bool cgbpAccessible(unsigned long cycleCounter); - + void mode3CyclesChange(); void doCgbBgColorChange(unsigned index, unsigned data, unsigned long cycleCounter); void doCgbSpColorChange(unsigned index, unsigned data, unsigned long cycleCounter); @@ -242,7 +242,7 @@ public: update(cycleCounter); lyReg = ppu.lyCounter().ly(); - + if (lyReg == 153) { if (isDoubleSpeed()) { if (ppu.lyCounter().time() - cycleCounter <= 456 * 2 - 8) @@ -261,13 +261,13 @@ public: void lcdcChange(unsigned data, unsigned long cycleCounter); void lcdstatChange(unsigned data, unsigned long cycleCounter); void lycRegChange(unsigned data, unsigned long cycleCounter); - + void enableHdma(unsigned long cycleCounter); void disableHdma(unsigned long cycleCounter); bool hdmaIsEnabled() const { return eventTimes_(HDMA_REQ) != DISABLED_TIME; } - + void update(unsigned long cycleCounter); - + bool isCgb() const { return ppu.cgb(); } bool isDoubleSpeed() const { return ppu.lyCounter().isDoubleSpeed(); } diff --git a/libgambatte/src/video/ly_counter.cpp b/libgambatte/src/video/ly_counter.cpp index 4b978dfeee..d589bada73 100644 --- a/libgambatte/src/video/ly_counter.cpp +++ b/libgambatte/src/video/ly_counter.cpp @@ -30,28 +30,28 @@ LyCounter::LyCounter() void LyCounter::doEvent() { ++ly_; - + if (ly_ == 154) ly_ = 0; - + time_ = time_ + lineTime_; } unsigned long LyCounter::nextLineCycle(const unsigned lineCycle, const unsigned long cycleCounter) const { unsigned long tmp = time_ + (lineCycle << ds); - + if (tmp - cycleCounter > lineTime_) tmp -= lineTime_; - + return tmp; } unsigned long LyCounter::nextFrameCycle(const unsigned long frameCycle, const unsigned long cycleCounter) const { unsigned long tmp = time_ + (((153U - ly()) * 456U + frameCycle) << ds); - + if (tmp - cycleCounter > 70224U << ds) tmp -= 70224U << ds; - + return tmp; } diff --git a/libgambatte/src/video/ly_counter.h b/libgambatte/src/video/ly_counter.h index 9aca9877b1..a493ce55a5 100644 --- a/libgambatte/src/video/ly_counter.h +++ b/libgambatte/src/video/ly_counter.h @@ -30,20 +30,20 @@ class LyCounter { unsigned short lineTime_; unsigned char ly_; bool ds; - + public: LyCounter(); void doEvent(); bool isDoubleSpeed() const { return ds; } - + unsigned long frameCycles(const unsigned long cc) const { return ly_ * 456ul + lineCycles(cc); } - + unsigned lineCycles(const unsigned long cc) const { return 456u - ((time_ - cc) >> isDoubleSpeed()); } - + unsigned lineTime() const { return lineTime_; } unsigned ly() const { return ly_; } unsigned long nextLineCycle(unsigned lineCycle, unsigned long cycleCounter) const; diff --git a/libgambatte/src/video/lyc_irq.cpp b/libgambatte/src/video/lyc_irq.cpp index 024ef35233..6b95ac6e57 100644 --- a/libgambatte/src/video/lyc_irq.cpp +++ b/libgambatte/src/video/lyc_irq.cpp @@ -45,20 +45,20 @@ void LycIrq::regChange(const unsigned statReg, const unsigned lycReg, const LyCo statRegSrc_ = statReg; lycRegSrc_ = lycReg; time_ = std::min(time_, timeSrc); - + if (cgb_) { if (time_ - cc > 8 || (timeSrc != time_ && time_ - cc > 4U - lyCounter.isDoubleSpeed() * 4U)) lycReg_ = lycReg; - + if (time_ - cc > 4U - lyCounter.isDoubleSpeed() * 4U) statReg_ = statReg; } else { if (time_ - cc > 4 || timeSrc != time_) lycReg_ = lycReg; - + if (time_ - cc > 4 || lycReg_ != 0) statReg_ = statReg; - + statReg_ = (statReg_ & 0x40) | (statReg & ~0x40); } } @@ -66,13 +66,13 @@ void LycIrq::regChange(const unsigned statReg, const unsigned lycReg, const LyCo void LycIrq::doEvent(unsigned char *const ifreg, const LyCounter &lyCounter) { if ((statReg_ | statRegSrc_) & 0x40) { const unsigned cmpLy = lyCounter.time() - time_ < lyCounter.lineTime() ? 0 : lyCounter.ly(); - + if (lycReg_ == cmpLy && (lycReg_ - 1U < 144U - 1U ? !(statReg_ & 0x20) : !(statReg_ & 0x10))) { *ifreg |= 2; } } - + lycReg_ = lycRegSrc_; statReg_ = statRegSrc_; time_ = schedule(statReg_, lycReg_, lyCounter, time_); diff --git a/libgambatte/src/video/lyc_irq.h b/libgambatte/src/video/lyc_irq.h index 510039d996..497c745d46 100644 --- a/libgambatte/src/video/lyc_irq.h +++ b/libgambatte/src/video/lyc_irq.h @@ -33,9 +33,9 @@ class LycIrq { unsigned char lycReg_; unsigned char statReg_; bool cgb_; - + void regChange(unsigned statReg, unsigned lycReg, const LyCounter &lyCounter, unsigned long cc); - + public: LycIrq(); void doEvent(unsigned char *ifreg, const LyCounter &lyCounter); @@ -45,11 +45,11 @@ public: void setCgb(const bool cgb) { cgb_ = cgb; } void lcdReset(); void reschedule(const LyCounter & lyCounter, unsigned long cc); - + void statRegChange(unsigned statReg, const LyCounter &lyCounter, unsigned long cc) { regChange(statReg, lycRegSrc_, lyCounter, cc); } - + void lycRegChange(unsigned lycReg, const LyCounter &lyCounter, unsigned long cc) { regChange(statRegSrc_, lycReg, lyCounter, cc); } diff --git a/libgambatte/src/video/next_m0_time.h b/libgambatte/src/video/next_m0_time.h index 0a91c4d330..5937b0734a 100644 --- a/libgambatte/src/video/next_m0_time.h +++ b/libgambatte/src/video/next_m0_time.h @@ -7,7 +7,7 @@ namespace gambatte { class NextM0Time { unsigned predictedNextM0Time_; - + public: NextM0Time() : predictedNextM0Time_(0) {} void predictNextM0Time(const class PPU &v); diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index 70d7db9e54..d5c5e9607a 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -78,7 +78,7 @@ namespace M3Loop { DECLARE_FUNC(4, 0x84); DECLARE_FUNC(5, 0x85); } - + namespace LoadSprites { DECLARE_FUNC(0, 0x88); DECLARE_FUNC(1, 0x89); @@ -87,7 +87,7 @@ namespace M3Loop { DECLARE_FUNC(4, 0x8C); DECLARE_FUNC(5, 0x8D); } - + namespace StartWindowDraw { DECLARE_FUNC(0, 0x90); DECLARE_FUNC(1, 0x91); @@ -129,25 +129,25 @@ namespace M2 { nextCall(m3StartLineCycle(p.cgb), M3Start::f0_, p); } } - + namespace LyNon0 { static void f0(PPUPriv &p) { p.weMaster |= (p.lcdc & 0x20) && p.lyCounter.ly() == p.wy; nextCall(weMasterCheckAfterLyIncLineCycle(p.cgb) - weMasterCheckPriorToLyIncLineCycle(p.cgb), f1_, p); } - + static void f1(PPUPriv &p) { p.weMaster |= (p.lcdc & 0x20) && p.lyCounter.ly() + 1 == p.wy; nextCall(456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb), M3Start::f0_, p); } } - + /*struct SpriteLess { bool operator()(const Sprite lhs, const Sprite rhs) const { return lhs.spx < rhs.spx; } }; - + static void f0(PPUPriv &p) { std::memset(&p.spLut, 0, sizeof p.spLut); p.reg0 = 0; @@ -155,37 +155,37 @@ namespace M2 { p.nextCallPtr = &f1_; f1(p); } - + static void f1(PPUPriv &p) { int cycles = p.cycles; unsigned oampos = p.reg0; unsigned nextSprite = p.nextSprite; const unsigned nly = (p.lyCounter.ly() + 1 == 154 ? 0 : p.lyCounter.ly() + 1) + ((p.lyCounter.time()-(p.now-p.cycles)) <= 4); const bool ls = p.spriteMapper.largeSpritesSource(); - + do { const unsigned spy = p.spriteMapper.oamram()[oampos ]; const unsigned spx = p.spriteMapper.oamram()[oampos+1]; const unsigned ydiff = spy - nly; - + if (ls ? ydiff < 16u : ydiff - 8u < 8u) { p.spriteList[nextSprite].spx = spx; p.spriteList[nextSprite].line = 15u - ydiff; p.spriteList[nextSprite].oampos = oampos; - + if (++nextSprite == 10) { cycles -= (0xA0 - 4 - oampos) >> 1; oampos = 0xA0 - 4; } } - + oampos += 4; } while ((cycles-=2) >= 0 && oampos != 0xA0); - + p.reg0 = oampos; p.nextSprite = nextSprite; p.cycles = cycles; - + if (oampos == 0xA0) { insertionSort(p.spriteList, p.spriteList + nextSprite, SpriteLess()); p.spriteList[nextSprite].spx = 0xFF; @@ -198,23 +198,23 @@ namespace M2 { namespace M3Start { static void f0(PPUPriv &p) { p.xpos = 0; - + if (p.winDrawState & p.lcdc >> 5 & WIN_DRAW_START) { p.winDrawState = WIN_DRAW_STARTED; p.wscx = 8 + (p.scx & 7); ++p.winYPos; } else p.winDrawState = 0; - + p.nextCallPtr = &f1_; f1(p); } - + static void f1(PPUPriv &p) { while (p.xpos < MAX_M3START_CYCLES) { if ((p.xpos & 7) == (p.scx & 7)) break; - + switch (p.xpos & 7) { case 0: if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { @@ -229,31 +229,31 @@ namespace M3Start { case 2: { const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - + p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; } - + break; case 4: { const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; } - + break; } - + ++p.xpos; - + if (--p.cycles < 0) return; } - + { const unsigned ly = p.lyCounter.ly(); const unsigned numSprites = p.spriteMapper.numSprites(ly); @@ -269,14 +269,14 @@ namespace M3Start { p.spriteList[i].oampos = pos * 2; p.spwordList[i] = 0; } - + p.spriteList[numSprites].spx = 0xFF; p.nextSprite = 0; } - + p.xpos = 0; p.endx = 8 - (p.scx & 7); - + static const PPUState *const flut[8] = { &M3Loop::Tile::f0_, &M3Loop::Tile::f1_, @@ -287,7 +287,7 @@ namespace M3Start { &M3Loop::Tile::f5_, &M3Loop::Tile::f5_ }; - + nextCall(1-p.cgb, *flut[p.scx & 7], p); } } @@ -298,66 +298,66 @@ namespace M3Loop { const unsigned tileIndexSign = ~p.lcdc << 3 & 0x80; const unsigned char *const tileDataLine = p.vram + tileIndexSign * 32 + tileline * 2; int xpos = p.xpos; - + do { int nextSprite = p.nextSprite; - - if (static_cast(p.spriteList[nextSprite].spx) < xpos + 8) { + + if (int(p.spriteList[nextSprite].spx) < xpos + 8) { int cycles = p.cycles - 8; - + if (p.lcdc & 2) { - cycles -= std::max(11 - (static_cast(p.spriteList[nextSprite].spx) - xpos), 6); - - for (unsigned i = nextSprite + 1; static_cast(p.spriteList[i].spx) < xpos + 8; ++i) + cycles -= std::max(11 - (int(p.spriteList[nextSprite].spx) - xpos), 6); + + for (unsigned i = nextSprite + 1; int(p.spriteList[i].spx) < xpos + 8; ++i) cycles -= 6; - + if (cycles < 0) break; - + p.cycles = cycles; - + do { unsigned reg0, reg1 = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 2] * 16; const unsigned attrib = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 3]; - + { const unsigned spline = (attrib & 0x40 ? p.spriteList[nextSprite].line ^ 15 : p.spriteList[nextSprite].line) * 2; reg0 = p.vram[(p.lcdc & 4 ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) ]; reg1 = p.vram[(p.lcdc & 4 ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) + 1]; } - + p.spwordList[nextSprite] = expand_lut[reg0 + (attrib << 3 & 0x100)] + expand_lut[reg1 + (attrib << 3 & 0x100)] * 2; p.spriteList[nextSprite].attrib = attrib; ++nextSprite; - } while (static_cast(p.spriteList[nextSprite].spx) < xpos + 8); + } while (int(p.spriteList[nextSprite].spx) < xpos + 8); } else { if (cycles < 0) break; - + p.cycles = cycles; - + do { ++nextSprite; - } while (static_cast(p.spriteList[nextSprite].spx) < xpos + 8); + } while (int(p.spriteList[nextSprite].spx) < xpos + 8); } - + p.nextSprite = nextSprite; - } else if (nextSprite-1 < 0 || static_cast(p.spriteList[nextSprite-1].spx) <= xpos - 8) { + } else if (nextSprite-1 < 0 || int(p.spriteList[nextSprite-1].spx) <= xpos - 8) { if (!(p.cycles & ~7)) break; - - int n = (( xend + 7 < static_cast(p.spriteList[nextSprite].spx) - ? xend + 7 : static_cast(p.spriteList[nextSprite].spx)) - xpos) & ~7; + + int n = (( xend + 7 < int(p.spriteList[nextSprite].spx) + ? xend + 7 : int(p.spriteList[nextSprite].spx)) - xpos) & ~7; n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; p.cycles -= n; - + unsigned ntileword = p.ntileword; uint_least32_t * dst = dbufline + xpos - 8; uint_least32_t *const dstend = dst + n; xpos += n; - + if (!(p.lcdc & 1)) { do { *dst++ = p.bgPalette[0]; } while (dst != dstend); tileMapXpos += n >> 3; @@ -375,28 +375,28 @@ namespace M3Loop { dst[6] = p.bgPalette[(ntileword & 0x3000) >> 12]; dst[7] = p.bgPalette[ ntileword >> 14]; dst += 8; - + unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; tileMapXpos = (tileMapXpos & 0x1F) + 1; ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; } while (dst != dstend); - + p.ntileword = ntileword; continue; } else { int cycles = p.cycles - 8; - + if (cycles < 0) break; - + p.cycles = cycles; } - + { uint_least32_t *const dst = dbufline + (xpos - 8); const unsigned tileword = -(p.lcdc & 1U) & p.ntileword; - + dst[0] = p.bgPalette[ tileword & 0x0003 ]; dst[1] = p.bgPalette[(tileword & 0x000C) >> 2]; dst[2] = p.bgPalette[(tileword & 0x0030) >> 4]; @@ -405,21 +405,21 @@ namespace M3Loop { dst[5] = p.bgPalette[(tileword & 0x0C00) >> 10]; dst[6] = p.bgPalette[(tileword & 0x3000) >> 12]; dst[7] = p.bgPalette[ tileword >> 14]; - + int i = nextSprite - 1; - + if(p.layersMask & LAYER_MASK_OBJ) { if (!(p.lcdc & 2)) { do { - const int pos = static_cast(p.spriteList[i].spx) - xpos; + const int pos = int(p.spriteList[i].spx) - xpos; p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } else { do { int n; - int pos = static_cast(p.spriteList[i].spx) - xpos; + int pos = int(p.spriteList[i].spx) - xpos; if (pos < 0) { n = pos + 8; @@ -471,24 +471,24 @@ namespace M3Loop { p.spwordList[i] = spword; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } } } - + { unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; tileMapXpos = (tileMapXpos & 0x1F) + 1; p.ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; } - + xpos = xpos + 8; } while (xpos < xend); - + p.xpos = xpos; } - + static void doFullTilesUnrolledCgb(PPUPriv &p, const int xend, uint_least32_t *const dbufline, const unsigned char *const tileMapLine, const unsigned tileline, unsigned tileMapXpos) { int xpos = p.xpos; @@ -501,26 +501,26 @@ namespace M3Loop { dbufline[i] = p.bgPalette[0]; //guessing? return; } - + do { int nextSprite = p.nextSprite; - - if (static_cast(p.spriteList[nextSprite].spx) < xpos + 8) { + + if (int(p.spriteList[nextSprite].spx) < xpos + 8) { int cycles = p.cycles - 8; - cycles -= std::max(11 - (static_cast(p.spriteList[nextSprite].spx) - xpos), 6); - - for (unsigned i = nextSprite + 1; static_cast(p.spriteList[i].spx) < xpos + 8; ++i) + cycles -= std::max(11 - (int(p.spriteList[nextSprite].spx) - xpos), 6); + + for (unsigned i = nextSprite + 1; int(p.spriteList[i].spx) < xpos + 8; ++i) cycles -= 6; - + if (cycles < 0) break; - + p.cycles = cycles; - + do { unsigned reg0, reg1 = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 2] * 16; const unsigned attrib = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 3]; - + { const unsigned spline = (attrib & 0x40 ? p.spriteList[nextSprite].line ^ 15 : p.spriteList[nextSprite].line) * 2; @@ -529,29 +529,29 @@ namespace M3Loop { reg1 = vram[(attrib << 10 & 0x2000) + (p.lcdc & 4 ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) + 1]; } - + p.spwordList[nextSprite] = expand_lut[reg0 + (attrib << 3 & 0x100)] + expand_lut[reg1 + (attrib << 3 & 0x100)] * 2; p.spriteList[nextSprite].attrib = attrib; ++nextSprite; - } while (static_cast(p.spriteList[nextSprite].spx) < xpos + 8); - + } while (int(p.spriteList[nextSprite].spx) < xpos + 8); + p.nextSprite = nextSprite; - } else if (nextSprite-1 < 0 || static_cast(p.spriteList[nextSprite-1].spx) <= xpos - 8) { + } else if (nextSprite-1 < 0 || int(p.spriteList[nextSprite-1].spx) <= xpos - 8) { if (!(p.cycles & ~7)) break; - - int n = (( xend + 7 < static_cast(p.spriteList[nextSprite].spx) - ? xend + 7 : static_cast(p.spriteList[nextSprite].spx)) - xpos) & ~7; + + int n = (( xend + 7 < int(p.spriteList[nextSprite].spx) + ? xend + 7 : int(p.spriteList[nextSprite].spx)) - xpos) & ~7; n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; p.cycles -= n; - + unsigned ntileword = p.ntileword; unsigned nattrib = p.nattrib; uint_least32_t * dst = dbufline + xpos - 8; uint_least32_t *const dstend = dst + n; xpos += n; - + do { const unsigned long *const bgPalette = p.bgPalette + (nattrib & 7) * 4; dst[0] = bgPalette[ ntileword & 0x0003 ]; @@ -563,36 +563,36 @@ namespace M3Loop { dst[6] = bgPalette[(ntileword & 0x3000) >> 12]; dst[7] = bgPalette[ ntileword >> 14]; dst += 8; - + unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; tileMapXpos = (tileMapXpos & 0x1F) + 1; - + unsigned const tdo = tdoffset & ~(tno << 5); unsigned char const *const td = vram + tno * 16 + (nattrib & 0x40 ? tdo ^ 14 : tdo) + (nattrib << 10 & 0x2000); unsigned short const *const explut = expand_lut + (nattrib << 3 & 0x100); ntileword = explut[td[0]] + explut[td[1]] * 2; } while (dst != dstend); - + p.ntileword = ntileword; p.nattrib = nattrib; continue; } else { int cycles = p.cycles - 8; - + if (cycles < 0) break; - + p.cycles = cycles; } - + { uint_least32_t *const dst = dbufline + (xpos - 8); const unsigned tileword = p.ntileword; const unsigned attrib = p.nattrib; const unsigned long *const bgPalette = p.bgPalette + (attrib & 7) * 4; - + dst[0] = bgPalette[ tileword & 0x0003 ]; dst[1] = bgPalette[(tileword & 0x000C) >> 2]; dst[2] = bgPalette[(tileword & 0x0030) >> 4]; @@ -601,24 +601,24 @@ namespace M3Loop { dst[5] = bgPalette[(tileword & 0x0C00) >> 10]; dst[6] = bgPalette[(tileword & 0x3000) >> 12]; dst[7] = bgPalette[ tileword >> 14]; - + int i = nextSprite - 1; if(p.layersMask & LAYER_MASK_OBJ) { if (!(p.lcdc & 2)) { do { - const int pos = static_cast(p.spriteList[i].spx) - xpos; + const int pos = int(p.spriteList[i].spx) - xpos; p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } else { unsigned char idtab[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; const unsigned bgenmask = p.lcdc << 7 & 0x80; do { int n; - int pos = static_cast(p.spriteList[i].spx) - xpos; + int pos = int(p.spriteList[i].spx) - xpos; if (pos < 0) { n = pos + 8; @@ -698,7 +698,7 @@ namespace M3Loop { p.spwordList[i] = spword; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } } } @@ -707,7 +707,7 @@ namespace M3Loop { unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; unsigned const nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; tileMapXpos = (tileMapXpos & 0x1F) + 1; - + unsigned const tdo = tdoffset & ~(tno << 5); unsigned char const *const td = vram + tno * 16 + (nattrib & 0x40 ? tdo ^ 14 : tdo) + (nattrib << 10 & 0x2000); @@ -715,25 +715,25 @@ namespace M3Loop { p.ntileword = explut[td[0]] + explut[td[1]] * 2; p.nattrib = nattrib; } - + xpos = xpos + 8; } while (xpos < xend); - + p.xpos = xpos; } - + static void doFullTilesUnrolled(PPUPriv &p) { int xpos = p.xpos; - const int xend = static_cast(p.wx) < xpos || p.wx >= 168 ? 161 : static_cast(p.wx) - 7; - + const int xend = int(p.wx) < xpos || p.wx >= 168 ? 161 : int(p.wx) - 7; + if (xpos >= xend) return; - + uint_least32_t *const dbufline = p.framebuf.fbline(); const unsigned char *tileMapLine; unsigned tileline; unsigned tileMapXpos; - + if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { tileMapLine = p.vram + (p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x1800; tileMapXpos = (xpos + p.wscx) >> 3; @@ -743,75 +743,75 @@ namespace M3Loop { tileMapXpos = (p.scx + xpos + 1 - p.cgb) >> 3; tileline = (p.scy + p.lyCounter.ly()) & 7; } - + if (xpos < 8) { uint_least32_t prebuf[16]; - + if (p.cgb) { doFullTilesUnrolledCgb(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), tileMapLine, tileline, tileMapXpos); } else doFullTilesUnrolledDmg(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), tileMapLine, tileline, tileMapXpos); - + const int newxpos = p.xpos; - + if (newxpos > 8) { std::memcpy(dbufline, prebuf + (8 - xpos), (newxpos - 8) * sizeof *dbufline); } else if (newxpos < 8) return; - + if (newxpos >= xend) return; - + tileMapXpos += (newxpos - xpos) >> 3; } - + if (p.cgb) { doFullTilesUnrolledCgb(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); } else doFullTilesUnrolledDmg(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); } - + static void plotPixel(PPUPriv &p) { //ZING! const int xpos = p.xpos; const unsigned tileword = p.tileword; uint_least32_t *const fbline = p.framebuf.fbline(); - - if (static_cast(p.wx) == xpos && (p.weMaster || (p.wy2 == p.lyCounter.ly() && (p.lcdc & 0x20))) && xpos < 167) { + + if (int(p.wx) == xpos && (p.weMaster || (p.wy2 == p.lyCounter.ly() && (p.lcdc & 0x20))) && xpos < 167) { if (p.winDrawState == 0 && (p.lcdc & 0x20)) { p.winDrawState = WIN_DRAW_START | WIN_DRAW_STARTED; ++p.winYPos; } else if (!p.cgb && (p.winDrawState == 0 || xpos == 166)) p.winDrawState |= WIN_DRAW_START; } - + const unsigned twdata = tileword & ((p.lcdc & 1) | p.cgb) * 3; unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7) * 4]; - int i = static_cast(p.nextSprite) - 1; + int i = int(p.nextSprite) - 1; if(!(p.layersMask & LAYER_MASK_BG)) { pixel = p.bgPalette[0]; //guessing? clobber the tile that was read } - - if (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8) { + + if (i >= 0 && int(p.spriteList[i].spx) > xpos - 8) { unsigned spdata = 0; unsigned attrib = 0; - + if (p.cgb) { unsigned minId = 0xFF; - + do { if ((p.spwordList[i] & 3) && p.spriteList[i].oampos < minId) { spdata = p.spwordList[i] & 3; attrib = p.spriteList[i].attrib; minId = p.spriteList[i].oampos; } - + p.spwordList[i] >>= 2; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); - + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + if(p.layersMask & LAYER_MASK_OBJ) { if (spdata && (p.lcdc & 2) && (!((attrib | p.attrib) & 0x80) || !twdata || !(p.lcdc & 1))) @@ -823,11 +823,11 @@ namespace M3Loop { spdata = p.spwordList[i] & 3; attrib = p.spriteList[i].attrib; } - + p.spwordList[i] >>= 2; --i; - } while (i >= 0 && static_cast(p.spriteList[i].spx) > xpos - 8); - + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + if(p.layersMask & LAYER_MASK_OBJ) { if (spdata && (p.lcdc & 2) && (!(attrib & 0x80) || !twdata)) @@ -835,27 +835,27 @@ namespace M3Loop { } } } - + if (xpos - 8 >= 0) fbline[xpos - 8] = pixel; - + p.xpos = xpos + 1; p.tileword = tileword >> 2; } - + static void plotPixelIfNoSprite(PPUPriv &p) { if (p.spriteList[p.nextSprite].spx == p.xpos) { if (!((p.lcdc & 2) | p.cgb)) { do { ++p.nextSprite; } while (p.spriteList[p.nextSprite].spx == p.xpos); - + plotPixel(p); } } else plotPixel(p); } - + static unsigned long nextM2Time(const PPUPriv &p) { unsigned long nextm2 = p.lyCounter.isDoubleSpeed() ? p.lyCounter.time() + (weMasterCheckPriorToLyIncLineCycle(true ) + M2_DS_OFFSET) * 2 - 456 * 2 @@ -863,62 +863,62 @@ namespace M3Loop { if (p.lyCounter.ly() == 143) nextm2 += (456 * 10 + 456 - weMasterCheckPriorToLyIncLineCycle(p.cgb)) << p.lyCounter.isDoubleSpeed(); - + return nextm2; } - + static void xpos168(PPUPriv &p) { p.lastM0Time = p.now - (p.cycles << p.lyCounter.isDoubleSpeed()); - + const unsigned long nextm2 = nextM2Time(p); - + p.cycles = p.now >= nextm2 - ? (static_cast(p.now - nextm2) >> p.lyCounter.isDoubleSpeed()) - : -(static_cast(nextm2 - p.now) >> p.lyCounter.isDoubleSpeed()); - + ? (long(p.now - nextm2) >> p.lyCounter.isDoubleSpeed()) + : -(long(nextm2 - p.now) >> p.lyCounter.isDoubleSpeed()); + nextCall(0, p.lyCounter.ly() == 143 ? M2::Ly0::f0_ : M2::LyNon0::f0_, p); } - + static bool handleWinDrawStartReq(const PPUPriv &p, const int xpos, unsigned char &winDrawState) { const bool startWinDraw = (xpos < 167 || p.cgb) && (winDrawState &= WIN_DRAW_STARTED); - + if (!(p.lcdc & 0x20)) winDrawState &= ~WIN_DRAW_STARTED; - + return startWinDraw; } - + static bool handleWinDrawStartReq(PPUPriv &p) { return handleWinDrawStartReq(p, p.xpos, p.winDrawState); } - + namespace StartWindowDraw { static void inc(const PPUState &nextf, PPUPriv &p) { if (!(p.lcdc & 0x20) && p.cgb) { plotPixelIfNoSprite(p); - + if (p.xpos == p.endx) { if (p.xpos < 168) { nextCall(1,Tile::f0_,p); } else xpos168(p); - + return; } } - + nextCall(1,nextf,p); } - + static void f0(PPUPriv &p) { if (p.xpos == p.endx) { p.tileword = p.ntileword; p.attrib = p.nattrib; p.endx = p.xpos < 160 ? p.xpos + 8 : 168; } - + p.wscx = 8 - p.xpos; - + if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x1800]; p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x3800]; @@ -926,40 +926,40 @@ namespace M3Loop { p.reg1 = p.vram[(p.lcdc << 7 & 0x400) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; p.nattrib = p.vram[(p.lcdc << 7 & 0x400) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; } - + inc(f1_,p); } - + static void f1(PPUPriv &p) { inc(f2_,p); } - + static void f2(PPUPriv &p) { const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - + p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; inc(f3_,p); } - + static void f3(PPUPriv &p) { inc(f4_,p); } - + static void f4(PPUPriv &p) { const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; - + inc(f5_,p); } - + static void f5(PPUPriv &p) { inc(Tile::f0_,p); } @@ -968,7 +968,7 @@ namespace M3Loop { namespace LoadSprites { static void inc(const PPUState &nextf, PPUPriv &p) { plotPixelIfNoSprite(p); - + if (p.xpos == p.endx) { if (p.xpos < 168) { nextCall(1,Tile::f0_,p); @@ -977,68 +977,68 @@ namespace M3Loop { } else nextCall(1,nextf,p); } - + static void f0(PPUPriv &p) { p.reg1 = p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 2]; nextCall(1,f1_,p); } - + static void f1(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + p.spriteList[p.currentSprite].attrib = p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 3]; inc(f2_,p); } - + static void f2(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + const unsigned spline = ((p.spriteList[p.currentSprite].attrib & 0x40) ? p.spriteList[p.currentSprite].line ^ 15 : p.spriteList[p.currentSprite].line) * 2; p.reg0 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + ((p.lcdc & 4) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16))]; inc(f3_,p); } - + static void f3(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + inc(f4_,p); } - + static void f4(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + const unsigned spline = ((p.spriteList[p.currentSprite].attrib & 0x40) ? p.spriteList[p.currentSprite].line ^ 15 : p.spriteList[p.currentSprite].line) * 2; p.reg1 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + ((p.lcdc & 4) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16)) + 1]; inc(f5_,p); } - + static void f5(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + plotPixelIfNoSprite(p); - + unsigned entry = p.currentSprite; - + if (entry == p.nextSprite) { ++p.nextSprite; } else { entry = p.nextSprite - 1; p.spriteList[entry] = p.spriteList[p.currentSprite]; } - + p.spwordList[entry] = expand_lut[p.reg0 + (p.spriteList[entry].attrib << 3 & 0x100)] + expand_lut[p.reg1 + (p.spriteList[entry].attrib << 3 & 0x100)] * 2; p.spriteList[entry].spx = p.xpos; - + if (p.xpos == p.endx) { if (p.xpos < 168) { nextCall(1,Tile::f0_,p); @@ -1050,32 +1050,32 @@ namespace M3Loop { } } }; - + namespace Tile { static void inc(const PPUState &nextf, PPUPriv &p) { plotPixelIfNoSprite(p); - + if (p.xpos == 168) { xpos168(p); } else nextCall(1,nextf,p); } - + static void f0(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + doFullTilesUnrolled(p); - + if (p.xpos == 168) { ++p.cycles; return xpos168(p); } - + p.tileword = p.ntileword; p.attrib = p.nattrib; p.endx = p.xpos < 160 ? p.xpos + 8 : 168; - + if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW) ) { p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + ((p.xpos + p.wscx) >> 3 & 0x1F) + 0x1800]; @@ -1087,84 +1087,84 @@ namespace M3Loop { p.nattrib = p.vram[((p.lcdc << 7 | (p.scx + p.xpos + 1 - p.cgb) >> 3) & 0x41F) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; } - + inc(f1_,p); } - + static void f1(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + inc(f2_,p); } - + static void f2(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - + p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; inc(f3_,p); } - + static void f3(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + inc(f4_,p); } - + static void f4(PPUPriv &p) { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; - + plotPixelIfNoSprite(p); - + if (p.xpos == 168) { xpos168(p); } else nextCall(1,f5_,p); } - + static void f5(PPUPriv &p) { int endx = p.endx; p.nextCallPtr = &f5_; - + do { if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) return StartWindowDraw::f0(p); - + if (p.spriteList[p.nextSprite].spx == p.xpos) { if ((p.lcdc & 2) | p.cgb) { p.currentSprite = p.nextSprite; return LoadSprites::f0(p); } - + do { ++p.nextSprite; } while (p.spriteList[p.nextSprite].spx == p.xpos); } - + plotPixel(p); - + if (p.xpos == endx) { if (endx < 168) { nextCall(1,f0_,p); } else xpos168(p); - + return; } } while (--p.cycles >= 0); @@ -1177,7 +1177,7 @@ namespace M2 { namespace Ly0 { static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned winDrawState, int targetxpos, unsigned cycles); } - + namespace LyNon0 { static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned winDrawState, int targetxpos, unsigned cycles); } @@ -1187,19 +1187,19 @@ namespace M3Loop { static unsigned predictCyclesUntilXposNextLine(const PPUPriv &p, unsigned winDrawState, const int targetx) { if (p.wx == 166 && !p.cgb && p.xpos < 167 && (p.weMaster || (p.wy2 == p.lyCounter.ly() && (p.lcdc & 0x20)))) winDrawState = WIN_DRAW_START | (WIN_DRAW_STARTED & p.lcdc >> 4); - + const unsigned cycles = (nextM2Time(p) - p.now) >> p.lyCounter.isDoubleSpeed(); return p.lyCounter.ly() == 143 ? M2::Ly0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles) : M2::LyNon0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles); } - + namespace StartWindowDraw { static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int xpos, int endx, unsigned ly, unsigned nextSprite, bool weMaster, unsigned winDrawState, int fno, int targetx, unsigned cycles); } - + namespace Tile { static const unsigned char* addSpriteCycles(const unsigned char *nextSprite, const unsigned char *spriteEnd, const unsigned char *const spxOf, const unsigned maxSpx, @@ -1223,7 +1223,7 @@ namespace M3Loop { return nextSprite; } - + static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, const int xpos, const int endx, const unsigned ly, const unsigned nextSprite, const bool weMaster, unsigned char winDrawState, const int fno, const int targetx, unsigned cycles) { @@ -1231,16 +1231,16 @@ namespace M3Loop { return StartWindowDraw::predictCyclesUntilXpos_fn(p, xpos, endx, ly, nextSprite, weMaster, WIN_DRAW_STARTED & p.lcdc >> 4, 0, targetx, cycles); } - + if (xpos > targetx) return predictCyclesUntilXposNextLine(p, winDrawState, targetx); - + enum { NO_TILE_NUMBER = 1 }; // low bit set, so it will never be equal to an actual tile number. - + int nwx = 0xFF; cycles += targetx - xpos; - if (p.wx - static_cast(xpos) < targetx - static_cast(xpos) && (p.lcdc & 0x20) + if (p.wx - unsigned(xpos) < targetx - unsigned(xpos) && (p.lcdc & 0x20) && (weMaster || p.wy2 == ly) && !(winDrawState & WIN_DRAW_STARTED) && (p.cgb || p.wx != 166)) { nwx = p.wx; cycles += 6; @@ -1250,10 +1250,10 @@ namespace M3Loop { const unsigned char *sprite = p.spriteMapper.sprites(ly); const unsigned char *const spriteEnd = sprite + p.spriteMapper.numSprites(ly); sprite += nextSprite; - + if (sprite < spriteEnd) { const int spx = p.spriteMapper.posbuf()[*sprite + 1]; - unsigned firstTileXpos = static_cast(endx) & 7; // ok even if endx is capped at 168, because fno will be used. + unsigned firstTileXpos = unsigned(endx) & 7; // ok even if endx is capped at 168, because fno will be used. unsigned prevSpriteTileNo = (xpos - firstTileXpos) & ~7; // this tile. all sprites on this tile will now add 6 cycles. // except this one @@ -1273,16 +1273,16 @@ namespace M3Loop { targetx, firstTileXpos, prevSpriteTileNo, &cycles); } } - + return cycles; } - + static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, - const int endx, const int fno, const int targetx, const unsigned cycles) { + int endx, int fno, int targetx, unsigned cycles) { return predictCyclesUntilXpos_fn(p, p.xpos, endx, p.lyCounter.ly(), p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); } - + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { return predictCyclesUntilXpos_fn(p, p.xpos < 160 ? p.xpos + 8 : 168, 0, targetx, cycles); } @@ -1302,14 +1302,14 @@ namespace M3Loop { return predictCyclesUntilXpos_fn(p, p.endx, 5, targetx, cycles); } } - + namespace StartWindowDraw { static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int xpos, const int endx, const unsigned ly, const unsigned nextSprite, const bool weMaster, const unsigned winDrawState, const int fno, const int targetx, unsigned cycles) { if (xpos > targetx) return predictCyclesUntilXposNextLine(p, winDrawState, targetx); - + unsigned cinc = 6 - fno; if (!(p.lcdc & 0x20) && p.cgb) { @@ -1322,23 +1322,23 @@ namespace M3Loop { xpos += xinc; } } - + cycles += cinc; if (xpos <= targetx) { return Tile::predictCyclesUntilXpos_fn(p, xpos, xpos < 160 ? xpos + 8 : 168, ly, nextSprite, weMaster, winDrawState, 0, targetx, cycles); } - + return cycles - 1; } - - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, const int endx, - const int fno, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int endx, + int fno, int targetx, unsigned cycles) { return predictCyclesUntilXpos_fn(p, p.xpos, endx, p.lyCounter.ly(), p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); } - + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const int targetx, const unsigned cycles) { return predictCyclesUntilXpos_fn(p, p.xpos == p.endx ? (p.xpos < 160 ? p.xpos + 8 : 168) : p.endx, 0, targetx, cycles); } @@ -1362,16 +1362,16 @@ namespace M3Loop { namespace LoadSprites { static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, const int fno, const int targetx, unsigned cycles) { unsigned nextSprite = p.nextSprite; - + if ((p.lcdc & 2) | p.cgb) { cycles += 6 - fno; nextSprite += 1; } - + return Tile::predictCyclesUntilXpos_fn(p, p.xpos, p.endx, p.lyCounter.ly(), nextSprite, p.weMaster, p.winDrawState, 5, targetx, cycles); } - + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { return predictCyclesUntilXpos_fn(p, 0, targetx, cycles); } @@ -1394,24 +1394,24 @@ namespace M3Loop { } namespace M3Start { - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, const unsigned xpos, const unsigned ly, - const bool weMaster, const unsigned winDrawState, const int targetx, unsigned cycles) { - cycles += std::min((static_cast(p.scx) - static_cast(xpos)) & 7, MAX_M3START_CYCLES - xpos) + 1 - p.cgb; + static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, unsigned xpos, unsigned ly, + bool weMaster, unsigned winDrawState, int targetx, unsigned cycles) { + cycles += std::min((unsigned(p.scx) - unsigned(xpos)) & 7, MAX_M3START_CYCLES - xpos) + 1 - p.cgb; return M3Loop::Tile::predictCyclesUntilXpos_fn(p, 0, 8 - (p.scx & 7), ly, 0, weMaster, winDrawState, std::min(p.scx & 7, 5), targetx, cycles); } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const unsigned ly, - const bool weMaster, unsigned winDrawState, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned ly, + bool weMaster, unsigned winDrawState, int targetx, unsigned cycles) { winDrawState = (winDrawState & p.lcdc >> 5 & WIN_DRAW_START) ? WIN_DRAW_STARTED : 0; return predictCyclesUntilXpos_f1(p, 0, ly, weMaster, winDrawState, targetx, cycles); } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { const unsigned ly = p.lyCounter.ly() + (p.lyCounter.time() - p.now < 16); return predictCyclesUntilXpos_f0(p, ly, p.weMaster, p.winDrawState, targetx, cycles); } - + static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, const int targetx, const unsigned cycles) { return predictCyclesUntilXpos_f1(p, p.xpos, p.lyCounter.ly(), p.weMaster, p.winDrawState, targetx, cycles); } @@ -1420,44 +1420,44 @@ namespace M3Start { namespace M2 { namespace Ly0 { static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, - const unsigned winDrawState, const int targetx, const unsigned cycles) { - const bool weMaster = (p.lcdc & 0x20) && 0 == p.wy; - const unsigned ly = 0; - + unsigned winDrawState, int targetx, unsigned cycles) { + bool weMaster = (p.lcdc & 0x20) && 0 == p.wy; + unsigned ly = 0; + return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, winDrawState, targetx, cycles + m3StartLineCycle(p.cgb)); } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); } } - + namespace LyNon0 { static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, bool weMaster, - const unsigned winDrawState, const int targetx, const unsigned cycles) { - const unsigned ly = p.lyCounter.ly() + 1; - + unsigned winDrawState, int targetx, unsigned cycles) { + unsigned ly = p.lyCounter.ly() + 1; + weMaster |= (p.lcdc & 0x20) && ly == p.wy; - + return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, winDrawState, targetx, cycles + 456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb)); } - - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, int targetx, unsigned cycles) { return predictCyclesUntilXpos_f1(p, p.weMaster, p.winDrawState, targetx, cycles); } - + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, - const unsigned winDrawState, const int targetx, const unsigned cycles) { - const bool weMaster = p.weMaster || ((p.lcdc & 0x20) && p.lyCounter.ly() == p.wy); - + unsigned winDrawState, int targetx, unsigned cycles) { + bool weMaster = p.weMaster || ((p.lcdc & 0x20) && p.lyCounter.ly() == p.wy); + return predictCyclesUntilXpos_f1(p, weMaster, winDrawState, targetx, cycles + weMasterCheckAfterLyIncLineCycle(p.cgb) - weMasterCheckPriorToLyIncLineCycle(p.cgb)); } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const int targetx, const unsigned cycles) { + + static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); } } @@ -1508,7 +1508,7 @@ struct BSearch { static std::size_t upperBound(const T a[], const K e) { if (e < a[start + len / 2]) return BSearch::upperBound(a, e); - + return BSearch::upperBound(a, e); } }; @@ -1539,14 +1539,14 @@ static const PPUState * decodeM3LoopState(const unsigned state) { case M3Loop::Tile::ID3: return &M3Loop::Tile::f3_; case M3Loop::Tile::ID4: return &M3Loop::Tile::f4_; case M3Loop::Tile::ID5: return &M3Loop::Tile::f5_; - + case M3Loop::LoadSprites::ID0: return &M3Loop::LoadSprites::f0_; case M3Loop::LoadSprites::ID1: return &M3Loop::LoadSprites::f1_; case M3Loop::LoadSprites::ID2: return &M3Loop::LoadSprites::f2_; case M3Loop::LoadSprites::ID3: return &M3Loop::LoadSprites::f3_; case M3Loop::LoadSprites::ID4: return &M3Loop::LoadSprites::f4_; case M3Loop::LoadSprites::ID5: return &M3Loop::LoadSprites::f5_; - + case M3Loop::StartWindowDraw::ID0: return &M3Loop::StartWindowDraw::f0_; case M3Loop::StartWindowDraw::ID1: return &M3Loop::StartWindowDraw::f1_; case M3Loop::StartWindowDraw::ID2: return &M3Loop::StartWindowDraw::f2_; @@ -1560,10 +1560,10 @@ static const PPUState * decodeM3LoopState(const unsigned state) { static long cyclesUntilM0Upperbound(const PPUPriv &p) { long cycles = 168 - p.xpos + 6; - + for (unsigned i = p.nextSprite; i < 10 && p.spriteList[i].spx < 168; ++i) cycles += 11; - + return cycles; } @@ -1584,13 +1584,13 @@ static void loadSpriteList(PPUPriv &p, const SaveState &ss) { p.spriteList[i].attrib = ss.ppu.spAttribList[i] & 0xFF; p.spwordList[i] = (ss.ppu.spByte1List[i] * 0x100 + ss.ppu.spByte0List[i]) & 0xFFFF; } - + p.spriteList[numSprites].spx = 0xFF; p.nextSprite = std::min(ss.ppu.nextSprite, numSprites); - + while (p.spriteList[p.nextSprite].spx < ss.ppu.xpos) ++p.nextSprite; - + p.currentSprite = std::min(p.nextSprite, ss.ppu.currentSprite); } } @@ -1605,7 +1605,7 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { ? videoCycles - ds * M2_DS_OFFSET + 70224 : videoCycles - ds * M2_DS_OFFSET; const long lineCycles = static_cast(vcycs) % 456; - + p_.now = ss.cpu.cycleCounter; p_.lcdc = ss.mem.ioamhram.get()[0x140]; p_.lyCounter.setDoubleSpeed(ds); @@ -1632,12 +1632,12 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { p_.lastM0Time = p_.now - ss.ppu.lastM0Time; p_.cgb = ss.ppu.isCgb; loadSpriteList(p_, ss); - + if (m3loopState && videoCycles < 144 * 456L && p_.xpos < 168 - && lineCycles + cyclesUntilM0Upperbound(p_) < static_cast(weMasterCheckPriorToLyIncLineCycle(p_.cgb))) { + && lineCycles + cyclesUntilM0Upperbound(p_) < long(weMasterCheckPriorToLyIncLineCycle(p_.cgb))) { p_.nextCallPtr = m3loopState; p_.cycles = -1; - } else if (vcycs < 143 * 456L + static_cast(m3StartLineCycle(p_.cgb)) + MAX_M3START_CYCLES) { + } else if (vcycs < 143 * 456L + long(m3StartLineCycle(p_.cgb)) + MAX_M3START_CYCLES) { const CycleState lineCycleStates[] = { { &M3Start::f0_, m3StartLineCycle(p_.cgb) }, { &M3Start::f1_, m3StartLineCycle(p_.cgb) + MAX_M3START_CYCLES }, @@ -1645,13 +1645,13 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { { &M2::LyNon0::f1_, weMasterCheckAfterLyIncLineCycle(p_.cgb) }, { &M3Start::f0_, m3StartLineCycle(p_.cgb) + 456 } }; - + const std::size_t pos = upperBound(lineCycleStates, lineCycles); - + p_.cycles = lineCycles - lineCycleStates[pos].cycle; p_.nextCallPtr = lineCycleStates[pos].state; - + if (&M3Start::f1_ == lineCycleStates[pos].state) { p_.xpos = lineCycles - m3StartLineCycle(p_.cgb) + 1; p_.cycles = -1; @@ -1671,7 +1671,7 @@ void PPU::reset(const unsigned char *const oamram, const unsigned char *const vr void PPU::resetCc(const unsigned long oldCc, const unsigned long newCc) { const unsigned long dec = oldCc - newCc; const unsigned long videoCycles = p_.lcdc & 0x80 ? p_.lyCounter.frameCycles(p_.now) : 0; - + p_.now -= dec; p_.lastM0Time = p_.lastM0Time ? p_.lastM0Time - dec : p_.lastM0Time; p_.lyCounter.reset(videoCycles, p_.now); @@ -1680,12 +1680,12 @@ void PPU::resetCc(const unsigned long oldCc, const unsigned long newCc) { void PPU::speedChange(const unsigned long cycleCounter) { const unsigned long videoCycles = p_.lcdc & 0x80 ? p_.lyCounter.frameCycles(p_.now) : 0; - + p_.spriteMapper.preSpeedChange(cycleCounter); p_.lyCounter.setDoubleSpeed(!p_.lyCounter.isDoubleSpeed()); p_.lyCounter.reset(videoCycles, p_.now); p_.spriteMapper.postSpeedChange(cycleCounter); - + if (&M2::Ly0::f0_ == p_.nextCallPtr || &M2::LyNon0::f0_ == p_.nextCallPtr) { if (p_.lyCounter.isDoubleSpeed()) { p_.cycles -= M2_DS_OFFSET; @@ -1707,7 +1707,7 @@ void PPU::setLcdc(const unsigned lcdc, const unsigned long cc) { p_.weMaster = (lcdc & 0x20) && 0 == p_.wy; p_.winDrawState = 0; p_.nextCallPtr = &M3Start::f0_; - p_.cycles = -static_cast(m3StartLineCycle(p_.cgb) + M2_DS_OFFSET * p_.lyCounter.isDoubleSpeed()); + p_.cycles = -int(m3StartLineCycle(p_.cgb) + M2_DS_OFFSET * p_.lyCounter.isDoubleSpeed()); } else if ((p_.lcdc ^ lcdc) & 0x20) { if (!(lcdc & 0x20)) { if (p_.winDrawState == WIN_DRAW_STARTED || p_.xpos == 168) @@ -1717,23 +1717,23 @@ void PPU::setLcdc(const unsigned lcdc, const unsigned long cc) { ++p_.winYPos; } } - + if ((p_.lcdc ^ lcdc) & 0x04) { if (p_.lcdc & lcdc & 0x80) p_.spriteMapper.oamChange(cc); - + p_.spriteMapper.setLargeSpritesSource(lcdc & 0x04); } - + p_.lcdc = lcdc; } void PPU::update(const unsigned long cc) { const int cycles = (cc - p_.now) >> p_.lyCounter.isDoubleSpeed(); - + p_.now += cycles << p_.lyCounter.isDoubleSpeed(); p_.cycles += cycles; - + if (p_.cycles >= 0) { p_.framebuf.setFbline(p_.lyCounter.ly()); p_.nextCallPtr->f(p_); diff --git a/libgambatte/src/video/ppu.h b/libgambatte/src/video/ppu.h index a32176d589..9ef73f74d4 100644 --- a/libgambatte/src/video/ppu.h +++ b/libgambatte/src/video/ppu.h @@ -33,9 +33,9 @@ class PPUFrameBuf { uint_least32_t *buf_; uint_least32_t *fbline_; int pitch_; - + static uint_least32_t * nullfbline() { static uint_least32_t nullfbline_[160]; return nullfbline_; } - + public: PPUFrameBuf() : buf_(0), fbline_(nullfbline()), pitch_(0) {} uint_least32_t * fb() const { return buf_; } @@ -93,7 +93,7 @@ struct PPUPriv { bool cgb; bool weMaster; - + PPUPriv(NextM0Time &nextM0Time, const unsigned char *oamram, const unsigned char *vram); }; @@ -104,7 +104,7 @@ public: : p_(nextM0Time, oamram, vram) { } - + unsigned long * bgPalette() { return p_.bgPalette; } bool cgb() const { return p_.cgb; } void doLyCountEvent() { p_.lyCounter.doEvent(); } diff --git a/libgambatte/src/video/sprite_mapper.cpp b/libgambatte/src/video/sprite_mapper.cpp index 208b80e8e7..489af046d2 100644 --- a/libgambatte/src/video/sprite_mapper.cpp +++ b/libgambatte/src/video/sprite_mapper.cpp @@ -83,10 +83,10 @@ void SpriteMapper::OamReader::update(const unsigned long cc) { if (!(pos & 1)) { if (pos == 80) pos = 0; - + if (cgb_) szbuf[pos >> 1] = largeSpritesSrc; - + buf[pos ] = oamram[pos * 2 ]; buf[pos + 1] = oamram[pos * 2 + 1]; } else @@ -194,7 +194,7 @@ SYNCFUNC(SpriteMapper) { NSS(spritemap); NSS(num); - + SSS(nextM0Time_); SSS(oamReader); } diff --git a/libgambatte/src/video/sprite_mapper.h b/libgambatte/src/video/sprite_mapper.h index b6171f842d..254b433cfd 100644 --- a/libgambatte/src/video/sprite_mapper.h +++ b/libgambatte/src/video/sprite_mapper.h @@ -78,7 +78,7 @@ public: private: mutable unsigned char spritemap[144*10]; mutable unsigned char num[144]; - + NextM0Time &nextM0Time_; OamReader oamReader; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 4fac65dc3a39e0105e69397bffed25ce7456143c..5c29f24fa2a36f6061d21dd0b8062d3379613fce 100644 GIT binary patch delta 2339 zcmY*Z2~-v56`ni1rw>FK5D%y^fLmOXSz(4*o=4@>s3Y}06rG)5078n=p7QX74!6>5#z9xA=hB`1C7eDi%1ai%`Oc#({vOY6A77m#;*+mff_fgnxEsk7MY3oT48E&MBzAKU$y(|{UyQB5l zIV{%nkLRUH?`6LtMpUXVj$SOdu``H9BkbaCzP1ypRhg22cI750bYOx!vc5%vaH(x z%L2%*jn-^Cr1pUZ%jyf;Ln8F|aqMS?mHoo7DkEnIybFV@t3zNpz$ZrXFqj;X$j+tK($P=|;4<3Bz*4YVv&X`58#y7vI9dw>jaU|rK&sWj z!W|OwjH?1HfPRJ;3xmkVGmTaO1fx0@UWM(}-dKnV4qi74?X6pk_WDj*m&U_lAkR;- zl!;IdFvdEb0Hf@XYu%dy(@7|`lxeUz6t{aR6>jx_3hS%4As1k<@kTmK7;u&+2+xlT zPWb-W(cN9vNTuOnOXZs9`3_sv>2NX(l8lr>_$Vnq?olQ0Ac$yJZ}-tSB*eD~UEs3e zm8cn?;yIJpo$uhz&+5+a@~yv-1JL3k3VvaeIHaj?G$ci!iE z`fLviP8h$>hHxXl0_MO|<7@?5UuI0HgmgG)9jJu80kG9dT?3WmjEZ$Y)g!hbb|VfU zjv_eyIZh&PLHq^rH^g1UL&VGYf06gV+z>=0A_g(al4{_s5V&F0Ho#N}(%*U7J;QTv zLHk_m<`(GLgY4R8-P-{(0wB{EzYEV)g0*iKyhR!ydXNr%_)=5G6!gIZ%lnpeitsScXlJmm`mM1La+f1^f@JM7{>7 zGUVP;90++Satif@$X6mKR$y)&P&G)$eTX{pYUGJU*cb<0g}kj8H-@?g`8L#vx?rGI z<4rUMqU)@}eK6ccK0Ih`_re*i&%=ZGE`El!q5~c|;$MEWNqlS);z$HZ90C6wLA;Cw zBMUU$7+;2N5})L+h@9*ygBt$=V_NhE2IqhO*j z(!X5rF9Umgu^->iert)HB%`EGtT2l$WmmE5*=_7T_6U2NJly>`}f_T9lj0BPCGnuZ~nDb+S4~eOLWJtyQSb@hQtYGK+)P0=Q4^R#qr zxwcAc(7alsc181P4>iI`Ib)oxbAmI;xyZTP>2Yp#n$D9Y&Q@oK6SuGph;jIV3ZNtC z(X>RT(CKs$T}SVro9J8gQ@SrRf>D|2OeRyvtY$VbyO_hwpP38HP38duEX78#quDri z0y~|Z$ELG+YzgZ@KlZcVu$S3;ET98}xp?kPZZ5Z!E9BO2o4GHzZ@E^kq>}@_H{YKh z$;6(JwOKu{-cW~W zW3~C(JDN+Y)PASkM{ED+eC#B=K=}Wrq4Y#Lna-vQ=wPNFGl-ePWHT=2W9Bn-tdVJE zt~1Bj8*DpEa-rPo+}tA0&F$b0a9?uYao4#>K89y`ji16N@-zA0@EN>^*ZEESUi71p zzs%p^JNZX^7f%Wfp^p$Q3=pD);ldb!6+}T3CJIx8nZkVGJz=F#DOh7(BQMzMY1{t* DmzMrh delta 2370 zcmY*Z3se+G7VTHez@P}Nl10$~BBD{${*Kd3cMqbRND^02QCtO$CJ~9KEW>I51wk=7 zfW&rf4XF5!pXlg_O=99F7=K5NG4Y4)5#6ZxNzkmTY!2@1n;3Vqbw#|Rv{tj2A_%ob>t~t z3==(JlTL=f22b<*P9SlzHZI2sw>_0Ph0rZ@0H&+Pk}Jzi0Th*0f;6SY67PwcZ3WUJ zPD`J|;hwHJMI_Ru1?IBwP_yUuB(K@D3AtAIhgO|CvrGRWK)Lclv#11$%ErROhj@bj zYzD~DLi2h;}^d-BRM6!^mP?U7dkp;o(l$_urgyQkN8fOgN4i!01% zd-%1!_z4oPrNMH~>T3)@gLdkAFOWSCu5ayug{^3Fz#h+qHZFifZ?E?UH^3R)02mCl z#$ABfek4ve(#?<=3}+0ZD{Kr2Yy1nA{i|VRzcb9x=k$gdFw$u14RZl5>ZAKWa@a!W z%elWdH(%e^2Tl=~V$6?)RuhSuZOj?~1pu4%dvP!eL?eA595s==EWN4%DxZ@?%5dkuLctm%wzdnps{_(Q$%<-3pzFj^lx9fpN_1&VUr&S-3T z-0Jm~9iu1XS-2z=uB4!{BV+xJ+ApWLlG*3`v9eyxM%VDP<%r*usgL0BqzXIr^h_i^Rh}(#t5Yx05c!r!p9*F3I z=z)kqyo?V-Zbdi{BM_;GKN*3QFg67C7@4*3CUltg-oL$Ru7?@-`Wv3L5a3VZJ~h7B z1ZjRyqj%YcCobP8+6H6EsvS@ZhxD~OUtPuQwlM070@3dZ!Q9wM%{(H4)ya@K|n9XK@Wz(VIHv~3;2r!w7zVDDJ7U_S_cxPp|C@Wza<`Ff zCL~gNh+8b-_Hqr}G44EfoonG9bH8wYd=UQ%AHnzK8D8QO`8WBoduqCgc3YCI z%J#M1sXG~1oE)EHueI0P&)A#oPwW=Cr#x6rl+)xaxlpc>H^}?t6LORMqf9AXl~_em zl9dU{4CMo5sj^1dt{hS>D0h@!lwdVl<V{XKg{vAxE=+y1%z zwEdd>vE5(pAxF#ob-3XQ@^;Tk&fL Date: Sat, 25 May 2019 19:29:59 +0200 Subject: [PATCH 074/138] ppu: less magical lcdc constants --- libgambatte/src/video.h | 2 +- libgambatte/src/video/lcddef.h | 21 + libgambatte/src/video/ppu.cpp | 2484 ++++++++++++++++---------------- libgambatte/src/video/ppu.h | 1 + output/dll/libgambatte.dll | Bin 142336 -> 141824 bytes 5 files changed, 1279 insertions(+), 1229 deletions(-) create mode 100644 libgambatte/src/video/lcddef.h diff --git a/libgambatte/src/video.h b/libgambatte/src/video.h index 7b5628b938..ebfc14b7df 100644 --- a/libgambatte/src/video.h +++ b/libgambatte/src/video.h @@ -64,7 +64,7 @@ public: } void doEvent(unsigned char *const ifreg, const unsigned ly, const unsigned statReg, const unsigned lycReg) { - if (((statReg_ | statReg) & 0x08) && (!(statReg_ & 0x40) || ly != lycReg_)) + if (((statReg_ | statReg) & lcdstat_m0irqen) && (!(statReg_ & lcdstat_lycirqen) || ly != lycReg_)) *ifreg |= 2; statReg_ = statReg; diff --git a/libgambatte/src/video/lcddef.h b/libgambatte/src/video/lcddef.h new file mode 100644 index 0000000000..5fbf3756cb --- /dev/null +++ b/libgambatte/src/video/lcddef.h @@ -0,0 +1,21 @@ +#ifndef LCDDEF_H +#define LCDDEF_H + +namespace gambatte { + +enum { lcdc_bgen = 0x01, + lcdc_objen = 0x02, + lcdc_obj2x = 0x04, + lcdc_tdsel = 0x10, + lcdc_we = 0x20, + lcdc_en = 0x80 }; + +enum { lcdstat_lycflag = 0x04, + lcdstat_m0irqen = 0x08, + lcdstat_m1irqen = 0x10, + lcdstat_m2irqen = 0x20, + lcdstat_lycirqen = 0x40 }; + +} + +#endif diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index d5c5e9607a..a016cea84f 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "ppu.h" #include "savestate.h" #include @@ -26,11 +26,13 @@ namespace { using namespace gambatte; -#define PREP(u8) (((u8) << 7 & 0x80) | ((u8) << 5 & 0x40) | ((u8) << 3 & 0x20) | ((u8) << 1 & 0x10) | \ - ((u8) >> 1 & 0x08) | ((u8) >> 3 & 0x04) | ((u8) >> 5 & 0x02) | ((u8) >> 7 & 0x01)) +#define PREP(u8) (((u8) << 7 & 0x80) | ((u8) << 5 & 0x40) | ((u8) << 3 & 0x20) | ((u8) << 1 & 0x10) \ + | ((u8) >> 1 & 0x08) | ((u8) >> 3 & 0x04) | ((u8) >> 5 & 0x02) | ((u8) >> 7 & 0x01)) -#define EXPAND(u8) ((PREP(u8) << 7 & 0x4000) | (PREP(u8) << 6 & 0x1000) | (PREP(u8) << 5 & 0x0400) | (PREP(u8) << 4 & 0x0100) | \ - (PREP(u8) << 3 & 0x0040) | (PREP(u8) << 2 & 0x0010) | (PREP(u8) << 1 & 0x0004) | (PREP(u8) & 0x0001)) +#define EXPAND(u8) ((PREP(u8) << 7 & 0x4000) | (PREP(u8) << 6 & 0x1000) \ + | (PREP(u8) << 5 & 0x0400) | (PREP(u8) << 4 & 0x0100) \ + | (PREP(u8) << 3 & 0x0040) | (PREP(u8) << 2 & 0x0010) \ + | (PREP(u8) << 1 & 0x0004) | (PREP(u8) & 0x0001)) #define EXPAND_ROW(n) EXPAND((n)|0x0), EXPAND((n)|0x1), EXPAND((n)|0x2), EXPAND((n)|0x3), \ EXPAND((n)|0x4), EXPAND((n)|0x5), EXPAND((n)|0x6), EXPAND((n)|0x7), \ @@ -42,7 +44,7 @@ using namespace gambatte; EXPAND_ROW(0x80), EXPAND_ROW(0x90), EXPAND_ROW(0xA0), EXPAND_ROW(0xB0), \ EXPAND_ROW(0xC0), EXPAND_ROW(0xD0), EXPAND_ROW(0xE0), EXPAND_ROW(0xF0) -static const unsigned short expand_lut[0x200] = { +static unsigned short const expand_lut[0x200] = { EXPAND_TABLE, #undef PREP @@ -59,59 +61,58 @@ static const unsigned short expand_lut[0x200] = { #define DECLARE_FUNC(n, id) \ enum { ID##n = id }; \ static void f##n (PPUPriv &); \ - static unsigned predictCyclesUntilXpos_f##n (const PPUPriv &, int targetxpos, unsigned cycles); \ - static const PPUState f##n##_ = { f##n, predictCyclesUntilXpos_f##n, ID##n } - -namespace M2 { - namespace Ly0 { DECLARE_FUNC(0, 0); } - namespace LyNon0 { DECLARE_FUNC(0, 0); DECLARE_FUNC(1, 0); } -} + static unsigned predictCyclesUntilXpos_f##n (PPUPriv const &, int targetxpos, unsigned cycles); \ + static PPUState const f##n##_ = { f##n, predictCyclesUntilXpos_f##n, ID##n } +namespace M2_Ly0 { DECLARE_FUNC(0, 0); } +namespace M2_LyNon0 { DECLARE_FUNC(0, 0); DECLARE_FUNC(1, 0); } namespace M3Start { DECLARE_FUNC(0, 0); DECLARE_FUNC(1, 0); } - namespace M3Loop { - namespace Tile { - DECLARE_FUNC(0, 0x80); - DECLARE_FUNC(1, 0x81); - DECLARE_FUNC(2, 0x82); - DECLARE_FUNC(3, 0x83); - DECLARE_FUNC(4, 0x84); - DECLARE_FUNC(5, 0x85); - } - - namespace LoadSprites { - DECLARE_FUNC(0, 0x88); - DECLARE_FUNC(1, 0x89); - DECLARE_FUNC(2, 0x8A); - DECLARE_FUNC(3, 0x8B); - DECLARE_FUNC(4, 0x8C); - DECLARE_FUNC(5, 0x8D); - } - - namespace StartWindowDraw { - DECLARE_FUNC(0, 0x90); - DECLARE_FUNC(1, 0x91); - DECLARE_FUNC(2, 0x92); - DECLARE_FUNC(3, 0x93); - DECLARE_FUNC(4, 0x94); - DECLARE_FUNC(5, 0x95); - } +namespace Tile { + DECLARE_FUNC(0, 0x80); + DECLARE_FUNC(1, 0x81); + DECLARE_FUNC(2, 0x82); + DECLARE_FUNC(3, 0x83); + DECLARE_FUNC(4, 0x84); + DECLARE_FUNC(5, 0x85); } +namespace LoadSprites { + DECLARE_FUNC(0, 0x88); + DECLARE_FUNC(1, 0x89); + DECLARE_FUNC(2, 0x8A); + DECLARE_FUNC(3, 0x8B); + DECLARE_FUNC(4, 0x8C); + DECLARE_FUNC(5, 0x8D); +} +namespace StartWindowDraw { + DECLARE_FUNC(0, 0x90); + DECLARE_FUNC(1, 0x91); + DECLARE_FUNC(2, 0x92); + DECLARE_FUNC(3, 0x93); + DECLARE_FUNC(4, 0x94); + DECLARE_FUNC(5, 0x95); +} +} // namespace M3Loop #undef DECLARE_FUNC -enum { WIN_DRAW_START = 1, WIN_DRAW_STARTED = 2 }; +enum { win_draw_start = 1, win_draw_started = 2 }; +enum { m2_ds_offset = 3 }; +enum { max_m3start_cycles = 80 }; +enum { attr_yflip = 0x40, attr_bgpriority = 0x80 }; -enum { M2_DS_OFFSET = 3 }; -enum { MAX_M3START_CYCLES = 80 }; +static inline int lcdcEn( PPUPriv const &p) { return p.lcdc & lcdc_en; } +static inline int lcdcWinEn(PPUPriv const &p) { return p.lcdc & lcdc_we; } +static inline int lcdcObj2x(PPUPriv const &p) { return p.lcdc & lcdc_obj2x; } +static inline int lcdcObjEn(PPUPriv const &p) { return p.lcdc & lcdc_objen; } +static inline int lcdcBgEn( PPUPriv const &p) { return p.lcdc & lcdc_bgen; } -static inline int weMasterCheckPriorToLyIncLineCycle(const bool cgb) { return 450 - cgb; } -static inline int weMasterCheckAfterLyIncLineCycle(const bool cgb) { return 454 - cgb; } -static inline int m3StartLineCycle(const bool /*cgb*/) { return 83; } - -static inline void nextCall(const int cycles, const PPUState &state, PPUPriv &p) { - const int c = p.cycles - cycles; +static inline int weMasterCheckPriorToLyIncLineCycle(bool cgb) { return 450 - cgb; } +static inline int weMasterCheckAfterLyIncLineCycle(bool cgb) { return 454 - cgb; } +static inline int m3StartLineCycle(bool /*cgb*/) { return 83; } +static inline void nextCall(int const cycles, PPUState const &state, PPUPriv &p) { + int const c = p.cycles - cycles; if (c >= 0) { p.cycles = c; return state.f(p); @@ -121,29 +122,32 @@ static inline void nextCall(const int cycles, const PPUState &state, PPUPriv &p) p.nextCallPtr = &state; } +namespace M2_Ly0 { + static void f0(PPUPriv &p) { + p.weMaster = lcdcWinEn(p) && 0 == p.wy; + p.winYPos = 0xFF; + nextCall(m3StartLineCycle(p.cgb), M3Start::f0_, p); + } +} + +namespace M2_LyNon0 { + static void f0(PPUPriv &p) { + p.weMaster |= lcdcWinEn(p) && p.lyCounter.ly() == p.wy; + nextCall( weMasterCheckAfterLyIncLineCycle(p.cgb) + - weMasterCheckPriorToLyIncLineCycle(p.cgb), f1_, p); + } + + static void f1(PPUPriv &p) { + p.weMaster |= lcdcWinEn(p) && p.lyCounter.ly() + 1 == p.wy; + nextCall(456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb), + M3Start::f0_, p); + } +} + +/* namespace M2 { - namespace Ly0 { - static void f0(PPUPriv &p) { - p.weMaster = (p.lcdc & 0x20) && 0 == p.wy; - p.winYPos = 0xFF; - nextCall(m3StartLineCycle(p.cgb), M3Start::f0_, p); - } - } - - namespace LyNon0 { - static void f0(PPUPriv &p) { - p.weMaster |= (p.lcdc & 0x20) && p.lyCounter.ly() == p.wy; - nextCall(weMasterCheckAfterLyIncLineCycle(p.cgb) - weMasterCheckPriorToLyIncLineCycle(p.cgb), f1_, p); - } - - static void f1(PPUPriv &p) { - p.weMaster |= (p.lcdc & 0x20) && p.lyCounter.ly() + 1 == p.wy; - nextCall(456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb), M3Start::f0_, p); - } - } - - /*struct SpriteLess { - bool operator()(const Sprite lhs, const Sprite rhs) const { + struct SpriteLess { + bool operator()(Sprite lhs, Sprite rhs) const { return lhs.spx < rhs.spx; } }; @@ -160,13 +164,14 @@ namespace M2 { int cycles = p.cycles; unsigned oampos = p.reg0; unsigned nextSprite = p.nextSprite; - const unsigned nly = (p.lyCounter.ly() + 1 == 154 ? 0 : p.lyCounter.ly() + 1) + ((p.lyCounter.time()-(p.now-p.cycles)) <= 4); - const bool ls = p.spriteMapper.largeSpritesSource(); + unsigned const nly = (p.lyCounter.ly() + 1 == 154 ? 0 : p.lyCounter.ly() + 1) + + ((p.lyCounter.time()-(p.now-p.cycles)) <= 4); + bool const ls = p.spriteMapper.largeSpritesSource(); do { - const unsigned spy = p.spriteMapper.oamram()[oampos ]; - const unsigned spx = p.spriteMapper.oamram()[oampos+1]; - const unsigned ydiff = spy - nly; + unsigned const spy = p.spriteMapper.oamram()[oampos ]; + unsigned const spx = p.spriteMapper.oamram()[oampos+1]; + unsigned const ydiff = spy - nly; if (ls ? ydiff < 16u : ydiff - 8u < 8u) { p.spriteList[nextSprite].spx = spx; @@ -192,15 +197,38 @@ namespace M2 { p.nextSprite = 0; nextCall(0, M3Start::f0_, p); } - }*/ + } +} +*/ + +static int loadTileDataByte0(PPUPriv const &p) { + unsigned const yoffset = p.winDrawState & win_draw_started + ? p.winYPos + : p.scy + p.lyCounter.ly(); + + return p.vram[0x1000 + (p.nattrib << 10 & 0x2000) + - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + + p.reg1 * 16 + + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; +} + +static int loadTileDataByte1(PPUPriv const &p) { + unsigned const yoffset = p.winDrawState & win_draw_started + ? p.winYPos + : p.scy + p.lyCounter.ly(); + + return p.vram[0x1000 + (p.nattrib << 10 & 0x2000) + - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) + + p.reg1 * 16 + + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; } namespace M3Start { static void f0(PPUPriv &p) { p.xpos = 0; - if (p.winDrawState & p.lcdc >> 5 & WIN_DRAW_START) { - p.winDrawState = WIN_DRAW_STARTED; + if ((p.winDrawState & win_draw_start) && lcdcWinEn(p)) { + p.winDrawState = win_draw_started; p.wscx = 8 + (p.scx & 7); ++p.winYPos; } else @@ -211,38 +239,33 @@ namespace M3Start { } static void f1(PPUPriv &p) { - while (p.xpos < MAX_M3START_CYCLES) { + while (p.xpos < max_m3start_cycles) { if ((p.xpos & 7) == (p.scx & 7)) break; switch (p.xpos & 7) { case 0: - if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { - p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + (p.wscx >> 3 & 0x1F) + 0x1800]; - p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + (p.wscx >> 3 & 0x1F) + 0x3800]; + if (p.winDrawState & win_draw_started) { + p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + + (p.wscx >> 3 & 0x1F) + 0x1800]; + p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + + (p.wscx >> 3 & 0x1F) + 0x3800]; } else { - p.reg1 = p.vram[((p.lcdc << 7 | p.scx >> 3) & 0x41F) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; - p.nattrib = p.vram[((p.lcdc << 7 | p.scx >> 3) & 0x41F) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; + p.reg1 = p.vram[((p.lcdc << 7 | p.scx >> 3) & 0x41F) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; + p.nattrib = p.vram[((p.lcdc << 7 | p.scx >> 3) & 0x41F) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; } break; case 2: - { - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - - p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; - } - + p.reg0 = loadTileDataByte0(p); break; case 4: { - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - - p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + - (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; + int const r1 = loadTileDataByte1(p); + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; } break; @@ -255,14 +278,14 @@ namespace M3Start { } { - const unsigned ly = p.lyCounter.ly(); - const unsigned numSprites = p.spriteMapper.numSprites(ly); - const unsigned char *const sprites = p.spriteMapper.sprites(ly); + unsigned const ly = p.lyCounter.ly(); + unsigned const numSprites = p.spriteMapper.numSprites(ly); + unsigned char const *const sprites = p.spriteMapper.sprites(ly); for (unsigned i = 0; i < numSprites; ++i) { - const unsigned pos = sprites[i]; - const unsigned spy = p.spriteMapper.posbuf()[pos ]; - const unsigned spx = p.spriteMapper.posbuf()[pos+1]; + unsigned pos = sprites[i]; + unsigned spy = p.spriteMapper.posbuf()[pos ]; + unsigned spx = p.spriteMapper.posbuf()[pos+1]; p.spriteList[i].spx = spx; p.spriteList[i].line = ly + 16u - spy; @@ -277,7 +300,7 @@ namespace M3Start { p.xpos = 0; p.endx = 8 - (p.scx & 7); - static const PPUState *const flut[8] = { + static PPUState const *const flut[8] = { &M3Loop::Tile::f0_, &M3Loop::Tile::f1_, &M3Loop::Tile::f2_, @@ -293,220 +316,20 @@ namespace M3Start { } namespace M3Loop { - static void doFullTilesUnrolledDmg(PPUPriv &p, const int xend, uint_least32_t *const dbufline, - const unsigned char *const tileMapLine, const unsigned tileline, unsigned tileMapXpos) { - const unsigned tileIndexSign = ~p.lcdc << 3 & 0x80; - const unsigned char *const tileDataLine = p.vram + tileIndexSign * 32 + tileline * 2; - int xpos = p.xpos; - do { - int nextSprite = p.nextSprite; +static void doFullTilesUnrolledDmg(PPUPriv &p, int const xend, uint_least32_t *const dbufline, + unsigned char const *const tileMapLine, unsigned const tileline, unsigned tileMapXpos) { + unsigned const tileIndexSign = ~p.lcdc << 3 & 0x80; + unsigned char const *const tileDataLine = p.vram + tileIndexSign * 32 + tileline * 2; + int xpos = p.xpos; - if (int(p.spriteList[nextSprite].spx) < xpos + 8) { - int cycles = p.cycles - 8; + do { + int nextSprite = p.nextSprite; - if (p.lcdc & 2) { - cycles -= std::max(11 - (int(p.spriteList[nextSprite].spx) - xpos), 6); + if (int(p.spriteList[nextSprite].spx) < xpos + 8) { + int cycles = p.cycles - 8; - for (unsigned i = nextSprite + 1; int(p.spriteList[i].spx) < xpos + 8; ++i) - cycles -= 6; - - if (cycles < 0) - break; - - p.cycles = cycles; - - do { - unsigned reg0, reg1 = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 2] * 16; - const unsigned attrib = p.spriteMapper.oamram()[p.spriteList[nextSprite].oampos + 3]; - - { - const unsigned spline = (attrib & 0x40 ? - p.spriteList[nextSprite].line ^ 15 : p.spriteList[nextSprite].line) * 2; - reg0 = p.vram[(p.lcdc & 4 ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) ]; - reg1 = p.vram[(p.lcdc & 4 ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) + 1]; - } - - p.spwordList[nextSprite] = expand_lut[reg0 + (attrib << 3 & 0x100)] - + expand_lut[reg1 + (attrib << 3 & 0x100)] * 2; - p.spriteList[nextSprite].attrib = attrib; - ++nextSprite; - } while (int(p.spriteList[nextSprite].spx) < xpos + 8); - } else { - if (cycles < 0) - break; - - p.cycles = cycles; - - do { - ++nextSprite; - } while (int(p.spriteList[nextSprite].spx) < xpos + 8); - } - - p.nextSprite = nextSprite; - } else if (nextSprite-1 < 0 || int(p.spriteList[nextSprite-1].spx) <= xpos - 8) { - if (!(p.cycles & ~7)) - break; - - int n = (( xend + 7 < int(p.spriteList[nextSprite].spx) - ? xend + 7 : int(p.spriteList[nextSprite].spx)) - xpos) & ~7; - n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; - p.cycles -= n; - - unsigned ntileword = p.ntileword; - uint_least32_t * dst = dbufline + xpos - 8; - uint_least32_t *const dstend = dst + n; - xpos += n; - - if (!(p.lcdc & 1)) { - do { *dst++ = p.bgPalette[0]; } while (dst != dstend); - tileMapXpos += n >> 3; - - unsigned const tno = tileMapLine[(tileMapXpos - 1) & 0x1F]; - ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] - + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; - } else do { - dst[0] = p.bgPalette[ ntileword & 0x0003 ]; - dst[1] = p.bgPalette[(ntileword & 0x000C) >> 2]; - dst[2] = p.bgPalette[(ntileword & 0x0030) >> 4]; - dst[3] = p.bgPalette[(ntileword & 0x00C0) >> 6]; - dst[4] = p.bgPalette[(ntileword & 0x0300) >> 8]; - dst[5] = p.bgPalette[(ntileword & 0x0C00) >> 10]; - dst[6] = p.bgPalette[(ntileword & 0x3000) >> 12]; - dst[7] = p.bgPalette[ ntileword >> 14]; - dst += 8; - - unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; - tileMapXpos = (tileMapXpos & 0x1F) + 1; - ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] - + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; - } while (dst != dstend); - - p.ntileword = ntileword; - continue; - } else { - int cycles = p.cycles - 8; - - if (cycles < 0) - break; - - p.cycles = cycles; - } - - { - uint_least32_t *const dst = dbufline + (xpos - 8); - const unsigned tileword = -(p.lcdc & 1U) & p.ntileword; - - dst[0] = p.bgPalette[ tileword & 0x0003 ]; - dst[1] = p.bgPalette[(tileword & 0x000C) >> 2]; - dst[2] = p.bgPalette[(tileword & 0x0030) >> 4]; - dst[3] = p.bgPalette[(tileword & 0x00C0) >> 6]; - dst[4] = p.bgPalette[(tileword & 0x0300) >> 8]; - dst[5] = p.bgPalette[(tileword & 0x0C00) >> 10]; - dst[6] = p.bgPalette[(tileword & 0x3000) >> 12]; - dst[7] = p.bgPalette[ tileword >> 14]; - - int i = nextSprite - 1; - - if(p.layersMask & LAYER_MASK_OBJ) - { - if (!(p.lcdc & 2)) { - do { - const int pos = int(p.spriteList[i].spx) - xpos; - p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); - } else { - do { - int n; - int pos = int(p.spriteList[i].spx) - xpos; - - if (pos < 0) { - n = pos + 8; - pos = 0; - } else - n = 8 - pos; - - const unsigned attrib = p.spriteList[i].attrib; - unsigned spword = p.spwordList[i]; - const unsigned long *const spPalette = p.spPalette + (attrib >> 2 & 4); - uint_least32_t *d = dst + pos; - - if (!(attrib & 0x80)) { - switch (n) { - case 8: if (spword >> 14 ) { d[7] = spPalette[spword >> 14 ]; } - case 7: if (spword >> 12 & 3) { d[6] = spPalette[spword >> 12 & 3]; } - case 6: if (spword >> 10 & 3) { d[5] = spPalette[spword >> 10 & 3]; } - case 5: if (spword >> 8 & 3) { d[4] = spPalette[spword >> 8 & 3]; } - case 4: if (spword >> 6 & 3) { d[3] = spPalette[spword >> 6 & 3]; } - case 3: if (spword >> 4 & 3) { d[2] = spPalette[spword >> 4 & 3]; } - case 2: if (spword >> 2 & 3) { d[1] = spPalette[spword >> 2 & 3]; } - case 1: if (spword & 3) { d[0] = spPalette[spword & 3]; } - } - - spword >>= n * 2; - - /*do { - if (spword & 3) - dst[pos] = spPalette[spword & 3]; - - spword >>= 2; - ++pos; - } while (--n);*/ - } else { - unsigned tw = tileword >> pos * 2; - d += n; - n = -n; - - do { - if (spword & 3) { - d[n] = tw & 3 ? p.bgPalette[tw & 3] - : spPalette[spword & 3]; - } - - spword >>= 2; - tw >>= 2; - } while (++n); - } - - p.spwordList[i] = spword; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); - } - } - } - - { - unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; - tileMapXpos = (tileMapXpos & 0x1F) + 1; - p.ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] - + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; - } - - xpos = xpos + 8; - } while (xpos < xend); - - p.xpos = xpos; - } - - static void doFullTilesUnrolledCgb(PPUPriv &p, const int xend, uint_least32_t *const dbufline, - const unsigned char *const tileMapLine, const unsigned tileline, unsigned tileMapXpos) { - int xpos = p.xpos; - const unsigned char *const vram = p.vram; - const unsigned tdoffset = tileline * 2 + (~p.lcdc & 0x10) * 0x100; - - if(!(p.layersMask & LAYER_MASK_BG)) - { - for(int x=xpos,i=0;x> 2]; - dst[2] = bgPalette[(ntileword & 0x0030) >> 4]; - dst[3] = bgPalette[(ntileword & 0x00C0) >> 6]; - dst[4] = bgPalette[(ntileword & 0x0300) >> 8]; - dst[5] = bgPalette[(ntileword & 0x0C00) >> 10]; - dst[6] = bgPalette[(ntileword & 0x3000) >> 12]; - dst[7] = bgPalette[ ntileword >> 14]; - dst += 8; - - unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; - nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; - tileMapXpos = (tileMapXpos & 0x1F) + 1; - - unsigned const tdo = tdoffset & ~(tno << 5); - unsigned char const *const td = vram + tno * 16 - + (nattrib & 0x40 ? tdo ^ 14 : tdo) + (nattrib << 10 & 0x2000); - unsigned short const *const explut = expand_lut + (nattrib << 3 & 0x100); - ntileword = explut[td[0]] + explut[td[1]] * 2; - } while (dst != dstend); - - p.ntileword = ntileword; - p.nattrib = nattrib; - continue; } else { - int cycles = p.cycles - 8; - if (cycles < 0) break; p.cycles = cycles; + + do { + ++nextSprite; + } while (int(p.spriteList[nextSprite].spx) < xpos + 8); } - { - uint_least32_t *const dst = dbufline + (xpos - 8); - const unsigned tileword = p.ntileword; - const unsigned attrib = p.nattrib; - const unsigned long *const bgPalette = p.bgPalette + (attrib & 7) * 4; + p.nextSprite = nextSprite; + } else if (nextSprite-1 < 0 || int(p.spriteList[nextSprite-1].spx) <= xpos - 8) { + if (!(p.cycles & ~7)) + break; - dst[0] = bgPalette[ tileword & 0x0003 ]; - dst[1] = bgPalette[(tileword & 0x000C) >> 2]; - dst[2] = bgPalette[(tileword & 0x0030) >> 4]; - dst[3] = bgPalette[(tileword & 0x00C0) >> 6]; - dst[4] = bgPalette[(tileword & 0x0300) >> 8]; - dst[5] = bgPalette[(tileword & 0x0C00) >> 10]; - dst[6] = bgPalette[(tileword & 0x3000) >> 12]; - dst[7] = bgPalette[ tileword >> 14]; + int n = (( xend + 7 < int(p.spriteList[nextSprite].spx) + ? xend + 7 : int(p.spriteList[nextSprite].spx)) - xpos) & ~7; + n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; + p.cycles -= n; - int i = nextSprite - 1; + unsigned ntileword = p.ntileword; + uint_least32_t * dst = dbufline + xpos - 8; + uint_least32_t *const dstend = dst + n; + xpos += n; - if(p.layersMask & LAYER_MASK_OBJ) - { - if (!(p.lcdc & 2)) { - do { - const int pos = int(p.spriteList[i].spx) - xpos; - p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); - } else { - unsigned char idtab[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - const unsigned bgenmask = p.lcdc << 7 & 0x80; + if (!lcdcBgEn(p)) { + do { *dst++ = p.bgPalette[0]; } while (dst != dstend); + tileMapXpos += n >> 3; - do { - int n; - int pos = int(p.spriteList[i].spx) - xpos; + unsigned const tno = tileMapLine[(tileMapXpos - 1) & 0x1F]; + ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] + + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; + } else do { + dst[0] = p.bgPalette[ ntileword & 0x0003 ]; + dst[1] = p.bgPalette[(ntileword & 0x000C) >> 2]; + dst[2] = p.bgPalette[(ntileword & 0x0030) >> 4]; + dst[3] = p.bgPalette[(ntileword & 0x00C0) >> 6]; + dst[4] = p.bgPalette[(ntileword & 0x0300) >> 8]; + dst[5] = p.bgPalette[(ntileword & 0x0C00) >> 10]; + dst[6] = p.bgPalette[(ntileword & 0x3000) >> 12]; + dst[7] = p.bgPalette[ ntileword >> 14]; + dst += 8; - if (pos < 0) { - n = pos + 8; - pos = 0; - } else - n = 8 - pos; + unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; + tileMapXpos = (tileMapXpos & 0x1F) + 1; + ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] + + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; + } while (dst != dstend); - const unsigned char id = p.spriteList[i].oampos; - const unsigned sattrib = p.spriteList[i].attrib; - unsigned spword = p.spwordList[i]; - const unsigned long *const spPalette = p.spPalette + (sattrib & 7) * 4; + p.ntileword = ntileword; + continue; + } else { + int cycles = p.cycles - 8; + if (cycles < 0) + break; - if (!((attrib | sattrib) & bgenmask)) { - unsigned char *const idt = idtab + pos; - uint_least32_t *const d = dst + pos; + p.cycles = cycles; + } - switch (n) { - case 8: if ((spword >> 14 ) && id < idt[7]) { - idt[7] = id; - d[7] = spPalette[spword >> 14 ]; - } - case 7: if ((spword >> 12 & 3) && id < idt[6]) { - idt[6] = id; - d[6] = spPalette[spword >> 12 & 3]; - } - case 6: if ((spword >> 10 & 3) && id < idt[5]) { - idt[5] = id; - d[5] = spPalette[spword >> 10 & 3]; - } - case 5: if ((spword >> 8 & 3) && id < idt[4]) { - idt[4] = id; - d[4] = spPalette[spword >> 8 & 3]; - } - case 4: if ((spword >> 6 & 3) && id < idt[3]) { - idt[3] = id; - d[3] = spPalette[spword >> 6 & 3]; - } - case 3: if ((spword >> 4 & 3) && id < idt[2]) { - idt[2] = id; - d[2] = spPalette[spword >> 4 & 3]; - } - case 2: if ((spword >> 2 & 3) && id < idt[1]) { - idt[1] = id; - d[1] = spPalette[spword >> 2 & 3]; - } - case 1: if ((spword & 3) && id < idt[0]) { - idt[0] = id; - d[0] = spPalette[spword & 3]; - } - } + { + uint_least32_t *const dst = dbufline + (xpos - 8); + unsigned const tileword = -(p.lcdc & 1U) & p.ntileword; - spword >>= n * 2; + dst[0] = p.bgPalette[ tileword & 0x0003 ]; + dst[1] = p.bgPalette[(tileword & 0x000C) >> 2]; + dst[2] = p.bgPalette[(tileword & 0x0030) >> 4]; + dst[3] = p.bgPalette[(tileword & 0x00C0) >> 6]; + dst[4] = p.bgPalette[(tileword & 0x0300) >> 8]; + dst[5] = p.bgPalette[(tileword & 0x0C00) >> 10]; + dst[6] = p.bgPalette[(tileword & 0x3000) >> 12]; + dst[7] = p.bgPalette[ tileword >> 14]; - /*do { - if ((spword & 3) && id < idtab[pos]) { - idtab[pos] = id; + int i = nextSprite - 1; + + if (!lcdcObjEn(p)) { + do { + int pos = int(p.spriteList[i].spx) - xpos; + p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + } else { + do { + int n; + int pos = int(p.spriteList[i].spx) - xpos; + if (pos < 0) { + n = pos + 8; + pos = 0; + } else + n = 8 - pos; + + unsigned const attrib = p.spriteList[i].attrib; + unsigned spword = p.spwordList[i]; + unsigned long const *const spPalette = p.spPalette + (attrib >> 2 & 4); + uint_least32_t *d = dst + pos; + + if (!(attrib & attr_bgpriority)) { + switch (n) { + case 8: if (spword >> 14 ) { d[7] = spPalette[spword >> 14 ]; } // fallthrough + case 7: if (spword >> 12 & 3) { d[6] = spPalette[spword >> 12 & 3]; } // fallthrough + case 6: if (spword >> 10 & 3) { d[5] = spPalette[spword >> 10 & 3]; } // fallthrough + case 5: if (spword >> 8 & 3) { d[4] = spPalette[spword >> 8 & 3]; } // fallthrough + case 4: if (spword >> 6 & 3) { d[3] = spPalette[spword >> 6 & 3]; } // fallthrough + case 3: if (spword >> 4 & 3) { d[2] = spPalette[spword >> 4 & 3]; } // fallthrough + case 2: if (spword >> 2 & 3) { d[1] = spPalette[spword >> 2 & 3]; } // fallthrough + case 1: if (spword & 3) { d[0] = spPalette[spword & 3]; } + } + + spword >>= n * 2; + + /*do { + if (spword & 3) dst[pos] = spPalette[spword & 3]; - } - spword >>= 2; - ++pos; - } while (--n);*/ - } else { - unsigned tw = tileword >> pos * 2; + spword >>= 2; + ++pos; + } while (--n);*/ + } else { + unsigned tw = tileword >> pos * 2; + d += n; + n = -n; - do { - if ((spword & 3) && id < idtab[pos]) { - idtab[pos] = id; - dst[pos] = tw & 3 ? bgPalette[tw & 3] : spPalette[spword & 3]; - } - - spword >>= 2; - tw >>= 2; - ++pos; - } while (--n); + do { + if (spword & 3) { + d[n] = tw & 3 + ? p.bgPalette[ tw & 3] + : spPalette[spword & 3]; } - p.spwordList[i] = spword; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + spword >>= 2; + tw >>= 2; + } while (++n); } - } - } - { - unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; - unsigned const nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; + p.spwordList[i] = spword; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + } + } + + unsigned const tno = tileMapLine[tileMapXpos & 0x1F]; + tileMapXpos = (tileMapXpos & 0x1F) + 1; + p.ntileword = expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[0]] + + expand_lut[(tileDataLine + tno * 16 - (tno & tileIndexSign) * 32)[1]] * 2; + + xpos = xpos + 8; + } while (xpos < xend); + + p.xpos = xpos; +} + +static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *const dbufline, + unsigned char const *const tileMapLine, unsigned const tileline, unsigned tileMapXpos) { + int xpos = p.xpos; + unsigned char const *const vram = p.vram; + unsigned const tdoffset = tileline * 2 + (~p.lcdc & 0x10) * 0x100; + + do { + int nextSprite = p.nextSprite; + + if (int(p.spriteList[nextSprite].spx) < xpos + 8) { + int cycles = p.cycles - 8; + cycles -= std::max(11 - (int(p.spriteList[nextSprite].spx) - xpos), 6); + + for (unsigned i = nextSprite + 1; int(p.spriteList[i].spx) < xpos + 8; ++i) + cycles -= 6; + + if (cycles < 0) + break; + + p.cycles = cycles; + + do { + unsigned char const *const oam = p.spriteMapper.oamram(); + unsigned reg0, reg1 = oam[p.spriteList[nextSprite].oampos + 2] * 16; + unsigned const attrib = oam[p.spriteList[nextSprite].oampos + 3]; + unsigned const spline = ( attrib & attr_yflip + ? p.spriteList[nextSprite].line ^ 15 + : p.spriteList[nextSprite].line ) * 2; + + reg0 = vram[(attrib << 10 & 0x2000) + + (lcdcObj2x(p) ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) ]; + reg1 = vram[(attrib << 10 & 0x2000) + + (lcdcObj2x(p) ? (reg1 & ~16) | spline : reg1 | (spline & ~16)) + 1]; + + p.spwordList[nextSprite] = expand_lut[reg0 + (attrib << 3 & 0x100)] + + expand_lut[reg1 + (attrib << 3 & 0x100)] * 2; + p.spriteList[nextSprite].attrib = attrib; + ++nextSprite; + } while (int(p.spriteList[nextSprite].spx) < xpos + 8); + + p.nextSprite = nextSprite; + } else if (nextSprite-1 < 0 || int(p.spriteList[nextSprite-1].spx) <= xpos - 8) { + if (!(p.cycles & ~7)) + break; + + int n = (( xend + 7 < int(p.spriteList[nextSprite].spx) + ? xend + 7 : int(p.spriteList[nextSprite].spx)) - xpos) & ~7; + n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; + p.cycles -= n; + + unsigned ntileword = p.ntileword; + unsigned nattrib = p.nattrib; + uint_least32_t * dst = dbufline + xpos - 8; + uint_least32_t *const dstend = dst + n; + xpos += n; + + do { + unsigned long const *const bgPalette = p.bgPalette + (nattrib & 7) * 4; + dst[0] = bgPalette[ ntileword & 0x0003 ]; + dst[1] = bgPalette[(ntileword & 0x000C) >> 2]; + dst[2] = bgPalette[(ntileword & 0x0030) >> 4]; + dst[3] = bgPalette[(ntileword & 0x00C0) >> 6]; + dst[4] = bgPalette[(ntileword & 0x0300) >> 8]; + dst[5] = bgPalette[(ntileword & 0x0C00) >> 10]; + dst[6] = bgPalette[(ntileword & 0x3000) >> 12]; + dst[7] = bgPalette[ ntileword >> 14]; + dst += 8; + + unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; + nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; tileMapXpos = (tileMapXpos & 0x1F) + 1; unsigned const tdo = tdoffset & ~(tno << 5); unsigned char const *const td = vram + tno * 16 - + (nattrib & 0x40 ? tdo ^ 14 : tdo) + (nattrib << 10 & 0x2000); + + (nattrib & attr_yflip ? tdo ^ 14 : tdo) + + (nattrib << 10 & 0x2000); unsigned short const *const explut = expand_lut + (nattrib << 3 & 0x100); - p.ntileword = explut[td[0]] + explut[td[1]] * 2; - p.nattrib = nattrib; + ntileword = explut[td[0]] + explut[td[1]] * 2; + } while (dst != dstend); + + p.ntileword = ntileword; + p.nattrib = nattrib; + continue; + } else { + int cycles = p.cycles - 8; + + if (cycles < 0) + break; + + p.cycles = cycles; + } + + { + uint_least32_t *const dst = dbufline + (xpos - 8); + unsigned const tileword = p.ntileword; + unsigned const attrib = p.nattrib; + unsigned long const *const bgPalette = p.bgPalette + (attrib & 7) * 4; + + dst[0] = bgPalette[ tileword & 0x0003 ]; + dst[1] = bgPalette[(tileword & 0x000C) >> 2]; + dst[2] = bgPalette[(tileword & 0x0030) >> 4]; + dst[3] = bgPalette[(tileword & 0x00C0) >> 6]; + dst[4] = bgPalette[(tileword & 0x0300) >> 8]; + dst[5] = bgPalette[(tileword & 0x0C00) >> 10]; + dst[6] = bgPalette[(tileword & 0x3000) >> 12]; + dst[7] = bgPalette[ tileword >> 14]; + + int i = nextSprite - 1; + + if (!lcdcObjEn(p)) { + do { + int pos = int(p.spriteList[i].spx) - xpos; + p.spwordList[i] >>= pos * 2 >= 0 ? 16 - pos * 2 : 16 + pos * 2; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + } else { + unsigned char idtab[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + unsigned const bgprioritymask = p.lcdc << 7; + + do { + int n; + int pos = int(p.spriteList[i].spx) - xpos; + + if (pos < 0) { + n = pos + 8; + pos = 0; + } else + n = 8 - pos; + + unsigned char const id = p.spriteList[i].oampos; + unsigned const sattrib = p.spriteList[i].attrib; + unsigned spword = p.spwordList[i]; + unsigned long const *const spPalette = p.spPalette + (sattrib & 7) * 4; + + if (!((attrib | sattrib) & bgprioritymask)) { + unsigned char *const idt = idtab + pos; + uint_least32_t *const d = dst + pos; + + switch (n) { + case 8: if ((spword >> 14 ) && id < idt[7]) { + idt[7] = id; + d[7] = spPalette[spword >> 14 ]; + } // fallthrough + case 7: if ((spword >> 12 & 3) && id < idt[6]) { + idt[6] = id; + d[6] = spPalette[spword >> 12 & 3]; + } // fallthrough + case 6: if ((spword >> 10 & 3) && id < idt[5]) { + idt[5] = id; + d[5] = spPalette[spword >> 10 & 3]; + } // fallthrough + case 5: if ((spword >> 8 & 3) && id < idt[4]) { + idt[4] = id; + d[4] = spPalette[spword >> 8 & 3]; + } // fallthrough + case 4: if ((spword >> 6 & 3) && id < idt[3]) { + idt[3] = id; + d[3] = spPalette[spword >> 6 & 3]; + } // fallthrough + case 3: if ((spword >> 4 & 3) && id < idt[2]) { + idt[2] = id; + d[2] = spPalette[spword >> 4 & 3]; + } // fallthrough + case 2: if ((spword >> 2 & 3) && id < idt[1]) { + idt[1] = id; + d[1] = spPalette[spword >> 2 & 3]; + } // fallthrough + case 1: if ((spword & 3) && id < idt[0]) { + idt[0] = id; + d[0] = spPalette[spword & 3]; + } + } + + spword >>= n * 2; + + /*do { + if ((spword & 3) && id < idtab[pos]) { + idtab[pos] = id; + dst[pos] = spPalette[spword & 3]; + } + + spword >>= 2; + ++pos; + } while (--n);*/ + } else { + unsigned tw = tileword >> pos * 2; + + do { + if ((spword & 3) && id < idtab[pos]) { + idtab[pos] = id; + dst[pos] = tw & 3 + ? bgPalette[ tw & 3] + : spPalette[spword & 3]; + } + + spword >>= 2; + tw >>= 2; + ++pos; + } while (--n); + } + + p.spwordList[i] = spword; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } + } - xpos = xpos + 8; - } while (xpos < xend); + { + unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; + unsigned const nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; + tileMapXpos = (tileMapXpos & 0x1F) + 1; - p.xpos = xpos; + unsigned const tdo = tdoffset & ~(tno << 5); + unsigned char const *const td = vram + tno * 16 + + (nattrib & attr_yflip ? tdo ^ 14 : tdo) + + (nattrib << 10 & 0x2000); + unsigned short const *const explut = expand_lut + (nattrib << 3 & 0x100); + p.ntileword = explut[td[0]] + explut[td[1]] * 2; + p.nattrib = nattrib; + } + + xpos = xpos + 8; + } while (xpos < xend); + + p.xpos = xpos; +} + +static void doFullTilesUnrolled(PPUPriv &p) { + int xpos = p.xpos; + int const xend = static_cast(p.wx) < xpos || p.wx >= 168 + ? 161 + : static_cast(p.wx) - 7; + if (xpos >= xend) + return; + + uint_least32_t *const dbufline = p.framebuf.fbline(); + unsigned char const *tileMapLine; + unsigned tileline; + unsigned tileMapXpos; + + if (p.winDrawState & win_draw_started) { + tileMapLine = p.vram + (p.lcdc << 4 & 0x400) + + (p.winYPos & 0xF8) * 4 + 0x1800; + tileMapXpos = (xpos + p.wscx) >> 3; + tileline = p.winYPos & 7; + } else { + tileMapLine = p.vram + (p.lcdc << 7 & 0x400) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800; + tileMapXpos = (p.scx + xpos + 1 - p.cgb) >> 3; + tileline = (p.scy + p.lyCounter.ly()) & 7; } - static void doFullTilesUnrolled(PPUPriv &p) { - int xpos = p.xpos; - const int xend = int(p.wx) < xpos || p.wx >= 168 ? 161 : int(p.wx) - 7; - - if (xpos >= xend) - return; - - uint_least32_t *const dbufline = p.framebuf.fbline(); - const unsigned char *tileMapLine; - unsigned tileline; - unsigned tileMapXpos; - - if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { - tileMapLine = p.vram + (p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x1800; - tileMapXpos = (xpos + p.wscx) >> 3; - tileline = p.winYPos & 7; - } else { - tileMapLine = p.vram + (p.lcdc << 7 & 0x400) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800; - tileMapXpos = (p.scx + xpos + 1 - p.cgb) >> 3; - tileline = (p.scy + p.lyCounter.ly()) & 7; - } - - if (xpos < 8) { - uint_least32_t prebuf[16]; - - if (p.cgb) { - doFullTilesUnrolledCgb(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), tileMapLine, tileline, tileMapXpos); - } else - doFullTilesUnrolledDmg(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), tileMapLine, tileline, tileMapXpos); - - const int newxpos = p.xpos; - - if (newxpos > 8) { - std::memcpy(dbufline, prebuf + (8 - xpos), (newxpos - 8) * sizeof *dbufline); - } else if (newxpos < 8) - return; - - if (newxpos >= xend) - return; - - tileMapXpos += (newxpos - xpos) >> 3; - } + if (xpos < 8) { + uint_least32_t prebuf[16]; if (p.cgb) { - doFullTilesUnrolledCgb(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); - } else - doFullTilesUnrolledDmg(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); + doFullTilesUnrolledCgb(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), + tileMapLine, tileline, tileMapXpos); + } else { + doFullTilesUnrolledDmg(p, xend < 8 ? xend : 8, prebuf + (8 - xpos), + tileMapLine, tileline, tileMapXpos); + } + + int const newxpos = p.xpos; + + if (newxpos > 8) { + std::memcpy(dbufline, prebuf + (8 - xpos), (newxpos - 8) * sizeof *dbufline); + } else if (newxpos < 8) + return; + + if (newxpos >= xend) + return; + + tileMapXpos += (newxpos - xpos) >> 3; } - static void plotPixel(PPUPriv &p) { - //ZING! - const int xpos = p.xpos; - const unsigned tileword = p.tileword; - uint_least32_t *const fbline = p.framebuf.fbline(); + if (p.cgb) { + doFullTilesUnrolledCgb(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); + } else + doFullTilesUnrolledDmg(p, xend, dbufline, tileMapLine, tileline, tileMapXpos); +} - if (int(p.wx) == xpos && (p.weMaster || (p.wy2 == p.lyCounter.ly() && (p.lcdc & 0x20))) && xpos < 167) { - if (p.winDrawState == 0 && (p.lcdc & 0x20)) { - p.winDrawState = WIN_DRAW_START | WIN_DRAW_STARTED; - ++p.winYPos; - } else if (!p.cgb && (p.winDrawState == 0 || xpos == 166)) - p.winDrawState |= WIN_DRAW_START; - } +static void plotPixel(PPUPriv &p) { + int const xpos = p.xpos; + unsigned const tileword = p.tileword; + uint_least32_t *const fbline = p.framebuf.fbline(); - const unsigned twdata = tileword & ((p.lcdc & 1) | p.cgb) * 3; - unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7) * 4]; - int i = int(p.nextSprite) - 1; + if (static_cast(p.wx) == xpos + && (p.weMaster || (p.wy2 == p.lyCounter.ly() && lcdcWinEn(p))) + && xpos < 167) { + if (p.winDrawState == 0 && lcdcWinEn(p)) { + p.winDrawState = win_draw_start | win_draw_started; + ++p.winYPos; + } else if (!p.cgb && (p.winDrawState == 0 || xpos == 166)) + p.winDrawState |= win_draw_start; + } - if(!(p.layersMask & LAYER_MASK_BG)) - { - pixel = p.bgPalette[0]; //guessing? clobber the tile that was read - } + unsigned const twdata = tileword & ((p.lcdc & 1) | p.cgb) * 3; + unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7) * 4]; + int i = static_cast(p.nextSprite) - 1; - if (i >= 0 && int(p.spriteList[i].spx) > xpos - 8) { - unsigned spdata = 0; - unsigned attrib = 0; + if (i >= 0 && int(p.spriteList[i].spx) > xpos - 8) { + unsigned spdata = 0; + unsigned attrib = 0; - if (p.cgb) { - unsigned minId = 0xFF; + if (p.cgb) { + unsigned minId = 0xFF; - do { - if ((p.spwordList[i] & 3) && p.spriteList[i].oampos < minId) { - spdata = p.spwordList[i] & 3; - attrib = p.spriteList[i].attrib; - minId = p.spriteList[i].oampos; - } - - p.spwordList[i] >>= 2; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); - - if(p.layersMask & LAYER_MASK_OBJ) - { - if (spdata && (p.lcdc & 2) && (!((attrib | p.attrib) & 0x80) || !twdata || !(p.lcdc & 1))) - pixel = p.spPalette[(attrib & 7) * 4 + spdata]; + do { + if ((p.spwordList[i] & 3) && p.spriteList[i].oampos < minId) { + spdata = p.spwordList[i] & 3; + attrib = p.spriteList[i].attrib; + minId = p.spriteList[i].oampos; } - } else { - do { - if (p.spwordList[i] & 3) { - spdata = p.spwordList[i] & 3; - attrib = p.spriteList[i].attrib; - } - p.spwordList[i] >>= 2; - --i; - } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + p.spwordList[i] >>= 2; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); - if(p.layersMask & LAYER_MASK_OBJ) - { - if (spdata && (p.lcdc & 2) && (!(attrib & 0x80) || !twdata)) - pixel = p.spPalette[(attrib >> 2 & 4) + spdata]; + if (spdata && lcdcObjEn(p) + && (!((attrib | p.attrib) & attr_bgpriority) || !twdata || !lcdcBgEn(p))) { + pixel = p.spPalette[(attrib & 7) * 4 + spdata]; + } + } else { + do { + if (p.spwordList[i] & 3) { + spdata = p.spwordList[i] & 3; + attrib = p.spriteList[i].attrib; } - } + + p.spwordList[i] >>= 2; + --i; + } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); + + if (spdata && lcdcObjEn(p) && (!(attrib & attr_bgpriority) || !twdata)) + pixel = p.spPalette[(attrib >> 2 & 4) + spdata]; } - - if (xpos - 8 >= 0) - fbline[xpos - 8] = pixel; - - p.xpos = xpos + 1; - p.tileword = tileword >> 2; } - static void plotPixelIfNoSprite(PPUPriv &p) { - if (p.spriteList[p.nextSprite].spx == p.xpos) { - if (!((p.lcdc & 2) | p.cgb)) { - do { - ++p.nextSprite; - } while (p.spriteList[p.nextSprite].spx == p.xpos); + if (xpos - 8 >= 0) + fbline[xpos - 8] = pixel; - plotPixel(p); - } - } else - plotPixel(p); - } + p.xpos = xpos + 1; + p.tileword = tileword >> 2; +} - static unsigned long nextM2Time(const PPUPriv &p) { - unsigned long nextm2 = p.lyCounter.isDoubleSpeed() - ? p.lyCounter.time() + (weMasterCheckPriorToLyIncLineCycle(true ) + M2_DS_OFFSET) * 2 - 456 * 2 - : p.lyCounter.time() + weMasterCheckPriorToLyIncLineCycle(p.cgb) - 456 ; - - if (p.lyCounter.ly() == 143) - nextm2 += (456 * 10 + 456 - weMasterCheckPriorToLyIncLineCycle(p.cgb)) << p.lyCounter.isDoubleSpeed(); - - return nextm2; - } - - static void xpos168(PPUPriv &p) { - p.lastM0Time = p.now - (p.cycles << p.lyCounter.isDoubleSpeed()); - - const unsigned long nextm2 = nextM2Time(p); - - p.cycles = p.now >= nextm2 - ? (long(p.now - nextm2) >> p.lyCounter.isDoubleSpeed()) - : -(long(nextm2 - p.now) >> p.lyCounter.isDoubleSpeed()); - - nextCall(0, p.lyCounter.ly() == 143 ? M2::Ly0::f0_ : M2::LyNon0::f0_, p); - } - - static bool handleWinDrawStartReq(const PPUPriv &p, const int xpos, unsigned char &winDrawState) { - const bool startWinDraw = (xpos < 167 || p.cgb) && (winDrawState &= WIN_DRAW_STARTED); - - if (!(p.lcdc & 0x20)) - winDrawState &= ~WIN_DRAW_STARTED; - - return startWinDraw; - } - - static bool handleWinDrawStartReq(PPUPriv &p) { - return handleWinDrawStartReq(p, p.xpos, p.winDrawState); - } - - namespace StartWindowDraw { - static void inc(const PPUState &nextf, PPUPriv &p) { - if (!(p.lcdc & 0x20) && p.cgb) { - plotPixelIfNoSprite(p); - - if (p.xpos == p.endx) { - if (p.xpos < 168) { - nextCall(1,Tile::f0_,p); - } else - xpos168(p); - - return; - } - } - - nextCall(1,nextf,p); - } - - static void f0(PPUPriv &p) { - if (p.xpos == p.endx) { - p.tileword = p.ntileword; - p.attrib = p.nattrib; - p.endx = p.xpos < 160 ? p.xpos + 8 : 168; - } - - p.wscx = 8 - p.xpos; - - if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) { - p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x1800]; - p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 + 0x3800]; - } else { - p.reg1 = p.vram[(p.lcdc << 7 & 0x400) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; - p.nattrib = p.vram[(p.lcdc << 7 & 0x400) + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; - } - - inc(f1_,p); - } - - static void f1(PPUPriv &p) { - inc(f2_,p); - } - - static void f2(PPUPriv &p) { - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - - p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; - - inc(f3_,p); - } - - static void f3(PPUPriv &p) { - inc(f4_,p); - } - - static void f4(PPUPriv &p) { - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - - p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + - (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; - - inc(f5_,p); - } - - static void f5(PPUPriv &p) { - inc(Tile::f0_,p); - } - }; - - namespace LoadSprites { - static void inc(const PPUState &nextf, PPUPriv &p) { - plotPixelIfNoSprite(p); - - if (p.xpos == p.endx) { - if (p.xpos < 168) { - nextCall(1,Tile::f0_,p); - } else - xpos168(p); - } else - nextCall(1,nextf,p); - } - - static void f0(PPUPriv &p) { - p.reg1 = p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 2]; - nextCall(1,f1_,p); - } - - static void f1(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - p.spriteList[p.currentSprite].attrib = p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 3]; - inc(f2_,p); - } - - static void f2(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - const unsigned spline = ((p.spriteList[p.currentSprite].attrib & 0x40) ? - p.spriteList[p.currentSprite].line ^ 15 : p.spriteList[p.currentSprite].line) * 2; - p.reg0 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + - ((p.lcdc & 4) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16))]; - inc(f3_,p); - } - - static void f3(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - inc(f4_,p); - } - - static void f4(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - const unsigned spline = ((p.spriteList[p.currentSprite].attrib & 0x40) ? - p.spriteList[p.currentSprite].line ^ 15 : p.spriteList[p.currentSprite].line) * 2; - p.reg1 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + - ((p.lcdc & 4) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16)) + 1]; - inc(f5_,p); - } - - static void f5(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - plotPixelIfNoSprite(p); - - unsigned entry = p.currentSprite; - - if (entry == p.nextSprite) { +static void plotPixelIfNoSprite(PPUPriv &p) { + if (p.spriteList[p.nextSprite].spx == p.xpos) { + if (!(lcdcObjEn(p) | p.cgb)) { + do { ++p.nextSprite; - } else { - entry = p.nextSprite - 1; - p.spriteList[entry] = p.spriteList[p.currentSprite]; - } + } while (p.spriteList[p.nextSprite].spx == p.xpos); - p.spwordList[entry] = expand_lut[p.reg0 + (p.spriteList[entry].attrib << 3 & 0x100)] + - expand_lut[p.reg1 + (p.spriteList[entry].attrib << 3 & 0x100)] * 2; - p.spriteList[entry].spx = p.xpos; + plotPixel(p); + } + } else + plotPixel(p); +} + +static unsigned long nextM2Time(PPUPriv const &p) { + unsigned long nextm2 = p.lyCounter.isDoubleSpeed() + ? p.lyCounter.time() + (weMasterCheckPriorToLyIncLineCycle(true ) + m2_ds_offset) * 2 - 456 * 2 + : p.lyCounter.time() + weMasterCheckPriorToLyIncLineCycle(p.cgb) - 456 ; + if (p.lyCounter.ly() == 143) + nextm2 += (456 * 10 + 456 - weMasterCheckPriorToLyIncLineCycle(p.cgb)) << p.lyCounter.isDoubleSpeed(); + + return nextm2; +} + +static void xpos168(PPUPriv &p) { + p.lastM0Time = p.now - (p.cycles << p.lyCounter.isDoubleSpeed()); + + unsigned long const nextm2 = nextM2Time(p); + + p.cycles = p.now >= nextm2 + ? long((p.now - nextm2) >> p.lyCounter.isDoubleSpeed()) + : -long((nextm2 - p.now) >> p.lyCounter.isDoubleSpeed()); + + nextCall(0, p.lyCounter.ly() == 143 ? M2_Ly0::f0_ : M2_LyNon0::f0_, p); +} + +static bool handleWinDrawStartReq(PPUPriv const &p, int const xpos, unsigned char &winDrawState) { + bool const startWinDraw = (xpos < 167 || p.cgb) + && (winDrawState &= win_draw_started); + if (!lcdcWinEn(p)) + winDrawState &= ~win_draw_started; + + return startWinDraw; +} + +static bool handleWinDrawStartReq(PPUPriv &p) { + return handleWinDrawStartReq(p, p.xpos, p.winDrawState); +} + +namespace StartWindowDraw { + static void inc(PPUState const &nextf, PPUPriv &p) { + if (!lcdcWinEn(p) && p.cgb) { + plotPixelIfNoSprite(p); if (p.xpos == p.endx) { if (p.xpos < 168) { - nextCall(1,Tile::f0_,p); + nextCall(1, Tile::f0_, p); } else xpos168(p); - } else { - p.nextCallPtr = &Tile::f5_; - nextCall(1,Tile::f5_,p); + + return; } } - }; - namespace Tile { - static void inc(const PPUState &nextf, PPUPriv &p) { - plotPixelIfNoSprite(p); - - if (p.xpos == 168) { - xpos168(p); - } else - nextCall(1,nextf,p); - } - - static void f0(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - doFullTilesUnrolled(p); - - if (p.xpos == 168) { - ++p.cycles; - return xpos168(p); - } + nextCall(1, nextf, p); + } + static void f0(PPUPriv &p) { + if (p.xpos == p.endx) { p.tileword = p.ntileword; p.attrib = p.nattrib; p.endx = p.xpos < 160 ? p.xpos + 8 : 168; + } - if ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW) ) { - p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 - + ((p.xpos + p.wscx) >> 3 & 0x1F) + 0x1800]; - p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + (p.winYPos & 0xF8) * 4 - + ((p.xpos + p.wscx) >> 3 & 0x1F) + 0x3800]; - } else { - p.reg1 = p.vram[((p.lcdc << 7 | (p.scx + p.xpos + 1 - p.cgb) >> 3) & 0x41F) - + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; - p.nattrib = p.vram[((p.lcdc << 7 | (p.scx + p.xpos + 1 - p.cgb) >> 3) & 0x41F) - + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; + p.wscx = 8 - p.xpos; + + if (p.winDrawState & win_draw_started) { + p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + + (p.winYPos & 0xF8) * 4 + 0x1800]; + p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + + (p.winYPos & 0xF8) * 4 + 0x3800]; + } else { + p.reg1 = p.vram[(p.lcdc << 7 & 0x400) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; + p.nattrib = p.vram[(p.lcdc << 7 & 0x400) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; + } + + inc(f1_, p); + } + + static void f1(PPUPriv &p) { + inc(f2_, p); + } + + static void f2(PPUPriv &p) { + p.reg0 = loadTileDataByte0(p); + inc(f3_, p); + } + + static void f3(PPUPriv &p) { + inc(f4_, p); + } + + static void f4(PPUPriv &p) { + int const r1 = loadTileDataByte1(p); + + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; + + inc(f5_, p); + } + + static void f5(PPUPriv &p) { + inc(Tile::f0_, p); + } +} + +namespace LoadSprites { + static void inc(PPUState const &nextf, PPUPriv &p) { + plotPixelIfNoSprite(p); + + if (p.xpos == p.endx) { + if (p.xpos < 168) { + nextCall(1, Tile::f0_, p); + } else + xpos168(p); + } else + nextCall(1, nextf, p); + } + + static void f0(PPUPriv &p) { + p.reg1 = p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 2]; + nextCall(1, f1_, p); + } + + static void f1(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + p.spriteList[p.currentSprite].attrib = + p.spriteMapper.oamram()[p.spriteList[p.currentSprite].oampos + 3]; + inc(f2_, p); + } + + static void f2(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + unsigned const spline = + ( p.spriteList[p.currentSprite].attrib & attr_yflip + ? p.spriteList[p.currentSprite].line ^ 15 + : p.spriteList[p.currentSprite].line ) * 2; + p.reg0 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + + (lcdcObj2x(p) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16))]; + inc(f3_, p); + } + + static void f3(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + inc(f4_, p); + } + + static void f4(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + unsigned const spline = + ( p.spriteList[p.currentSprite].attrib & attr_yflip + ? p.spriteList[p.currentSprite].line ^ 15 + : p.spriteList[p.currentSprite].line ) * 2; + p.reg1 = p.vram[(p.spriteList[p.currentSprite].attrib << 10 & p.cgb * 0x2000) + + (lcdcObj2x(p) ? (p.reg1 * 16 & ~16) | spline : p.reg1 * 16 | (spline & ~16)) + 1]; + inc(f5_, p); + } + + static void f5(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + plotPixelIfNoSprite(p); + + unsigned entry = p.currentSprite; + + if (entry == p.nextSprite) { + ++p.nextSprite; + } else { + entry = p.nextSprite - 1; + p.spriteList[entry] = p.spriteList[p.currentSprite]; + } + + p.spwordList[entry] = expand_lut[p.reg0 + (p.spriteList[entry].attrib << 3 & 0x100)] + + expand_lut[p.reg1 + (p.spriteList[entry].attrib << 3 & 0x100)] * 2; + p.spriteList[entry].spx = p.xpos; + + if (p.xpos == p.endx) { + if (p.xpos < 168) { + nextCall(1, Tile::f0_, p); + } else + xpos168(p); + } else { + p.nextCallPtr = &Tile::f5_; + nextCall(1, Tile::f5_, p); + } + } +} + +namespace Tile { + static void inc(PPUState const &nextf, PPUPriv &p) { + plotPixelIfNoSprite(p); + + if (p.xpos == 168) { + xpos168(p); + } else + nextCall(1, nextf, p); + } + + static void f0(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + doFullTilesUnrolled(p); + + if (p.xpos == 168) { + ++p.cycles; + return xpos168(p); + } + + p.tileword = p.ntileword; + p.attrib = p.nattrib; + p.endx = p.xpos < 160 ? p.xpos + 8 : 168; + + if (p.winDrawState & win_draw_started) { + p.reg1 = p.vram[(p.lcdc << 4 & 0x400) + + (p.winYPos & 0xF8) * 4 + + ((p.xpos + p.wscx) >> 3 & 0x1F) + 0x1800]; + p.nattrib = p.vram[(p.lcdc << 4 & 0x400) + + (p.winYPos & 0xF8) * 4 + + ((p.xpos + p.wscx) >> 3 & 0x1F) + 0x3800]; + } else { + p.reg1 = p.vram[((p.lcdc << 7 | (p.scx + p.xpos + 1 - p.cgb) >> 3) & 0x41F) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x1800]; + p.nattrib = p.vram[((p.lcdc << 7 | (p.scx + p.xpos + 1 - p.cgb) >> 3) & 0x41F) + + ((p.scy + p.lyCounter.ly()) & 0xF8) * 4 + 0x3800]; + } + + inc(f1_, p); + } + + static void f1(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + inc(f2_, p); + } + + static void f2(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + p.reg0 = loadTileDataByte0(p); + inc(f3_, p); + } + + static void f3(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + inc(f4_, p); + } + + static void f4(PPUPriv &p) { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + int const r1 = loadTileDataByte1(p); + + p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + + (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; + + plotPixelIfNoSprite(p); + + if (p.xpos == 168) { + xpos168(p); + } else + nextCall(1, f5_, p); + } + + static void f5(PPUPriv &p) { + int endx = p.endx; + p.nextCallPtr = &f5_; + + do { + if ((p.winDrawState & win_draw_start) && handleWinDrawStartReq(p)) + return StartWindowDraw::f0(p); + + if (p.spriteList[p.nextSprite].spx == p.xpos) { + if (lcdcObjEn(p) | p.cgb) { + p.currentSprite = p.nextSprite; + return LoadSprites::f0(p); + } + + do { + ++p.nextSprite; + } while (p.spriteList[p.nextSprite].spx == p.xpos); } - inc(f1_,p); - } + plotPixel(p); - static void f1(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); + if (p.xpos == endx) { + if (endx < 168) { + nextCall(1, f0_, p); + } else + xpos168(p); - inc(f2_,p); - } - - static void f2(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - - p.reg0 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2]; - - inc(f3_,p); - } - - static void f3(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - inc(f4_,p); - } - - static void f4(PPUPriv &p) { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - const unsigned yoffset = ((p.winDrawState & WIN_DRAW_STARTED) && (p.layersMask & LAYER_MASK_WINDOW)) ? p.winYPos : p.scy + p.lyCounter.ly(); - const unsigned r1 = p.vram[0x1000 + (p.nattrib << 10 & 0x2000) - - ((p.reg1 * 32 | p.lcdc << 8) & 0x1000) - + p.reg1 * 16 + ((-(p.nattrib >> 6 & 1) ^ yoffset) & 7) * 2 + 1]; - - p.ntileword = (expand_lut + (p.nattrib << 3 & 0x100))[p.reg0] + - (expand_lut + (p.nattrib << 3 & 0x100))[r1 ] * 2; - - plotPixelIfNoSprite(p); - - if (p.xpos == 168) { - xpos168(p); - } else - nextCall(1,f5_,p); - } - - static void f5(PPUPriv &p) { - int endx = p.endx; - p.nextCallPtr = &f5_; - - do { - if ((p.winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p)) - return StartWindowDraw::f0(p); - - if (p.spriteList[p.nextSprite].spx == p.xpos) { - if ((p.lcdc & 2) | p.cgb) { - p.currentSprite = p.nextSprite; - return LoadSprites::f0(p); - } - - do { - ++p.nextSprite; - } while (p.spriteList[p.nextSprite].spx == p.xpos); - } - - plotPixel(p); - - if (p.xpos == endx) { - if (endx < 168) { - nextCall(1,f0_,p); - } else - xpos168(p); - - return; - } - } while (--p.cycles >= 0); - } - }; -}; - - -namespace M2 { - namespace Ly0 { - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned winDrawState, int targetxpos, unsigned cycles); + return; + } + } while (--p.cycles >= 0); } +} - namespace LyNon0 { - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned winDrawState, int targetxpos, unsigned cycles); - } +} // namespace M3Loop + +namespace M2_Ly0 { + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, unsigned winDrawState, + int targetxpos, unsigned cycles); +} + +namespace M2_LyNon0 { + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, unsigned winDrawState, + int targetxpos, unsigned cycles); } namespace M3Loop { - static unsigned predictCyclesUntilXposNextLine(const PPUPriv &p, unsigned winDrawState, const int targetx) { - if (p.wx == 166 && !p.cgb && p.xpos < 167 && (p.weMaster || (p.wy2 == p.lyCounter.ly() && (p.lcdc & 0x20)))) - winDrawState = WIN_DRAW_START | (WIN_DRAW_STARTED & p.lcdc >> 4); - const unsigned cycles = (nextM2Time(p) - p.now) >> p.lyCounter.isDoubleSpeed(); - - return p.lyCounter.ly() == 143 - ? M2::Ly0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles) - : M2::LyNon0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles); +static unsigned predictCyclesUntilXposNextLine( + PPUPriv const &p, unsigned winDrawState, int const targetx) { + if (p.wx == 166 && !p.cgb && p.xpos < 167 + && (p.weMaster || (p.wy2 == p.lyCounter.ly() && lcdcWinEn(p)))) { + winDrawState = win_draw_start | (lcdcWinEn(p) ? win_draw_started : 0); } - namespace StartWindowDraw { - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int xpos, int endx, unsigned ly, - unsigned nextSprite, bool weMaster, unsigned winDrawState, int fno, int targetx, unsigned cycles); - } + unsigned const cycles = (nextM2Time(p) - p.now) >> p.lyCounter.isDoubleSpeed(); - namespace Tile { - static const unsigned char* addSpriteCycles(const unsigned char *nextSprite, - const unsigned char *spriteEnd, const unsigned char *const spxOf, const unsigned maxSpx, - const unsigned firstTileXpos, unsigned prevSpriteTileNo, unsigned *const cyclesAccumulator) { - unsigned sum = 0; + return p.lyCounter.ly() == 143 + ? M2_Ly0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles) + : M2_LyNon0::predictCyclesUntilXpos_f0(p, winDrawState, targetx, cycles); +} - while (nextSprite < spriteEnd && spxOf[*nextSprite] <= maxSpx) { - unsigned cycles = 6; - const unsigned distanceFromTileStart = (spxOf[*nextSprite] - firstTileXpos) & 7; - const unsigned tileNo = (spxOf[*nextSprite] - firstTileXpos) & ~7; +namespace StartWindowDraw { + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, int xpos, + int endx, unsigned ly, unsigned nextSprite, bool weMaster, + unsigned winDrawState, int fno, int targetx, unsigned cycles); +} - if (distanceFromTileStart < 5 && tileNo != prevSpriteTileNo) - cycles = 11 - distanceFromTileStart; +namespace Tile { + static unsigned char const * addSpriteCycles(unsigned char const *nextSprite, + unsigned char const *spriteEnd, unsigned char const *const spxOf, + unsigned const maxSpx, unsigned const firstTileXpos, + unsigned prevSpriteTileNo, unsigned *const cyclesAccumulator) { + unsigned sum = 0; - prevSpriteTileNo = tileNo; - sum += cycles; - ++nextSprite; - } + while (nextSprite < spriteEnd && spxOf[*nextSprite] <= maxSpx) { + unsigned cycles = 6; + unsigned const distanceFromTileStart = (spxOf[*nextSprite] - firstTileXpos) & 7; + unsigned const tileNo = (spxOf[*nextSprite] - firstTileXpos) & ~7; - *cyclesAccumulator += sum; + if (distanceFromTileStart < 5 && tileNo != prevSpriteTileNo) + cycles = 11 - distanceFromTileStart; - return nextSprite; + prevSpriteTileNo = tileNo; + sum += cycles; + ++nextSprite; } - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, const int xpos, - const int endx, const unsigned ly, const unsigned nextSprite, - const bool weMaster, unsigned char winDrawState, const int fno, const int targetx, unsigned cycles) { - if ((winDrawState & WIN_DRAW_START) && handleWinDrawStartReq(p, xpos, winDrawState)) { - return StartWindowDraw::predictCyclesUntilXpos_fn(p, xpos, endx, - ly, nextSprite, weMaster, WIN_DRAW_STARTED & p.lcdc >> 4, 0, targetx, cycles); - } + *cyclesAccumulator += sum; - if (xpos > targetx) - return predictCyclesUntilXposNextLine(p, winDrawState, targetx); + return nextSprite; + } - enum { NO_TILE_NUMBER = 1 }; // low bit set, so it will never be equal to an actual tile number. + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, int const xpos, + int const endx, unsigned const ly, unsigned const nextSprite, + bool const weMaster, unsigned char winDrawState, int const fno, + int const targetx, unsigned cycles) { + if ((winDrawState & win_draw_start) + && handleWinDrawStartReq(p, xpos, winDrawState)) { + return StartWindowDraw::predictCyclesUntilXpos_fn(p, xpos, endx, + ly, nextSprite, weMaster, winDrawState, 0, targetx, cycles); + } - int nwx = 0xFF; - cycles += targetx - xpos; + if (xpos > targetx) + return predictCyclesUntilXposNextLine(p, winDrawState, targetx); - if (p.wx - unsigned(xpos) < targetx - unsigned(xpos) && (p.lcdc & 0x20) - && (weMaster || p.wy2 == ly) && !(winDrawState & WIN_DRAW_STARTED) && (p.cgb || p.wx != 166)) { - nwx = p.wx; - cycles += 6; - } + enum { NO_TILE_NUMBER = 1 }; // low bit set, so it will never be equal to an actual tile number. - if ((p.lcdc & 2) | p.cgb) { - const unsigned char *sprite = p.spriteMapper.sprites(ly); - const unsigned char *const spriteEnd = sprite + p.spriteMapper.numSprites(ly); - sprite += nextSprite; + int nwx = 0xFF; + cycles += targetx - xpos; - if (sprite < spriteEnd) { - const int spx = p.spriteMapper.posbuf()[*sprite + 1]; - unsigned firstTileXpos = unsigned(endx) & 7; // ok even if endx is capped at 168, because fno will be used. - unsigned prevSpriteTileNo = (xpos - firstTileXpos) & ~7; // this tile. all sprites on this tile will now add 6 cycles. + if (p.wx - unsigned(xpos) < targetx - unsigned(xpos) + && lcdcWinEn(p) && (weMaster || p.wy2 == ly) + && !(winDrawState & win_draw_started) + && (p.cgb || p.wx != 166)) { + nwx = p.wx; + cycles += 6; + } - // except this one - if (fno + spx - xpos < 5 && spx <= nwx) { - cycles += 11 - (fno + spx - xpos); - sprite += 1; - } + if (lcdcObjEn(p) | p.cgb) { + unsigned char const *sprite = p.spriteMapper.sprites(ly); + unsigned char const *const spriteEnd = sprite + p.spriteMapper.numSprites(ly); + sprite += nextSprite; - if (nwx < targetx) { - sprite = addSpriteCycles(sprite, spriteEnd, p.spriteMapper.posbuf() + 1, - nwx, firstTileXpos, prevSpriteTileNo, &cycles); - firstTileXpos = nwx + 1; - prevSpriteTileNo = NO_TILE_NUMBER; - } - - addSpriteCycles(sprite, spriteEnd, p.spriteMapper.posbuf() + 1, - targetx, firstTileXpos, prevSpriteTileNo, &cycles); + if (sprite < spriteEnd) { + int const spx = p.spriteMapper.posbuf()[*sprite + 1]; + unsigned firstTileXpos = endx & 7u; // ok even if endx is capped at 168, + // because fno will be used. + unsigned prevSpriteTileNo = (xpos - firstTileXpos) & ~7; // this tile. all sprites on this + // tile will now add 6 cycles. + // except this one + if (fno + spx - xpos < 5 && spx <= nwx) { + cycles += 11 - (fno + spx - xpos); + sprite += 1; } - } - return cycles; - } - - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, - int endx, int fno, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.xpos, endx, p.lyCounter.ly(), - p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); - } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.xpos < 160 ? p.xpos + 8 : 168, 0, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 1, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f2(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 2, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f3(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 3, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f4(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 4, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f5(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 5, targetx, cycles); - } - } - - namespace StartWindowDraw { - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int xpos, - const int endx, const unsigned ly, const unsigned nextSprite, const bool weMaster, - const unsigned winDrawState, const int fno, const int targetx, unsigned cycles) { - if (xpos > targetx) - return predictCyclesUntilXposNextLine(p, winDrawState, targetx); - - unsigned cinc = 6 - fno; - - if (!(p.lcdc & 0x20) && p.cgb) { - unsigned xinc = std::min(cinc, std::min(endx, targetx + 1) - xpos); - - if (((p.lcdc & 2) | p.cgb) && p.spriteList[nextSprite].spx < xpos + xinc) { - xpos = p.spriteList[nextSprite].spx; - } else { - cinc = xinc; - xpos += xinc; + if (nwx < targetx) { + sprite = addSpriteCycles(sprite, spriteEnd, p.spriteMapper.posbuf() + 1, + nwx, firstTileXpos, prevSpriteTileNo, &cycles); + firstTileXpos = nwx + 1; + prevSpriteTileNo = NO_TILE_NUMBER; } + + addSpriteCycles(sprite, spriteEnd, p.spriteMapper.posbuf() + 1, + targetx, firstTileXpos, prevSpriteTileNo, &cycles); } - - cycles += cinc; - - if (xpos <= targetx) { - return Tile::predictCyclesUntilXpos_fn(p, xpos, xpos < 160 ? xpos + 8 : 168, - ly, nextSprite, weMaster, winDrawState, 0, targetx, cycles); - } - - return cycles - 1; } - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, int endx, - int fno, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.xpos, endx, - p.lyCounter.ly(), p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); - } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, const int targetx, const unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.xpos == p.endx ? (p.xpos < 160 ? p.xpos + 8 : 168) : p.endx, 0, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 1, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f2(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 2, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f3(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 3, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f4(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 4, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f5(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, p.endx, 5, targetx, cycles); - } + return cycles; } - namespace LoadSprites { - static unsigned predictCyclesUntilXpos_fn(const PPUPriv &p, const int fno, const int targetx, unsigned cycles) { - unsigned nextSprite = p.nextSprite; + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, + int endx, int fno, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.xpos, endx, p.lyCounter.ly(), + p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); + } - if ((p.lcdc & 2) | p.cgb) { - cycles += 6 - fno; - nextSprite += 1; - } - - return Tile::predictCyclesUntilXpos_fn(p, p.xpos, p.endx, p.lyCounter.ly(), - nextSprite, p.weMaster, p.winDrawState, 5, targetx, cycles); - } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 0, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 1, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f2(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 2, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f3(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 3, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f4(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 4, targetx, cycles); - } - static unsigned predictCyclesUntilXpos_f5(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_fn(p, 5, targetx, cycles); - } + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.xpos < 160 ? p.xpos + 8 : 168, 0, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 1, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f2(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 2, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f3(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 3, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f4(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 4, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f5(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 5, targetx, cycles); } } -namespace M3Start { - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, unsigned xpos, unsigned ly, - bool weMaster, unsigned winDrawState, int targetx, unsigned cycles) { - cycles += std::min((unsigned(p.scx) - unsigned(xpos)) & 7, MAX_M3START_CYCLES - xpos) + 1 - p.cgb; - return M3Loop::Tile::predictCyclesUntilXpos_fn(p, 0, 8 - (p.scx & 7), ly, 0, - weMaster, winDrawState, std::min(p.scx & 7, 5), targetx, cycles); +namespace StartWindowDraw { + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, int xpos, + int const endx, unsigned const ly, unsigned const nextSprite, bool const weMaster, + unsigned const winDrawState, int const fno, int const targetx, unsigned cycles) { + if (xpos > targetx) + return predictCyclesUntilXposNextLine(p, winDrawState, targetx); + + unsigned cinc = 6 - fno; + + if (!lcdcWinEn(p) && p.cgb) { + unsigned xinc = std::min(cinc, std::min(endx, targetx + 1) - xpos); + + if ((lcdcObjEn(p) | p.cgb) && p.spriteList[nextSprite].spx < xpos + xinc) { + xpos = p.spriteList[nextSprite].spx; + } else { + cinc = xinc; + xpos += xinc; + } + } + + cycles += cinc; + + if (xpos <= targetx) { + return Tile::predictCyclesUntilXpos_fn(p, xpos, xpos < 160 ? xpos + 8 : 168, + ly, nextSprite, weMaster, winDrawState, 0, targetx, cycles); + } + + return cycles - 1; } - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, unsigned ly, + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, + int endx, int fno, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.xpos, endx, p.lyCounter.ly(), + p.nextSprite, p.weMaster, p.winDrawState, fno, targetx, cycles); + } + + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + int endx = p.xpos == p.endx + ? (p.xpos < 160 ? p.xpos + 8 : 168) + : p.endx; + return predictCyclesUntilXpos_fn(p, endx, 0, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 1, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f2(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 2, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f3(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 3, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f4(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 4, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f5(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, p.endx, 5, targetx, cycles); + } +} + +namespace LoadSprites { + static unsigned predictCyclesUntilXpos_fn(PPUPriv const &p, + int const fno, int const targetx, unsigned cycles) { + unsigned nextSprite = p.nextSprite; + if (lcdcObjEn(p) | p.cgb) { + cycles += 6 - fno; + nextSprite += 1; + } + + return Tile::predictCyclesUntilXpos_fn(p, p.xpos, p.endx, p.lyCounter.ly(), + nextSprite, p.weMaster, p.winDrawState, 5, targetx, cycles); + } + + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 0, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 1, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f2(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 2, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f3(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 3, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f4(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 4, targetx, cycles); + } + static unsigned predictCyclesUntilXpos_f5(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_fn(p, 5, targetx, cycles); + } +} + +} // namespace M3Loop + +namespace M3Start { + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, unsigned xpos, unsigned ly, bool weMaster, unsigned winDrawState, int targetx, unsigned cycles) { - winDrawState = (winDrawState & p.lcdc >> 5 & WIN_DRAW_START) ? WIN_DRAW_STARTED : 0; + cycles += std::min(unsigned(p.scx - xpos) & 7, max_m3start_cycles - xpos) + 1 - p.cgb; + return M3Loop::Tile::predictCyclesUntilXpos_fn(p, 0, 8 - (p.scx & 7), ly, 0, + weMaster, winDrawState, std::min(p.scx & 7, 5), targetx, cycles); + } + + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, unsigned ly, + bool weMaster, unsigned winDrawState, int targetx, unsigned cycles) { + winDrawState = (winDrawState & win_draw_start) && lcdcWinEn(p) ? win_draw_started : 0; return predictCyclesUntilXpos_f1(p, 0, ly, weMaster, winDrawState, targetx, cycles); } - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { - const unsigned ly = p.lyCounter.ly() + (p.lyCounter.time() - p.now < 16); + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + unsigned ly = p.lyCounter.ly() + (p.lyCounter.time() - p.now < 16); return predictCyclesUntilXpos_f0(p, ly, p.weMaster, p.winDrawState, targetx, cycles); } - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, const int targetx, const unsigned cycles) { - return predictCyclesUntilXpos_f1(p, p.xpos, p.lyCounter.ly(), p.weMaster, p.winDrawState, targetx, cycles); + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_f1(p, p.xpos, p.lyCounter.ly(), p.weMaster, + p.winDrawState, targetx, cycles); } } -namespace M2 { - namespace Ly0 { - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, - unsigned winDrawState, int targetx, unsigned cycles) { - bool weMaster = (p.lcdc & 0x20) && 0 == p.wy; - unsigned ly = 0; +namespace M2_Ly0 { + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, + unsigned winDrawState, int targetx, unsigned cycles) { + bool weMaster = lcdcWinEn(p) && 0 == p.wy; + unsigned ly = 0; - return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, - winDrawState, targetx, cycles + m3StartLineCycle(p.cgb)); + return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, + winDrawState, targetx, cycles + m3StartLineCycle(p.cgb)); - } - - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); - } } - namespace LyNon0 { - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, bool weMaster, - unsigned winDrawState, int targetx, unsigned cycles) { - unsigned ly = p.lyCounter.ly() + 1; + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); + } +} - weMaster |= (p.lcdc & 0x20) && ly == p.wy; +namespace M2_LyNon0 { + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, bool weMaster, + unsigned winDrawState, int targetx, unsigned cycles) { + unsigned ly = p.lyCounter.ly() + 1; + weMaster |= lcdcWinEn(p) && ly == p.wy; - return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, winDrawState, targetx, - cycles + 456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb)); - } + return M3Start::predictCyclesUntilXpos_f0(p, ly, weMaster, winDrawState, targetx, + cycles + 456 - weMasterCheckAfterLyIncLineCycle(p.cgb) + m3StartLineCycle(p.cgb)); + } - static unsigned predictCyclesUntilXpos_f1(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_f1(p, p.weMaster, p.winDrawState, targetx, cycles); - } + static unsigned predictCyclesUntilXpos_f1(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_f1(p, p.weMaster, p.winDrawState, targetx, cycles); + } - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, - unsigned winDrawState, int targetx, unsigned cycles) { - bool weMaster = p.weMaster || ((p.lcdc & 0x20) && p.lyCounter.ly() == p.wy); + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, + unsigned winDrawState, int targetx, unsigned cycles) { + bool weMaster = p.weMaster || (lcdcWinEn(p) && p.lyCounter.ly() == p.wy); - return predictCyclesUntilXpos_f1(p, weMaster, winDrawState, targetx, - cycles + weMasterCheckAfterLyIncLineCycle(p.cgb) - weMasterCheckPriorToLyIncLineCycle(p.cgb)); - } + return predictCyclesUntilXpos_f1(p, weMaster, winDrawState, targetx, + cycles + weMasterCheckAfterLyIncLineCycle(p.cgb) + - weMasterCheckPriorToLyIncLineCycle(p.cgb)); + } - static unsigned predictCyclesUntilXpos_f0(const PPUPriv &p, int targetx, unsigned cycles) { - return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); - } + static unsigned predictCyclesUntilXpos_f0(PPUPriv const &p, int targetx, unsigned cycles) { + return predictCyclesUntilXpos_f0(p, p.winDrawState, targetx, cycles); } } @@ -1467,45 +1485,55 @@ namespace M2 { namespace gambatte { -PPUPriv::PPUPriv(NextM0Time &nextM0Time, const unsigned char *const oamram, const unsigned char *const vram) : - nextSprite(0), - currentSprite(0xFF), - layersMask(LAYER_MASK_BG|LAYER_MASK_OBJ), - vram(vram), - nextCallPtr(&M2::Ly0::f0_), - now(0), - lastM0Time(0), - cycles(-4396), - tileword(0), - ntileword(0), - spriteMapper(nextM0Time, lyCounter, oamram), - lcdc(0), - scy(0), - scx(0), - wy(0), - wy2(0), - wx(0), - winDrawState(0), - wscx(0), - winYPos(0), - reg0(0), - reg1(0), - attrib(0), - nattrib(0), - xpos(0), - endx(0), - cgb(false), - weMaster(false) +PPUPriv::PPUPriv(NextM0Time &nextM0Time, unsigned char const *const oamram, unsigned char const *const vram) +: nextSprite(0) +, currentSprite(0xFF) +, vram(vram) +, nextCallPtr(&M2_Ly0::f0_) +, now(0) +, lastM0Time(0) +, cycles(-4396) +, tileword(0) +, ntileword(0) +, spriteMapper(nextM0Time, lyCounter, oamram) +, lcdc(0) +, scy(0) +, scx(0) +, wy(0) +, wy2(0) +, wx(0) +, winDrawState(0) +, wscx(0) +, winYPos(0) +, reg0(0) +, reg1(0) +, attrib(0) +, nattrib(0) +, xpos(0) +, endx(0) +, cgb(false) +, weMaster(false) { std::memset(spriteList, 0, sizeof spriteList); std::memset(spwordList, 0, sizeof spwordList); } +static void saveSpriteList(PPUPriv const &p, SaveState &ss) { + for (unsigned i = 0; i < 10; ++i) { + ss.ppu.spAttribList[i] = p.spriteList[i].attrib; + ss.ppu.spByte0List[i] = p.spwordList[i] & 0xFF; + ss.ppu.spByte1List[i] = p.spwordList[i] >> 8; + } + + ss.ppu.nextSprite = p.nextSprite; + ss.ppu.currentSprite = p.currentSprite; +} + namespace { template struct BSearch { - static std::size_t upperBound(const T a[], const K e) { + static std::size_t upperBound(T const a[], K e) { if (e < a[start + len / 2]) return BSearch::upperBound(a, e); @@ -1515,23 +1543,23 @@ struct BSearch { template struct BSearch { - static std::size_t upperBound(const T[], const K) { + static std::size_t upperBound(T const [], K ) { return start; } }; template -std::size_t upperBound(const T a[], const K e) { +std::size_t upperBound(T const a[], K e) { return BSearch::upperBound(a, e); } struct CycleState { - const PPUState *state; + PPUState const *state; long cycle; operator long() const { return cycle; } }; -static const PPUState * decodeM3LoopState(const unsigned state) { +static PPUState const * decodeM3LoopState(unsigned state) { switch (state) { case M3Loop::Tile::ID0: return &M3Loop::Tile::f0_; case M3Loop::Tile::ID1: return &M3Loop::Tile::f1_; @@ -1558,25 +1586,24 @@ static const PPUState * decodeM3LoopState(const unsigned state) { return 0; } -static long cyclesUntilM0Upperbound(const PPUPriv &p) { +static long cyclesUntilM0Upperbound(PPUPriv const &p) { long cycles = 168 - p.xpos + 6; - for (unsigned i = p.nextSprite; i < 10 && p.spriteList[i].spx < 168; ++i) cycles += 11; return cycles; } -static void loadSpriteList(PPUPriv &p, const SaveState &ss) { +static void loadSpriteList(PPUPriv &p, SaveState const &ss) { if (ss.ppu.videoCycles < 144 * 456UL && ss.ppu.xpos < 168) { - const unsigned ly = ss.ppu.videoCycles / 456; - const unsigned numSprites = p.spriteMapper.numSprites(ly); - const unsigned char *const sprites = p.spriteMapper.sprites(ly); + unsigned const ly = ss.ppu.videoCycles / 456; + unsigned const numSprites = p.spriteMapper.numSprites(ly); + unsigned char const *const sprites = p.spriteMapper.sprites(ly); for (unsigned i = 0; i < numSprites; ++i) { - const unsigned pos = sprites[i]; - const unsigned spy = p.spriteMapper.posbuf()[pos ]; - const unsigned spx = p.spriteMapper.posbuf()[pos+1]; + unsigned pos = sprites[i]; + unsigned spy = p.spriteMapper.posbuf()[pos ]; + unsigned spx = p.spriteMapper.posbuf()[pos+1]; p.spriteList[i].spx = spx; p.spriteList[i].line = ly + 16u - spy; @@ -1597,14 +1624,14 @@ static void loadSpriteList(PPUPriv &p, const SaveState &ss) { } -void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { - const PPUState *const m3loopState = decodeM3LoopState(ss.ppu.state); - const long videoCycles = std::min(ss.ppu.videoCycles, 70223UL); - const bool ds = p_.cgb & ss.mem.ioamhram.get()[0x14D] >> 7; - const long vcycs = videoCycles - ds * M2_DS_OFFSET < 0 - ? videoCycles - ds * M2_DS_OFFSET + 70224 - : videoCycles - ds * M2_DS_OFFSET; - const long lineCycles = static_cast(vcycs) % 456; +void PPU::loadState(SaveState const &ss, unsigned char const *const oamram) { + PPUState const *const m3loopState = decodeM3LoopState(ss.ppu.state); + long const videoCycles = std::min(ss.ppu.videoCycles, 70223UL); + bool const ds = p_.cgb & ss.mem.ioamhram.get()[0x14D] >> 7; + long const vcycs = videoCycles - ds * m2_ds_offset < 0 + ? videoCycles - ds * m2_ds_offset + 70224 + : videoCycles - ds * m2_ds_offset; + long const lineCycles = static_cast(vcycs) % 456; p_.now = ss.cpu.cycleCounter; p_.lcdc = ss.mem.ioamhram.get()[0x140]; @@ -1628,25 +1655,25 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { p_.nattrib = ss.ppu.nattrib & 0xFF; p_.wscx = ss.ppu.wscx; p_.weMaster = ss.ppu.weMaster; - p_.winDrawState = ss.ppu.winDrawState & (WIN_DRAW_START | WIN_DRAW_STARTED); + p_.winDrawState = ss.ppu.winDrawState & (win_draw_start | win_draw_started); p_.lastM0Time = p_.now - ss.ppu.lastM0Time; p_.cgb = ss.ppu.isCgb; loadSpriteList(p_, ss); if (m3loopState && videoCycles < 144 * 456L && p_.xpos < 168 - && lineCycles + cyclesUntilM0Upperbound(p_) < long(weMasterCheckPriorToLyIncLineCycle(p_.cgb))) { + && lineCycles + cyclesUntilM0Upperbound(p_) < weMasterCheckPriorToLyIncLineCycle(p_.cgb)) { p_.nextCallPtr = m3loopState; p_.cycles = -1; - } else if (vcycs < 143 * 456L + long(m3StartLineCycle(p_.cgb)) + MAX_M3START_CYCLES) { - const CycleState lineCycleStates[] = { - { &M3Start::f0_, m3StartLineCycle(p_.cgb) }, - { &M3Start::f1_, m3StartLineCycle(p_.cgb) + MAX_M3START_CYCLES }, - { &M2::LyNon0::f0_, weMasterCheckPriorToLyIncLineCycle(p_.cgb) }, - { &M2::LyNon0::f1_, weMasterCheckAfterLyIncLineCycle(p_.cgb) }, - { &M3Start::f0_, m3StartLineCycle(p_.cgb) + 456 } + } else if (vcycs < 143 * 456L + static_cast(m3StartLineCycle(p_.cgb)) + max_m3start_cycles) { + CycleState const lineCycleStates[] = { + { &M3Start::f0_, m3StartLineCycle(p_.cgb) }, + { &M3Start::f1_, m3StartLineCycle(p_.cgb) + max_m3start_cycles }, + { &M2_LyNon0::f0_, weMasterCheckPriorToLyIncLineCycle(p_.cgb) }, + { &M2_LyNon0::f1_, weMasterCheckAfterLyIncLineCycle(p_.cgb) }, + { &M3Start::f0_, m3StartLineCycle(p_.cgb) + 456 } }; - const std::size_t pos = + std::size_t const pos = upperBound(lineCycleStates, lineCycles); p_.cycles = lineCycles - lineCycleStates[pos].cycle; @@ -1658,19 +1685,19 @@ void PPU::loadState(const SaveState &ss, const unsigned char *const oamram) { } } else { p_.cycles = vcycs - 70224; - p_.nextCallPtr = &M2::Ly0::f0_; + p_.nextCallPtr = &M2_Ly0::f0_; } } -void PPU::reset(const unsigned char *const oamram, const unsigned char *const vram, const bool cgb) { +void PPU::reset(unsigned char const *oamram, unsigned char const *vram, bool cgb) { p_.vram = vram; p_.cgb = cgb; p_.spriteMapper.reset(oamram, cgb); } -void PPU::resetCc(const unsigned long oldCc, const unsigned long newCc) { - const unsigned long dec = oldCc - newCc; - const unsigned long videoCycles = p_.lcdc & 0x80 ? p_.lyCounter.frameCycles(p_.now) : 0; +void PPU::resetCc(unsigned long const oldCc, unsigned long const newCc) { + unsigned long const dec = oldCc - newCc; + unsigned long const videoCycles = lcdcEn(p_) ? p_.lyCounter.frameCycles(p_.now) : 0; p_.now -= dec; p_.lastM0Time = p_.lastM0Time ? p_.lastM0Time - dec : p_.lastM0Time; @@ -1678,58 +1705,59 @@ void PPU::resetCc(const unsigned long oldCc, const unsigned long newCc) { p_.spriteMapper.resetCycleCounter(oldCc, newCc); } -void PPU::speedChange(const unsigned long cycleCounter) { - const unsigned long videoCycles = p_.lcdc & 0x80 ? p_.lyCounter.frameCycles(p_.now) : 0; +void PPU::speedChange(unsigned long const cycleCounter) { + unsigned long const videoCycles = lcdcEn(p_) ? p_.lyCounter.frameCycles(p_.now) : 0; p_.spriteMapper.preSpeedChange(cycleCounter); p_.lyCounter.setDoubleSpeed(!p_.lyCounter.isDoubleSpeed()); p_.lyCounter.reset(videoCycles, p_.now); p_.spriteMapper.postSpeedChange(cycleCounter); - if (&M2::Ly0::f0_ == p_.nextCallPtr || &M2::LyNon0::f0_ == p_.nextCallPtr) { + if (&M2_Ly0::f0_ == p_.nextCallPtr || &M2_LyNon0::f0_ == p_.nextCallPtr) { if (p_.lyCounter.isDoubleSpeed()) { - p_.cycles -= M2_DS_OFFSET; + p_.cycles -= m2_ds_offset; } else - p_.cycles += M2_DS_OFFSET; + p_.cycles += m2_ds_offset; } } -unsigned long PPU::predictedNextXposTime(const unsigned xpos) const { - return p_.now + (p_.nextCallPtr->predictCyclesUntilXpos_f(p_, xpos, -p_.cycles) << p_.lyCounter.isDoubleSpeed()); +unsigned long PPU::predictedNextXposTime(unsigned xpos) const { + return p_.now + + (p_.nextCallPtr->predictCyclesUntilXpos_f(p_, xpos, -p_.cycles) << p_.lyCounter.isDoubleSpeed()); } -void PPU::setLcdc(const unsigned lcdc, const unsigned long cc) { - if ((p_.lcdc ^ lcdc) & lcdc & 0x80) { +void PPU::setLcdc(unsigned const lcdc, unsigned long const cc) { + if ((p_.lcdc ^ lcdc) & lcdc & lcdc_en) { p_.now = cc; p_.lastM0Time = 0; p_.lyCounter.reset(0, p_.now); p_.spriteMapper.enableDisplay(cc); - p_.weMaster = (lcdc & 0x20) && 0 == p_.wy; + p_.weMaster = (lcdc & lcdc_we) && 0 == p_.wy; p_.winDrawState = 0; p_.nextCallPtr = &M3Start::f0_; - p_.cycles = -int(m3StartLineCycle(p_.cgb) + M2_DS_OFFSET * p_.lyCounter.isDoubleSpeed()); - } else if ((p_.lcdc ^ lcdc) & 0x20) { - if (!(lcdc & 0x20)) { - if (p_.winDrawState == WIN_DRAW_STARTED || p_.xpos == 168) - p_.winDrawState &= ~WIN_DRAW_STARTED; - } else if (p_.winDrawState == WIN_DRAW_START) { - p_.winDrawState |= WIN_DRAW_STARTED; + p_.cycles = -int(m3StartLineCycle(p_.cgb) + m2_ds_offset * p_.lyCounter.isDoubleSpeed()); + } else if ((p_.lcdc ^ lcdc) & lcdc_we) { + if (!(lcdc & lcdc_we)) { + if (p_.winDrawState == win_draw_started || p_.xpos == 168) + p_.winDrawState &= ~win_draw_started; + } else if (p_.winDrawState == win_draw_start) { + p_.winDrawState |= win_draw_started; ++p_.winYPos; } } - if ((p_.lcdc ^ lcdc) & 0x04) { - if (p_.lcdc & lcdc & 0x80) + if ((p_.lcdc ^ lcdc) & lcdc_obj2x) { + if (p_.lcdc & lcdc & lcdc_en) p_.spriteMapper.oamChange(cc); - p_.spriteMapper.setLargeSpritesSource(lcdc & 0x04); + p_.spriteMapper.setLargeSpritesSource(lcdc & lcdc_obj2x); } p_.lcdc = lcdc; } -void PPU::update(const unsigned long cc) { - const int cycles = (cc - p_.now) >> p_.lyCounter.isDoubleSpeed(); +void PPU::update(unsigned long const cc) { + int const cycles = (cc - p_.now) >> p_.lyCounter.isDoubleSpeed(); p_.now += cycles << p_.lyCounter.isDoubleSpeed(); p_.cycles += cycles; @@ -1750,9 +1778,9 @@ SYNCFUNC(PPU) NSS(p_.currentSprite); EBS(p_.nextCallPtr, 0); - EVS(p_.nextCallPtr, &M2::Ly0::f0_, 1); - EVS(p_.nextCallPtr, &M2::LyNon0::f0_, 2); - EVS(p_.nextCallPtr, &M2::LyNon0::f1_, 3); + EVS(p_.nextCallPtr, &M2_Ly0::f0_, 1); + EVS(p_.nextCallPtr, &M2_LyNon0::f0_, 2); + EVS(p_.nextCallPtr, &M2_LyNon0::f1_, 3); EVS(p_.nextCallPtr, &M3Start::f0_, 4); EVS(p_.nextCallPtr, &M3Start::f1_, 5); EVS(p_.nextCallPtr, &M3Loop::Tile::f0_, 6); diff --git a/libgambatte/src/video/ppu.h b/libgambatte/src/video/ppu.h index 9ef73f74d4..c3d7f37da5 100644 --- a/libgambatte/src/video/ppu.h +++ b/libgambatte/src/video/ppu.h @@ -19,6 +19,7 @@ #ifndef PPU_H #define PPU_H +#include "lcddef.h" #include "video/ly_counter.h" #include "video/sprite_mapper.h" #include "gbint.h" diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 5c29f24fa2a36f6061d21dd0b8062d3379613fce..a871f98e63ae8c618c519c765adff6e10cab0465 100644 GIT binary patch delta 9215 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 delta 9822 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 SmU@l4P+g*Sj~Pw3i2n!ds3=hY From 1dc9d0e123881500072406380f8e7cf3446d9a2e Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 19:35:42 +0200 Subject: [PATCH 075/138] allow mapping rom bank0 in more cases --- libgambatte/src/mem/cartridge.cpp | 17 ++++++++++++----- output/dll/libgambatte.dll | Bin 141824 -> 141824 bytes 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 5d3dea9e4d..e1f570fdcc 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -92,7 +92,7 @@ class Mbc1 : public DefaultMbc { static unsigned adjustedRombank(unsigned bank) { return bank & 0x1F ? bank : bank | 1; } void setRambank() const { memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, rambank & (rambanks(memptrs) - 1)); } - void setRombank() const { memptrs.setRombank(adjustedRombank(rombank & (rombanks(memptrs) - 1))); } + void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } public: explicit Mbc1(MemPtrs &memptrs) @@ -172,7 +172,7 @@ class Mbc1Multi64 : public Mbc { memptrs.setRombank(adjustedRombank(rb)); } else { memptrs.setRombank0(0); - memptrs.setRombank(adjustedRombank(rombank & (rombanks(memptrs) - 1))); + memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } } @@ -193,7 +193,9 @@ public: break; case 1: rombank = (rombank & 0x60) | (data & 0x1F); - memptrs.setRombank(adjustedRombank(rombank0Mode ? toMulti64Rombank(rombank) : rombank & (rombanks(memptrs) - 1))); + memptrs.setRombank(rombank0Mode + ? adjustedRombank(toMulti64Rombank(rombank)) + : adjustedRombank(rombank) & (rombanks(memptrs) - 1)); break; case 2: rombank = (data << 5 & 0x60) | (rombank & 0x1F); @@ -433,8 +435,13 @@ class Mbc5 : public DefaultMbc { bool enableRam; static unsigned adjustedRombank(const unsigned bank) { return bank; } - void setRambank() const { memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, rambank & (rambanks(memptrs) - 1)); } - void setRombank() const { memptrs.setRombank(adjustedRombank(rombank & (rombanks(memptrs) - 1))); } + + void setRambank() const { + memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, + rambank & (rambanks(memptrs) - 1)); + } + + void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } public: explicit Mbc5(MemPtrs &memptrs) diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index a871f98e63ae8c618c519c765adff6e10cab0465..4b53f609938abdf7c1054faf54c797ffd518d0dc 100644 GIT binary patch delta 467 zcmZp;!qISrV}k%A)9jkfLW~Bdm;yN_mt0a|l%IU?iWYl(+{T)}F?9R0lz8%QbLW`6>8!q3j3@&`cRfq@vF>xtCm0(Z z%JaK?c@fI9d0+w079P|NkNGaOF{9 z>~Q0H;Q|xkmuG0Z#UQW=hz)Kt2>3S_p5I=0p3zv2v0(esw~XgGtY+7|i~(B5zy!n| zK)geoiDAcoMvxE#OpXW026~!-K?0--gh6uC*L`D@0!G;OQ{NbwI2qZupZ(9+FU#1p KJyw=!F%JMMPN*yZ delta 579 zcmZp;!qISrV}k%AlXUfFAx48!I*uG+-GwaO(-tr=FlbMk10)+?F*GnR9DK#+rF^0L zRQI9g6O0WH<-5=EyG%~JuEw@PoPpuYna#6Ki!thUm$UG1bLSvhx5{M3v-5?5yKja! zRC6(Od$W|p@NaYG2%Eg|tbTp8C<8-xHB0xg?sE_;`CUGAw}V{NxqS_gJot={`B>cR zxb8-f7%PJVP@=H`$n0e7bY$st0x*EMPBheUF?1d5@Z$*Yt^ Date: Sat, 25 May 2019 20:27:44 +0200 Subject: [PATCH 076/138] Update sound --- libgambatte/src/initstate.cpp | 32 +- libgambatte/src/memory.cpp | 92 ++--- libgambatte/src/savestate.h | 1 + libgambatte/src/sound.cpp | 199 ++++++----- libgambatte/src/sound.h | 92 +++-- libgambatte/src/sound/channel1.cpp | 327 ++++++++--------- libgambatte/src/sound/channel1.h | 132 +++---- libgambatte/src/sound/channel2.cpp | 215 ++++++----- libgambatte/src/sound/channel2.h | 86 +++-- libgambatte/src/sound/channel3.cpp | 281 +++++++-------- libgambatte/src/sound/channel3.h | 126 +++---- libgambatte/src/sound/channel4.cpp | 352 ++++++++----------- libgambatte/src/sound/channel4.h | 155 ++++---- libgambatte/src/sound/duty_unit.cpp | 200 ++++++----- libgambatte/src/sound/duty_unit.h | 91 ++--- libgambatte/src/sound/envelope_unit.cpp | 138 ++++---- libgambatte/src/sound/envelope_unit.h | 58 +-- libgambatte/src/sound/length_counter.cpp | 104 +++--- libgambatte/src/sound/length_counter.h | 53 ++- libgambatte/src/sound/master_disabler.h | 47 +-- libgambatte/src/sound/sound_unit.h | 54 +-- libgambatte/src/sound/static_output_tester.h | 52 +-- output/dll/libgambatte.dll | Bin 141824 -> 142336 bytes 23 files changed, 1424 insertions(+), 1463 deletions(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 7134577e2d..ccd984d745 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1266,37 +1266,37 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.cycleCounter = 0; // spu.cycleCounter >> 12 & 7 represents the frame sequencer position. - state.spu.ch1.sweep.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.sweep.counter = SoundUnit::counter_disabled; state.spu.ch1.sweep.shadow = 0; state.spu.ch1.sweep.nr0 = 0; state.spu.ch1.sweep.negging = false; - state.spu.ch1.duty.nextPosUpdate = (state.spu.cycleCounter & ~1ul) + 37 * 2; - state.spu.ch1.duty.nr3 = 0; + state.spu.ch1.duty.nextPosUpdate = SoundUnit::counter_disabled; state.spu.ch1.duty.pos = 0; - state.spu.ch1.env.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.duty.high = false; + state.spu.ch1.duty.nr3 = 0; + state.spu.ch1.env.counter = SoundUnit::counter_disabled; state.spu.ch1.env.volume = 0; - state.spu.ch1.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.lcounter.counter = SoundUnit::counter_disabled; state.spu.ch1.lcounter.lengthCounter = 0; state.spu.ch1.nr4 = 0; state.spu.ch1.master = false; - state.spu.ch2.duty.nextPosUpdate = SoundUnit::COUNTER_DISABLED; + state.spu.ch2.duty.nextPosUpdate = SoundUnit::counter_disabled; state.spu.ch2.duty.nr3 = 0; state.spu.ch2.duty.pos = 0; - state.spu.ch2.env.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch2.duty.high = false; + state.spu.ch2.env.counter = SoundUnit::counter_disabled; state.spu.ch2.env.volume = 0; - state.spu.ch2.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch2.lcounter.counter = SoundUnit::counter_disabled; state.spu.ch2.lcounter.lengthCounter = 0; state.spu.ch2.nr4 = 0; state.spu.ch2.master = false; - for (unsigned i = 0; i < 0x10; ++i) - state.spu.ch3.waveRam.ptr[i] = state.mem.ioamhram.get()[0x130 + i]; - - state.spu.ch3.lcounter.counter = SoundUnit::COUNTER_DISABLED; + std::memcpy(state.spu.ch3.waveRam.ptr, state.mem.ioamhram.get() + 0x130, 0x10); + state.spu.ch3.lcounter.counter = SoundUnit::counter_disabled; state.spu.ch3.lcounter.lengthCounter = 0x100; - state.spu.ch3.waveCounter = SoundUnit::COUNTER_DISABLED; - state.spu.ch3.lastReadTime = SoundUnit::COUNTER_DISABLED; + state.spu.ch3.waveCounter = SoundUnit::counter_disabled; + state.spu.ch3.lastReadTime = SoundUnit::counter_disabled; state.spu.ch3.nr3 = 0; state.spu.ch3.nr4 = 0; state.spu.ch3.wavePos = 0; @@ -1305,9 +1305,9 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch4.lfsr.counter = state.spu.cycleCounter + 4; state.spu.ch4.lfsr.reg = 0xFF; - state.spu.ch4.env.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch4.env.counter = SoundUnit::counter_disabled; state.spu.ch4.env.volume = 0; - state.spu.ch4.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch4.lcounter.counter = SoundUnit::counter_disabled; state.spu.ch4.lcounter.lengthCounter = 0; state.spu.ch4.nr4 = 0; state.spu.ch4.master = false; diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index a9fa6a031c..328e6cf083 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -321,7 +321,7 @@ unsigned long Memory::stop(unsigned long cycleCounter) { cycleCounter += 4; if (ioamhram[0x14D] & isCgb()) { - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); display.speedChange(cycleCounter); ioamhram[0x14D] ^= 0x81; @@ -496,7 +496,7 @@ unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleC break; case 0x26: if (ioamhram[0x126] & 0x80) { - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); ioamhram[0x126] = 0xF0 | sound.getStatus(); } else ioamhram[0x126] = 0x70; @@ -518,7 +518,7 @@ unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleC case 0x3D: case 0x3E: case 0x3F: - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); return sound.waveRamRead(P & 0xF); case 0x41: return ioamhram[0x141] | display.getStat(ioamhram[0x145], cycleCounter); @@ -670,8 +670,8 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned return; case 0x10: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr10(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr10(data); data |= 0x80; break; case 0x11: @@ -682,24 +682,24 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned data &= 0x3F; } - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr11(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr11(data); data |= 0x3F; break; case 0x12: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr12(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr12(data); break; case 0x13: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr13(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr13(data); return; case 0x14: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr14(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr14(data); data |= 0xBF; break; case 0x16: @@ -710,88 +710,88 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned data &= 0x3F; } - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr21(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr21(data); data |= 0x3F; break; case 0x17: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr22(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr22(data); break; case 0x18: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr23(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr23(data); return; case 0x19: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr24(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr24(data); data |= 0xBF; break; case 0x1A: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr30(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr30(data); data |= 0x7F; break; case 0x1B: if (!sound.isEnabled() && isCgb()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr31(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr31(data); return; case 0x1C: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr32(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr32(data); data |= 0x9F; break; case 0x1D: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr33(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr33(data); return; case 0x1E: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr34(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr34(data); data |= 0xBF; break; case 0x20: if (!sound.isEnabled() && isCgb()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr41(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr41(data); return; case 0x21: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr42(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr42(data); break; case 0x22: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr43(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr43(data); break; case 0x23: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_nr44(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setNr44(data); data |= 0xBF; break; case 0x24: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.set_so_volume(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.setSoVolume(data); break; case 0x25: if (!sound.isEnabled()) return; - sound.generate_samples(cycleCounter, isDoubleSpeed()); - sound.map_so(data); + sound.generateSamples(cycleCounter, isDoubleSpeed()); + sound.mapSo(data); break; case 0x26: if ((ioamhram[0x126] ^ data) & 0x80) { - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); if (!(data & 0x80)) { for (unsigned i = 0xFF10; i < 0xFF26; ++i) @@ -822,7 +822,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned case 0x3D: case 0x3E: case 0x3F: - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); sound.waveRamWrite(P & 0xF, data); break; case 0x40: @@ -1067,7 +1067,7 @@ LoadRes Memory::loadROM(const char *romfiledata, unsigned romfilelength, const b } unsigned Memory::fillSoundBuffer(const unsigned long cycleCounter) { - sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.generateSamples(cycleCounter, isDoubleSpeed()); return sound.fillBuffer(); } diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index 598426edd8..13707b1e53 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -125,6 +125,7 @@ struct SaveState { unsigned long nextPosUpdate; unsigned char nr3; unsigned char pos; + unsigned char /*bool*/ high; }; struct Env { diff --git a/libgambatte/src/sound.cpp b/libgambatte/src/sound.cpp index 68449b158e..69ebe39f18 100644 --- a/libgambatte/src/sound.cpp +++ b/libgambatte/src/sound.cpp @@ -1,33 +1,33 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "sound.h" #include "savestate.h" -#include #include +#include /* Frame Sequencer Step Length Ctr Vol Env Sweep - - - - - - - - - - - - - - - - - - - - - 0 Clock - Clock -S 1 - Clock - +S0 0 Clock - Clock +S1 1 - Clock - 2 Clock - - 3 - - - 4 Clock - Clock @@ -37,82 +37,82 @@ S 1 - Clock - - - - - - - - - - - - - - - - - - - - - Rate 256 Hz 64 Hz 128 Hz -S) start step on sound power on. +S0) start step on sound power on. +S1) step gets immediately incremented at power on if closer to previous edge than next. +Clock) clock timer on transition to step. + */ namespace gambatte { PSG::PSG() -: buffer(0), - lastUpdate(0), - soVol(0), - rsum(0x8000), // initialize to 0x8000 to prevent borrows from high word, xor away later - bufferPos(0), - enabled(false) +: buffer_(0) +, bufferPos_(0) +, lastUpdate_(0) +, soVol_(0) +, rsum_(0x8000) // initialize to 0x8000 to prevent borrows from high word, xor away later +, enabled_(false) { } -void PSG::init(const bool cgb) { - ch1.init(cgb); - ch2.init(cgb); - ch3.init(cgb); - ch4.init(cgb); +void PSG::init(bool cgb) { + ch1_.init(cgb); + ch3_.init(cgb); } void PSG::reset() { - ch1.reset(); - ch2.reset(); - ch3.reset(); - ch4.reset(); + ch1_.reset(); + ch2_.reset(); + ch3_.reset(); + ch4_.reset(); } void PSG::setStatePtrs(SaveState &state) { - ch3.setStatePtrs(state); + ch3_.setStatePtrs(state); } -void PSG::loadState(const SaveState &state) { - ch1.loadState(state); - ch2.loadState(state); - ch3.loadState(state); - ch4.loadState(state); +void PSG::loadState(SaveState const &state) { + ch1_.loadState(state); + ch2_.loadState(state); + ch3_.loadState(state); + ch4_.loadState(state); - lastUpdate = state.cpu.cycleCounter; - set_so_volume(state.mem.ioamhram.get()[0x124]); - map_so(state.mem.ioamhram.get()[0x125]); - enabled = state.mem.ioamhram.get()[0x126] >> 7 & 1; + lastUpdate_ = state.cpu.cycleCounter; + setSoVolume(state.mem.ioamhram.get()[0x124]); + mapSo(state.mem.ioamhram.get()[0x125]); + enabled_ = state.mem.ioamhram.get()[0x126] >> 7 & 1; } -void PSG::accumulate_channels(const unsigned long cycles) { - uint_least32_t *const buf = buffer + bufferPos; - +void PSG::accumulateChannels(unsigned long const cycles) { + uint_least32_t *const buf = buffer_ + bufferPos_; std::memset(buf, 0, cycles * sizeof *buf); - ch1.update(buf, soVol, cycles); - ch2.update(buf, soVol, cycles); - ch3.update(buf, soVol, cycles); - ch4.update(buf, soVol, cycles); + ch1_.update(buf, soVol_, cycles); + ch2_.update(buf, soVol_, cycles); + ch3_.update(buf, soVol_, cycles); + ch4_.update(buf, soVol_, cycles); } -void PSG::generate_samples(const unsigned long cycleCounter, const unsigned doubleSpeed) { - const unsigned long cycles = (cycleCounter - lastUpdate) >> (1 + doubleSpeed); - lastUpdate += cycles << (1 + doubleSpeed); +void PSG::generateSamples(unsigned long const cycleCounter, bool const doubleSpeed) { + unsigned long const cycles = (cycleCounter - lastUpdate_) >> (1 + doubleSpeed); + lastUpdate_ += cycles << (1 + doubleSpeed); if (cycles) - accumulate_channels(cycles); + accumulateChannels(cycles); - bufferPos += cycles; + bufferPos_ += cycles; } -void PSG::resetCounter(const unsigned long newCc, const unsigned long oldCc, const unsigned doubleSpeed) { - generate_samples(oldCc, doubleSpeed); - lastUpdate = newCc - (oldCc - lastUpdate); +void PSG::resetCounter(unsigned long newCc, unsigned long oldCc, bool doubleSpeed) { + generateSamples(oldCc, doubleSpeed); + lastUpdate_ = newCc - (oldCc - lastUpdate_); } -unsigned PSG::fillBuffer() { - uint_least32_t sum = rsum; - uint_least32_t *b = buffer; - unsigned n = bufferPos; +std::size_t PSG::fillBuffer() { + uint_least32_t sum = rsum_; + uint_least32_t *b = buffer_; + std::size_t n = bufferPos_; - if (unsigned n2 = n >> 3) { + if (std::size_t n2 = n >> 3) { n -= n2 << 3; do { @@ -139,50 +139,59 @@ unsigned PSG::fillBuffer() { while (n--) { sum += *b; - *b++ = sum ^ 0x8000; // xor away the initial rsum value of 0x8000 (which prevents borrows from the high word) from the low word + // xor away the initial rsum value of 0x8000 (which prevents + // borrows from the high word) from the low word + *b++ = sum ^ 0x8000; } - rsum = sum; + rsum_ = sum; - return bufferPos; + return bufferPos_; } -#ifdef WORDS_BIGENDIAN -static const unsigned long so1Mul = 0x00000001; -static const unsigned long so2Mul = 0x00010000; -#else -static const unsigned long so1Mul = 0x00010000; -static const unsigned long so2Mul = 0x00000001; -#endif - -void PSG::set_so_volume(const unsigned nr50) { - soVol = (((nr50 & 0x7) + 1) * so1Mul + ((nr50 >> 4 & 0x7) + 1) * so2Mul) * 64; +static bool isBigEndianSampleOrder() { + union { + uint_least32_t ul32; + unsigned char uc[sizeof(uint_least32_t)]; + } u; + u.ul32 = -0x10000; + return u.uc[0]; } -void PSG::map_so(const unsigned nr51) { - const unsigned long tmp = nr51 * so1Mul + (nr51 >> 4) * so2Mul; +static unsigned long so1Mul() { return isBigEndianSampleOrder() ? 0x00000001 : 0x00010000; } +static unsigned long so2Mul() { return isBigEndianSampleOrder() ? 0x00010000 : 0x00000001; } - ch1.setSo((tmp & 0x00010001) * 0xFFFF); - ch2.setSo((tmp >> 1 & 0x00010001) * 0xFFFF); - ch3.setSo((tmp >> 2 & 0x00010001) * 0xFFFF); - ch4.setSo((tmp >> 3 & 0x00010001) * 0xFFFF); +void PSG::setSoVolume(unsigned nr50) { + soVol_ = ((nr50 & 0x7) + 1) * so1Mul() * 64 + + ((nr50 >> 4 & 0x7) + 1) * so2Mul() * 64; +} + +void PSG::mapSo(unsigned nr51) { + unsigned long so = nr51 * so1Mul() + (nr51 >> 4) * so2Mul(); + ch1_.setSo((so & 0x00010001) * 0xFFFF); + ch2_.setSo((so >> 1 & 0x00010001) * 0xFFFF); + ch3_.setSo((so >> 2 & 0x00010001) * 0xFFFF); + ch4_.setSo((so >> 3 & 0x00010001) * 0xFFFF); } unsigned PSG::getStatus() const { - return ch1.isActive() | ch2.isActive() << 1 | ch3.isActive() << 2 | ch4.isActive() << 3; + return ch1_.isActive() + | ch2_.isActive() << 1 + | ch3_.isActive() << 2 + | ch4_.isActive() << 3; } // the buffer and position are not saved, as they're set and flushed on each runfor() call SYNCFUNC(PSG) { - SSS(ch1); - SSS(ch2); - SSS(ch3); - SSS(ch4); - NSS(lastUpdate); - NSS(soVol); - NSS(rsum); - NSS(enabled); + SSS(ch1_); + SSS(ch2_); + SSS(ch3_); + SSS(ch4_); + NSS(lastUpdate_); + NSS(soVol_); + NSS(rsum_); + NSS(enabled_); } } diff --git a/libgambatte/src/sound.h b/libgambatte/src/sound.h index 367a10f1a8..ff3c7e0fb2 100644 --- a/libgambatte/src/sound.h +++ b/libgambatte/src/sound.h @@ -28,67 +28,65 @@ namespace gambatte { class PSG { - Channel1 ch1; - Channel2 ch2; - Channel3 ch3; - Channel4 ch4; - - uint_least32_t *buffer; - - unsigned long lastUpdate; - unsigned long soVol; - - uint_least32_t rsum; - - unsigned bufferPos; - - bool enabled; - - void accumulate_channels(unsigned long cycles); - public: PSG(); void init(bool cgb); void reset(); void setStatePtrs(SaveState &state); - void loadState(const SaveState &state); + void loadState(SaveState const &state); - void generate_samples(unsigned long cycleCounter, unsigned doubleSpeed); - void resetCounter(unsigned long newCc, unsigned long oldCc, unsigned doubleSpeed); - unsigned fillBuffer(); - void setBuffer(uint_least32_t *const buf) { buffer = buf; bufferPos = 0; } + void generateSamples(unsigned long cycleCounter, bool doubleSpeed); + void resetCounter(unsigned long newCc, unsigned long oldCc, bool doubleSpeed); + std::size_t fillBuffer(); + void setBuffer(uint_least32_t *buf) { buffer_ = buf; bufferPos_ = 0; } - bool isEnabled() const { return enabled; } - void setEnabled(bool value) { enabled = value; } + bool isEnabled() const { return enabled_; } + void setEnabled(bool value) { enabled_ = value; } - void set_nr10(unsigned data) { ch1.setNr0(data); } - void set_nr11(unsigned data) { ch1.setNr1(data); } - void set_nr12(unsigned data) { ch1.setNr2(data); } - void set_nr13(unsigned data) { ch1.setNr3(data); } - void set_nr14(unsigned data) { ch1.setNr4(data); } + void setNr10(unsigned data) { ch1_.setNr0(data); } + void setNr11(unsigned data) { ch1_.setNr1(data); } + void setNr12(unsigned data) { ch1_.setNr2(data); } + void setNr13(unsigned data) { ch1_.setNr3(data); } + void setNr14(unsigned data) { ch1_.setNr4(data); } - void set_nr21(unsigned data) { ch2.setNr1(data); } - void set_nr22(unsigned data) { ch2.setNr2(data); } - void set_nr23(unsigned data) { ch2.setNr3(data); } - void set_nr24(unsigned data) { ch2.setNr4(data); } + void setNr21(unsigned data) { ch2_.setNr1(data); } + void setNr22(unsigned data) { ch2_.setNr2(data); } + void setNr23(unsigned data) { ch2_.setNr3(data); } + void setNr24(unsigned data) { ch2_.setNr4(data); } - void set_nr30(unsigned data) { ch3.setNr0(data); } - void set_nr31(unsigned data) { ch3.setNr1(data); } - void set_nr32(unsigned data) { ch3.setNr2(data); } - void set_nr33(unsigned data) { ch3.setNr3(data); } - void set_nr34(unsigned data) { ch3.setNr4(data); } - unsigned waveRamRead(unsigned index) const { return ch3.waveRamRead(index); } - void waveRamWrite(unsigned index, unsigned data) { ch3.waveRamWrite(index, data); } + void setNr30(unsigned data) { ch3_.setNr0(data); } + void setNr31(unsigned data) { ch3_.setNr1(data); } + void setNr32(unsigned data) { ch3_.setNr2(data); } + void setNr33(unsigned data) { ch3_.setNr3(data); } + void setNr34(unsigned data) { ch3_.setNr4(data); } + unsigned waveRamRead(unsigned index) const { return ch3_.waveRamRead(index); } + void waveRamWrite(unsigned index, unsigned data) { ch3_.waveRamWrite(index, data); } - void set_nr41(unsigned data) { ch4.setNr1(data); } - void set_nr42(unsigned data) { ch4.setNr2(data); } - void set_nr43(unsigned data) { ch4.setNr3(data); } - void set_nr44(unsigned data) { ch4.setNr4(data); } + void setNr41(unsigned data) { ch4_.setNr1(data); } + void setNr42(unsigned data) { ch4_.setNr2(data); } + void setNr43(unsigned data) { ch4_.setNr3(data); } + void setNr44(unsigned data) { ch4_.setNr4(data); } - void set_so_volume(unsigned nr50); - void map_so(unsigned nr51); + void setSoVolume(unsigned nr50); + void mapSo(unsigned nr51); unsigned getStatus() const; +private: + Channel1 ch1_; + Channel2 ch2_; + Channel3 ch3_; + Channel4 ch4_; + uint_least32_t *buffer_; + std::size_t bufferPos_; + unsigned long lastUpdate_; + unsigned long soVol_; + uint_least32_t rsum_; + bool enabled_; + + void accumulateChannels(unsigned long cycles); + + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/channel1.cpp b/libgambatte/src/sound/channel1.cpp index 4a9f0a7578..9e94ab2a20 100644 --- a/libgambatte/src/sound/channel1.cpp +++ b/libgambatte/src/sound/channel1.cpp @@ -1,275 +1,276 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aam�s * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "channel1.h" #include "../savestate.h" #include - namespace gambatte { -Channel1::SweepUnit::SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit) : - disableMaster(disabler), - dutyUnit(dutyUnit), - shadow(0), - nr0(0), - negging(false) -{} +Channel1::SweepUnit::SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit) +: disableMaster_(disabler) +, dutyUnit_(dutyUnit) +, shadow_(0) +, nr0_(0) +, negging_(false) +, cgb_(false) +{ +} unsigned Channel1::SweepUnit::calcFreq() { - unsigned freq = shadow >> (nr0 & 0x07); + unsigned freq = shadow_ >> (nr0_ & 0x07); - if (nr0 & 0x08) { - freq = shadow - freq; - negging = true; + if (nr0_ & 0x08) { + freq = shadow_ - freq; + negging_ = true; } else - freq = shadow + freq; + freq = shadow_ + freq; if (freq & 2048) - disableMaster(); + disableMaster_(); return freq; } void Channel1::SweepUnit::event() { - const unsigned long period = nr0 >> 4 & 0x07; + unsigned long const period = nr0_ >> 4 & 0x07; if (period) { - const unsigned freq = calcFreq(); + unsigned const freq = calcFreq(); - if (!(freq & 2048) && (nr0 & 0x07)) { - shadow = freq; - dutyUnit.setFreq(freq, counter); + if (!(freq & 2048) && (nr0_ & 0x07)) { + shadow_ = freq; + dutyUnit_.setFreq(freq, counter_); calcFreq(); } - counter += period << 14; + counter_ += period << 14; } else - counter += 8ul << 14; + counter_ += 8ul << 14; } -void Channel1::SweepUnit::nr0Change(const unsigned newNr0) { - if (negging && !(newNr0 & 0x08)) - disableMaster(); +void Channel1::SweepUnit::nr0Change(unsigned newNr0) { + if (negging_ && !(newNr0 & 0x08)) + disableMaster_(); - nr0 = newNr0; + nr0_ = newNr0; } -void Channel1::SweepUnit::nr4Init(const unsigned long cc) { - negging = false; - shadow = dutyUnit.getFreq(); +void Channel1::SweepUnit::nr4Init(unsigned long const cc) { + negging_ = false; + shadow_ = dutyUnit_.freq(); - const unsigned period = nr0 >> 4 & 0x07; - const unsigned shift = nr0 & 0x07; + unsigned const period = nr0_ >> 4 & 0x07; + unsigned const shift = nr0_ & 0x07; if (period | shift) - counter = ((cc >> 14) + (period ? period : 8)) << 14; + counter_ = ((((cc + 2 + cgb_ * 2) >> 14) + (period ? period : 8)) << 14) + 2; else - counter = COUNTER_DISABLED; + counter_ = counter_disabled; if (shift) calcFreq(); } void Channel1::SweepUnit::reset() { - counter = COUNTER_DISABLED; + counter_ = counter_disabled; } -void Channel1::SweepUnit::loadState(const SaveState &state) { - counter = std::max(state.spu.ch1.sweep.counter, state.spu.cycleCounter); - shadow = state.spu.ch1.sweep.shadow; - nr0 = state.spu.ch1.sweep.nr0; - negging = state.spu.ch1.sweep.negging; +void Channel1::SweepUnit::loadState(SaveState const &state) { + counter_ = std::max(state.spu.ch1.sweep.counter, state.spu.cycleCounter); + shadow_ = state.spu.ch1.sweep.shadow; + nr0_ = state.spu.ch1.sweep.nr0; + negging_ = state.spu.ch1.sweep.negging; } template void Channel1::SweepUnit::SyncState(NewState *ns) { - NSS(counter); - NSS(shadow); - NSS(nr0); - NSS(negging); + NSS(counter_); + NSS(shadow_); + NSS(nr0_); + NSS(negging_); + NSS(cgb_); } -Channel1::Channel1() : - staticOutputTest(*this, dutyUnit), - disableMaster(master, dutyUnit), - lengthCounter(disableMaster, 0x3F), - envelopeUnit(staticOutputTest), - sweepUnit(disableMaster, dutyUnit), - cycleCounter(0), - soMask(0), - prevOut(0), - nr4(0), - master(false) +Channel1::Channel1() +: staticOutputTest_(*this, dutyUnit_) +, disableMaster_(master_, dutyUnit_) +, lengthCounter_(disableMaster_, 0x3F) +, envelopeUnit_(staticOutputTest_) +, sweepUnit_(disableMaster_, dutyUnit_) +, nextEventUnit_(0) +, cycleCounter_(0) +, soMask_(0) +, prevOut_(0) +, nr4_(0) +, master_(false) { setEvent(); } void Channel1::setEvent() { -// nextEventUnit = &dutyUnit; -// if (sweepUnit.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &sweepUnit; - if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &envelopeUnit; - if (lengthCounter.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &lengthCounter; + nextEventUnit_ = &sweepUnit_; + if (envelopeUnit_.counter() < nextEventUnit_->counter()) + nextEventUnit_ = &envelopeUnit_; + if (lengthCounter_.counter() < nextEventUnit_->counter()) + nextEventUnit_ = &lengthCounter_; } -void Channel1::setNr0(const unsigned data) { - sweepUnit.nr0Change(data); +void Channel1::setNr0(unsigned data) { + sweepUnit_.nr0Change(data); setEvent(); } -void Channel1::setNr1(const unsigned data) { - lengthCounter.nr1Change(data, nr4, cycleCounter); - dutyUnit.nr1Change(data, cycleCounter); - +void Channel1::setNr1(unsigned data) { + lengthCounter_.nr1Change(data, nr4_, cycleCounter_); + dutyUnit_.nr1Change(data, cycleCounter_); setEvent(); } -void Channel1::setNr2(const unsigned data) { - if (envelopeUnit.nr2Change(data)) - disableMaster(); +void Channel1::setNr2(unsigned data) { + if (envelopeUnit_.nr2Change(data)) + disableMaster_(); else - staticOutputTest(cycleCounter); + staticOutputTest_(cycleCounter_); setEvent(); } -void Channel1::setNr3(const unsigned data) { - dutyUnit.nr3Change(data, cycleCounter); +void Channel1::setNr3(unsigned data) { + dutyUnit_.nr3Change(data, cycleCounter_); setEvent(); } -void Channel1::setNr4(const unsigned data) { - lengthCounter.nr4Change(nr4, data, cycleCounter); +void Channel1::setNr4(unsigned const data) { + lengthCounter_.nr4Change(nr4_, data, cycleCounter_); + nr4_ = data; + dutyUnit_.nr4Change(data, cycleCounter_, master_); - nr4 = data; - - dutyUnit.nr4Change(data, cycleCounter); - - if (data & 0x80) { //init-bit - nr4 &= 0x7F; - master = !envelopeUnit.nr4Init(cycleCounter); - sweepUnit.nr4Init(cycleCounter); - staticOutputTest(cycleCounter); + if (data & 0x80) { // init-bit + nr4_ &= 0x7F; + master_ = !envelopeUnit_.nr4Init(cycleCounter_); + sweepUnit_.nr4Init(cycleCounter_); + staticOutputTest_(cycleCounter_); } setEvent(); } -void Channel1::setSo(const unsigned long soMask) { - this->soMask = soMask; - staticOutputTest(cycleCounter); +void Channel1::setSo(unsigned long soMask) { + soMask_ = soMask; + staticOutputTest_(cycleCounter_); setEvent(); } void Channel1::reset() { - cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. - -// lengthCounter.reset(); - dutyUnit.reset(); - envelopeUnit.reset(); - sweepUnit.reset(); + // cycleCounter >> 12 & 7 represents the frame sequencer position. + cycleCounter_ &= 0xFFF; + cycleCounter_ += ~(cycleCounter_ + 2) << 1 & 0x1000; + dutyUnit_.reset(); + envelopeUnit_.reset(); + sweepUnit_.reset(); setEvent(); } -void Channel1::init(const bool cgb) { - lengthCounter.init(cgb); +void Channel1::init(bool cgb) { + sweepUnit_.init(cgb); } -void Channel1::loadState(const SaveState &state) { - sweepUnit.loadState(state); - dutyUnit.loadState(state.spu.ch1.duty, state.mem.ioamhram.get()[0x111], state.spu.ch1.nr4, state.spu.cycleCounter); - envelopeUnit.loadState(state.spu.ch1.env, state.mem.ioamhram.get()[0x112], state.spu.cycleCounter); - lengthCounter.loadState(state.spu.ch1.lcounter, state.spu.cycleCounter); +void Channel1::loadState(SaveState const &state) { + sweepUnit_.loadState(state); + dutyUnit_.loadState(state.spu.ch1.duty, state.mem.ioamhram.get()[0x111], + state.spu.ch1.nr4, state.spu.cycleCounter); + envelopeUnit_.loadState(state.spu.ch1.env, state.mem.ioamhram.get()[0x112], + state.spu.cycleCounter); + lengthCounter_.loadState(state.spu.ch1.lcounter, state.spu.cycleCounter); - cycleCounter = state.spu.cycleCounter; - nr4 = state.spu.ch1.nr4; - master = state.spu.ch1.master; + cycleCounter_ = state.spu.cycleCounter; + nr4_ = state.spu.ch1.nr4; + master_ = state.spu.ch1.master; } -void Channel1::update(uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { - const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; - const unsigned long outLow = outBase * (0 - 15ul); - const unsigned long endCycles = cycleCounter + cycles; +void Channel1::update(uint_least32_t *buf, unsigned long const soBaseVol, unsigned long cycles) { + unsigned long const outBase = envelopeUnit_.dacIsOn() ? soBaseVol & soMask_ : 0; + unsigned long const outLow = outBase * (0 - 15ul); + unsigned long const endCycles = cycleCounter_ + cycles; for (;;) { - const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; - const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; - unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; + unsigned long const outHigh = master_ + ? outBase * (envelopeUnit_.getVolume() * 2 - 15ul) + : outLow; + unsigned long const nextMajorEvent = std::min(nextEventUnit_->counter(), endCycles); + unsigned long out = dutyUnit_.isHighState() ? outHigh : outLow; - while (dutyUnit.getCounter() <= nextMajorEvent) { - *buf = out - prevOut; - prevOut = out; - buf += dutyUnit.getCounter() - cycleCounter; - cycleCounter = dutyUnit.getCounter(); + while (dutyUnit_.counter() <= nextMajorEvent) { + *buf = out - prevOut_; + prevOut_ = out; + buf += dutyUnit_.counter() - cycleCounter_; + cycleCounter_ = dutyUnit_.counter(); - dutyUnit.event(); - out = dutyUnit.isHighState() ? outHigh : outLow; + dutyUnit_.event(); + out = dutyUnit_.isHighState() ? outHigh : outLow; } - if (cycleCounter < nextMajorEvent) { - *buf = out - prevOut; - prevOut = out; - buf += nextMajorEvent - cycleCounter; - cycleCounter = nextMajorEvent; + if (cycleCounter_ < nextMajorEvent) { + *buf = out - prevOut_; + prevOut_ = out; + buf += nextMajorEvent - cycleCounter_; + cycleCounter_ = nextMajorEvent; } - if (nextEventUnit->getCounter() == nextMajorEvent) { - nextEventUnit->event(); + if (nextEventUnit_->counter() == nextMajorEvent) { + nextEventUnit_->event(); setEvent(); } else break; } - if (cycleCounter & SoundUnit::COUNTER_MAX) { - dutyUnit.resetCounters(cycleCounter); - lengthCounter.resetCounters(cycleCounter); - envelopeUnit.resetCounters(cycleCounter); - sweepUnit.resetCounters(cycleCounter); - - cycleCounter -= SoundUnit::COUNTER_MAX; + if (cycleCounter_ >= SoundUnit::counter_max) { + dutyUnit_.resetCounters(cycleCounter_); + lengthCounter_.resetCounters(cycleCounter_); + envelopeUnit_.resetCounters(cycleCounter_); + sweepUnit_.resetCounters(cycleCounter_); + cycleCounter_ -= SoundUnit::counter_max; } } SYNCFUNC(Channel1) { - SSS(lengthCounter); - SSS(dutyUnit); - SSS(envelopeUnit); - SSS(sweepUnit); + SSS(lengthCounter_); + SSS(dutyUnit_); + SSS(envelopeUnit_); + SSS(sweepUnit_); - EBS(nextEventUnit, 0); - EVS(nextEventUnit, &dutyUnit, 1); - EVS(nextEventUnit, &sweepUnit, 2); - EVS(nextEventUnit, &envelopeUnit, 3); - EVS(nextEventUnit, &lengthCounter, 4); - EES(nextEventUnit, NULL); + EBS(nextEventUnit_, 0); + EVS(nextEventUnit_, &dutyUnit_, 1); + EVS(nextEventUnit_, &sweepUnit_, 2); + EVS(nextEventUnit_, &envelopeUnit_, 3); + EVS(nextEventUnit_, &lengthCounter_, 4); + EES(nextEventUnit_, NULL); - NSS(cycleCounter); - NSS(soMask); - NSS(prevOut); + NSS(cycleCounter_); + NSS(soMask_); + NSS(prevOut_); - NSS(nr4); - NSS(master); + NSS(nr4_); + NSS(master_); } } diff --git a/libgambatte/src/sound/channel1.h b/libgambatte/src/sound/channel1.h index 113629bb8a..36c62e646b 100644 --- a/libgambatte/src/sound/channel1.h +++ b/libgambatte/src/sound/channel1.h @@ -1,29 +1,29 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_CHANNEL1_H #define SOUND_CHANNEL1_H -#include "gbint.h" -#include "master_disabler.h" -#include "length_counter.h" #include "duty_unit.h" #include "envelope_unit.h" +#include "gbint.h" +#include "length_counter.h" +#include "master_disabler.h" #include "static_output_tester.h" #include "newstate.h" @@ -32,46 +32,6 @@ namespace gambatte { struct SaveState; class Channel1 { - class SweepUnit : public SoundUnit { - MasterDisabler &disableMaster; - DutyUnit &dutyUnit; - unsigned short shadow; - unsigned char nr0; - bool negging; - - unsigned calcFreq(); - - public: - SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit); - void event(); - void nr0Change(unsigned newNr0); - void nr4Init(unsigned long cycleCounter); - void reset(); - void loadState(const SaveState &state); - - templatevoid SyncState(NewState *ns); - }; - - friend class StaticOutputTester; - - StaticOutputTester staticOutputTest; - DutyMasterDisabler disableMaster; - LengthCounter lengthCounter; - DutyUnit dutyUnit; - EnvelopeUnit envelopeUnit; - SweepUnit sweepUnit; - - SoundUnit *nextEventUnit; - - unsigned long cycleCounter; - unsigned long soMask; - unsigned long prevOut; - - unsigned char nr4; - bool master; - - void setEvent(); - public: Channel1(); void setNr0(unsigned data); @@ -79,16 +39,56 @@ public: void setNr2(unsigned data); void setNr3(unsigned data); void setNr4(unsigned data); - void setSo(unsigned long soMask); - bool isActive() const { return master; } - + bool isActive() const { return master_; } void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - void reset(); void init(bool cgb); - void loadState(const SaveState &state); + void loadState(SaveState const &state); +private: + class SweepUnit : public SoundUnit { + public: + SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit); + virtual void event(); + void nr0Change(unsigned newNr0); + void nr4Init(unsigned long cycleCounter); + void reset(); + void init(bool cgb) { cgb_ = cgb; } + void loadState(SaveState const &state); + + private: + MasterDisabler &disableMaster_; + DutyUnit &dutyUnit_; + unsigned short shadow_; + unsigned char nr0_; + bool negging_; + bool cgb_; + + unsigned calcFreq(); + + public: + templatevoid SyncState(NewState *ns); + }; + + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest_; + DutyMasterDisabler disableMaster_; + LengthCounter lengthCounter_; + DutyUnit dutyUnit_; + EnvelopeUnit envelopeUnit_; + SweepUnit sweepUnit_; + SoundUnit *nextEventUnit_; + unsigned long cycleCounter_; + unsigned long soMask_; + unsigned long prevOut_; + unsigned char nr4_; + bool master_; + + void setEvent(); + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/channel2.cpp b/libgambatte/src/sound/channel2.cpp index 13bcc23b4a..6f32e4dd46 100644 --- a/libgambatte/src/sound/channel2.cpp +++ b/libgambatte/src/sound/channel2.cpp @@ -1,176 +1,171 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "channel2.h" #include "../savestate.h" +#include namespace gambatte { -Channel2::Channel2() : - staticOutputTest(*this, dutyUnit), - disableMaster(master, dutyUnit), - lengthCounter(disableMaster, 0x3F), - envelopeUnit(staticOutputTest), - cycleCounter(0), - soMask(0), - prevOut(0), - nr4(0), - master(false) +Channel2::Channel2() +: staticOutputTest_(*this, dutyUnit_) +, disableMaster_(master_, dutyUnit_) +, lengthCounter_(disableMaster_, 0x3F) +, envelopeUnit_(staticOutputTest_) +, cycleCounter_(0) +, soMask_(0) +, prevOut_(0) +, nr4_(0) +, master_(false) { setEvent(); } void Channel2::setEvent() { -// nextEventUnit = &dutyUnit; -// if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &envelopeUnit; - if (lengthCounter.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &lengthCounter; + nextEventUnit = &envelopeUnit_; + if (lengthCounter_.counter() < nextEventUnit->counter()) + nextEventUnit = &lengthCounter_; } -void Channel2::setNr1(const unsigned data) { - lengthCounter.nr1Change(data, nr4, cycleCounter); - dutyUnit.nr1Change(data, cycleCounter); - +void Channel2::setNr1(unsigned data) { + lengthCounter_.nr1Change(data, nr4_, cycleCounter_); + dutyUnit_.nr1Change(data, cycleCounter_); setEvent(); } -void Channel2::setNr2(const unsigned data) { - if (envelopeUnit.nr2Change(data)) - disableMaster(); +void Channel2::setNr2(unsigned data) { + if (envelopeUnit_.nr2Change(data)) + disableMaster_(); else - staticOutputTest(cycleCounter); + staticOutputTest_(cycleCounter_); setEvent(); } -void Channel2::setNr3(const unsigned data) { - dutyUnit.nr3Change(data, cycleCounter); +void Channel2::setNr3(unsigned data) { + dutyUnit_.nr3Change(data, cycleCounter_); setEvent(); } -void Channel2::setNr4(const unsigned data) { - lengthCounter.nr4Change(nr4, data, cycleCounter); +void Channel2::setNr4(unsigned const data) { + lengthCounter_.nr4Change(nr4_, data, cycleCounter_); + nr4_ = data; + dutyUnit_.nr4Change(data, cycleCounter_, master_); - nr4 = data; - - if (data & 0x80) { //init-bit - nr4 &= 0x7F; - master = !envelopeUnit.nr4Init(cycleCounter); - staticOutputTest(cycleCounter); + if (data & 0x80) { // init-bit + nr4_ &= 0x7F; + master_ = !envelopeUnit_.nr4Init(cycleCounter_); + staticOutputTest_(cycleCounter_); } - dutyUnit.nr4Change(data, cycleCounter); - setEvent(); } -void Channel2::setSo(const unsigned long soMask) { - this->soMask = soMask; - staticOutputTest(cycleCounter); +void Channel2::setSo(unsigned long soMask) { + soMask_ = soMask; + staticOutputTest_(cycleCounter_); setEvent(); } void Channel2::reset() { - cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. - -// lengthCounter.reset(); - dutyUnit.reset(); - envelopeUnit.reset(); + // cycleCounter >> 12 & 7 represents the frame sequencer position. + cycleCounter_ &= 0xFFF; + cycleCounter_ += ~(cycleCounter_ + 2) << 1 & 0x1000; + dutyUnit_.reset(); + envelopeUnit_.reset(); setEvent(); } -void Channel2::init(const bool cgb) { - lengthCounter.init(cgb); +void Channel2::loadState(SaveState const &state) { + dutyUnit_.loadState(state.spu.ch2.duty, state.mem.ioamhram.get()[0x116], + state.spu.ch2.nr4, state.spu.cycleCounter); + envelopeUnit_.loadState(state.spu.ch2.env, state.mem.ioamhram.get()[0x117], + state.spu.cycleCounter); + lengthCounter_.loadState(state.spu.ch2.lcounter, state.spu.cycleCounter); + + cycleCounter_ = state.spu.cycleCounter; + nr4_ = state.spu.ch2.nr4; + master_ = state.spu.ch2.master; } -void Channel2::loadState(const SaveState &state) { - dutyUnit.loadState(state.spu.ch2.duty, state.mem.ioamhram.get()[0x116], state.spu.ch2.nr4,state.spu.cycleCounter); - envelopeUnit.loadState(state.spu.ch2.env, state.mem.ioamhram.get()[0x117], state.spu.cycleCounter); - lengthCounter.loadState(state.spu.ch2.lcounter, state.spu.cycleCounter); - - cycleCounter = state.spu.cycleCounter; - nr4 = state.spu.ch2.nr4; - master = state.spu.ch2.master; -} - -void Channel2::update(uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { - const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; - const unsigned long outLow = outBase * (0 - 15ul); - const unsigned long endCycles = cycleCounter + cycles; +void Channel2::update(uint_least32_t *buf, unsigned long const soBaseVol, unsigned long cycles) { + unsigned long const outBase = envelopeUnit_.dacIsOn() ? soBaseVol & soMask_ : 0; + unsigned long const outLow = outBase * (0 - 15ul); + unsigned long const endCycles = cycleCounter_ + cycles; for (;;) { - const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; - const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; - unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; + unsigned long const outHigh = master_ + ? outBase * (envelopeUnit_.getVolume() * 2 - 15ul) + : outLow; + unsigned long const nextMajorEvent = std::min(nextEventUnit->counter(), endCycles); + unsigned long out = dutyUnit_.isHighState() ? outHigh : outLow; - while (dutyUnit.getCounter() <= nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += dutyUnit.getCounter() - cycleCounter; - cycleCounter = dutyUnit.getCounter(); + while (dutyUnit_.counter() <= nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += dutyUnit_.counter() - cycleCounter_; + cycleCounter_ = dutyUnit_.counter(); - dutyUnit.event(); - out = dutyUnit.isHighState() ? outHigh : outLow; + dutyUnit_.event(); + out = dutyUnit_.isHighState() ? outHigh : outLow; } - if (cycleCounter < nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += nextMajorEvent - cycleCounter; - cycleCounter = nextMajorEvent; + if (cycleCounter_ < nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += nextMajorEvent - cycleCounter_; + cycleCounter_ = nextMajorEvent; } - if (nextEventUnit->getCounter() == nextMajorEvent) { + if (nextEventUnit->counter() == nextMajorEvent) { nextEventUnit->event(); setEvent(); } else break; } - if (cycleCounter & SoundUnit::COUNTER_MAX) { - dutyUnit.resetCounters(cycleCounter); - lengthCounter.resetCounters(cycleCounter); - envelopeUnit.resetCounters(cycleCounter); - - cycleCounter -= SoundUnit::COUNTER_MAX; + if (cycleCounter_ >= SoundUnit::counter_max) { + dutyUnit_.resetCounters(cycleCounter_); + lengthCounter_.resetCounters(cycleCounter_); + envelopeUnit_.resetCounters(cycleCounter_); + cycleCounter_ -= SoundUnit::counter_max; } } SYNCFUNC(Channel2) { - SSS(lengthCounter); - SSS(dutyUnit); - SSS(envelopeUnit); + SSS(lengthCounter_); + SSS(dutyUnit_); + SSS(envelopeUnit_); EBS(nextEventUnit, 0); - EVS(nextEventUnit, &dutyUnit, 1); - EVS(nextEventUnit, &envelopeUnit, 2); - EVS(nextEventUnit, &lengthCounter, 3); + EVS(nextEventUnit, &dutyUnit_, 1); + EVS(nextEventUnit, &envelopeUnit_, 2); + EVS(nextEventUnit, &lengthCounter_, 3); EES(nextEventUnit, NULL); - NSS(cycleCounter); - NSS(soMask); - NSS(prevOut); + NSS(cycleCounter_); + NSS(soMask_); + NSS(prevOut_); - NSS(nr4); - NSS(master); + NSS(nr4_); + NSS(master_); } } diff --git a/libgambatte/src/sound/channel2.h b/libgambatte/src/sound/channel2.h index 611d8cd51c..8934cc7991 100644 --- a/libgambatte/src/sound/channel2.h +++ b/libgambatte/src/sound/channel2.h @@ -1,28 +1,28 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_CHANNEL2_H #define SOUND_CHANNEL2_H -#include "gbint.h" -#include "length_counter.h" #include "duty_unit.h" #include "envelope_unit.h" +#include "gbint.h" +#include "length_counter.h" #include "static_output_tester.h" #include "newstate.h" @@ -31,42 +31,36 @@ namespace gambatte { struct SaveState; class Channel2 { - friend class StaticOutputTester; - - StaticOutputTester staticOutputTest; - DutyMasterDisabler disableMaster; - LengthCounter lengthCounter; - DutyUnit dutyUnit; - EnvelopeUnit envelopeUnit; - - SoundUnit *nextEventUnit; - - unsigned long cycleCounter; - unsigned long soMask; - unsigned long prevOut; - - unsigned char nr4; - bool master; - - void setEvent(); - public: Channel2(); void setNr1(unsigned data); void setNr2(unsigned data); void setNr3(unsigned data); void setNr4(unsigned data); - void setSo(unsigned long soMask); - // void deactivate() { disableMaster(); setEvent(); } - bool isActive() const { return master; } - + bool isActive() const { return master_; } void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - void reset(); - void init(bool cgb); - void loadState(const SaveState &state); + void loadState(SaveState const &state); +private: + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest_; + DutyMasterDisabler disableMaster_; + LengthCounter lengthCounter_; + DutyUnit dutyUnit_; + EnvelopeUnit envelopeUnit_; + SoundUnit *nextEventUnit; + unsigned long cycleCounter_; + unsigned long soMask_; + unsigned long prevOut_; + unsigned char nr4_; + bool master_; + + void setEvent(); + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/channel3.cpp b/libgambatte/src/sound/channel3.cpp index d91be4416b..06fe6dc2fd 100644 --- a/libgambatte/src/sound/channel3.cpp +++ b/libgambatte/src/sound/channel3.cpp @@ -1,25 +1,25 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "channel3.h" #include "../savestate.h" -#include #include +#include static inline unsigned toPeriod(const unsigned nr3, const unsigned nr4) { return 0x800 - ((nr4 << 8 & 0x700) | nr3); @@ -27,193 +27,196 @@ static inline unsigned toPeriod(const unsigned nr3, const unsigned nr4) { namespace gambatte { -Channel3::Channel3() : - disableMaster(master, waveCounter), - lengthCounter(disableMaster, 0xFF), - cycleCounter(0), - soMask(0), - prevOut(0), - waveCounter(SoundUnit::COUNTER_DISABLED), - lastReadTime(0), - nr0(0), - nr3(0), - nr4(0), - wavePos(0), - rShift(4), - sampleBuf(0), - master(false), - cgb(false) -{} +Channel3::Channel3() +: disableMaster_(master_, waveCounter_) +, lengthCounter_(disableMaster_, 0xFF) +, cycleCounter_(0) +, soMask_(0) +, prevOut_(0) +, waveCounter_(SoundUnit::counter_disabled) +, lastReadTime_(0) +, nr0_(0) +, nr3_(0) +, nr4_(0) +, wavePos_(0) +, rshift_(4) +, sampleBuf_(0) +, master_(false) +, cgb_(false) +{ +} -void Channel3::setNr0(const unsigned data) { - nr0 = data & 0x80; +void Channel3::setNr0(unsigned data) { + nr0_ = data & 0x80; if (!(data & 0x80)) - disableMaster(); + disableMaster_(); } -void Channel3::setNr2(const unsigned data) { - rShift = (data >> 5 & 3U) - 1; - - if (rShift > 3) - rShift = 4; +void Channel3::setNr2(unsigned data) { + rshift_ = (data >> 5 & 3U) - 1; + if (rshift_ > 3) + rshift_ = 4; } -void Channel3::setNr4(const unsigned data) { - lengthCounter.nr4Change(nr4, data, cycleCounter); +void Channel3::setNr4(unsigned const data) { + lengthCounter_.nr4Change(nr4_, data, cycleCounter_); + nr4_ = data & 0x7F; - nr4 = data & 0x7F; - - if (data & nr0/* & 0x80*/) { - if (!cgb && waveCounter == cycleCounter + 1) { - const unsigned pos = ((wavePos + 1) & 0x1F) >> 1; + if (data & nr0_/* & 0x80*/) { + if (!cgb_ && waveCounter_ == cycleCounter_ + 1) { + unsigned const pos = ((wavePos_ + 1) & 0x1F) >> 1; if (pos < 4) - waveRam[0] = waveRam[pos]; + waveRam_[0] = waveRam_[pos]; else - std::memcpy(waveRam, waveRam + (pos & ~3), 4); + std::memcpy(waveRam_, waveRam_ + (pos & ~3), 4); } - master = true; - wavePos = 0; - lastReadTime = waveCounter = cycleCounter + toPeriod(nr3, data) + 3; + master_ = true; + wavePos_ = 0; + lastReadTime_ = waveCounter_ = cycleCounter_ + toPeriod(nr3_, data) + 3; } } -void Channel3::setSo(const unsigned long soMask) { - this->soMask = soMask; +void Channel3::setSo(unsigned long soMask) { + soMask_ = soMask; } void Channel3::reset() { - cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. + // cycleCounter >> 12 & 7 represents the frame sequencer position. + cycleCounter_ &= 0xFFF; + cycleCounter_ += ~(cycleCounter_ + 2) << 1 & 0x1000; -// lengthCounter.reset(); - sampleBuf = 0; + sampleBuf_ = 0; } -void Channel3::init(const bool cgb) { - this->cgb = cgb; - lengthCounter.init(cgb); +void Channel3::init(bool cgb) { + cgb_ = cgb; } void Channel3::setStatePtrs(SaveState &state) { - state.spu.ch3.waveRam.set(waveRam, sizeof waveRam); + state.spu.ch3.waveRam.set(waveRam_, sizeof waveRam_); } -void Channel3::loadState(const SaveState &state) { - lengthCounter.loadState(state.spu.ch3.lcounter, state.spu.cycleCounter); +void Channel3::loadState(SaveState const &state) { + lengthCounter_.loadState(state.spu.ch3.lcounter, state.spu.cycleCounter); - cycleCounter = state.spu.cycleCounter; - waveCounter = std::max(state.spu.ch3.waveCounter, state.spu.cycleCounter); - lastReadTime = state.spu.ch3.lastReadTime; - nr3 = state.spu.ch3.nr3; - nr4 = state.spu.ch3.nr4; - wavePos = state.spu.ch3.wavePos & 0x1F; - sampleBuf = state.spu.ch3.sampleBuf; - master = state.spu.ch3.master; + cycleCounter_ = state.spu.cycleCounter; + waveCounter_ = std::max(state.spu.ch3.waveCounter, state.spu.cycleCounter); + lastReadTime_ = state.spu.ch3.lastReadTime; + nr3_ = state.spu.ch3.nr3; + nr4_ = state.spu.ch3.nr4; + wavePos_ = state.spu.ch3.wavePos & 0x1F; + sampleBuf_ = state.spu.ch3.sampleBuf; + master_ = state.spu.ch3.master; - nr0 = state.mem.ioamhram.get()[0x11A] & 0x80; + nr0_ = state.mem.ioamhram.get()[0x11A] & 0x80; setNr2(state.mem.ioamhram.get()[0x11C]); } -void Channel3::updateWaveCounter(const unsigned long cc) { - if (cc >= waveCounter) { - const unsigned period = toPeriod(nr3, nr4); - const unsigned long periods = (cc - waveCounter) / period; +void Channel3::updateWaveCounter(unsigned long const cc) { + if (cc >= waveCounter_) { + unsigned const period = toPeriod(nr3_, nr4_); + unsigned long const periods = (cc - waveCounter_) / period; - lastReadTime = waveCounter + periods * period; - waveCounter = lastReadTime + period; + lastReadTime_ = waveCounter_ + periods * period; + waveCounter_ = lastReadTime_ + period; - wavePos += periods + 1; - wavePos &= 0x1F; + wavePos_ += periods + 1; + wavePos_ &= 0x1F; - sampleBuf = waveRam[wavePos >> 1]; + sampleBuf_ = waveRam_[wavePos_ >> 1]; } } -void Channel3::update(uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { - const unsigned long outBase = (nr0/* & 0x80*/) ? soBaseVol & soMask : 0; +void Channel3::update(uint_least32_t *buf, unsigned long const soBaseVol, unsigned long cycles) { + unsigned long const outBase = nr0_/* & 0x80*/ ? soBaseVol & soMask_ : 0; - if (outBase && rShift != 4) { - const unsigned long endCycles = cycleCounter + cycles; + if (outBase && rshift_ != 4) { + unsigned long const endCycles = cycleCounter_ + cycles; for (;;) { - const unsigned long nextMajorEvent = lengthCounter.getCounter() < endCycles ? lengthCounter.getCounter() : endCycles; - unsigned long out = outBase * (master ? ((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul : 0 - 15ul); + unsigned long const nextMajorEvent = + std::min(lengthCounter_.counter(), endCycles); + unsigned long out = master_ + ? ((sampleBuf_ >> (~wavePos_ << 2 & 4) & 0xF) >> rshift_) * 2 - 15ul + : 0 - 15ul; + out *= outBase; - while (waveCounter <= nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += waveCounter - cycleCounter; - cycleCounter = waveCounter; + while (waveCounter_ <= nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += waveCounter_ - cycleCounter_; + cycleCounter_ = waveCounter_; - lastReadTime = waveCounter; - waveCounter += toPeriod(nr3, nr4); - ++wavePos; - wavePos &= 0x1F; - sampleBuf = waveRam[wavePos >> 1]; - out = outBase * (/*master ? */((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul/* : 0 - 15ul*/); + lastReadTime_ = waveCounter_; + waveCounter_ += toPeriod(nr3_, nr4_); + ++wavePos_; + wavePos_ &= 0x1F; + sampleBuf_ = waveRam_[wavePos_ >> 1]; + out = ((sampleBuf_ >> (~wavePos_ << 2 & 4) & 0xF) >> rshift_) * 2 - 15ul; + out *= outBase; } - if (cycleCounter < nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += nextMajorEvent - cycleCounter; - cycleCounter = nextMajorEvent; + if (cycleCounter_ < nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += nextMajorEvent - cycleCounter_; + cycleCounter_ = nextMajorEvent; } - if (lengthCounter.getCounter() == nextMajorEvent) { - lengthCounter.event(); + if (lengthCounter_.counter() == nextMajorEvent) { + lengthCounter_.event(); } else break; } } else { - const unsigned long out = outBase * (0 - 15ul); - *buf += out - prevOut; - prevOut = out; + unsigned long const out = outBase * (0 - 15ul); + *buf += out - prevOut_; + prevOut_ = out; + cycleCounter_ += cycles; - cycleCounter += cycles; - - while (lengthCounter.getCounter() <= cycleCounter) { - updateWaveCounter(lengthCounter.getCounter()); - lengthCounter.event(); + while (lengthCounter_.counter() <= cycleCounter_) { + updateWaveCounter(lengthCounter_.counter()); + lengthCounter_.event(); } - updateWaveCounter(cycleCounter); + updateWaveCounter(cycleCounter_); } - if (cycleCounter & SoundUnit::COUNTER_MAX) { - lengthCounter.resetCounters(cycleCounter); + if (cycleCounter_ >= SoundUnit::counter_max) { + lengthCounter_.resetCounters(cycleCounter_); - if (waveCounter != SoundUnit::COUNTER_DISABLED) - waveCounter -= SoundUnit::COUNTER_MAX; + if (waveCounter_ != SoundUnit::counter_disabled) + waveCounter_ -= SoundUnit::counter_max; - lastReadTime -= SoundUnit::COUNTER_MAX; - cycleCounter -= SoundUnit::COUNTER_MAX; + lastReadTime_ -= SoundUnit::counter_max; + cycleCounter_ -= SoundUnit::counter_max; } } SYNCFUNC(Channel3) { - NSS(waveRam); + NSS(waveRam_); - SSS(lengthCounter); + SSS(lengthCounter_); - NSS(cycleCounter); - NSS(soMask); - NSS(prevOut); - NSS(waveCounter); - NSS(lastReadTime); + NSS(cycleCounter_); + NSS(soMask_); + NSS(prevOut_); + NSS(waveCounter_); + NSS(lastReadTime_); - NSS(nr0); - NSS(nr3); - NSS(nr4); - NSS(wavePos); - NSS(rShift); - NSS(sampleBuf); + NSS(nr0_); + NSS(nr3_); + NSS(nr4_); + NSS(wavePos_); + NSS(rshift_); + NSS(sampleBuf_); - NSS(master); - NSS(cgb); + NSS(master_); + NSS(cgb_); } } diff --git a/libgambatte/src/sound/channel3.h b/libgambatte/src/sound/channel3.h index a6c5253c44..fe2e43fd1b 100644 --- a/libgambatte/src/sound/channel3.h +++ b/libgambatte/src/sound/channel3.h @@ -1,27 +1,27 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_CHANNEL3_H #define SOUND_CHANNEL3_H #include "gbint.h" -#include "master_disabler.h" #include "length_counter.h" +#include "master_disabler.h" #include "newstate.h" namespace gambatte { @@ -29,74 +29,78 @@ namespace gambatte { struct SaveState; class Channel3 { - class Ch3MasterDisabler : public MasterDisabler { - unsigned long &waveCounter; - - public: - Ch3MasterDisabler(bool &m, unsigned long &wC) : MasterDisabler(m), waveCounter(wC) {} - void operator()() { MasterDisabler::operator()(); waveCounter = SoundUnit::COUNTER_DISABLED; } - }; - - unsigned char waveRam[0x10]; - - Ch3MasterDisabler disableMaster; - LengthCounter lengthCounter; - - unsigned long cycleCounter; - unsigned long soMask; - unsigned long prevOut; - unsigned long waveCounter; - unsigned long lastReadTime; - - unsigned char nr0; - unsigned char nr3; - unsigned char nr4; - unsigned char wavePos; - unsigned char rShift; - unsigned char sampleBuf; - - bool master; - bool cgb; - - void updateWaveCounter(unsigned long cc); - public: Channel3(); - bool isActive() const { return master; } + bool isActive() const { return master_; } void reset(); void init(bool cgb); void setStatePtrs(SaveState &state); void loadState(const SaveState &state); void setNr0(unsigned data); - void setNr1(unsigned data) { lengthCounter.nr1Change(data, nr4, cycleCounter); } + void setNr1(unsigned data) { lengthCounter_.nr1Change(data, nr4_, cycleCounter_); } void setNr2(unsigned data); - void setNr3(unsigned data) { nr3 = data; } + void setNr3(unsigned data) { nr3_ = data; } void setNr4(unsigned data); void setSo(unsigned long soMask); void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); unsigned waveRamRead(unsigned index) const { - if (master) { - if (!cgb && cycleCounter != lastReadTime) + if (master_) { + if (!cgb_ && cycleCounter_ != lastReadTime_) return 0xFF; - index = wavePos >> 1; + index = wavePos_ >> 1; } - return waveRam[index]; + return waveRam_[index]; } void waveRamWrite(unsigned index, unsigned data) { - if (master) { - if (!cgb && cycleCounter != lastReadTime) + if (master_) { + if (!cgb_ && cycleCounter_ != lastReadTime_) return; - index = wavePos >> 1; + index = wavePos_ >> 1; } - waveRam[index] = data; + waveRam_[index] = data; } +private: + class Ch3MasterDisabler : public MasterDisabler { + public: + Ch3MasterDisabler(bool &m, unsigned long &wC) : MasterDisabler(m), waveCounter_(wC) {} + + virtual void operator()() { + MasterDisabler::operator()(); + waveCounter_ = SoundUnit::counter_disabled; + } + + private: + unsigned long &waveCounter_; + }; + + unsigned char waveRam_[0x10]; + Ch3MasterDisabler disableMaster_; + LengthCounter lengthCounter_; + unsigned long cycleCounter_; + unsigned long soMask_; + unsigned long prevOut_; + unsigned long waveCounter_; + unsigned long lastReadTime_; + unsigned char nr0_; + unsigned char nr3_; + unsigned char nr4_; + unsigned char wavePos_; + unsigned char rshift_; + unsigned char sampleBuf_; + bool master_; + bool cgb_; + + void updateWaveCounter(unsigned long cc); + + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/channel4.cpp b/libgambatte/src/sound/channel4.cpp index cc5a29799f..9528ceb943 100644 --- a/libgambatte/src/sound/channel4.cpp +++ b/libgambatte/src/sound/channel4.cpp @@ -1,26 +1,26 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "channel4.h" #include "../savestate.h" #include -static unsigned long toPeriod(const unsigned nr3) { +static unsigned long toPeriod(unsigned const nr3) { unsigned s = (nr3 >> 4) + 3; unsigned r = nr3 & 7; @@ -34,286 +34,242 @@ static unsigned long toPeriod(const unsigned nr3) { namespace gambatte { -Channel4::Lfsr::Lfsr() : -backupCounter(COUNTER_DISABLED), -reg(0x7FFF), -nr3(0), -master(false) -{} +Channel4::Lfsr::Lfsr() +: backupCounter_(counter_disabled) +, reg_(0x7FFF) +, nr3_(0) +, master_(false) +{ +} -void Channel4::Lfsr::updateBackupCounter(const unsigned long cc) { - /*if (backupCounter <= cc) { - const unsigned long period = toPeriod(nr3); - backupCounter = cc - (cc - backupCounter) % period + period; - }*/ +void Channel4::Lfsr::updateBackupCounter(unsigned long const cc) { + if (backupCounter_ <= cc) { + unsigned long const period = toPeriod(nr3_); + unsigned long periods = (cc - backupCounter_) / period + 1; + backupCounter_ += periods * period; - if (backupCounter <= cc) { - const unsigned long period = toPeriod(nr3); - unsigned long periods = (cc - backupCounter) / period + 1; - - backupCounter += periods * period; - - if (master && nr3 < 0xE0) { - if (nr3 & 8) { + if (master_ && nr3_ < 0xE0) { + if (nr3_ & 8) { while (periods > 6) { - const unsigned xored = (reg << 1 ^ reg) & 0x7E; - reg = (reg >> 6 & ~0x7E) | xored | xored << 8; + unsigned const xored = (reg_ << 1 ^ reg_) & 0x7E; + reg_ = (reg_ >> 6 & ~0x7E) | xored | xored << 8; periods -= 6; } - const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; - reg = (reg >> periods & ~(0x80 - (0x80 >> periods))) | xored | xored << 8; + unsigned const xored = ((reg_ ^ reg_ >> 1) << (7 - periods)) & 0x7F; + reg_ = (reg_ >> periods & ~(0x80 - (0x80 >> periods))) | xored | xored << 8; } else { while (periods > 15) { - reg = reg ^ reg >> 1; + reg_ = reg_ ^ reg_ >> 1; periods -= 15; } - reg = reg >> periods | (((reg ^ reg >> 1) << (15 - periods)) & 0x7FFF); + reg_ = reg_ >> periods | (((reg_ ^ reg_ >> 1) << (15 - periods)) & 0x7FFF); } } } } -void Channel4::Lfsr::reviveCounter(const unsigned long cc) { +void Channel4::Lfsr::reviveCounter(unsigned long cc) { updateBackupCounter(cc); - counter = backupCounter; + counter_ = backupCounter_; } -/*static const unsigned char nextStateDistance[0x40] = { - 6, 1, 1, 2, 2, 1, 1, 3, - 3, 1, 1, 2, 2, 1, 1, 4, - 4, 1, 1, 2, 2, 1, 1, 3, - 3, 1, 1, 2, 2, 1, 1, 5, - 5, 1, 1, 2, 2, 1, 1, 3, - 3, 1, 1, 2, 2, 1, 1, 4, - 4, 1, 1, 2, 2, 1, 1, 3, - 3, 1, 1, 2, 2, 1, 1, 6, -};*/ - inline void Channel4::Lfsr::event() { - if (nr3 < 0xE0) { - const unsigned shifted = reg >> 1; - const unsigned xored = (reg ^ shifted) & 1; + if (nr3_ < 0xE0) { + unsigned const shifted = reg_ >> 1; + unsigned const xored = (reg_ ^ shifted) & 1; + reg_ = shifted | xored << 14; - reg = shifted | xored << 14; - - if (nr3 & 8) - reg = (reg & ~0x40) | xored << 6; + if (nr3_ & 8) + reg_ = (reg_ & ~0x40) | xored << 6; } - counter += toPeriod(nr3); - backupCounter = counter; - - - /*if (nr3 < 0xE0) { - const unsigned periods = nextStateDistance[reg & 0x3F]; - const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; - - reg = reg >> periods | xored << 8; - - if (nr3 & 8) - reg = reg & ~(0x80 - (0x80 >> periods)) | xored; - } - - const unsigned long period = toPeriod(nr3); - backupCounter = counter + period; - counter += period * nextStateDistance[reg & 0x3F];*/ + counter_ += toPeriod(nr3_); + backupCounter_ = counter_; } -void Channel4::Lfsr::nr3Change(const unsigned newNr3, const unsigned long cc) { +void Channel4::Lfsr::nr3Change(unsigned newNr3, unsigned long cc) { updateBackupCounter(cc); - nr3 = newNr3; - -// if (counter != COUNTER_DISABLED) -// counter = backupCounter + toPeriod(nr3) * (nextStateDistance[reg & 0x3F] - 1); + nr3_ = newNr3; } void Channel4::Lfsr::nr4Init(unsigned long cc) { disableMaster(); updateBackupCounter(cc); - master = true; - backupCounter += 4; - counter = backupCounter; -// counter = backupCounter + toPeriod(nr3) * (nextStateDistance[reg & 0x3F] - 1); + master_ = true; + backupCounter_ += 4; + counter_ = backupCounter_; } -void Channel4::Lfsr::reset(const unsigned long cc) { - nr3 = 0; +void Channel4::Lfsr::reset(unsigned long cc) { + nr3_ = 0; disableMaster(); - backupCounter = cc + toPeriod(nr3); + backupCounter_ = cc + toPeriod(nr3_); } -void Channel4::Lfsr::resetCounters(const unsigned long oldCc) { +void Channel4::Lfsr::resetCounters(unsigned long oldCc) { updateBackupCounter(oldCc); - backupCounter -= COUNTER_MAX; + backupCounter_ -= counter_max; SoundUnit::resetCounters(oldCc); } -void Channel4::Lfsr::loadState(const SaveState &state) { - counter = backupCounter = std::max(state.spu.ch4.lfsr.counter, state.spu.cycleCounter); - reg = state.spu.ch4.lfsr.reg; - master = state.spu.ch4.master; - nr3 = state.mem.ioamhram.get()[0x122]; +void Channel4::Lfsr::loadState(SaveState const &state) { + counter_ = backupCounter_ = std::max(state.spu.ch4.lfsr.counter, state.spu.cycleCounter); + reg_ = state.spu.ch4.lfsr.reg; + master_ = state.spu.ch4.master; + nr3_ = state.mem.ioamhram.get()[0x122]; } template void Channel4::Lfsr::SyncState(NewState *ns) { - NSS(counter); - NSS(backupCounter); - NSS(reg); - NSS(nr3); - NSS(master); + NSS(counter_); + NSS(backupCounter_); + NSS(reg_); + NSS(nr3_); + NSS(master_); } -Channel4::Channel4() : - staticOutputTest(*this, lfsr), - disableMaster(master, lfsr), - lengthCounter(disableMaster, 0x3F), - envelopeUnit(staticOutputTest), - cycleCounter(0), - soMask(0), - prevOut(0), - nr4(0), - master(false) +Channel4::Channel4() +: staticOutputTest_(*this, lfsr_) +, disableMaster_(master_, lfsr_) +, lengthCounter_(disableMaster_, 0x3F) +, envelopeUnit_(staticOutputTest_) +, nextEventUnit_(0) +, cycleCounter_(0) +, soMask_(0) +, prevOut_(0) +, nr4_(0) +, master_(false) { setEvent(); } void Channel4::setEvent() { -// nextEventUnit = &lfsr; -// if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &envelopeUnit; - if (lengthCounter.getCounter() < nextEventUnit->getCounter()) - nextEventUnit = &lengthCounter; + nextEventUnit_ = &envelopeUnit_; + if (lengthCounter_.counter() < nextEventUnit_->counter()) + nextEventUnit_ = &lengthCounter_; } -void Channel4::setNr1(const unsigned data) { - lengthCounter.nr1Change(data, nr4, cycleCounter); - +void Channel4::setNr1(unsigned data) { + lengthCounter_.nr1Change(data, nr4_, cycleCounter_); setEvent(); } -void Channel4::setNr2(const unsigned data) { - if (envelopeUnit.nr2Change(data)) - disableMaster(); +void Channel4::setNr2(unsigned data) { + if (envelopeUnit_.nr2Change(data)) + disableMaster_(); else - staticOutputTest(cycleCounter); + staticOutputTest_(cycleCounter_); setEvent(); } -void Channel4::setNr4(const unsigned data) { - lengthCounter.nr4Change(nr4, data, cycleCounter); +void Channel4::setNr4(unsigned const data) { + lengthCounter_.nr4Change(nr4_, data, cycleCounter_); + nr4_ = data; - nr4 = data; + if (data & 0x80) { // init-bit + nr4_ &= 0x7F; + master_ = !envelopeUnit_.nr4Init(cycleCounter_); - if (data & 0x80) { //init-bit - nr4 &= 0x7F; + if (master_) + lfsr_.nr4Init(cycleCounter_); - master = !envelopeUnit.nr4Init(cycleCounter); - - if (master) - lfsr.nr4Init(cycleCounter); - - staticOutputTest(cycleCounter); + staticOutputTest_(cycleCounter_); } setEvent(); } -void Channel4::setSo(const unsigned long soMask) { - this->soMask = soMask; - staticOutputTest(cycleCounter); +void Channel4::setSo(unsigned long soMask) { + soMask_ = soMask; + staticOutputTest_(cycleCounter_); setEvent(); } void Channel4::reset() { - cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. - -// lengthCounter.reset(); - lfsr.reset(cycleCounter); - envelopeUnit.reset(); + // cycleCounter >> 12 & 7 represents the frame sequencer position. + cycleCounter_ &= 0xFFF; + cycleCounter_ += ~(cycleCounter_ + 2) << 1 & 0x1000; + lfsr_.reset(cycleCounter_); + envelopeUnit_.reset(); setEvent(); } -void Channel4::init(const bool cgb) { - lengthCounter.init(cgb); +void Channel4::loadState(SaveState const &state) { + lfsr_.loadState(state); + envelopeUnit_.loadState(state.spu.ch4.env, state.mem.ioamhram.get()[0x121], + state.spu.cycleCounter); + lengthCounter_.loadState(state.spu.ch4.lcounter, state.spu.cycleCounter); + + cycleCounter_ = state.spu.cycleCounter; + nr4_ = state.spu.ch4.nr4; + master_ = state.spu.ch4.master; } -void Channel4::loadState(const SaveState &state) { - lfsr.loadState(state); - envelopeUnit.loadState(state.spu.ch4.env, state.mem.ioamhram.get()[0x121], state.spu.cycleCounter); - lengthCounter.loadState(state.spu.ch4.lcounter, state.spu.cycleCounter); - - cycleCounter = state.spu.cycleCounter; - nr4 = state.spu.ch4.nr4; - master = state.spu.ch4.master; -} - -void Channel4::update(uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { - const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; - const unsigned long outLow = outBase * (0 - 15ul); - const unsigned long endCycles = cycleCounter + cycles; +void Channel4::update(uint_least32_t *buf, unsigned long const soBaseVol, unsigned long cycles) { + unsigned long const outBase = envelopeUnit_.dacIsOn() ? soBaseVol & soMask_ : 0; + unsigned long const outLow = outBase * (0 - 15ul); + unsigned long const endCycles = cycleCounter_ + cycles; for (;;) { - const unsigned long outHigh = /*master ? */outBase * (envelopeUnit.getVolume() * 2 - 15ul)/* : outLow*/; - const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; - unsigned long out = lfsr.isHighState() ? outHigh : outLow; + unsigned long const outHigh = outBase * (envelopeUnit_.getVolume() * 2 - 15ul); + unsigned long const nextMajorEvent = std::min(nextEventUnit_->counter(), endCycles); + unsigned long out = lfsr_.isHighState() ? outHigh : outLow; - while (lfsr.getCounter() <= nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += lfsr.getCounter() - cycleCounter; - cycleCounter = lfsr.getCounter(); + while (lfsr_.counter() <= nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += lfsr_.counter() - cycleCounter_; + cycleCounter_ = lfsr_.counter(); - lfsr.event(); - out = lfsr.isHighState() ? outHigh : outLow; + lfsr_.event(); + out = lfsr_.isHighState() ? outHigh : outLow; } - if (cycleCounter < nextMajorEvent) { - *buf += out - prevOut; - prevOut = out; - buf += nextMajorEvent - cycleCounter; - cycleCounter = nextMajorEvent; + if (cycleCounter_ < nextMajorEvent) { + *buf += out - prevOut_; + prevOut_ = out; + buf += nextMajorEvent - cycleCounter_; + cycleCounter_ = nextMajorEvent; } - if (nextEventUnit->getCounter() == nextMajorEvent) { - nextEventUnit->event(); + if (nextEventUnit_->counter() == nextMajorEvent) { + nextEventUnit_->event(); setEvent(); } else break; } - if (cycleCounter & SoundUnit::COUNTER_MAX) { - lengthCounter.resetCounters(cycleCounter); - lfsr.resetCounters(cycleCounter); - envelopeUnit.resetCounters(cycleCounter); - - cycleCounter -= SoundUnit::COUNTER_MAX; + if (cycleCounter_ >= SoundUnit::counter_max) { + lengthCounter_.resetCounters(cycleCounter_); + lfsr_.resetCounters(cycleCounter_); + envelopeUnit_.resetCounters(cycleCounter_); + cycleCounter_ -= SoundUnit::counter_max; } } SYNCFUNC(Channel4) { - SSS(lengthCounter); - SSS(envelopeUnit); - SSS(lfsr); + SSS(lengthCounter_); + SSS(envelopeUnit_); + SSS(lfsr_); - EBS(nextEventUnit, 0); - EVS(nextEventUnit, &lfsr, 1); - EVS(nextEventUnit, &envelopeUnit, 2); - EVS(nextEventUnit, &lengthCounter, 3); - EES(nextEventUnit, NULL); + EBS(nextEventUnit_, 0); + EVS(nextEventUnit_, &lfsr_, 1); + EVS(nextEventUnit_, &envelopeUnit_, 2); + EVS(nextEventUnit_, &lengthCounter_, 3); + EES(nextEventUnit_, NULL); - NSS(cycleCounter); - NSS(soMask); - NSS(prevOut); + NSS(cycleCounter_); + NSS(soMask_); + NSS(prevOut_); - NSS(nr4); - NSS(master); + NSS(nr4_); + NSS(master_); } } diff --git a/libgambatte/src/sound/channel4.h b/libgambatte/src/sound/channel4.h index 4490404fa2..0ad159181f 100644 --- a/libgambatte/src/sound/channel4.h +++ b/libgambatte/src/sound/channel4.h @@ -1,28 +1,28 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_CHANNEL4_H #define SOUND_CHANNEL4_H -#include "gbint.h" -#include "master_disabler.h" -#include "length_counter.h" #include "envelope_unit.h" +#include "gbint.h" +#include "length_counter.h" +#include "master_disabler.h" #include "static_output_tester.h" #include "newstate.h" @@ -31,72 +31,71 @@ namespace gambatte { struct SaveState; class Channel4 { - class Lfsr : public SoundUnit { - unsigned long backupCounter; - unsigned short reg; - unsigned char nr3; - bool master; - - void updateBackupCounter(unsigned long cc); - - public: - Lfsr(); - void event(); - bool isHighState() const { return ~reg & 1; } - void nr3Change(unsigned newNr3, unsigned long cc); - void nr4Init(unsigned long cc); - void reset(unsigned long cc); - void loadState(const SaveState &state); - void resetCounters(unsigned long oldCc); - void disableMaster() { killCounter(); master = false; reg = 0x7FFF; } - void killCounter() { counter = COUNTER_DISABLED; } - void reviveCounter(unsigned long cc); - - templatevoid SyncState(NewState *ns); - }; - - class Ch4MasterDisabler : public MasterDisabler { - Lfsr &lfsr; - public: - Ch4MasterDisabler(bool &m, Lfsr &lfsr) : MasterDisabler(m), lfsr(lfsr) {} - void operator()() { MasterDisabler::operator()(); lfsr.disableMaster(); } - }; - - friend class StaticOutputTester; - - StaticOutputTester staticOutputTest; - Ch4MasterDisabler disableMaster; - LengthCounter lengthCounter; - EnvelopeUnit envelopeUnit; - Lfsr lfsr; - - SoundUnit *nextEventUnit; - - unsigned long cycleCounter; - unsigned long soMask; - unsigned long prevOut; - - unsigned char nr4; - bool master; - - void setEvent(); - public: Channel4(); void setNr1(unsigned data); void setNr2(unsigned data); - void setNr3(unsigned data) { lfsr.nr3Change(data, cycleCounter); /*setEvent();*/ } + void setNr3(unsigned data) { lfsr_.nr3Change(data, cycleCounter_); } void setNr4(unsigned data); - void setSo(unsigned long soMask); - bool isActive() const { return master; } - + bool isActive() const { return master_; } void update(uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); - void reset(); - void init(bool cgb); - void loadState(const SaveState &state); + void loadState(SaveState const &state); +private: + class Lfsr : public SoundUnit { + public: + Lfsr(); + virtual void event(); + virtual void resetCounters(unsigned long oldCc); + bool isHighState() const { return ~reg_ & 1; } + void nr3Change(unsigned newNr3, unsigned long cc); + void nr4Init(unsigned long cc); + void reset(unsigned long cc); + void loadState(SaveState const &state); + void disableMaster() { killCounter(); master_ = false; reg_ = 0x7FFF; } + void killCounter() { counter_ = counter_disabled; } + void reviveCounter(unsigned long cc); + + private: + unsigned long backupCounter_; + unsigned short reg_; + unsigned char nr3_; + bool master_; + + void updateBackupCounter(unsigned long cc); + + public: + templatevoid SyncState(NewState *ns); + }; + + class Ch4MasterDisabler : public MasterDisabler { + public: + Ch4MasterDisabler(bool &m, Lfsr &lfsr) : MasterDisabler(m), lfsr_(lfsr) {} + virtual void operator()() { MasterDisabler::operator()(); lfsr_.disableMaster(); } + + private: + Lfsr &lfsr_; + }; + + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest_; + Ch4MasterDisabler disableMaster_; + LengthCounter lengthCounter_; + EnvelopeUnit envelopeUnit_; + Lfsr lfsr_; + SoundUnit *nextEventUnit_; + unsigned long cycleCounter_; + unsigned long soMask_; + unsigned long prevOut_; + unsigned char nr4_; + bool master_; + + void setEvent(); + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/duty_unit.cpp b/libgambatte/src/sound/duty_unit.cpp index 4d2a0ddde6..5f9f484742 100644 --- a/libgambatte/src/sound/duty_unit.cpp +++ b/libgambatte/src/sound/duty_unit.cpp @@ -1,156 +1,162 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "duty_unit.h" #include -static inline bool toOutState(const unsigned duty, const unsigned pos) { - static const unsigned char duties[4] = { 0x80, 0x81, 0xE1, 0x7E }; - - return duties[duty] >> pos & 1; +static inline bool toOutState(unsigned duty, unsigned pos) { + return 0x7EE18180 >> (duty * 8 + pos) & 1; } -static inline unsigned toPeriod(const unsigned freq) { - return (2048 - freq) << 1; +static inline unsigned toPeriod(unsigned freq) { + return (2048 - freq) * 2; } namespace gambatte { -void DutyUnit::updatePos(const unsigned long cc) { - if (cc >= nextPosUpdate) { - const unsigned long inc = (cc - nextPosUpdate) / period + 1; - nextPosUpdate += period * inc; - pos += inc; - pos &= 7; +DutyUnit::DutyUnit() +: nextPosUpdate_(counter_disabled) +, period_(4096) +, pos_(0) +, duty_(0) +, inc_(0) +, high_(false) +, enableEvents_(true) +{ +} + +void DutyUnit::updatePos(unsigned long const cc) { + if (cc >= nextPosUpdate_) { + unsigned long const inc = (cc - nextPosUpdate_) / period_ + 1; + nextPosUpdate_ += period_ * inc; + pos_ += inc; + pos_ &= 7; + high_ = toOutState(duty_, pos_); } } -void DutyUnit::setDuty(const unsigned nr1) { - duty = nr1 >> 6; - high = toOutState(duty, pos); -} - void DutyUnit::setCounter() { - static const unsigned char nextStateDistance[4 * 8] = { - 6, 5, 4, 3, 2, 1, 0, 0, - 0, 5, 4, 3, 2, 1, 0, 1, - 0, 3, 2, 1, 0, 3, 2, 1, - 0, 5, 4, 3, 2, 1, 0, 1 + static unsigned char const nextStateDistance[4 * 8] = { + 7, 6, 5, 4, 3, 2, 1, 1, + 1, 6, 5, 4, 3, 2, 1, 2, + 1, 4, 3, 2, 1, 4, 3, 2, + 1, 6, 5, 4, 3, 2, 1, 2 }; - if (enableEvents && nextPosUpdate != COUNTER_DISABLED) - counter = nextPosUpdate + period * nextStateDistance[(duty * 8) | pos]; - else - counter = COUNTER_DISABLED; + if (enableEvents_ && nextPosUpdate_ != counter_disabled) { + unsigned const npos = (pos_ + 1) & 7; + counter_ = nextPosUpdate_; + inc_ = nextStateDistance[duty_ * 8 + npos]; + if (toOutState(duty_, npos) == high_) { + counter_ += period_ * inc_; + inc_ = nextStateDistance[duty_ * 8 + ((npos + inc_) & 7)]; + } + } else + counter_ = counter_disabled; } -void DutyUnit::setFreq(const unsigned newFreq, const unsigned long cc) { +void DutyUnit::setFreq(unsigned newFreq, unsigned long cc) { updatePos(cc); - period = toPeriod(newFreq); + period_ = toPeriod(newFreq); setCounter(); } void DutyUnit::event() { - unsigned inc = period << duty; + static unsigned char const inc[] = { + 1, 7, + 2, 6, + 4, 4, + 6, 2, + }; - if (duty == 3) - inc -= period * 2; - - if (!(high ^= true)) - inc = period * 8 - inc; - - counter += inc; + high_ ^= true; + counter_ += inc_ * period_; + inc_ = inc[duty_ * 2 + high_]; } -void DutyUnit::nr1Change(const unsigned newNr1, const unsigned long cc) { +void DutyUnit::nr1Change(unsigned newNr1, unsigned long cc) { updatePos(cc); - setDuty(newNr1); + duty_ = newNr1 >> 6; setCounter(); } -void DutyUnit::nr3Change(const unsigned newNr3, const unsigned long cc) { - setFreq((getFreq() & 0x700) | newNr3, cc); +void DutyUnit::nr3Change(unsigned newNr3, unsigned long cc) { + setFreq((freq() & 0x700) | newNr3, cc); } -void DutyUnit::nr4Change(const unsigned newNr4, const unsigned long cc) { - setFreq((newNr4 << 8 & 0x700) | (getFreq() & 0xFF), cc); +void DutyUnit::nr4Change(unsigned const newNr4, unsigned long const cc, + bool const master) { + setFreq((newNr4 << 8 & 0x700) | (freq() & 0xFF), cc); if (newNr4 & 0x80) { - nextPosUpdate = (cc & ~1) + period; + nextPosUpdate_ = (cc & ~1ul) + period_ + 4 - (master << 1); setCounter(); } } -DutyUnit::DutyUnit() : -nextPosUpdate(COUNTER_DISABLED), -period(4096), -pos(0), -duty(0), -high(false), -enableEvents(true) -{} - void DutyUnit::reset() { - pos = 0; - high = toOutState(duty, pos); - nextPosUpdate = COUNTER_DISABLED; + pos_ = 0; + high_ = false; + nextPosUpdate_ = counter_disabled; setCounter(); } -void DutyUnit::loadState(const SaveState::SPU::Duty &dstate, const unsigned nr1, const unsigned nr4, const unsigned long cc) { - nextPosUpdate = std::max(dstate.nextPosUpdate, cc); - pos = dstate.pos & 7; - setDuty(nr1); - period = toPeriod((nr4 << 8 & 0x700) | dstate.nr3); - enableEvents = true; +void DutyUnit::loadState(SaveState::SPU::Duty const &dstate, + unsigned const nr1, unsigned const nr4, unsigned long const cc) { + nextPosUpdate_ = std::max(dstate.nextPosUpdate, cc); + pos_ = dstate.pos & 7; + high_ = dstate.high; + duty_ = nr1 >> 6; + period_ = toPeriod((nr4 << 8 & 0x700) | dstate.nr3); + enableEvents_ = true; setCounter(); } -void DutyUnit::resetCounters(const unsigned long oldCc) { - if (nextPosUpdate == COUNTER_DISABLED) +void DutyUnit::resetCounters(unsigned long const oldCc) { + if (nextPosUpdate_ == counter_disabled) return; updatePos(oldCc); - nextPosUpdate -= COUNTER_MAX; - SoundUnit::resetCounters(oldCc); -} - -void DutyUnit::killCounter() { - enableEvents = false; + nextPosUpdate_ -= counter_max; setCounter(); } -void DutyUnit::reviveCounter(const unsigned long cc) { +void DutyUnit::killCounter() { + enableEvents_ = false; + setCounter(); +} + +void DutyUnit::reviveCounter(unsigned long const cc) { updatePos(cc); - high = toOutState(duty, pos); - enableEvents = true; + enableEvents_ = true; setCounter(); } SYNCFUNC(DutyUnit) { - NSS(counter); - NSS(nextPosUpdate); - NSS(period); - NSS(pos); - NSS(duty); - NSS(high); - NSS(enableEvents); + NSS(counter_); + NSS(nextPosUpdate_); + NSS(period_); + NSS(pos_); + NSS(duty_); + NSS(inc_); + NSS(high_); + NSS(enableEvents_); } } diff --git a/libgambatte/src/sound/duty_unit.h b/libgambatte/src/sound/duty_unit.h index a45294133e..0f96140c9e 100644 --- a/libgambatte/src/sound/duty_unit.h +++ b/libgambatte/src/sound/duty_unit.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aam�s * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef DUTY_UNIT_H #define DUTY_UNIT_H @@ -27,42 +27,47 @@ namespace gambatte { class DutyUnit : public SoundUnit { - unsigned long nextPosUpdate; - unsigned short period; - unsigned char pos; - unsigned char duty; - bool high; - bool enableEvents; +public: + DutyUnit(); + virtual void event(); + virtual void resetCounters(unsigned long oldCc); + bool isHighState() const { return high_; } + void nr1Change(unsigned newNr1, unsigned long cc); + void nr3Change(unsigned newNr3, unsigned long cc); + void nr4Change(unsigned newNr4, unsigned long cc, bool master); + void reset(); + void loadState(SaveState::SPU::Duty const &dstate, unsigned nr1, unsigned nr4, unsigned long cc); + void killCounter(); + void reviveCounter(unsigned long cc); + + //intended for use by SweepUnit only. + unsigned freq() const { return 2048 - (period_ >> 1); } + void setFreq(unsigned newFreq, unsigned long cc); + +private: + unsigned long nextPosUpdate_; + unsigned short period_; + unsigned char pos_; + unsigned char duty_; + unsigned char inc_; + bool high_; + bool enableEvents_; void setCounter(); void setDuty(unsigned nr1); void updatePos(unsigned long cc); public: - DutyUnit(); - void event(); - bool isHighState() const { return high; } - void nr1Change(unsigned newNr1, unsigned long cc); - void nr3Change(unsigned newNr3, unsigned long cc); - void nr4Change(unsigned newNr4, unsigned long cc); - void reset(); - void loadState(const SaveState::SPU::Duty &dstate, unsigned nr1, unsigned nr4, unsigned long cc); - void resetCounters(unsigned long oldCc); - void killCounter(); - void reviveCounter(unsigned long cc); - - //intended for use by SweepUnit only. - unsigned getFreq() const { return 2048 - (period >> 1); } - void setFreq(unsigned newFreq, unsigned long cc); - templatevoid SyncState(NewState *ns); }; class DutyMasterDisabler : public MasterDisabler { - DutyUnit &dutyUnit; public: - DutyMasterDisabler(bool &m, DutyUnit &dutyUnit) : MasterDisabler(m), dutyUnit(dutyUnit) {} - void operator()() { MasterDisabler::operator()(); dutyUnit.killCounter(); } + DutyMasterDisabler(bool &m, DutyUnit &dutyUnit) : MasterDisabler(m), dutyUnit_(dutyUnit) {} + virtual void operator()() { MasterDisabler::operator()(); dutyUnit_.killCounter(); } + +private: + DutyUnit &dutyUnit_; }; } diff --git a/libgambatte/src/sound/envelope_unit.cpp b/libgambatte/src/sound/envelope_unit.cpp index 917c73bc13..7e9a81bb81 100644 --- a/libgambatte/src/sound/envelope_unit.cpp +++ b/libgambatte/src/sound/envelope_unit.cpp @@ -1,108 +1,98 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "envelope_unit.h" #include namespace gambatte { -EnvelopeUnit::VolOnOffEvent EnvelopeUnit::nullEvent; +EnvelopeUnit::VolOnOffEvent EnvelopeUnit::nullEvent_; + +EnvelopeUnit::EnvelopeUnit(VolOnOffEvent &volOnOffEvent) +: volOnOffEvent_(volOnOffEvent) +, nr2_(0) +, volume_(0) +{ +} + +void EnvelopeUnit::reset() { + counter_ = counter_disabled; +} + +void EnvelopeUnit::loadState(SaveState::SPU::Env const &estate, unsigned nr2, unsigned long cc) { + counter_ = std::max(estate.counter, cc); + volume_ = estate.volume; + nr2_ = nr2; +} void EnvelopeUnit::event() { - const unsigned long period = nr2 & 7; + unsigned long const period = nr2_ & 7; if (period) { - unsigned newVol = volume; - - if (nr2 & 8) + unsigned newVol = volume_; + if (nr2_ & 8) ++newVol; else --newVol; if (newVol < 0x10U) { - volume = newVol; + volume_ = newVol; + if (volume_ < 2) + volOnOffEvent_(counter_); - if (volume < 2) - volOnOffEvent(counter); - - counter += period << 15; + counter_ += period << 15; } else - counter = COUNTER_DISABLED; + counter_ = counter_disabled; } else - counter += 8ul << 15; + counter_ += 8ul << 15; } -bool EnvelopeUnit::nr2Change(const unsigned newNr2) { - if (!(nr2 & 7) && counter != COUNTER_DISABLED) - ++volume; - else if (!(nr2 & 8)) - volume += 2; +bool EnvelopeUnit::nr2Change(unsigned const newNr2) { + if (!(nr2_ & 7) && counter_ != counter_disabled) + ++volume_; + else if (!(nr2_ & 8)) + volume_ += 2; - if ((nr2 ^ newNr2) & 8) - volume = 0x10 - volume; - - volume &= 0xF; - - nr2 = newNr2; + if ((nr2_ ^ newNr2) & 8) + volume_ = 0x10 - volume_; + volume_ &= 0xF; + nr2_ = newNr2; return !(newNr2 & 0xF8); } -bool EnvelopeUnit::nr4Init(const unsigned long cc) { - { - unsigned long period = nr2 & 7; +bool EnvelopeUnit::nr4Init(unsigned long const cc) { + unsigned long period = nr2_ & 7 ? nr2_ & 7 : 8; - if (!period) - period = 8; + if (((cc + 2) & 0x7000) == 0x0000) + ++period; - if (!(cc & 0x7000)) - ++period; + counter_ = cc - ((cc - 0x1000) & 0x7FFF) + period * 0x8000; - counter = cc - ((cc - 0x1000) & 0x7FFF) + period * 0x8000; - } - - volume = nr2 >> 4; - - return !(nr2 & 0xF8); -} - -EnvelopeUnit::EnvelopeUnit(VolOnOffEvent &volOnOffEvent) -: volOnOffEvent(volOnOffEvent), - nr2(0), - volume(0) -{ -} - -void EnvelopeUnit::reset() { - counter = COUNTER_DISABLED; -} - -void EnvelopeUnit::loadState(const SaveState::SPU::Env &estate, const unsigned nr2, const unsigned long cc) { - counter = std::max(estate.counter, cc); - volume = estate.volume; - this->nr2 = nr2; + volume_ = nr2_ >> 4; + return !(nr2_ & 0xF8); } SYNCFUNC(EnvelopeUnit) { - NSS(counter); - NSS(nr2); - NSS(volume); + NSS(counter_); + NSS(nr2_); + NSS(volume_); } } diff --git a/libgambatte/src/sound/envelope_unit.h b/libgambatte/src/sound/envelope_unit.h index 69f74d1997..4705dfc6f5 100644 --- a/libgambatte/src/sound/envelope_unit.h +++ b/libgambatte/src/sound/envelope_unit.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef ENVELOPE_UNIT_H #define ENVELOPE_UNIT_H @@ -32,22 +32,22 @@ public: virtual void operator()(unsigned long /*cc*/) {} }; -private: - static VolOnOffEvent nullEvent; - VolOnOffEvent &volOnOffEvent; - unsigned char nr2; - unsigned char volume; - -public: - explicit EnvelopeUnit(VolOnOffEvent &volOnOffEvent = nullEvent); + explicit EnvelopeUnit(VolOnOffEvent &volOnOffEvent = nullEvent_); void event(); - bool dacIsOn() const { return nr2 & 0xF8; } - unsigned getVolume() const { return volume; } + bool dacIsOn() const { return nr2_ & 0xF8; } + unsigned getVolume() const { return volume_; } bool nr2Change(unsigned newNr2); bool nr4Init(unsigned long cycleCounter); void reset(); - void loadState(const SaveState::SPU::Env &estate, unsigned nr2, unsigned long cc); + void loadState(SaveState::SPU::Env const &estate, unsigned nr2, unsigned long cc); +private: + static VolOnOffEvent nullEvent_; + VolOnOffEvent &volOnOffEvent_; + unsigned char nr2_; + unsigned char volume_; + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/length_counter.cpp b/libgambatte/src/sound/length_counter.cpp index 7822fb934f..cdfd4c18bb 100644 --- a/libgambatte/src/sound/length_counter.cpp +++ b/libgambatte/src/sound/length_counter.cpp @@ -1,93 +1,83 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "length_counter.h" #include "master_disabler.h" #include namespace gambatte { -LengthCounter::LengthCounter(MasterDisabler &disabler, const unsigned mask) : - disableMaster(disabler), - lengthMask(mask) +LengthCounter::LengthCounter(MasterDisabler &disabler, unsigned const mask) +: disableMaster_(disabler) +, lengthCounter_(0) +, lengthMask_(mask) { - init(false); nr1Change(0, 0, 0); } void LengthCounter::event() { - counter = COUNTER_DISABLED; - lengthCounter = 0; - disableMaster(); + counter_ = counter_disabled; + lengthCounter_ = 0; + disableMaster_(); } -void LengthCounter::nr1Change(const unsigned newNr1, const unsigned nr4, const unsigned long cycleCounter) { - lengthCounter = (~newNr1 & lengthMask) + 1; - counter = (nr4 & 0x40) ?( (cycleCounter >> 13) + lengthCounter) << 13 : static_cast(COUNTER_DISABLED); +void LengthCounter::nr1Change(unsigned const newNr1, unsigned const nr4, unsigned long const cc) { + lengthCounter_ = (~newNr1 & lengthMask_) + 1; + counter_ = nr4 & 0x40 + ? ((cc >> 13) + lengthCounter_) << 13 + : static_cast(counter_disabled); } -void LengthCounter::nr4Change(const unsigned oldNr4, const unsigned newNr4, const unsigned long cycleCounter) { - if (counter != COUNTER_DISABLED) - lengthCounter = (counter >> 13) - (cycleCounter >> 13); +void LengthCounter::nr4Change(unsigned const oldNr4, unsigned const newNr4, unsigned long const cc) { + if (counter_ != counter_disabled) + lengthCounter_ = (counter_ >> 13) - (cc >> 13); { unsigned dec = 0; if (newNr4 & 0x40) { - dec = ~cycleCounter >> 12 & 1; + dec = ~cc >> 12 & 1; - if (!(oldNr4 & 0x40) && lengthCounter) { - if (!(lengthCounter -= dec)) - disableMaster(); + if (!(oldNr4 & 0x40) && lengthCounter_) { + if (!(lengthCounter_ -= dec)) + disableMaster_(); } } - if ((newNr4 & 0x80) && !lengthCounter) - lengthCounter = lengthMask + 1 - dec; + if ((newNr4 & 0x80) && !lengthCounter_) + lengthCounter_ = lengthMask_ + 1 - dec; } - if ((newNr4 & 0x40) && lengthCounter) - counter = ((cycleCounter >> 13) + lengthCounter) << 13; + if ((newNr4 & 0x40) && lengthCounter_) + counter_ = ((cc >> 13) + lengthCounter_) << 13; else - counter = COUNTER_DISABLED; + counter_ = counter_disabled; } -/*void LengthCounter::reset() { - counter = COUNTER_DISABLED; - - if (cgb) - lengthCounter = lengthMask + 1; -}*/ - -void LengthCounter::init(const bool cgb) { - this->cgb = cgb; -} - -void LengthCounter::loadState(const SaveState::SPU::LCounter &lstate, const unsigned long cc) { - counter = std::max(lstate.counter, cc); - lengthCounter = lstate.lengthCounter; +void LengthCounter::loadState(SaveState::SPU::LCounter const &lstate, unsigned long const cc) { + counter_ = std::max(lstate.counter, cc); + lengthCounter_ = lstate.lengthCounter; } SYNCFUNC(LengthCounter) { - NSS(counter); - NSS(lengthCounter); - NSS(cgb); + NSS(counter_); + NSS(lengthCounter_); } } diff --git a/libgambatte/src/sound/length_counter.h b/libgambatte/src/sound/length_counter.h index 7250ac0a10..31727945f0 100644 --- a/libgambatte/src/sound/length_counter.h +++ b/libgambatte/src/sound/length_counter.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef LENGTH_COUNTER_H #define LENGTH_COUNTER_H @@ -28,20 +28,19 @@ namespace gambatte { class MasterDisabler; class LengthCounter : public SoundUnit { - MasterDisabler &disableMaster; - unsigned short lengthCounter; - const unsigned char lengthMask; - bool cgb; - public: LengthCounter(MasterDisabler &disabler, unsigned lengthMask); - void event(); + virtual void event(); void nr1Change(unsigned newNr1, unsigned nr4, unsigned long cc); void nr4Change(unsigned oldNr4, unsigned newNr4, unsigned long cc); -// void reset(); - void init(bool cgb); - void loadState(const SaveState::SPU::LCounter &lstate, unsigned long cc); + void loadState(SaveState::SPU::LCounter const &lstate, unsigned long cc); +private: + MasterDisabler &disableMaster_; + unsigned short lengthCounter_; + unsigned char const lengthMask_; + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/sound/master_disabler.h b/libgambatte/src/sound/master_disabler.h index efbc37f114..a9c16adec1 100644 --- a/libgambatte/src/sound/master_disabler.h +++ b/libgambatte/src/sound/master_disabler.h @@ -1,33 +1,36 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef MASTER_DISABLER_H #define MASTER_DISABLER_H namespace gambatte { -class MasterDisabler { - bool &master; +class MasterDisabler { public: - MasterDisabler(bool &m) : master(m) {} + explicit MasterDisabler(bool &master) : master_(master) {} virtual ~MasterDisabler() {} - virtual void operator()() { master = false; } + virtual void operator()() { master_ = false; } + +private: + bool &master_; }; + } #endif diff --git a/libgambatte/src/sound/sound_unit.h b/libgambatte/src/sound/sound_unit.h index d2a00582ad..c990939c9c 100644 --- a/libgambatte/src/sound/sound_unit.h +++ b/libgambatte/src/sound/sound_unit.h @@ -1,37 +1,43 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_UNIT_H #define SOUND_UNIT_H namespace gambatte { class SoundUnit { -protected: - unsigned long counter; public: - enum { COUNTER_MAX = 0x80000000u, COUNTER_DISABLED = 0xFFFFFFFFu }; + enum { counter_max = 0x80000000u, counter_disabled = 0xFFFFFFFFu }; - SoundUnit() : counter(COUNTER_DISABLED) {} virtual ~SoundUnit() {} virtual void event() = 0; - unsigned long getCounter() const { return counter; } - virtual void resetCounters(unsigned long /*oldCc*/) { if (counter != COUNTER_DISABLED) counter -= COUNTER_MAX; } + + virtual void resetCounters(unsigned long /*oldCc*/) { + if (counter_ != counter_disabled) + counter_ -= counter_max; + } + + unsigned long counter() const { return counter_; } + +protected: + SoundUnit() : counter_(counter_disabled) {} + unsigned long counter_; }; } diff --git a/libgambatte/src/sound/static_output_tester.h b/libgambatte/src/sound/static_output_tester.h index ac785e564d..0d7edbbf99 100644 --- a/libgambatte/src/sound/static_output_tester.h +++ b/libgambatte/src/sound/static_output_tester.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef STATIC_OUTPUT_TESTER_H #define STATIC_OUTPUT_TESTER_H @@ -25,19 +25,21 @@ namespace gambatte { template class StaticOutputTester : public EnvelopeUnit::VolOnOffEvent { - const Channel &ch; - Unit &unit; public: - StaticOutputTester(const Channel &ch, Unit &unit) : ch(ch), unit(unit) {} + StaticOutputTester(Channel const &ch, Unit &unit) : ch_(ch), unit_(unit) {} void operator()(unsigned long cc); + +private: + Channel const &ch_; + Unit &unit_; }; template -void StaticOutputTester::operator()(const unsigned long cc) { - if (ch.soMask && ch.master && ch.envelopeUnit.getVolume()) - unit.reviveCounter(cc); +void StaticOutputTester::operator()(unsigned long cc) { + if (ch_.soMask_ && ch_.master_ && ch_.envelopeUnit_.getVolume()) + unit_.reviveCounter(cc); else - unit.killCounter(); + unit_.killCounter(); } } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 4b53f609938abdf7c1054faf54c797ffd518d0dc..56a6f6d8790ec5cdcecd43843028526e4913d4a9 100644 GIT binary patch delta 43876 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%0AlH+rWcqCL1uD5i??%3oAbb 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 delta 43534 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 -xu^r9Cs4E!B%OX}bEi$HM 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 From a6aeef840a665a79ad046a1ae54fcd5489fa6155 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sat, 25 May 2019 21:01:50 +0200 Subject: [PATCH 077/138] Update PPU --- libgambatte/src/counterdef.h | 2 +- libgambatte/src/initstate.cpp | 8 +- libgambatte/src/interruptrequester.cpp | 12 +- libgambatte/src/interruptrequester.h | 2 +- libgambatte/src/memory.cpp | 62 ++++---- libgambatte/src/memory.h | 2 +- libgambatte/src/tima.cpp | 18 +-- libgambatte/src/video.cpp | 32 ++-- libgambatte/src/video.h | 50 +----- libgambatte/src/video/ly_counter.cpp | 68 ++++---- libgambatte/src/video/ly_counter.h | 56 +++---- libgambatte/src/video/lyc_irq.cpp | 86 +++++----- libgambatte/src/video/lyc_irq.h | 75 ++++----- libgambatte/src/video/m0_irq.h | 68 ++++++++ libgambatte/src/video/next_m0_time.cpp | 8 +- libgambatte/src/video/next_m0_time.h | 8 +- libgambatte/src/video/ppu.h | 106 +++++++------ libgambatte/src/video/sprite_mapper.cpp | 199 +++++++++++++----------- libgambatte/src/video/sprite_mapper.h | 189 +++++++++++----------- output/dll/libgambatte.dll | Bin 142336 -> 142336 bytes 20 files changed, 552 insertions(+), 499 deletions(-) create mode 100644 libgambatte/src/video/m0_irq.h diff --git a/libgambatte/src/counterdef.h b/libgambatte/src/counterdef.h index 9d19f44815..66d078ad1f 100644 --- a/libgambatte/src/counterdef.h +++ b/libgambatte/src/counterdef.h @@ -2,7 +2,7 @@ #define COUNTERDEF_H namespace gambatte { -enum { DISABLED_TIME = 0xFFFFFFFFul }; +enum { disabled_time = 0xFFFFFFFFul }; } #endif diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index ccd984d745..362f6701a0 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1200,10 +1200,10 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.divLastUpdate = 0 - div; state.mem.timaLastUpdate = 0; - state.mem.tmatime = DISABLED_TIME; - state.mem.nextSerialtime = DISABLED_TIME; - state.mem.lastOamDmaUpdate = DISABLED_TIME; - state.mem.unhaltTime = DISABLED_TIME; + state.mem.tmatime = disabled_time; + state.mem.nextSerialtime = disabled_time; + state.mem.lastOamDmaUpdate = disabled_time; + state.mem.unhaltTime = disabled_time; state.mem.minIntTime = 0; state.mem.rombank = 1; state.mem.dmaSource = 0; diff --git a/libgambatte/src/interruptrequester.cpp b/libgambatte/src/interruptrequester.cpp index 8e57790d7a..8001ce6ca9 100644 --- a/libgambatte/src/interruptrequester.cpp +++ b/libgambatte/src/interruptrequester.cpp @@ -29,13 +29,13 @@ void InterruptRequester::loadState(const SaveState &state) { iereg_ = state.mem.ioamhram.get()[0x1FF] & 0x1F; intFlags.set(state.mem.IME, state.mem.halted); - eventTimes.setValue(intFlags.imeOrHalted() && pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); + eventTimes.setValue(intFlags.imeOrHalted() && pendingIrqs() ? minIntTime : static_cast(disabled_time)); } void InterruptRequester::resetCc(const unsigned long oldCc, const unsigned long newCc) { minIntTime = minIntTime < oldCc ? 0 : minIntTime - (oldCc - newCc); - if (eventTimes.value(INTERRUPTS) != DISABLED_TIME) + if (eventTimes.value(INTERRUPTS) != disabled_time) eventTimes.setValue(minIntTime); } @@ -51,7 +51,7 @@ void InterruptRequester::di() { intFlags.unsetIme(); if (!intFlags.imeOrHalted()) - eventTimes.setValue(DISABLED_TIME); + eventTimes.setValue(disabled_time); } void InterruptRequester::halt() { @@ -65,7 +65,7 @@ void InterruptRequester::unhalt() { intFlags.unsetHalted(); if (!intFlags.imeOrHalted()) - eventTimes.setValue(DISABLED_TIME); + eventTimes.setValue(disabled_time); } void InterruptRequester::flagIrq(const unsigned bit) { @@ -84,14 +84,14 @@ void InterruptRequester::setIereg(const unsigned iereg) { iereg_ = iereg & 0x1F; if (intFlags.imeOrHalted()) - eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); + eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(disabled_time)); } void InterruptRequester::setIfreg(const unsigned ifreg) { ifreg_ = ifreg; if (intFlags.imeOrHalted()) - eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(DISABLED_TIME)); + eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(disabled_time)); } SYNCFUNC(InterruptRequester) diff --git a/libgambatte/src/interruptrequester.h b/libgambatte/src/interruptrequester.h index 5e5cb7d10c..5d0c49f860 100644 --- a/libgambatte/src/interruptrequester.h +++ b/libgambatte/src/interruptrequester.h @@ -87,7 +87,7 @@ public: inline void flagHdmaReq(InterruptRequester *const intreq) { intreq->setEventTime(0); } inline void flagGdmaReq(InterruptRequester *const intreq) { intreq->setEventTime(1); } -inline void ackDmaReq(InterruptRequester *const intreq) { intreq->setEventTime(DISABLED_TIME); } +inline void ackDmaReq(InterruptRequester *const intreq) { intreq->setEventTime(disabled_time); } inline bool hdmaReqFlagged(const InterruptRequester &intreq) { return intreq.eventTime(DMA) == 0; } inline bool gdmaReqFlagged(const InterruptRequester &intreq) { return intreq.eventTime(DMA) == 1; } diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 328e6cf083..f244cf00d0 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -32,7 +32,7 @@ Memory::Memory(const Interrupter &interrupter_in, unsigned short &sp, unsigned s linkCallback(0), getInput(0), divLastUpdate(0), - lastOamDmaUpdate(DISABLED_TIME), + lastOamDmaUpdate(disabled_time), display(ioamhram, 0, VideoInterruptRequester(&intreq)), interrupter(interrupter_in), dmaSource(0), @@ -80,7 +80,7 @@ void Memory::loadState(const SaveState &state) { dmaSource = state.mem.dmaSource; dmaDestination = state.mem.dmaDestination; oamDmaPos = state.mem.oamDmaPos; - serialCnt = intreq.eventTime(SERIAL) != DISABLED_TIME + serialCnt = intreq.eventTime(SERIAL) != disabled_time ? serialCntFrom(intreq.eventTime(SERIAL) - state.cpu.cycleCounter, ioamhram[0x102] & isCgb() * 2) : 8; @@ -88,7 +88,7 @@ void Memory::loadState(const SaveState &state) { cart.setOamDmaSrc(OAM_DMA_SRC_OFF); cart.setWrambank(isCgb() && (ioamhram[0x170] & 0x07) ? ioamhram[0x170] & 0x07 : 1); - if (lastOamDmaUpdate != DISABLED_TIME) { + if (lastOamDmaUpdate != disabled_time) { oamDmaInitSetup(); const unsigned oamEventPos = oamDmaPos < 0xA0 ? 0xA0 : 0x100; @@ -112,11 +112,11 @@ void Memory::setEndtime(const unsigned long cycleCounter, const unsigned long in void Memory::updateSerial(const unsigned long cc) { if (!LINKCABLE) { - if (intreq.eventTime(SERIAL) != DISABLED_TIME) { + if (intreq.eventTime(SERIAL) != disabled_time) { if (intreq.eventTime(SERIAL) <= cc) { ioamhram[0x101] = (((ioamhram[0x101] + 1) << serialCnt) - 1) & 0xFF; ioamhram[0x102] &= 0x7F; - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); intreq.flagIrq(8); } else { const int targetCnt = serialCntFrom(intreq.eventTime(SERIAL) - cc, ioamhram[0x102] & isCgb() * 2); @@ -126,10 +126,10 @@ void Memory::updateSerial(const unsigned long cc) { } } else { - if (intreq.eventTime(SERIAL) != DISABLED_TIME) { + if (intreq.eventTime(SERIAL) != disabled_time) { if (intreq.eventTime(SERIAL) <= cc) { linkClockTrigger = true; - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); if (linkCallback) linkCallback(); } @@ -149,7 +149,7 @@ void Memory::updateIrqs(const unsigned long cc) { } unsigned long Memory::event(unsigned long cycleCounter) { - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) updateOamDma(cycleCounter); switch (intreq.minEventId()) { @@ -158,15 +158,15 @@ unsigned long Memory::event(unsigned long cycleCounter) { PC = (PC + 1) & 0xFFFF; cycleCounter += 4; intreq.unhalt(); - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); break; case END: - intreq.setEventTime(DISABLED_TIME - 1); + intreq.setEventTime(disabled_time - 1); - while (cycleCounter >= intreq.minEventTime() && intreq.eventTime(END) != DISABLED_TIME) + while (cycleCounter >= intreq.minEventTime() && intreq.eventTime(END) != disabled_time) cycleCounter = event(cycleCounter); - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); break; case BLIT: @@ -176,8 +176,8 @@ unsigned long Memory::event(unsigned long cycleCounter) { if (lcden | blanklcd) { display.updateScreen(blanklcd, cycleCounter); - intreq.setEventTime(DISABLED_TIME); - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); + intreq.setEventTime(disabled_time); while (cycleCounter >= intreq.minEventTime()) cycleCounter = event(cycleCounter); @@ -192,8 +192,8 @@ unsigned long Memory::event(unsigned long cycleCounter) { updateSerial(cycleCounter); break; case OAM: - intreq.setEventTime(lastOamDmaUpdate == DISABLED_TIME ? - static_cast(DISABLED_TIME) : intreq.eventTime(OAM) + 0xA0 * 4); + intreq.setEventTime(lastOamDmaUpdate == disabled_time ? + static_cast(disabled_time) : intreq.eventTime(OAM) + 0xA0 * 4); break; case DMA: { @@ -217,7 +217,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { { unsigned long lOamDmaUpdate = lastOamDmaUpdate; - lastOamDmaUpdate = DISABLED_TIME; + lastOamDmaUpdate = disabled_time; while (length--) { const unsigned src = dmaSrc++ & 0xFFFF; @@ -236,7 +236,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { ioamhram[src & 0xFF] = data; } else if (oamDmaPos == 0xA0) { endOamDma(lOamDmaUpdate - 1); - lOamDmaUpdate = DISABLED_TIME; + lOamDmaUpdate = disabled_time; } } @@ -253,7 +253,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { ioamhram[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram[0x155] & 0x80); if ((ioamhram[0x155] & 0x80) && display.hdmaIsEnabled()) { - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) updateOamDma(cycleCounter); display.disableHdma(cycleCounter); @@ -269,7 +269,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { break; case INTERRUPTS: if (stopped) { - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); break; } if (halted()) { @@ -277,7 +277,7 @@ unsigned long Memory::event(unsigned long cycleCounter) { cycleCounter += 4; intreq.unhalt(); - intreq.setEventTime(DISABLED_TIME); + intreq.setEventTime(disabled_time); } if (ime()) { @@ -347,17 +347,17 @@ unsigned long Memory::stop(unsigned long cycleCounter) { } static void decCycles(unsigned long &counter, const unsigned long dec) { - if (counter != DISABLED_TIME) + if (counter != disabled_time) counter -= dec; } void Memory::decEventCycles(const MemEventId eventId, const unsigned long dec) { - if (intreq.eventTime(eventId) != DISABLED_TIME) + if (intreq.eventTime(eventId) != disabled_time) intreq.setEventTime(eventId, intreq.eventTime(eventId) - dec); } unsigned long Memory::resetCounters(unsigned long cycleCounter) { - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) updateOamDma(cycleCounter); updateIrqs(cycleCounter); @@ -424,7 +424,7 @@ void Memory::updateOamDma(const unsigned long cycleCounter) { ioamhram[oamDmaPos] = oamDmaSrc ? oamDmaSrc[oamDmaPos] : cart.rtcRead(); } else if (oamDmaPos == 0xA0) { endOamDma(lastOamDmaUpdate - 1); - lastOamDmaUpdate = DISABLED_TIME; + lastOamDmaUpdate = disabled_time; break; } } @@ -468,7 +468,7 @@ void Memory::endOamDma(const unsigned long cycleCounter) { } unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) updateOamDma(cycleCounter); switch (P & 0x7F) { @@ -562,7 +562,7 @@ static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned add unsigned Memory::nontrivial_read(const unsigned P, const unsigned long cycleCounter) { if (P < 0xFF80) { - if (lastOamDmaUpdate != DISABLED_TIME) { + if (lastOamDmaUpdate != disabled_time) { updateOamDma(cycleCounter); if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) @@ -626,7 +626,7 @@ unsigned Memory::nontrivial_ff_peek(const unsigned P) { } void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) updateOamDma(cycleCounter); switch (P & 0xFF) { @@ -645,7 +645,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned serialCnt = 8; intreq.setEventTime((data & 0x81) == 0x81 ? (data & isCgb() * 2 ? (cycleCounter & ~0x7ul) + 0x10 * 8 : (cycleCounter & ~0xFFul) + 0x200 * 8) - : static_cast(DISABLED_TIME)); + : static_cast(disabled_time)); data |= 0x7E - isCgb() * 2; break; @@ -865,7 +865,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned display.lycRegChange(data, cycleCounter); break; case 0x46: - if (lastOamDmaUpdate != DISABLED_TIME) + if (lastOamDmaUpdate != disabled_time) endOamDma(cycleCounter); lastOamDmaUpdate = cycleCounter; @@ -1020,7 +1020,7 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned } void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != DISABLED_TIME) { + if (lastOamDmaUpdate != disabled_time) { updateOamDma(cycleCounter); if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) { diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 5529fa71e9..4c3b3a2f7b 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -125,7 +125,7 @@ public: void setLayers(unsigned mask) { display.setLayers(mask); } - bool isActive() const { return intreq.eventTime(END) != DISABLED_TIME; } + bool isActive() const { return intreq.eventTime(END) != disabled_time; } long cyclesSinceBlit(const unsigned long cc) const { return cc < intreq.eventTime(BLIT) ? -1 : static_cast((cc - intreq.eventTime(BLIT)) >> isDoubleSpeed()); diff --git a/libgambatte/src/tima.cpp b/libgambatte/src/tima.cpp index 276385e782..b45fdfc987 100644 --- a/libgambatte/src/tima.cpp +++ b/libgambatte/src/tima.cpp @@ -25,7 +25,7 @@ namespace gambatte { Tima::Tima() : lastUpdate_(0), -tmatime_(DISABLED_TIME), +tmatime_(disabled_time), tima_(0), tma_(0), tac_(0) @@ -41,11 +41,11 @@ void Tima::loadState(const SaveState &state, const TimaInterruptRequester timaIr timaIrq.setNextIrqEventTime((tac_ & 4) ? - (tmatime_ != DISABLED_TIME && tmatime_ > state.cpu.cycleCounter + (tmatime_ != disabled_time && tmatime_ > state.cpu.cycleCounter ? tmatime_ : lastUpdate_ + ((256u - tima_) << timaClock[tac_ & 3]) + 3) : - static_cast(DISABLED_TIME) + static_cast(disabled_time) ); } @@ -59,7 +59,7 @@ void Tima::resetCc(const unsigned long oldCc, const unsigned long newCc, const T lastUpdate_ -= dec; timaIrq.setNextIrqEventTime(timaIrq.nextIrqEventTime() - dec); - if (tmatime_ != DISABLED_TIME) + if (tmatime_ != disabled_time) tmatime_ -= dec; } } @@ -71,7 +71,7 @@ void Tima::updateTima(const unsigned long cycleCounter) { if (cycleCounter >= tmatime_) { if (cycleCounter >= tmatime_ + 4) - tmatime_ = DISABLED_TIME; + tmatime_ = disabled_time; tima_ = tma_; } @@ -87,7 +87,7 @@ void Tima::updateTima(const unsigned long cycleCounter) { if (cycleCounter >= tmatime_) { if (cycleCounter >= tmatime_ + 4) - tmatime_ = DISABLED_TIME; + tmatime_ = disabled_time; tmp = tma_; } @@ -102,7 +102,7 @@ void Tima::setTima(const unsigned data, const unsigned long cycleCounter, const updateTima(cycleCounter); if (tmatime_ - cycleCounter < 4) - tmatime_ = DISABLED_TIME; + tmatime_ = disabled_time; timaIrq.setNextIrqEventTime(lastUpdate_ + ((256u - data) << timaClock[tac_ & 3]) + 3); } @@ -136,8 +136,8 @@ void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const T updateTima(cycleCounter); - tmatime_ = DISABLED_TIME; - nextIrqEventTime = DISABLED_TIME; + tmatime_ = disabled_time; + nextIrqEventTime = disabled_time; } if (data & 4) { diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index a30bf98c01..555b5504ba 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -76,7 +76,7 @@ void LCD::setCgb(bool cgb) { static unsigned long mode2IrqSchedule(const unsigned statReg, const LyCounter &lyCounter, const unsigned long cycleCounter) { if (!(statReg & 0x20)) - return DISABLED_TIME; + return disabled_time; unsigned next = lyCounter.time() - cycleCounter; @@ -127,20 +127,20 @@ void LCD::loadState(const SaveState &state, const unsigned char *const oamram) { lycIrq.reschedule(ppu.lyCounter(), ppu.now()); eventTimes_.setm(state.ppu.pendingLcdstatIrq - ? ppu.now() + 1 : static_cast(DISABLED_TIME)); + ? ppu.now() + 1 : static_cast(disabled_time)); eventTimes_.setm(state.ppu.oldWy != state.mem.ioamhram.get()[0x14A] - ? ppu.now() + 1 : static_cast(DISABLED_TIME)); + ? ppu.now() + 1 : static_cast(disabled_time)); eventTimes_.set(ppu.lyCounter().time()); eventTimes_.setm(SpriteMapper::schedule(ppu.lyCounter(), ppu.now())); eventTimes_.setm(lycIrq.time()); eventTimes_.setm(ppu.lyCounter().nextFrameCycle(144 * 456, ppu.now())); eventTimes_.setm(mode2IrqSchedule(statReg, ppu.lyCounter(), ppu.now())); - eventTimes_.setm((statReg & 0x08) ? ppu.now() + state.ppu.nextM0Irq : static_cast(DISABLED_TIME)); + eventTimes_.setm((statReg & 0x08) ? ppu.now() + state.ppu.nextM0Irq : static_cast(disabled_time)); eventTimes_.setm(state.mem.hdmaTransfer ? nextHdmaTime(ppu.lastM0Time(), nextM0Time_.predictedNextM0Time(), ppu.now(), isDoubleSpeed()) - : static_cast(DISABLED_TIME)); + : static_cast(disabled_time)); } else for (int i = 0; i < NUM_MEM_EVENTS; ++i) - eventTimes_.set(MemEvent(i), DISABLED_TIME); + eventTimes_.set(MemEvent(i), disabled_time); refreshPalettes(); } @@ -218,7 +218,7 @@ void LCD::resetCc(const unsigned long oldCc, const unsigned long newCc) { lycIrq.reschedule(ppu.lyCounter(), newCc); for (int i = 0; i < NUM_MEM_EVENTS; ++i) { - if (eventTimes_(MemEvent(i)) != DISABLED_TIME) + if (eventTimes_(MemEvent(i)) != disabled_time) eventTimes_.set(MemEvent(i), eventTimes_(MemEvent(i)) - dec); } @@ -240,7 +240,7 @@ void LCD::speedChange(const unsigned long cycleCounter) { eventTimes_.setm(ppu.lyCounter().nextFrameCycle(144 * 456, cycleCounter)); eventTimes_.setm(mode2IrqSchedule(statReg, ppu.lyCounter(), cycleCounter)); - if (eventTimes_(MODE0_IRQ) != DISABLED_TIME && eventTimes_(MODE0_IRQ) - cycleCounter > 1) + if (eventTimes_(MODE0_IRQ) != disabled_time && eventTimes_(MODE0_IRQ) - cycleCounter > 1) eventTimes_.setm(m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed())); if (hdmaIsEnabled() && eventTimes_(HDMA_REQ) - cycleCounter > 1) { @@ -294,7 +294,7 @@ void LCD::disableHdma(const unsigned long cycleCounter) { if (cycleCounter >= eventTimes_.nextEventTime()) update(cycleCounter); - eventTimes_.setm(DISABLED_TIME); + eventTimes_.setm(disabled_time); } bool LCD::vramAccessible(const unsigned long cycleCounter) { @@ -365,12 +365,12 @@ bool LCD::oamWritable(const unsigned long cycleCounter) { void LCD::mode3CyclesChange() { nextM0Time_.invalidatePredictedNextM0Time(); - if (eventTimes_(MODE0_IRQ) != DISABLED_TIME + if (eventTimes_(MODE0_IRQ) != disabled_time && eventTimes_(MODE0_IRQ) > m0IrqTimeFromXpos166Time(ppu.now(), ppu.cgb(), isDoubleSpeed())) { eventTimes_.setm(m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed())); } - if (eventTimes_(HDMA_REQ) != DISABLED_TIME + if (eventTimes_(HDMA_REQ) != disabled_time && eventTimes_(HDMA_REQ) > hdmaTimeFromM0Time(ppu.lastM0Time(), isDoubleSpeed())) { nextM0Time_.predictNextM0Time(ppu); eventTimes_.setm(hdmaTimeFromM0Time(nextM0Time_.predictedNextM0Time(), isDoubleSpeed())); @@ -456,7 +456,7 @@ void LCD::lcdcChange(const unsigned data, const unsigned long cycleCounter) { nextM0Time_.predictedNextM0Time(), cycleCounter, isDoubleSpeed())); } } else for (int i = 0; i < NUM_MEM_EVENTS; ++i) - eventTimes_.set(MemEvent(i), DISABLED_TIME); + eventTimes_.set(MemEvent(i), disabled_time); } else if (data & 0x80) { if (ppu.cgb()) { ppu.setLcdc((oldLcdc & ~0x14) | (data & 0x14), cycleCounter); @@ -557,7 +557,7 @@ void LCD::lcdstatChange(unsigned const data, unsigned long const cycleCounter) { } } - if ((data & 0x08) && eventTimes_(MODE0_IRQ) == DISABLED_TIME) { + if ((data & 0x08) && eventTimes_(MODE0_IRQ) == disabled_time) { update(cycleCounter); eventTimes_.setm(m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed())); } @@ -712,18 +712,18 @@ inline void LCD::event() { eventTimes_.setm(statReg & 0x08 ? m0IrqTimeFromXpos166Time(ppu.predictedNextXposTime(166), ppu.cgb(), isDoubleSpeed()) - : static_cast(DISABLED_TIME)); + : static_cast(disabled_time)); break; case ONESHOT_LCDSTATIRQ: eventTimes_.flagIrq(2); - eventTimes_.setm(DISABLED_TIME); + eventTimes_.setm(disabled_time); break; case ONESHOT_UPDATEWY2: ppu.updateWy2(); mode3CyclesChange(); - eventTimes_.setm(DISABLED_TIME); + eventTimes_.setm(disabled_time); break; } diff --git a/libgambatte/src/video.h b/libgambatte/src/video.h index ebfc14b7df..2bf3f577c2 100644 --- a/libgambatte/src/video.h +++ b/libgambatte/src/video.h @@ -21,6 +21,7 @@ #include "video/ppu.h" #include "video/lyc_irq.h" +#include "video/m0_irq.h" #include "video/next_m0_time.h" #include "interruptrequester.h" #include "minkeeper.h" @@ -39,53 +40,6 @@ public: void setNextEventTime(const unsigned long time) const { intreq->setEventTime

+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 delta 7407 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 SmAA{)u6CX2i-7NK=KlaQT}qt* From 7b518d0cf75a2f17fb27c9e826db058292e15501 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 00:13:34 +0200 Subject: [PATCH 085/138] Update InterruptRequester --- libgambatte/src/interruptrequester.cpp | 118 +++++++++++++---------- libgambatte/src/interruptrequester.h | 125 +++++++++++++------------ libgambatte/src/mem/cartridge.cpp | 2 + output/dll/libgambatte.dll | Bin 142336 -> 142336 bytes 4 files changed, 134 insertions(+), 111 deletions(-) diff --git a/libgambatte/src/interruptrequester.cpp b/libgambatte/src/interruptrequester.cpp index 79dc60836b..af37ed584e 100644 --- a/libgambatte/src/interruptrequester.cpp +++ b/libgambatte/src/interruptrequester.cpp @@ -1,106 +1,120 @@ -/*************************************************************************** - * Copyright (C) 2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "interruptrequester.h" #include "savestate.h" namespace gambatte { -InterruptRequester::InterruptRequester() : minIntTime(0), ifreg_(0), iereg_(0) {} +InterruptRequester::InterruptRequester() +: eventTimes_(disabled_time) +, minIntTime_(0) +, ifreg_(0) +, iereg_(0) +{ +} -void InterruptRequester::loadState(const SaveState &state) { - minIntTime = state.mem.minIntTime; +void InterruptRequester::loadState(SaveState const &state) { + minIntTime_ = state.mem.minIntTime; ifreg_ = state.mem.ioamhram.get()[0x10F]; iereg_ = state.mem.ioamhram.get()[0x1FF] & 0x1F; - intFlags.set(state.mem.IME, state.mem.halted); + intFlags_.set(state.mem.IME, state.mem.halted); - eventTimes.setValue(intFlags.imeOrHalted() && pendingIrqs() ? minIntTime : static_cast(disabled_time)); + eventTimes_.setValue(intFlags_.imeOrHalted() && pendingIrqs() + ? minIntTime_ + : static_cast(disabled_time)); } -void InterruptRequester::resetCc(const unsigned long oldCc, const unsigned long newCc) { - minIntTime = minIntTime < oldCc ? 0 : minIntTime - (oldCc - newCc); +void InterruptRequester::resetCc(unsigned long oldCc, unsigned long newCc) { + minIntTime_ = minIntTime_ < oldCc ? 0 : minIntTime_ - (oldCc - newCc); - if (eventTimes.value(intevent_interrupts) != disabled_time) - eventTimes.setValue(minIntTime); + if (eventTimes_.value(intevent_interrupts) != disabled_time) + eventTimes_.setValue(minIntTime_); } -void InterruptRequester::ei(const unsigned long cc) { - intFlags.setIme(); - minIntTime = cc + 1; +void InterruptRequester::ei(unsigned long cc) { + intFlags_.setIme(); + minIntTime_ = cc + 1; if (pendingIrqs()) - eventTimes.setValue(minIntTime); + eventTimes_.setValue(minIntTime_); } void InterruptRequester::di() { - intFlags.unsetIme(); + intFlags_.unsetIme(); - if (!intFlags.imeOrHalted()) - eventTimes.setValue(disabled_time); + if (!intFlags_.imeOrHalted()) + eventTimes_.setValue(disabled_time); } void InterruptRequester::halt() { - intFlags.setHalted(); + intFlags_.setHalted(); if (pendingIrqs()) - eventTimes.setValue(minIntTime); + eventTimes_.setValue(minIntTime_); } void InterruptRequester::unhalt() { - intFlags.unsetHalted(); + intFlags_.unsetHalted(); - if (!intFlags.imeOrHalted()) - eventTimes.setValue(disabled_time); + if (!intFlags_.imeOrHalted()) + eventTimes_.setValue(disabled_time); } -void InterruptRequester::flagIrq(const unsigned bit) { +void InterruptRequester::flagIrq(unsigned bit) { ifreg_ |= bit; - if (intFlags.imeOrHalted() && pendingIrqs()) - eventTimes.setValue(minIntTime); + if (intFlags_.imeOrHalted() && pendingIrqs()) + eventTimes_.setValue(minIntTime_); } -void InterruptRequester::ackIrq(const unsigned bit) { +void InterruptRequester::ackIrq(unsigned bit) { ifreg_ ^= bit; di(); } -void InterruptRequester::setIereg(const unsigned iereg) { +void InterruptRequester::setIereg(unsigned iereg) { iereg_ = iereg & 0x1F; - if (intFlags.imeOrHalted()) - eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(disabled_time)); + if (intFlags_.imeOrHalted()) { + eventTimes_.setValue(pendingIrqs() + ? minIntTime_ + : static_cast(disabled_time)); + } } -void InterruptRequester::setIfreg(const unsigned ifreg) { +void InterruptRequester::setIfreg(unsigned ifreg) { ifreg_ = ifreg; - if (intFlags.imeOrHalted()) - eventTimes.setValue(pendingIrqs() ? minIntTime : static_cast(disabled_time)); + if (intFlags_.imeOrHalted()) { + eventTimes_.setValue(pendingIrqs() + ? minIntTime_ + : static_cast(disabled_time)); + } } SYNCFUNC(InterruptRequester) { - SSS(eventTimes); - NSS(minIntTime); + SSS(eventTimes_); + NSS(minIntTime_); NSS(ifreg_); NSS(iereg_); - NSS(intFlags.flags_); + NSS(intFlags_.flags_); } } diff --git a/libgambatte/src/interruptrequester.h b/libgambatte/src/interruptrequester.h index b3a43e6849..cb54265078 100644 --- a/libgambatte/src/interruptrequester.h +++ b/libgambatte/src/interruptrequester.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef INTERRUPT_REQUESTER_H #define INTERRUPT_REQUESTER_H @@ -24,49 +24,29 @@ #include "newstate.h" namespace gambatte { + struct SaveState; -enum IntEventId { intevent_unhalt, intevent_end, intevent_blit, intevent_serial, intevent_oam, intevent_dma, intevent_tima, intevent_video, intevent_interrupts }; + +enum IntEventId { intevent_unhalt, + intevent_end, + intevent_blit, + intevent_serial, + intevent_oam, + intevent_dma, + intevent_tima, + intevent_video, + intevent_interrupts, intevent_last = intevent_interrupts }; class InterruptRequester { - MinKeeper eventTimes; - unsigned long minIntTime; - unsigned ifreg_; - unsigned iereg_; - - class IntFlags { - friend class InterruptRequester; - unsigned char flags_; - enum { IME_MASK = 1, HALTED_MASK = 2 }; - - public: - IntFlags() : flags_(0) {} - - bool ime() const { return flags_ & IME_MASK; } - bool halted() const { return flags_ & HALTED_MASK; } - bool imeOrHalted() const { return flags_; } - - void setIme() { flags_ |= IME_MASK; } - void unsetIme() { flags_ &= ~IME_MASK; } - - void setHalted() { flags_ |= HALTED_MASK; } - void unsetHalted() { flags_ &= ~HALTED_MASK; } - - void set(const bool ime, const bool halted) { flags_ = halted * HALTED_MASK + ime * IME_MASK; } - } intFlags; - public: InterruptRequester(); - - void loadState(const SaveState &); - + void loadState(SaveState const &); void resetCc(unsigned long oldCc, unsigned long newCc); - unsigned ifreg() const { return ifreg_; } unsigned iereg() const { return iereg_; } unsigned pendingIrqs() const { return ifreg_ & iereg_; } - bool ime() const { return intFlags.ime(); } - bool halted() const { return intFlags.halted(); } - + bool ime() const { return intFlags_.ime(); } + bool halted() const { return intFlags_.halted(); } void ei(unsigned long cc); void di(); void halt(); @@ -76,20 +56,47 @@ public: void setIereg(unsigned iereg); void setIfreg(unsigned ifreg); - IntEventId minEventId() const { return static_cast(eventTimes.min()); } - unsigned long minEventTime() const { return eventTimes.minValue(); } - template void setEventTime(unsigned long value) { eventTimes.setValue(value); } - void setEventTime(const IntEventId id, unsigned long value) { eventTimes.setValue(id, value); } - unsigned long eventTime(IntEventId id) const { return eventTimes.value(id); } + IntEventId minEventId() const { return static_cast(eventTimes_.min()); } + unsigned long minEventTime() const { return eventTimes_.minValue(); } + template void setEventTime(unsigned long value) { eventTimes_.setValue(value); } + void setEventTime(IntEventId id, unsigned long value) { eventTimes_.setValue(id, value); } + unsigned long eventTime(IntEventId id) const { return eventTimes_.value(id); } +private: + class IntFlags { + friend class InterruptRequester; + public: + IntFlags() : flags_(0) {} + bool ime() const { return flags_ & flag_ime; } + bool halted() const { return flags_ & flag_halted; } + bool imeOrHalted() const { return flags_; } + void setIme() { flags_ |= flag_ime; } + void unsetIme() { flags_ &= ~flag_ime; } + void setHalted() { flags_ |= flag_halted; } + void unsetHalted() { flags_ &= ~flag_halted; } + void set(bool ime, bool halted) { flags_ = halted * flag_halted + ime * flag_ime; } + + private: + unsigned char flags_; + enum { flag_ime = 1, flag_halted = 2 }; + }; + + MinKeeper eventTimes_; + unsigned long minIntTime_; + unsigned ifreg_; + unsigned iereg_; + IntFlags intFlags_; + + +public: templatevoid SyncState(NewState *ns); }; inline void flagHdmaReq(InterruptRequester &intreq) { intreq.setEventTime(0); } inline void flagGdmaReq(InterruptRequester &intreq) { intreq.setEventTime(1); } inline void ackDmaReq(InterruptRequester &intreq) { intreq.setEventTime(disabled_time); } -inline bool hdmaReqFlagged(const InterruptRequester &intreq) { return intreq.eventTime(intevent_dma) == 0; } -inline bool gdmaReqFlagged(const InterruptRequester &intreq) { return intreq.eventTime(intevent_dma) == 1; } +inline bool hdmaReqFlagged(InterruptRequester const &intreq) { return intreq.eventTime(intevent_dma) == 0; } +inline bool gdmaReqFlagged(InterruptRequester const &intreq) { return intreq.eventTime(intevent_dma) == 1; } } diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index e1f570fdcc..911036f94b 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -593,6 +593,8 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool case 0x1C: case 0x1D: case 0x1E: type = MBC5; break; + case 0x20: return LOADRES_UNSUPPORTED_MBC_MBC6; + case 0x22: return LOADRES_UNSUPPORTED_MBC_MBC7; case 0xFC: return LOADRES_UNSUPPORTED_MBC_POCKET_CAMERA; case 0xFD: return LOADRES_UNSUPPORTED_MBC_TAMA5; case 0xFE: return LOADRES_UNSUPPORTED_MBC_HUC3; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 47b5225b7dd7135e261623fdadb257bfd0fa8772..11be420021c5186d5f4c848544cbcc838dfb4fa9 100644 GIT binary patch delta 15525 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

5|(hh z)4|si@m9&>(qw6({FLH`;z#B)^&#~fO@SuH48n4?dD?t!p|%KYU8*hD+O+MuF8bj{ zDi3iERdM!Q@4 zg6@Q_QeSSUHrz6FGE&8eii1fcN|s96Bom~kp!bWiwX#j}GjcOk1*(ONHb62#GF385 zk|!yWluK4g)=M^l2|kj1E;%G=mV7VyS#ljZKa%WL9#o!Co>N{{4r88UN||z|lBr_W zFzc9Vu>EFc8&eArQODFnR5UP+%wY(=W-!bd=9(&8qti^%Gx~J>RLGIV`ZfA(kQp2G&H5JouX@@LWk@i{4C#jHh6RQagUzth@P*-9 z!&Sorh?{;!#`vT$+h|^7tTujZY%*Rn-Xr#^L6jV{5iaf{){37HPZP7^m&Ik`wc^cU zyZC_kgt$d~Tl_#AEQylzkqnkFl97_}lIfr~vt+eot7Na_1Ze6vNhfJ<=^&{=`h@gp z=^W`&=^N6WV7?R53({-S`_fQZFWKX=WSL3!oEb9QO4(-FC$c8lMcF-BxV*2Nk*CRL z%3qROdWZU)y0eDSq-myUo&%>V(^P9d(0r-+TJx>Od|7i_GetW~ zYth30b!ms{GIeuc8(OK`rrV|aR7dHBpy1*9@%owiSM*=$&*|41zA@Y|^f3-KjxuH# zuNqs4-u57h9IE8vQR4Apv$$NmO8ky^oA?v)dda7fM#%-quaXGqbl7@Iq^qTGNw-Nq zm)?^iSr=LF(Xv4@u}mo&AsZ!oLAFR%2>JdU(1$~IMAj@jEjus!S>}}8lC{Zxmr?Q{ zd6>M5JXYRYo+uwASITwrr{o3l)$)z<_vALw0J_q)VE~;=3zfF>v2^e0ahiCD9#ORmvw)@}o>?19Xc cVi;u@V=x&e8m1aD4LOdIBzj4}DskBV11cEsAOHXW delta 15766 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 UzyIdy^YpXyoPALOz0~i20ls(kC;$Ke From a177b81b4b7b8dba37688ccd9c6c000c45cf046e Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 00:18:07 +0200 Subject: [PATCH 086/138] Update MinKeeper --- libgambatte/src/minkeeper.h | 187 +++++++++++++++++++----------------- output/dll/libgambatte.dll | Bin 142336 -> 142336 bytes 2 files changed, 99 insertions(+), 88 deletions(-) diff --git a/libgambatte/src/minkeeper.h b/libgambatte/src/minkeeper.h index 5816a0fad7..322d746d7c 100644 --- a/libgambatte/src/minkeeper.h +++ b/libgambatte/src/minkeeper.h @@ -1,157 +1,168 @@ -/*************************************************************************** - * Copyright (C) 2009 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ +// +// Copyright (C) 2009 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef MINKEEPER_H #define MINKEEPER_H #include #include "newstate.h" -namespace MinKeeperUtil { -template struct CeiledLog2 { enum { R = 1 + CeiledLog2<(n + 1) / 2>::R }; }; -template<> struct CeiledLog2<1> { enum { R = 0 }; }; +namespace min_keeper_detail { -template struct RoundedDiv2n { enum { R = RoundedDiv2n<(v + 1) / 2, n - 1>::R }; }; -template struct RoundedDiv2n { enum { R = v }; }; +template struct CeiledLog2 { enum { r = 1 + CeiledLog2<(n + 1) / 2>::r }; }; +template<> struct CeiledLog2<1> { enum { r = 0 }; }; + +template struct CeiledDiv2n { enum { r = CeiledDiv2n<(v + 1) / 2, n - 1>::r }; }; +template struct CeiledDiv2n { enum { r = v }; }; +// alternatively: template struct CeiledDiv2n { enum { r = (v + (1 << n) - 1) >> n }; }; + +template class T, int n> struct Sum { enum { r = T::r + Sum::r }; }; +template class T> struct Sum { enum { r = 0 }; }; -template class T, int n> struct Sum { enum { R = T::R + Sum::R }; }; -template class T> struct Sum { enum { R = 0 }; }; } // Keeps track of minimum value identified by id as values change. -// Higher ids prioritized (as min value) if values are equal. Can easily be reversed by swapping < for <=. +// Higher ids prioritized (as min value) if values are equal. (Can be inverted by swapping < for <=). // Higher ids can be faster to change when the number of ids isn't a power of 2. -// Thus the ones that change more frequently should have higher ids if priority allows it. +// Thus, the ones that change more frequently should have higher ids if priority allows for it. template class MinKeeper { - enum { LEVELS = MinKeeperUtil::CeiledLog2::R }; - template struct Num { enum { R = MinKeeperUtil::RoundedDiv2n::R }; }; - template struct Sum { enum { R = MinKeeperUtil::Sum::R }; }; +public: + explicit MinKeeper(unsigned long initValue); + int min() const { return a_[0]; } + unsigned long minValue() const { return minValue_; } - template + template + void setValue(unsigned long cnt) { + values_[id] = cnt; + updateValue(*this); + } + + void setValue(int id, unsigned long cnt) { + values_[id] = cnt; + updateValueLut.call(id >> 1, *this); + } + + unsigned long value(int id) const { return values_[id]; } + +private: + enum { height = min_keeper_detail::CeiledLog2::r }; + template struct Num { enum { r = min_keeper_detail::CeiledDiv2n::r }; }; + template struct Sum { enum { r = min_keeper_detail::Sum::r }; }; + + template struct UpdateValue { - enum { P = Sum::R + id }; - enum { C0 = Sum::R + id * 2 }; - + enum { p = Sum::r + id + , c0 = Sum::r + id * 2 + , c1 = id * 2 + 1 < Num::r ? c0 + 1 : c0 }; static void updateValue(MinKeeper &m) { - // GCC 4.3 generates better code with the ternary operator on i386. - m.a[P] = (id * 2 + 1 == Num::R || m.values[m.a[C0]] < m.values[m.a[C0 + 1]]) ? m.a[C0] : m.a[C0 + 1]; - UpdateValue::updateValue(m); + m.a_[p] = m.values_[m.a_[c0]] < m.values_[m.a_[c1]] ? m.a_[c0] : m.a_[c1]; + UpdateValue::updateValue(m); } }; template - struct UpdateValue { + struct UpdateValue { static void updateValue(MinKeeper &m) { - m.minValue_ = m.values[m.a[0]]; + m.minValue_ = m.values_[m.a_[0]]; } }; class UpdateValueLut { - template struct FillLut { + public: + UpdateValueLut() { FillLut::r - 1, 0>::fillLut(*this); } + void call(int id, MinKeeper &mk) const { lut_[id](mk); } + + private: + template + struct FillLut { static void fillLut(UpdateValueLut & l) { l.lut_[id] = updateValue; - FillLut::fillLut(l); + FillLut::fillLut(l); } }; - template struct FillLut<-1,dummy> { + template + struct FillLut<-1, dummy> { static void fillLut(UpdateValueLut &) {} }; - void (*lut_[Num::R])(MinKeeper&); - - public: - UpdateValueLut() { FillLut::R-1,0>::fillLut(*this); } - void call(int id, MinKeeper &mk) const { lut_[id](mk); } + void (*lut_[Num::r])(MinKeeper &); }; static UpdateValueLut updateValueLut; - unsigned long values[ids]; + unsigned long values_[ids]; unsigned long minValue_; - int a[Sum::R]; + int a_[Sum::r]; template static void updateValue(MinKeeper &m); + public: - explicit MinKeeper(unsigned long initValue = 0xFFFFFFFF); - - int min() const { return a[0]; } - unsigned long minValue() const { return minValue_; } - - template - void setValue(const unsigned long cnt) { - values[id] = cnt; - updateValue(*this); - } - - void setValue(const int id, const unsigned long cnt) { - values[id] = cnt; - updateValueLut.call(id >> 1, *this); - } - - unsigned long value(const int id) const { return values[id]; } - // not sure if i understood everything in minkeeper correctly, so something might be missing here? template void SyncState(gambatte::NewState *ns) { - NSS(values); + NSS(values_); NSS(minValue_); - NSS(a); + NSS(a_); } }; template typename MinKeeper::UpdateValueLut MinKeeper::updateValueLut; template -MinKeeper::MinKeeper(const unsigned long initValue) { - std::fill(values, values + ids, initValue); +MinKeeper::MinKeeper(unsigned long const initValue) { + std::fill(values_, values_ + ids, initValue); - for (int i = 0; i < Num::R; ++i) { - a[Sum::R + i] = (i * 2 + 1 == ids || values[i * 2] < values[i * 2 + 1]) ? i * 2 : i * 2 + 1; + // todo: simplify/less template bloat. + + for (int i = 0; i < Num::r; ++i) { + int const c0 = i * 2; + int const c1 = c0 + 1 < ids ? c0 + 1 : c0; + a_[Sum::r + i] = values_[c0] < values_[c1] ? c0 : c1; } - int n = Num::R; - int off = Sum::R; - - while (off) { - const int pn = (n + 1) >> 1; - const int poff = off - pn; - + int n = Num::r; + int offset = Sum::r; + while (offset) { + int const pn = (n + 1) >> 1; + int const poff = offset - pn; for (int i = 0; i < pn; ++i) { - a[poff + i] = (i * 2 + 1 == n || - values[a[off + i * 2]] < values[a[off + i * 2 + 1]]) ? - a[off + i * 2] : a[off + i * 2 + 1]; + int const c0 = offset + i * 2; + int const c1 = i * 2 + 1 < n ? c0 + 1 : c0; + a_[poff + i] = values_[a_[c0]] < values_[a_[c1]] ? a_[c0] : a_[c1]; } - off = poff; - n = pn; + offset = poff; + n = pn; } - minValue_ = values[a[0]]; + minValue_ = values_[a_[0]]; } template template void MinKeeper::updateValue(MinKeeper &m) { - m.a[Sum::R + id] = (id * 2 + 1 == ids || m.values[id * 2] < m.values[id * 2 + 1]) ? id * 2 : id * 2 + 1; - UpdateValue::updateValue(m); + enum { c0 = id * 2 + , c1 = c0 + 1 < ids ? c0 + 1 : c0 }; + m.a_[Sum::r + id] = m.values_[c0] < m.values_[c1] ? c0 : c1; + UpdateValue::updateValue(m); } #endif diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 11be420021c5186d5f4c848544cbcc838dfb4fa9..46598c121389db585c027ba268dd55a2e3a1b874 100644 GIT binary patch delta 29311 zcmc(I30zcF`~N+cVNsD86%_@Q6cq(^Hkf@tSxZz51xrCPv&qz4AT84w9R$Yf2zt%2 zH&ZJsD=iFltV}U{MRT{!%!*QL$|Wr;%!U8=+&cpUY47{~mj92>=X>ut&)J^yobxR|&(Ei^Q%~yplXk=J8v|c=pgMd|P%M znOFTfJB|d`Y$r0$skMBFq$hiPBOfbyn0$wZD*2r{;jrs$ou@swjA6A?fQ_%`Ni#QgCmfR zBaXBy+)#-l?HV^U#F5s(4GndUxadf`>EV9%W_6KfmCwsVC;h7=H!k}p8N}Cw9w1|Q zNBc1yW-g}^3gJfFoTxfd;K^RjUv9sJReZ|75VnTY@rlxpS-z^eo$LZ(^Oo`r9n5Uk zrM$MInf=_s&+BOJpX=Nj-kxC`i>`z+jBR8g%cW0Pl0L3T$>olD7jZG;dqg zB`myDI_!XBWGp9H?nsYu5hdwlJ@NbEBBUq9(``!y2e)`8{JD@-y5k)SoJ$r@!?P%h zTbzuykf-AvHJo*eC*w)Ws9T)fW;<{#9S-G$()^`FeF> z*9k0%=0E868M&8V)qM|fRF8=qL&&n~*P|L(5?TFHuPvcu1fLy0plizajg8z)1$gFzA=oHS63PacOzd{?-`RoNNn|QV?PQc`Fzdzjbsh~$b>lSt|Y>6 z=PBz`D%Zv`vhzTP0gOxzj01MVZ^L^BU>eBCRs%J_w?LaXMy3G90Zw2$a2psH&&cit zW&xkW{~X@$1K$GIfS!XGSrYK*AjT@IfMW-69vD2Bk10V4q#XCmG+fknVd;AP+l@HOx=K;tk8kRs3$u2PXaFiM}c2~ z2rVOf7T61%1kM82fIuA>>VijqfM%q}dpfWI_!tP%Gcp}84R8Y|fVKum1c(Cq0)qh! zP!8+_t^xy%jO<}xE$}H2W@2OoKsoRwFxU*~0iT%B{{52}+0($MKx8r_8v%?3@_|Qy z=|C}11AGsVp(q^C0QUpafpXwu;1&=u3?c_c0*?VDzVQiG8owdfNLUpH{xu?`xwx#5P1P*z(&9g zd;)ZTh>>Z5QeX|hOcKMTR;3?p3;5-mHnvu-` zUI%sop8}Uhqy2;Lhspsu;BlY?cp2CXYzKA&b--~TI0wBS=nW`bgO0dar^NC8Fx zmOh0GWUe2Xq7a0uKO>0JDGv zfCG3IcoEnFd<$Fxt^qou=6IC3$KS&i9OLB4MyGnTtZqjTvIhV&?I zq&D)T{lj2Ku92pZtVSAcWUM1M-s?@_dp*{zf4a<&9?s<&BM;j520BJ+?;f|aHIG{m z!evAlGNQOqnOvSa@^}0GV8`4nPEuizxTV9ca--yqxyZsry(ynL@=zAs71ERwjy$mI za%99z6#1pRiuuV58R1-B7B^Qd@_?*qelE%{^2Px3vcWkzK@DJ+Kua`p{$GGASeCtVHYdA>DPFPb)lkj?zo=>yo4Mf{oR z5$rSr|NHbrHhM5Wc*f7{o@soqC+5cH4#a}25(%B9l3<3h*x=0eJg5`aX65U~wPEQj zxPDjl?k9o>=DPo!*^9Nr@!!u>vsqd`YSw)A2@U_;ECp-S@P}tbvQKIFA7>@9=7Ib@ zvxktwuF>O2I6ro_w&P=om>|yyw=l^JGZo9f2NJ8-&z2B&O9KDOoZjq^1peThN$ept zKd5MC!~<$@#bDv-ETd0Lqrg>)n%`a&tL@e@a4Pr>0?EEFVo@E#GK~E)DL#gdW5N7@ z$#s^}SGLEb<~tWZ&!(%Y-zh#C(3Lx3n^bt~&g%-}oz@jXgI?v*$F)lfu`MiQ99T$c zmZVSkcUDu!J3$E1PcP9%vqNp_?sbLq76M%LJC0vze7oL~p2 zFVK;mDO!-a^lWN)C^6WPo;9V?F`|L{aOjEaaeEyjt~k;zE;+bxti7hKV}xuE#LhUQ zN}cJkPD$l`j-StcigouEaUleA^QG^5G=~=u#{UlS&8C>(V7~Fm>t4lwdcmW+qBAjyD;K7zpGpmLi6$Ef`N1jG?Z| zHYB_qmmiYHUC)v3NXh5x7sSPUXTy?xe%^*TAzax;=}CT;by+eN)fHku1x@8BqbqYRMeQgHrHj9_G6) z&gfI{FzT>JhB%GVl9$0Fcg*usIKwP0qm60Yz_~K{MT?`la}|Y%VY!zka0kru9Rl! zD5c_$JUPrEurcv3dH!92{1z_CddKpxRTIJ-KI}D(%W2(~mb%bL_UmZ61<;9-8tD>j z$-%^h7!F9wN~mB;ze2#$<?aw;!wbt;~D&fQj8 z3);K^bs3@59ysPgbt|TZ_@*gZ$6TnbcP7Cd^UW(T$-o@LJFoDBUu$f{Yz3_rcR;$M z^bi^-pr)jha!?fF94+1ZljK4h=ZZ%7_x{vIx~NQ(-<;0R4lS*Ej>)#LbMOS^Qxd+SnR_q(I8xl##au%xDlZ9Fa%%)d|? z&py14KUCU{jjiFoFYRZQNg=aR+Ar)4;A$+aePhfL+w)jEOl2$*45Jv#4P9v@5B3D@ zwUR~qsbsmMQyLkM@)zuY<)*%i>N9mglx44BE_?gf~>w7ELS^Gv~Ci{zMB?s z+bO)bQK^tfhU7N#9_GlygvdLYiQZD1X0(3n^ApQ^%f5p|oV%&j&4Del?dDgM zJ9=U=`!`xj+i}tz+fftq2+bc_n2A1VjG)L$LJ4f%cCYFNAWdsU2VRp$*pAu$o$SU&qOc{N0f!gMByT zVR503tZ~fEwAbI{Qnl7_-}<3>q4MJxRC{SDHNo#<`p1-~wUfF_D^Xc&-NUs~a5caP zDCmr_-pUEKHhFKo#J-yri+C5Mse9{6sfYF>ZaE!o=$3yeWzpWy7};pA3&dOJ*gXLh z%&NdniJT^AvgFsf<Xc8epi*USsLAWiw4PjYnDz}k;!xPvk0(yj&U#WaU7MY5gr z6}Q*6oN{Zs5P&fL7S}(5&Ip!{X!jl+%Rc_jG4`UgmkmyaPgoX@eeX%jQrOL#_}7;8 z=yj458=`pa{4y*VwlnG8ARreW_#*Y{Mltg6WbmyUrh^;Iv=G%*}V}1BkcHt z)YI5l6hd3?I!sEAb9p%`<+=0n65nmTmVpG+uFgu9SYdu-8Zor{)I0T6sIeG0#&M&?0$WQx#0x zr!GU7gK-%!RpLtX-?At@y`>UqNq1o{c;CwaW)u%ga$%T8J3Ht(yrh z!BVy(EyR@YKS)^Fg#c%EwxX0Kv%Sh^RLHhdN546#_?Mhcj0qviF5+T|5Vw5CoB3A|0!D+zHCM3jxGyQir3;W z*pv}Gx8}L7o3dah@e#F@+N5l+g$P*78=ljL$Tng3HD*aYzu>tZWH$f&b6M5dXjGVBse4V`?>d78QQoCUQBbaD*&k5m{1EAm zS`*!okd{z0YHui>d%tvtE#|OLN%bLoeW*ACTf*gsN_Xs4)ozj(DV1N?&dQZvaL3Bm z(;&~u-|0+LTma&O>M>6T`t>nC6lSJ;t@aES7_^4M`cMe|^}HBd+jkKP-d{#%pCP<_ z{lHXCP+G%&hnr5np~S^9&Q0~14&`Yws4^uV^y(2^>6YkdOi{@My~(8OCH}+8&a!ut zkh@orsN(S_*N;?wh4~eBY+%@&6|~#u*z0d(dxk@Sr8|TkEs_x>$9_PP?NQkI`!~cW zHzO-9Uq<_O1b4lXR&o>O|6=EcT)C{6@ElLVV#F%5A=|iGzG_3HHEwLEy*>baduh34 zFOhxx9alm7J!%v15$)+CBmSn-|E16WwZmie4k1I-9EQ63kJStf#|CQ3xkk(hC8Y1#yBU6+fm6=Cn>5Adn=}yLrvQ+WXqj8;Wd+1V!kuLfDhETfwY!c=Ww0pM9 z;me2kZZE&h{^KeBqnF1=9K=M;8zVc{>87P%0)U+b)5a*8ntx#9Xo&`q__sFpj*D!L z-NaG5Lf8cN1d$bIMHC!4o+oMUgM*~@n(Ig!|4PpR>)>d~N@KCivuvWELSkk)o*t+j zKYB}ad~tJi?n6Q_a<}RXnaFQ@Q z1!>LWkO_jw_^M55k>C9G*YIQG#qjp8PmFxz4&nG*BXpXQ*NxF(cL=}zpb%cZzI}vH zA=Q^yP`73RAB7;O2Gj#htEA-@_>-J(-n`X(jCLX z{`gqBqhcC7Q~K0$?m{^D$TziZijmggnjmt}<$*iobngTFk~hU>edEp4_D8U+b*4wq zUC^`;zVg*>L$-p_n(Y_IQMPF*&WbENJ<(Iak6Z{G--H3sF>^7mKu>8iObur5WuCp;(xCi5^Fm9KoU^J8Un8x1r= zt+XT*@l>_qWGI(1GFW8f9=x(Wy(?hE>m}Y`M`}zoHa1~Wa^Q^eY{ST~w5$hW#x(3N zi^iKN7rbEFu^qmZTO%_ngq=EJpDy4dagZ}$h8YC|DtxbjM;PtAW1To1y6b2c%P)OL z%Fo`~HSObiXQ-SL_y2^U^S_a6=Q#T_G2xAVV<-kxVfR#8vJCYQH!XM4jeE|;N59iO zRG8Q@(hSrjOV~D@VT%-I-Amu;aL=2IA&B)<$W7A$+SP;|U<@pw4*uPDhPHhQ+fUxE zN~#rI%+%|PRla^VY`omfeHf#X!%Y|B&RlFb3rpDJBCA+- zyMzVr{y^H!$FaSNXxM|LQWuxJS|PqTL&yA_s}PpFZaRs-9L<9o0Cv1PQESNKQU zNu$+mv-A#W6|Gx~Xz$W!Bezcte*ya9yD`47eJxz z^*eNue7LL6?6^RBfik7f-o0l-rnEaX#j&1lW%zdqzJ6y6ZKRpAx zMCbQiy*qqbFXSz3^il;1=8cPclPUbYAN1_;B*L2H+|)m&iz)a;A9T`-O4rM_hi=!v zxX}r$v_yp%OUmeu#ote6J2p*boAw6yn;%45cfNtMD?s3zI1U1g+l<2$TX6Ud_yj0? z3#WL1epT=Tqqiaqc>f)oYpG^r2Z5?>IDWDn>o4G2AbbZ7;<$0x5-{(?F*IPqyVx25 z2EK=LFuQR62}s?812psY;3N)k9f+#Ip%@^0FOGu&lRv~c72szuIG`3wV1NS_{*#ft z3cL@T1sZ_+4=}PKU^SpQh;uB!ZJ_%{H~|PO25urBhOmYJNnnsc_~X0pnZZ}?=^ioZ z)5b>I`@($vJz=fNiEGvB5BEf~rPW!cy@cktR%Tk=axXvBo0xZh{SXpCs z2p7N|vcv=mZn|&XxeshiGc8nb$MYY2*tLDU5KE-U`ENh$W|jL<#QZ|JPU0s>%PQn= z!R`%{%^hm&NXemScFP8kr%IY=bTqM4wWOWFwwPrfrIDt1Us2lemb9-&Q(}EfBHa_T zcv{lvexl`COB&rWwA`dLFEg~xA^beey= zC%mUhoH$2vC>yn-iFdW5q})asBBh5|4hUXf1=2$;pHM0+E{FP8!0Ld;^M=g<$KmFcGJqp98$l6ht^AQG)&o>{&a%TGa(J-tVGBZ+h|&X}e+(Xf{ubB;HTNT+?Gv;+ZOsrh75T25&e zr1iA{;w_`JnUrR2>LsO>lsJzPz4D{-7Aq@sI6BT*Vo~|2tS|F2I)qu&Eot=AuqBn! zn%Y6wB(Y?-q|xskmH`u566q&Pi=`!ve#^5I@yqtd47!^>_4CR?)G<+B@%&f&Tk8|4 z`w#T#e#spaN+h<@D3RDor9@&Yow{H0AkFmamP#c?ZKYKrv6Whh#8!F*qEE5<@(~BR z3(A#nVA8*@T;3df+LcXf-a@^Ea$D$^Nby%Nk>aOe_cnU-{Tmgl#d1U7{%=)`pLnoy z`xYw2FFF`*6?N#2DufffV!nT)LYuPxr3wjkYOO;eaT&4tv`A1Qk=ja&yaKqp8VRXd z>yb!orAQ)?Za4ZgNe8ndQUzUVRwa?xN|!{USD6lf6y0tn29~0Bu%@02{*RC9$VGn7 zp+P=ss6ah*h&7((_Z_x`ef9+or2@gH8JY4luRrn|Y2f8Yd$LR*pM5j}iLIw2NeKV= ziN5?BM?GxGSNy7D^RMSmugnEY9H(Hhb&Qs;`Z_CuX%YAeEUXZ?kq`f7aKw9k{8LW!1)kv_{3b49Zi~PuUtl@^!Z!oi zgg*SiZ{(zg|MMGj_`crF*%VC|@*l%z)yIV|@edd*1T^qm{j>e<^WdTgFbS9elmR@j z8Q2M&0HS{6)4%OE@|6piqX8=~Vy*|IUBXFg!1oD@zOl7#ueoKqiIHn=2W-C|7Nxll zuPRcjtf`guV%~>m_vPyMz8ykX+ZF!8cS|B}{fx8KS1=s}#sfIJGPTjNVS9D?*|DVS z#$Rw$IPIqQVpz5_HyWdB_f`D0bBSGd-YM(|&ksGHqq}+)$BBWph!X-(w;68=O7poX z<0vslIMn+^o<+tVIUm_2Itas-BoAK@W%xeptlo(_S=9XP^Ib?L-}(DK#KJ%HeKZ4EoZz1h z|73m<{4)jr2k<|`pMbwy@VEb|6IsRI^HYDaLGb6pznPx}|4zZb1^#{fUigm-{#)>$ z;X7OyNIZCk^Vt`=kZXc#{sn9th4B1^0bun5M2O}+c*^-s7YBklGoIP}V;2W13PV^K zKGQn!)jMdaWV9gRE>1h0QCnsrjLuGuVv+~iW=ea8-*+({GEpxNmX)j<<2w75-OS_sYILb8dLEBIl- znG13gEn4v7n=^AE+C)ni{IsYGG81J$*!Ga79&n&n2h(o1%3BUCr7N95Z4d}n7+>^l zP(m%61xgb^X2E8GFje-(=wPX7N$6-f(2~%}a=axW+;Yl~fI3?01%HmnMHfp)k6$>r z=xVvb_ih*nYcQf=6fD6D4ZW>Y9v2k$>uhoGPAZEFeeKr+;HGl8(9M2b0ymYxh4!kN z_h{wq*8`=gA3Cr)JLX?kK?hsa6m1WRe^o__UtO)VgCLTBZAFTIbw!GQeML%VZ;h!~ zMM@V-bDc#BD%~W7`z1KDA>0wA;{g5RKe(Psl6dydB+|$a`?ESp-IkR(M;RSfi6bw> zF;h~3>Ub(- zO5IS*_Z=xAs+zhKF+xBLUv$GHpFj(lJJ0c?1mBe$BSX+Z9GM}`f(WrRXKubDTY`i; zlhNtw0;>3LZ$#qK_pKY$a`(My#HcdqW)eo3mu^1VTS7}4FLC6E>^6AWO^Fs$r$kio zaknD73QRrVWvb4{@PX?5TUvs<%&TvoBi~ieZ+wv@AGv$5WEUYXyH5v@62ji@;wlUz z{fOID7D$GWGM77$Y$LN=(}IY(^Q7*=2eM-E1DU0~peV=F)4eB%l(FOwS4JC>D0>3C zt=zpK`-gU9JRf&t7<#&+lWRj85^BZ7NrrwDOgBrqI#Z%7SLi|%V}hs^DKQorgRVR& zfp&4~rweTAUM09goO5C^bbH3oVw%Zflnr7Ont5{T%rh<4W!_x@Z*lipR{0TVUSfJN zud3#}vRme5xrv~utTSZ-cZ_aXptJ&u1Pwvg!rr_mT0&bA3M~;bKMF0a%Jp7bGLr0a zwP{E0Q6Hw6Hp^nB<&&0#B1=6bG#629@wf`wk)EPhk8(j&tX=%YdQ`N>esUEkLEO+;dcT~7TUb~)PqnXdIxa^GLtzq!)B)^4t~kAiBu(f%AebTaK? zvRv9O7fsXFEGsOMTrfeM*S}$69;gAnSmlCphD|uZI+f8(_dU7#a~_`#b00| z#b06~#b0D1#b0J31wzYg5{XFimzqfN7n?}&mzzj|;9N1C$^GPW_uS5;G(glOuj$Tc z9udV=QbzNLNC~YCce7Q_h;Qn9-jr%Tn@ks683|3Joi8hz+)77Rn(rs5o;ZMH7+dF+ zY&kqa*+ z7(?K|?tb>jTZJ)A`rsvuYwF8h!UM2J*6yU&-K7YrqwfA<1m)k9qnOrTkRrujl45Sw zrkTUtMd_TV6^G*te{qUA`pZ+Kq&MlY*9c|!OH?e?+h%CLK<@w-`Bwv%;V(roZ+|h0 z6e>p;xSp=$DAENJxx6TnO2)X>MiB*GN2ACFQsRE12f0bC;*?EX4M@b<4^}{-bRyMk zr$Q}Jl;EAn!8C?hV*I9BAV@9oEeSGS@1Q;4---}zYIO+MXZoz6={-%&Ow<3C5XKaZ5U}IfM2wk@P{-LDk!8n8cy8zpQ za2#A(>3X6MxzBoEK)^A2$ax_SIpfeL?!EiYIX7L{6wW!P{7H{FFBFdu?8c=E9QmBs zbe_O>F`J(GEGSP26OPo%nDQK-%Qrsww&Z+O>t6V`H+-$F>b4-{J>1X$_bKh;j^i1I zQz^a!tRyeOd&fR6(|adA*f9zRw*41{OFEN>T%~=bQBmxDWtyd#D7+hpWTuk$T?1nmbd zXfxx420i}nw#Jdkqytpm*MD;z`3;^nuAk${3*=3ga}epK`~~qxJMGa(S7)CdxV^Dbil}l8$zynsTB6chr}J%P|c(j`qUW7Q=9fqaE%3 z&Rl9pSk~6D@Y6fK^Hu0qUuwxIw!d4DJvH|1zcTjiTNp(5Edx2k_TTYe zPTw(!93)BS?kBRPWs}eWR0lbMnV1NpOuA~XGjs&3Ez@q~IDxN`v`>t@<4-ZP;>$FY z1e1QgdbO+l&#L8e4kIz49L~}@D<*>hPmSw?VMLcH?8xSE|D_{t&I+oM;yC3pr;wo! zed!!Z7F~Z1^^>NZy1;T@;LO)Uh_mF&V#y|1@gtj(i#jj)(wWl89g?Qu9&;JaVlajS zMOmVVgc0mtwpT`r_KI0rR)|bEcQl^mLTQ^qiib(vWijY_&Tu)(?qvT7r+2Bc-0yh~ z$M*`xPpn;Z!(~c^8U4)lcq$p)EZ4pNO0MxOi~n6HKBP#wbiL5mk1gGkf`TotLI|FN zu9!5U_^)?H*ZMS)&~q~S(q7=_5k$6NB#~8*!bW{Ikv$1;qg}tGk+(>^>&0}^MU8V* z^cQS!!+ewxlaCCUaECb6B{QVDWzu07p|u=bhSUm~@Ut~)_*_RaNrctG`Z_&FkMOWQvTbYNoRFCHTY(HK%CkXDLo ze;3X_p2@z;8AX;~=Ng*L(u4H@YV4GCOT$RHT}UJ=^K^*`QD&Fl!j zq6Bt?3rYd>4)y;rJMkEi92v2~eJKZikIA1MT#og&l1mmKP5H=Gmx(Qn|D|S%6&Q*C zzh@-6x!=azz2CZJ?Eg-`ZE;HTB36^w;GicnXAQ&nP7hOwG~wXeJQ!NbfNONgncQ^p zZ6_r%p)F{c)KG@H+GmkoWU|XPl5}+0@EX!H1Eks<~tiW(=|7X4DKLA zi4t?CQD(ZNqexe4ln@i=N1g60j0YAiEs$Voh%H8(&>|L_Kxj@UCJ;|V#WW|T6HH4v zjf-WcH?hQ0>6aL}1zOg&Bm`Moz{=XUweG8&SgQ93o|glhc%wtBWtYG~ zGq>?VxFBRY=(Wnc?4fRynA(CVVGd#$<2pBj#E%sMFPlv~S?Aww-jx4d!->iLTTbA=Mbq6cvC_T~ z%<}DgLeJ<>TLLK5yi^v|miqximUi@@qh$RBsEqGqcH=V3O(XJC3{;z&WZpz^0rebMh={QVeku?9u8^60%MdV&W>Rk(pNq*R3+%RlP_K3?H24hzS$E!jnj@1~@`=l|oJ7Q*gPL1xm}UAtl-lVwj^!HF z{`e+ZJf%roi}6%`3d;TDZ#;|_Tct~82Yl6-nbgR78QC}q)pHDXvS@K4S5m5`oonF&JQsjG+v4Rks7Z{ar8LNA)ajR^=0e4<-(odI_nPJ^(@l-0 zA;x?DMPk`Ro3DAZH^{QhYt6mipn@&doqm*H3(XPI!l#F>PP>}sxrvIoi9dS+rB$`0 zB~seXmNX5e)wHD1+hCRhEooLAB_3}{)Kl82mNWyUd0Nuw7Ki0ZOPYz&ZnmVEDNW)p zXiKQzbK0#*2=kp5uqV@q5&jXKc4{FkF)eAsC@sDvO<1R?ThdZ#JYzFW*sa2kx;Ov1 zDtQtLC47M=-KMrsLRf3GK`Sj3iJ}_PI(DJ`Oe7AYeZE;KMWU#cP0|2SI4GrcN3S9i zi8Ygk;A4Rpxs^(a#8x^f5?d*yNNlB*Akw~Djv~Bj`4_FkH!fPqJLsi1@m&?u`^EC# z(@a{3pqEo)o#_ymx4xw|x-09an?g0b%GuOrB5?_g*{rG}v6ZfRc@{0izoo2Wg$W_l zjY=WiUtNU)Fo|f^SCJBIY1UV7d7=^UQ&`t%7YUDR)=?p)y_J%RL{Up!l}KQ1R!lLh zm12s-R+=diTdAf zA=0Dg6WMVmkv&V}JWXUaxL3h#dy2@Smtg`0cNOSz&~cTSDTKQc^c6G?-1Ttd_Aj%c z1o?49MtiBvj>+3nVwKTBrrt(mg$`s4cQgVDm*U_c+}VpUV*q^-+*NSPKwk`Z%|a9g zMxAh9SpYiR%iw07LBY$3tQ^it(67MF!JQ3y72FQEkHdW&Zu*;#HH9)n^43!J5CT@X zpWaORN!V-K+%Hv;Q%2cDX8L0@avz#j{0M&Df_Z47yYvz^o~&0+;YZMcN+24j0c=2M z2UbSIs?LMGBMK{+{UosHU?!<{w3nUJ+G4(R)}j4 zSAga)ciSuEcXsgcAT%0~-4h9b4dJY8W-w$6Q~}3$!)-%YAu!{Sc|~bYJ~E?d?2N~XAkH=3c-h@u1=q-fU1+@Q9+;VT zVP%EA(KLOKF2;5A8tK=Oh9!fx7GX5+s=ltE-^def1|Z2muomZ9_#5ff88J2t61h0l zRm_DM?0)ArTouv#{#_0}STLD@47X%tEcG#rFAPU8nQ&kn!p1d)xo$U*?rh*5clYb$ z`;f55s|i!MoiH|F!**8~%XY!Mzc0%^+&dfBHwG7>o-xyB(0pmMLcB%VJf>#5`wf;| z&9=XcUeG&`?}p)!vAFIDWV^P-w2z@*GA?g(%?M<>1gSO?S^8$z(m=K+oAj3J4f;MN zyt@Z&ew)Y+z3u)fkR8~zZ*(#Kbw?4dr~)-}(2Ia7&)rvaB zmx>#TPRc$?t#X8Nl5(zcnes*D4&@=`Y2|OqwyIt#wd!8g(8SXklQvX;TK|;kO;ca9 z!mM$%>%oqn#2Rdd5<|IRnW56K%CN?;*08~_CFw}gr6gv9z$4RMK1iOZd|R2V8lxJg znxJ|lVOm1H=A6c(xv06Kxu$8*+|)2yi8e$Vs@T>l9>UY$2>ND!A zYBr%`LUe*WVOT;=LSe$}gp!2S39ltoC)6fJ#rzEJ&P@Sdv(o z_)6l|#Dj^SCSFRsmDo|!Ut`pa(Bx}oYsxfhHCr|NHD5wFN3}P#){{D;K3Sit&(tRw z3Jmig>z9lrrgGCVQ>7`%Tws3M{Bsh7RnIUp@d`szM=7I~F{s}V)kxJ;)mqhTbe>aS zvtIp#X1V4K&1aemnj~$y_C>=ULm%T~#?8hyrtzkKnB-=)S!*_$lg+8-Ommhw+dRhn zjMZ#2mzc}V%gmMLDzn?X&wRjqofde7VLrjjCNGhf%a_Sl%U_aTQs|W%m7A2Cl~u}Z z%ALwx${OW98@I^!e86~+&YKN>rmhMK0Eo-_T^bk)?ue6P9K z{G$1Y`MSAp(&(fGNv|j2pT1zmycU%ra=Cn>e7XDs`9-TdQgNTcp;)Uppg5`cMsZPb zT@i%tBZ@d)*;}2UPE(InKcX&HFI7LU-mLyWeN_F8`ihz)bU>d_Buq%yoNz4ROZ08m-txX{6uHsdh~-pZC7oaHbraE+O>PNXS7$ep*pp0mToI5W{uVB z^||_KdaxxU%r3l^L9khgyAqEiew}zZ@z2B#njV^g8iOWFGeKj~6l?4n7bNzs=Ab4* zJ3y<4)Fx=BYnN$X(7vs$f%ML5e@4d&(?#nPI+N}`-2=KAI-71Kq*zhHO^UFW#rCdAvzC^s67ImU^`X~u=dO5=;h zw~XHyuN&K$dYFco-iJXropd4TMiLWEn8RQ`MBYt4P;QWC$@AqiQ)?tp}M4KRCIu;nx?#!5DH})l&DKghY&4^^Po;E z5?@NJPTUK1I-fW|qt^_FB&KT?YSwACX!fA*oYDNKxuI#V?WrB8)o8P{1=^X~#adpw zL3=`bL3>Lp)!n1Z(mk&`qMMZ1*6L#p8c!wiGfP=SWoA~ehy!;gj=Xq=wLfyP8* zx^Wz|yx6$J=rX=;eBXEk4RpnL(-?{-8e|$~$}@q(LPEzCrdm#5G2O}}RklijhHTO0no04`>yJ90u zG+troC8-#XMue+oseV%ht5>SGt7{V)5|~OtZ4Z;7oTZ$nEKyb}*TUp%RlcXJRUTG; zs{C5{0|b3t$*S6^!c{#~M>S_PSJC=`+L78NuD2uDLDn|jx;`GEHaiE|6$x>tTBFU{2qO|jj5YyfJtY%*YtqtG1EfRO4F;R_e@7k z-6@fqF-}6}7|DX=k@5lZ6nUQfaVP{Y-zEP{epw!%h=4LADaI?NDxOl5D_p_| zwomb~;ycAv1*4QIBbEJ?DrJ&#xH3=qurQ95U>th~tLc9-|pD-^nKWF~Ye8apw=@;5rstB_RuTXiC ze1zO0pCb=e$RM{d3JVO#dc`KiR>d9|?k^PYVN!EWc}v+rHCR@+qsadj*km9N!B>tpn>`gpxu zuhwhz;($I*KS5up->KiFuhH+*AJ8AxABSEv=x^#7gTxSGD8gX>3?^B0Vztq*$*|c_ Zh2FZ;;2WC9nJ1VF&6C}8W7#DE{|`S+UvmHe delta 29793 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 Q6*tdQ5XssDmMbLx50XjoivR!s From 92204d527f2afd384299199867bad132d8097b30 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 00:41:03 +0200 Subject: [PATCH 087/138] avoid bools in save state struct --- libgambatte/src/initstate.cpp | 32 ++++++------- libgambatte/src/savestate.h | 87 +++++++++++++++++----------------- output/dll/libgambatte.dll | Bin 142336 -> 142848 bytes 3 files changed, 60 insertions(+), 59 deletions(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 5b89a79044..c52a530773 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -25,8 +25,8 @@ namespace { -static void setInitialCgbWram(unsigned char *const wram) { - static const struct { unsigned short addr; unsigned char val; } cgbWramDumpDiff[] = { +static void setInitialCgbWram(unsigned char wram[]) { + static struct { unsigned short addr; unsigned char val; } const cgbWramDumpDiff[] = { { 0x0083, 0x7F }, { 0x008B, 0x10 }, { 0x00C0, 0x7F }, { 0x00E1, 0x7F }, { 0x00E2, 0x7F }, { 0x00EA, 0x10 }, { 0x010A, 0x40 }, { 0x0179, 0x01 }, { 0x01AF, 0x01 }, { 0x0201, 0xFB }, { 0x0254, 0xF7 }, { 0x0264, 0x7F }, @@ -704,8 +704,8 @@ static void setInitialCgbWram(unsigned char *const wram) { wram[cgbWramDumpDiff[i].addr] = cgbWramDumpDiff[i].val; } -static void setInitialDmgWram(unsigned char *const wram) { - static const struct { unsigned short addr; unsigned char val; } dmgWramDumpDiff[] = { +static void setInitialDmgWram(unsigned char wram[]) { + static struct { unsigned short addr; unsigned char val; } const dmgWramDumpDiff[] = { { 0x0000, 0x08 }, { 0x0004, 0x08 }, { 0x0008, 0x4D }, { 0x000A, 0x80 }, { 0x0010, 0x02 }, { 0x0018, 0x04 }, { 0x0020, 0x10 }, { 0x0028, 0x05 }, { 0x002C, 0x08 }, { 0x0038, 0x21 }, { 0x003A, 0x40 }, { 0x0060, 0x02 }, @@ -976,8 +976,8 @@ static void setInitialDmgWram(unsigned char *const wram) { wram[dmgWramDumpDiff[i].addr] = dmgWramDumpDiff[i].val; } -static void setInitialVram(unsigned char *const vram, const bool cgb) { - static const unsigned char even_numbered_8010_to_81a0_dump[] = { +static void setInitialVram(unsigned char vram[], bool const cgb) { + static unsigned char const even_numbered_8010_to_81a0_dump[] = { 0xF0, 0xF0, 0xFC, 0xFC, 0xFC, 0xFC, 0xF3, 0xF3, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0xF3, 0xF3, @@ -1024,8 +1024,8 @@ static void setInitialVram(unsigned char *const vram, const bool cgb) { } } -static void setInitialCgbIoamhram(unsigned char *const ioamhram) { - static const unsigned char feaxDump[0x60] = { +static void setInitialCgbIoamhram(unsigned char ioamhram[]) { + static unsigned char const feaxDump[0x60] = { 0x08, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, 0x08, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, 0x08, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, @@ -1040,7 +1040,7 @@ static void setInitialCgbIoamhram(unsigned char *const ioamhram) { 0x24, 0x13, 0xFD, 0x3A, 0x10, 0x10, 0xAD, 0x45 }; - static const unsigned char ffxxDump[0x100] = { + static unsigned char const ffxxDump[0x100] = { 0xCF, 0x00, 0x7C, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x80, 0x3F, 0x00, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, @@ -1080,8 +1080,8 @@ static void setInitialCgbIoamhram(unsigned char *const ioamhram) { std::memcpy(ioamhram + 0x100, ffxxDump, sizeof ffxxDump); } -static void setInitialDmgIoamhram(unsigned char *const ioamhram) { - static const unsigned char oamDump[0xA0] = { +static void setInitialDmgIoamhram(unsigned char ioamhram[]) { + static unsigned char const oamDump[0xA0] = { 0xBB, 0xD8, 0xC4, 0x04, 0xCD, 0xAC, 0xA1, 0xC7, 0x7D, 0x85, 0x15, 0xF0, 0xAD, 0x19, 0x11, 0x6A, 0xBA, 0xC7, 0x76, 0xF8, 0x5C, 0xA0, 0x67, 0x0A, @@ -1104,7 +1104,7 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { 0x5E, 0xC1, 0x97, 0x7E, 0x44, 0x05, 0x01, 0xA9 }; - static const unsigned char ffxxDump[0x100] = { + static unsigned char const ffxxDump[0x100] = { 0xCF, 0x00, 0x7E, 0xFF, 0xD3, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x80, 0xBF, 0xF3, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, @@ -1147,7 +1147,7 @@ static void setInitialDmgIoamhram(unsigned char *const ioamhram) { } // anon namespace void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbMode, const std::uint32_t now, const unsigned div) { - static const unsigned char cgbObjpDump[0x40] = { + static unsigned char const cgbObjpDump[0x40] = { 0x00, 0x00, 0xF2, 0xAB, 0x61, 0xC2, 0xD9, 0xBA, 0x88, 0x6E, 0xDD, 0x63, @@ -1182,7 +1182,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.cgbSwitching = false; state.mem.agbMode = gbaCgbMode; - std::memset(state.mem.sram.ptr, 0xFF, state.mem.sram.getSz()); + std::memset(state.mem.sram.ptr, 0xFF, state.mem.sram.size()); setInitialVram(state.mem.vram.ptr, cgb); @@ -1263,8 +1263,8 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.ppu.pendingLcdstatIrq = false; state.ppu.isCgb = cgb; - - state.spu.cycleCounter = 0; // spu.cycleCounter >> 12 & 7 represents the frame sequencer position. + // spu.cycleCounter >> 12 & 7 represents the frame sequencer position. + state.spu.cycleCounter = state.cpu.cycleCounter >> 1; state.spu.ch1.sweep.counter = SoundUnit::counter_disabled; state.spu.ch1.sweep.shadow = 0; diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index 950244f1c0..5dd72a10cc 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -1,24 +1,25 @@ -/*************************************************************************** - * Copyright (C) 2008 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2008 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SAVESTATE_H #define SAVESTATE_H +#include #include namespace gambatte { @@ -28,17 +29,17 @@ class SaverList; struct SaveState { template class Ptr { - T *ptr; - unsigned long sz; - public: - Ptr() : ptr(0), sz(0) {} - const T* get() const { return ptr; } - unsigned long getSz() const { return sz; } - void set(T *ptr, const unsigned long sz) { this->ptr = ptr; this->sz = sz; } + Ptr() : ptr(0), size_(0) {} + T const * get() const { return ptr; } + std::size_t size() const { return size_; } + void set(T *p, std::size_t size) { ptr = p; size_ = size; } friend class SaverList; friend void setInitState(SaveState &, bool, bool, std::uint32_t, unsigned); + private: + T *ptr; + std::size_t size_; }; struct CPU { @@ -73,15 +74,15 @@ struct SaveState { unsigned short dmaDestination; unsigned char rambank; unsigned char oamDmaPos; - bool IME; - bool halted; - bool enableRam; - bool rambankMode; - bool hdmaTransfer; - bool biosMode; - bool cgbSwitching; - bool agbMode; - bool gbIsCgb; + unsigned char /*bool*/ IME; + unsigned char /*bool*/ halted; + unsigned char /*bool*/ enableRam; + unsigned char /*bool*/ rambankMode; + unsigned char /*bool*/ hdmaTransfer; + unsigned char /*bool*/ biosMode; + unsigned char /*bool*/ cgbSwitching; + unsigned char /*bool*/ agbMode; + unsigned char /*bool*/ gbIsCgb; } mem; struct PPU { @@ -115,9 +116,9 @@ struct SaveState { unsigned char oldWy; unsigned char winDrawState; unsigned char wscx; - bool weMaster; - bool pendingLcdstatIrq; - bool isCgb; + unsigned char /*bool*/ weMaster; + unsigned char /*bool*/ pendingLcdstatIrq; + unsigned char /*bool*/ isCgb; } ppu; struct SPU { @@ -143,13 +144,13 @@ struct SaveState { unsigned long counter; unsigned short shadow; unsigned char nr0; - bool negging; + unsigned char /*bool*/ negging; } sweep; Duty duty; Env env; LCounter lcounter; unsigned char nr4; - bool master; + unsigned char /*bool*/ master; } ch1; struct { @@ -157,7 +158,7 @@ struct SaveState { Env env; LCounter lcounter; unsigned char nr4; - bool master; + unsigned char /*bool*/ master; } ch2; struct { @@ -169,7 +170,7 @@ struct SaveState { unsigned char nr4; unsigned char wavePos; unsigned char sampleBuf; - bool master; + unsigned char /*bool*/ master; } ch3; struct { @@ -180,7 +181,7 @@ struct SaveState { Env env; LCounter lcounter; unsigned char nr4; - bool master; + unsigned char /*bool*/ master; } ch4; unsigned long cycleCounter; @@ -194,7 +195,7 @@ struct SaveState { unsigned char dataH; unsigned char dataM; unsigned char dataS; - bool lastLatchData; + unsigned char /*bool*/ lastLatchData; } rtc; }; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 46598c121389db585c027ba268dd55a2e3a1b874..290ab90b78956e0656c817d35a5513595908d85f 100644 GIT binary patch delta 8372 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 He(nBW!67RA delta 8408 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 From 839c8abf54f197836819f7b73512a8ab2d4e9c4f Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 10:52:18 +0200 Subject: [PATCH 088/138] Build x64 version --- output/dll/libgambatte.dll | Bin 142848 -> 168448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 290ab90b78956e0656c817d35a5513595908d85f..5176758d4b38917be743641deb308a04378ac8de 100644 GIT binary patch literal 168448 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 a+moLteWLb>m?txy3_e-?BnAG1?SBIwLAPE2 literal 142848 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 XORjf01+U!a{#p-0|NryfS_A(9^u4sB From a79febdef9a302cea49aa7885301c4c83481fea0 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 12:06:40 +0200 Subject: [PATCH 089/138] Refactor cartridge code --- libgambatte/include/gambatte.h | 88 ++-- libgambatte/include/gbint.h | 36 +- libgambatte/src/mem/cartridge.cpp | 669 ++++++++++++++++-------------- libgambatte/src/mem/cartridge.h | 119 +++--- libgambatte/src/mem/memptrs.cpp | 107 ++--- libgambatte/src/mem/memptrs.h | 105 ++--- libgambatte/src/mem/rtc.cpp | 231 +++++------ libgambatte/src/mem/rtc.h | 112 +++-- libgambatte/src/memory.cpp | 22 +- output/dll/libgambatte.dll | Bin 168448 -> 168960 bytes 10 files changed, 761 insertions(+), 728 deletions(-) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index ef4e4da646..0cccaafa9a 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef GAMBATTE_H #define GAMBATTE_H @@ -23,11 +23,10 @@ #include "loadres.h" #include #include -#include -#include #include "newstate.h" namespace gambatte { + enum { BG_PALETTE = 0, SP1_PALETTE = 1, SP2_PALETTE = 2 }; typedef void (*MemoryCallback)(int32_t address, int64_t cycleOffset); @@ -57,9 +56,11 @@ public: MULTICART_COMPAT = 4, /**< Use heuristics to detect and support some multicart MBCs disguised as MBC1. */ }; - /** Load ROM image. + /** + * Load ROM image. * - * @param romfile Path to rom image file. Typically a .gbc, .gb, or .zip-file (if zip-support is compiled in). + * @param romfile Path to rom image file. Typically a .gbc, .gb, or .zip-file (if + * zip-support is compiled in). * @param flags ORed combination of LoadFlags. * @return 0 on success, negative value on failure. */ @@ -68,24 +69,33 @@ public: int loadGBCBios(const char* biosfiledata); int loadDMGBios(const char* biosfiledata); - /** Emulates until at least 'samples' stereo sound samples are produced in the supplied buffer, - * or until a video frame has been drawn. + /** + * Emulates until at least 'samples' audio samples are produced in the + * supplied audio buffer, or until a video frame has been drawn. * - * There are 35112 stereo sound samples in a video frame. - * May run for up to 2064 stereo samples too long. - * A stereo sample consists of two native endian 2s complement 16-bit PCM samples, - * with the left sample preceding the right one. Usually casting soundBuf to/from - * short* is OK and recommended. The reason for not using a short* in the interface - * is to avoid implementation-defined behaviour without compromising performance. + * There are 35112 audio (stereo) samples in a video frame. + * May run for up to 2064 audio samples too long. + * + * An audio sample consists of two native endian 2s complement 16-bit PCM samples, + * with the left sample preceding the right one. Usually casting audioBuf to + * int16_t* is OK. The reason for using an uint_least32_t* in the interface is to + * avoid implementation-defined behavior without compromising performance. + * libgambatte is strictly c++98, so fixed-width types are not an option (and even + * c99/c++11 cannot guarantee their availability). * * Returns early when a new video frame has finished drawing in the video buffer, * such that the caller may update the video output before the frame is overwritten. * The return value indicates whether a new video frame has been drawn, and the - * exact time (in number of samples) at which it was drawn. + * exact time (in number of samples) at which it was completed. * - * @param soundBuf buffer with space >= samples + 2064 - * @param samples in: number of stereo samples to produce, out: actual number of samples produced - * @return sample number at which the video frame was produced. -1 means no frame was produced. + * @param videoBuf 160x144 RGB32 (native endian) video frame buffer or 0 + * @param pitch distance in number of pixels (not bytes) from the start of one line + * to the next in videoBuf. + * @param audioBuf buffer with space >= samples + 2064 + * @param samples in: number of stereo samples to produce, + * out: actual number of samples produced + * @return sample offset in audioBuf at which the video frame was completed, or -1 + * if no new video frame was completed. */ std::ptrdiff_t runFor(gambatte::uint_least32_t *soundBuf, std::size_t &samples); @@ -93,12 +103,14 @@ public: void setLayers(unsigned mask); - /** Reset to initial state. + /** + * Reset to initial state. * Equivalent to reloading a ROM image, or turning a Game Boy Color off and on again. */ void reset(std::uint32_t now, unsigned div); - /** @param palNum 0 <= palNum < 3. One of BG_PALETTE, SP1_PALETTE and SP2_PALETTE. + /** + * @param palNum 0 <= palNum < 3. One of BG_PALETTE, SP1_PALETTE and SP2_PALETTE. * @param colorNum 0 <= colorNum < 4 */ void setDmgPaletteColor(int palNum, int colorNum, unsigned long rgb32); @@ -150,8 +162,8 @@ private: struct Priv; Priv *const p_; - GB(const GB &); - GB & operator=(const GB &); + GB(GB const &); + GB & operator=(GB const &); }; } diff --git a/libgambatte/include/gbint.h b/libgambatte/include/gbint.h index 8feb2aac25..272a9e8318 100644 --- a/libgambatte/include/gbint.h +++ b/libgambatte/include/gbint.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef GAMBATTE_INT_H #define GAMBATTE_INT_H diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 911036f94b..18105d9d21 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007-2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007-2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "cartridge.h" #include "../savestate.h" #include @@ -27,7 +27,7 @@ namespace gambatte { namespace { -static unsigned toMulti64Rombank(const unsigned rombank) { +static unsigned toMulti64Rombank(unsigned rombank) { return (rombank >> 1 & 0x30) | (rombank & 0xF); } @@ -43,83 +43,75 @@ public: }; class Mbc0 : public DefaultMbc { - MemPtrs &memptrs; - bool enableRam; - public: explicit Mbc0(MemPtrs &memptrs) - : memptrs(memptrs), - enableRam(false) + : memptrs_(memptrs) + , enableRam_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - if (P < 0x2000) { - enableRam = (data & 0xF) == 0xA; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); + virtual void romWrite(unsigned const p, unsigned const data) { + if (p < 0x2000) { + enableRam_ = (data & 0xF) == 0xA; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); } } virtual void saveState(SaveState::Mem &ss) const { - ss.enableRam = enableRam; + ss.enableRam = enableRam_; } - virtual void loadState(const SaveState::Mem &ss) { - enableRam = ss.enableRam; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); + virtual void loadState(SaveState::Mem const &ss) { + enableRam_ = ss.enableRam; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); } +private: + MemPtrs &memptrs_; + bool enableRam_; + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(enableRam); + NSS(enableRam_); } }; -static inline unsigned rambanks(const MemPtrs &memptrs) { +static inline unsigned rambanks(MemPtrs const &memptrs) { return std::size_t(memptrs.rambankdataend() - memptrs.rambankdata()) / 0x2000; } -static inline unsigned rombanks(const MemPtrs &memptrs) { +static inline unsigned rombanks(MemPtrs const &memptrs) { return std::size_t(memptrs.romdataend() - memptrs.romdata() ) / 0x4000; } class Mbc1 : public DefaultMbc { - MemPtrs &memptrs; - unsigned char rombank; - unsigned char rambank; - bool enableRam; - bool rambankMode; - - static unsigned adjustedRombank(unsigned bank) { return bank & 0x1F ? bank : bank | 1; } - void setRambank() const { memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, rambank & (rambanks(memptrs) - 1)); } - void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } - public: explicit Mbc1(MemPtrs &memptrs) - : memptrs(memptrs), - rombank(1), - rambank(0), - enableRam(false), - rambankMode(false) + : memptrs_(memptrs) + , rombank_(1) + , rambank_(0) + , enableRam_(false) + , rambankMode_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P >> 13 & 3) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p >> 13 & 3) { case 0: - enableRam = (data & 0xF) == 0xA; + enableRam_ = (data & 0xF) == 0xA; setRambank(); break; case 1: - rombank = rambankMode ? data & 0x1F : (rombank & 0x60) | (data & 0x1F); + rombank_ = rambankMode_ ? data & 0x1F : (rombank_ & 0x60) | (data & 0x1F); setRombank(); break; case 2: - if (rambankMode) { - rambank = data & 3; + if (rambankMode_) { + rambank_ = data & 3; setRambank(); } else { - rombank = (data << 5 & 0x60) | (rombank & 0x1F); + rombank_ = (data << 5 & 0x60) | (rombank_ & 0x1F); setRombank(); } @@ -127,98 +119,98 @@ public: case 3: // Pretty sure this should take effect immediately, but I have a policy not to change old behavior // unless I have something (eg. a verified test or a game) that justifies it. - rambankMode = data & 1; + rambankMode_ = data & 1; break; } } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.rambank = rambank; - ss.enableRam = enableRam; - ss.rambankMode = rambankMode; + ss.rombank = rombank_; + ss.rambank = rambank_; + ss.enableRam = enableRam_; + ss.rambankMode = rambankMode_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - rambank = ss.rambank; - enableRam = ss.enableRam; - rambankMode = ss.rambankMode; + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + rambank_ = ss.rambank; + enableRam_ = ss.enableRam; + rambankMode_ = ss.rambankMode; setRambank(); setRombank(); } +private: + MemPtrs &memptrs_; + unsigned char rombank_; + unsigned char rambank_; + bool enableRam_; + bool rambankMode_; + + static unsigned adjustedRombank(unsigned bank) { return bank & 0x1F ? bank : bank | 1; } + + void setRambank() const { + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, + rambank_ & (rambanks(memptrs_) - 1)); + } + + void setRombank() const { memptrs_.setRombank(adjustedRombank(rombank_) & (rombanks(memptrs_) - 1)); } + + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(rambank); - NSS(enableRam); - NSS(rambankMode); + NSS(rombank_); + NSS(rambank_); + NSS(enableRam_); + NSS(rambankMode_); } }; class Mbc1Multi64 : public Mbc { - MemPtrs &memptrs; - unsigned char rombank; - bool enableRam; - bool rombank0Mode; - - static unsigned adjustedRombank(unsigned bank) { return bank & 0x1F ? bank : bank | 1; } - - void setRombank() const { - if (rombank0Mode) { - const unsigned rb = toMulti64Rombank(rombank); - memptrs.setRombank0(rb & 0x30); - memptrs.setRombank(adjustedRombank(rb)); - } else { - memptrs.setRombank0(0); - memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); - } - } - public: explicit Mbc1Multi64(MemPtrs &memptrs) - : memptrs(memptrs), - rombank(1), - enableRam(false), - rombank0Mode(false) + : memptrs_(memptrs) + , rombank_(1) + , enableRam_(false) + , rombank0Mode_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P >> 13 & 3) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p >> 13 & 3) { case 0: - enableRam = (data & 0xF) == 0xA; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); + enableRam_ = (data & 0xF) == 0xA; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); break; case 1: - rombank = (rombank & 0x60) | (data & 0x1F); - memptrs.setRombank(rombank0Mode - ? adjustedRombank(toMulti64Rombank(rombank)) - : adjustedRombank(rombank) & (rombanks(memptrs) - 1)); + rombank_ = (rombank_ & 0x60) | (data & 0x1F); + memptrs_.setRombank(rombank0Mode_ + ? adjustedRombank(toMulti64Rombank(rombank_)) + : adjustedRombank(rombank_) & (rombanks(memptrs_) - 1)); break; case 2: - rombank = (data << 5 & 0x60) | (rombank & 0x1F); + rombank_ = (data << 5 & 0x60) | (rombank_ & 0x1F); setRombank(); break; case 3: - rombank0Mode = data & 1; + rombank0Mode_ = data & 1; setRombank(); break; } } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.enableRam = enableRam; - ss.rambankMode = rombank0Mode; + ss.rombank = rombank_; + ss.enableRam = enableRam_; + ss.rambankMode = rombank0Mode_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - enableRam = ss.enableRam; - rombank0Mode = ss.rambankMode; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + enableRam_ = ss.enableRam; + rombank0Mode_ = ss.rambankMode; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); setRombank(); } @@ -226,177 +218,188 @@ public: return (addr < 0x4000) == ((bank & 0xF) == 0); } +private: + MemPtrs &memptrs_; + unsigned char rombank_; + bool enableRam_; + bool rombank0Mode_; + + static unsigned adjustedRombank(unsigned bank) { return bank & 0x1F ? bank : bank | 1; } + + void setRombank() const { + if (rombank0Mode_) { + unsigned const rb = toMulti64Rombank(rombank_); + memptrs_.setRombank0(rb & 0x30); + memptrs_.setRombank(adjustedRombank(rb)); + } else { + memptrs_.setRombank0(0); + memptrs_.setRombank(adjustedRombank(rombank_) & (rombanks(memptrs_) - 1)); + } + } + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(enableRam); - NSS(rombank0Mode); + NSS(rombank_); + NSS(enableRam_); + NSS(rombank0Mode_); } }; class Mbc2 : public DefaultMbc { - MemPtrs &memptrs; - unsigned char rombank; - bool enableRam; - public: explicit Mbc2(MemPtrs &memptrs) - : memptrs(memptrs), - rombank(1), - enableRam(false) + : memptrs_(memptrs) + , rombank_(1) + , enableRam_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P & 0x6100) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p & 0x6100) { case 0x0000: - enableRam = (data & 0xF) == 0xA; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); + enableRam_ = (data & 0xF) == 0xA; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); break; case 0x2100: - rombank = data & 0xF; - memptrs.setRombank(rombank & (rombanks(memptrs) - 1)); + rombank_ = data & 0xF; + memptrs_.setRombank(rombank_ & (rombanks(memptrs_) - 1)); break; } } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.enableRam = enableRam; + ss.rombank = rombank_; + ss.enableRam = enableRam_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - enableRam = ss.enableRam; - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, 0); - memptrs.setRombank(rombank & (rombanks(memptrs) - 1)); + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + enableRam_ = ss.enableRam; + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); + memptrs_.setRombank(rombank_ & (rombanks(memptrs_) - 1)); } +private: + MemPtrs &memptrs_; + unsigned char rombank_; + bool enableRam_; + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(enableRam); + NSS(rombank_); + NSS(enableRam_); } }; class Mbc3 : public DefaultMbc { - MemPtrs &memptrs; - Rtc *const rtc; - unsigned char rombank; - unsigned char rambank; - bool enableRam; - - static unsigned adjustedRombank(unsigned bank) { return bank & 0x7F ? bank : bank | 1; } - void setRambank() const { - unsigned flags = enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0; - - if (rtc) { - rtc->set(enableRam, rambank); - - if (rtc->getActive()) - flags |= MemPtrs::RTC_EN; - } - - memptrs.setRambank(flags, rambank & (rambanks(memptrs) - 1)); - } - // we adjust the rombank before masking with size? this seems correct, as how would the mbc - // know that high rom address outputs were not connected - void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } - public: Mbc3(MemPtrs &memptrs, Rtc *const rtc) - : memptrs(memptrs), - rtc(rtc), - rombank(1), - rambank(0), - enableRam(false) + : memptrs_(memptrs) + , rtc_(rtc) + , rombank_(1) + , rambank_(0) + , enableRam_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P >> 13 & 3) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p >> 13 & 3) { case 0: - enableRam = (data & 0xF) == 0xA; + enableRam_ = (data & 0xF) == 0xA; setRambank(); break; case 1: - rombank = data & 0x7F; + rombank_ = data & 0x7F; setRombank(); break; case 2: - rambank = data; + rambank_ = data; setRambank(); break; case 3: - if (rtc) - rtc->latch(data); + if (rtc_) + rtc_->latch(data); break; } } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.rambank = rambank; - ss.enableRam = enableRam; + ss.rombank = rombank_; + ss.rambank = rambank_; + ss.enableRam = enableRam_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - rambank = ss.rambank; - enableRam = ss.enableRam; + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + rambank_ = ss.rambank; + enableRam_ = ss.enableRam; setRambank(); setRombank(); } +private: + MemPtrs &memptrs_; + Rtc *const rtc_; + unsigned char rombank_; + unsigned char rambank_; + bool enableRam_; + + void setRambank() const { + unsigned flags = enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0; + + if (rtc_) { + rtc_->set(enableRam_, rambank_); + + if (rtc_->activeData()) + flags |= MemPtrs::rtc_en; + } + + memptrs_.setRambank(flags, rambank_ & (rambanks(memptrs_) - 1)); + } + + void setRombank() const { + memptrs_.setRombank(std::max(rombank_ & (rombanks(memptrs_) - 1), 1u)); + } + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(rambank); - NSS(enableRam); + NSS(rombank_); + NSS(rambank_); + NSS(enableRam_); } }; class HuC1 : public DefaultMbc { - MemPtrs &memptrs; - unsigned char rombank; - unsigned char rambank; - bool enableRam; - bool rambankMode; - - void setRambank() const { - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : MemPtrs::READ_EN, - rambankMode ? rambank & (rambanks(memptrs) - 1) : 0); - } - - void setRombank() const { memptrs.setRombank((rambankMode ? rombank : rambank << 6 | rombank) & (rombanks(memptrs) - 1)); } - public: explicit HuC1(MemPtrs &memptrs) - : memptrs(memptrs), - rombank(1), - rambank(0), - enableRam(false), - rambankMode(false) + : memptrs_(memptrs) + , rombank_(1) + , rambank_(0) + , enableRam_(false) + , rambankMode_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P >> 13 & 3) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p >> 13 & 3) { case 0: - enableRam = (data & 0xF) == 0xA; + enableRam_ = (data & 0xF) == 0xA; setRambank(); break; case 1: - rombank = data & 0x3F; + rombank_ = data & 0x3F; setRombank(); break; case 2: - rambank = data & 3; - rambankMode ? setRambank() : setRombank(); + rambank_ = data & 3; + rambankMode_ ? setRambank() : setRombank(); break; case 3: - rambankMode = data & 1; + rambankMode_ = data & 1; setRambank(); setRombank(); break; @@ -404,67 +407,72 @@ public: } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.rambank = rambank; - ss.enableRam = enableRam; - ss.rambankMode = rambankMode; + ss.rombank = rombank_; + ss.rambank = rambank_; + ss.enableRam = enableRam_; + ss.rambankMode = rambankMode_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - rambank = ss.rambank; - enableRam = ss.enableRam; - rambankMode = ss.rambankMode; + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + rambank_ = ss.rambank; + enableRam_ = ss.enableRam; + rambankMode_ = ss.rambankMode; setRambank(); setRombank(); } +private: + MemPtrs &memptrs_; + unsigned char rombank_; + unsigned char rambank_; + bool enableRam_; + bool rambankMode_; + + void setRambank() const { + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : MemPtrs::read_en, + rambankMode_ ? rambank_ & (rambanks(memptrs_) - 1) : 0); + } + + void setRombank() const { + memptrs_.setRombank((rambankMode_ ? rombank_ : rambank_ << 6 | rombank_) + & (rombanks(memptrs_) - 1)); + } + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(rambank); - NSS(enableRam); - NSS(rambankMode); + NSS(rombank_); + NSS(rambank_); + NSS(enableRam_); + NSS(rambankMode_); } }; class Mbc5 : public DefaultMbc { - MemPtrs &memptrs; - unsigned short rombank; - unsigned char rambank; - bool enableRam; - - static unsigned adjustedRombank(const unsigned bank) { return bank; } - - void setRambank() const { - memptrs.setRambank(enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0, - rambank & (rambanks(memptrs) - 1)); - } - - void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); } - public: explicit Mbc5(MemPtrs &memptrs) - : memptrs(memptrs), - rombank(1), - rambank(0), - enableRam(false) + : memptrs_(memptrs) + , rombank_(1) + , rambank_(0) + , enableRam_(false) { } - virtual void romWrite(const unsigned P, const unsigned data) { - switch (P >> 13 & 3) { + virtual void romWrite(unsigned const p, unsigned const data) { + switch (p >> 13 & 3) { case 0: - enableRam = (data & 0xF) == 0xA; + enableRam_ = (data & 0xF) == 0xA; setRambank(); break; case 1: - rombank = P < 0x3000 ? (rombank & 0x100) | data - : (data << 8 & 0x100) | (rombank & 0xFF); + rombank_ = p < 0x3000 + ? (rombank_ & 0x100) | data + : (data << 8 & 0x100) | (rombank_ & 0xFF); setRombank(); break; case 2: - rambank = data & 0xF; + rambank_ = data & 0xF; setRambank(); break; case 3: @@ -473,28 +481,44 @@ public: } virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank; - ss.rambank = rambank; - ss.enableRam = enableRam; + ss.rombank = rombank_; + ss.rambank = rambank_; + ss.enableRam = enableRam_; } - virtual void loadState(const SaveState::Mem &ss) { - rombank = ss.rombank; - rambank = ss.rambank; - enableRam = ss.enableRam; + virtual void loadState(SaveState::Mem const &ss) { + rombank_ = ss.rombank; + rambank_ = ss.rambank; + enableRam_ = ss.enableRam; setRambank(); setRombank(); } +private: + MemPtrs &memptrs_; + unsigned short rombank_; + unsigned char rambank_; + bool enableRam_; + + static unsigned adjustedRombank(unsigned bank) { return bank; } + + void setRambank() const { + memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, + rambank_ & (rambanks(memptrs_) - 1)); + } + + void setRombank() const { memptrs_.setRombank(adjustedRombank(rombank_) & (rombanks(memptrs_) - 1)); } + +public: virtual void SyncState(NewState *ns, bool isReader) { - NSS(rombank); - NSS(rambank); - NSS(enableRam); + NSS(rombank_); + NSS(rambank_); + NSS(enableRam_); } }; -static bool hasRtc(const unsigned headerByte0x147) { +static bool hasRtc(unsigned headerByte0x147) { switch (headerByte0x147) { case 0x0F: case 0x10: return true; @@ -505,19 +529,19 @@ static bool hasRtc(const unsigned headerByte0x147) { } void Cartridge::setStatePtrs(SaveState &state) { - state.mem.vram.set(memptrs.vramdata(), memptrs.vramdataend() - memptrs.vramdata()); - state.mem.sram.set(memptrs.rambankdata(), memptrs.rambankdataend() - memptrs.rambankdata()); - state.mem.wram.set(memptrs.wramdata(0), memptrs.wramdataend() - memptrs.wramdata(0)); + state.mem.vram.set(memptrs_.vramdata(), memptrs_.vramdataend() - memptrs_.vramdata()); + state.mem.sram.set(memptrs_.rambankdata(), memptrs_.rambankdataend() - memptrs_.rambankdata()); + state.mem.wram.set(memptrs_.wramdata(0), memptrs_.wramdataend() - memptrs_.wramdata(0)); } -void Cartridge::loadState(const SaveState &state) { - rtc.loadState(state); - mbc->loadState(state.mem); +void Cartridge::loadState(SaveState const &state) { + rtc_.loadState(state); + mbc_->loadState(state.mem); } -static void enforce8bit(unsigned char *data, unsigned long sz) { +static void enforce8bit(unsigned char *data, std::size_t size) { if (static_cast(0x100)) - while (sz--) + while (size--) *data++ &= 0xFF; } @@ -544,7 +568,7 @@ static unsigned numRambanksFromH14x(unsigned char h147, unsigned char h149) { return 4; } -static bool presumedMulti64Mbc1(unsigned char const header[], unsigned const rombanks) { +static bool presumedMulti64Mbc1(unsigned char const header[], unsigned rombanks) { return header[0x147] == 1 && header[0x149] == 0 && rombanks == 64; } @@ -554,28 +578,33 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool //if (rom->fail()) // return -1; + enum Cartridgetype { type_plain, + type_mbc1, + type_mbc2, + type_mbc3, + type_mbc5, + type_huc1 }; + Cartridgetype type = type_plain; unsigned rambanks = 1; unsigned rombanks = 2; bool cgb = false; - enum Cartridgetype { PLAIN, MBC1, MBC2, MBC3, MBC5, HUC1 } type = PLAIN; { unsigned char header[0x150]; - //rom->read(reinterpret_cast(header), sizeof header); if (romfilelength >= sizeof header) std::memcpy(header, romfiledata, sizeof header); else return LOADRES_IO_ERROR; switch (header[0x0147]) { - case 0x00: type = PLAIN; break; + case 0x00: type = type_plain; break; case 0x01: case 0x02: - case 0x03: type = MBC1; break; + case 0x03: type = type_mbc1; break; case 0x05: - case 0x06: type = MBC2; break; + case 0x06: type = type_mbc2; break; case 0x08: - case 0x09: type = PLAIN; break; + case 0x09: type = type_plain; break; case 0x0B: case 0x0C: case 0x0D: return LOADRES_UNSUPPORTED_MBC_MMM01; @@ -583,7 +612,7 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool case 0x10: case 0x11: case 0x12: - case 0x13: type = MBC3; break; + case 0x13: type = type_mbc3; break; case 0x15: case 0x16: case 0x17: return LOADRES_UNSUPPORTED_MBC_MBC4; @@ -592,14 +621,14 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool case 0x1B: case 0x1C: case 0x1D: - case 0x1E: type = MBC5; break; + case 0x1E: type = type_mbc5; break; case 0x20: return LOADRES_UNSUPPORTED_MBC_MBC6; case 0x22: return LOADRES_UNSUPPORTED_MBC_MBC7; case 0xFC: return LOADRES_UNSUPPORTED_MBC_POCKET_CAMERA; case 0xFD: return LOADRES_UNSUPPORTED_MBC_TAMA5; case 0xFE: return LOADRES_UNSUPPORTED_MBC_HUC3; - case 0xFF: type = HUC1; break; - default: return LOADRES_BAD_FILE_OR_UNKNOWN_MBC; + case 0xFF: type = type_huc1; break; + default: return LOADRES_BAD_FILE_OR_UNKNOWN_MBC; } /*switch (header[0x0148]) { @@ -619,44 +648,42 @@ LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool }*/ rambanks = numRambanksFromH14x(header[0x147], header[0x149]); - cgb = !forceDmg; } - std::size_t const filesize = romfilelength; //rom->size(); + std::size_t const filesize = romfilelength; rombanks = std::max(pow2ceil(filesize / 0x4000), 2u); - mbc.reset(); - memptrs.reset(rombanks, rambanks, cgb ? 8 : 2); - rtc.set(false, 0); + mbc_.reset(); + memptrs_.reset(rombanks, rambanks, cgb ? 8 : 2); + rtc_.set(false, 0); - //rom->rewind(); - //rom->read(reinterpret_cast(memptrs.romdata()), (filesize / 0x4000) * 0x4000ul); - std::memcpy(memptrs.romdata(), romfiledata, (filesize / 0x4000) * 0x4000ul); - std::memset(memptrs.romdata() + (filesize / 0x4000) * 0x4000ul, 0xFF, (rombanks - filesize / 0x4000) * 0x4000ul); - enforce8bit(memptrs.romdata(), rombanks * 0x4000ul); - - //if (rom->fail()) - // return -1; + std::memcpy(memptrs_.romdata(), romfiledata, (filesize / 0x4000) * 0x4000ul); + std::memset(memptrs_.romdata() + filesize / 0x4000 * 0x4000ul, + 0xFF, + (rombanks - filesize / 0x4000) * 0x4000ul); + enforce8bit(memptrs_.romdata(), rombanks * 0x4000ul); switch (type) { - case PLAIN: mbc.reset(new Mbc0(memptrs)); break; - case MBC1: - if (multicartCompat && presumedMulti64Mbc1(memptrs.romdata(), rombanks)) { - mbc.reset(new Mbc1Multi64(memptrs)); + case type_plain: mbc_.reset(new Mbc0(memptrs_)); break; + case type_mbc1: + if (multicartCompat && presumedMulti64Mbc1(memptrs_.romdata(), rombanks)) { + mbc_.reset(new Mbc1Multi64(memptrs_)); } else - mbc.reset(new Mbc1(memptrs)); + mbc_.reset(new Mbc1(memptrs_)); break; - case MBC2: mbc.reset(new Mbc2(memptrs)); break; - case MBC3: mbc.reset(new Mbc3(memptrs, hasRtc(memptrs.romdata()[0x147]) ? &rtc : 0)); break; - case MBC5: mbc.reset(new Mbc5(memptrs)); break; - case HUC1: mbc.reset(new HuC1(memptrs)); break; + case type_mbc2: mbc_.reset(new Mbc2(memptrs_)); break; + case type_mbc3: + mbc_.reset(new Mbc3(memptrs_, hasRtc(memptrs_.romdata()[0x147]) ? &rtc_ : 0)); + break; + case type_mbc5: mbc_.reset(new Mbc5(memptrs_)); break; + case type_huc1: mbc_.reset(new HuC1(memptrs_)); break; } return LOADRES_OK; } -static bool hasBattery(const unsigned char headerByte0x147) { +static bool hasBattery(unsigned char headerByte0x147) { switch (headerByte0x147) { case 0x03: case 0x06: @@ -672,40 +699,40 @@ static bool hasBattery(const unsigned char headerByte0x147) { } void Cartridge::loadSavedata(const char *data) { - if (hasBattery(memptrs.romdata()[0x147])) { - int length = memptrs.rambankdataend() - memptrs.rambankdata(); - std::memcpy(memptrs.rambankdata(), data, length); + if (hasBattery(memptrs_.romdata()[0x147])) { + int length = memptrs_.rambankdataend() - memptrs_.rambankdata(); + std::memcpy(memptrs_.rambankdata(), data, length); data += length; - enforce8bit(memptrs.rambankdata(), length); + enforce8bit(memptrs_.rambankdata(), length); } - if (hasRtc(memptrs.romdata()[0x147])) { + if (hasRtc(memptrs_.romdata()[0x147])) { unsigned long basetime; std::memcpy(&basetime, data, 4); - rtc.setBaseTime(basetime); + rtc_.setBaseTime(basetime); } } int Cartridge::saveSavedataLength() { int ret = 0; - if (hasBattery(memptrs.romdata()[0x147])) { - ret = memptrs.rambankdataend() - memptrs.rambankdata(); + if (hasBattery(memptrs_.romdata()[0x147])) { + ret = memptrs_.rambankdataend() - memptrs_.rambankdata(); } - if (hasRtc(memptrs.romdata()[0x147])) { + if (hasRtc(memptrs_.romdata()[0x147])) { ret += 4; } return ret; } void Cartridge::saveSavedata(char *dest) { - if (hasBattery(memptrs.romdata()[0x147])) { - int length = memptrs.rambankdataend() - memptrs.rambankdata(); - std::memcpy(dest, memptrs.rambankdata(), length); + if (hasBattery(memptrs_.romdata()[0x147])) { + int length = memptrs_.rambankdataend() - memptrs_.rambankdata(); + std::memcpy(dest, memptrs_.rambankdata(), length); dest += length; } - if (hasRtc(memptrs.romdata()[0x147])) { - const unsigned long basetime = rtc.getBaseTime(); + if (hasRtc(memptrs_.romdata()[0x147])) { + const unsigned long basetime = rtc_.getBaseTime(); std::memcpy(dest, &basetime, 4); } } @@ -717,20 +744,20 @@ bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) cons switch (which) { case 0: - *data = memptrs.vramdata(); - *length = memptrs.vramdataend() - memptrs.vramdata(); + *data = memptrs_.vramdata(); + *length = memptrs_.vramdataend() - memptrs_.vramdata(); return true; case 1: - *data = memptrs.romdata(); - *length = memptrs.romdataend() - memptrs.romdata(); + *data = memptrs_.romdata(); + *length = memptrs_.romdataend() - memptrs_.romdata(); return true; case 2: - *data = memptrs.wramdata(0); - *length = memptrs.wramdataend() - memptrs.wramdata(0); + *data = memptrs_.wramdata(0); + *length = memptrs_.wramdataend() - memptrs_.wramdata(0); return true; case 3: - *data = memptrs.rambankdata(); - *length = memptrs.rambankdataend() - memptrs.rambankdata(); + *data = memptrs_.rambankdata(); + *length = memptrs_.rambankdataend() - memptrs_.rambankdata(); return true; default: @@ -741,9 +768,9 @@ bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) cons SYNCFUNC(Cartridge) { - SSS(memptrs); - SSS(rtc); - TSS(mbc); + SSS(memptrs_); + SSS(rtc_); + TSS(mbc_); } } diff --git a/libgambatte/src/mem/cartridge.h b/libgambatte/src/mem/cartridge.h index dd7fd2e95c..245bf537aa 100644 --- a/libgambatte/src/mem/cartridge.h +++ b/libgambatte/src/mem/cartridge.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007-2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007-2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef CARTRIDGE_H #define CARTRIDGE_H @@ -30,26 +30,12 @@ namespace gambatte { - //DOOM -//enum eAddressMappingType -//{ -// eAddressMappingType_ROM, -// eAddressMappingType_RAM -//}; -// -//struct AddressMapping -//{ -// int32_t address; -// eAddressMappingType type; -//}; - class Mbc { public: virtual ~Mbc() {} virtual void romWrite(unsigned P, unsigned data) = 0; - virtual void loadState(const SaveState::Mem &ss) = 0; + virtual void loadState(SaveState::Mem const &ss) = 0; virtual bool isAddressWithinAreaRombankCanBeMappedTo(unsigned address, unsigned rombank) const = 0; - //virtual void mapAddress(AddressMapping* mapping, unsigned address) const = 0; //DOOM templatevoid SyncState(NewState *ns) { @@ -60,52 +46,45 @@ public: }; class Cartridge { - MemPtrs memptrs; - Rtc rtc; - std::unique_ptr mbc; - public: void setStatePtrs(SaveState &); - void loadState(const SaveState &); - - bool loaded() const { return mbc.get(); } - - const unsigned char * rmem(unsigned area) const { return memptrs.rmem(area); } - unsigned char * wmem(unsigned area) const { return memptrs.wmem(area); } - unsigned char * vramdata() const { return memptrs.vramdata(); } - unsigned char * romdata(unsigned area) const { return memptrs.romdata(area); } - unsigned char * wramdata(unsigned area) const { return memptrs.wramdata(area); } - const unsigned char * rdisabledRam() const { return memptrs.rdisabledRam(); } - const unsigned char * rsrambankptr() const { return memptrs.rsrambankptr(); } - unsigned char * wsrambankptr() const { return memptrs.wsrambankptr(); } - unsigned char * vrambankptr() const { return memptrs.vrambankptr(); } - OamDmaSrc oamDmaSrc() const { return memptrs.oamDmaSrc(); } - unsigned curRomBank() const { return memptrs.curRomBank(); } - - void setVrambank(unsigned bank) { memptrs.setVrambank(bank); } - void setWrambank(unsigned bank) { memptrs.setWrambank(bank); } - void setOamDmaSrc(OamDmaSrc oamDmaSrc) { memptrs.setOamDmaSrc(oamDmaSrc); } - - void mbcWrite(unsigned addr, unsigned data) { mbc->romWrite(addr, data); } - - bool isCgb() const { return gambatte::isCgb(memptrs); } - - void rtcWrite(unsigned data) { rtc.write(data); } - unsigned char rtcRead() const { return *rtc.getActive(); } - - void loadSavedata(const char *data); + void loadState(SaveState const &); + bool loaded() const { return mbc_.get(); } + unsigned char const * rmem(unsigned area) const { return memptrs_.rmem(area); } + unsigned char * wmem(unsigned area) const { return memptrs_.wmem(area); } + unsigned char * vramdata() const { return memptrs_.vramdata(); } + unsigned char * romdata(unsigned area) const { return memptrs_.romdata(area); } + unsigned char * wramdata(unsigned area) const { return memptrs_.wramdata(area); } + unsigned char const * rdisabledRam() const { return memptrs_.rdisabledRam(); } + unsigned char const * rsrambankptr() const { return memptrs_.rsrambankptr(); } + unsigned char * wsrambankptr() const { return memptrs_.wsrambankptr(); } + unsigned char * vrambankptr() const { return memptrs_.vrambankptr(); } + OamDmaSrc oamDmaSrc() const { return memptrs_.oamDmaSrc(); } + void setVrambank(unsigned bank) { memptrs_.setVrambank(bank); } + void setWrambank(unsigned bank) { memptrs_.setWrambank(bank); } + void setOamDmaSrc(OamDmaSrc oamDmaSrc) { memptrs_.setOamDmaSrc(oamDmaSrc); } + unsigned curRomBank() const { return memptrs_.curRomBank(); } + void mbcWrite(unsigned addr, unsigned data) { mbc_->romWrite(addr, data); } + bool isCgb() const { return gambatte::isCgb(memptrs_); } + void rtcWrite(unsigned data) { rtc_.write(data); } + unsigned char rtcRead() const { return *rtc_.activeData(); } + void loadSavedata(char const *data); int saveSavedataLength(); void saveSavedata(char *dest); - bool getMemoryArea(int which, unsigned char **data, int *length) const; - - LoadRes loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); - const char * romTitle() const { return reinterpret_cast(memptrs.romdata() + 0x134); } + LoadRes loadROM(char const *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); + char const * romTitle() const { return reinterpret_cast(memptrs_.romdata() + 0x134); } void setRTCCallback(std::uint32_t (*callback)()) { - rtc.setRTCCallback(callback); + rtc_.setRTCCallback(callback); } +private: + MemPtrs memptrs_; + Rtc rtc_; + std::unique_ptr mbc_; + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/mem/memptrs.cpp b/libgambatte/src/mem/memptrs.cpp index 7b6c2c2ee6..08a05bf40b 100644 --- a/libgambatte/src/mem/memptrs.cpp +++ b/libgambatte/src/mem/memptrs.cpp @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007-2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007-2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "memptrs.h" #include #include @@ -23,10 +23,19 @@ namespace gambatte { MemPtrs::MemPtrs() -: rmem_(), wmem_(), romdata_(), wramdata_(), vrambankptr_(0), rsrambankptr_(0), - wsrambankptr_(0), memchunk_(0), rambankdata_(0), wramdataend_(0), oamDmaSrc_(OAM_DMA_SRC_OFF), - curRomBank_(1), - memchunk_len(0) +: rmem_() +, wmem_() +, romdata_() +, wramdata_() +, vrambankptr_(0) +, rsrambankptr_(0) +, wsrambankptr_(0) +, memchunk_(0) +, rambankdata_(0) +, wramdataend_(0) +, oamDmaSrc_(oam_dma_src_off) +, curRomBank_(1) +, memchunk_len(0) { } @@ -34,7 +43,7 @@ MemPtrs::~MemPtrs() { delete []memchunk_; } -void MemPtrs::reset(const unsigned rombanks, const unsigned rambanks, const unsigned wrambanks) { +void MemPtrs::reset(unsigned const rombanks, unsigned const rambanks, unsigned const wrambanks) { delete []memchunk_; memchunk_len = 0x4000 + rombanks * 0x4000ul + 0x4000 + rambanks * 0x2000ul + wrambanks * 0x1000ul + 0x4000; memchunk_ = new unsigned char[memchunk_len]; @@ -46,7 +55,7 @@ void MemPtrs::reset(const unsigned rombanks, const unsigned rambanks, const unsi std::memset(rdisabledRamw(), 0xFF, 0x2000); - oamDmaSrc_ = OAM_DMA_SRC_OFF; + oamDmaSrc_ = oam_dma_src_off; rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; rmem_[0xC] = wmem_[0xC] = wramdata_[0] - 0xC000; rmem_[0xE] = wmem_[0xE] = wramdata_[0] - 0xE000; @@ -60,39 +69,43 @@ void MemPtrs::reset(const unsigned rombanks, const unsigned rambanks, const unsi memchunk_savelen = wramdataend() - memchunk_ - memchunk_saveoffs; } -void MemPtrs::setRombank0(const unsigned bank) { +void MemPtrs::setRombank0(unsigned bank) { romdata_[0] = romdata() + bank * 0x4000ul; rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; disconnectOamDmaAreas(); } -void MemPtrs::setRombank(const unsigned bank) { +void MemPtrs::setRombank(unsigned bank) { curRomBank_ = bank; romdata_[1] = romdata() + bank * 0x4000ul - 0x4000; rmem_[0x7] = rmem_[0x6] = rmem_[0x5] = rmem_[0x4] = romdata_[1]; disconnectOamDmaAreas(); } -void MemPtrs::setRambank(const unsigned flags, const unsigned rambank) { - unsigned char *const srambankptr = flags & RTC_EN - ? 0 - : (rambankdata() != rambankdataend() - ? rambankdata_ + rambank * 0x2000ul - 0xA000 : wdisabledRam() - 0xA000); +void MemPtrs::setRambank(unsigned const flags, unsigned const rambank) { + unsigned char *srambankptr = 0; + if (!(flags & rtc_en)) { + srambankptr = rambankdata() != rambankdataend() + ? rambankdata_ + rambank * 0x2000ul - 0xA000 + : wdisabledRam() - 0xA000; + } - rsrambankptr_ = (flags & READ_EN) && srambankptr != wdisabledRam() - 0xA000 ? srambankptr : rdisabledRamw() - 0xA000; - wsrambankptr_ = flags & WRITE_EN ? srambankptr : wdisabledRam() - 0xA000; + rsrambankptr_ = (flags & read_en) && srambankptr != wdisabledRam() - 0xA000 + ? srambankptr + : rdisabledRamw() - 0xA000; + wsrambankptr_ = flags & write_en ? srambankptr : wdisabledRam() - 0xA000; rmem_[0xB] = rmem_[0xA] = rsrambankptr_; wmem_[0xB] = wmem_[0xA] = wsrambankptr_; disconnectOamDmaAreas(); } -void MemPtrs::setWrambank(const unsigned bank) { +void MemPtrs::setWrambank(unsigned bank) { wramdata_[1] = wramdata_[0] + (bank & 0x07 ? bank & 0x07 : 1) * 0x1000; rmem_[0xD] = wmem_[0xD] = wramdata_[1] - 0xD000; disconnectOamDmaAreas(); } -void MemPtrs::setOamDmaSrc(const OamDmaSrc oamDmaSrc) { +void MemPtrs::setOamDmaSrc(OamDmaSrc oamDmaSrc) { rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; rmem_[0x7] = rmem_[0x6] = rmem_[0x5] = rmem_[0x4] = romdata_[1]; rmem_[0xB] = rmem_[0xA] = rsrambankptr_; @@ -108,37 +121,37 @@ void MemPtrs::setOamDmaSrc(const OamDmaSrc oamDmaSrc) { void MemPtrs::disconnectOamDmaAreas() { if (isCgb(*this)) { switch (oamDmaSrc_) { - case OAM_DMA_SRC_ROM: // fall through - case OAM_DMA_SRC_SRAM: - case OAM_DMA_SRC_INVALID: + case oam_dma_src_rom: // fall through + case oam_dma_src_sram: + case oam_dma_src_invalid: std::fill(rmem_, rmem_ + 8, static_cast(0)); rmem_[0xB] = rmem_[0xA] = 0; wmem_[0xB] = wmem_[0xA] = 0; break; - case OAM_DMA_SRC_VRAM: + case oam_dma_src_vram: break; - case OAM_DMA_SRC_WRAM: + case oam_dma_src_wram: rmem_[0xE] = rmem_[0xD] = rmem_[0xC] = 0; wmem_[0xE] = wmem_[0xD] = wmem_[0xC] = 0; break; - case OAM_DMA_SRC_OFF: + case oam_dma_src_off: break; } } else { switch (oamDmaSrc_) { - case OAM_DMA_SRC_ROM: // fall through - case OAM_DMA_SRC_SRAM: - case OAM_DMA_SRC_WRAM: - case OAM_DMA_SRC_INVALID: + case oam_dma_src_rom: // fall through + case oam_dma_src_sram: + case oam_dma_src_wram: + case oam_dma_src_invalid: std::fill(rmem_, rmem_ + 8, static_cast(0)); rmem_[0xB] = rmem_[0xA] = 0; wmem_[0xB] = wmem_[0xA] = 0; rmem_[0xE] = rmem_[0xD] = rmem_[0xC] = 0; wmem_[0xE] = wmem_[0xD] = wmem_[0xC] = 0; break; - case OAM_DMA_SRC_VRAM: + case oam_dma_src_vram: break; - case OAM_DMA_SRC_OFF: + case oam_dma_src_off: break; } } diff --git a/libgambatte/src/mem/memptrs.h b/libgambatte/src/mem/memptrs.h index 3d2c6ca3ca..d41a265394 100644 --- a/libgambatte/src/mem/memptrs.h +++ b/libgambatte/src/mem/memptrs.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007-2010 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007-2010 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef MEMPTRS_H #define MEMPTRS_H @@ -23,43 +23,22 @@ namespace gambatte { -enum OamDmaSrc { OAM_DMA_SRC_ROM, OAM_DMA_SRC_SRAM, OAM_DMA_SRC_VRAM, - OAM_DMA_SRC_WRAM, OAM_DMA_SRC_INVALID, OAM_DMA_SRC_OFF }; +enum OamDmaSrc { oam_dma_src_rom, + oam_dma_src_sram, + oam_dma_src_vram, + oam_dma_src_wram, + oam_dma_src_invalid, + oam_dma_src_off, }; class MemPtrs { - const unsigned char *rmem_[0x10]; - unsigned char *wmem_[0x10]; - - unsigned char *romdata_[2]; - unsigned char *wramdata_[2]; - unsigned char *vrambankptr_; - unsigned char *rsrambankptr_; - unsigned char *wsrambankptr_; - unsigned char *memchunk_; - unsigned char *rambankdata_; - unsigned char *wramdataend_; - - OamDmaSrc oamDmaSrc_; - - unsigned curRomBank_; - - int memchunk_len; - int memchunk_saveoffs; - int memchunk_savelen; - - MemPtrs(const MemPtrs &); - MemPtrs & operator=(const MemPtrs &); - void disconnectOamDmaAreas(); - unsigned char * rdisabledRamw() const { return wramdataend_ ; } - unsigned char * wdisabledRam() const { return wramdataend_ + 0x2000; } public: - enum RamFlag { READ_EN = 1, WRITE_EN = 2, RTC_EN = 4 }; + enum RamFlag { read_en = 1, write_en = 2, rtc_en = 4 }; MemPtrs(); ~MemPtrs(); void reset(unsigned rombanks, unsigned rambanks, unsigned wrambanks); - const unsigned char * rmem(unsigned area) const { return rmem_[area]; } + unsigned char const * rmem(unsigned area) const { return rmem_[area]; } unsigned char * wmem(unsigned area) const { return wmem_[area]; } unsigned char * vramdata() const { return rambankdata_ - 0x4000; } unsigned char * vramdataend() const { return rambankdata_; } @@ -70,8 +49,8 @@ public: unsigned char * wramdataend() const { return wramdataend_; } unsigned char * rambankdata() const { return rambankdata_; } unsigned char * rambankdataend() const { return wramdata_[0]; } - const unsigned char * rdisabledRam() const { return rdisabledRamw(); } - const unsigned char * rsrambankptr() const { return rsrambankptr_; } + unsigned char const * rdisabledRam() const { return rdisabledRamw(); } + unsigned char const * rsrambankptr() const { return rsrambankptr_; } unsigned char * wsrambankptr() const { return wsrambankptr_; } unsigned char * vrambankptr() const { return vrambankptr_; } OamDmaSrc oamDmaSrc() const { return oamDmaSrc_; } @@ -84,10 +63,36 @@ public: void setWrambank(unsigned bank); void setOamDmaSrc(OamDmaSrc oamDmaSrc); +private: + unsigned char const *rmem_[0x10]; + unsigned char *wmem_[0x10]; + unsigned char *romdata_[2]; + unsigned char *wramdata_[2]; + unsigned char *vrambankptr_; + unsigned char *rsrambankptr_; + unsigned char *wsrambankptr_; + unsigned char *memchunk_; + unsigned char *rambankdata_; + unsigned char *wramdataend_; + OamDmaSrc oamDmaSrc_; + + unsigned curRomBank_; + + int memchunk_len; + int memchunk_saveoffs; + int memchunk_savelen; + + MemPtrs(MemPtrs const &); + MemPtrs & operator=(MemPtrs const &); + void disconnectOamDmaAreas(); + unsigned char * rdisabledRamw() const { return wramdataend_ ; } + unsigned char * wdisabledRam() const { return wramdataend_ + 0x2000; } + +public: templatevoid SyncState(NewState *ns); }; -inline bool isCgb(const MemPtrs &memptrs) { +inline bool isCgb(MemPtrs const &memptrs) { return memptrs.wramdataend() - memptrs.wramdata(0) == 0x8000; } diff --git a/libgambatte/src/mem/rtc.cpp b/libgambatte/src/mem/rtc.cpp index 57b2964548..5495201c4c 100644 --- a/libgambatte/src/mem/rtc.cpp +++ b/libgambatte/src/mem/rtc.cpp @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "rtc.h" #include "../savestate.h" #include @@ -23,155 +23,154 @@ namespace gambatte { Rtc::Rtc() -: activeData(NULL), - activeSet(NULL), - baseTime(0), - haltTime(0), - index(5), - dataDh(0), - dataDl(0), - dataH(0), - dataM(0), - dataS(0), - enabled(false), - lastLatchData(false), - timeCB(0) +: activeData_(0) +, activeSet_(0) +, baseTime_(0) +, haltTime_(0) +, index_(5) +, dataDh_(0) +, dataDl_(0) +, dataH_(0) +, dataM_(0) +, dataS_(0) +, enabled_(false) +, lastLatchData_(false) +, timeCB(0) { } void Rtc::doLatch() { - std::uint32_t tmp = ((dataDh & 0x40) ? haltTime : timeCB()) - baseTime; + std::uint32_t tmp = ((dataDh_ & 0x40) ? haltTime_ : timeCB()) - baseTime_; while (tmp > 0x1FF * 86400) { - baseTime += 0x1FF * 86400; + baseTime_ += 0x1FF * 86400; tmp -= 0x1FF * 86400; - dataDh |= 0x80; + dataDh_ |= 0x80; } - dataDl = (tmp / 86400) & 0xFF; - dataDh &= 0xFE; - dataDh |= ((tmp / 86400) & 0x100) >> 8; + dataDl_ = (tmp / 86400) & 0xFF; + dataDh_ &= 0xFE; + dataDh_ |= ((tmp / 86400) & 0x100) >> 8; tmp %= 86400; - dataH = tmp / 3600; + dataH_ = tmp / 3600; tmp %= 3600; - dataM = tmp / 60; + dataM_ = tmp / 60; tmp %= 60; - dataS = tmp; + dataS_ = tmp; } void Rtc::doSwapActive() { - if (!enabled || index > 4) { - activeData = NULL; - activeSet = NULL; - } else switch (index) { + if (!enabled_ || index_ > 4) { + activeData_ = 0; + activeSet_ = 0; + } else switch (index_) { case 0x00: - activeData = &dataS; - activeSet = &Rtc::setS; + activeData_ = &dataS_; + activeSet_ = &Rtc::setS; break; case 0x01: - activeData = &dataM; - activeSet = &Rtc::setM; + activeData_ = &dataM_; + activeSet_ = &Rtc::setM; break; case 0x02: - activeData = &dataH; - activeSet = &Rtc::setH; + activeData_ = &dataH_; + activeSet_ = &Rtc::setH; break; case 0x03: - activeData = &dataDl; - activeSet = &Rtc::setDl; + activeData_ = &dataDl_; + activeSet_ = &Rtc::setDl; break; case 0x04: - activeData = &dataDh; - activeSet = &Rtc::setDh; + activeData_ = &dataDh_; + activeSet_ = &Rtc::setDh; break; } } -void Rtc::loadState(const SaveState &state) { - baseTime = state.rtc.baseTime; - haltTime = state.rtc.haltTime; - dataDh = state.rtc.dataDh; - dataDl = state.rtc.dataDl; - dataH = state.rtc.dataH; - dataM = state.rtc.dataM; - dataS = state.rtc.dataS; - lastLatchData = state.rtc.lastLatchData; - +void Rtc::loadState(SaveState const &state) { + baseTime_ = state.rtc.baseTime; + haltTime_ = state.rtc.haltTime; + dataDh_ = state.rtc.dataDh; + dataDl_ = state.rtc.dataDl; + dataH_ = state.rtc.dataH; + dataM_ = state.rtc.dataM; + dataS_ = state.rtc.dataS; + lastLatchData_ = state.rtc.lastLatchData; doSwapActive(); } -void Rtc::setDh(const unsigned new_dh) { - const std::uint32_t unixtime = (dataDh & 0x40) ? haltTime : timeCB(); - const std::uint32_t old_highdays = ((unixtime - baseTime) / 86400) & 0x100; - baseTime += old_highdays * 86400; - baseTime -= ((new_dh & 0x1) << 8) * 86400; +void Rtc::setDh(unsigned const newDh) { + const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); + const std::uint32_t oldHighdays = ((unixtime - baseTime_) / 86400) & 0x100; + baseTime_ += oldHighdays * 86400; + baseTime_ -= ((newDh & 0x1) << 8) * 86400; - if ((dataDh ^ new_dh) & 0x40) { - if (new_dh & 0x40) - haltTime = timeCB(); + if ((dataDh_ ^ newDh) & 0x40) { + if (newDh & 0x40) + haltTime_ = timeCB(); else - baseTime += timeCB() - haltTime; + baseTime_ += timeCB() - haltTime_; } } -void Rtc::setDl(const unsigned new_lowdays) { - const std::uint32_t unixtime = (dataDh & 0x40) ? haltTime : timeCB(); - const std::uint32_t old_lowdays = ((unixtime - baseTime) / 86400) & 0xFF; - baseTime += old_lowdays * 86400; - baseTime -= new_lowdays * 86400; +void Rtc::setDl(unsigned const newLowdays) { + const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); + const std::uint32_t oldLowdays = ((unixtime - baseTime_) / 86400) & 0xFF; + baseTime_ += oldLowdays * 86400; + baseTime_ -= newLowdays * 86400; } -void Rtc::setH(const unsigned new_hours) { - const std::uint32_t unixtime = (dataDh & 0x40) ? haltTime : timeCB(); - const std::uint32_t old_hours = ((unixtime - baseTime) / 3600) % 24; - baseTime += old_hours * 3600; - baseTime -= new_hours * 3600; +void Rtc::setH(unsigned const newHours) { + const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); + const std::uint32_t oldHours = ((unixtime - baseTime_) / 3600) % 24; + baseTime_ += oldHours * 3600; + baseTime_ -= newHours * 3600; } -void Rtc::setM(const unsigned new_minutes) { - const std::uint32_t unixtime = (dataDh & 0x40) ? haltTime : timeCB(); - const std::uint32_t old_minutes = ((unixtime - baseTime) / 60) % 60; - baseTime += old_minutes * 60; - baseTime -= new_minutes * 60; +void Rtc::setM(unsigned const newMinutes) { + const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); + const std::uint32_t oldMinutes = ((unixtime - baseTime_) / 60) % 60; + baseTime_ += oldMinutes * 60; + baseTime_ -= newMinutes * 60; } -void Rtc::setS(const unsigned new_seconds) { - const std::uint32_t unixtime = (dataDh & 0x40) ? haltTime : timeCB(); - baseTime += (unixtime - baseTime) % 60; - baseTime -= new_seconds; +void Rtc::setS(unsigned const newSeconds) { + const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); + baseTime_ += (unixtime - baseTime_) % 60; + baseTime_ -= newSeconds; } SYNCFUNC(Rtc) { - EBS(activeData, 0); - EVS(activeData, &dataS, 1); - EVS(activeData, &dataM, 2); - EVS(activeData, &dataH, 3); - EVS(activeData, &dataDl, 4); - EVS(activeData, &dataDh, 5); - EES(activeData, NULL); + EBS(activeData_, 0); + EVS(activeData_, &dataS_, 1); + EVS(activeData_, &dataM_, 2); + EVS(activeData_, &dataH_, 3); + EVS(activeData_, &dataDl_, 4); + EVS(activeData_, &dataDh_, 5); + EES(activeData_, NULL); - EBS(activeSet, 0); - EVS(activeSet, &Rtc::setS, 1); - EVS(activeSet, &Rtc::setM, 2); - EVS(activeSet, &Rtc::setH, 3); - EVS(activeSet, &Rtc::setDl, 4); - EVS(activeSet, &Rtc::setDh, 5); - EES(activeSet, NULL); + EBS(activeSet_, 0); + EVS(activeSet_, &Rtc::setS, 1); + EVS(activeSet_, &Rtc::setM, 2); + EVS(activeSet_, &Rtc::setH, 3); + EVS(activeSet_, &Rtc::setDl, 4); + EVS(activeSet_, &Rtc::setDh, 5); + EES(activeSet_, NULL); - NSS(baseTime); - NSS(haltTime); - NSS(index); - NSS(dataDh); - NSS(dataDl); - NSS(dataH); - NSS(dataM); - NSS(dataS); - NSS(enabled); - NSS(lastLatchData); + NSS(baseTime_); + NSS(haltTime_); + NSS(index_); + NSS(dataDh_); + NSS(dataDl_); + NSS(dataH_); + NSS(dataM_); + NSS(dataS_); + NSS(enabled_); + NSS(lastLatchData_); } } diff --git a/libgambatte/src/mem/rtc.h b/libgambatte/src/mem/rtc.h index 67eedb863b..f7594e2eec 100644 --- a/libgambatte/src/mem/rtc.h +++ b/libgambatte/src/mem/rtc.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef RTC_H #define RTC_H @@ -27,69 +27,67 @@ namespace gambatte { struct SaveState; class Rtc { -private: - unsigned char *activeData; - void (Rtc::*activeSet)(unsigned); - std::uint32_t baseTime; - std::uint32_t haltTime; - unsigned char index; - unsigned char dataDh; - unsigned char dataDl; - unsigned char dataH; - unsigned char dataM; - unsigned char dataS; - bool enabled; - bool lastLatchData; - std::uint32_t (*timeCB)(); - - void doLatch(); - void doSwapActive(); - void setDh(unsigned new_dh); - void setDl(unsigned new_lowdays); - void setH(unsigned new_hours); - void setM(unsigned new_minutes); - void setS(unsigned new_seconds); - public: Rtc(); - const unsigned char* getActive() const { return activeData; } - std::uint32_t getBaseTime() const { return baseTime; } + unsigned char const * activeData() const { return activeData_; } + std::uint32_t getBaseTime() const { return baseTime_; } void setBaseTime(const std::uint32_t baseTime) { - this->baseTime = baseTime; -// doLatch(); + this->baseTime_ = baseTime; } - void latch(const unsigned data) { - if (!lastLatchData && data == 1) + void latch(unsigned data) { + if (!lastLatchData_ && data == 1) doLatch(); - lastLatchData = data; + lastLatchData_ = data; } - void loadState(const SaveState &state); + void loadState(SaveState const &state); - void set(const bool enabled, unsigned bank) { + void set(bool enabled, unsigned bank) { bank &= 0xF; bank -= 8; - this->enabled = enabled; - this->index = bank; - + enabled_ = enabled; + index_ = bank; doSwapActive(); } - void write(const unsigned data) { -// if (activeSet) - (this->*activeSet)(data); - *activeData = data; + void write(unsigned data) { + (this->*activeSet_)(data); + *activeData_ = data; } void setRTCCallback(std::uint32_t (*callback)()) { timeCB = callback; } +private: + unsigned char *activeData_; + void (Rtc::*activeSet_)(unsigned); + std::uint32_t baseTime_; + std::uint32_t haltTime_; + unsigned char index_; + unsigned char dataDh_; + unsigned char dataDl_; + unsigned char dataH_; + unsigned char dataM_; + unsigned char dataS_; + bool enabled_; + bool lastLatchData_; + std::uint32_t (*timeCB)(); + + void doLatch(); + void doSwapActive(); + void setDh(unsigned newDh); + void setDl(unsigned newLowdays); + void setH(unsigned newHours); + void setM(unsigned newMinutes); + void setS(unsigned newSeconds); + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 46bb190e16..8d014b4798 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -85,7 +85,7 @@ void Memory::loadState(const SaveState &state) { : 8; cart.setVrambank(ioamhram[0x14F] & isCgb()); - cart.setOamDmaSrc(OAM_DMA_SRC_OFF); + cart.setOamDmaSrc(oam_dma_src_off); cart.setWrambank(isCgb() && (ioamhram[0x170] & 0x07) ? ioamhram[0x170] & 0x07 : 1); if (lastOamDmaUpdate != disabled_time) { @@ -432,11 +432,11 @@ void Memory::updateOamDma(const unsigned long cycleCounter) { void Memory::oamDmaInitSetup() { if (ioamhram[0x146] < 0xA0) { - cart.setOamDmaSrc(ioamhram[0x146] < 0x80 ? OAM_DMA_SRC_ROM : OAM_DMA_SRC_VRAM); + cart.setOamDmaSrc(ioamhram[0x146] < 0x80 ? oam_dma_src_rom : oam_dma_src_vram); } else if (ioamhram[0x146] < 0xFE - isCgb() * 0x1E) { - cart.setOamDmaSrc(ioamhram[0x146] < 0xC0 ? OAM_DMA_SRC_SRAM : OAM_DMA_SRC_WRAM); + cart.setOamDmaSrc(ioamhram[0x146] < 0xC0 ? oam_dma_src_sram : oam_dma_src_wram); } else - cart.setOamDmaSrc(OAM_DMA_SRC_INVALID); + cart.setOamDmaSrc(oam_dma_src_invalid); } static const unsigned char * oamDmaSrcZero() { @@ -446,12 +446,12 @@ static const unsigned char * oamDmaSrcZero() { const unsigned char * Memory::oamDmaSrcPtr() const { switch (cart.oamDmaSrc()) { - case OAM_DMA_SRC_ROM: return cart.romdata(ioamhram[0x146] >> 6) + (ioamhram[0x146] << 8); - case OAM_DMA_SRC_SRAM: return cart.rsrambankptr() ? cart.rsrambankptr() + (ioamhram[0x146] << 8) : 0; - case OAM_DMA_SRC_VRAM: return cart.vrambankptr() + (ioamhram[0x146] << 8); - case OAM_DMA_SRC_WRAM: return cart.wramdata(ioamhram[0x146] >> 4 & 1) + (ioamhram[0x146] << 8 & 0xFFF); - case OAM_DMA_SRC_INVALID: - case OAM_DMA_SRC_OFF: break; + case oam_dma_src_rom: return cart.romdata(ioamhram[0x146] >> 6) + (ioamhram[0x146] << 8); + case oam_dma_src_sram: return cart.rsrambankptr() ? cart.rsrambankptr() + (ioamhram[0x146] << 8) : 0; + case oam_dma_src_vram: return cart.vrambankptr() + (ioamhram[0x146] << 8); + case oam_dma_src_wram: return cart.wramdata(ioamhram[0x146] >> 4 & 1) + (ioamhram[0x146] << 8 & 0xFFF); + case oam_dma_src_invalid: + case oam_dma_src_off: break; } return ioamhram[0x146] == 0xFF && !isCgb() ? oamDmaSrcZero() : cart.rdisabledRam(); @@ -463,7 +463,7 @@ void Memory::startOamDma(const unsigned long cycleCounter) { void Memory::endOamDma(const unsigned long cycleCounter) { oamDmaPos = 0xFE; - cart.setOamDmaSrc(OAM_DMA_SRC_OFF); + cart.setOamDmaSrc(oam_dma_src_off); display.oamChange(ioamhram, cycleCounter); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 5176758d4b38917be743641deb308a04378ac8de..34cf5fec977d0027efb94d942b0e7b46473f63e7 100644 GIT binary patch delta 26812 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 From af42fbb714b489a0b93afecc25ac2fc14c8d527c Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 12:22:53 +0200 Subject: [PATCH 090/138] Reformat gambatte.cpp --- libgambatte/include/gambatte.h | 20 +++---- libgambatte/src/cinterface.cpp | 22 +++---- libgambatte/src/counterdef.h | 4 +- libgambatte/src/cpu.h | 4 +- libgambatte/src/gambatte.cpp | 90 +++++++++++++---------------- libgambatte/src/mem/cartridge.cpp | 4 +- libgambatte/src/memory.cpp | 4 +- libgambatte/src/memory.h | 8 +-- libgambatte/src/newstate.cpp | 16 ++--- libgambatte/src/newstate.h | 40 ++++++------- libgambatte/src/sound/channel3.cpp | 2 +- output/dll/libgambatte.dll | Bin 168960 -> 168960 bytes 12 files changed, 103 insertions(+), 111 deletions(-) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 0cccaafa9a..890574b48c 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -64,10 +64,10 @@ public: * @param flags ORed combination of LoadFlags. * @return 0 on success, negative value on failure. */ - LoadRes load(const char *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); + LoadRes load(char const *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); - int loadGBCBios(const char* biosfiledata); - int loadDMGBios(const char* biosfiledata); + int loadGBCBios(char const* biosfiledata); + int loadDMGBios(char const* biosfiledata); /** * Emulates until at least 'samples' audio samples are produced in the @@ -136,7 +136,7 @@ public: bool isLoaded() const; /** Writes persistent cartridge data to disk. NOT Done implicitly on ROM close. */ - void loadSavedata(const char *data); + void loadSavedata(char const *data); int saveSavedataLength(); void saveSavedata(char *dest); @@ -146,15 +146,15 @@ public: /** ROM header title of currently loaded ROM image. */ const std::string romTitle() const; - unsigned char ExternalRead(unsigned short addr); - void ExternalWrite(unsigned short addr, unsigned char val); + unsigned char externalRead(unsigned short addr); + void externalWrite(unsigned short addr, unsigned char val); - int LinkStatus(int which); + int linkStatus(int which); - void GetRegs(int *dest); + void getRegs(int *dest); - void SetInterruptAddresses(int *addrs, int numAddrs); - int GetHitInterruptAddress(); + void setInterruptAddresses(int *addrs, int numAddrs); + int getHitInterruptAddress(); templatevoid SyncState(NewState *ns); diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 948f019775..d3bde8fc74 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -29,19 +29,19 @@ GBEXPORT void gambatte_destroy(GB *g) delete g; } -GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) +GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) { int ret = g->load(romfiledata, romfilelength, now, flags, div); return ret; } -GBEXPORT int gambatte_loadgbcbios(GB* g, const char* biosfiledata) +GBEXPORT int gambatte_loadgbcbios(GB* g, char const* biosfiledata) { int ret = g->loadGBCBios(biosfiledata); return ret; } -GBEXPORT int gambatte_loaddmgbios(GB* g, const char* biosfiledata) +GBEXPORT int gambatte_loaddmgbios(GB* g, char const* biosfiledata) { int ret = g->loadDMGBios(biosfiledata); return ret; @@ -141,7 +141,7 @@ GBEXPORT void gambatte_savesavedata(GB *g, char *dest) g->saveSavedata(dest); } -GBEXPORT void gambatte_loadsavedata(GB *g, const char *data) +GBEXPORT void gambatte_loadsavedata(GB *g, char const *data) { g->loadSavedata(data); } @@ -165,7 +165,7 @@ GBEXPORT int gambatte_newstatesave(GB *g, char *data, int len) return !saver.Overflow() && saver.GetLength() == len; } -GBEXPORT int gambatte_newstateload(GB *g, const char *data, int len) +GBEXPORT int gambatte_newstateload(GB *g, char const *data, int len) { NewStateExternalBuffer loader((char *)data, len); g->SyncState(&loader); @@ -196,30 +196,30 @@ GBEXPORT int gambatte_getmemoryarea(GB *g, int which, unsigned char **data, int GBEXPORT unsigned char gambatte_cpuread(GB *g, unsigned short addr) { - return g->ExternalRead(addr); + return g->externalRead(addr); } GBEXPORT void gambatte_cpuwrite(GB *g, unsigned short addr, unsigned char val) { - g->ExternalWrite(addr, val); + g->externalWrite(addr, val); } GBEXPORT int gambatte_linkstatus(GB *g, int which) { - return g->LinkStatus(which); + return g->linkStatus(which); } GBEXPORT void gambatte_getregs(GB *g, int *dest) { - g->GetRegs(dest); + g->getRegs(dest); } GBEXPORT void gambatte_setinterruptaddresses(GB *g, int *addrs, int numAddrs) { - g->SetInterruptAddresses(addrs, numAddrs); + g->setInterruptAddresses(addrs, numAddrs); } GBEXPORT int gambatte_gethitinterruptaddress(GB *g) { - return g->GetHitInterruptAddress(); + return g->getHitInterruptAddress(); } diff --git a/libgambatte/src/counterdef.h b/libgambatte/src/counterdef.h index 66d078ad1f..c48b80cdfa 100644 --- a/libgambatte/src/counterdef.h +++ b/libgambatte/src/counterdef.h @@ -2,7 +2,9 @@ #define COUNTERDEF_H namespace gambatte { -enum { disabled_time = 0xFFFFFFFFul }; + +enum { disabled_time = 0xfffffffful }; + } #endif diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 0e37bb7066..784646c5bb 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -31,7 +31,7 @@ public: void setStatePtrs(SaveState &state); void loadState(SaveState const &state); void setLayers(unsigned mask) { mem_.setLayers(mask); } - void loadSavedata(const char *data) { mem_.loadSavedata(data); } + void loadSavedata(char const *data) { mem_.loadSavedata(data); } int saveSavedataLength() {return mem_.saveSavedataLength(); } void saveSavedata(char *dest) { mem_.saveSavedata(dest); } @@ -105,7 +105,7 @@ public: mem_.write_nocb(addr, val, cycleCounter_); } - int LinkStatus(int which) { return mem_.LinkStatus(which); } + int linkStatus(int which) { return mem_.linkStatus(which); } void getRegs(int *dest); void setInterruptAddresses(int *addrs, int numAddrs); diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 71a9dc0aa1..691d64dd29 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -1,29 +1,30 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "gambatte.h" #include "cpu.h" -#include "savestate.h" #include "initstate.h" -#include +#include "savestate.h" #include +#include namespace gambatte { + struct GB::Priv { CPU cpu; unsigned loadflags; @@ -34,18 +35,11 @@ struct GB::Priv { Priv() : loadflags(0), layersMask(LAYER_MASK_BG | LAYER_MASK_OBJ) { } - - ~Priv() - { - } }; GB::GB() : p_(new Priv) {} GB::~GB() { - //if (p_->cpu.loaded()) - // p_->cpu.saveSavedata(); - delete p_; } @@ -57,19 +51,19 @@ std::ptrdiff_t GB::runFor(gambatte::uint_least32_t *const soundBuf, std::size_t p_->cpu.setVideoBuffer(p_->vbuff, 160); p_->cpu.setSoundBuffer(soundBuf); - const long cyclesSinceBlit = p_->cpu.runFor(samples * 2); - samples = p_->cpu.fillSoundBuffer(); - return cyclesSinceBlit < 0 ? cyclesSinceBlit : static_cast(samples) - (cyclesSinceBlit >> 1); + long const cyclesSinceBlit = p_->cpu.runFor(samples * 2); + samples = p_->cpu.fillSoundBuffer(); + return cyclesSinceBlit >= 0 + ? static_cast(samples) - (cyclesSinceBlit >> 1) + : cyclesSinceBlit; } -void GB::setLayers(unsigned mask) -{ +void GB::setLayers(unsigned mask) { p_->cpu.setLayers(mask); } -void GB::blitTo(gambatte::uint_least32_t *videoBuf, std::ptrdiff_t pitch) -{ +void GB::blitTo(gambatte::uint_least32_t *videoBuf, std::ptrdiff_t pitch) { gambatte::uint_least32_t *src = p_->vbuff; gambatte::uint_least32_t *dst = videoBuf; @@ -140,10 +134,7 @@ void GB::setLinkCallback(void(*callback)()) { p_->cpu.setLinkCallback(callback); } -LoadRes GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_t now, unsigned const flags, const unsigned div) { - //if (p_->cpu.loaded()) - // p_->cpu.saveSavedata(); - +LoadRes GB::load(char const *romfiledata, unsigned romfilelength, const std::uint32_t now, unsigned const flags, const unsigned div) { LoadRes const loadres = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); if (loadres == LOADRES_OK) { @@ -152,18 +143,17 @@ LoadRes GB::load(const char *romfiledata, unsigned romfilelength, const std::uin p_->loadflags = flags; setInitState(state, !(flags & FORCE_DMG), flags & GBA_CGB, now, div); p_->cpu.loadState(state); - //p_->cpu.loadSavedata(); } return loadres; } -int GB::loadGBCBios(const char* biosfiledata) { +int GB::loadGBCBios(char const* biosfiledata) { memcpy(p_->cpu.cgbBiosBuffer(), biosfiledata, 0x900); return 0; } -int GB::loadDMGBios(const char* biosfiledata) { +int GB::loadDMGBios(char const* biosfiledata) { memcpy(p_->cpu.dmgBiosBuffer(), biosfiledata, 0x100); return 0; } @@ -180,7 +170,7 @@ void GB::saveSavedata(char *dest) { if (p_->cpu.loaded()) p_->cpu.saveSavedata(dest); } -void GB::loadSavedata(const char *data) { +void GB::loadSavedata(char const *data) { if (p_->cpu.loaded()) p_->cpu.loadSavedata(data); } @@ -198,14 +188,14 @@ bool GB::getMemoryArea(int which, unsigned char **data, int *length) { return false; } -unsigned char GB::ExternalRead(unsigned short addr) { +unsigned char GB::externalRead(unsigned short addr) { if (p_->cpu.loaded()) return p_->cpu.externalRead(addr); else return 0; } -void GB::ExternalWrite(unsigned short addr, unsigned char val) { +void GB::externalWrite(unsigned short addr, unsigned char val) { if (p_->cpu.loaded()) p_->cpu.externalWrite(addr, val); } @@ -219,7 +209,7 @@ void GB::setCgbPalette(unsigned *lut) { p_->cpu.setCgbPalette(lut); } -const std::string GB::romTitle() const { +std::string const GB::romTitle() const { if (p_->cpu.loaded()) { char title[0x11]; std::memcpy(title, p_->cpu.romTitle(), 0x10); @@ -230,20 +220,20 @@ const std::string GB::romTitle() const { return std::string(); } -int GB::LinkStatus(int which) { - return p_->cpu.LinkStatus(which); +int GB::linkStatus(int which) { + return p_->cpu.linkStatus(which); } -void GB::GetRegs(int *dest) { +void GB::getRegs(int *dest) { p_->cpu.getRegs(dest); } -void GB::SetInterruptAddresses(int *addrs, int numAddrs) +void GB::setInterruptAddresses(int *addrs, int numAddrs) { p_->cpu.setInterruptAddresses(addrs, numAddrs); } -int GB::GetHitInterruptAddress() +int GB::getHitInterruptAddress() { return p_->cpu.getHitInterruptAddress(); } diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 18105d9d21..7d855cf2fc 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -572,7 +572,7 @@ static bool presumedMulti64Mbc1(unsigned char const header[], unsigned rombanks) return header[0x147] == 1 && header[0x149] == 0 && rombanks == 64; } -LoadRes Cartridge::loadROM(const char *romfiledata, unsigned romfilelength, bool const forceDmg, bool const multicartCompat) { +LoadRes Cartridge::loadROM(char const *romfiledata, unsigned romfilelength, bool const forceDmg, bool const multicartCompat) { //const std::auto_ptr rom(newFileInstance(romfile)); //if (rom->fail()) @@ -698,7 +698,7 @@ static bool hasBattery(unsigned char headerByte0x147) { } } -void Cartridge::loadSavedata(const char *data) { +void Cartridge::loadSavedata(char const *data) { if (hasBattery(memptrs_.romdata()[0x147])) { int length = memptrs_.rambankdataend() - memptrs_.rambankdata(); std::memcpy(memptrs_.rambankdata(), data, length); diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 8d014b4798..50693a4b06 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -1058,7 +1058,7 @@ void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsig ioamhram[P - 0xFE00] = data; } -LoadRes Memory::loadROM(const char *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { +LoadRes Memory::loadROM(char const *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { if (LoadRes const fail = cart.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat)) return fail; @@ -1104,7 +1104,7 @@ bool Memory::getMemoryArea(int which, unsigned char **data, int *length) { } } -int Memory::LinkStatus(int which) +int Memory::linkStatus(int which) { switch (which) { diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index a9182bb059..bf24eb33cf 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -99,13 +99,13 @@ public: bool loaded() const { return cart.loaded(); } unsigned curRomBank() const { return cart.curRomBank(); } - const char * romTitle() const { return cart.romTitle(); } + char const * romTitle() const { return cart.romTitle(); } int debugGetLY() const { return display.debugGetLY(); } void setStatePtrs(SaveState &state); void loadState(const SaveState &state/*, unsigned long oldCc*/); - void loadSavedata(const char *data) { cart.loadSavedata(data); } + void loadSavedata(char const *data) { cart.loadSavedata(data); } int saveSavedataLength() {return cart.saveSavedataLength(); } void saveSavedata(char *dest) { cart.saveSavedata(dest); } void updateInput(); @@ -295,7 +295,7 @@ public: unsigned long event(unsigned long cycleCounter); unsigned long resetCounters(unsigned long cycleCounter); - LoadRes loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); + LoadRes loadROM(char const *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); void setInputGetter(unsigned (*getInput)()) { this->getInput = getInput; @@ -346,7 +346,7 @@ public: display.blackScreen(); } - int LinkStatus(int which); + int linkStatus(int which); templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/newstate.cpp b/libgambatte/src/newstate.cpp index 9d4214674a..f28a15fa7c 100644 --- a/libgambatte/src/newstate.cpp +++ b/libgambatte/src/newstate.cpp @@ -8,11 +8,11 @@ NewStateDummy::NewStateDummy() :length(0) { } -void NewStateDummy::Save(const void *ptr, size_t size, const char *name) +void NewStateDummy::Save(const void *ptr, size_t size, char const *name) { length += size; } -void NewStateDummy::Load(void *ptr, size_t size, const char *name) +void NewStateDummy::Load(void *ptr, size_t size, char const *name) { } @@ -21,7 +21,7 @@ NewStateExternalBuffer::NewStateExternalBuffer(char *buffer, long maxlength) { } -void NewStateExternalBuffer::Save(const void *ptr, size_t size, const char *name) +void NewStateExternalBuffer::Save(const void *ptr, size_t size, char const *name) { if (maxlength - length >= (long)size) { @@ -30,7 +30,7 @@ void NewStateExternalBuffer::Save(const void *ptr, size_t size, const char *name length += size; } -void NewStateExternalBuffer::Load(void *ptr, size_t size, const char *name) +void NewStateExternalBuffer::Load(void *ptr, size_t size, char const *name) { char *dst = static_cast(ptr); if (maxlength - length >= (long)size) @@ -48,19 +48,19 @@ NewStateExternalFunctions::NewStateExternalFunctions(const FPtrs *ff) { } -void NewStateExternalFunctions::Save(const void *ptr, size_t size, const char *name) +void NewStateExternalFunctions::Save(const void *ptr, size_t size, char const *name) { Save_(ptr, size, name); } -void NewStateExternalFunctions::Load(void *ptr, size_t size, const char *name) +void NewStateExternalFunctions::Load(void *ptr, size_t size, char const *name) { Load_(ptr, size, name); } -void NewStateExternalFunctions::EnterSection(const char *name) +void NewStateExternalFunctions::EnterSection(char const *name) { EnterSection_(name); } -void NewStateExternalFunctions::ExitSection(const char *name) +void NewStateExternalFunctions::ExitSection(char const *name) { ExitSection_(name); } diff --git a/libgambatte/src/newstate.h b/libgambatte/src/newstate.h index 576da30bfb..6ae468e5db 100644 --- a/libgambatte/src/newstate.h +++ b/libgambatte/src/newstate.h @@ -9,10 +9,10 @@ namespace gambatte { class NewState { public: - virtual void Save(const void *ptr, size_t size, const char *name) = 0; - virtual void Load(void *ptr, size_t size, const char *name) = 0; - virtual void EnterSection(const char *name) { } - virtual void ExitSection(const char *name) { } + virtual void Save(const void *ptr, size_t size, char const *name) = 0; + virtual void Load(void *ptr, size_t size, char const *name) = 0; + virtual void EnterSection(char const *name) { } + virtual void ExitSection(char const *name) { } }; class NewStateDummy : public NewState @@ -23,8 +23,8 @@ public: NewStateDummy(); long GetLength() { return length; } void Rewind() { length = 0; } - virtual void Save(const void *ptr, size_t size, const char *name); - virtual void Load(void *ptr, size_t size, const char *name); + virtual void Save(const void *ptr, size_t size, char const *name); + virtual void Load(void *ptr, size_t size, char const *name); }; class NewStateExternalBuffer : public NewState @@ -38,31 +38,31 @@ public: long GetLength() { return length; } void Rewind() { length = 0; } bool Overflow() { return length > maxlength; } - virtual void Save(const void *ptr, size_t size, const char *name); - virtual void Load(void *ptr, size_t size, const char *name); + virtual void Save(const void *ptr, size_t size, char const *name); + virtual void Load(void *ptr, size_t size, char const *name); }; struct FPtrs { - void (*Save_)(const void *ptr, size_t size, const char *name); - void (*Load_)(void *ptr, size_t size, const char *name); - void (*EnterSection_)(const char *name); - void (*ExitSection_)(const char *name); + void (*Save_)(const void *ptr, size_t size, char const *name); + void (*Load_)(void *ptr, size_t size, char const *name); + void (*EnterSection_)(char const *name); + void (*ExitSection_)(char const *name); }; class NewStateExternalFunctions : public NewState { private: - void (*Save_)(const void *ptr, size_t size, const char *name); - void (*Load_)(void *ptr, size_t size, const char *name); - void (*EnterSection_)(const char *name); - void (*ExitSection_)(const char *name); + void (*Save_)(const void *ptr, size_t size, char const *name); + void (*Load_)(void *ptr, size_t size, char const *name); + void (*EnterSection_)(char const *name); + void (*ExitSection_)(char const *name); public: NewStateExternalFunctions(const FPtrs *ff); - virtual void Save(const void *ptr, size_t size, const char *name); - virtual void Load(void *ptr, size_t size, const char *name); - virtual void EnterSection(const char *name); - virtual void ExitSection(const char *name); + virtual void Save(const void *ptr, size_t size, char const *name); + virtual void Load(void *ptr, size_t size, char const *name); + virtual void EnterSection(char const *name); + virtual void ExitSection(char const *name); }; // defines and explicitly instantiates diff --git a/libgambatte/src/sound/channel3.cpp b/libgambatte/src/sound/channel3.cpp index 06fe6dc2fd..223378b1ab 100644 --- a/libgambatte/src/sound/channel3.cpp +++ b/libgambatte/src/sound/channel3.cpp @@ -21,7 +21,7 @@ #include #include -static inline unsigned toPeriod(const unsigned nr3, const unsigned nr4) { +static inline unsigned toPeriod(unsigned nr3, unsigned nr4) { return 0x800 - ((nr4 << 8 & 0x700) | nr3); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 34cf5fec977d0027efb94d942b0e7b46473f63e7..4ae26f6e50d9a7ec9ba604262dd54585caf3ec0e 100644 GIT binary patch delta 20373 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 delta 20362 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 From b58554f62e17f3ab1fa383f51c1d92150774806e Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 12:33:32 +0200 Subject: [PATCH 091/138] libgambatte: Remove unused interrupter --- libgambatte/Makefile | 1 - libgambatte/libgambatte.vcxproj | 1 - libgambatte/libgambatte.vcxproj.filters | 3 -- libgambatte/src/cpu.cpp | 2 +- libgambatte/src/initstate.cpp | 40 +++++++++++----------- libgambatte/src/initstate.h | 37 +++++++++++---------- libgambatte/src/insertion_sort.h | 40 +++++++++++----------- libgambatte/src/interrupter.cpp | 42 ------------------------ libgambatte/src/interrupter.h | 37 --------------------- libgambatte/src/memory.cpp | 4 +-- libgambatte/src/memory.h | 4 +-- output/dll/libgambatte.dll | Bin 168960 -> 168960 bytes 12 files changed, 61 insertions(+), 150 deletions(-) delete mode 100644 libgambatte/src/interrupter.cpp delete mode 100644 libgambatte/src/interrupter.h diff --git a/libgambatte/Makefile b/libgambatte/Makefile index 5ae56f6a29..1a2c7ddeed 100644 --- a/libgambatte/Makefile +++ b/libgambatte/Makefile @@ -25,7 +25,6 @@ SRCS = \ src/cpu.cpp \ src/gambatte.cpp \ src/initstate.cpp \ - src/interrupter.cpp \ src/interruptrequester.cpp \ src/memory.cpp \ src/mem/cartridge.cpp \ diff --git a/libgambatte/libgambatte.vcxproj b/libgambatte/libgambatte.vcxproj index 4eecef7e04..33e0eb0aee 100644 --- a/libgambatte/libgambatte.vcxproj +++ b/libgambatte/libgambatte.vcxproj @@ -197,7 +197,6 @@ - diff --git a/libgambatte/libgambatte.vcxproj.filters b/libgambatte/libgambatte.vcxproj.filters index 614dad17ef..38cbfcdb7d 100644 --- a/libgambatte/libgambatte.vcxproj.filters +++ b/libgambatte/libgambatte.vcxproj.filters @@ -161,9 +161,6 @@ Source Files - - Source Files - Source Files diff --git a/libgambatte/src/cpu.cpp b/libgambatte/src/cpu.cpp index 2de9fc51c4..4032210208 100644 --- a/libgambatte/src/cpu.cpp +++ b/libgambatte/src/cpu.cpp @@ -23,7 +23,7 @@ namespace gambatte { CPU::CPU() -: mem_(Interrupter(sp, pc), sp, pc) +: mem_(sp, pc) , cycleCounter_(0) , pc(0x100) , sp(0xFFFE) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index c52a530773..50b29b07f7 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2008 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2008 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "initstate.h" #include "counterdef.h" #include "savestate.h" @@ -1218,7 +1218,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.gbIsCgb = cgb; - for (unsigned i = 0x00; i < 0x40; i += 0x02) { + for (int i = 0x00; i < 0x40; i += 0x02) { state.ppu.bgpData.ptr[i ] = 0xFF; state.ppu.bgpData.ptr[i + 1] = 0x7F; } @@ -1231,7 +1231,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.ppu.objpData.ptr[1] = state.mem.ioamhram.get()[0x149]; } - for (unsigned pos = 0; pos < 80; ++pos) + for (int pos = 0; pos < 80; ++pos) state.ppu.oamReaderBuf.ptr[pos] = state.mem.ioamhram.ptr[(pos * 2 & ~3) | (pos & 1)]; std::fill_n(state.ppu.oamReaderSzbuf.ptr, 40, false); diff --git a/libgambatte/src/initstate.h b/libgambatte/src/initstate.h index dd20a3d07a..02363941d8 100644 --- a/libgambatte/src/initstate.h +++ b/libgambatte/src/initstate.h @@ -1,27 +1,28 @@ -/*************************************************************************** - * Copyright (C) 2008 by Sindre Aams * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2008 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef INITSTATE_H #define INITSTATE_H #include namespace gambatte { + void setInitState(struct SaveState &state, bool cgb, bool gbaCgbMode, std::uint32_t now, unsigned div); } diff --git a/libgambatte/src/insertion_sort.h b/libgambatte/src/insertion_sort.h index cfcd3fbd25..8b76d9385a 100644 --- a/libgambatte/src/insertion_sort.h +++ b/libgambatte/src/insertion_sort.h @@ -1,21 +1,20 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aam�s * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// #ifndef INSERTION_SORT_H #define INSERTION_SORT_H @@ -30,8 +29,7 @@ void insertionSort(T *const start, T *const end, Less less) { T *a = start; while (++a < end) { - const T e = *a; - + T const e = *a; T *b = a; while (b != start && less(e, *(b - 1))) { @@ -44,7 +42,7 @@ void insertionSort(T *const start, T *const end, Less less) { } template -inline void insertionSort(T *const start, T *const end) { +inline void insertionSort(T *start, T *end) { insertionSort(start, end, std::less()); } diff --git a/libgambatte/src/interrupter.cpp b/libgambatte/src/interrupter.cpp deleted file mode 100644 index 4223c11a8b..0000000000 --- a/libgambatte/src/interrupter.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#include "interrupter.h" -#include "memory.h" - -namespace gambatte { - -Interrupter::Interrupter(unsigned short &SP_in, unsigned short &PC_in) : - SP(SP_in), - PC(PC_in) -{} - -unsigned long Interrupter::interrupt(const unsigned address, unsigned long cycleCounter, Memory &memory) { - cycleCounter += 8; - SP = (SP - 1) & 0xFFFF; - memory.write(SP, PC >> 8, cycleCounter); - cycleCounter += 4; - SP = (SP - 1) & 0xFFFF; - memory.write(SP, PC & 0xFF, cycleCounter); - PC = address; - cycleCounter += 8; - - return cycleCounter; -} - -} diff --git a/libgambatte/src/interrupter.h b/libgambatte/src/interrupter.h deleted file mode 100644 index 903368c391..0000000000 --- a/libgambatte/src/interrupter.h +++ /dev/null @@ -1,37 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#ifndef INTERRUPTER_H -#define INTERRUPTER_H - -#include -#include - -namespace gambatte { - -class Interrupter { - unsigned short &SP; - unsigned short &PC; -public: - Interrupter(unsigned short &SP, unsigned short &PC); - unsigned long interrupt(const unsigned address, unsigned long cycleCounter, class Memory &memory); -}; - -} - -#endif diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 50693a4b06..fc18337001 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -24,7 +24,7 @@ namespace gambatte { -Memory::Memory(const Interrupter &interrupter_in, unsigned short &sp, unsigned short &pc) +Memory::Memory(unsigned short &sp, unsigned short &pc) : readCallback(0), writeCallback(0), execCallback(0), @@ -34,7 +34,6 @@ Memory::Memory(const Interrupter &interrupter_in, unsigned short &sp, unsigned s divLastUpdate(0), lastOamDmaUpdate(disabled_time), display(ioamhram, 0, VideoInterruptRequester(intreq)), - interrupter(interrupter_in), dmaSource(0), dmaDestination(0), oamDmaPos(0xFE), @@ -1148,7 +1147,6 @@ SYNCFUNC(Memory) SSS(tima); SSS(display); SSS(sound); - //SSS(interrupter); // no state NSS(dmaSource); NSS(dmaDestination); diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index bf24eb33cf..7d4a250dc8 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -24,7 +24,6 @@ static unsigned char const agbOverride[0xD] = { 0xFF, 0x00, 0xCD, 0x03, 0x35, 0x #include "mem/cartridge.h" #include "video.h" #include "sound.h" -#include "interrupter.h" #include "tima.h" #include "newstate.h" #include "gambatte.h" @@ -61,7 +60,6 @@ class Memory { Tima tima; LCD display; PSG sound; - Interrupter interrupter; unsigned short dmaSource; unsigned short dmaDestination; @@ -95,7 +93,7 @@ class Memory { bool isDoubleSpeed() const { return display.isDoubleSpeed(); } public: - explicit Memory(const Interrupter &interrupter, unsigned short &sp, unsigned short &pc); + explicit Memory(unsigned short &sp, unsigned short &pc); bool loaded() const { return cart.loaded(); } unsigned curRomBank() const { return cart.curRomBank(); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 4ae26f6e50d9a7ec9ba604262dd54585caf3ec0e..706b7f64716fee0bb7421ea129a62298a9be3a45 100644 GIT binary patch delta 46919 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 delta 46876 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 F{{ej-0O9}u From 79085f9a3a0d20874d75396cf350ea45f8249fd1 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 12:36:08 +0200 Subject: [PATCH 092/138] libgambatte: Remove unused saveState() functions --- libgambatte/src/mem/cartridge.cpp | 41 ------------------------------ output/dll/libgambatte.dll | Bin 168960 -> 168960 bytes 2 files changed, 41 deletions(-) diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 7d855cf2fc..829330b0a1 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -57,10 +57,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.enableRam = enableRam_; - } - virtual void loadState(SaveState::Mem const &ss) { enableRam_ = ss.enableRam; memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); @@ -124,13 +120,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.rambank = rambank_; - ss.enableRam = enableRam_; - ss.rambankMode = rambankMode_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; rambank_ = ss.rambank; @@ -200,12 +189,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.enableRam = enableRam_; - ss.rambankMode = rombank0Mode_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; enableRam_ = ss.enableRam; @@ -268,11 +251,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.enableRam = enableRam_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; enableRam_ = ss.enableRam; @@ -326,12 +304,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.rambank = rambank_; - ss.enableRam = enableRam_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; rambank_ = ss.rambank; @@ -406,13 +378,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.rambank = rambank_; - ss.enableRam = enableRam_; - ss.rambankMode = rambankMode_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; rambank_ = ss.rambank; @@ -480,12 +445,6 @@ public: } } - virtual void saveState(SaveState::Mem &ss) const { - ss.rombank = rombank_; - ss.rambank = rambank_; - ss.enableRam = enableRam_; - } - virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; rambank_ = ss.rambank; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 706b7f64716fee0bb7421ea129a62298a9be3a45..15e1421b9ef7c5da2791605070a84071db4b22c6 100644 GIT binary patch delta 24655 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 lag+u)3f|rOZt=S%@0PxM`rWd3%iqm<&+* Date: Sun, 26 May 2019 12:46:17 +0200 Subject: [PATCH 093/138] libgambatte: refactor Tima --- libgambatte/src/initstate.cpp | 1 + libgambatte/src/savestate.h | 1 + libgambatte/src/sound.h | 36 ++++----- libgambatte/src/tima.cpp | 138 +++++++++++++++++----------------- libgambatte/src/tima.h | 76 +++++++++---------- output/dll/libgambatte.dll | Bin 168960 -> 168960 bytes 6 files changed, 127 insertions(+), 125 deletions(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 50b29b07f7..1263191c3b 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1199,6 +1199,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.ioamhram.ptr[0x144] = 0x00; state.mem.divLastUpdate = 0 - div; + state.mem.timaBasetime = 0; state.mem.timaLastUpdate = 0; state.mem.tmatime = disabled_time; state.mem.nextSerialtime = disabled_time; diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index 5dd72a10cc..b4489d12af 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -63,6 +63,7 @@ struct SaveState { Ptr wram; Ptr ioamhram; unsigned long divLastUpdate; + unsigned long timaBasetime; unsigned long timaLastUpdate; unsigned long tmatime; unsigned long nextSerialtime; diff --git a/libgambatte/src/sound.h b/libgambatte/src/sound.h index ff3c7e0fb2..b664d8c616 100644 --- a/libgambatte/src/sound.h +++ b/libgambatte/src/sound.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SOUND_H #define SOUND_H diff --git a/libgambatte/src/tima.cpp b/libgambatte/src/tima.cpp index b45fdfc987..aa4038821b 100644 --- a/libgambatte/src/tima.cpp +++ b/libgambatte/src/tima.cpp @@ -1,61 +1,61 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "tima.h" #include "savestate.h" -static const unsigned char timaClock[4] = { 10, 4, 6, 8 }; +static unsigned char const timaClock[4] = { 10, 4, 6, 8 }; namespace gambatte { -Tima::Tima() : -lastUpdate_(0), -tmatime_(disabled_time), -tima_(0), -tma_(0), -tac_(0) -{} +Tima::Tima() +: lastUpdate_(0) +, tmatime_(disabled_time) +, tima_(0) +, tma_(0) +, tac_(0) +{ +} -void Tima::loadState(const SaveState &state, const TimaInterruptRequester timaIrq) { +void Tima::loadState(SaveState const &state, TimaInterruptRequester timaIrq) { + basetime_ = state.mem.timaBasetime; lastUpdate_ = state.mem.timaLastUpdate; tmatime_ = state.mem.tmatime; - tima_ = state.mem.ioamhram.get()[0x105]; tma_ = state.mem.ioamhram.get()[0x106]; tac_ = state.mem.ioamhram.get()[0x107]; - timaIrq.setNextIrqEventTime((tac_ & 4) - ? - (tmatime_ != disabled_time && tmatime_ > state.cpu.cycleCounter - ? tmatime_ - : lastUpdate_ + ((256u - tima_) << timaClock[tac_ & 3]) + 3) - : - static_cast(disabled_time) - ); + unsigned long nextIrqEventTime = disabled_time; + if (tac_ & 4) { + nextIrqEventTime = tmatime_ != disabled_time && tmatime_ > state.cpu.cycleCounter + ? tmatime_ + : lastUpdate_ + ((256u - tima_) << timaClock[tac_ & 3]) + 3; + } + + timaIrq.setNextIrqEventTime(nextIrqEventTime); } -void Tima::resetCc(const unsigned long oldCc, const unsigned long newCc, const TimaInterruptRequester timaIrq) { - const unsigned long dec = oldCc - newCc; - +void Tima::resetCc(unsigned long const oldCc, unsigned long const newCc, TimaInterruptRequester timaIrq) { if (tac_ & 0x04) { updateIrq(oldCc, timaIrq); updateTima(oldCc); + unsigned long const dec = oldCc - newCc; lastUpdate_ -= dec; timaIrq.setNextIrqEventTime(timaIrq.nextIrqEventTime() - dec); @@ -64,20 +64,18 @@ void Tima::resetCc(const unsigned long oldCc, const unsigned long newCc, const T } } -void Tima::updateTima(const unsigned long cycleCounter) { - const unsigned long ticks = (cycleCounter - lastUpdate_) >> timaClock[tac_ & 3]; - +void Tima::updateTima(unsigned long const cc) { + unsigned long const ticks = (cc - lastUpdate_) >> timaClock[tac_ & 3]; lastUpdate_ += ticks << timaClock[tac_ & 3]; - if (cycleCounter >= tmatime_) { - if (cycleCounter >= tmatime_ + 4) + if (cc >= tmatime_) { + if (cc >= tmatime_ + 4) tmatime_ = disabled_time; tima_ = tma_; } unsigned long tmp = tima_ + ticks; - while (tmp > 0x100) tmp -= 0x100 - tma_; @@ -85,8 +83,8 @@ void Tima::updateTima(const unsigned long cycleCounter) { tmp = 0; tmatime_ = lastUpdate_ + 3; - if (cycleCounter >= tmatime_) { - if (cycleCounter >= tmatime_ + 4) + if (cc >= tmatime_) { + if (cc >= tmatime_ + 4) tmatime_ = disabled_time; tmp = tma_; @@ -96,12 +94,12 @@ void Tima::updateTima(const unsigned long cycleCounter) { tima_ = tmp; } -void Tima::setTima(const unsigned data, const unsigned long cycleCounter, const TimaInterruptRequester timaIrq) { +void Tima::setTima(unsigned const data, unsigned long const cc, TimaInterruptRequester timaIrq) { if (tac_ & 0x04) { - updateIrq(cycleCounter, timaIrq); - updateTima(cycleCounter); + updateIrq(cc, timaIrq); + updateTima(cc); - if (tmatime_ - cycleCounter < 4) + if (tmatime_ - cc < 4) tmatime_ = disabled_time; timaIrq.setNextIrqEventTime(lastUpdate_ + ((256u - data) << timaClock[tac_ & 3]) + 3); @@ -110,44 +108,44 @@ void Tima::setTima(const unsigned data, const unsigned long cycleCounter, const tima_ = data; } -void Tima::setTma(const unsigned data, const unsigned long cycleCounter, const TimaInterruptRequester timaIrq) { +void Tima::setTma(unsigned const data, unsigned long const cc, TimaInterruptRequester timaIrq) { if (tac_ & 0x04) { - updateIrq(cycleCounter, timaIrq); - updateTima(cycleCounter); + updateIrq(cc, timaIrq); + updateTima(cc); } tma_ = data; } -void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const TimaInterruptRequester timaIrq, bool gbIsCgb) { +void Tima::setTac(unsigned const data, unsigned long const cc, TimaInterruptRequester timaIrq, bool gbIsCgb) { if (tac_ ^ data) { unsigned long nextIrqEventTime = timaIrq.nextIrqEventTime(); if (tac_ & 0x04) { - updateIrq(cycleCounter, timaIrq); - updateTima(cycleCounter); + updateIrq(cc, timaIrq); + updateTima(cc); lastUpdate_ -= (1u << (timaClock[tac_ & 3] - 1)) + 3; tmatime_ -= (1u << (timaClock[tac_ & 3] - 1)) + 3; nextIrqEventTime -= (1u << (timaClock[tac_ & 3] - 1)) + 3; - if (cycleCounter >= nextIrqEventTime) + if (cc >= nextIrqEventTime) timaIrq.flagIrq(); - updateTima(cycleCounter); + updateTima(cc); tmatime_ = disabled_time; nextIrqEventTime = disabled_time; } if (data & 4) { - lastUpdate_ = (cycleCounter >> timaClock[data & 3]) << timaClock[data & 3]; - unsigned long diff = cycleCounter - basetime_; + unsigned long diff = cc - basetime_; if (gbIsCgb) { if (((diff >> (timaClock[tac_ & 3] - 1)) & 1) == 1 && ((diff >> (timaClock[data & 3] - 1)) & 1) == 0) tima_++; } + lastUpdate_ = basetime_ + ((diff >> timaClock[data & 3]) << timaClock[data & 3]); nextIrqEventTime = lastUpdate_ + ((256u - tima_) << timaClock[data & 3]) + 3; } @@ -158,24 +156,26 @@ void Tima::setTac(const unsigned data, const unsigned long cycleCounter, const T tac_ = data; } -void Tima::resTac(unsigned long const cycleCounter, TimaInterruptRequester timaIrq) { - basetime_ = cycleCounter; +void Tima::resTac(unsigned long const cc, TimaInterruptRequester timaIrq) { + basetime_ = cc; + if (tac_ & 0x04) { - setTac(tac_ & ~0x04, cycleCounter, timaIrq, false); - setTac(tac_ | 0x04, cycleCounter, timaIrq, false); + setTac(tac_ & ~0x04, cc, timaIrq, false); + setTac(tac_ | 0x04, cc, timaIrq, false); } } -unsigned Tima::tima(unsigned long cycleCounter) { +unsigned Tima::tima(unsigned long cc) { if (tac_ & 0x04) - updateTima(cycleCounter); + updateTima(cc); return tima_; } -void Tima::doIrqEvent(const TimaInterruptRequester timaIrq) { +void Tima::doIrqEvent(TimaInterruptRequester timaIrq) { timaIrq.flagIrq(); - timaIrq.setNextIrqEventTime(timaIrq.nextIrqEventTime() + ((256u - tma_) << timaClock[tac_ & 3])); + timaIrq.setNextIrqEventTime(timaIrq.nextIrqEventTime() + + ((256u - tma_) << timaClock[tac_ & 3])); } SYNCFUNC(Tima) diff --git a/libgambatte/src/tima.h b/libgambatte/src/tima.h index a4a486f052..55bfe849ad 100644 --- a/libgambatte/src/tima.h +++ b/libgambatte/src/tima.h @@ -1,21 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef TIMA_H #define TIMA_H @@ -24,25 +24,37 @@ namespace gambatte { class TimaInterruptRequester { - InterruptRequester &intreq; - public: - explicit TimaInterruptRequester(InterruptRequester &intreq) : intreq(intreq) {} - void flagIrq() const { intreq.flagIrq(4); } - unsigned long nextIrqEventTime() const { return intreq.eventTime(intevent_tima); } - void setNextIrqEventTime(const unsigned long time) const { intreq.setEventTime(time); } + explicit TimaInterruptRequester(InterruptRequester &intreq) : intreq_(intreq) {} + void flagIrq() const { intreq_.flagIrq(4); } + unsigned long nextIrqEventTime() const { return intreq_.eventTime(intevent_tima); } + void setNextIrqEventTime(unsigned long time) const { intreq_.setEventTime(time); } + +private: + InterruptRequester &intreq_; }; class Tima { +public: + Tima(); + void loadState(const SaveState &, TimaInterruptRequester timaIrq); + void resetCc(unsigned long oldCc, unsigned long newCc, TimaInterruptRequester timaIrq); + void setTima(unsigned tima, unsigned long cc, TimaInterruptRequester timaIrq); + void setTma(unsigned tma, unsigned long cc, TimaInterruptRequester timaIrq); + void setTac(unsigned tac, unsigned long cc, TimaInterruptRequester timaIrq, bool gbIsCgb); + void resTac(unsigned long cc, TimaInterruptRequester timaIrq); + unsigned tima(unsigned long cc); + void doIrqEvent(TimaInterruptRequester timaIrq); + +private: unsigned long basetime_; unsigned long lastUpdate_; unsigned long tmatime_; - unsigned char tima_; unsigned char tma_; unsigned char tac_; - void updateIrq(const unsigned long cc, const TimaInterruptRequester timaIrq) { + void updateIrq(unsigned long const cc, TimaInterruptRequester timaIrq) { while (cc >= timaIrq.nextIrqEventTime()) doIrqEvent(timaIrq); } @@ -50,18 +62,6 @@ class Tima { void updateTima(unsigned long cc); public: - Tima(); - void loadState(const SaveState &, TimaInterruptRequester timaIrq); - void resetCc(unsigned long oldCc, unsigned long newCc, TimaInterruptRequester timaIrq); - - void setTima(unsigned tima, unsigned long cc, TimaInterruptRequester timaIrq); - void setTma(unsigned tma, unsigned long cc, TimaInterruptRequester timaIrq); - void setTac(unsigned tac, unsigned long cc, TimaInterruptRequester timaIrq, bool gbIsCgb); - void resTac(unsigned long cc, TimaInterruptRequester timaIrq); - unsigned tima(unsigned long cc); - - void doIrqEvent(TimaInterruptRequester timaIrq); - templatevoid SyncState(NewState *ns); }; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 15e1421b9ef7c5da2791605070a84071db4b22c6..e9b8c6dbbc6f4ba0eb3dc1880951964f17aa6df6 100644 GIT binary patch delta 25268 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 Date: Sun, 26 May 2019 14:17:22 +0200 Subject: [PATCH 094/138] libgambatte: Refactor Memory --- libgambatte/src/initstate.cpp | 2 + libgambatte/src/memory.cpp | 1174 +++++++++++++++++---------------- libgambatte/src/memory.h | 411 ++++++------ libgambatte/src/savestate.h | 2 + output/dll/libgambatte.dll | Bin 168960 -> 168448 bytes 5 files changed, 816 insertions(+), 773 deletions(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 1263191c3b..ce0b7b0905 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1206,6 +1206,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.lastOamDmaUpdate = disabled_time; state.mem.unhaltTime = disabled_time; state.mem.minIntTime = 0; + state.mem.halttime = 0; state.mem.rombank = 1; state.mem.dmaSource = 0; state.mem.dmaDestination = 0; @@ -1217,6 +1218,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.rambankMode = false; state.mem.hdmaTransfer = false; state.mem.gbIsCgb = cgb; + state.mem.stopped = false; for (int i = 0x00; i < 0x40; i += 0x02) { diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index fc18337001..54eea33844 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -1,300 +1,315 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "memory.h" -#include "video.h" -#include "sound.h" #include "savestate.h" +#include "sound.h" +#include "video.h" #include namespace gambatte { Memory::Memory(unsigned short &sp, unsigned short &pc) -: readCallback(0), - writeCallback(0), - execCallback(0), - cdCallback(0), - linkCallback(0), - getInput(0), - divLastUpdate(0), - lastOamDmaUpdate(disabled_time), - display(ioamhram, 0, VideoInterruptRequester(intreq)), - dmaSource(0), - dmaDestination(0), - oamDmaPos(0xFE), - serialCnt(0), - blanklcd(false), - LINKCABLE(false), - linkClockTrigger(false), - SP(sp), - PC(pc) +: readCallback_(0) +, writeCallback_(0) +, execCallback_(0) +, cdCallback_(0) +, linkCallback_(0) +, getInput_(0) +, divLastUpdate_(0) +, lastOamDmaUpdate_(disabled_time) +, lcd_(ioamhram_, 0, VideoInterruptRequester(intreq_)) +, dmaSource_(0) +, dmaDestination_(0) +, oamDmaPos_(0xFE) +, serialCnt_(0) +, blanklcd_(false) +, LINKCABLE_(false) +, linkClockTrigger_(false) +, sp_(sp) +, pc_(pc) { - intreq.setEventTime(144*456ul); - intreq.setEventTime(0); + intreq_.setEventTime(144 * 456ul); + intreq_.setEventTime(0); } void Memory::setStatePtrs(SaveState &state) { - state.mem.ioamhram.set(ioamhram, sizeof ioamhram); + state.mem.ioamhram.set(ioamhram_, sizeof ioamhram_); - cart.setStatePtrs(state); - display.setStatePtrs(state); - sound.setStatePtrs(state); + cart_.setStatePtrs(state); + lcd_.setStatePtrs(state); + psg_.setStatePtrs(state); } -static inline int serialCntFrom(const unsigned long cyclesUntilDone, const bool cgbFast) { +static int serialCntFrom(unsigned long cyclesUntilDone, bool cgbFast) { return cgbFast ? (cyclesUntilDone + 0xF) >> 4 : (cyclesUntilDone + 0x1FF) >> 9; } -void Memory::loadState(const SaveState &state) { - biosMode = state.mem.biosMode; - cgbSwitching = state.mem.cgbSwitching; - agbMode = state.mem.agbMode; +void Memory::loadState(SaveState const &state) { + biosMode_ = state.mem.biosMode; + cgbSwitching_ = state.mem.cgbSwitching; + agbMode_ = state.mem.agbMode; gbIsCgb_ = state.mem.gbIsCgb; - sound.loadState(state); - display.loadState(state, state.mem.oamDmaPos < 0xA0 ? cart.rdisabledRam() : ioamhram); - tima.loadState(state, TimaInterruptRequester(intreq)); - cart.loadState(state); - intreq.loadState(state); + stopped_ = state.mem.stopped; + psg_.loadState(state); + lcd_.loadState(state, state.mem.oamDmaPos < 0xA0 ? cart_.rdisabledRam() : ioamhram_); + tima_.loadState(state, TimaInterruptRequester(intreq_)); + cart_.loadState(state); + intreq_.loadState(state); - divLastUpdate = state.mem.divLastUpdate; - intreq.setEventTime(state.mem.nextSerialtime > state.cpu.cycleCounter ? state.mem.nextSerialtime : state.cpu.cycleCounter); - intreq.setEventTime(state.mem.unhaltTime); - lastOamDmaUpdate = state.mem.lastOamDmaUpdate; - dmaSource = state.mem.dmaSource; - dmaDestination = state.mem.dmaDestination; - oamDmaPos = state.mem.oamDmaPos; - serialCnt = intreq.eventTime(intevent_serial) != disabled_time - ? serialCntFrom(intreq.eventTime(intevent_serial) - state.cpu.cycleCounter, ioamhram[0x102] & isCgb() * 2) - : 8; + divLastUpdate_ = state.mem.divLastUpdate; + intreq_.setEventTime(state.mem.nextSerialtime > state.cpu.cycleCounter + ? state.mem.nextSerialtime + : state.cpu.cycleCounter); + intreq_.setEventTime(state.mem.unhaltTime); + halttime_ = state.mem.halttime; + lastOamDmaUpdate_ = state.mem.lastOamDmaUpdate; + dmaSource_ = state.mem.dmaSource; + dmaDestination_ = state.mem.dmaDestination; + oamDmaPos_ = state.mem.oamDmaPos; + serialCnt_ = intreq_.eventTime(intevent_serial) != disabled_time + ? serialCntFrom(intreq_.eventTime(intevent_serial) - state.cpu.cycleCounter, + ioamhram_[0x102] & isCgb() * 2) + : 8; - cart.setVrambank(ioamhram[0x14F] & isCgb()); - cart.setOamDmaSrc(oam_dma_src_off); - cart.setWrambank(isCgb() && (ioamhram[0x170] & 0x07) ? ioamhram[0x170] & 0x07 : 1); + cart_.setVrambank(ioamhram_[0x14F] & isCgb()); + cart_.setOamDmaSrc(oam_dma_src_off); + cart_.setWrambank(isCgb() && (ioamhram_[0x170] & 0x07) ? ioamhram_[0x170] & 0x07 : 1); - if (lastOamDmaUpdate != disabled_time) { + if (lastOamDmaUpdate_ != disabled_time) { oamDmaInitSetup(); - const unsigned oamEventPos = oamDmaPos < 0xA0 ? 0xA0 : 0x100; - - intreq.setEventTime(lastOamDmaUpdate + (oamEventPos - oamDmaPos) * 4); + unsigned oamEventPos = oamDmaPos_ < 0xA0 ? 0xA0 : 0x100; + intreq_.setEventTime( + lastOamDmaUpdate_ + (oamEventPos - oamDmaPos_) * 4); } - intreq.setEventTime((ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : state.cpu.cycleCounter); - blanklcd = false; + intreq_.setEventTime(ioamhram_[0x140] & lcdc_en + ? lcd_.nextMode1IrqTime() + : state.cpu.cycleCounter); + blanklcd_ = false; if (!isCgb()) - std::memset(cart.vramdata() + 0x2000, 0, 0x2000); + std::memset(cart_.vramdata() + 0x2000, 0, 0x2000); } -void Memory::setEndtime(const unsigned long cycleCounter, const unsigned long inc) { - if (intreq.eventTime(intevent_blit) <= cycleCounter) - intreq.setEventTime(intreq.eventTime(intevent_blit) + (70224 << isDoubleSpeed())); +void Memory::setEndtime(unsigned long cc, unsigned long inc) { + if (intreq_.eventTime(intevent_blit) <= cc) { + intreq_.setEventTime(intreq_.eventTime(intevent_blit) + + (70224 << isDoubleSpeed())); + } - intreq.setEventTime(cycleCounter + (inc << isDoubleSpeed())); + intreq_.setEventTime(cc + (inc << isDoubleSpeed())); } -void Memory::updateSerial(const unsigned long cc) { - if (!LINKCABLE) { - if (intreq.eventTime(intevent_serial) != disabled_time) { - if (intreq.eventTime(intevent_serial) <= cc) { - ioamhram[0x101] = (((ioamhram[0x101] + 1) << serialCnt) - 1) & 0xFF; - ioamhram[0x102] &= 0x7F; - intreq.setEventTime(disabled_time); - intreq.flagIrq(8); +void Memory::updateSerial(unsigned long const cc) { + if (!LINKCABLE_) { + if (intreq_.eventTime(intevent_serial) != disabled_time) { + if (intreq_.eventTime(intevent_serial) <= cc) { + ioamhram_[0x101] = (((ioamhram_[0x101] + 1) << serialCnt_) - 1) & 0xFF; + ioamhram_[0x102] &= 0x7F; + intreq_.setEventTime(disabled_time); + intreq_.flagIrq(8); } else { - const int targetCnt = serialCntFrom(intreq.eventTime(intevent_serial) - cc, ioamhram[0x102] & isCgb() * 2); - ioamhram[0x101] = (((ioamhram[0x101] + 1) << (serialCnt - targetCnt)) - 1) & 0xFF; - serialCnt = targetCnt; + int const targetCnt = serialCntFrom(intreq_.eventTime(intevent_serial) - cc, + ioamhram_[0x102] & isCgb() * 2); + ioamhram_[0x101] = (((ioamhram_[0x101] + 1) << (serialCnt_ - targetCnt)) - 1) & 0xFF; + serialCnt_ = targetCnt; } } - } - else { - if (intreq.eventTime(intevent_serial) != disabled_time) { - if (intreq.eventTime(intevent_serial) <= cc) { - linkClockTrigger = true; - intreq.setEventTime(disabled_time); - if (linkCallback) - linkCallback(); + } else { + if (intreq_.eventTime(intevent_serial) != disabled_time) { + if (intreq_.eventTime(intevent_serial) <= cc) { + linkClockTrigger_ = true; + intreq_.setEventTime(disabled_time); + if (linkCallback_) + linkCallback_(); } } } } -void Memory::updateTimaIrq(const unsigned long cc) { - while (intreq.eventTime(intevent_tima) <= cc) - tima.doIrqEvent(TimaInterruptRequester(intreq)); +void Memory::updateTimaIrq(unsigned long cc) { + while (intreq_.eventTime(intevent_tima) <= cc) + tima_.doIrqEvent(TimaInterruptRequester(intreq_)); } -void Memory::updateIrqs(const unsigned long cc) { +void Memory::updateIrqs(unsigned long cc) { updateSerial(cc); updateTimaIrq(cc); - display.update(cc); + lcd_.update(cc); } -unsigned long Memory::event(unsigned long cycleCounter) { - if (lastOamDmaUpdate != disabled_time) - updateOamDma(cycleCounter); +unsigned long Memory::event(unsigned long cc) { + if (lastOamDmaUpdate_ != disabled_time) + updateOamDma(cc); - switch (intreq.minEventId()) { + switch (intreq_.minEventId()) { case intevent_unhalt: - nontrivial_ff_write(0xFF04, 0, cycleCounter); - PC = (PC + 1) & 0xFFFF; - cycleCounter += 4; - intreq.unhalt(); - intreq.setEventTime(disabled_time); + nontrivial_ff_write(0xFF04, 0, cc); + pc_ = (pc_ + 1) & 0xFFFF; + cc += 4; + intreq_.unhalt(); + intreq_.setEventTime(disabled_time); break; case intevent_end: - intreq.setEventTime(disabled_time - 1); + intreq_.setEventTime(disabled_time - 1); - while (cycleCounter >= intreq.minEventTime() && intreq.eventTime(intevent_end) != disabled_time) - cycleCounter = event(cycleCounter); + while (cc >= intreq_.minEventTime() + && intreq_.eventTime(intevent_end) != disabled_time) { + cc = event(cc); + } - intreq.setEventTime(disabled_time); + intreq_.setEventTime(disabled_time); break; case intevent_blit: { - const bool lcden = ioamhram[0x140] >> 7 & 1; - unsigned long blitTime = intreq.eventTime(intevent_blit); + bool const lcden = ioamhram_[0x140] & lcdc_en; + unsigned long blitTime = intreq_.eventTime(intevent_blit); - if (lcden | blanklcd) { - display.updateScreen(blanklcd, cycleCounter); - intreq.setEventTime(disabled_time); - intreq.setEventTime(disabled_time); + if (lcden | blanklcd_) { + lcd_.updateScreen(blanklcd_, cc); + intreq_.setEventTime(disabled_time); + intreq_.setEventTime(disabled_time); - while (cycleCounter >= intreq.minEventTime()) - cycleCounter = event(cycleCounter); + while (cc >= intreq_.minEventTime()) + cc = event(cc); } else blitTime += 70224 << isDoubleSpeed(); - blanklcd = lcden ^ 1; - intreq.setEventTime(blitTime); + blanklcd_ = lcden ^ 1; + intreq_.setEventTime(blitTime); } break; case intevent_serial: - updateSerial(cycleCounter); + updateSerial(cc); break; case intevent_oam: - intreq.setEventTime(lastOamDmaUpdate == disabled_time ? - static_cast(disabled_time) : intreq.eventTime(intevent_oam) + 0xA0 * 4); + intreq_.setEventTime(lastOamDmaUpdate_ == disabled_time + ? static_cast(disabled_time) + : intreq_.eventTime(intevent_oam) + 0xA0 * 4); break; case intevent_dma: { - const bool doubleSpeed = isDoubleSpeed(); - unsigned dmaSrc = dmaSource; - unsigned dmaDest = dmaDestination; - unsigned dmaLength = ((ioamhram[0x155] & 0x7F) + 0x1) * 0x10; - unsigned length = hdmaReqFlagged(intreq) ? 0x10 : dmaLength; + bool const doubleSpeed = isDoubleSpeed(); + unsigned dmaSrc = dmaSource_; + unsigned dmaDest = dmaDestination_; + unsigned dmaLength = ((ioamhram_[0x155] & 0x7F) + 0x1) * 0x10; + unsigned length = hdmaReqFlagged(intreq_) ? 0x10 : dmaLength; - ackDmaReq(intreq); + ackDmaReq(intreq_); if ((static_cast(dmaDest) + length) & 0x10000) { length = 0x10000 - dmaDest; - ioamhram[0x155] |= 0x80; + ioamhram_[0x155] |= 0x80; } dmaLength -= length; - if (!(ioamhram[0x140] & 0x80)) + if (!(ioamhram_[0x140] & lcdc_en)) dmaLength = 0; { - unsigned long lOamDmaUpdate = lastOamDmaUpdate; - lastOamDmaUpdate = disabled_time; + unsigned long lOamDmaUpdate = lastOamDmaUpdate_; + lastOamDmaUpdate_ = disabled_time; while (length--) { - const unsigned src = dmaSrc++ & 0xFFFF; - const unsigned data = ((src & 0xE000) == 0x8000 || src > 0xFDFF) ? 0xFF : read(src, cycleCounter); + unsigned const src = dmaSrc++ & 0xFFFF; + unsigned const data = (src & 0xE000) == 0x8000 || src > 0xFDFF + ? 0xFF + : read(src, cc); - cycleCounter += 2 << doubleSpeed; + cc += 2 << doubleSpeed; - if (cycleCounter - 3 > lOamDmaUpdate) { - oamDmaPos = (oamDmaPos + 1) & 0xFF; + if (cc - 3 > lOamDmaUpdate) { + oamDmaPos_ = (oamDmaPos_ + 1) & 0xFF; lOamDmaUpdate += 4; - if (oamDmaPos < 0xA0) { - if (oamDmaPos == 0) + if (oamDmaPos_ < 0xA0) { + if (oamDmaPos_ == 0) startOamDma(lOamDmaUpdate - 1); - ioamhram[src & 0xFF] = data; - } else if (oamDmaPos == 0xA0) { + ioamhram_[src & 0xFF] = data; + } else if (oamDmaPos_ == 0xA0) { endOamDma(lOamDmaUpdate - 1); lOamDmaUpdate = disabled_time; } } - nontrivial_write(0x8000 | (dmaDest++ & 0x1FFF), data, cycleCounter); + nontrivial_write(0x8000 | (dmaDest++ & 0x1FFF), data, cc); } - lastOamDmaUpdate = lOamDmaUpdate; + lastOamDmaUpdate_ = lOamDmaUpdate; } - cycleCounter += 4; + cc += 4; - dmaSource = dmaSrc; - dmaDestination = dmaDest; - ioamhram[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram[0x155] & 0x80); + dmaSource_ = dmaSrc; + dmaDestination_ = dmaDest; + ioamhram_[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram_[0x155] & 0x80); - if ((ioamhram[0x155] & 0x80) && display.hdmaIsEnabled()) { - if (lastOamDmaUpdate != disabled_time) - updateOamDma(cycleCounter); + if ((ioamhram_[0x155] & 0x80) && lcd_.hdmaIsEnabled()) { + if (lastOamDmaUpdate_ != disabled_time) + updateOamDma(cc); - display.disableHdma(cycleCounter); + lcd_.disableHdma(cc); } } break; case intevent_tima: - tima.doIrqEvent(TimaInterruptRequester(intreq)); + tima_.doIrqEvent(TimaInterruptRequester(intreq_)); break; case intevent_video: - display.update(cycleCounter); + lcd_.update(cc); break; case intevent_interrupts: - if (stopped) { - intreq.setEventTime(disabled_time); + if (stopped_) { + intreq_.setEventTime(disabled_time); break; } - if (halted()) { - if (gbIsCgb_ || (!gbIsCgb_ && cycleCounter <= halttime + 4)) - cycleCounter += 4; - intreq.unhalt(); - intreq.setEventTime(disabled_time); + if (halted()) { + if (gbIsCgb_ || (!gbIsCgb_ && cc <= halttime_ + 4)) + cc += 4; + + intreq_.unhalt(); + intreq_.setEventTime(disabled_time); } if (ime()) { unsigned address; - cycleCounter += 12; - display.update(cycleCounter); - SP = (SP - 2) & 0xFFFF; - write(SP + 1, PC >> 8, cycleCounter); - unsigned ie = intreq.iereg(); + cc += 12; + lcd_.update(cc); + sp_ = (sp_ - 2) & 0xFFFF; + write(sp_ + 1, pc_ >> 8, cc); + unsigned ie = intreq_.iereg(); - cycleCounter += 4; - display.update(cycleCounter); - write(SP, PC & 0xFF, cycleCounter); - const unsigned pendingIrqs = ie & intreq.ifreg(); + cc += 4; + lcd_.update(cc); + write(sp_, pc_ & 0xFF, cc); + const unsigned pendingIrqs = ie & intreq_.ifreg(); - cycleCounter += 4; - display.update(cycleCounter); + cc += 4; + lcd_.update(cc); const unsigned n = pendingIrqs & -pendingIrqs; if (n == 0) { @@ -306,199 +321,201 @@ unsigned long Memory::event(unsigned long cycleCounter) { } else address = 0x50 + n; - intreq.ackIrq(n); - PC = address; + intreq_.ackIrq(n); + pc_ = address; } break; } - return cycleCounter; + return cc; } -unsigned long Memory::stop(unsigned long cycleCounter) { - cycleCounter += 4; +unsigned long Memory::stop(unsigned long cc) { + cc += 4; - if (ioamhram[0x14D] & isCgb()) { - sound.generateSamples(cycleCounter, isDoubleSpeed()); + if (ioamhram_[0x14D] & isCgb()) { + psg_.generateSamples(cc, isDoubleSpeed()); + lcd_.speedChange(cc); + ioamhram_[0x14D] ^= 0x81; + intreq_.setEventTime(ioamhram_[0x140] & lcdc_en + ? lcd_.nextMode1IrqTime() + : cc + (70224 << isDoubleSpeed())); - display.speedChange(cycleCounter); - ioamhram[0x14D] ^= 0x81; - - intreq.setEventTime((ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : cycleCounter + (70224 << isDoubleSpeed())); - - if (intreq.eventTime(intevent_end) > cycleCounter) { - intreq.setEventTime(cycleCounter + (isDoubleSpeed() ? - (intreq.eventTime(intevent_end) - cycleCounter) << 1 : (intreq.eventTime(intevent_end) - cycleCounter) >> 1)); + if (intreq_.eventTime(intevent_end) > cc) { + intreq_.setEventTime(cc + + ( isDoubleSpeed() + ? (intreq_.eventTime(intevent_end) - cc) << 1 + : (intreq_.eventTime(intevent_end) - cc) >> 1)); } - // when switching speed, it seems that the CPU spontaneously restarts soon? - // otherwise, the cpu should be allowed to stay halted as long as needed - // so only execute this line when switching speed - intreq.halt(); - intreq.setEventTime(cycleCounter + 0x20000); + intreq_.halt(); + intreq_.setEventTime(cc + 0x20000); } else { - stopped = true; - intreq.halt(); + stopped_ = true; + intreq_.halt(); } - return cycleCounter; + return cc; } -static void decCycles(unsigned long &counter, const unsigned long dec) { +static void decCycles(unsigned long &counter, unsigned long dec) { if (counter != disabled_time) counter -= dec; } -void Memory::decEventCycles(const IntEventId eventId, const unsigned long dec) { - if (intreq.eventTime(eventId) != disabled_time) - intreq.setEventTime(eventId, intreq.eventTime(eventId) - dec); +void Memory::decEventCycles(IntEventId eventId, unsigned long dec) { + if (intreq_.eventTime(eventId) != disabled_time) + intreq_.setEventTime(eventId, intreq_.eventTime(eventId) - dec); } -unsigned long Memory::resetCounters(unsigned long cycleCounter) { - if (lastOamDmaUpdate != disabled_time) - updateOamDma(cycleCounter); +unsigned long Memory::resetCounters(unsigned long cc) { + if (lastOamDmaUpdate_ != disabled_time) + updateOamDma(cc); - updateIrqs(cycleCounter); - - const unsigned long oldCC = cycleCounter; + updateIrqs(cc); { - const unsigned long divinc = (cycleCounter - divLastUpdate) >> 8; - ioamhram[0x104] = (ioamhram[0x104] + divinc) & 0xFF; - divLastUpdate += divinc << 8; + unsigned long divinc = (cc - divLastUpdate_) >> 8; + ioamhram_[0x104] = (ioamhram_[0x104] + divinc) & 0xFF; + divLastUpdate_ += divinc << 8; } - const unsigned long dec = cycleCounter < 0x10000 ? 0 : (cycleCounter & ~0x7FFFul) - 0x8000; - - decCycles(divLastUpdate, dec); - decCycles(lastOamDmaUpdate, dec); + unsigned long const dec = cc < 0x10000 + ? 0 + : (cc & ~0x7FFFul) - 0x8000; + decCycles(divLastUpdate_, dec); + decCycles(lastOamDmaUpdate_, dec); decEventCycles(intevent_serial, dec); decEventCycles(intevent_oam, dec); decEventCycles(intevent_blit, dec); decEventCycles(intevent_end, dec); decEventCycles(intevent_unhalt, dec); - cycleCounter -= dec; - - intreq.resetCc(oldCC, cycleCounter); - tima.resetCc(oldCC, cycleCounter, TimaInterruptRequester(intreq)); - display.resetCc(oldCC, cycleCounter); - sound.resetCounter(cycleCounter, oldCC, isDoubleSpeed()); - - return cycleCounter; + unsigned long const oldCC = cc; + cc -= dec; + intreq_.resetCc(oldCC, cc); + tima_.resetCc(oldCC, cc, TimaInterruptRequester(intreq_)); + lcd_.resetCc(oldCC, cc); + psg_.resetCounter(cc, oldCC, isDoubleSpeed()); + return cc; } void Memory::updateInput() { unsigned state = 0xF; - if ((ioamhram[0x100] & 0x30) != 0x30 && getInput) { - unsigned input = (*getInput)(); + if ((ioamhram_[0x100] & 0x30) != 0x30 && getInput_) { + unsigned input = (*getInput_)(); unsigned dpad_state = ~input >> 4; unsigned button_state = ~input; - if (!(ioamhram[0x100] & 0x10)) + if (!(ioamhram_[0x100] & 0x10)) state &= dpad_state; - if (!(ioamhram[0x100] & 0x20)) + if (!(ioamhram_[0x100] & 0x20)) state &= button_state; + + if (state != 0xF && (ioamhram_[0x100] & 0xF) == 0xF) + intreq_.flagIrq(0x10); } - if (state != 0xF && (ioamhram[0x100] & 0xF) == 0xF) - intreq.flagIrq(0x10); - - ioamhram[0x100] = (ioamhram[0x100] & -0x10u) | state; + ioamhram_[0x100] = (ioamhram_[0x100] & -0x10u) | state; } -void Memory::updateOamDma(const unsigned long cycleCounter) { - const unsigned char *const oamDmaSrc = oamDmaSrcPtr(); - unsigned cycles = (cycleCounter - lastOamDmaUpdate) >> 2; +void Memory::updateOamDma(unsigned long const cc) { + unsigned char const *const oamDmaSrc = oamDmaSrcPtr(); + unsigned cycles = (cc - lastOamDmaUpdate_) >> 2; while (cycles--) { - oamDmaPos = (oamDmaPos + 1) & 0xFF; - lastOamDmaUpdate += 4; + oamDmaPos_ = (oamDmaPos_ + 1) & 0xFF; + lastOamDmaUpdate_ += 4; - if (oamDmaPos < 0xA0) { - if (oamDmaPos == 0) - startOamDma(lastOamDmaUpdate - 1); + if (oamDmaPos_ < 0xA0) { + if (oamDmaPos_ == 0) + startOamDma(lastOamDmaUpdate_ - 1); - ioamhram[oamDmaPos] = oamDmaSrc ? oamDmaSrc[oamDmaPos] : cart.rtcRead(); - } else if (oamDmaPos == 0xA0) { - endOamDma(lastOamDmaUpdate - 1); - lastOamDmaUpdate = disabled_time; + ioamhram_[oamDmaPos_] = oamDmaSrc ? oamDmaSrc[oamDmaPos_] : cart_.rtcRead(); + } else if (oamDmaPos_ == 0xA0) { + endOamDma(lastOamDmaUpdate_ - 1); + lastOamDmaUpdate_ = disabled_time; break; } } } void Memory::oamDmaInitSetup() { - if (ioamhram[0x146] < 0xA0) { - cart.setOamDmaSrc(ioamhram[0x146] < 0x80 ? oam_dma_src_rom : oam_dma_src_vram); - } else if (ioamhram[0x146] < 0xFE - isCgb() * 0x1E) { - cart.setOamDmaSrc(ioamhram[0x146] < 0xC0 ? oam_dma_src_sram : oam_dma_src_wram); + if (ioamhram_[0x146] < 0xA0) { + cart_.setOamDmaSrc(ioamhram_[0x146] < 0x80 ? oam_dma_src_rom : oam_dma_src_vram); + } else if (ioamhram_[0x146] < 0xFE - isCgb() * 0x1E) { + cart_.setOamDmaSrc(ioamhram_[0x146] < 0xC0 ? oam_dma_src_sram : oam_dma_src_wram); } else - cart.setOamDmaSrc(oam_dma_src_invalid); + cart_.setOamDmaSrc(oam_dma_src_invalid); } -static const unsigned char * oamDmaSrcZero() { +static unsigned char const * oamDmaSrcZero() { static unsigned char zeroMem[0xA0]; return zeroMem; } -const unsigned char * Memory::oamDmaSrcPtr() const { - switch (cart.oamDmaSrc()) { - case oam_dma_src_rom: return cart.romdata(ioamhram[0x146] >> 6) + (ioamhram[0x146] << 8); - case oam_dma_src_sram: return cart.rsrambankptr() ? cart.rsrambankptr() + (ioamhram[0x146] << 8) : 0; - case oam_dma_src_vram: return cart.vrambankptr() + (ioamhram[0x146] << 8); - case oam_dma_src_wram: return cart.wramdata(ioamhram[0x146] >> 4 & 1) + (ioamhram[0x146] << 8 & 0xFFF); +unsigned char const * Memory::oamDmaSrcPtr() const { + switch (cart_.oamDmaSrc()) { + case oam_dma_src_rom: + return cart_.romdata(ioamhram_[0x146] >> 6) + (ioamhram_[0x146] << 8); + case oam_dma_src_sram: + return cart_.rsrambankptr() ? cart_.rsrambankptr() + (ioamhram_[0x146] << 8) : 0; + case oam_dma_src_vram: + return cart_.vrambankptr() + (ioamhram_[0x146] << 8); + case oam_dma_src_wram: + return cart_.wramdata(ioamhram_[0x146] >> 4 & 1) + (ioamhram_[0x146] << 8 & 0xFFF); case oam_dma_src_invalid: - case oam_dma_src_off: break; + case oam_dma_src_off: + break; } - return ioamhram[0x146] == 0xFF && !isCgb() ? oamDmaSrcZero() : cart.rdisabledRam(); + return ioamhram_[0x146] == 0xFF && !isCgb() ? oamDmaSrcZero() : cart_.rdisabledRam(); } -void Memory::startOamDma(const unsigned long cycleCounter) { - display.oamChange(cart.rdisabledRam(), cycleCounter); +void Memory::startOamDma(unsigned long cc) { + lcd_.oamChange(cart_.rdisabledRam(), cc); } -void Memory::endOamDma(const unsigned long cycleCounter) { - oamDmaPos = 0xFE; - cart.setOamDmaSrc(oam_dma_src_off); - display.oamChange(ioamhram, cycleCounter); +void Memory::endOamDma(unsigned long cc) { + oamDmaPos_ = 0xFE; + cart_.setOamDmaSrc(oam_dma_src_off); + lcd_.oamChange(ioamhram_, cc); } -unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != disabled_time) - updateOamDma(cycleCounter); +unsigned Memory::nontrivial_ff_read(unsigned const p, unsigned long const cc) { + if (lastOamDmaUpdate_ != disabled_time) + updateOamDma(cc); - switch (P) { + switch (p) { case 0x00: updateInput(); break; case 0x01: case 0x02: - updateSerial(cycleCounter); + updateSerial(cc); break; case 0x04: { - const unsigned long divcycles = (cycleCounter - divLastUpdate) >> 8; - ioamhram[0x104] = (ioamhram[0x104] + divcycles) & 0xFF; - divLastUpdate += divcycles << 8; + unsigned long divcycles = (cc - divLastUpdate_) >> 8; + ioamhram_[0x104] = (ioamhram_[0x104] + divcycles) & 0xFF; + divLastUpdate_ += divcycles << 8; } break; case 0x05: - ioamhram[0x105] = tima.tima(cycleCounter); + ioamhram_[0x105] = tima_.tima(cc); break; case 0x0F: - updateIrqs(cycleCounter); - ioamhram[0x10F] = intreq.ifreg(); + updateIrqs(cc); + ioamhram_[0x10F] = intreq_.ifreg(); break; case 0x26: - if (ioamhram[0x126] & 0x80) { - sound.generateSamples(cycleCounter, isDoubleSpeed()); - ioamhram[0x126] = 0xF0 | sound.getStatus(); + if (ioamhram_[0x126] & 0x80) { + psg_.generateSamples(cc, isDoubleSpeed()); + ioamhram_[0x126] = 0xF0 | psg_.getStatus(); } else - ioamhram[0x126] = 0x70; + ioamhram_[0x126] = 0x70; break; case 0x30: @@ -517,26 +534,27 @@ unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleC case 0x3D: case 0x3E: case 0x3F: - sound.generateSamples(cycleCounter, isDoubleSpeed()); - return sound.waveRamRead(P & 0xF); + psg_.generateSamples(cc, isDoubleSpeed()); + return psg_.waveRamRead(p & 0xF); case 0x41: - return ioamhram[0x141] | display.getStat(ioamhram[0x145], cycleCounter); + return ioamhram_[0x141] | lcd_.getStat(ioamhram_[0x145], cc); case 0x44: - return display.getLyReg(cycleCounter/*+4*/); + return lcd_.getLyReg(cc); case 0x69: - return display.cgbBgColorRead(ioamhram[0x168] & 0x3F, cycleCounter); + return lcd_.cgbBgColorRead(ioamhram_[0x168] & 0x3F, cc); case 0x6B: - return display.cgbSpColorRead(ioamhram[0x16A] & 0x3F, cycleCounter); - default: break; + return lcd_.cgbSpColorRead(ioamhram_[0x16A] & 0x3F, cc); + default: + break; } - return ioamhram[P + 0x100]; + return ioamhram_[p + 0x100]; } -static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned addr, const bool cgb) { +static bool isInOamDmaConflictArea(OamDmaSrc const oamDmaSrc, unsigned const p, bool const cgb) { struct Area { unsigned short areaUpper, exceptAreaLower, exceptAreaWidth, pad; }; - static const Area cgbAreas[] = { + static Area const cgbAreas[] = { { 0xC000, 0x8000, 0x2000, 0 }, { 0xC000, 0x8000, 0x2000, 0 }, { 0xA000, 0x0000, 0x8000, 0 }, @@ -545,7 +563,7 @@ static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned add { 0x0000, 0x0000, 0x0000, 0 } }; - static const Area dmgAreas[] = { + static Area const dmgAreas[] = { { 0xFE00, 0x8000, 0x2000, 0 }, { 0xFE00, 0x8000, 0x2000, 0 }, { 0xA000, 0x0000, 0x8000, 0 }, @@ -554,257 +572,297 @@ static bool isInOamDmaConflictArea(const OamDmaSrc oamDmaSrc, const unsigned add { 0x0000, 0x0000, 0x0000, 0 } }; - const Area *const a = cgb ? cgbAreas : dmgAreas; - - return addr < a[oamDmaSrc].areaUpper && addr - a[oamDmaSrc].exceptAreaLower >= a[oamDmaSrc].exceptAreaWidth; + Area const *a = cgb ? cgbAreas : dmgAreas; + return p < a[oamDmaSrc].areaUpper + && p - a[oamDmaSrc].exceptAreaLower >= a[oamDmaSrc].exceptAreaWidth; } -unsigned Memory::nontrivial_read(const unsigned P, const unsigned long cycleCounter) { - if (P < 0xFF80) { - if (lastOamDmaUpdate != disabled_time) { - updateOamDma(cycleCounter); +unsigned Memory::nontrivial_read(unsigned const p, unsigned long const cc) { + if (p < 0xFF80) { + if (lastOamDmaUpdate_ != disabled_time) { + updateOamDma(cc); - if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) - return ioamhram[oamDmaPos]; + if (isInOamDmaConflictArea(cart_.oamDmaSrc(), p, isCgb()) && oamDmaPos_ < 0xA0) + return ioamhram_[oamDmaPos_]; } - if (P < 0xC000) { - if (P < 0x8000) - return cart.romdata(P >> 14)[P]; + if (p < 0xC000) { + if (p < 0x8000) + return cart_.romdata(p >> 14)[p]; - if (P < 0xA000) { - if (!display.vramAccessible(cycleCounter)) + if (p < 0xA000) { + if (!lcd_.vramAccessible(cc)) return 0xFF; - return cart.vrambankptr()[P]; + return cart_.vrambankptr()[p]; } - if (cart.rsrambankptr()) - return cart.rsrambankptr()[P]; + if (cart_.rsrambankptr()) + return cart_.rsrambankptr()[p]; - return cart.rtcRead(); + return cart_.rtcRead(); } - if (P < 0xFE00) - return cart.wramdata(P >> 12 & 1)[P & 0xFFF]; + if (p < 0xFE00) + return cart_.wramdata(p >> 12 & 1)[p & 0xFFF]; - long const ffp = long(P) - 0xFF00; + long const ffp = long(p) - 0xFF00; if (ffp >= 0) - return nontrivial_ff_read(ffp, cycleCounter); + return nontrivial_ff_read(ffp, cc); - if (!display.oamReadable(cycleCounter) || oamDmaPos < 0xA0) + if (!lcd_.oamReadable(cc) || oamDmaPos_ < 0xA0) return 0xFF; } - return ioamhram[P - 0xFE00]; + return ioamhram_[p - 0xFE00]; } -unsigned Memory::nontrivial_peek(const unsigned P) { - if (P < 0xC000) { - if (P < 0x8000) - return cart.romdata(P >> 14)[P]; +unsigned Memory::nontrivial_peek(unsigned const p) { + if (p < 0xC000) { + if (p < 0x8000) + return cart_.romdata(p >> 14)[p]; - if (P < 0xA000) { - return cart.vrambankptr()[P]; + if (p < 0xA000) { + return cart_.vrambankptr()[p]; } - if (cart.rsrambankptr()) - return cart.rsrambankptr()[P]; + if (cart_.rsrambankptr()) + return cart_.rsrambankptr()[p]; - return cart.rtcRead(); // verified side-effect free + return cart_.rtcRead(); // verified side-effect free } - if (P < 0xFE00) - return cart.wramdata(P >> 12 & 1)[P & 0xFFF]; - if (P >= 0xFF00 && P < 0xFF80) - return nontrivial_ff_peek(P); - return ioamhram[P - 0xFE00]; + if (p < 0xFE00) + return cart_.wramdata(p >> 12 & 1)[p & 0xFFF]; + if (p >= 0xFF00 && p < 0xFF80) + return nontrivial_ff_peek(p); + return ioamhram_[p - 0xFE00]; } -unsigned Memory::nontrivial_ff_peek(const unsigned P) { +unsigned Memory::nontrivial_ff_peek(unsigned const p) { // some regs may be somewhat wrong with this - return ioamhram[P - 0xFE00]; + return ioamhram_[p - 0xFE00]; } -void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != disabled_time) - updateOamDma(cycleCounter); +void Memory::nontrivial_ff_write(unsigned const p, unsigned data, unsigned long const cc) { + if (lastOamDmaUpdate_ != disabled_time) + updateOamDma(cc); - switch (P & 0xFF) { + switch (p & 0xFF) { case 0x00: - if ((data ^ ioamhram[0x100]) & 0x30) { - ioamhram[0x100] = (ioamhram[0x100] & ~0x30u) | (data & 0x30); + if ((data ^ ioamhram_[0x100]) & 0x30) { + ioamhram_[0x100] = (ioamhram_[0x100] & ~0x30u) | (data & 0x30); updateInput(); } + return; case 0x01: - updateSerial(cycleCounter); + updateSerial(cc); break; case 0x02: - updateSerial(cycleCounter); + updateSerial(cc); + serialCnt_ = 8; - serialCnt = 8; - intreq.setEventTime((data & 0x81) == 0x81 - ? (data & isCgb() * 2 ? (cycleCounter & ~0x7ul) + 0x10 * 8 : (cycleCounter & ~0xFFul) + 0x200 * 8) - : static_cast(disabled_time)); + if ((data & 0x81) == 0x81) { + intreq_.setEventTime(data & isCgb() * 2 + ? (cc & ~0x07ul) + 0x010 * 8 + : (cc & ~0xFFul) + 0x200 * 8); + } else + intreq_.setEventTime(disabled_time); data |= 0x7E - isCgb() * 2; break; case 0x04: - ioamhram[0x104] = 0; - divLastUpdate = cycleCounter; - tima.resTac(cycleCounter, TimaInterruptRequester(intreq)); + ioamhram_[0x104] = 0; + divLastUpdate_ = cc; + tima_.resTac(cc, TimaInterruptRequester(intreq_)); return; case 0x05: - tima.setTima(data, cycleCounter, TimaInterruptRequester(intreq)); + tima_.setTima(data, cc, TimaInterruptRequester(intreq_)); break; case 0x06: - tima.setTma(data, cycleCounter, TimaInterruptRequester(intreq)); + tima_.setTma(data, cc, TimaInterruptRequester(intreq_)); break; case 0x07: data |= 0xF8; - tima.setTac(data, cycleCounter, TimaInterruptRequester(intreq), gbIsCgb_); + tima_.setTac(data, cc, TimaInterruptRequester(intreq_), gbIsCgb_); break; case 0x0F: - updateIrqs(cycleCounter); - intreq.setIfreg(0xE0 | data); + updateIrqs(cc); + intreq_.setIfreg(0xE0 | data); return; case 0x10: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr10(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr10(data); data |= 0x80; break; case 0x11: - if (!sound.isEnabled()) { + if (!psg_.isEnabled()) { if (isCgb()) return; data &= 0x3F; } - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr11(data); + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr11(data); data |= 0x3F; break; case 0x12: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr12(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr12(data); break; case 0x13: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr13(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr13(data); return; case 0x14: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr14(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr14(data); data |= 0xBF; break; case 0x16: - if (!sound.isEnabled()) { + if (!psg_.isEnabled()) { if (isCgb()) return; data &= 0x3F; } - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr21(data); + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr21(data); data |= 0x3F; break; case 0x17: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr22(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr22(data); break; case 0x18: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr23(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr23(data); return; case 0x19: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr24(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr24(data); data |= 0xBF; break; case 0x1A: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr30(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr30(data); data |= 0x7F; break; case 0x1B: - if (!sound.isEnabled() && isCgb()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr31(data); + if (!psg_.isEnabled() && isCgb()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr31(data); return; case 0x1C: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr32(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr32(data); data |= 0x9F; break; case 0x1D: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr33(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr33(data); return; case 0x1E: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr34(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr34(data); data |= 0xBF; break; case 0x20: - if (!sound.isEnabled() && isCgb()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr41(data); + if (!psg_.isEnabled() && isCgb()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr41(data); return; case 0x21: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr42(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr42(data); break; case 0x22: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr43(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr43(data); break; case 0x23: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setNr44(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setNr44(data); data |= 0xBF; break; case 0x24: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.setSoVolume(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.setSoVolume(data); break; case 0x25: - if (!sound.isEnabled()) return; - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.mapSo(data); + if (!psg_.isEnabled()) + return; + + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.mapSo(data); break; case 0x26: - if ((ioamhram[0x126] ^ data) & 0x80) { - sound.generateSamples(cycleCounter, isDoubleSpeed()); + if ((ioamhram_[0x126] ^ data) & 0x80) { + psg_.generateSamples(cc, isDoubleSpeed()); if (!(data & 0x80)) { for (unsigned i = 0x10; i < 0x26; ++i) - ff_write(i, 0, cycleCounter); + ff_write(i, 0, cc); - sound.setEnabled(false); + psg_.setEnabled(false); } else { - sound.reset(); - sound.setEnabled(true); + psg_.reset(); + psg_.setEnabled(true); } } - data = (data & 0x80) | (ioamhram[0x126] & 0x7F); + data = (data & 0x80) | (ioamhram_[0x126] & 0x7F); break; case 0x30: case 0x31: @@ -822,178 +880,178 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned case 0x3D: case 0x3E: case 0x3F: - sound.generateSamples(cycleCounter, isDoubleSpeed()); - sound.waveRamWrite(P & 0xF, data); + psg_.generateSamples(cc, isDoubleSpeed()); + psg_.waveRamWrite(p & 0xF, data); break; case 0x40: - if (ioamhram[0x140] != data) { - if ((ioamhram[0x140] ^ data) & 0x80) { - const unsigned lyc = display.getStat(ioamhram[0x145], cycleCounter) & 4; - const bool hdmaEnabled = display.hdmaIsEnabled(); + if (ioamhram_[0x140] != data) { + if ((ioamhram_[0x140] ^ data) & lcdc_en) { + unsigned const lyc = lcd_.getStat(ioamhram_[0x145], cc) + & lcdstat_lycflag; + bool const hdmaEnabled = lcd_.hdmaIsEnabled(); - display.lcdcChange(data, cycleCounter); - ioamhram[0x144] = 0; - ioamhram[0x141] &= 0xF8; + lcd_.lcdcChange(data, cc); + ioamhram_[0x144] = 0; + ioamhram_[0x141] &= 0xF8; - if (data & 0x80) { - intreq.setEventTime(display.nextMode1IrqTime() + (blanklcd ? 0 : 70224 << isDoubleSpeed())); + if (data & lcdc_en) { + intreq_.setEventTime(blanklcd_ + ? lcd_.nextMode1IrqTime() + : lcd_.nextMode1IrqTime() + + (70224 << isDoubleSpeed())); } else { - ioamhram[0x141] |= lyc; - intreq.setEventTime(cycleCounter + (456 * 4 << isDoubleSpeed())); + ioamhram_[0x141] |= lyc; + intreq_.setEventTime( + cc + (456 * 4 << isDoubleSpeed())); if (hdmaEnabled) - flagHdmaReq(intreq); + flagHdmaReq(intreq_); } } else - display.lcdcChange(data, cycleCounter); + lcd_.lcdcChange(data, cc); - ioamhram[0x140] = data; + ioamhram_[0x140] = data; } return; case 0x41: - display.lcdstatChange(data, cycleCounter); - data = (ioamhram[0x141] & 0x87) | (data & 0x78); + lcd_.lcdstatChange(data, cc); + data = (ioamhram_[0x141] & 0x87) | (data & 0x78); break; case 0x42: - display.scyChange(data, cycleCounter); + lcd_.scyChange(data, cc); break; case 0x43: - display.scxChange(data, cycleCounter); + lcd_.scxChange(data, cc); break; case 0x45: - display.lycRegChange(data, cycleCounter); + lcd_.lycRegChange(data, cc); break; case 0x46: - if (lastOamDmaUpdate != disabled_time) - endOamDma(cycleCounter); + if (lastOamDmaUpdate_ != disabled_time) + endOamDma(cc); - lastOamDmaUpdate = cycleCounter; - intreq.setEventTime(cycleCounter + 8); - ioamhram[0x146] = data; + lastOamDmaUpdate_ = cc; + intreq_.setEventTime(cc + 8); + ioamhram_[0x146] = data; oamDmaInitSetup(); return; case 0x47: if (!isCgb()) - display.dmgBgPaletteChange(data, cycleCounter); + lcd_.dmgBgPaletteChange(data, cc); break; case 0x48: if (!isCgb()) - display.dmgSpPalette1Change(data, cycleCounter); + lcd_.dmgSpPalette1Change(data, cc); break; case 0x49: if (!isCgb()) - display.dmgSpPalette2Change(data, cycleCounter); + lcd_.dmgSpPalette2Change(data, cc); break; case 0x4A: - display.wyChange(data, cycleCounter); + lcd_.wyChange(data, cc); break; case 0x4B: - display.wxChange(data, cycleCounter); - break; - case 0x4C: - if (biosMode) { - //flagClockReq(&intreq); - } + lcd_.wxChange(data, cc); break; case 0x4D: if (isCgb()) - ioamhram[0x14D] = (ioamhram[0x14D] & ~1u) | (data & 1); return; + ioamhram_[0x14D] = (ioamhram_[0x14D] & ~1u) | (data & 1); + + return; case 0x4F: if (isCgb()) { - cart.setVrambank(data & 1); - ioamhram[0x14F] = 0xFE | data; + cart_.setVrambank(data & 1); + ioamhram_[0x14F] = 0xFE | data; } return; case 0x50: - biosMode = false; - if (cgbSwitching) { - display.copyCgbPalettesToDmg(); - display.setCgb(false); - cgbSwitching = false; + biosMode_ = false; + if(cgbSwitching_) { + lcd_.copyCgbPalettesToDmg(); + lcd_.setCgb(false); + cgbSwitching_ = false; } return; case 0x51: - dmaSource = data << 8 | (dmaSource & 0xFF); + dmaSource_ = data << 8 | (dmaSource_ & 0xFF); return; case 0x52: - dmaSource = (dmaSource & 0xFF00) | (data & 0xF0); + dmaSource_ = (dmaSource_ & 0xFF00) | (data & 0xF0); return; case 0x53: - dmaDestination = data << 8 | (dmaDestination & 0xFF); + dmaDestination_ = data << 8 | (dmaDestination_ & 0xFF); return; case 0x54: - dmaDestination = (dmaDestination & 0xFF00) | (data & 0xF0); + dmaDestination_ = (dmaDestination_ & 0xFF00) | (data & 0xF0); return; case 0x55: if (isCgb()) { - ioamhram[0x155] = data & 0x7F; + ioamhram_[0x155] = data & 0x7F; - if (display.hdmaIsEnabled()) { + if (lcd_.hdmaIsEnabled()) { if (!(data & 0x80)) { - ioamhram[0x155] |= 0x80; - display.disableHdma(cycleCounter); + ioamhram_[0x155] |= 0x80; + lcd_.disableHdma(cc); } } else { if (data & 0x80) { - if (ioamhram[0x140] & 0x80) { - display.enableHdma(cycleCounter); + if (ioamhram_[0x140] & lcdc_en) { + lcd_.enableHdma(cc); } else - flagHdmaReq(intreq); + flagHdmaReq(intreq_); } else - flagGdmaReq(intreq); + flagGdmaReq(intreq_); } } return; case 0x56: if (isCgb()) - ioamhram[0x156] = data | 0x3E; + ioamhram_[0x156] = data | 0x3E; return; case 0x68: if (isCgb()) - ioamhram[0x168] = data | 0x40; + ioamhram_[0x168] = data | 0x40; return; case 0x69: if (isCgb()) { - const unsigned index = ioamhram[0x168] & 0x3F; - - display.cgbBgColorChange(index, data, cycleCounter); - - ioamhram[0x168] = (ioamhram[0x168] & ~0x3F) | ((index + (ioamhram[0x168] >> 7)) & 0x3F); + unsigned index = ioamhram_[0x168] & 0x3F; + lcd_.cgbBgColorChange(index, data, cc); + ioamhram_[0x168] = (ioamhram_[0x168] & ~0x3F) + | ((index + (ioamhram_[0x168] >> 7)) & 0x3F); } return; case 0x6A: if (isCgb()) - ioamhram[0x16A] = data | 0x40; + ioamhram_[0x16A] = data | 0x40; return; case 0x6B: if (isCgb()) { - const unsigned index = ioamhram[0x16A] & 0x3F; - - display.cgbSpColorChange(index, data, cycleCounter); - - ioamhram[0x16A] = (ioamhram[0x16A] & ~0x3F) | ((index + (ioamhram[0x16A] >> 7)) & 0x3F); + unsigned index = ioamhram_[0x16A] & 0x3F; + lcd_.cgbSpColorChange(index, data, cc); + ioamhram_[0x16A] = (ioamhram_[0x16A] & ~0x3F) + | ((index + (ioamhram_[0x16A] >> 7)) & 0x3F); } return; case 0x6C: - ioamhram[0x16C] = data | 0xFE; - cgbSwitching = true; + ioamhram_[0x16C] = data | 0xFE; + cgbSwitching_ = true; return; case 0x70: if (isCgb()) { - cart.setWrambank((data & 0x07) ? (data & 0x07) : 1); - ioamhram[0x170] = data | 0xF8; + cart_.setWrambank(data & 0x07 ? data & 0x07 : 1); + ioamhram_[0x170] = data | 0xF8; } return; @@ -1006,74 +1064,74 @@ void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned return; case 0x75: if (isCgb()) - ioamhram[0x175] = data | 0x8F; + ioamhram_[0x175] = data | 0x8F; return; case 0xFF: - intreq.setIereg(data); + intreq_.setIereg(data); break; default: return; } - ioamhram[P + 0x100] = data; + ioamhram_[p + 0x100] = data; } -void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { - if (lastOamDmaUpdate != disabled_time) { - updateOamDma(cycleCounter); +void Memory::nontrivial_write(unsigned const p, unsigned const data, unsigned long const cc) { + if (lastOamDmaUpdate_ != disabled_time) { + updateOamDma(cc); - if (isInOamDmaConflictArea(cart.oamDmaSrc(), P, isCgb()) && oamDmaPos < 0xA0) { - ioamhram[oamDmaPos] = data; + if (isInOamDmaConflictArea(cart_.oamDmaSrc(), p, isCgb()) && oamDmaPos_ < 0xA0) { + ioamhram_[oamDmaPos_] = data; return; } } - if (P < 0xFE00) { - if (P < 0xA000) { - if (P < 0x8000) { - cart.mbcWrite(P, data); - } else if (display.vramAccessible(cycleCounter)) { - display.vramChange(cycleCounter); - cart.vrambankptr()[P] = data; + if (p < 0xFE00) { + if (p < 0xA000) { + if (p < 0x8000) { + cart_.mbcWrite(p, data); + } else if (lcd_.vramAccessible(cc)) { + lcd_.vramChange(cc); + cart_.vrambankptr()[p] = data; } - } else if (P < 0xC000) { - if (cart.wsrambankptr()) - cart.wsrambankptr()[P] = data; + } else if (p < 0xC000) { + if (cart_.wsrambankptr()) + cart_.wsrambankptr()[p] = data; else - cart.rtcWrite(data); + cart_.rtcWrite(data); } else - cart.wramdata(P >> 12 & 1)[P & 0xFFF] = data; - } else if (P - 0xFF80u >= 0x7Fu) { - long const ffp = long(P) - 0xFF00; + cart_.wramdata(p >> 12 & 1)[p & 0xFFF] = data; + } else if (p - 0xFF80u >= 0x7Fu) { + long const ffp = long(p) - 0xFF00; if (ffp < 0) { - if (display.oamWritable(cycleCounter) && oamDmaPos >= 0xA0 && (P < 0xFEA0 || isCgb())) { - display.oamChange(cycleCounter); - ioamhram[P - 0xFE00] = data; + if (lcd_.oamWritable(cc) && oamDmaPos_ >= 0xA0 && (p < 0xFEA0 || isCgb())) { + lcd_.oamChange(cc); + ioamhram_[p - 0xFE00] = data; } } else - nontrivial_ff_write(ffp, data, cycleCounter); + nontrivial_ff_write(ffp, data, cc); } else - ioamhram[P - 0xFE00] = data; + ioamhram_[p - 0xFE00] = data; } LoadRes Memory::loadROM(char const *romfiledata, unsigned romfilelength, const bool forceDmg, const bool multicartCompat) { - if (LoadRes const fail = cart.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat)) + if (LoadRes const fail = cart_.loadROM(romfiledata, romfilelength, forceDmg, multicartCompat)) return fail; - sound.init(cart.isCgb()); - display.reset(ioamhram, cart.vramdata(), cart.isCgb()); + psg_.init(cart_.isCgb()); + lcd_.reset(ioamhram_, cart_.vramdata(), cart_.isCgb()); return LOADRES_OK; } -std::size_t Memory::fillSoundBuffer(const unsigned long cycleCounter) { - sound.generateSamples(cycleCounter, isDoubleSpeed()); - return sound.fillBuffer(); +std::size_t Memory::fillSoundBuffer(unsigned long cc) { + psg_.generateSamples(cc, isDoubleSpeed()); + return psg_.fillBuffer(); } void Memory::setCgbPalette(unsigned *lut) { - display.setCgbPalette(lut); + lcd_.setCgbPalette(lut); } bool Memory::getMemoryArea(int which, unsigned char **data, int *length) { @@ -1083,23 +1141,23 @@ bool Memory::getMemoryArea(int which, unsigned char **data, int *length) { switch (which) { case 4: // oam - *data = &ioamhram[0]; + *data = &ioamhram_[0]; *length = 160; return true; case 5: // hram - *data = &ioamhram[384]; + *data = &ioamhram_[384]; *length = 128; return true; case 6: // bgpal - *data = (unsigned char *)display.bgPalette(); + *data = (unsigned char *)lcd_.bgPalette(); *length = 32; return true; case 7: // sppal - *data = (unsigned char *)display.spPalette(); + *data = (unsigned char *)lcd_.spPalette(); *length = 32; return true; default: // pass to cartridge - return cart.getMemoryArea(which, data, length); + return cart_.getMemoryArea(which, data, length); } } @@ -1108,21 +1166,21 @@ int Memory::linkStatus(int which) switch (which) { case 256: // ClockSignaled - return linkClockTrigger; + return linkClockTrigger_; case 257: // AckClockSignal - linkClockTrigger = false; + linkClockTrigger_ = false; return 0; case 258: // GetOut - return ioamhram[0x101] & 0xff; + return ioamhram_[0x101] & 0xff; case 259: // connect link cable - LINKCABLE = true; + LINKCABLE_ = true; return 0; default: // ShiftIn - if (ioamhram[0x102] & 0x80) // was enabled + if (ioamhram_[0x102] & 0x80) // was enabled { - ioamhram[0x101] = which; - ioamhram[0x102] &= 0x7F; - intreq.flagIrq(8); + ioamhram_[0x101] = which; + ioamhram_[0x102] &= 0x7F; + intreq_.flagIrq(8); } return 0; } @@ -1132,30 +1190,30 @@ int Memory::linkStatus(int which) SYNCFUNC(Memory) { - SSS(cart); - NSS(ioamhram); - NSS(divLastUpdate); - NSS(lastOamDmaUpdate); - NSS(biosMode); - NSS(cgbSwitching); - NSS(agbMode); + SSS(cart_); + NSS(ioamhram_); + NSS(divLastUpdate_); + NSS(lastOamDmaUpdate_); + NSS(biosMode_); + NSS(cgbSwitching_); + NSS(agbMode_); NSS(gbIsCgb_); - NSS(stopped); - NSS(halttime); + NSS(stopped_); + NSS(halttime_); - SSS(intreq); - SSS(tima); - SSS(display); - SSS(sound); + SSS(intreq_); + SSS(tima_); + SSS(lcd_); + SSS(psg_); - NSS(dmaSource); - NSS(dmaDestination); - NSS(oamDmaPos); - NSS(serialCnt); - NSS(blanklcd); + NSS(dmaSource_); + NSS(dmaDestination_); + NSS(oamDmaPos_); + NSS(serialCnt_); + NSS(blanklcd_); - NSS(LINKCABLE); - NSS(linkClockTrigger); + NSS(LINKCABLE_); + NSS(linkClockTrigger_); } } diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 7d4a250dc8..4999e6d34c 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -1,30 +1,30 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre Aamås * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef MEMORY_H #define MEMORY_H static unsigned char const agbOverride[0xD] = { 0xFF, 0x00, 0xCD, 0x03, 0x35, 0xAA, 0x31, 0x90, 0x94, 0x00, 0x00, 0x00, 0x00 }; #include "mem/cartridge.h" -#include "video.h" #include "sound.h" #include "tima.h" +#include "video.h" #include "newstate.h" #include "gambatte.h" @@ -32,111 +32,59 @@ namespace gambatte { class FilterInfo; class Memory { - Cartridge cart; - unsigned char ioamhram[0x200]; - unsigned char cgbBios[0x900]; - unsigned char dmgBios[0x100]; - bool biosMode; - bool cgbSwitching; - bool agbMode; - bool gbIsCgb_; - bool stopped; - unsigned short &SP; - unsigned short &PC; - unsigned long basetime; - unsigned long halttime; - - MemoryCallback readCallback; - MemoryCallback writeCallback; - MemoryCallback execCallback; - CDCallback cdCallback; - void(*linkCallback)(); - - unsigned (*getInput)(); - unsigned long divLastUpdate; - unsigned long lastOamDmaUpdate; - - InterruptRequester intreq; - Tima tima; - LCD display; - PSG sound; - - unsigned short dmaSource; - unsigned short dmaDestination; - unsigned char oamDmaPos; - unsigned char serialCnt; - bool blanklcd; - - bool LINKCABLE; - bool linkClockTrigger; - - void decEventCycles(IntEventId eventId, unsigned long dec); - - void oamDmaInitSetup(); - void updateOamDma(unsigned long cycleCounter); - void startOamDma(unsigned long cycleCounter); - void endOamDma(unsigned long cycleCounter); - const unsigned char * oamDmaSrcPtr() const; - - unsigned nontrivial_ff_read(unsigned P, unsigned long cycleCounter); - unsigned nontrivial_read(unsigned P, unsigned long cycleCounter); - void nontrivial_ff_write(unsigned P, unsigned data, unsigned long cycleCounter); - void nontrivial_write(unsigned P, unsigned data, unsigned long cycleCounter); - - unsigned nontrivial_peek(unsigned P); - unsigned nontrivial_ff_peek(unsigned P); - - void updateSerial(unsigned long cc); - void updateTimaIrq(unsigned long cc); - void updateIrqs(unsigned long cc); - - bool isDoubleSpeed() const { return display.isDoubleSpeed(); } - public: explicit Memory(unsigned short &sp, unsigned short &pc); - bool loaded() const { return cart.loaded(); } - unsigned curRomBank() const { return cart.curRomBank(); } - char const * romTitle() const { return cart.romTitle(); } - - int debugGetLY() const { return display.debugGetLY(); } - + bool loaded() const { return cart_.loaded(); } + unsigned char curRomBank() const { return cart_.curRomBank(); } + char const * romTitle() const { return cart_.romTitle(); } + int debugGetLY() const { return lcd_.debugGetLY(); } void setStatePtrs(SaveState &state); - void loadState(const SaveState &state/*, unsigned long oldCc*/); - void loadSavedata(char const *data) { cart.loadSavedata(data); } - int saveSavedataLength() {return cart.saveSavedataLength(); } - void saveSavedata(char *dest) { cart.saveSavedata(dest); } + void loadState(SaveState const &state); + void loadSavedata(char const *data) { cart_.loadSavedata(data); } + int saveSavedataLength() {return cart_.saveSavedataLength(); } + void saveSavedata(char *dest) { cart_.saveSavedata(dest); } void updateInput(); - unsigned char* cgbBiosBuffer() { return (unsigned char*)cgbBios; } - unsigned char* dmgBiosBuffer() { return (unsigned char*)dmgBios; } + unsigned char* cgbBiosBuffer() { return (unsigned char*)cgbBios_; } + unsigned char* dmgBiosBuffer() { return (unsigned char*)dmgBios_; } bool gbIsCgb() { return gbIsCgb_; } bool getMemoryArea(int which, unsigned char **data, int *length); // { return cart.getMemoryArea(which, data, length); } unsigned long stop(unsigned long cycleCounter); - bool isCgb() const { return display.isCgb(); } - bool ime() const { return intreq.ime(); } - bool halted() const { return intreq.halted(); } - unsigned long nextEventTime() const { return intreq.minEventTime(); } + bool isCgb() const { return lcd_.isCgb(); } + bool ime() const { return intreq_.ime(); } + bool halted() const { return intreq_.halted(); } + unsigned long nextEventTime() const { return intreq_.minEventTime(); } + void setLayers(unsigned mask) { lcd_.setLayers(mask); } + bool isActive() const { return intreq_.eventTime(intevent_end) != disabled_time; } - void setLayers(unsigned mask) { display.setLayers(mask); } + long cyclesSinceBlit(unsigned long cc) const { + if (cc < intreq_.eventTime(intevent_blit)) + return -1; - bool isActive() const { return intreq.eventTime(intevent_end) != disabled_time; } - - long cyclesSinceBlit(const unsigned long cc) const { - return cc < intreq.eventTime(intevent_blit) ? -1 : static_cast((cc - intreq.eventTime(intevent_blit)) >> isDoubleSpeed()); + return (cc - intreq_.eventTime(intevent_blit)) >> isDoubleSpeed(); } - void halt(unsigned long cycleCounter) { halttime = cycleCounter; intreq.halt(); } - void ei(unsigned long cycleCounter) { if (!ime()) { intreq.ei(cycleCounter); } } + void halt(unsigned long cycleCounter) { halttime_ = cycleCounter; intreq_.halt(); } + void ei(unsigned long cycleCounter) { if (!ime()) { intreq_.ei(cycleCounter); } } + void di() { intreq_.di(); } - void di() { intreq.di(); } + unsigned readBios(unsigned p) { + if (gbIsCgb_) { + if (agbMode_ && p >= 0xF3 && p < 0x100) { + return (agbOverride[p - 0xF3] + cgbBios_[p]) & 0xFF; + } + return cgbBios_[p]; + } + return dmgBios_[p]; + } - unsigned ff_read(const unsigned P, const unsigned long cycleCounter) { - if (readCallback) - readCallback(P, (cycleCounter - basetime) >> 1); - return P < 0x80 ? nontrivial_ff_read(P, cycleCounter) : ioamhram[P + 0x100]; + unsigned ff_read(unsigned p, unsigned long cc) { + if (readCallback_) + readCallback_(p, (cc - basetime_) >> 1); + return p < 0x80 ? nontrivial_ff_read(p, cc) : ioamhram_[p + 0x100]; } struct CDMapResult @@ -145,30 +93,30 @@ public: unsigned addr; }; - CDMapResult CDMap(const unsigned P) const + CDMapResult CDMap(const unsigned p) const { - if(P<0x4000) + if(p < 0x4000) { - CDMapResult ret = { eCDLog_AddrType_ROM, P }; + CDMapResult ret = { eCDLog_AddrType_ROM, p }; return ret; } - else if(P<0x8000) + else if(p < 0x8000) { - unsigned bank = cart.rmem(P>>12) - cart.rmem(0); - unsigned addr = P+bank; + unsigned bank = cart_.rmem(p >> 12) - cart_.rmem(0); + unsigned addr = p + bank; CDMapResult ret = { eCDLog_AddrType_ROM, addr }; return ret; } - else if(P<0xA000) {} - else if(P<0xC000) + else if(p < 0xA000) {} + else if(p < 0xC000) { - if(cart.wsrambankptr()) + if(cart_.wsrambankptr()) { //not bankable. but. we're not sure how much might be here unsigned char *data; int length; - bool has = cart.getMemoryArea(3,&data,&length); - unsigned addr = P&(length-1); + bool has = cart_.getMemoryArea(3,&data,&length); + unsigned addr = p & (length-1); if(has && length!=0) { CDMapResult ret = { eCDLog_AddrType_CartRAM, addr }; @@ -176,14 +124,14 @@ public: } } } - else if(P<0xE000) + else if(p < 0xE000) { - unsigned bank = cart.wramdata(P >> 12 & 1) - cart.wramdata(0); - unsigned addr = (P&0xFFF)+bank; + unsigned bank = cart_.wramdata(p >> 12 & 1) - cart_.wramdata(0); + unsigned addr = (p & 0xFFF) + bank; CDMapResult ret = { eCDLog_AddrType_WRAM, addr }; return ret; } - else if(P<0xFF80) {} + else if(p < 0xFF80) {} else { ////this is just for debugging, really, it's pretty useless @@ -195,157 +143,190 @@ public: return ret; } - - unsigned readBios(const unsigned P) { - if (gbIsCgb_) { - if (agbMode && P >= 0xF3 && P < 0x100) { - return (agbOverride[P - 0xF3] + cgbBios[P]) & 0xFF; - } - return cgbBios[P]; - } - return dmgBios[P]; - } - - unsigned read(const unsigned P, const unsigned long cycleCounter) { - if (readCallback) - readCallback(P, (cycleCounter - basetime) >> 1); - bool biosRange = ((!gbIsCgb_ && P < 0x100) || (gbIsCgb_ && P < 0x900 && (P < 0x100 || P >= 0x200))); - if(biosMode) { + unsigned read(unsigned p, unsigned long cc) { + if (readCallback_) + readCallback_(p, (cc - basetime_) >> 1); + bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); + if(biosMode_) { if (biosRange) - return readBios(P); + return readBios(p); } - else - { - if(cdCallback) - { - CDMapResult map = CDMap(P); - if(map.type != eCDLog_AddrType_None) - cdCallback(map.addr,map.type,eCDLog_Flags_Data); - } + else if(cdCallback_) { + CDMapResult map = CDMap(p); + if(map.type != eCDLog_AddrType_None) + cdCallback_(map.addr, map.type, eCDLog_Flags_Data); } - return cart.rmem(P >> 12) ? cart.rmem(P >> 12)[P] : nontrivial_read(P, cycleCounter); + return cart_.rmem(p >> 12) ? cart_.rmem(p >> 12)[p] : nontrivial_read(p, cc); } - unsigned read_excb(const unsigned P, const unsigned long cycleCounter, bool first) { - if (execCallback) - execCallback(P, (cycleCounter - basetime) >> 1); - bool biosRange = ((!gbIsCgb_ && P < 0x100) || (gbIsCgb_ && P < 0x900 && (P < 0x100 || P >= 0x200))); - if (biosMode) { + unsigned read_excb(unsigned p, unsigned long cc, bool first) { + if (execCallback_) + execCallback_(p, (cc - basetime_) >> 1); + bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); + if (biosMode_) { if(biosRange) - return readBios(P); + return readBios(p); } - else - { - if(cdCallback) - { - CDMapResult map = CDMap(P); - if(map.type != eCDLog_AddrType_None) - cdCallback(map.addr,map.type,first?eCDLog_Flags_ExecFirst : eCDLog_Flags_ExecOperand); - } - } - return cart.rmem(P >> 12) ? cart.rmem(P >> 12)[P] : nontrivial_read(P, cycleCounter); - } - - unsigned peek(const unsigned P) { - if (biosMode && ((!gbIsCgb_ && P < 0x100) || (gbIsCgb_ && P < 0x900 && (P < 0x100 || P >= 0x200)))) { - return readBios(P); - } - return cart.rmem(P >> 12) ? cart.rmem(P >> 12)[P] : nontrivial_peek(P); - } - - void write_nocb(const unsigned P, const unsigned data, const unsigned long cycleCounter) { - if (cart.wmem(P >> 12)) { - cart.wmem(P >> 12)[P] = data; - } else - nontrivial_write(P, data, cycleCounter); - } - - void write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { - if (cart.wmem(P >> 12)) { - cart.wmem(P >> 12)[P] = data; - } else - nontrivial_write(P, data, cycleCounter); - if (writeCallback) - writeCallback(P, (cycleCounter - basetime) >> 1); - if(cdCallback && !biosMode) - { - CDMapResult map = CDMap(P); + else if(cdCallback_) { + CDMapResult map = CDMap(p); if(map.type != eCDLog_AddrType_None) - cdCallback(map.addr,map.type,eCDLog_Flags_Data); + cdCallback_(map.addr, map.type, first ? eCDLog_Flags_ExecFirst : eCDLog_Flags_ExecOperand); + } + return cart_.rmem(p >> 12) ? cart_.rmem(p >> 12)[p] : nontrivial_read(p, cc); + } + + unsigned peek(unsigned p) { + bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); + if (biosMode_ && biosRange) { + return readBios(p); + } + return cart_.rmem(p >> 12) ? cart_.rmem(p >> 12)[p] : nontrivial_peek(p); + } + + void write_nocb(unsigned p, unsigned data, unsigned long cc) { + if (cart_.wmem(p >> 12)) { + cart_.wmem(p >> 12)[p] = data; + } else + nontrivial_write(p, data, cc); + } + + void write(unsigned p, unsigned data, unsigned long cc) { + if (cart_.wmem(p >> 12)) { + cart_.wmem(p >> 12)[p] = data; + } else + nontrivial_write(p, data, cc); + if (writeCallback_) + writeCallback_(p, (cc - basetime_) >> 1); + if(cdCallback_ && !biosMode_) { + CDMapResult map = CDMap(p); + if(map.type != eCDLog_AddrType_None) + cdCallback_(map.addr, map.type, eCDLog_Flags_Data); } } - void ff_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { - if (P - 0x80u < 0x7Fu) { - ioamhram[P + 0x100] = data; + void ff_write(unsigned p, unsigned data, unsigned long cc) { + if (p - 0x80u < 0x7Fu) { + ioamhram_[p + 0x100] = data; } else - nontrivial_ff_write(P, data, cycleCounter); - if (writeCallback) - writeCallback(P, (cycleCounter - basetime) >> 1); - if(cdCallback && !biosMode) + nontrivial_ff_write(p, data, cc); + if (writeCallback_) + writeCallback_(0xff00 + p, (cc - basetime_) >> 1); + if(cdCallback_ && !biosMode_) { - CDMapResult map = CDMap(P); + CDMapResult map = CDMap(0xff00 + p); if(map.type != eCDLog_AddrType_None) - cdCallback(map.addr,map.type,eCDLog_Flags_Data); + cdCallback_(map.addr, map.type, eCDLog_Flags_Data); } } unsigned long event(unsigned long cycleCounter); unsigned long resetCounters(unsigned long cycleCounter); - LoadRes loadROM(char const *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); void setInputGetter(unsigned (*getInput)()) { - this->getInput = getInput; + getInput_ = getInput; } void setReadCallback(MemoryCallback callback) { - this->readCallback = callback; + this->readCallback_ = callback; } void setWriteCallback(MemoryCallback callback) { - this->writeCallback = callback; + this->writeCallback_ = callback; } void setExecCallback(MemoryCallback callback) { - this->execCallback = callback; + this->execCallback_ = callback; } void setCDCallback(CDCallback cdc) { - this->cdCallback = cdc; + this->cdCallback_ = cdc; } void setScanlineCallback(void (*callback)(), int sl) { - display.setScanlineCallback(callback, sl); + lcd_.setScanlineCallback(callback, sl); } void setRTCCallback(std::uint32_t (*callback)()) { - cart.setRTCCallback(callback); + cart_.setRTCCallback(callback); } void setLinkCallback(void(*callback)()) { - this->linkCallback = callback; + this->linkCallback_ = callback; } - void setBasetime(unsigned long cc) { basetime = cc; } void setEndtime(unsigned long cc, unsigned long inc); + void setBasetime(unsigned long cc) { basetime_ = cc; } - void setSoundBuffer(uint_least32_t *const buf) { sound.setBuffer(buf); } + void setSoundBuffer(uint_least32_t *buf) { psg_.setBuffer(buf); } std::size_t fillSoundBuffer(unsigned long cc); - void setVideoBuffer(uint_least32_t *const videoBuf, const std::ptrdiff_t pitch) { - display.setVideoBuffer(videoBuf, pitch); + void setVideoBuffer(uint_least32_t *videoBuf, std::ptrdiff_t pitch) { + lcd_.setVideoBuffer(videoBuf, pitch); } void setDmgPaletteColor(int palNum, int colorNum, unsigned long rgb32) { - display.setDmgPaletteColor(palNum, colorNum, rgb32); + lcd_.setDmgPaletteColor(palNum, colorNum, rgb32); } void setCgbPalette(unsigned *lut); void blackScreen() { - display.blackScreen(); + lcd_.blackScreen(); } int linkStatus(int which); +private: + Cartridge cart_; + unsigned char ioamhram_[0x200]; + unsigned char cgbBios_[0x900]; + unsigned char dmgBios_[0x100]; + unsigned (*getInput_)(); + unsigned long divLastUpdate_; + unsigned long lastOamDmaUpdate_; + InterruptRequester intreq_; + Tima tima_; + LCD lcd_; + PSG psg_; + unsigned short dmaSource_; + unsigned short dmaDestination_; + unsigned char oamDmaPos_; + unsigned char serialCnt_; + bool blanklcd_; + bool biosMode_; + bool cgbSwitching_; + bool agbMode_; + bool gbIsCgb_; + unsigned short &sp_; + unsigned short &pc_; + unsigned long basetime_; + unsigned long halttime_; + bool stopped_; + + MemoryCallback readCallback_; + MemoryCallback writeCallback_; + MemoryCallback execCallback_; + CDCallback cdCallback_; + void(*linkCallback_)(); + bool LINKCABLE_; + bool linkClockTrigger_; + + void decEventCycles(IntEventId eventId, unsigned long dec); + void oamDmaInitSetup(); + void updateOamDma(unsigned long cycleCounter); + void startOamDma(unsigned long cycleCounter); + void endOamDma(unsigned long cycleCounter); + unsigned char const * oamDmaSrcPtr() const; + unsigned nontrivial_ff_read(unsigned p, unsigned long cycleCounter); + unsigned nontrivial_read(unsigned p, unsigned long cycleCounter); + void nontrivial_ff_write(unsigned p, unsigned data, unsigned long cycleCounter); + void nontrivial_write(unsigned p, unsigned data, unsigned long cycleCounter); + unsigned nontrivial_peek(unsigned p); + unsigned nontrivial_ff_peek(unsigned p); + void updateSerial(unsigned long cc); + void updateTimaIrq(unsigned long cc); + void updateIrqs(unsigned long cc); + bool isDoubleSpeed() const { return lcd_.isDoubleSpeed(); } + +public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index b4489d12af..e56290685d 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -70,6 +70,7 @@ struct SaveState { unsigned long lastOamDmaUpdate; unsigned long minIntTime; unsigned long unhaltTime; + unsigned long halttime; unsigned short rombank; unsigned short dmaSource; unsigned short dmaDestination; @@ -84,6 +85,7 @@ struct SaveState { unsigned char /*bool*/ cgbSwitching; unsigned char /*bool*/ agbMode; unsigned char /*bool*/ gbIsCgb; + unsigned char /*bool*/ stopped; } mem; struct PPU { diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index e9b8c6dbbc6f4ba0eb3dc1880951964f17aa6df6..18ca122371aa4d7b04eb68c038c45c11b69fbab5 100644 GIT binary patch delta 61850 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 delta 61844 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 From cd1ab99f54d7121e754a9d49d3d72f17203771a4 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 26 May 2019 09:16:53 -0400 Subject: [PATCH 095/138] Vectrex: 6522 work --- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 30 ++--- .../Consoles/GCE/Vectrex/Audio.cs | 28 ++--- .../Consoles/GCE/Vectrex/HW_Registers.cs | 115 +++++++++++++++++- .../GCE/Vectrex/Mappers/Mapper_Default.cs | 2 +- .../Consoles/GCE/Vectrex/MemoryMap.cs | 13 +- .../GCE/Vectrex/VectrexHawk.IEmulator.cs | 6 +- .../GCE/Vectrex/VectrexHawk.IStatable.cs | 35 ++++-- .../Consoles/GCE/Vectrex/VectrexHawk.cs | 7 +- 8 files changed, 181 insertions(+), 55 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index feb963cf83..9de5aa7143 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -633,24 +633,24 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { ser.BeginSection("MC6809"); - ser.Sync("IN_SYNC", ref IN_SYNC); - ser.Sync("NMIPending", ref NMIPending); - ser.Sync("FIRQPending", ref FIRQPending); - ser.Sync("IRQPending", ref IRQPending); + ser.Sync(nameof(IN_SYNC), ref IN_SYNC); + ser.Sync(nameof(NMIPending), ref NMIPending); + ser.Sync(nameof(FIRQPending), ref FIRQPending); + ser.Sync(nameof(IRQPending), ref IRQPending); - ser.Sync("indexed_op", ref indexed_op); - ser.Sync("indexed_reg", ref indexed_reg); - ser.Sync("indexed_op_reg", ref indexed_op_reg); - ser.Sync("temp", ref temp); + ser.Sync(nameof(indexed_op), ref indexed_op); + ser.Sync(nameof(indexed_reg), ref indexed_reg); + ser.Sync(nameof(indexed_op_reg), ref indexed_op_reg); + ser.Sync(nameof(temp), ref temp); - ser.Sync("instr_pntr", ref instr_pntr); - ser.Sync("cur_instr", ref cur_instr, false); - ser.Sync("opcode_see", ref opcode_see); - ser.Sync("IRQS", ref IRQS); - ser.Sync("irq_pntr", ref irq_pntr); + ser.Sync(nameof(instr_pntr), ref instr_pntr); + ser.Sync(nameof(cur_instr), ref cur_instr, false); + ser.Sync(nameof(opcode_see), ref opcode_see); + ser.Sync(nameof(IRQS), ref IRQS); + ser.Sync(nameof(irq_pntr), ref irq_pntr); - ser.Sync("Regs", ref Regs, false); - ser.Sync("TotalExecutedCycles", ref TotalExecutedCycles); + ser.Sync(nameof(Regs), ref Regs, false); + ser.Sync(nameof(TotalExecutedCycles), ref TotalExecutedCycles); ser.EndSection(); } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs index 1af35bb959..725db7cd61 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Audio.cs @@ -57,21 +57,21 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { ser.BeginSection("PSG"); - ser.Sync("Register", ref Register, false); + ser.Sync(nameof(Register), ref Register, false); - ser.Sync("psg_clock", ref psg_clock); - ser.Sync("clock_A", ref clock_A); - ser.Sync("clock_B", ref clock_B); - ser.Sync("clock_C", ref clock_C); - ser.Sync("noise_clock", ref noise_clock); - ser.Sync("env_clock", ref env_clock); - ser.Sync("A_up", ref A_up); - ser.Sync("B_up", ref B_up); - ser.Sync("C_up", ref C_up); - ser.Sync("noise", ref noise); - ser.Sync("env_E", ref env_E); - ser.Sync("E_up_down", ref E_up_down); - ser.Sync("port_sel", ref port_sel); + ser.Sync(nameof(psg_clock), ref psg_clock); + ser.Sync(nameof(clock_A), ref clock_A); + ser.Sync(nameof(clock_B), ref clock_B); + ser.Sync(nameof(clock_C), ref clock_C); + ser.Sync(nameof(noise_clock), ref noise_clock); + ser.Sync(nameof(env_clock), ref env_clock); + ser.Sync(nameof(A_up), ref A_up); + ser.Sync(nameof(B_up), ref B_up); + ser.Sync(nameof(C_up), ref C_up); + ser.Sync(nameof(noise), ref noise); + ser.Sync(nameof(env_E), ref env_E); + ser.Sync(nameof(E_up_down), ref E_up_down); + ser.Sync(nameof(port_sel), ref port_sel); sync_psg_state(); diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs index 7c911c601c..19372a2782 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs @@ -6,19 +6,27 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Consoles.Vectrex { // MOS6522 Interface - + /* Port B writes to both the PSG and the DAC simultaneously * The trick here is that bits 3 and 4 both zero represent PSG disabled * So it's easy to not interfere with the PSG * However, the DAC will always receive some input, controlled by the multiplexer and selector bits * BIOS functions keep everything in order */ + public partial class VectrexHawk { public byte dir_dac, dir_ctrl; public byte portB_ret, portA_ret; + public byte t1_low, t1_high; + public int t1_counter; + public bool t1_on, t1_shot_done; + public bool PB7; + + public byte int_en, int_fl, aux_ctrl; + public byte Read_Registers(int addr) { byte ret = 0; @@ -27,9 +35,15 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { case 0x0: ret = portB_ret; + + int_fl &= 0xE7; + update_int_fl(); break; case 0x1: ret = portA_ret; + + int_fl &= 0xFC; + update_int_fl(); break; case 0x2: ret = dir_ctrl; @@ -38,26 +52,38 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex ret = dir_dac; break; case 0x4: + ret = (byte)(t1_counter & 0xFF); + + int_fl &= 0xBF; + update_int_fl(); break; case 0x5: + ret = (byte)((t1_counter >> 8) & 0xFF); break; case 0x6: + ret = t1_low; break; case 0x7: + ret = t1_high; break; case 0x8: break; case 0x9: break; case 0xA: + int_fl &= 0xFB; + update_int_fl(); break; case 0xB: + ret = aux_ctrl; break; case 0xC: break; case 0xD: + ret = int_fl; break; case 0xE: + ret = int_en; break; case 0xF: break; @@ -73,9 +99,15 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { case 0x0: wrt_val = (byte)(value & dir_ctrl); + + int_fl &= 0xE7; + update_int_fl(); break; case 0x1: wrt_val = (byte)(value & dir_dac); + + int_fl &= 0xFC; + update_int_fl(); break; case 0x2: dir_ctrl = value; @@ -84,26 +116,56 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex dir_dac = value; break; case 0x4: + t1_low = value; break; case 0x5: + t1_high = value; + t1_counter = (t1_high << 8) | t1_low; + t1_on = true; + t1_shot_done = false; + if (aux_ctrl.Bit(7)) { PB7 = true; } + + int_fl &= 0xBF; + update_int_fl(); break; case 0x6: + t1_low = value; break; case 0x7: + t1_high = value; + + int_fl &= 0xBF; + update_int_fl(); break; case 0x8: break; case 0x9: break; case 0xA: + int_fl &= 0xFB; + update_int_fl(); break; case 0xB: + aux_ctrl = value; break; case 0xC: break; case 0xD: + // writing to flags does not clear bit 7 directly + int_fl &= (byte)~(value & 0x7F); + + update_int_fl(); break; case 0xE: + // bit 7 is always 0 + if (value.Bit(7)) + { + int_en |= (byte)(value & 0x7F); + } + else + { + int_en &= (byte)((~value) & 0x7F); + } break; case 0xF: break; @@ -114,5 +176,56 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { } + + public void timer_1_tick() + { + if (t1_on) + { + t1_counter--; + + if (t1_counter == 0) + { + if (aux_ctrl.Bit(6)) + { + t1_counter = (t1_high << 8) | t1_low; + + int_fl |= 0x40; + //if (int_en.Bit(6)) { cpu.IRQPending = true; } + + if (aux_ctrl.Bit(7)) { PB7 = !PB7; } + } + else + { + t1_counter = 0xFFFF; + + if (!t1_shot_done) + { + int_fl |= 0x40; + //if (int_en.Bit(6)) { cpu.IRQPending = true; } + if (aux_ctrl.Bit(7)) { PB7 = false; } + } + t1_shot_done = true; + } + } + } + } + + public void timer_2_tick() + { + + } + + public void update_int_fl() + { + // bit 7 is (IF.bit(X) & IE.bit(X)) OR'ed together for each bit + bool test = false; + + for (int i = 0; i < 7; i++) + { + test |= int_en.Bit(i) & int_fl.Bit(i); + } + + int_fl |= (byte)(test ? 0x80 : 0); + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Mappers/Mapper_Default.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Mappers/Mapper_Default.cs index b42b358b86..9d1afc0418 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Mappers/Mapper_Default.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/Mappers/Mapper_Default.cs @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public override byte ReadMemory(ushort addr) { - return 0xFF; + return Core._rom[addr]; } public override byte PeekMemory(ushort addr) diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs index eddf0b6f67..dc94847b60 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs @@ -5,10 +5,13 @@ using BizHawk.Emulation.Common; /* - Fill in the memory map in this space for easy reference - ex: - 0x0000 - 0x0FFF RAM - etc + 0x0000 - 0x7FFF ROM + 0x8000 - 0xC7FF Unmapped + 0xC800 - 0xCFFF RAM (and shadows) + 0xD000 - 0XD7FF 6522 (and shadows) + 0xD800 - 0xDFFF 6522 + RAM + 0xE000 - 0xEFFF Minestorm + 0xF000 - 0xFFFF BIOS */ namespace BizHawk.Emulation.Cores.Consoles.Vectrex @@ -21,7 +24,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex if (addr < 0x8000) { - return 0xFF; + return mapper.ReadMemory(addr); } else if (addr < 0xC800) { diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs index 5f91994a35..e0ea80cf29 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IEmulator.cs @@ -44,9 +44,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public void do_frame() { - for (int i = 0; i < 4500; i++) + for (int i = 0; i < 45000; i++) { - cpu.ExecuteOne(); + timer_1_tick(); + timer_2_tick(); + cpu.ExecuteOne(); } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs index 5efa05d3b2..4c6effe1e5 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs @@ -38,14 +38,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex return ms.ToArray(); } - // here is where all your savestated stuff will be called - // make sure every variable you make is savestated - // also all the components with their own savestate functions need to be called form here - // for normal single variables the format is: - // ser.Sync("var_name", ref var_name); - - // for arrays, use: - // ser.Sync("var_name", ref var_name, false); private void SyncState(Serializer ser) { byte[] core = null; @@ -61,14 +53,35 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex serialport.SyncState(ser); audio.SyncState(ser); - ser.BeginSection("VIC20"); + ser.BeginSection("VECTREX"); - ser.Sync("RAM", ref RAM, false); + ser.Sync(nameof(RAM), ref RAM, false); + + ser.Sync(nameof(dir_dac), ref dir_dac); + ser.Sync(nameof(dir_ctrl), ref dir_ctrl); + + ser.Sync(nameof(portB_ret), ref portB_ret); + ser.Sync(nameof(portA_ret), ref portA_ret); + + ser.Sync(nameof(t1_low), ref t1_low); + ser.Sync(nameof(t1_high), ref t1_high); + ser.Sync(nameof(t1_counter), ref t1_counter); + ser.Sync(nameof(t1_on), ref t1_on); + ser.Sync(nameof(t1_shot_done), ref t1_shot_done); + ser.Sync(nameof(PB7), ref PB7); + + ser.Sync(nameof(int_en), ref int_en); + ser.Sync(nameof(int_fl), ref int_fl); + ser.Sync(nameof(aux_ctrl), ref aux_ctrl); + + ser.Sync(nameof(_frame), ref _frame); + ser.Sync(nameof(_lagcount), ref _lagcount); + ser.Sync(nameof(_islag), ref _islag); // probably a better way to do this if (cart_RAM != null) { - ser.Sync("cart_RAM", ref cart_RAM, false); + ser.Sync(nameof(cart_RAM), ref cart_RAM, false); } ser.EndSection(); diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs index 9f9bc9b929..bbf36349b5 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs @@ -23,8 +23,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public byte[] _bios; public readonly byte[] _rom; - public readonly byte[] header = new byte[0x50]; - public byte[] cart_RAM; public bool has_bat; @@ -67,10 +65,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex Bios = comm.CoreFileProvider.GetFirmware("Vectrex", "Bios", true, "BIOS Not Found, Cannot Load"); _bios = Bios; - Buffer.BlockCopy(rom, 0x100, header, 0, 0x50); - string hash_md5 = null; - hash_md5 = "md5:" + rom.HashMD5(0, rom.Length); - Console.WriteLine(hash_md5); + Console.WriteLine("SHA1:" + rom.HashSHA1(0, rom.Length)); _rom = rom; Setup_Mapper(); From 9d266ce281bcbca6ea8fc66ff3081ff10c1db499 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 19:19:39 +0200 Subject: [PATCH 096/138] libgambatte: hang on invalid opcode --- libgambatte/src/cpu.cpp | 68 ++++++++++++++++++++++++++++--------- output/dll/libgambatte.dll | Bin 168448 -> 168448 bytes 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/libgambatte/src/cpu.cpp b/libgambatte/src/cpu.cpp index 4032210208..0e820e1dec 100644 --- a/libgambatte/src/cpu.cpp +++ b/libgambatte/src/cpu.cpp @@ -1701,9 +1701,14 @@ void CPU::process(unsigned long const cycles) { break; - case 0xD3: /*doesn't exist*/ - skip_ = true; + case 0xD3: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; // call nc,nn (24;12 cycles): @@ -1770,9 +1775,14 @@ void CPU::process(unsigned long const cycles) { break; - case 0xDB: /*doesn't exist*/ - skip_ = true; + case 0xDB: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; // call z,nn (24;12 cycles): @@ -1787,10 +1797,14 @@ void CPU::process(unsigned long const cycles) { } break; - - case 0xDD: /*doesn't exist*/ - skip_ = true; + case 0xDD: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; case 0xDE: @@ -1826,10 +1840,16 @@ void CPU::process(unsigned long const cycles) { case 0xE2: FF_WRITE(c, a); break; - case 0xE3: - case 0xE4: /*doesn't exist*/ - skip_ = true; + + case 0xE3: + case 0xE4: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; case 0xE5: @@ -1874,11 +1894,17 @@ void CPU::process(unsigned long const cycles) { } break; + case 0xEB: case 0xEC: - case 0xED: /*doesn't exist*/ - skip_ = true; + case 0xED: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; case 0xEE: @@ -1927,9 +1953,14 @@ void CPU::process(unsigned long const cycles) { mem_.di(); break; - case 0xF4: /*doesn't exist*/ - skip_ = true; + case 0xF4: // not specified. should freeze. mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; case 0xF5: @@ -1994,9 +2025,14 @@ void CPU::process(unsigned long const cycles) { break; case 0xFC: - case 0xFD: /*doesn't exist*/ - skip_ = true; + case 0xFD: // not specified. should freeze mem_.di(); + cycleCounter = mem_.stop(cycleCounter); + + if (cycleCounter < mem_.nextEventTime()) { + unsigned long cycles = mem_.nextEventTime() - cycleCounter; + cycleCounter += cycles + (-cycles & 3); + } break; case 0xFE: { diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 18ca122371aa4d7b04eb68c038c45c11b69fbab5..cf409b31f31fb4773f78ea157fbbd9d3d657386d 100644 GIT binary patch delta 27536 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 delta 27511 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 From ca31e9ad72949ef9218bba546b7b79885c75abb6 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 19:29:17 +0200 Subject: [PATCH 097/138] libgambatte: Non-atomic interrupt handling --- libgambatte/src/initstate.cpp | 4 ++-- libgambatte/src/memory.cpp | 30 ++++++++++++++++-------------- libgambatte/src/memory.h | 4 ---- libgambatte/src/video.cpp | 17 ----------------- libgambatte/src/video.h | 1 - output/dll/libgambatte.dll | Bin 168448 -> 168448 bytes 6 files changed, 18 insertions(+), 38 deletions(-) diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index ce0b7b0905..d147eb03d6 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1107,9 +1107,9 @@ static void setInitialDmgIoamhram(unsigned char ioamhram[]) { static unsigned char const ffxxDump[0x100] = { 0xCF, 0x00, 0x7E, 0xFF, 0xD3, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, - 0x80, 0xBF, 0xF3, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, + 0x80, 0x3F, 0x00, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, 0xFF, 0xBF, 0x7F, 0xFF, 0x9F, 0xFF, 0xBF, 0xFF, - 0xFF, 0x00, 0x00, 0xBF, 0x77, 0xF3, 0xF1, 0xFF, + 0xFF, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x71, 0x72, 0xD5, 0x91, 0x58, 0xBB, 0x2A, 0xFA, 0xCF, 0x3C, 0x54, 0x75, 0x48, 0xCF, 0x8F, 0xD9, diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 54eea33844..5c85ccebeb 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -295,33 +295,35 @@ unsigned long Memory::event(unsigned long cc) { } if (ime()) { - unsigned address; - cc += 12; - lcd_.update(cc); - sp_ = (sp_ - 2) & 0xFFFF; - write(sp_ + 1, pc_ >> 8, cc); - unsigned ie = intreq_.iereg(); + + sp_ = (sp_ - 1) & 0xFFFF; + write(sp_, pc_ >> 8, cc); cc += 4; - lcd_.update(cc); + + updateIrqs(cc); + unsigned const pendingIrqs = intreq_.pendingIrqs(); + + sp_ = (sp_ - 1) & 0xFFFF; write(sp_, pc_ & 0xFF, cc); - const unsigned pendingIrqs = ie & intreq_.ifreg(); - cc += 4; - lcd_.update(cc); - const unsigned n = pendingIrqs & -pendingIrqs; + cc += 2; + unsigned const n = pendingIrqs & -pendingIrqs; + unsigned address; if (n == 0) { address = 0; - } - else if (n < 8) { - static const unsigned char lut[] = { 0x40, 0x48, 0x48, 0x50 }; + } else if (n <= 4) { + static unsigned char const lut[] = { 0x40, 0x48, 0x48, 0x50 }; address = lut[n-1]; } else address = 0x50 + n; intreq_.ackIrq(n); + + cc += 2; + pc_ = address; } diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 4999e6d34c..c05b4cca05 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -268,10 +268,6 @@ public: void setCgbPalette(unsigned *lut); - void blackScreen() { - lcd_.blackScreen(); - } - int linkStatus(int which); private: diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index e96f285b2d..b8715f4c18 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -177,23 +177,6 @@ void LCD::copyCgbPalettesToDmg() { } } -void LCD::blackScreen() { - if (ppu_.cgb()) { - for (unsigned i = 0; i < 8 * 8; i += 2) { - ppu_.bgPalette()[i >> 1] = 0; - ppu_.spPalette()[i >> 1] = 0; - } - } - else { - for (unsigned i = 0; i < 4; i++) { - dmgColorsRgb32_[i] = 0; - } - for (unsigned i = 0; i < 8; i++) { - dmgColorsRgb32_[i + 4] = 0; - } - } -} - namespace { template diff --git a/libgambatte/src/video.h b/libgambatte/src/video.h index c13ca1ed53..b37beaa3e8 100644 --- a/libgambatte/src/video.h +++ b/libgambatte/src/video.h @@ -57,7 +57,6 @@ public: void setLayers(unsigned mask) { ppu_.setLayers(mask); } void setCgb(bool cgb); void copyCgbPalettesToDmg(); - void blackScreen(); int debugGetLY() const { return ppu_.lyCounter().ly(); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index cf409b31f31fb4773f78ea157fbbd9d3d657386d..1fb295ab0589a7be30a5dc37673499be7167f9e4 100644 GIT binary patch delta 21623 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 C|74#4 delta 21679 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 From d8c238c9fb5030f4bd3a2fa8f0837c9f9178457d Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 19:40:19 +0200 Subject: [PATCH 098/138] libgambatte: timar quirk accuracy --- libgambatte/src/memory.cpp | 6 +++--- libgambatte/src/tima.cpp | 4 ++-- libgambatte/src/tima.h | 2 +- output/dll/libgambatte.dll | Bin 168448 -> 168448 bytes 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 5c85ccebeb..7c20121b71 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -337,8 +337,8 @@ unsigned long Memory::stop(unsigned long cc) { cc += 4; if (ioamhram_[0x14D] & isCgb()) { - psg_.generateSamples(cc, isDoubleSpeed()); - lcd_.speedChange(cc); + psg_.generateSamples(cc + 4, isDoubleSpeed()); + lcd_.speedChange((cc + 7) & ~7); ioamhram_[0x14D] ^= 0x81; intreq_.setEventTime(ioamhram_[0x140] & lcdc_en ? lcd_.nextMode1IrqTime() @@ -686,7 +686,7 @@ void Memory::nontrivial_ff_write(unsigned const p, unsigned data, unsigned long break; case 0x07: data |= 0xF8; - tima_.setTac(data, cc, TimaInterruptRequester(intreq_), gbIsCgb_); + tima_.setTac(data, cc, TimaInterruptRequester(intreq_), agbMode_); break; case 0x0F: updateIrqs(cc); diff --git a/libgambatte/src/tima.cpp b/libgambatte/src/tima.cpp index aa4038821b..5b935c8a9c 100644 --- a/libgambatte/src/tima.cpp +++ b/libgambatte/src/tima.cpp @@ -117,7 +117,7 @@ void Tima::setTma(unsigned const data, unsigned long const cc, TimaInterruptRequ tma_ = data; } -void Tima::setTac(unsigned const data, unsigned long const cc, TimaInterruptRequester timaIrq, bool gbIsCgb) { +void Tima::setTac(unsigned const data, unsigned long const cc, TimaInterruptRequester timaIrq, bool agbFlag) { if (tac_ ^ data) { unsigned long nextIrqEventTime = timaIrq.nextIrqEventTime(); @@ -141,7 +141,7 @@ void Tima::setTac(unsigned const data, unsigned long const cc, TimaInterruptRequ if (data & 4) { unsigned long diff = cc - basetime_; - if (gbIsCgb) { + if (agbFlag) { if (((diff >> (timaClock[tac_ & 3] - 1)) & 1) == 1 && ((diff >> (timaClock[data & 3] - 1)) & 1) == 0) tima_++; } diff --git a/libgambatte/src/tima.h b/libgambatte/src/tima.h index 55bfe849ad..d1db0854b9 100644 --- a/libgambatte/src/tima.h +++ b/libgambatte/src/tima.h @@ -41,7 +41,7 @@ public: void resetCc(unsigned long oldCc, unsigned long newCc, TimaInterruptRequester timaIrq); void setTima(unsigned tima, unsigned long cc, TimaInterruptRequester timaIrq); void setTma(unsigned tma, unsigned long cc, TimaInterruptRequester timaIrq); - void setTac(unsigned tac, unsigned long cc, TimaInterruptRequester timaIrq, bool gbIsCgb); + void setTac(unsigned tac, unsigned long cc, TimaInterruptRequester timaIrq, bool agbFlag); void resTac(unsigned long cc, TimaInterruptRequester timaIrq); unsigned tima(unsigned long cc); void doIrqEvent(TimaInterruptRequester timaIrq); diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 1fb295ab0589a7be30a5dc37673499be7167f9e4..386ccdb45ad7526c2209a24dfee904bf9bb69626 100644 GIT binary patch delta 174 zcmZoz!qu>ZYXKvZ-TBQ-jJ%7q8kravT==&&$BQvA^oFx|G#)%4&cyKIT0Mx%-u&o? zM{l0*sl>6Si%iu#J&rf|cF*S1}Ag05pri8;I8= zGcl|Q1@RadU~)V_wg?da0LuM<%S}J$#v}!F%=TAqOxO4rwYMJ(Wh&NWZYXKwE!84ng7Kp1OlQtaKlp@Ec(cN?d;!L+<_X)jPuRxDGQsNLnO89kKmas}!5fIzBr`Fr z2?g;O7+`WdK(+`F{{YJUfXhuk=f)%jbjtQuZcNws7`3(^3}q_TWaQXxTF-P^2mtnW BI3NH3 From 7e851b19f3ec58ae5759a04e55699b44ad0340ba Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 26 May 2019 20:11:50 +0200 Subject: [PATCH 099/138] Gambatte core: unify DMG and CGB bios handling --- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 21 ++++-------- .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 14 ++------ libgambatte/include/gambatte.h | 3 +- libgambatte/src/cinterface.cpp | 10 ++---- libgambatte/src/cpu.h | 3 +- libgambatte/src/gambatte.cpp | 9 ++--- libgambatte/src/memory.cpp | 4 +++ libgambatte/src/memory.h | 31 +++++++++--------- output/dll/libgambatte.dll | Bin 168448 -> 168448 bytes 9 files changed, 35 insertions(+), 60 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index ad53a9b698..1790f04703 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -95,28 +95,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy throw new InvalidOperationException($"{nameof(LibGambatte.gambatte_load)}() returned non-zero (is this not a gb or gbc rom?)"); } + byte[] Bios; if ((flags & LibGambatte.LoadFlags.FORCE_DMG) == LibGambatte.LoadFlags.FORCE_DMG) { - byte[] Bios = comm.CoreFileProvider.GetFirmware("GB", "World", true, "BIOS Not Found, Cannot Load"); - + Bios = comm.CoreFileProvider.GetFirmware("GB", "World", true, "BIOS Not Found, Cannot Load"); IsCgb = false; - - if (LibGambatte.gambatte_loaddmgbios(GambatteState, Bios) != 0) - { - throw new InvalidOperationException($"{nameof(LibGambatte.gambatte_loaddmgbios)}() returned non-zero (bios error)"); - } } else { - byte[] Bios = comm.CoreFileProvider.GetFirmware("GBC", "World", true, "BIOS Not Found, Cannot Load"); - + Bios = comm.CoreFileProvider.GetFirmware("GBC", "World", true, "BIOS Not Found, Cannot Load"); IsCgb = true; - - if (LibGambatte.gambatte_loadgbcbios(GambatteState, Bios) != 0) - { - throw new InvalidOperationException($"{nameof(LibGambatte.gambatte_loadgbcbios)}() returned non-zero (bios error)"); - } } + if (LibGambatte.gambatte_loadbios(GambatteState, Bios, (uint)Bios.Length) != 0) + { + throw new InvalidOperationException($"{nameof(LibGambatte.gambatte_loadbios)}() returned non-zero (bios error)"); + } // set real default colors (before anyone mucks with them at all) PutSettings((GambatteSettings)settings ?? new GambatteSettings()); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index 1a05daea20..06cb95ece3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -60,22 +60,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy public static extern int gambatte_load(IntPtr core, byte[] romdata, uint length, long now, LoadFlags flags, uint div); ///

- /// Load GB BIOS image. + /// Load GB(C) BIOS image. /// /// opaque state pointer /// the bios data, can be disposed of once this function returns + /// length of romdata in bytes /// 0 on success, negative value on failure. [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int gambatte_loaddmgbios(IntPtr core, byte[] biosdata); - - /// - /// Load GBC BIOS image. - /// - /// opaque state pointer - /// the bios data, can be disposed of once this function returns - /// 0 on success, negative value on failure. - [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int gambatte_loadgbcbios(IntPtr core, byte[] biosdata); + public static extern int gambatte_loadbios(IntPtr core, byte[] biosdata, uint length); /// /// Emulates until at least 'samples' stereo sound samples are produced in the supplied buffer, diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 890574b48c..9d51b5edce 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -66,8 +66,7 @@ public: */ LoadRes load(char const *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); - int loadGBCBios(char const* biosfiledata); - int loadDMGBios(char const* biosfiledata); + int loadBios(char const* biosfiledata, std::size_t size); /** * Emulates until at least 'samples' audio samples are produced in the diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index d3bde8fc74..3cc461460d 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -35,15 +35,9 @@ GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelengt return ret; } -GBEXPORT int gambatte_loadgbcbios(GB* g, char const* biosfiledata) +GBEXPORT int gambatte_loadbios(GB* g, char const* biosfiledata, unsigned size) { - int ret = g->loadGBCBios(biosfiledata); - return ret; -} - -GBEXPORT int gambatte_loaddmgbios(GB* g, char const* biosfiledata) -{ - int ret = g->loadDMGBios(biosfiledata); + int ret = g->loadBios(biosfiledata, size); return ret; } diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 784646c5bb..5349514e05 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -95,8 +95,7 @@ public: mem_.setCgbPalette(lut); } - unsigned char* cgbBiosBuffer() { return mem_.cgbBiosBuffer(); } - unsigned char* dmgBiosBuffer() { return mem_.dmgBiosBuffer(); } + void setBios(char const *buffer, std::size_t size) { mem_.setBios(buffer, size); } bool gbIsCgb() { return mem_.gbIsCgb(); } unsigned char externalRead(unsigned short addr) {return mem_.peek(addr); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 691d64dd29..f182507608 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -148,13 +148,8 @@ LoadRes GB::load(char const *romfiledata, unsigned romfilelength, const std::uin return loadres; } -int GB::loadGBCBios(char const* biosfiledata) { - memcpy(p_->cpu.cgbBiosBuffer(), biosfiledata, 0x900); - return 0; -} - -int GB::loadDMGBios(char const* biosfiledata) { - memcpy(p_->cpu.dmgBiosBuffer(), biosfiledata, 0x100); +int GB::loadBios(char const* biosfiledata, std::size_t size) { + p_->cpu.setBios(biosfiledata, size); return 0; } diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 7c20121b71..48c8bfd948 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -30,6 +30,7 @@ Memory::Memory(unsigned short &sp, unsigned short &pc) , execCallback_(0) , cdCallback_(0) , linkCallback_(0) +, bios_(0) , getInput_(0) , divLastUpdate_(0) , lastOamDmaUpdate_(disabled_time) @@ -47,6 +48,9 @@ Memory::Memory(unsigned short &sp, unsigned short &pc) intreq_.setEventTime(144 * 456ul); intreq_.setEventTime(0); } +Memory::~Memory() { + delete []bios_; +} void Memory::setStatePtrs(SaveState &state) { state.mem.ioamhram.set(ioamhram_, sizeof ioamhram_); diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index c05b4cca05..64716ba79c 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -34,6 +34,7 @@ class FilterInfo; class Memory { public: explicit Memory(unsigned short &sp, unsigned short &pc); + ~Memory(); bool loaded() const { return cart_.loaded(); } unsigned char curRomBank() const { return cart_.curRomBank(); } @@ -46,8 +47,12 @@ public: void saveSavedata(char *dest) { cart_.saveSavedata(dest); } void updateInput(); - unsigned char* cgbBiosBuffer() { return (unsigned char*)cgbBios_; } - unsigned char* dmgBiosBuffer() { return (unsigned char*)dmgBios_; } + void setBios(char const *buffer, std::size_t size) { + delete []bios_; + bios_ = new unsigned char[size]; + memcpy(bios_, buffer, size); + biosSize_ = size; + } bool gbIsCgb() { return gbIsCgb_; } bool getMemoryArea(int which, unsigned char **data, int *length); // { return cart.getMemoryArea(which, data, length); } @@ -72,13 +77,10 @@ public: void di() { intreq_.di(); } unsigned readBios(unsigned p) { - if (gbIsCgb_) { - if (agbMode_ && p >= 0xF3 && p < 0x100) { - return (agbOverride[p - 0xF3] + cgbBios_[p]) & 0xFF; - } - return cgbBios_[p]; + if(agbMode_ && p >= 0xF3 && p < 0x100) { + return (agbOverride[p-0xF3] + bios_[p]) & 0xFF; } - return dmgBios_[p]; + return bios_[p]; } unsigned ff_read(unsigned p, unsigned long cc) { @@ -146,9 +148,8 @@ public: unsigned read(unsigned p, unsigned long cc) { if (readCallback_) readCallback_(p, (cc - basetime_) >> 1); - bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); if(biosMode_) { - if (biosRange) + if (p < biosSize_ && !(p >= 0x100 && p < 0x200)) return readBios(p); } else if(cdCallback_) { @@ -162,9 +163,8 @@ public: unsigned read_excb(unsigned p, unsigned long cc, bool first) { if (execCallback_) execCallback_(p, (cc - basetime_) >> 1); - bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); if (biosMode_) { - if(biosRange) + if(p < biosSize_ && !(p >= 0x100 && p < 0x200)) return readBios(p); } else if(cdCallback_) { @@ -176,8 +176,7 @@ public: } unsigned peek(unsigned p) { - bool biosRange = ((!gbIsCgb_ && p < 0x100) || (gbIsCgb_ && p < 0x900 && (p < 0x100 || p >= 0x200))); - if (biosMode_ && biosRange) { + if (biosMode_ && p < biosSize_ && !(p >= 0x100 && p < 0x200)) { return readBios(p); } return cart_.rmem(p >> 12) ? cart_.rmem(p >> 12)[p] : nontrivial_peek(p); @@ -273,8 +272,8 @@ public: private: Cartridge cart_; unsigned char ioamhram_[0x200]; - unsigned char cgbBios_[0x900]; - unsigned char dmgBios_[0x100]; + unsigned char *bios_; + std::size_t biosSize_; unsigned (*getInput_)(); unsigned long divLastUpdate_; unsigned long lastOamDmaUpdate_; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 386ccdb45ad7526c2209a24dfee904bf9bb69626..b7fcac1c4d94d85d0053d469265ca1ab180ba0a7 100644 GIT binary patch delta 59221 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 S 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 Ze7*u-iO>6b-s}0VZ+hJ)GS~AB{|hOxmw^BP delta 59406 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 z Date: Sun, 26 May 2019 20:24:58 +0200 Subject: [PATCH 100/138] libgambatte: fix interrupt execution anatomy --- libgambatte/src/cpu.cpp | 85 +++++++++++++++++++------------------ libgambatte/src/memory.cpp | 13 +++--- libgambatte/src/video.cpp | 6 +-- output/dll/libgambatte.dll | Bin 168448 -> 167936 bytes 4 files changed, 55 insertions(+), 49 deletions(-) diff --git a/libgambatte/src/cpu.cpp b/libgambatte/src/cpu.cpp index 0e820e1dec..58444ab32a 100644 --- a/libgambatte/src/cpu.cpp +++ b/libgambatte/src/cpu.cpp @@ -277,8 +277,8 @@ void CPU::loadState(SaveState const &state) { // push rr (16 cycles): // Push value of register pair onto stack: #define push_rr(r1, r2) do { \ - PUSH(r1, r2); \ cycleCounter += 4; \ + PUSH(r1, r2); \ } while (0) // pop rr (12 cycles): @@ -461,8 +461,9 @@ void CPU::loadState(SaveState const &state) { // rst n (16 Cycles): // Push present address onto stack, jump to address n (one of 00h,08h,10h,18h,20h,28h,30h,38h): #define rst_n(n) do { \ + cycleCounter += 4; \ PUSH(pc >> 8, pc & 0xFF); \ - PC_MOD(n); \ + pc = n; \ } while (0) // ret (16 cycles): @@ -475,9 +476,10 @@ void CPU::loadState(SaveState const &state) { void CPU::process(unsigned long const cycles) { mem_.setEndtime(cycleCounter_, cycles); - hitInterruptAddress = 0; mem_.updateInput(); + hitInterruptAddress = -1; + //unsigned char a = a_; unsigned long cycleCounter = cycleCounter_; @@ -490,50 +492,51 @@ void CPU::process(unsigned long const cycles) { cycleCounter += cycles + (-cycles & 3); } } else while (cycleCounter < mem_.nextEventTime()) { - unsigned char opcode = 0x00; + unsigned char opcode; - int FullPC = pc; +#ifdef DLLABLES + for (int i = 0; i < numInterruptAddresses; ++i) { + if (pc == (interruptAddresses[i] & 0xFFFF)) { + unsigned bank = interruptAddresses[i] >> 16; - if (pc >= 0x4000 && pc <= 0x7FFF) - FullPC |= mem_.curRomBank() << 16; - - for (int i = 0; i < numInterruptAddresses; i++) { - if (FullPC == interruptAddresses[i]) { - hitInterruptAddress = interruptAddresses[i]; - mem_.setEndtime(cycleCounter, 0); - break; + if (!bank || bank == mem_.curRomBank()) { + hitInterruptAddress = interruptAddresses[i]; + mem_.setEndtime(cycleCounter, 0); + break; + } } } - if (!hitInterruptAddress) - { - if (tracecallback) { - int result[14]; - result[0] = cycleCounter; - result[1] = pc; - result[2] = sp; - result[3] = a; - result[4] = b; - result[5] = c; - result[6] = d; - result[7] = e; - result[8] = toF(hf2, cf, zf); - result[9] = h; - result[10] = l; - result[11] = skip_; - PC_READ_FIRST(opcode); - result[12] = opcode; - result[13] = mem_.debugGetLY(); - tracecallback((void *)result); - } - else { - PC_READ_FIRST(opcode); - } + if (hitInterruptAddress != -1) + break; +#endif - if (skip_) { - pc = (pc - 1) & 0xFFFF; - skip_ = false; - } + if (tracecallback) { + int result[14]; + result[0] = cycleCounter; + result[1] = pc; + result[2] = sp; + result[3] = a; + result[4] = b; + result[5] = c; + result[6] = d; + result[7] = e; + result[8] = toF(hf2, cf, zf); + result[9] = h; + result[10] = l; + result[11] = skip_; + PC_READ_FIRST(opcode); + result[12] = opcode; + result[13] = mem_.debugGetLY(); + tracecallback((void *)result); + } + else { + PC_READ_FIRST(opcode); + } + + if (skip_) { + pc = (pc - 1) & 0xFFFF; + skip_ = false; } switch (opcode) { diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 48c8bfd948..0e31f6141a 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -48,6 +48,7 @@ Memory::Memory(unsigned short &sp, unsigned short &pc) intreq_.setEventTime(144 * 456ul); intreq_.setEventTime(0); } + Memory::~Memory() { delete []bios_; } @@ -166,11 +167,11 @@ unsigned long Memory::event(unsigned long cc) { switch (intreq_.minEventId()) { case intevent_unhalt: + intreq_.unhalt(); + intreq_.setEventTime(disabled_time); nontrivial_ff_write(0xFF04, 0, cc); pc_ = (pc_ + 1) & 0xFFFF; cc += 4; - intreq_.unhalt(); - intreq_.setEventTime(disabled_time); break; case intevent_end: intreq_.setEventTime(disabled_time - 1); @@ -324,6 +325,7 @@ unsigned long Memory::event(unsigned long cc) { } else address = 0x50 + n; + updateIrqs(cc); intreq_.ackIrq(n); cc += 2; @@ -980,7 +982,6 @@ void Memory::nontrivial_ff_write(unsigned const p, unsigned data, unsigned long if(cgbSwitching_) { lcd_.copyCgbPalettesToDmg(); lcd_.setCgb(false); - cgbSwitching_ = false; } return; case 0x51: @@ -1050,8 +1051,10 @@ void Memory::nontrivial_ff_write(unsigned const p, unsigned data, unsigned long return; case 0x6C: - ioamhram_[0x16C] = data | 0xFE; - cgbSwitching_ = true; + if (isCgb()) { + ioamhram_[0x16C] = data | 0xFE; + cgbSwitching_ = true; + } return; case 0x70: diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index b8715f4c18..becb09a7b9 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -139,7 +139,7 @@ void LCD::loadState(SaveState const &state, unsigned char const *const oamram) { SpriteMapper::schedule(ppu_.lyCounter(), ppu_.now())); eventTimes_.setm(lycIrq_.time()); eventTimes_.setm( - ppu_.lyCounter().nextFrameCycle(144 * 456, ppu_.now())); + ppu_.lyCounter().nextFrameCycle(144 * 456, ppu_.now()) - 2); eventTimes_.setm( mode2IrqSchedule(statReg_, ppu_.lyCounter(), ppu_.now())); eventTimes_.setm(statReg_ & lcdstat_m0irqen @@ -230,7 +230,7 @@ void LCD::speedChange(unsigned long const cc) { eventTimes_.set(ppu_.lyCounter().time()); eventTimes_.setm(SpriteMapper::schedule(ppu_.lyCounter(), cc)); eventTimes_.setm(lycIrq_.time()); - eventTimes_.setm(ppu_.lyCounter().nextFrameCycle(144 * 456, cc)); + eventTimes_.setm(ppu_.lyCounter().nextFrameCycle(144 * 456, cc) - 2); eventTimes_.setm(mode2IrqSchedule(statReg_, ppu_.lyCounter(), cc)); if (eventTimes_(memevent_m0irq) != disabled_time @@ -458,7 +458,7 @@ void LCD::lcdcChange(unsigned const data, unsigned long const cc) { SpriteMapper::schedule(ppu_.lyCounter(), cc)); eventTimes_.setm(lycIrq_.time()); eventTimes_.setm( - ppu_.lyCounter().nextFrameCycle(144 * 456, cc)); + ppu_.lyCounter().nextFrameCycle(144 * 456, cc) - 2); eventTimes_.setm( mode2IrqSchedule(statReg_, ppu_.lyCounter(), cc)); if (statReg_ & lcdstat_m0irqen) { diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index b7fcac1c4d94d85d0053d469265ca1ab180ba0a7..984932df0eef38e880ecc18df747d00fc5afe580 100644 GIT binary patch delta 37923 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 Date: Sun, 26 May 2019 23:01:40 +0300 Subject: [PATCH 101/138] Revert "Rewrite ToolManager.IsAvailable" --- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 67 +++++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 18dc99da8a..1d4f348f0f 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -728,32 +728,59 @@ namespace BizHawk.Client.EmuHawk } } - private static readonly Lazy lazyAsmTypes = new Lazy(() => Assembly.ReflectionOnlyLoadFrom(Assembly.GetExecutingAssembly().Location).GetTypes()); - - public bool IsAvailable(Type tool) + public bool IsAvailable() { - if (!ServiceInjector.IsAvailable(Global.Emulator.ServiceProvider, tool) - || (tool == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) // simply doesn't work (for now) - || !Array.Exists(lazyAsmTypes.Value, t => t == tool)) // not a tool + return IsAvailable(typeof(T)); + } + + public bool IsAvailable(Type t) + { + if (!ServiceInjector.IsAvailable(Global.Emulator.ServiceProvider, t)) { return false; } - ToolAttribute attr; - try - { - attr = tool.GetCustomAttributes(false).OfType().Single(); - } - catch (InvalidOperationException e) // no ToolAttribute on given type - { - return true; - } - var sysName = Global.Emulator.DisplayName(); - return !attr.UnsupportedCores.Contains(sysName) // not unsupported - && (!attr.SupportedSystems.Any() || attr.SupportedSystems.Contains(sysName)); // supported (no supported list -> assumed all supported) - } + if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) return false; - public bool IsAvailable() => IsAvailable(typeof(T)); + var tool = Assembly + .GetExecutingAssembly() + .GetTypes() + .FirstOrDefault(type => type == t); + + if (tool == null) // This isn't a tool, must not be available + { + return false; + } + + var attr = tool.GetCustomAttributes(false) + .OfType() + .FirstOrDefault(); + + // start with the assumption that if no supported systems are mentioned and no unsupported cores are mentioned + // then this is available for all + bool supported = true; + + if (attr?.SupportedSystems != null && attr.SupportedSystems.Any()) + { + // supported systems are available + supported = attr.SupportedSystems.Contains(Global.Emulator.SystemId); + + if (supported) + { + // check for a core not supported override + if (attr.UnsupportedCores.Contains(Global.Emulator.DisplayName())) + supported = false; + } + } + else if (attr?.UnsupportedCores != null && attr.UnsupportedCores.Any()) + { + // no supported system specified, but unsupported cores are + if (attr.UnsupportedCores.Contains(Global.Emulator.DisplayName())) + supported = false; + } + + return supported; + } // Note: Referencing these properties creates an instance of the tool and persists it. They should be referenced by type if this is not desired #region Tools From c822cf401fadb19265b77e962a1839852784643b Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 26 May 2019 17:19:39 -0400 Subject: [PATCH 102/138] vectrex: More 6522 work and CPU bug fixes --- .../CPUs/MC6809/Disassembler.cs | 2 +- .../CPUs/MC6809/Indexed_Modes.cs | 2 +- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 2 +- .../CPUs/MC6809/Operations.cs | 43 +++--- .../Consoles/GCE/Vectrex/HW_Registers.cs | 125 +++++++++++++----- .../GCE/Vectrex/VectrexHawk.IStatable.cs | 11 +- 6 files changed, 126 insertions(+), 59 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs index 0f76eab570..94cf5b9ece 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs @@ -921,7 +921,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 result = result.Replace("ix16", "???"); break; case 0xF: - if ((d >> 5) == 0) + if (((d >> 5) & 3) == 0) { byte k = reader(addr++); bytes.Add(k); diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index 1477134f3f..e330edb35a 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -304,7 +304,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 // Illegal break; case 0xF: - if ((Regs[ALU] >> 5) == 0) + if (((Regs[ALU] >> 5) & 3) == 0) { PopulateCURINSTR(RD_INC, ALU, PC, RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 9de5aa7143..286b7a6af2 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -249,7 +249,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } break; case WR: - Write_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + Write_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case WR_DEC_LO: Write_Dec_Lo_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index db443f8ef3..5c06f9296e 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -29,29 +29,10 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[src]++; } - public void Write_Func(ushort dest_l, ushort dest_h, ushort src) + public void Write_Func(ushort dest, ushort src) { - ushort addr = (ushort)(Regs[dest_l] | (Regs[dest_h]) << 8); - if (CDLCallback != null) CDLCallback(addr, eCDLogMemFlags.Write | eCDLogMemFlags.Data); - WriteMemory(addr, (byte)Regs[src]); - } - - public void NEG_8_Func(ushort src) - { - int Reg16_d = 0; - Reg16_d -= Regs[src]; - - FlagC = Regs[src] != 0x0; - FlagZ = (Reg16_d & 0xFF) == 0; - FlagV = Regs[src] == 0x80; - FlagN = (Reg16_d & 0xFF) > 127; - - ushort ans = (ushort)(Reg16_d & 0xFF); - // redo for half carry flag - Reg16_d = 0; - Reg16_d -= (Regs[src] & 0xF); - FlagH = Reg16_d.Bit(4); - Regs[src] = ans; + if (CDLCallback != null) CDLCallback(Regs[dest], eCDLogMemFlags.Write | eCDLogMemFlags.Data); + WriteMemory(Regs[dest], (byte)Regs[src]); } public void Write_Dec_Lo_Func(ushort dest, ushort src) @@ -81,6 +62,24 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[dest]++; } + public void NEG_8_Func(ushort src) + { + int Reg16_d = 0; + Reg16_d -= Regs[src]; + + FlagC = Regs[src] != 0x0; + FlagZ = (Reg16_d & 0xFF) == 0; + FlagV = Regs[src] == 0x80; + FlagN = (Reg16_d & 0xFF) > 127; + + ushort ans = (ushort)(Reg16_d & 0xFF); + // redo for half carry flag + Reg16_d = 0; + Reg16_d -= (Regs[src] & 0xF); + FlagH = Reg16_d.Bit(4); + Regs[src] = ans; + } + public void TR_Func(ushort dest, ushort src) { Regs[dest] = Regs[src]; diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs index 19372a2782..bbc833d62b 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs @@ -20,10 +20,16 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public byte portB_ret, portA_ret; - public byte t1_low, t1_high; - public int t1_counter; - public bool t1_on, t1_shot_done; - public bool PB7; + public byte t1_low, t1_high; + public int t1_counter, t1_ctrl; + public bool t1_shot_go; + + public byte t2_low, t2_high; + public int t2_counter, t2_ctrl; + public bool t2_shot_go; + + public bool PB7, PB6; + public bool PB7_prev, PB6_prev; public byte int_en, int_fl, aux_ctrl; @@ -67,8 +73,13 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex ret = t1_high; break; case 0x8: + ret = (byte)(t2_counter & 0xFF); + + int_fl &= 0xDF; + update_int_fl(); break; case 0x9: + ret = (byte)((t2_counter >> 8) & 0xFF); break; case 0xA: int_fl &= 0xFB; @@ -120,10 +131,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex break; case 0x5: t1_high = value; + t1_counter = (t1_high << 8) | t1_low; - t1_on = true; - t1_shot_done = false; + t1_shot_go = true; if (aux_ctrl.Bit(7)) { PB7 = true; } + t1_ctrl = aux_ctrl; int_fl &= 0xBF; update_int_fl(); @@ -138,8 +150,17 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex update_int_fl(); break; case 0x8: + t2_low = value; break; case 0x9: + t2_high = value; + + t2_counter = (t2_high << 8) | t2_low; + t2_shot_go = true; + t2_ctrl = aux_ctrl; + + int_fl &= 0xDF; + update_int_fl(); break; case 0xA: int_fl &= 0xFB; @@ -166,53 +187,74 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { int_en &= (byte)((~value) & 0x7F); } + update_int_fl(); break; case 0xF: break; } } - public void Register_Reset() - { - - } - public void timer_1_tick() { - if (t1_on) + t1_counter--; + + if (t1_counter < 0) { - t1_counter--; - - if (t1_counter == 0) + if (t1_ctrl.Bit(6)) { - if (aux_ctrl.Bit(6)) - { - t1_counter = (t1_high << 8) | t1_low; + t1_counter = (t1_high << 8) | t1_low; + int_fl |= 0x40; + update_int_fl(); + //if (int_en.Bit(6)) { cpu.IRQPending = true; } + + if (t1_ctrl.Bit(7)) { PB7 = !PB7; } + } + else + { + t1_counter = 0xFFFF; + + if (t1_shot_go) + { int_fl |= 0x40; + update_int_fl(); //if (int_en.Bit(6)) { cpu.IRQPending = true; } + if (t1_ctrl.Bit(7)) { PB7 = false; } - if (aux_ctrl.Bit(7)) { PB7 = !PB7; } - } - else - { - t1_counter = 0xFFFF; - - if (!t1_shot_done) - { - int_fl |= 0x40; - //if (int_en.Bit(6)) { cpu.IRQPending = true; } - if (aux_ctrl.Bit(7)) { PB7 = false; } - } - t1_shot_done = true; - } + t1_shot_go = false; + } } } } public void timer_2_tick() { + t2_counter--; + if (t2_counter < 0) + { + if (t2_ctrl.Bit(5)) + { + t2_counter = (t2_high << 8) | t2_low; + + int_fl |= 0x20; + update_int_fl(); + //if (int_en.Bit(6)) { cpu.IRQPending = true; } + } + else + { + t2_counter = 0xFFFF; + + if (t2_shot_go) + { + int_fl |= 0x20; + update_int_fl(); + //if (int_en.Bit(6)) { cpu.IRQPending = true; } + + t2_shot_go = false; + } + } + } } public void update_int_fl() @@ -227,5 +269,24 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex int_fl |= (byte)(test ? 0x80 : 0); } + + public void Register_Reset() + { + dir_dac = dir_ctrl = 0; + + portB_ret = portA_ret = 0; + + t1_low = t1_high = 0; + t1_counter = t1_ctrl = 0; + t1_shot_go = false; + PB7 = PB7_prev = false; + + t2_low = t2_high = 0; + t2_counter = t2_ctrl = 0; + t2_shot_go = false; + PB6 = PB7_prev = false; + + int_en = int_fl = aux_ctrl = 0; + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs index 4c6effe1e5..203a98841d 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.IStatable.cs @@ -66,9 +66,16 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex ser.Sync(nameof(t1_low), ref t1_low); ser.Sync(nameof(t1_high), ref t1_high); ser.Sync(nameof(t1_counter), ref t1_counter); - ser.Sync(nameof(t1_on), ref t1_on); - ser.Sync(nameof(t1_shot_done), ref t1_shot_done); + ser.Sync(nameof(t1_shot_go), ref t1_shot_go); ser.Sync(nameof(PB7), ref PB7); + ser.Sync(nameof(PB7_prev), ref PB7_prev); + + ser.Sync(nameof(t2_low), ref t2_low); + ser.Sync(nameof(t2_high), ref t2_high); + ser.Sync(nameof(t2_counter), ref t2_counter); + ser.Sync(nameof(t2_shot_go), ref t2_shot_go); + ser.Sync(nameof(PB6), ref PB6); + ser.Sync(nameof(PB6_prev), ref PB6_prev); ser.Sync(nameof(int_en), ref int_en); ser.Sync(nameof(int_fl), ref int_fl); From 65e350ef7dc153ac1cf4ffd74429d310edc1dd15 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 27 May 2019 10:56:58 -0400 Subject: [PATCH 103/138] Fix #1553 --- .../tools/TAStudio/PatternsForm.cs | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs index dea9ac8e2d..627f28e352 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs @@ -185,7 +185,7 @@ namespace BizHawk.Client.EmuHawk index = Global.MovieSession.MovieControllerAdapter.Definition.BoolButtons.IndexOf(SelectedButton); if (SelectedButton == "Default bool Auto-Fire") { - index = _tastudio.BoolPatterns.Length + 1; + index = _tastudio.BoolPatterns.Length - 1; } if (index != -1) @@ -198,7 +198,7 @@ namespace BizHawk.Client.EmuHawk { if (SelectedButton == "Default float Auto-Fire") { - index = _tastudio.FloatPatterns.Length + 1; + index = _tastudio.FloatPatterns.Length - 1; } else { @@ -224,7 +224,7 @@ namespace BizHawk.Client.EmuHawk int index = Global.MovieSession.MovieControllerAdapter.Definition.BoolButtons.IndexOf(SelectedButton); if (SelectedButton == "Default bool Auto-Fire") { - index = _tastudio.BoolPatterns.Length + 1; + index = _tastudio.BoolPatterns.Length - 1; } if (index != -1) @@ -244,7 +244,7 @@ namespace BizHawk.Client.EmuHawk { if (SelectedButton == "Default float Auto-Fire") { - index = _tastudio.FloatPatterns.Length + 1; + index = _tastudio.FloatPatterns.Length - 1; } else { @@ -263,15 +263,19 @@ namespace BizHawk.Client.EmuHawk _tastudio.FloatPatterns[index] = new AutoPatternFloat(p.ToArray(), LagBox.Checked, 0, _loopAt); } - _tastudio.UpdateAutoFire(SelectedButton, null); + if ((SelectedButton != "Default float Auto-Fire") && (SelectedButton != "Default bool Auto-Fire")) + { + _tastudio.UpdateAutoFire(SelectedButton, null); + } } private void GetPattern() { int index = Global.MovieSession.MovieControllerAdapter.Definition.BoolButtons.IndexOf(SelectedButton); + if (SelectedButton == "Default bool Auto-Fire") { - index = _tastudio.BoolPatterns.Length + 1; + index = _tastudio.BoolPatterns.Length - 1; } if (index != -1) @@ -296,13 +300,13 @@ namespace BizHawk.Client.EmuHawk } } - _loopAt = _tastudio.BoolPatterns[index].Loop; + _loopAt = _tastudio.BoolPatterns[index].Loop; } else { if (SelectedButton == "Default float Auto-Fire") { - index = _tastudio.FloatPatterns.Length + 1; + index = _tastudio.FloatPatterns.Length - 1; } else { From bc2ced1b7f99a54ad7280274e2e03fc416a0f13c Mon Sep 17 00:00:00 2001 From: MrWint Date: Tue, 28 May 2019 00:26:59 +0200 Subject: [PATCH 104/138] More consistency, restore layer masks --- libgambatte/include/gambatte.h | 4 +- libgambatte/src/cinterface.cpp | 146 +++++++++++------------- libgambatte/src/cinterface.h | 18 +++ libgambatte/src/cpu.cpp | 2 +- libgambatte/src/gambatte.cpp | 8 +- libgambatte/src/mem/cartridge.cpp | 5 - libgambatte/src/mem/memptrs.cpp | 27 ++--- libgambatte/src/memory.cpp | 15 +-- libgambatte/src/memory.h | 4 +- libgambatte/src/newstate.cpp | 6 +- libgambatte/src/newstate.h | 28 ++--- libgambatte/src/video.cpp | 3 +- libgambatte/src/video.h | 1 - libgambatte/src/video/ppu.cpp | 14 +-- libgambatte/src/video/ppu.h | 2 +- libgambatte/src/video/sprite_mapper.cpp | 1 - output/dll/libgambatte.dll | Bin 167936 -> 168448 bytes 17 files changed, 129 insertions(+), 155 deletions(-) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 9d51b5edce..8bebff11bc 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -66,7 +66,7 @@ public: */ LoadRes load(char const *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); - int loadBios(char const* biosfiledata, std::size_t size); + int loadBios(char const *biosfiledata, std::size_t size); /** * Emulates until at least 'samples' audio samples are produced in the @@ -143,7 +143,7 @@ public: bool getMemoryArea(int which, unsigned char **data, int *length); /** ROM header title of currently loaded ROM image. */ - const std::string romTitle() const; + std::string const romTitle() const; unsigned char externalRead(unsigned short addr); void externalWrite(unsigned short addr, unsigned char val); diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 3cc461460d..c342d81418 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -1,200 +1,183 @@ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #include "cinterface.h" #include "gambatte.h" #include #include #include "newstate.h" -using namespace gambatte; - // new is actually called in a few different places, so replace all of them for determinism guarantees -void *operator new(std::size_t n) -{ +void *operator new(std::size_t n) { void *p = std::malloc(n); std::memset(p, 0, n); return p; } -void operator delete(void *p) -{ +void operator delete(void *p) { std::free(p); } -GBEXPORT GB *gambatte_create() -{ +namespace { + +using namespace gambatte; + + GBEXPORT GB * gambatte_create() { return new GB(); } -GBEXPORT void gambatte_destroy(GB *g) -{ +GBEXPORT void gambatte_destroy(GB *g) { delete g; } -GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) -{ - int ret = g->load(romfiledata, romfilelength, now, flags, div); - return ret; +GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) { + return g->load(romfiledata, romfilelength, now, flags, div); } -GBEXPORT int gambatte_loadbios(GB* g, char const* biosfiledata, unsigned size) -{ - int ret = g->loadBios(biosfiledata, size); - return ret; +GBEXPORT int gambatte_loadbios(GB *g, char const *biosfiledata, unsigned size) { + return g->loadBios(biosfiledata, size); } -GBEXPORT int gambatte_runfor(GB *g, short *soundbuf, unsigned *samples) -{ +GBEXPORT int gambatte_runfor(GB *g, short *soundbuf, unsigned *samples) { std::size_t sampv = *samples; int ret = g->runFor((unsigned int *) soundbuf, sampv); *samples = sampv; return ret; } -GBEXPORT void gambatte_blitto(GB *g, unsigned int *videobuf, int pitch) -{ +GBEXPORT void gambatte_blitto(GB *g, unsigned int *videobuf, int pitch) { g->blitTo((unsigned int *)videobuf, pitch); } -GBEXPORT void gambatte_setlayers(GB *g, unsigned mask) -{ +GBEXPORT void gambatte_setlayers(GB *g, unsigned mask) { g->setLayers(mask); } -GBEXPORT void gambatte_reset(GB *g, long long now, unsigned div) -{ +GBEXPORT void gambatte_reset(GB *g, long long now, unsigned div) { g->reset(now, div); } -GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32) -{ +GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32) { g->setDmgPaletteColor(palnum, colornum, rgb32); } -GBEXPORT void gambatte_setcgbpalette(GB *g, unsigned *lut) -{ +GBEXPORT void gambatte_setcgbpalette(GB *g, unsigned *lut) { g->setCgbPalette(lut); } -GBEXPORT void gambatte_setinputgetter(GB *g, unsigned (*getinput)(void)) -{ +GBEXPORT void gambatte_setinputgetter(GB *g, unsigned (*getinput)(void)) { g->setInputGetter(getinput); } -GBEXPORT void gambatte_setreadcallback(GB *g, MemoryCallback callback) -{ +GBEXPORT void gambatte_setreadcallback(GB *g, MemoryCallback callback) { g->setReadCallback(callback); } -GBEXPORT void gambatte_setwritecallback(GB *g, MemoryCallback callback) -{ +GBEXPORT void gambatte_setwritecallback(GB *g, MemoryCallback callback) { g->setWriteCallback(callback); } -GBEXPORT void gambatte_setexeccallback(GB *g, MemoryCallback callback) -{ +GBEXPORT void gambatte_setexeccallback(GB *g, MemoryCallback callback) { g->setExecCallback(callback); } -GBEXPORT void gambatte_setcdcallback(GB *g, CDCallback cdc) -{ +GBEXPORT void gambatte_setcdcallback(GB *g, CDCallback cdc) { g->setCDCallback(cdc); } -GBEXPORT void gambatte_settracecallback(GB *g, void (*callback)(void *)) -{ +GBEXPORT void gambatte_settracecallback(GB *g, void (*callback)(void *)) { g->setTraceCallback(callback); } -GBEXPORT void gambatte_setscanlinecallback(GB *g, void (*callback)(), int sl) -{ +GBEXPORT void gambatte_setscanlinecallback(GB *g, void (*callback)(), int sl) { g->setScanlineCallback(callback, sl); } -GBEXPORT void gambatte_setrtccallback(GB *g, unsigned int (*callback)()) -{ +GBEXPORT void gambatte_setrtccallback(GB *g, unsigned int (*callback)()) { g->setRTCCallback(callback); } -GBEXPORT void gambatte_setlinkcallback(GB *g, void(*callback)()) -{ +GBEXPORT void gambatte_setlinkcallback(GB *g, void(*callback)()) { g->setLinkCallback(callback); } -GBEXPORT int gambatte_iscgb(GB *g) -{ +GBEXPORT int gambatte_iscgb(GB *g) { return g->isCgb(); } -GBEXPORT int gambatte_isloaded(GB *g) -{ +GBEXPORT int gambatte_isloaded(GB *g) { return g->isLoaded(); } -GBEXPORT void gambatte_savesavedata(GB *g, char *dest) -{ +GBEXPORT void gambatte_savesavedata(GB *g, char *dest) { g->saveSavedata(dest); } -GBEXPORT void gambatte_loadsavedata(GB *g, char const *data) -{ +GBEXPORT void gambatte_loadsavedata(GB *g, char const *data) { g->loadSavedata(data); } -GBEXPORT int gambatte_savesavedatalength(GB *g) -{ +GBEXPORT int gambatte_savesavedatalength(GB *g) { return g->saveSavedataLength(); } -GBEXPORT int gambatte_newstatelen(GB *g) -{ +GBEXPORT int gambatte_newstatelen(GB *g) { NewStateDummy dummy; g->SyncState(&dummy); return dummy.GetLength(); } -GBEXPORT int gambatte_newstatesave(GB *g, char *data, int len) -{ +GBEXPORT int gambatte_newstatesave(GB *g, char *data, int len) { NewStateExternalBuffer saver(data, len); g->SyncState(&saver); return !saver.Overflow() && saver.GetLength() == len; } -GBEXPORT int gambatte_newstateload(GB *g, char const *data, int len) -{ +GBEXPORT int gambatte_newstateload(GB *g, char const *data, int len) { NewStateExternalBuffer loader((char *)data, len); g->SyncState(&loader); return !loader.Overflow() && loader.GetLength() == len; } -GBEXPORT void gambatte_newstatesave_ex(GB *g, FPtrs *ff) -{ +GBEXPORT void gambatte_newstatesave_ex(GB *g, FPtrs *ff) { NewStateExternalFunctions saver(ff); g->SyncState(&saver); } -GBEXPORT void gambatte_newstateload_ex(GB *g, FPtrs *ff) -{ +GBEXPORT void gambatte_newstateload_ex(GB *g, FPtrs *ff) { NewStateExternalFunctions loader(ff); g->SyncState(&loader); } -GBEXPORT void gambatte_romtitle(GB *g, char *dest) -{ +GBEXPORT void gambatte_romtitle(GB *g, char *dest) { std::strcpy(dest, g->romTitle().c_str()); } -GBEXPORT int gambatte_getmemoryarea(GB *g, int which, unsigned char **data, int *length) -{ +GBEXPORT int gambatte_getmemoryarea(GB *g, int which, unsigned char **data, int *length) { return g->getMemoryArea(which, data, length); } -GBEXPORT unsigned char gambatte_cpuread(GB *g, unsigned short addr) -{ +GBEXPORT unsigned char gambatte_cpuread(GB *g, unsigned short addr) { return g->externalRead(addr); } -GBEXPORT void gambatte_cpuwrite(GB *g, unsigned short addr, unsigned char val) -{ +GBEXPORT void gambatte_cpuwrite(GB *g, unsigned short addr, unsigned char val) { g->externalWrite(addr, val); } @@ -203,17 +186,16 @@ GBEXPORT int gambatte_linkstatus(GB *g, int which) return g->linkStatus(which); } -GBEXPORT void gambatte_getregs(GB *g, int *dest) -{ +GBEXPORT void gambatte_getregs(GB *g, int *dest) { g->getRegs(dest); } -GBEXPORT void gambatte_setinterruptaddresses(GB *g, int *addrs, int numAddrs) -{ +GBEXPORT void gambatte_setinterruptaddresses(GB *g, int *addrs, int numAddrs) { g->setInterruptAddresses(addrs, numAddrs); } -GBEXPORT int gambatte_gethitinterruptaddress(GB *g) -{ +GBEXPORT int gambatte_gethitinterruptaddress(GB *g) { return g->getHitInterruptAddress(); } + +} diff --git a/libgambatte/src/cinterface.h b/libgambatte/src/cinterface.h index 5e8a0087ec..031392a097 100644 --- a/libgambatte/src/cinterface.h +++ b/libgambatte/src/cinterface.h @@ -1,3 +1,21 @@ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef CINTERFACE_H #define CINTERFACE_H diff --git a/libgambatte/src/cpu.cpp b/libgambatte/src/cpu.cpp index 58444ab32a..d086c9842f 100644 --- a/libgambatte/src/cpu.cpp +++ b/libgambatte/src/cpu.cpp @@ -116,7 +116,7 @@ void CPU::loadState(SaveState const &state) { #define hl() ( h << 8 | l ) #define READ(dest, addr) do { (dest) = mem_.read(addr, cycleCounter); cycleCounter += 4; } while (0) -#define PEEK(dest, addr) do { (dest) = mem_.read(addr, cycleCounter); } while(0) +#define PEEK(dest, addr) do { (dest) = mem_.read(addr, cycleCounter); } while (0) #define PC_READ(dest) do { (dest) = mem_.read_excb(pc, cycleCounter, false); pc = (pc + 1) & 0xFFFF; cycleCounter += 4; } while (0) #define PC_READ_FIRST(dest) do { (dest) = mem_.read_excb(pc, cycleCounter, true); pc = (pc + 1) & 0xFFFF; cycleCounter += 4; } while (0) #define FF_READ(dest, addr) do { (dest) = mem_.ff_read(addr, cycleCounter); cycleCounter += 4; } while (0) diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index f182507608..d4beddafce 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -32,7 +32,7 @@ struct GB::Priv { uint_least32_t vbuff[160*144]; - Priv() : loadflags(0), layersMask(LAYER_MASK_BG | LAYER_MASK_OBJ) + Priv() : loadflags(0), layersMask(layer_mask_bg | layer_mask_window | layer_mask_obj) { } }; @@ -223,13 +223,11 @@ void GB::getRegs(int *dest) { p_->cpu.getRegs(dest); } -void GB::setInterruptAddresses(int *addrs, int numAddrs) -{ +void GB::setInterruptAddresses(int *addrs, int numAddrs) { p_->cpu.setInterruptAddresses(addrs, numAddrs); } -int GB::getHitInterruptAddress() -{ +int GB::getHitInterruptAddress() { return p_->cpu.getHitInterruptAddress(); } diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 829330b0a1..5465548f22 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -532,11 +532,6 @@ static bool presumedMulti64Mbc1(unsigned char const header[], unsigned rombanks) } LoadRes Cartridge::loadROM(char const *romfiledata, unsigned romfilelength, bool const forceDmg, bool const multicartCompat) { - //const std::auto_ptr rom(newFileInstance(romfile)); - - //if (rom->fail()) - // return -1; - enum Cartridgetype { type_plain, type_mbc1, type_mbc2, diff --git a/libgambatte/src/mem/memptrs.cpp b/libgambatte/src/mem/memptrs.cpp index 08a05bf40b..65b5125bbf 100644 --- a/libgambatte/src/mem/memptrs.cpp +++ b/libgambatte/src/mem/memptrs.cpp @@ -45,7 +45,13 @@ MemPtrs::~MemPtrs() { void MemPtrs::reset(unsigned const rombanks, unsigned const rambanks, unsigned const wrambanks) { delete []memchunk_; - memchunk_len = 0x4000 + rombanks * 0x4000ul + 0x4000 + rambanks * 0x2000ul + wrambanks * 0x1000ul + 0x4000; + memchunk_len = + 0x4000 + + rombanks * 0x4000ul + + 0x4000 + + rambanks * 0x2000ul + + wrambanks * 0x1000ul + + 0x4000; memchunk_ = new unsigned char[memchunk_len]; romdata_[0] = romdata(); @@ -163,24 +169,10 @@ void MemPtrs::disconnectOamDmaAreas() { SYNCFUNC(MemPtrs) { - /* - int memchunk_len_old = memchunk_len; - int memchunk_saveoffs_old = memchunk_saveoffs; - int memchunk_savelen_old = memchunk_savelen; - */ - NSS(memchunk_len); NSS(memchunk_saveoffs); NSS(memchunk_savelen); - /* - if (isReader) - { - if (memchunk_len != memchunk_len_old || memchunk_saveoffs != memchunk_saveoffs_old || memchunk_savelen != memchunk_savelen_old) - __debugbreak(); - } - */ - PSS(memchunk_ + memchunk_saveoffs, memchunk_savelen); MSS(rmem_[0x0]); @@ -215,11 +207,6 @@ SYNCFUNC(MemPtrs) MSS(wmem_[0xe]); MSS(rmem_[0xf]); MSS(wmem_[0xf]); - //for (int i = 0; i < 0x10; i++) - //{ - // MSS(rmem_[i]); - // MSS(wmem_[i]); - //} MSS(romdata_[0]); MSS(romdata_[1]); MSS(wramdata_[0]); diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 0e31f6141a..2e39855eda 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -1203,24 +1203,21 @@ SYNCFUNC(Memory) NSS(ioamhram_); NSS(divLastUpdate_); NSS(lastOamDmaUpdate_); - NSS(biosMode_); - NSS(cgbSwitching_); - NSS(agbMode_); - NSS(gbIsCgb_); - NSS(stopped_); - NSS(halttime_); - SSS(intreq_); SSS(tima_); SSS(lcd_); SSS(psg_); - NSS(dmaSource_); NSS(dmaDestination_); NSS(oamDmaPos_); NSS(serialCnt_); NSS(blanklcd_); - + NSS(biosMode_); + NSS(cgbSwitching_); + NSS(agbMode_); + NSS(gbIsCgb_); + NSS(halttime_); + NSS(stopped_); NSS(LINKCABLE_); NSS(linkClockTrigger_); } diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 64716ba79c..051a5ea904 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -37,7 +37,7 @@ public: ~Memory(); bool loaded() const { return cart_.loaded(); } - unsigned char curRomBank() const { return cart_.curRomBank(); } + unsigned curRomBank() const { return cart_.curRomBank(); } char const * romTitle() const { return cart_.romTitle(); } int debugGetLY() const { return lcd_.debugGetLY(); } void setStatePtrs(SaveState &state); @@ -55,7 +55,7 @@ public: } bool gbIsCgb() { return gbIsCgb_; } - bool getMemoryArea(int which, unsigned char **data, int *length); // { return cart.getMemoryArea(which, data, length); } + bool getMemoryArea(int which, unsigned char **data, int *length); unsigned long stop(unsigned long cycleCounter); bool isCgb() const { return lcd_.isCgb(); } diff --git a/libgambatte/src/newstate.cpp b/libgambatte/src/newstate.cpp index f28a15fa7c..4aae0b1679 100644 --- a/libgambatte/src/newstate.cpp +++ b/libgambatte/src/newstate.cpp @@ -8,7 +8,7 @@ NewStateDummy::NewStateDummy() :length(0) { } -void NewStateDummy::Save(const void *ptr, size_t size, char const *name) +void NewStateDummy::Save(void const *ptr, size_t size, char const *name) { length += size; } @@ -21,7 +21,7 @@ NewStateExternalBuffer::NewStateExternalBuffer(char *buffer, long maxlength) { } -void NewStateExternalBuffer::Save(const void *ptr, size_t size, char const *name) +void NewStateExternalBuffer::Save(void const *ptr, size_t size, char const *name) { if (maxlength - length >= (long)size) { @@ -48,7 +48,7 @@ NewStateExternalFunctions::NewStateExternalFunctions(const FPtrs *ff) { } -void NewStateExternalFunctions::Save(const void *ptr, size_t size, char const *name) +void NewStateExternalFunctions::Save(void const *ptr, size_t size, char const *name) { Save_(ptr, size, name); } diff --git a/libgambatte/src/newstate.h b/libgambatte/src/newstate.h index 6ae468e5db..1ad9088224 100644 --- a/libgambatte/src/newstate.h +++ b/libgambatte/src/newstate.h @@ -9,8 +9,8 @@ namespace gambatte { class NewState { public: - virtual void Save(const void *ptr, size_t size, char const *name) = 0; - virtual void Load(void *ptr, size_t size, char const *name) = 0; + virtual void Save(void const *ptr, std::size_t size, char const *name) = 0; + virtual void Load(void *ptr, std::size_t size, char const *name) = 0; virtual void EnterSection(char const *name) { } virtual void ExitSection(char const *name) { } }; @@ -23,8 +23,8 @@ public: NewStateDummy(); long GetLength() { return length; } void Rewind() { length = 0; } - virtual void Save(const void *ptr, size_t size, char const *name); - virtual void Load(void *ptr, size_t size, char const *name); + virtual void Save(void const *ptr, std::size_t size, char const *name); + virtual void Load(void *ptr, std::size_t size, char const *name); }; class NewStateExternalBuffer : public NewState @@ -38,14 +38,14 @@ public: long GetLength() { return length; } void Rewind() { length = 0; } bool Overflow() { return length > maxlength; } - virtual void Save(const void *ptr, size_t size, char const *name); - virtual void Load(void *ptr, size_t size, char const *name); + virtual void Save(void const *ptr, std::size_t size, char const *name); + virtual void Load(void *ptr, std::size_t size, char const *name); }; struct FPtrs { - void (*Save_)(const void *ptr, size_t size, char const *name); - void (*Load_)(void *ptr, size_t size, char const *name); + void (*Save_)(void const *ptr, std::size_t size, char const *name); + void (*Load_)(void *ptr, std::size_t size, char const *name); void (*EnterSection_)(char const *name); void (*ExitSection_)(char const *name); }; @@ -53,14 +53,14 @@ struct FPtrs class NewStateExternalFunctions : public NewState { private: - void (*Save_)(const void *ptr, size_t size, char const *name); - void (*Load_)(void *ptr, size_t size, char const *name); + void (*Save_)(void const *ptr, std::size_t size, char const *name); + void (*Load_)(void *ptr, std::size_t size, char const *name); void (*EnterSection_)(char const *name); void (*ExitSection_)(char const *name); public: NewStateExternalFunctions(const FPtrs *ff); - virtual void Save(const void *ptr, size_t size, char const *name); - virtual void Load(void *ptr, size_t size, char const *name); + virtual void Save(void const *ptr, std::size_t size, char const *name); + virtual void Load(void *ptr, std::size_t size, char const *name); virtual void EnterSection(char const *name); virtual void ExitSection(char const *name); }; @@ -85,9 +85,9 @@ public: #define EES(x,d) else if (isReader) (x) = (d); if (!isReader) ns->Save(&_ttmp, sizeof _ttmp, #x); } while (0) #define RSS(x,b) do { if (isReader)\ -{ ptrdiff_t _ttmp; ns->Load(&_ttmp, sizeof _ttmp, #x); (x) = (_ttmp == (ptrdiff_t)0xdeadbeef ? 0 : (b) + _ttmp); }\ +{ std::ptrdiff_t _ttmp; ns->Load(&_ttmp, sizeof _ttmp, #x); (x) = (_ttmp == (std::ptrdiff_t)0xdeadbeef ? 0 : (b) + _ttmp); }\ else\ -{ ptrdiff_t _ttmp = (x) == 0 ? 0xdeadbeef : (x) - (b); ns->Save(&_ttmp, sizeof _ttmp, #x); } } while (0) +{ std::ptrdiff_t _ttmp = (x) == 0 ? 0xdeadbeef : (x) - (b); ns->Save(&_ttmp, sizeof _ttmp, #x); } } while (0) #define PSS(x,s) do { if (isReader) ns->Load((x), (s), #x); else ns->Save((x), (s), #x); } while (0) diff --git a/libgambatte/src/video.cpp b/libgambatte/src/video.cpp index becb09a7b9..997993c881 100644 --- a/libgambatte/src/video.cpp +++ b/libgambatte/src/video.cpp @@ -863,14 +863,13 @@ void LCD::setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned long r SYNCFUNC(LCD) { SSS(ppu_); + NSS(dmgColorsRgb32_); NSS(bgpData_); NSS(objpData_); - NSS(dmgColorsRgb32_); SSS(eventTimes_); SSS(m0Irq_); SSS(lycIrq_); SSS(nextM0Time_); - NSS(statReg_); NSS(m2IrqStatReg_); NSS(m1IrqStatReg_); diff --git a/libgambatte/src/video.h b/libgambatte/src/video.h index b37beaa3e8..abc5ec8f0e 100644 --- a/libgambatte/src/video.h +++ b/libgambatte/src/video.h @@ -208,7 +208,6 @@ public: { SSS(eventMin_); SSS(memEventMin_); - //SSS(memEventRequester_); // not needed } }; diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index a016cea84f..38a1b03790 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -102,10 +102,10 @@ enum { max_m3start_cycles = 80 }; enum { attr_yflip = 0x40, attr_bgpriority = 0x80 }; static inline int lcdcEn( PPUPriv const &p) { return p.lcdc & lcdc_en; } -static inline int lcdcWinEn(PPUPriv const &p) { return p.lcdc & lcdc_we; } +static inline int lcdcWinEn(PPUPriv const &p) { return (p.lcdc & lcdc_we) && (p.layersMask & layer_mask_window); } static inline int lcdcObj2x(PPUPriv const &p) { return p.lcdc & lcdc_obj2x; } -static inline int lcdcObjEn(PPUPriv const &p) { return p.lcdc & lcdc_objen; } -static inline int lcdcBgEn( PPUPriv const &p) { return p.lcdc & lcdc_bgen; } +static inline int lcdcObjEn(PPUPriv const &p) { return (p.lcdc & lcdc_objen) && (p.layersMask & layer_mask_obj); } +static inline int lcdcBgEn( PPUPriv const &p) { return (p.lcdc & lcdc_bgen) && (p.layersMask & layer_mask_bg); } static inline int weMasterCheckPriorToLyIncLineCycle(bool cgb) { return 450 - cgb; } static inline int weMasterCheckAfterLyIncLineCycle(bool cgb) { return 454 - cgb; } @@ -418,7 +418,7 @@ static void doFullTilesUnrolledDmg(PPUPriv &p, int const xend, uint_least32_t *c { uint_least32_t *const dst = dbufline + (xpos - 8); - unsigned const tileword = -(p.lcdc & 1U) & p.ntileword; + unsigned const tileword = -(p.lcdc & 1U & p.layersMask) & p.ntileword; dst[0] = p.bgPalette[ tileword & 0x0003 ]; dst[1] = p.bgPalette[(tileword & 0x000C) >> 2]; @@ -624,7 +624,7 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } else { unsigned char idtab[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - unsigned const bgprioritymask = p.lcdc << 7; + unsigned const bgprioritymask = (p.lcdc & p.layersMask & layer_mask_bg) << 7; do { int n; @@ -804,7 +804,7 @@ static void plotPixel(PPUPriv &p) { p.winDrawState |= win_draw_start; } - unsigned const twdata = tileword & ((p.lcdc & 1) | p.cgb) * 3; + unsigned const twdata = tileword & ((p.lcdc & 1 & p.layersMask) | p.cgb) * 3; unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7) * 4]; int i = static_cast(p.nextSprite) - 1; @@ -1488,6 +1488,7 @@ namespace gambatte { PPUPriv::PPUPriv(NextM0Time &nextM0Time, unsigned char const *const oamram, unsigned char const *const vram) : nextSprite(0) , currentSprite(0xFF) +, layersMask(layer_mask_bg | layer_mask_window | layer_mask_obj) , vram(vram) , nextCallPtr(&M2_Ly0::f0_) , now(0) @@ -1812,7 +1813,6 @@ SYNCFUNC(PPU) SSS(p_.spriteMapper); SSS(p_.lyCounter); - //SSS(p_.framebuf); // no state NSS(p_.lcdc); NSS(p_.scy); diff --git a/libgambatte/src/video/ppu.h b/libgambatte/src/video/ppu.h index f37e837bd2..edfb6a9b9f 100644 --- a/libgambatte/src/video/ppu.h +++ b/libgambatte/src/video/ppu.h @@ -29,7 +29,7 @@ namespace gambatte { -enum { LAYER_MASK_BG = 1, LAYER_MASK_OBJ = 2, LAYER_MASK_WINDOW = 4 }; +enum { layer_mask_bg = 1, layer_mask_obj = 2, layer_mask_window = 4 }; class PPUFrameBuf { public: diff --git a/libgambatte/src/video/sprite_mapper.cpp b/libgambatte/src/video/sprite_mapper.cpp index b44e8d0273..87ffa52759 100644 --- a/libgambatte/src/video/sprite_mapper.cpp +++ b/libgambatte/src/video/sprite_mapper.cpp @@ -212,7 +212,6 @@ SYNCFUNC(SpriteMapper) NSS(spritemap_); NSS(num_); - SSS(nextM0Time_); SSS(oamReader_); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 984932df0eef38e880ecc18df747d00fc5afe580..76b0b4b77da81c4ed49c88dfa2ce6ad6275bb08f 100644 GIT binary patch delta 17227 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 H_iFzKsQwI# delta 16658 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 Date: Tue, 28 May 2019 17:42:30 +0200 Subject: [PATCH 105/138] Make BG layer mask work properly for CGB --- libgambatte/src/video/ppu.cpp | 18 +++++++++--------- output/dll/libgambatte.dll | Bin 168448 -> 168448 bytes 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libgambatte/src/video/ppu.cpp b/libgambatte/src/video/ppu.cpp index 38a1b03790..514beee00c 100644 --- a/libgambatte/src/video/ppu.cpp +++ b/libgambatte/src/video/ppu.cpp @@ -557,8 +557,8 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c n = (p.cycles & ~7) < n ? p.cycles & ~7 : n; p.cycles -= n; - unsigned ntileword = p.ntileword; - unsigned nattrib = p.nattrib; + unsigned ntileword = -(p.layersMask & layer_mask_bg) & p.ntileword; + unsigned nattrib = -(p.layersMask & layer_mask_bg) & p.nattrib; uint_least32_t * dst = dbufline + xpos - 8; uint_least32_t *const dstend = dst + n; xpos += n; @@ -576,7 +576,7 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c dst += 8; unsigned const tno = tileMapLine[ tileMapXpos & 0x1F ]; - nattrib = tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; + nattrib = -(p.layersMask & layer_mask_bg) & tileMapLine[(tileMapXpos & 0x1F) + 0x2000]; tileMapXpos = (tileMapXpos & 0x1F) + 1; unsigned const tdo = tdoffset & ~(tno << 5); @@ -584,7 +584,7 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c + (nattrib & attr_yflip ? tdo ^ 14 : tdo) + (nattrib << 10 & 0x2000); unsigned short const *const explut = expand_lut + (nattrib << 3 & 0x100); - ntileword = explut[td[0]] + explut[td[1]] * 2; + ntileword = -(p.layersMask & layer_mask_bg) & (explut[td[0]] + explut[td[1]] * 2); } while (dst != dstend); p.ntileword = ntileword; @@ -601,8 +601,8 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c { uint_least32_t *const dst = dbufline + (xpos - 8); - unsigned const tileword = p.ntileword; - unsigned const attrib = p.nattrib; + unsigned const tileword = -(p.layersMask & layer_mask_bg) & p.ntileword; + unsigned const attrib = -(p.layersMask & layer_mask_bg) & p.nattrib; unsigned long const *const bgPalette = p.bgPalette + (attrib & 7) * 4; dst[0] = bgPalette[ tileword & 0x0003 ]; @@ -624,7 +624,7 @@ static void doFullTilesUnrolledCgb(PPUPriv &p, int const xend, uint_least32_t *c } while (i >= 0 && int(p.spriteList[i].spx) > xpos - 8); } else { unsigned char idtab[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - unsigned const bgprioritymask = (p.lcdc & p.layersMask & layer_mask_bg) << 7; + unsigned const bgprioritymask = p.lcdc << 7; do { int n; @@ -804,8 +804,8 @@ static void plotPixel(PPUPriv &p) { p.winDrawState |= win_draw_start; } - unsigned const twdata = tileword & ((p.lcdc & 1 & p.layersMask) | p.cgb) * 3; - unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7) * 4]; + unsigned const twdata = tileword & (((p.lcdc & 1) | p.cgb) & p.layersMask) * 3; + unsigned long pixel = p.bgPalette[twdata + (p.attrib & 7 & -(p.layersMask & layer_mask_bg)) * 4]; int i = static_cast(p.nextSprite) - 1; if (i >= 0 && int(p.spriteList[i].spx) > xpos - 8) { diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 76b0b4b77da81c4ed49c88dfa2ce6ad6275bb08f..2d96928fd030cb9b9bd00955371f0b3847f7a58e 100644 GIT binary patch delta 9345 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 DuZ9u( delta 9370 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 From 7d33d604aef1749833a7cf2807c39ccff7098f69 Mon Sep 17 00:00:00 2001 From: MrWint Date: Tue, 28 May 2019 22:56:39 +0200 Subject: [PATCH 106/138] cycle-based RTC --- .../Nintendo/Gameboy/Gambatte.ISaveRam.cs | 22 --- .../Nintendo/Gameboy/Gambatte.ISettable.cs | 22 --- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 70 +-------- .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 29 ++-- libgambatte/include/gambatte.h | 7 +- libgambatte/libgambatte.vcxproj | 2 + libgambatte/libgambatte.vcxproj.filters | 6 + libgambatte/src/cinterface.cpp | 16 +- libgambatte/src/cpu.h | 9 +- libgambatte/src/gambatte.cpp | 16 +- libgambatte/src/initstate.cpp | 13 +- libgambatte/src/initstate.h | 2 +- libgambatte/src/mem/cartridge.cpp | 53 +++++-- libgambatte/src/mem/cartridge.h | 20 +-- libgambatte/src/mem/rtc.cpp | 76 ++++----- libgambatte/src/mem/rtc.h | 41 +++-- libgambatte/src/mem/time.cpp | 144 ++++++++++++++++++ libgambatte/src/mem/time.h | 78 ++++++++++ libgambatte/src/memory.cpp | 6 +- libgambatte/src/memory.h | 12 +- libgambatte/src/savestate.h | 10 +- output/dll/libgambatte.dll | Bin 168448 -> 170496 bytes 22 files changed, 402 insertions(+), 252 deletions(-) create mode 100644 libgambatte/src/mem/time.cpp create mode 100644 libgambatte/src/mem/time.h diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISaveRam.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISaveRam.cs index 3776eb00f7..218d2bf3ec 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISaveRam.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISaveRam.cs @@ -41,31 +41,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy break; default: throw new ArgumentException("Size of saveram data does not match expected!"); - case 44: - data = FixRTC(data, 44); - break; - case 40: - data = FixRTC(data, 40); - break; } LibGambatte.gambatte_loadsavedata(GambatteState, data); } - - private byte[] FixRTC(byte[] data, int offset) - { - // length - offset is the start of the VBA-only data; so - // length - offset - 4 is the start of the RTC block - int idx = data.Length - offset - 4; - - byte[] ret = new byte[idx + 4]; - Buffer.BlockCopy(data, 0, ret, 0, idx); - data[idx] = (byte)zerotime; - data[idx + 1] = (byte)(zerotime >> 8); - data[idx + 2] = (byte)(zerotime >> 16); - data[idx + 3] = (byte)(zerotime >> 24); - - return ret; - } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs index 297b029f11..3681c532d3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs @@ -116,18 +116,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy [DefaultValue(false)] public bool RealTimeRTC { get; set; } - [DisplayName("RTC Initial Time")] - [Description("Set the initial RTC time in terms of elapsed seconds. Only used when RealTimeRTC is false.")] - [DefaultValue(0)] - public int RTCInitialTime - { - get { return _RTCInitialTime; } - set { _RTCInitialTime = Math.Max(0, Math.Min(1024 * 24 * 60 * 60, value)); } - } - - [JsonIgnore] - private int _RTCInitialTime; - [DisplayName("Equal Length Frames")] [Description("When false, emulation frames sync to vblank. Only useful for high level TASing.")] [DefaultValue(false)] @@ -141,11 +129,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy [DeepEqualsIgnore] private bool _equalLengthFrames; - [DisplayName("Initial DIV offset")] - [Description("Internal. Probably doesn't work. Leave this set to 0. Accepts values from 0 to 65532 in steps of 4")] - [DefaultValue(0)] - public int InitialDiv { get; set; } - public GambatteSyncSettings() { SettingsUtil.SetDefaultValues(this); @@ -160,11 +143,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { return !DeepEquality.DeepEquals(x, y); } - - public uint GetInitialDivInternal() - { - return (uint)(InitialDiv & 0xfffc); - } } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 1790f04703..3b837f5b78 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -58,13 +58,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { _syncSettings = (GambatteSyncSettings)syncSettings ?? new GambatteSyncSettings(); - // copy over non-loadflag syncsettings now; they won't take effect if changed later - zerotime = (uint)_syncSettings.RTCInitialTime; - - real_rtc_time = !DeterministicEmulation && _syncSettings.RealTimeRTC; - - DivInternal = _syncSettings.GetInitialDivInternal(); - LibGambatte.LoadFlags flags = 0; switch (_syncSettings.ConsoleMode) @@ -90,7 +83,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy flags |= LibGambatte.LoadFlags.MULTICART_COMPAT; } - if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, GetCurrentTime(), flags, DivInternal) != 0) + if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, flags) != 0) { throw new InvalidOperationException($"{nameof(LibGambatte.gambatte_load)}() returned non-zero (is this not a gb or gbc rom?)"); } @@ -133,8 +126,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy string romname = System.Text.Encoding.ASCII.GetString(buff); Console.WriteLine("Core reported rom name: {0}", romname); - TimeCallback = new LibGambatte.RTCCallback(GetCurrentTime); - LibGambatte.gambatte_setrtccallback(GambatteState, TimeCallback); + if (!DeterministicEmulation && _syncSettings.RealTimeRTC) + { + LibGambatte.gambatte_settimemode(GambatteState, false); + } _cdCallback = new LibGambatte.CDCallback(CDCallbackProc); @@ -167,59 +162,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// private LibGambatte.Buttons CurrentButtons = 0; - private uint DivInternal = 0; - - #region RTC - - /// - /// RTC time when emulation begins. - /// - private readonly uint zerotime = 0; - - /// - /// if true, RTC will run off of real elapsed time - /// - private bool real_rtc_time = false; - - private LibGambatte.RTCCallback TimeCallback; - - private static long GetUnixNow() - { - // because internally the RTC works off of relative time, we don't need to base - // this off of any particular canonical epoch. - return DateTime.UtcNow.Ticks / 10000000L - 60000000000L; - } - - private uint GetCurrentTime() - { - if (real_rtc_time) - { - return (uint)GetUnixNow(); - } - - ulong fn = (ulong)Frame; - - // as we're exactly tracking cpu cycles, this can be pretty accurate - fn *= 4389; - fn /= 262144; - fn += zerotime; - return (uint)fn; - } - - private uint GetInitialTime() - { - if (real_rtc_time) - { - return (uint)GetUnixNow(); - } - - // setting the initial boot time to 0 will cause our zerotime - // to function as an initial offset, which is what we want - return 0; - } - - #endregion - #region ALL SAVESTATEABLE STATE GOES HERE /// @@ -320,7 +262,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy if (controller.IsPressed("Power")) { - LibGambatte.gambatte_reset(GambatteState, GetCurrentTime(), DivInternal); + LibGambatte.gambatte_reset(GambatteState); } if (Tracer.Enabled) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index 06cb95ece3..038ff62021 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -53,11 +53,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// opaque state pointer /// the rom data, can be disposed of once this function returns /// length of romdata in bytes - /// RTC time when the rom is loaded /// ORed combination of LoadFlags. /// 0 on success, negative value on failure. [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int gambatte_load(IntPtr core, byte[] romdata, uint length, long now, LoadFlags flags, uint div); + public static extern int gambatte_load(IntPtr core, byte[] romdata, uint length, LoadFlags flags); /// /// Load GB(C) BIOS image. @@ -114,9 +113,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// Equivalent to reloading a ROM image, or turning a Game Boy Color off and on again. /// /// opaque state pointer - /// RTC time when the reset occurs [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern void gambatte_reset(IntPtr core, long now, uint div); + public static extern void gambatte_reset(IntPtr core); /// /// palette type for gambatte_setdmgpalettecolor @@ -259,21 +257,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// 0-153 inclusive [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_setscanlinecallback(IntPtr core, ScanlineCallback callback, int sl); - - /// - /// type of the RTC callback - /// - /// what time is it, unixy - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate uint RTCCallback(); - - /// - /// sets RTC callback. probably mandatory. - /// - /// opaque state pointer - /// the callback - [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern void gambatte_setrtccallback(IntPtr core, RTCCallback callback); /// /// type of the link data sent callback @@ -289,6 +272,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_setlinkcallback(IntPtr core, LinkCallback callback); + /// + /// Changes between cycle-based and real-time RTC. Defaults to cycle-based. + /// + /// opaque state pointer + /// use cycle-based RTC + [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern void gambatte_settimemode(IntPtr core, bool useCycles); + /// /// Returns true if the currently loaded ROM image is treated as having CGB support. /// diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 8bebff11bc..d86187c0fd 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -64,7 +64,7 @@ public: * @param flags ORed combination of LoadFlags. * @return 0 on success, negative value on failure. */ - LoadRes load(char const *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); + LoadRes load(char const *romfiledata, unsigned romfilelength, unsigned flags); int loadBios(char const *biosfiledata, std::size_t size); @@ -106,7 +106,7 @@ public: * Reset to initial state. * Equivalent to reloading a ROM image, or turning a Game Boy Color off and on again. */ - void reset(std::uint32_t now, unsigned div); + void reset(); /** * @param palNum 0 <= palNum < 3. One of BG_PALETTE, SP1_PALETTE and SP2_PALETTE. @@ -128,6 +128,9 @@ public: void setRTCCallback(std::uint32_t (*callback)()); void setLinkCallback(void(*callback)()); + /** Use cycle-based RTC instead of real-time. */ + void setTimeMode(bool useCycles); + /** Returns true if the currently loaded ROM image is treated as having CGB support. */ bool isCgb() const; diff --git a/libgambatte/libgambatte.vcxproj b/libgambatte/libgambatte.vcxproj index 33e0eb0aee..6612bff667 100644 --- a/libgambatte/libgambatte.vcxproj +++ b/libgambatte/libgambatte.vcxproj @@ -170,6 +170,7 @@ + @@ -202,6 +203,7 @@ + diff --git a/libgambatte/libgambatte.vcxproj.filters b/libgambatte/libgambatte.vcxproj.filters index 38cbfcdb7d..f096a22f6b 100644 --- a/libgambatte/libgambatte.vcxproj.filters +++ b/libgambatte/libgambatte.vcxproj.filters @@ -126,6 +126,9 @@ Header Files + + Header Files + @@ -203,5 +206,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index c342d81418..51c4730ae1 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -45,8 +45,8 @@ GBEXPORT void gambatte_destroy(GB *g) { delete g; } -GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) { - return g->load(romfiledata, romfilelength, now, flags, div); +GBEXPORT int gambatte_load(GB *g, char const *romfiledata, unsigned romfilelength, unsigned flags) { + return g->load(romfiledata, romfilelength, flags); } GBEXPORT int gambatte_loadbios(GB *g, char const *biosfiledata, unsigned size) { @@ -68,8 +68,12 @@ GBEXPORT void gambatte_setlayers(GB *g, unsigned mask) { g->setLayers(mask); } -GBEXPORT void gambatte_reset(GB *g, long long now, unsigned div) { - g->reset(now, div); +GBEXPORT void gambatte_setTimeMode(GB *g, bool useCycles) { + g->setTimeMode(useCycles); +} + +GBEXPORT void gambatte_reset(GB *g) { + g->reset(); } GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32) { @@ -109,10 +113,6 @@ GBEXPORT void gambatte_setscanlinecallback(GB *g, void (*callback)(), int sl) { g->setScanlineCallback(callback, sl); } -GBEXPORT void gambatte_setrtccallback(GB *g, unsigned int (*callback)()) { - g->setRTCCallback(callback); -} - GBEXPORT void gambatte_setlinkcallback(GB *g, void(*callback)()) { g->setLinkCallback(callback); } diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 5349514e05..6059b0fad4 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -31,9 +31,9 @@ public: void setStatePtrs(SaveState &state); void loadState(SaveState const &state); void setLayers(unsigned mask) { mem_.setLayers(mask); } - void loadSavedata(char const *data) { mem_.loadSavedata(data); } + void loadSavedata(char const *data) { mem_.loadSavedata(data, cycleCounter_); } int saveSavedataLength() {return mem_.saveSavedataLength(); } - void saveSavedata(char *dest) { mem_.saveSavedata(dest); } + void saveSavedata(char *dest) { mem_.saveSavedata(dest, cycleCounter_); } bool getMemoryArea(int which, unsigned char **data, int *length) { return mem_.getMemoryArea(which, data, length); } @@ -69,10 +69,6 @@ public: mem_.setScanlineCallback(callback, sl); } - void setRTCCallback(std::uint32_t (*callback)()) { - mem_.setRTCCallback(callback); - } - void setLinkCallback(void(*callback)()) { mem_.setLinkCallback(callback); } @@ -94,6 +90,7 @@ public: void setCgbPalette(unsigned *lut) { mem_.setCgbPalette(lut); } + void setTimeMode(bool useCycles) { mem_.setTimeMode(useCycles, cycleCounter_); } void setBios(char const *buffer, std::size_t size) { mem_.setBios(buffer, size); } bool gbIsCgb() { return mem_.gbIsCgb(); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index d4beddafce..d222874ac6 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -75,7 +75,7 @@ void GB::blitTo(gambatte::uint_least32_t *videoBuf, std::ptrdiff_t pitch) { } } -void GB::reset(const std::uint32_t now, const unsigned div) { +void GB::reset() { if (p_->cpu.loaded()) { int length = p_->cpu.saveSavedataLength(); @@ -88,7 +88,7 @@ void GB::reset(const std::uint32_t now, const unsigned div) { SaveState state; p_->cpu.setStatePtrs(state); - setInitState(state, !(p_->loadflags & FORCE_DMG), p_->loadflags & GBA_CGB, now, div); + setInitState(state, !(p_->loadflags & FORCE_DMG), p_->loadflags & GBA_CGB); p_->cpu.loadState(state); if (length > 0) { @@ -126,22 +126,22 @@ void GB::setScanlineCallback(void (*callback)(), int sl) { p_->cpu.setScanlineCallback(callback, sl); } -void GB::setRTCCallback(std::uint32_t (*callback)()) { - p_->cpu.setRTCCallback(callback); -} - void GB::setLinkCallback(void(*callback)()) { p_->cpu.setLinkCallback(callback); } -LoadRes GB::load(char const *romfiledata, unsigned romfilelength, const std::uint32_t now, unsigned const flags, const unsigned div) { +void GB::setTimeMode(bool useCycles) { + p_->cpu.setTimeMode(useCycles); +} + +LoadRes GB::load(char const *romfiledata, unsigned romfilelength, unsigned const flags) { LoadRes const loadres = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); if (loadres == LOADRES_OK) { SaveState state; p_->cpu.setStatePtrs(state); p_->loadflags = flags; - setInitState(state, !(flags & FORCE_DMG), flags & GBA_CGB, now, div); + setInitState(state, !(flags & FORCE_DMG), flags & GBA_CGB); p_->cpu.loadState(state); } diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index d147eb03d6..72e26c6f85 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -20,6 +20,7 @@ #include "counterdef.h" #include "savestate.h" #include "sound/sound_unit.h" +#include "mem/time.h" #include #include @@ -1146,7 +1147,7 @@ static void setInitialDmgIoamhram(unsigned char ioamhram[]) { } // anon namespace -void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbMode, const std::uint32_t now, const unsigned div) { +void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbMode) { static unsigned char const cgbObjpDump[0x40] = { 0x00, 0x00, 0xF2, 0xAB, 0x61, 0xC2, 0xD9, 0xBA, @@ -1198,7 +1199,7 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.mem.ioamhram.ptr[0x140] = 0; state.mem.ioamhram.ptr[0x144] = 0x00; - state.mem.divLastUpdate = 0 - div; + state.mem.divLastUpdate = 0; state.mem.timaBasetime = 0; state.mem.timaLastUpdate = 0; state.mem.tmatime = disabled_time; @@ -1315,8 +1316,12 @@ void gambatte::setInitState(SaveState &state, const bool cgb, const bool gbaCgbM state.spu.ch4.nr4 = 0; state.spu.ch4.master = false; - state.rtc.baseTime = now; - state.rtc.haltTime = state.rtc.baseTime; + state.time.seconds = 0; + state.time.lastTimeSec = Time::now().tv_sec; + state.time.lastTimeUsec = Time::now().tv_usec; + state.time.lastCycles = state.cpu.cycleCounter; + + state.rtc.haltTime = state.time.seconds; state.rtc.dataDh = 0; state.rtc.dataDl = 0; state.rtc.dataH = 0; diff --git a/libgambatte/src/initstate.h b/libgambatte/src/initstate.h index 02363941d8..0e31dd35bb 100644 --- a/libgambatte/src/initstate.h +++ b/libgambatte/src/initstate.h @@ -23,7 +23,7 @@ namespace gambatte { -void setInitState(struct SaveState &state, bool cgb, bool gbaCgbMode, std::uint32_t now, unsigned div); +void setInitState(struct SaveState &state, bool cgb, bool gbaCgbMode); } #endif diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 5465548f22..0d6539af68 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -50,7 +50,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { if (p < 0x2000) { enableRam_ = (data & 0xF) == 0xA; memptrs_.setRambank(enableRam_ ? MemPtrs::read_en | MemPtrs::write_en : 0, 0); @@ -92,7 +92,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { switch (p >> 13 & 3) { case 0: enableRam_ = (data & 0xF) == 0xA; @@ -166,7 +166,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { switch (p >> 13 & 3) { case 0: enableRam_ = (data & 0xF) == 0xA; @@ -238,7 +238,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { switch (p & 0x6100) { case 0x0000: enableRam_ = (data & 0xF) == 0xA; @@ -282,7 +282,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const cc) { switch (p >> 13 & 3) { case 0: enableRam_ = (data & 0xF) == 0xA; @@ -298,7 +298,7 @@ public: break; case 3: if (rtc_) - rtc_->latch(data); + rtc_->latch(data, cc); break; } @@ -356,7 +356,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { switch (p >> 13 & 3) { case 0: enableRam_ = (data & 0xF) == 0xA; @@ -424,7 +424,7 @@ public: { } - virtual void romWrite(unsigned const p, unsigned const data) { + virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { switch (p >> 13 & 3) { case 0: enableRam_ = (data & 0xF) == 0xA; @@ -487,6 +487,11 @@ static bool hasRtc(unsigned headerByte0x147) { } +Cartridge::Cartridge() +: rtc_(time_) +{ +} + void Cartridge::setStatePtrs(SaveState &state) { state.mem.vram.set(memptrs_.vramdata(), memptrs_.vramdataend() - memptrs_.vramdata()); state.mem.sram.set(memptrs_.rambankdata(), memptrs_.rambankdataend() - memptrs_.rambankdata()); @@ -652,7 +657,7 @@ static bool hasBattery(unsigned char headerByte0x147) { } } -void Cartridge::loadSavedata(char const *data) { +void Cartridge::loadSavedata(char const *data, unsigned long const cc) { if (hasBattery(memptrs_.romdata()[0x147])) { int length = memptrs_.rambankdataend() - memptrs_.rambankdata(); std::memcpy(memptrs_.rambankdata(), data, length); @@ -661,9 +666,17 @@ void Cartridge::loadSavedata(char const *data) { } if (hasRtc(memptrs_.romdata()[0x147])) { - unsigned long basetime; - std::memcpy(&basetime, data, 4); - rtc_.setBaseTime(basetime); + timeval basetime; + basetime.tv_sec = (*data++); + basetime.tv_sec = basetime.tv_sec << 8 | (*data++); + basetime.tv_sec = basetime.tv_sec << 8 | (*data++); + basetime.tv_sec = basetime.tv_sec << 8 | (*data++); + basetime.tv_usec = (*data++); + basetime.tv_usec = basetime.tv_usec << 8 | (*data++); + basetime.tv_usec = basetime.tv_usec << 8 | (*data++); + basetime.tv_usec = basetime.tv_usec << 8 | (*data++); + + time_.setBaseTime(basetime, cc); } } @@ -673,12 +686,12 @@ int Cartridge::saveSavedataLength() { ret = memptrs_.rambankdataend() - memptrs_.rambankdata(); } if (hasRtc(memptrs_.romdata()[0x147])) { - ret += 4; + ret += 8; } return ret; } -void Cartridge::saveSavedata(char *dest) { +void Cartridge::saveSavedata(char *dest, unsigned long const cc) { if (hasBattery(memptrs_.romdata()[0x147])) { int length = memptrs_.rambankdataend() - memptrs_.rambankdata(); std::memcpy(dest, memptrs_.rambankdata(), length); @@ -686,8 +699,15 @@ void Cartridge::saveSavedata(char *dest) { } if (hasRtc(memptrs_.romdata()[0x147])) { - const unsigned long basetime = rtc_.getBaseTime(); - std::memcpy(dest, &basetime, 4); + timeval basetime = time_.baseTime(cc); + *dest++ = (basetime.tv_sec >> 24 & 0xFF); + *dest++ = (basetime.tv_sec >> 16 & 0xFF); + *dest++ = (basetime.tv_sec >> 8 & 0xFF); + *dest++ = (basetime.tv_sec & 0xFF); + *dest++ = (basetime.tv_usec >> 24 & 0xFF); + *dest++ = (basetime.tv_usec >> 16 & 0xFF); + *dest++ = (basetime.tv_usec >> 8 & 0xFF); + *dest++ = (basetime.tv_usec & 0xFF); } } @@ -723,6 +743,7 @@ bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) cons SYNCFUNC(Cartridge) { SSS(memptrs_); + SSS(time_); SSS(rtc_); TSS(mbc_); } diff --git a/libgambatte/src/mem/cartridge.h b/libgambatte/src/mem/cartridge.h index 245bf537aa..db46afb262 100644 --- a/libgambatte/src/mem/cartridge.h +++ b/libgambatte/src/mem/cartridge.h @@ -21,6 +21,7 @@ #include "loadres.h" #include "memptrs.h" +#include "time.h" #include "rtc.h" #include "savestate.h" #include @@ -33,7 +34,7 @@ namespace gambatte { class Mbc { public: virtual ~Mbc() {} - virtual void romWrite(unsigned P, unsigned data) = 0; + virtual void romWrite(unsigned P, unsigned data, unsigned long cycleCounter) = 0; virtual void loadState(SaveState::Mem const &ss) = 0; virtual bool isAddressWithinAreaRombankCanBeMappedTo(unsigned address, unsigned rombank) const = 0; @@ -47,6 +48,7 @@ public: class Cartridge { public: + Cartridge(); void setStatePtrs(SaveState &); void loadState(SaveState const &); bool loaded() const { return mbc_.get(); } @@ -64,23 +66,23 @@ public: void setWrambank(unsigned bank) { memptrs_.setWrambank(bank); } void setOamDmaSrc(OamDmaSrc oamDmaSrc) { memptrs_.setOamDmaSrc(oamDmaSrc); } unsigned curRomBank() const { return memptrs_.curRomBank(); } - void mbcWrite(unsigned addr, unsigned data) { mbc_->romWrite(addr, data); } + void mbcWrite(unsigned addr, unsigned data, unsigned long const cc) { mbc_->romWrite(addr, data, cc); } bool isCgb() const { return gambatte::isCgb(memptrs_); } - void rtcWrite(unsigned data) { rtc_.write(data); } + void resetCc(unsigned long const oldCc, unsigned long const newCc) { time_.resetCc(oldCc, newCc); } + void speedChange(unsigned long const cc) { time_.speedChange(cc); } + void setTimeMode(bool useCycles, unsigned long const cc) { time_.setTimeMode(useCycles, cc); } + void rtcWrite(unsigned data, unsigned long const cc) { rtc_.write(data, cc); } unsigned char rtcRead() const { return *rtc_.activeData(); } - void loadSavedata(char const *data); + void loadSavedata(char const *data, unsigned long cycleCounter); int saveSavedataLength(); - void saveSavedata(char *dest); + void saveSavedata(char *dest, unsigned long cycleCounter); bool getMemoryArea(int which, unsigned char **data, int *length) const; LoadRes loadROM(char const *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); char const * romTitle() const { return reinterpret_cast(memptrs_.romdata() + 0x134); } - void setRTCCallback(std::uint32_t (*callback)()) { - rtc_.setRTCCallback(callback); - } - private: MemPtrs memptrs_; + Time time_; Rtc rtc_; std::unique_ptr mbc_; diff --git a/libgambatte/src/mem/rtc.cpp b/libgambatte/src/mem/rtc.cpp index 5495201c4c..5b79c04d7b 100644 --- a/libgambatte/src/mem/rtc.cpp +++ b/libgambatte/src/mem/rtc.cpp @@ -22,10 +22,10 @@ namespace gambatte { -Rtc::Rtc() -: activeData_(0) +Rtc::Rtc(Time &time) +: time_(time) +, activeData_(0) , activeSet_(0) -, baseTime_(0) , haltTime_(0) , index_(5) , dataDh_(0) @@ -35,16 +35,15 @@ Rtc::Rtc() , dataS_(0) , enabled_(false) , lastLatchData_(false) -, timeCB(0) { } -void Rtc::doLatch() { - std::uint32_t tmp = ((dataDh_ & 0x40) ? haltTime_ : timeCB()) - baseTime_; +void Rtc::doLatch(unsigned long const cc) { + std::uint32_t tmp = time(cc); - while (tmp > 0x1FF * 86400) { - baseTime_ += 0x1FF * 86400; - tmp -= 0x1FF * 86400; + if (tmp >= 0x200 * 86400) { + tmp %= 0x200 * 86400; + time_.set(tmp, cc); dataDh_ |= 0x80; } @@ -91,7 +90,6 @@ void Rtc::doSwapActive() { } void Rtc::loadState(SaveState const &state) { - baseTime_ = state.rtc.baseTime; haltTime_ = state.rtc.haltTime; dataDh_ = state.rtc.dataDh; dataDl_ = state.rtc.dataDl; @@ -102,45 +100,50 @@ void Rtc::loadState(SaveState const &state) { doSwapActive(); } -void Rtc::setDh(unsigned const newDh) { - const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); - const std::uint32_t oldHighdays = ((unixtime - baseTime_) / 86400) & 0x100; - baseTime_ += oldHighdays * 86400; - baseTime_ -= ((newDh & 0x1) << 8) * 86400; +void Rtc::setDh(unsigned const newDh, unsigned const long cc) { + std::uint32_t seconds = time(cc); + std::uint32_t const oldHighdays = (seconds / 86400) & 0x100; + seconds -= oldHighdays * 86400; + seconds += ((newDh & 0x1) << 8) * 86400; + time_.set(seconds, cc); if ((dataDh_ ^ newDh) & 0x40) { if (newDh & 0x40) - haltTime_ = timeCB(); + haltTime_ = seconds; else - baseTime_ += timeCB() - haltTime_; + time_.set(haltTime_, cc); } } -void Rtc::setDl(unsigned const newLowdays) { - const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); - const std::uint32_t oldLowdays = ((unixtime - baseTime_) / 86400) & 0xFF; - baseTime_ += oldLowdays * 86400; - baseTime_ -= newLowdays * 86400; +void Rtc::setDl(unsigned const newLowdays, unsigned const long cc) { + std::uint32_t seconds = time(cc); + std::uint32_t const oldLowdays = (seconds / 86400) & 0xFF; + seconds -= oldLowdays * 86400; + seconds += newLowdays * 86400; + time_.set(seconds, cc); } -void Rtc::setH(unsigned const newHours) { - const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); - const std::uint32_t oldHours = ((unixtime - baseTime_) / 3600) % 24; - baseTime_ += oldHours * 3600; - baseTime_ -= newHours * 3600; +void Rtc::setH(unsigned const newHours, unsigned const long cc) { + std::uint32_t seconds = time(cc); + std::uint32_t const oldHours = (seconds / 3600) % 24; + seconds -= oldHours * 3600; + seconds += newHours * 3600; + time_.set(seconds, cc); } -void Rtc::setM(unsigned const newMinutes) { - const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); - const std::uint32_t oldMinutes = ((unixtime - baseTime_) / 60) % 60; - baseTime_ += oldMinutes * 60; - baseTime_ -= newMinutes * 60; +void Rtc::setM(unsigned const newMinutes, unsigned const long cc) { + std::uint32_t seconds = time(cc); + std::uint32_t const oldMinutes = (seconds / 60) % 60; + seconds -= oldMinutes * 60; + seconds += newMinutes * 60; + time_.set(seconds, cc); } -void Rtc::setS(unsigned const newSeconds) { - const std::uint32_t unixtime = (dataDh_ & 0x40) ? haltTime_ : timeCB(); - baseTime_ += (unixtime - baseTime_) % 60; - baseTime_ -= newSeconds; +void Rtc::setS(unsigned const newSeconds, unsigned const long cc) { + std::uint32_t seconds = time(cc); + seconds -= seconds % 60; + seconds += newSeconds; + time_.reset(seconds, cc); } SYNCFUNC(Rtc) @@ -161,7 +164,6 @@ SYNCFUNC(Rtc) EVS(activeSet_, &Rtc::setDh, 5); EES(activeSet_, NULL); - NSS(baseTime_); NSS(haltTime_); NSS(index_); NSS(dataDh_); diff --git a/libgambatte/src/mem/rtc.h b/libgambatte/src/mem/rtc.h index f7594e2eec..853027ed58 100644 --- a/libgambatte/src/mem/rtc.h +++ b/libgambatte/src/mem/rtc.h @@ -20,6 +20,7 @@ #define RTC_H #include +#include "time.h" #include "newstate.h" namespace gambatte { @@ -28,18 +29,12 @@ struct SaveState; class Rtc { public: - Rtc(); - + Rtc(Time &time); unsigned char const * activeData() const { return activeData_; } - std::uint32_t getBaseTime() const { return baseTime_; } - void setBaseTime(const std::uint32_t baseTime) { - this->baseTime_ = baseTime; - } - - void latch(unsigned data) { + void latch(unsigned data, unsigned long const cc) { if (!lastLatchData_ && data == 1) - doLatch(); + doLatch(cc); lastLatchData_ = data; } @@ -55,19 +50,15 @@ public: doSwapActive(); } - void write(unsigned data) { - (this->*activeSet_)(data); + void write(unsigned data, unsigned long const cc) { + (this->*activeSet_)(data, cc); *activeData_ = data; } - void setRTCCallback(std::uint32_t (*callback)()) { - timeCB = callback; - } - private: + Time &time_; unsigned char *activeData_; - void (Rtc::*activeSet_)(unsigned); - std::uint32_t baseTime_; + void (Rtc::*activeSet_)(unsigned, unsigned long); std::uint32_t haltTime_; unsigned char index_; unsigned char dataDh_; @@ -77,16 +68,18 @@ private: unsigned char dataS_; bool enabled_; bool lastLatchData_; - std::uint32_t (*timeCB)(); - void doLatch(); + void doLatch(unsigned long cycleCounter); void doSwapActive(); - void setDh(unsigned newDh); - void setDl(unsigned newLowdays); - void setH(unsigned newHours); - void setM(unsigned newMinutes); - void setS(unsigned newSeconds); + void setDh(unsigned newDh, unsigned long cycleCounter); + void setDl(unsigned newLowdays, unsigned long cycleCounter); + void setH(unsigned newHours, unsigned long cycleCounter); + void setM(unsigned newMinutes, unsigned long cycleCounter); + void setS(unsigned newSeconds, unsigned long cycleCounter); + std::uint32_t time(unsigned long const cc) { + return dataDh_ & 0x40 ? haltTime_ : time_.get(cc); + } public: templatevoid SyncState(NewState *ns); }; diff --git a/libgambatte/src/mem/time.cpp b/libgambatte/src/mem/time.cpp new file mode 100644 index 0000000000..71e92d1356 --- /dev/null +++ b/libgambatte/src/mem/time.cpp @@ -0,0 +1,144 @@ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#include "time.h" +#include "../savestate.h" + +namespace gambatte { + +static timeval operator-(timeval l, timeval r) { + timeval t; + t.tv_sec = l.tv_sec - r.tv_sec; + t.tv_usec = l.tv_usec - r.tv_usec; + if (t.tv_usec < 0) { + t.tv_sec--; + t.tv_usec += 1000000; + } + return t; +} + +Time::Time() +: useCycles_(true) +{ +} + +void Time::loadState(SaveState const &state) { + seconds_ = state.time.seconds; + lastTime_.tv_sec = state.time.lastTimeSec; + lastTime_.tv_usec = state.time.lastTimeUsec; + lastCycles_ = state.time.lastCycles; + ds_ = state.ppu.isCgb & state.mem.ioamhram.get()[0x14D] >> 7; +} + +std::uint32_t Time::get(unsigned long const cc) { + update(cc); + return seconds_; +} + +void Time::set(std::uint32_t seconds, unsigned long const cc) { + update(cc); + seconds_ = seconds; +} + +void Time::reset(std::uint32_t seconds, unsigned long const cc) { + set(seconds, cc); + lastTime_ = now(); + lastCycles_ = cc; +} + +void Time::resetCc(unsigned long const oldCc, unsigned long const newCc) { + update(oldCc); + lastCycles_ -= oldCc - newCc; +} + +void Time::speedChange(unsigned long const cc) { + update(cc); + + if (useCycles_) { + unsigned long diff = cc - lastCycles_; + lastCycles_ = cc - (ds_ ? diff >> 1 : diff << 1); + } + + ds_ = !ds_; +} + +timeval Time::baseTime(unsigned long const cc) { + if (useCycles_) + timeFromCycles(cc); + + timeval baseTime = lastTime_; + baseTime.tv_sec -= seconds_; + return baseTime; +} + +void Time::setBaseTime(timeval baseTime, unsigned long const cc) { + seconds_ = (now() - baseTime).tv_sec; + lastTime_ = baseTime; + lastTime_.tv_sec += seconds_; + + if (useCycles_) + cyclesFromTime(cc); +} + +void Time::setTimeMode(bool useCycles, unsigned long const cc) { + if (useCycles != useCycles_) { + if (useCycles_) + timeFromCycles(cc); + else + cyclesFromTime(cc); + + useCycles_ = useCycles; + } +} + +void Time::update(unsigned long const cc) { + if (useCycles_) { + std::uint32_t diff = (cc - lastCycles_) / (0x400000 << ds_); + seconds_ += diff; + lastCycles_ += diff * (0x400000 << ds_); + } else { + std::uint32_t diff = (now() - lastTime_).tv_sec; + seconds_ += diff; + lastTime_.tv_sec += diff; + } +} + +void Time::cyclesFromTime(unsigned long const cc) { + update(cc); + timeval diff = now() - lastTime_; + lastCycles_ = cc - diff.tv_usec * ((0x400000 << ds_) / 1000000.0f); +} + +void Time::timeFromCycles(unsigned long const cc) { + update(cc); + unsigned long diff = cc - lastCycles_; + timeval usec = { 0, (long)(diff / ((0x400000 << ds_) / 1000000.0f)) }; + lastTime_ = now() - usec; +} + +SYNCFUNC(Time) +{ + NSS(seconds_); + NSS(lastTime_.tv_sec); + NSS(lastTime_.tv_usec); + NSS(lastCycles_); + NSS(useCycles_); + NSS(ds_); +} + +} diff --git a/libgambatte/src/mem/time.h b/libgambatte/src/mem/time.h new file mode 100644 index 0000000000..aa8e49b5e3 --- /dev/null +++ b/libgambatte/src/mem/time.h @@ -0,0 +1,78 @@ +// +// Copyright (C) 2007 by sinamas +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2 as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License version 2 for more details. +// +// You should have received a copy of the GNU General Public License +// version 2 along with this program; if not, write to the +// Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#ifndef TIME_H +#define TIME_H + +#include +#include +#include +#include "newstate.h" + +namespace gambatte { + +struct SaveState; + +struct timeval { + std::uint32_t tv_sec; + std::uint32_t tv_usec; +}; + +class Time { +public: + static timeval now() { + long long micros = std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()) + .count(); + timeval t; + t.tv_usec = micros % 1000000; + t.tv_sec = micros / 1000000; + return t; + } + + Time(); + void loadState(SaveState const &state); + + std::uint32_t get(unsigned long cycleCounter); + void set(std::uint32_t seconds, unsigned long cycleCounter); + void reset(std::uint32_t seconds, unsigned long cycleCounter); + void resetCc(unsigned long oldCc, unsigned long newCc); + void speedChange(unsigned long cycleCounter); + + timeval baseTime(unsigned long cycleCounter); + void setBaseTime(timeval baseTime, unsigned long cycleCounter); + void setTimeMode(bool useCycles, unsigned long cycleCounter); + +private: + std::uint32_t seconds_; + timeval lastTime_; + unsigned long lastCycles_; + bool useCycles_; + bool ds_; + + void update(unsigned long cycleCounter); + void cyclesFromTime(unsigned long cycleCounter); + void timeFromCycles(unsigned long cycleCounter); + +public: + templatevoid SyncState(NewState *ns); +}; + +} + +#endif diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index 2e39855eda..6ddce9da05 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -345,6 +345,7 @@ unsigned long Memory::stop(unsigned long cc) { if (ioamhram_[0x14D] & isCgb()) { psg_.generateSamples(cc + 4, isDoubleSpeed()); lcd_.speedChange((cc + 7) & ~7); + cart_.speedChange(cc); ioamhram_[0x14D] ^= 0x81; intreq_.setEventTime(ioamhram_[0x140] & lcdc_en ? lcd_.nextMode1IrqTime() @@ -403,6 +404,7 @@ unsigned long Memory::resetCounters(unsigned long cc) { unsigned long const oldCC = cc; cc -= dec; intreq_.resetCc(oldCC, cc); + cart_.resetCc(oldCC, cc); tima_.resetCc(oldCC, cc, TimaInterruptRequester(intreq_)); lcd_.resetCc(oldCC, cc); psg_.resetCounter(cc, oldCC, isDoubleSpeed()); @@ -1099,7 +1101,7 @@ void Memory::nontrivial_write(unsigned const p, unsigned const data, unsigned lo if (p < 0xFE00) { if (p < 0xA000) { if (p < 0x8000) { - cart_.mbcWrite(p, data); + cart_.mbcWrite(p, data, cc); } else if (lcd_.vramAccessible(cc)) { lcd_.vramChange(cc); cart_.vrambankptr()[p] = data; @@ -1108,7 +1110,7 @@ void Memory::nontrivial_write(unsigned const p, unsigned const data, unsigned lo if (cart_.wsrambankptr()) cart_.wsrambankptr()[p] = data; else - cart_.rtcWrite(data); + cart_.rtcWrite(data, cc); } else cart_.wramdata(p >> 12 & 1)[p & 0xFFF] = data; } else if (p - 0xFF80u >= 0x7Fu) { diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 051a5ea904..f00e28ac24 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -29,6 +29,7 @@ static unsigned char const agbOverride[0xD] = { 0xFF, 0x00, 0xCD, 0x03, 0x35, 0x #include "gambatte.h" namespace gambatte { + class FilterInfo; class Memory { @@ -42,9 +43,9 @@ public: int debugGetLY() const { return lcd_.debugGetLY(); } void setStatePtrs(SaveState &state); void loadState(SaveState const &state); - void loadSavedata(char const *data) { cart_.loadSavedata(data); } + void loadSavedata(char const *data, unsigned long const cc) { cart_.loadSavedata(data, cc); } int saveSavedataLength() {return cart_.saveSavedataLength(); } - void saveSavedata(char *dest) { cart_.saveSavedata(dest); } + void saveSavedata(char *dest, unsigned long const cc) { cart_.saveSavedata(dest, cc); } void updateInput(); void setBios(char const *buffer, std::size_t size) { @@ -243,10 +244,6 @@ public: lcd_.setScanlineCallback(callback, sl); } - void setRTCCallback(std::uint32_t (*callback)()) { - cart_.setRTCCallback(callback); - } - void setLinkCallback(void(*callback)()) { this->linkCallback_ = callback; } @@ -266,6 +263,9 @@ public: } void setCgbPalette(unsigned *lut); + void setTimeMode(bool useCycles, unsigned long const cc) { + cart_.setTimeMode(useCycles, cc); + } int linkStatus(int which); diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index e56290685d..c130ab5ecb 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -36,7 +36,7 @@ struct SaveState { void set(T *p, std::size_t size) { ptr = p; size_ = size; } friend class SaverList; - friend void setInitState(SaveState &, bool, bool, std::uint32_t, unsigned); + friend void setInitState(SaveState &, bool, bool); private: T *ptr; std::size_t size_; @@ -190,8 +190,14 @@ struct SaveState { unsigned long cycleCounter; } spu; + struct Time { + unsigned long seconds; + unsigned long lastTimeSec; + unsigned long lastTimeUsec; + unsigned long lastCycles; + } time; + struct RTC { - unsigned long baseTime; unsigned long haltTime; unsigned char dataDh; unsigned char dataDl; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 2d96928fd030cb9b9bd00955371f0b3847f7a58e..17b09b4e0ac45dce42e273eb93cc6acafc2ba02c 100644 GIT binary patch delta 70820 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 AcmMzZ From 80c0fe571b4763e97f914f7ac81a2cf2a2548c1e Mon Sep 17 00:00:00 2001 From: Maximilian Peters Date: Wed, 29 May 2019 07:06:38 +0200 Subject: [PATCH 107/138] Squash merge #1505 - set socketServer IP/port via Lua (resolves #1495) --- .../Interfaces/Api/IComm.cs | 2 +- .../Api/Libraries/CommApi.cs | 44 +++++- BizHawk.Client.EmuHawk/ArgParser.cs | 86 +++++----- BizHawk.Client.EmuHawk/Communication.cs | 139 +++++++++-------- BizHawk.Client.EmuHawk/GlobalWin.cs | 6 +- BizHawk.Client.EmuHawk/MainForm.cs | 12 +- BizHawk.Client.EmuHawk/Program.cs | 5 +- .../Libraries/EmuLuaLibrary.Communication.cs | 147 +++++++++++++++--- 8 files changed, 298 insertions(+), 143 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs index 9ef8a5e0c0..e3fe09b68a 100644 --- a/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs @@ -13,7 +13,7 @@ #region MemoryMappedFiles void MmfSetFilename(string filename); - string MmfSetFilename(); + string MmfGetFilename(); int MmfScreenshot(); int MmfWrite(string mmf_filename, string outputString); string MmfRead(string mmf_filename, int expectedSize); diff --git a/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs b/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs index 4c27854761..e66cd0304b 100644 --- a/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs +++ b/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs @@ -48,14 +48,41 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.socketServer.SetTimeout(timeout); } + + public void SocketServerSetIp(string ip) + { + GlobalWin.socketServer.Ip = ip; + } + + public void SetSocketServerPort(int port) + { + GlobalWin.socketServer.Port = port; + } + + public string SocketServerGetIp() + { + return GlobalWin.socketServer.Ip; + } + + public int SocketServerGetPort() + { + return GlobalWin.socketServer.Port; + } + + public string SocketServerGetInfo() + { + return GlobalWin.socketServer.GetInfo(); + } + // All MemoryMappedFile related methods public void MmfSetFilename(string filename) { - GlobalWin.memoryMappedFiles.SetFilename(filename); + GlobalWin.memoryMappedFiles.Filename = filename; } - public string MmfSetFilename() + + public string MmfGetFilename() { - return GlobalWin.memoryMappedFiles.GetFilename(); + return GlobalWin.memoryMappedFiles.Filename; } public int MmfScreenshot() @@ -67,10 +94,13 @@ namespace BizHawk.Client.EmuHawk { return GlobalWin.memoryMappedFiles.WriteToFile(mmf_filename, Encoding.ASCII.GetBytes(outputString)); } + public string MmfRead(string mmf_filename, int expectedSize) { return GlobalWin.memoryMappedFiles.ReadFromFile(mmf_filename, expectedSize).ToString(); } + + // All HTTP related methods public string HttpTest() { @@ -103,19 +133,19 @@ namespace BizHawk.Client.EmuHawk } public void HttpSetPostUrl(string url) { - GlobalWin.httpCommunication.SetPostUrl(url); + GlobalWin.httpCommunication.PostUrl = url; } public void HttpSetGetUrl(string url) { - GlobalWin.httpCommunication.SetGetUrl(url); + GlobalWin.httpCommunication.GetUrl = url; } public string HttpGetPostUrl() { - return GlobalWin.httpCommunication.GetPostUrl(); + return GlobalWin.httpCommunication.PostUrl; } public string HttpGetGetUrl() { - return GlobalWin.httpCommunication.GetGetUrl(); + return GlobalWin.httpCommunication.GetUrl; } } } diff --git a/BizHawk.Client.EmuHawk/ArgParser.cs b/BizHawk.Client.EmuHawk/ArgParser.cs index 5b903647bd..6d053c97aa 100644 --- a/BizHawk.Client.EmuHawk/ArgParser.cs +++ b/BizHawk.Client.EmuHawk/ArgParser.cs @@ -2,14 +2,15 @@ using System.Collections.Generic; using System.Linq; using System.IO; +using System.Windows.Forms; namespace BizHawk.Client.EmuHawk { - class ArgParser - //parses command line arguments and adds the values to a class attribute - //default values are null for strings and false for boolean - //the last value will overwrite previously set values - //unrecognized parameters are simply ignored or in the worst case assumed to be a ROM name [cmdRom] + class ArgParser + //parses command line arguments and adds the values to a class attribute + //default values are null for strings and false for boolean + //the last value will overwrite previously set values + //unrecognized parameters are simply ignored or in the worst case assumed to be a ROM name [cmdRom] { public string cmdRom = null; public string cmdLoadSlot = null; @@ -21,13 +22,13 @@ namespace BizHawk.Client.EmuHawk public string cmdDumpName = null; public HashSet _currAviWriterFrameList; public int _autoDumpLength; - public bool _autoCloseOnDump = false; - // chrome is never shown, even in windowed mode + public bool _autoCloseOnDump = false; + // chrome is never shown, even in windowed mode public bool _chromeless = false; public bool startFullscreen = false; public string luaScript = null; public bool luaConsole = false; - public int socket_port = 9999; + public int socket_port = 0; public string socket_ip = null; public string mmf_filename = null; public string URL_get = null; @@ -35,15 +36,14 @@ namespace BizHawk.Client.EmuHawk public bool? audiosync = null; public void ParseArguments(string[] args) - { for (int i = 0; i < args.Length; i++) - { - // For some reason sometimes visual studio will pass this to us on the commandline. it makes no sense. + { + // For some reason sometimes visual studio will pass this to us on the commandline. it makes no sense. if (args[i] == ">") { i++; - var stdout = args[i]; + var stdout = args[i]; Console.SetOut(new StreamWriter(stdout)); continue; } @@ -78,9 +78,9 @@ namespace BizHawk.Client.EmuHawk foreach (string item in items) { _currAviWriterFrameList.Add(int.Parse(item)); - } - - // automatically set dump length to maximum frame + } + + // automatically set dump length to maximum frame _autoDumpLength = _currAviWriterFrameList.OrderBy(x => x).Last(); } else if (arg.StartsWith("--dump-name=")) @@ -140,39 +140,55 @@ namespace BizHawk.Client.EmuHawk { cmdRom = args[i]; } - } - ////initialize HTTP communication + } + + //initialize HTTP communication if (URL_get != null || URL_post != null) { + GlobalWin.httpCommunication = new Communication.HttpCommunication(); if (URL_get != null) { - GlobalWin.httpCommunication.initialized = true; - GlobalWin.httpCommunication.SetGetUrl(URL_get); + GlobalWin.httpCommunication.GetUrl = URL_get; } if (URL_post != null) { - GlobalWin.httpCommunication.initialized = true; - GlobalWin.httpCommunication.SetPostUrl(URL_post); + GlobalWin.httpCommunication.PostUrl = URL_post; } - } - //inititalize socket server - if (socket_ip != null && socket_port > -1) - { - GlobalWin.socketServer.initialized = true; + } + + //inititalize socket server + if (socket_ip != null && socket_port > 0) + { + GlobalWin.socketServer = new Communication.SocketServer(); GlobalWin.socketServer.SetIp(socket_ip, socket_port); } - else if (socket_ip != null) + else if (socket_ip == null ^ socket_port == 0) { - GlobalWin.socketServer.initialized = true; - GlobalWin.socketServer.SetIp(socket_ip); - } - - //initialize mapped memory files + throw new ArgParserException("Socket server needs both --socket_ip and --socket_port. Socket server was not started"); + } + + //initialize mapped memory files if (mmf_filename != null) { - GlobalWin.memoryMappedFiles.initialized = true; - GlobalWin.memoryMappedFiles.SetFilename(mmf_filename); + GlobalWin.memoryMappedFiles = new Communication.MemoryMappedFiles(); + GlobalWin.memoryMappedFiles.Filename = mmf_filename; } } + + public static string GetCmdConfigFile(string[] args) + { + return args.FirstOrDefault(arg => arg.StartsWith("--config=", StringComparison.InvariantCultureIgnoreCase))?.Substring(9); + } + } + + class ArgParserException : Exception + { + public ArgParserException() + { + } + + public ArgParserException(string message) : base(message) + { + } } -} +} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/Communication.cs b/BizHawk.Client.EmuHawk/Communication.cs index ba61cd1671..ca6bd4b421 100644 --- a/BizHawk.Client.EmuHawk/Communication.cs +++ b/BizHawk.Client.EmuHawk/Communication.cs @@ -12,7 +12,6 @@ using BizHawk.Emulation.Common; using BizHawk.Client.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; using System.Windows.Forms; -using System.IO; namespace BizHawk.Client.EmuHawk { @@ -23,16 +22,14 @@ namespace BizHawk.Client.EmuHawk public class HttpCommunication { private static HttpClient client = new HttpClient(); - private string PostUrl = "http://localhost:9876/post/"; - private string GetUrl = "http://localhost:9876/index"; - public bool initialized = false; + public string PostUrl { get; set; } = null; + public string GetUrl { get; set; } = null; private ScreenShot screenShot = new ScreenShot(); public int timeout = 0; public int default_timeout = 500; public void SetTimeout(int _timeout) { - //timeout = _timeout.TotalMilliseconds; if (timeout == 0 && _timeout == 0) { timeout = default_timeout; @@ -41,32 +38,15 @@ namespace BizHawk.Client.EmuHawk { client.Timeout = new TimeSpan(0, 0, 0, _timeout / 1000, _timeout % 1000); timeout = _timeout; - } - - } - public void SetPostUrl(string url) - { - PostUrl = url; - } - public void SetGetUrl(string url) - { - GetUrl = url; - } - - public string GetGetUrl() - { - return GetUrl; - } - public string GetPostUrl() - { - return PostUrl; + } } public async Task Get(string url) { client.DefaultRequestHeaders.ConnectionClose = false; HttpResponseMessage response = await client.GetAsync(url).ConfigureAwait(false); - if (response.IsSuccessStatusCode) { + if (response.IsSuccessStatusCode) + { return await response.Content.ReadAsStringAsync(); } else @@ -82,11 +62,9 @@ namespace BizHawk.Client.EmuHawk try { response = await client.PostAsync(url, content).ConfigureAwait(false); - } catch (Exception e) { - MessageBox.Show(e.ToString()); return e.ToString(); } @@ -161,19 +139,40 @@ namespace BizHawk.Client.EmuHawk return Post(PostUrl, content).Result; } } + public class SocketServer { + string ip = null; + public string Ip + { + get { return ip; } + set + { + ip = value; + ipAdd = System.Net.IPAddress.Parse(ip); + Connect(); + } + } - public string ip = "192.168.178.21"; - public int port = 9999; - public Decoder decoder = Encoding.UTF8.GetDecoder(); - public Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - public IPAddress ipAdd; - public IPEndPoint remoteEP; - public IVideoProvider currentVideoProvider = null; + int port = 0; + public int Port + { + get { return port; } + set + { + port = value; + Connect(); + } + } + + Decoder decoder = Encoding.UTF8.GetDecoder(); + Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + IPAddress ipAdd; + IPEndPoint remoteEP; + IVideoProvider currentVideoProvider = null; public bool connected = false; public bool initialized = false; - public int retries = 10; + public int Retries { get; set; } = 10; public bool success = false; //indicates whether the last command was executed succesfully public void Initialize(IVideoProvider _currentVideoProvider) @@ -181,8 +180,8 @@ namespace BizHawk.Client.EmuHawk currentVideoProvider = _currentVideoProvider; SetIp(ip, port); initialized = true; - } + public void Connect() { if (!initialized) @@ -194,42 +193,40 @@ namespace BizHawk.Client.EmuHawk soc.Connect(remoteEP); connected = true; soc.ReceiveTimeout = 5; - - } - public void SetIp(string ip_) - { - ip = ip_; - ipAdd = System.Net.IPAddress.Parse(ip); - remoteEP = new IPEndPoint(ipAdd, port); } + public void SetIp(string ip_, int port_) { ip = ip_; port = port_; ipAdd = System.Net.IPAddress.Parse(ip); remoteEP = new IPEndPoint(ipAdd, port); - } + + public string GetInfo() + { + return $"{ip}:{port}"; + } + public void SetTimeout(int timeout) { soc.ReceiveTimeout = timeout; } + public void SocketConnected() { bool part1 = soc.Poll(1000, SelectMode.SelectRead); bool part2 = (soc.Available == 0); - if (part1 && part2) - connected = false; - else - connected = true; + connected = !(part1 && part2); } + public int SendString(string SendString) { - int sentBytes = SendBytes(Encoding.ASCII.GetBytes(SendString)); success = sentBytes > 0; return sentBytes; } + public int SendBytes(byte[] SendBytes) { int sentBytes = 0; @@ -248,6 +245,7 @@ namespace BizHawk.Client.EmuHawk { return SendScreenshot(0); } + public string SendScreenshot(int waitingTime) { if (!connected) @@ -262,7 +260,7 @@ namespace BizHawk.Client.EmuHawk byte[] bmpBytes = screenShot.ImageToByte(img); int sentBytes = 0; int tries = 0; - while (sentBytes <= 0 && tries < retries) + while (sentBytes <= 0 && tries < Retries) { try { @@ -279,7 +277,7 @@ namespace BizHawk.Client.EmuHawk Connect(); } } - success = (tries < retries); + success = (tries < Retries); } } String resp = ""; @@ -294,7 +292,7 @@ namespace BizHawk.Client.EmuHawk { return resp; } - resp = ""; + resp = ReceiveMessage(); if (resp == "") { @@ -302,6 +300,7 @@ namespace BizHawk.Client.EmuHawk } return resp; } + public string ReceiveMessage() { if (!connected) @@ -318,14 +317,15 @@ namespace BizHawk.Client.EmuHawk { receivedLength = soc.Receive(receivedBytes, receivedBytes.Length, 0); resp += Encoding.ASCII.GetString(receivedBytes); - } catch + } + catch { receivedLength = 0; } } - return resp; } + public bool Successful() { return success; @@ -334,29 +334,19 @@ namespace BizHawk.Client.EmuHawk public class MemoryMappedFiles { - public string filename_main = "BizhawkTemp_main"; + public string Filename { get; set; } = "BizhawkTemp_main"; public Dictionary mmf_files = new Dictionary(); public int index = 0; - public bool initialized = false; public int main_size = 10 ^ 5; ScreenShot screenShot = new ScreenShot(); - public void SetFilename(string filename) - { - filename_main = filename; - } - public string GetFilename() - { - return filename_main; - } - public int ScreenShotToFile() { ScreenShot screenShot = new ScreenShot(); var bb = screenShot.MakeScreenShotImage(); var img = bb.ToSysdrawingBitmap(); byte[] bmpBytes = screenShot.ImageToByte(img); - return WriteToFile(@filename_main, bmpBytes); + return WriteToFile(@Filename, bmpBytes); } public int WriteToFile(string filename, byte[] outputBytes) @@ -384,7 +374,6 @@ namespace BizHawk.Client.EmuHawk } catch (Exception) { - } mmf_file = MemoryMappedFile.CreateOrOpen(filename, outputBytes.Length); @@ -417,6 +406,7 @@ namespace BizHawk.Client.EmuHawk { private IVideoProvider currentVideoProvider = null; private ImageConverter converter = new ImageConverter(); + public BitmapBuffer MakeScreenShotImage() { if (currentVideoProvider == null) @@ -425,14 +415,17 @@ namespace BizHawk.Client.EmuHawk } return GlobalWin.DisplayManager.RenderVideoProvider(currentVideoProvider); } + public byte[] ImageToByte(Image img) { return (byte[])converter.ConvertTo(img, typeof(byte[])); } + public string ImageToString(Image img) { return Convert.ToBase64String(ImageToByte(img)); } + public string GetScreenShotAsString() { BitmapBuffer bb = MakeScreenShotImage(); @@ -440,6 +433,18 @@ namespace BizHawk.Client.EmuHawk return Convert.ToBase64String(imgBytes); } } + + class CommunicationSocketServerException : Exception + { + public CommunicationSocketServerException() + { + } + + public CommunicationSocketServerException(string message) : base(message) + { + } + } } } + diff --git a/BizHawk.Client.EmuHawk/GlobalWin.cs b/BizHawk.Client.EmuHawk/GlobalWin.cs index 06a2bbaab5..fa26cc5d71 100644 --- a/BizHawk.Client.EmuHawk/GlobalWin.cs +++ b/BizHawk.Client.EmuHawk/GlobalWin.cs @@ -26,8 +26,8 @@ namespace BizHawk.Client.EmuHawk public static GLManager GLManager; public static int ExitCode; - public static Communication.HttpCommunication httpCommunication = new Communication.HttpCommunication(); - public static Communication.SocketServer socketServer = new Communication.SocketServer(); - public static Communication.MemoryMappedFiles memoryMappedFiles = new Communication.MemoryMappedFiles(); + public static Communication.HttpCommunication httpCommunication = null; + public static Communication.SocketServer socketServer = null; + public static Communication.MemoryMappedFiles memoryMappedFiles = null; } } diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 7d67865723..6ec93e6d70 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -155,8 +155,15 @@ namespace BizHawk.Client.EmuHawk .ReadAllBytes(); } }; - - argParser.ParseArguments(args); + try + { + argParser.ParseArguments(args); + } + catch (ArgParserException e) + { + MessageBox.Show(e.Message); + } + Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt")); @@ -1398,6 +1405,7 @@ namespace BizHawk.Client.EmuHawk private int _lastOpenRomFilter; private ArgParser argParser = new ArgParser(); + // Resources private Bitmap _statusBarDiskLightOnImage; private Bitmap _statusBarDiskLightOffImage; diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 2b0f14d079..4458f2ac75 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -113,9 +113,8 @@ namespace BizHawk.Client.EmuHawk HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler(); - var argParser = new ArgParser(); - argParser.ParseArguments(args); - if (argParser.cmdConfigFile != null) PathManager.SetDefaultIniPath(argParser.cmdConfigFile); + string cmdConfigFile = ArgParser.GetCmdConfigFile(args); + if (cmdConfigFile != null) PathManager.SetDefaultIniPath(cmdConfigFile); try { diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs index b1f5b4b389..4776698360 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs @@ -4,10 +4,6 @@ using NLua; using BizHawk.Emulation.Common; using BizHawk.Client.Common; using System.Text; -using System.Collections.Generic; -using System.Net.Http; -using System.Windows.Forms; - namespace BizHawk.Client.EmuHawk { @@ -37,70 +33,146 @@ namespace BizHawk.Client.EmuHawk { list.AppendLine(function.ToString()); } - return list.ToString(); } [LuaMethod("socketServerScreenShot", "sends a screenshot to the Socket server")] public string SocketServerScreenShot() { - return GlobalWin.socketServer.SendScreenshot(); + CheckSocketServer(); + return GlobalWin.socketServer?.SendScreenshot(); } + [LuaMethod("socketServerScreenShotResponse", "sends a screenshot to the Socket server and retrieves the response")] public string SocketServerScreenShotResponse() { - return GlobalWin.socketServer.SendScreenshot(1000).ToString(); + CheckSocketServer(); + return GlobalWin.socketServer?.SendScreenshot(1000).ToString(); } [LuaMethod("socketServerSend", "sends a string to the Socket server")] - public string SocketServerSend(string SendString) + public int SocketServerSend(string SendString) { - return $"Sent : {GlobalWin.socketServer.SendString(SendString)} bytes"; + if (!CheckSocketServer()) + { + return -1; + } + return GlobalWin.socketServer.SendString(SendString); } + [LuaMethod("socketServerResponse", "receives a message from the Socket server")] public string SocketServerResponse() { - return GlobalWin.socketServer.ReceiveMessage(); + CheckSocketServer(); + return GlobalWin.socketServer?.ReceiveMessage(); } [LuaMethod("socketServerSuccessful", "returns the status of the last Socket server action")] public bool SocketServerSuccessful() { + if (!CheckSocketServer()) + { + return false; + } return GlobalWin.socketServer.Successful(); } + [LuaMethod("socketServerSetTimeout", "sets the timeout in milliseconds for receiving messages")] public void SocketServerSetTimeout(int timeout) { - GlobalWin.socketServer.SetTimeout(timeout); + CheckSocketServer(); + GlobalWin.socketServer?.SetTimeout(timeout); } + + [LuaMethod("socketServerSetIp", "sets the IP address of the Lua socket server")] + public void SocketServerSetIp(string ip) + { + CheckSocketServer(); + GlobalWin.socketServer.Ip = ip; + } + + [LuaMethod("socketServerSetPort", "sets the port of the Lua socket server")] + public void SocketServerSetPort(int port) + { + CheckSocketServer(); + GlobalWin.socketServer.Port = port; + } + + [LuaMethod("socketServerGetIp", "returns the IP address of the Lua socket server")] + public string SocketServerGetIp() + { + return GlobalWin.socketServer?.Ip; + } + + [LuaMethod("socketServerGetPort", "returns the port of the Lua socket server")] + public int? SocketServerGetPort() + { + return GlobalWin.socketServer?.Port; + } + + [LuaMethod("socketServerGetInfo", "returns the IP and port of the Lua socket server")] + public string SocketServerGetInfo() + { + if (!CheckSocketServer()) + { + return ""; + } + return GlobalWin.socketServer.GetInfo(); + } + + private bool CheckSocketServer() + { + if (GlobalWin.socketServer == null) + { + Log("Socket server was not initialized, please initialize it via the command line"); + return false; + } + return true; + } + // All MemoryMappedFile related methods [LuaMethod("mmfSetFilename", "Sets the filename for the screenshots")] public void MmfSetFilename(string filename) { - GlobalWin.memoryMappedFiles.SetFilename(filename); + CheckMmf(); + GlobalWin.memoryMappedFiles.Filename = filename; } + [LuaMethod("mmfGetFilename", "Gets the filename for the screenshots")] - public string MmfSetFilename() + public string MmfGetFilename() { - return GlobalWin.memoryMappedFiles.GetFilename(); + CheckMmf(); + return GlobalWin.memoryMappedFiles?.Filename; } [LuaMethod("mmfScreenshot", "Saves screenshot to memory mapped file")] public int MmfScreenshot() { + CheckMmf(); return GlobalWin.memoryMappedFiles.ScreenShotToFile(); } [LuaMethod("mmfWrite", "Writes a string to a memory mapped file")] public int MmfWrite(string mmf_filename, string outputString) { + CheckMmf(); return GlobalWin.memoryMappedFiles.WriteToFile(mmf_filename, Encoding.ASCII.GetBytes(outputString)); } [LuaMethod("mmfRead", "Reads a string from a memory mapped file")] public string MmfRead(string mmf_filename, int expectedSize) { - return GlobalWin.memoryMappedFiles.ReadFromFile(mmf_filename, expectedSize).ToString(); + CheckMmf(); + return GlobalWin.memoryMappedFiles?.ReadFromFile(mmf_filename, expectedSize).ToString(); } + + private void CheckMmf() + { + if (GlobalWin.memoryMappedFiles == null) + { + Log("Memory mapped file was not initialized, please initialize it via the command line"); + } + } + // All HTTP related methods [LuaMethod("httpTest", "tests HTTP connections")] public string HttpTest() @@ -111,51 +183,76 @@ namespace BizHawk.Client.EmuHawk list.AppendLine("done testing"); return list.ToString(); } + [LuaMethod("httpTestGet", "tests the HTTP GET connection")] public string HttpTestGet() { - return GlobalWin.httpCommunication.TestGet(); + CheckHttp(); + return GlobalWin.httpCommunication?.TestGet(); } + [LuaMethod("httpGet", "makes a HTTP GET request")] public string HttpGet(string url) { - return GlobalWin.httpCommunication.ExecGet(url); + CheckHttp(); + return GlobalWin.httpCommunication?.ExecGet(url); } [LuaMethod("httpPost", "makes a HTTP POST request")] public string HttpPost(string url, string payload) { - return GlobalWin.httpCommunication.ExecPost(url, payload); + CheckHttp(); + return GlobalWin.httpCommunication?.ExecPost(url, payload); } + [LuaMethod("httpPostScreenshot", "HTTP POST screenshot")] public string HttpPostScreenshot() { - return GlobalWin.httpCommunication.SendScreenshot(); + CheckHttp(); + return GlobalWin.httpCommunication?.SendScreenshot(); } + [LuaMethod("httpSetTimeout", "Sets HTTP timeout in milliseconds")] public void HttpSetTimeout(int timeout) { - GlobalWin.httpCommunication.SetTimeout(timeout); + CheckHttp(); + GlobalWin.httpCommunication?.SetTimeout(timeout); } + [LuaMethod("httpSetPostUrl", "Sets HTTP POST URL")] public void HttpSetPostUrl(string url) { - GlobalWin.httpCommunication.SetPostUrl(url); + CheckHttp(); + GlobalWin.httpCommunication.PostUrl = url; } + [LuaMethod("httpSetGetUrl", "Sets HTTP GET URL")] public void HttpSetGetUrl(string url) { - GlobalWin.httpCommunication.SetGetUrl(url); + CheckHttp(); + GlobalWin.httpCommunication.GetUrl = url; } + [LuaMethod("httpGetPostUrl", "Gets HTTP POST URL")] public string HttpGetPostUrl() { - return GlobalWin.httpCommunication.GetPostUrl(); + CheckHttp(); + return GlobalWin.httpCommunication?.PostUrl; } + [LuaMethod("httpGetGetUrl", "Gets HTTP GET URL")] public string HttpGetGetUrl() { - return GlobalWin.httpCommunication.GetGetUrl(); + CheckHttp(); + return GlobalWin.httpCommunication?.GetUrl; + } + + private void CheckHttp() + { + if (GlobalWin.httpCommunication == null) + { + Log("HTTP was not initialized, please initialize it via the command line"); + } } } -} +} \ No newline at end of file From 268ed1a69dd5317888c1343367de94c19960965d Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Wed, 29 May 2019 20:58:01 +1000 Subject: [PATCH 108/138] Fix malformed docs --- BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs | 2 +- BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs | 2 +- BizHawk.Common/NDBDatabase.cs | 2 +- .../Interfaces/IMemoryCallbackSystem.cs | 6 +++--- .../AmstradCPC/Hardware/Display/AmstradGateArray.cs | 4 ++-- .../Consoles/Nintendo/NES/NESControllers.cs | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs index 8dc7c9da03..1a2b40030b 100644 --- a/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs @@ -1,7 +1,7 @@ namespace BizHawk.Client.ApiHawk { /// - /// This interface specifies that a client exposes a given interface, such as , + /// This interface specifies that a client exposes a given interface, such as , /// for use by external tools. /// public interface IExternalApi diff --git a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs index f03313113b..756dcfca33 100644 --- a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs +++ b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs @@ -126,7 +126,7 @@ namespace BizHawk.Client.EmuHawk.WinFormExtensions #region Enumerable to Enumerable /// - /// Converts the outdated IEnumerable Controls property to a IEnumerable like .NET should have done a long time ago + /// Converts the outdated IEnumerable Controls property to an like .NET should have done a long time ago /// public static IEnumerable Controls(this Control control) { diff --git a/BizHawk.Common/NDBDatabase.cs b/BizHawk.Common/NDBDatabase.cs index 86bf0a9f2b..cefeffccc6 100644 --- a/BizHawk.Common/NDBDatabase.cs +++ b/BizHawk.Common/NDBDatabase.cs @@ -97,7 +97,7 @@ namespace BizHawk.Common public long Consumed { get; private set; } /// - /// The amount of bytes of storage available. Store operations <= Remain will always succeed + /// The amount of bytes of storage available. Store operations <= Remain will always succeed /// public long Remain { get { return Capacity - Consumed; } } diff --git a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs index f87a8e492d..23d8808347 100644 --- a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs @@ -64,21 +64,21 @@ namespace BizHawk.Emulation.Common /// Executes all Read callbacks for the given address and domain /// /// The address to check for callbacks - /// The scope that the address pertains to. Must be a value in + /// The scope that the address pertains to. Must be a value in void CallReads(uint addr, string scope); /// /// Executes all Write callbacks for the given address and domain /// /// The address to check for callbacks - /// The scope that the address pertains to. Must be a value in + /// The scope that the address pertains to. Must be a value in void CallWrites(uint addr, string scope); /// /// Executes all Execute callbacks for the given address and domain /// /// The address to check for callbacks - /// The scope that the address pertains to. Must be a value in + /// The scope that the address pertains to. Must be a value in void CallExecutes(uint addr, string scope); /// diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs index 56706302c3..3c3677d92c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs @@ -241,7 +241,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// 1 0 0 I UR LR VM--> /// /// I : if set (1), this will reset the interrupt counter - /// UR : Enable (0) or Disable (1) the upper ROM paging (&C000 to &FFFF). You can select which upper ROM with the I/O address &DF00 + /// UR : Enable (0) or Disable (1) the upper ROM paging (&C000 to &FFFF). You can select which upper ROM with the I/O address &DF00 /// LR : Enable (0) or Disable (1) the lower ROM paging /// VM : Select the video mode 0,1,2 or 3 (it will take effect after the next HSync) /// @@ -561,7 +561,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// The CRCT builds the picture in a strange way, so that the top left of the display area is the first pixel from /// video RAM. The borders come either side of the HSYNC and VSYNCs later on: - /// https://web.archive.org/web/20170501112330im_/http://www.grimware.org/lib/exe/fetch.php/documentations/devices/crtc.6845/crtc.standard.video.frame.png?w=800&h=500 + /// https://web.archive.org/web/20170501112330im_/http://www.grimware.org/lib/exe/fetch.php/documentations/devices/crtc.6845/crtc.standard.video.frame.png?w=800&h=500 /// Therefore when the gate array initialises, we will attempt end the frame early in order to /// sync up at the point where VSYNC is active and HSYNC just begins. This is roughly how a CRT monitor would display the picture. /// The CRT would start a new line at the point where an HSYNC is detected. diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs index c612f335d4..97ec51fa95 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs @@ -612,7 +612,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { /// /// returns true if light was detected at the ppu coordinates specified - /// public LightgunDelegate PPUCallback { get; set; } bool resetting = false; From ceb490828fa1e6090b3cc1f78851119405392683 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Wed, 29 May 2019 21:04:12 +1000 Subject: [PATCH 109/138] Fix docs "not placed on a valid language element" --- BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs | 18 ++++---- .../AmstradCPC/AmstradCPC.Controllers.cs | 4 +- .../Hardware/Disk/NECUPD765.Definitions.cs | 8 ++-- .../Hardware/Display/AmstradGateArray.cs | 12 ++--- .../AmstradCPC/Hardware/Display/CRTC6845.cs | 2 +- .../Hardware/SoundOutput/AY38912.cs | 2 +- .../Computers/AmstradCPC/Machine/CPCBase.cs | 8 ++-- .../Hardware/Disk/NECUPD765.Definitions.cs | 8 ++-- .../Hardware/SoundOuput/AY38912.cs | 2 +- .../ZXSpectrum.Controllers.cs | 6 +-- .../Nintendo/SNES/SNESGraphicsDecoder.cs | 46 +++++++++---------- .../CDFS/ISOVolumeDescriptor.cs | 4 -- BizHawk.Emulation.DiscSystem/Disc.cs | 10 ++-- .../DiscFormats/MDS_Format.cs | 8 ++-- 14 files changed, 67 insertions(+), 71 deletions(-) diff --git a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs index e067b327a5..bdaf8c0350 100644 --- a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs @@ -94,19 +94,19 @@ namespace BizHawk.Client.EmuHawk /// Number of rerecords on movie file void SetMetaData(string gameName, string authors, UInt64 lengthMS, UInt64 rerecords); - /// - /// short description of this IVideoWriter - /// - // string WriterDescription(); +// /// +// /// short description of this IVideoWriter +// /// +// string WriterDescription(); /// /// what default extension this writer would like to put on its output /// string DesiredExtension(); - /// - /// name that command line parameters can refer to - /// - /// - // string ShortName(); +// /// +// /// name that command line parameters can refer to +// /// +// /// +// string ShortName(); } public static class VideoWriterExtensions diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs index 709e9b8e34..bcde9619a2 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs @@ -47,8 +47,8 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // keyboard List keys = new List { - /// http://www.cpcwiki.eu/index.php/Programming:Keyboard_scanning - /// http://www.cpcwiki.eu/index.php/File:Grimware_cpc464_version3_case_top.jpg + // http://www.cpcwiki.eu/index.php/Programming:Keyboard_scanning + // http://www.cpcwiki.eu/index.php/File:Grimware_cpc464_version3_case_top.jpg // Keyboard - row 1 "Key ESC", "Key 1", "Key 2", "Key 3", "Key 4", "Key 5", "Key 6", "Key 7", "Key 8", "Key 9", "Key 0", "Key Dash", "Key Hat", "Key CLR", "Key DEL", diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs index 950cb07d7b..e72da558c8 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs @@ -692,10 +692,10 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// private class Command { - /// - /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command - /// - //public int BitMask { get; set; } +// /// +// /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command +// /// +// public int BitMask { get; set; } /// /// The command code after bitmask has been applied /// diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs index 3c3677d92c..110b2ce975 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs @@ -375,12 +375,12 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// private bool HSYNC; - /// - /// Is set when an initial HSYNC is seen from the CRCT - /// On real hardware interrupt generation is based on the falling edge of the HSYNC signal - /// So in this emulation, once the falling edge is detected, interrupt processing happens - /// - //private bool HSYNC_falling; +// /// +// /// Is set when an initial HSYNC is seen from the CRCT +// /// On real hardware interrupt generation is based on the falling edge of the HSYNC signal +// /// So in this emulation, once the falling edge is detected, interrupt processing happens +// /// +// private bool HSYNC_falling; /// /// Used to count HSYNCs during a VSYNC diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs index 6c9c4c50cc..e17d5572e9 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs @@ -147,6 +147,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// This 16-bit property emulates how the Amstrad CPC Gate Array is connected up to the CRTC /// Built from R12, R13 and CLK + /// /* Memory Address Signal Signal source Signal name A15 6845 MA13 @@ -166,7 +167,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC A1 6845 MA0 A0 Gate-Array CLK */ - /// public ushort AddressLineCPC { get diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs index 97c4a964db..a1ee410cfb 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs @@ -395,6 +395,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// The register array + /// /* The AY-3-8910/8912 contains 16 internal registers as follows: @@ -426,7 +427,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC The AY-3-8912 ignores bit 7 of this register. */ - /// private int[] _registers = new int[16]; /// diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs index a3c87688f2..60dab69ecc 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs @@ -62,10 +62,10 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// public AmstradGateArray GateArray { get; set; } - /// - /// Renders pixels to the screen - /// - //public CRTDevice CRT { get; set; } +// /// +// /// Renders pixels to the screen +// /// +// public CRTDevice CRT { get; set; } /// /// The PPI contoller chip diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Definitions.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Definitions.cs index cb49b7c6cf..351e993631 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Definitions.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Definitions.cs @@ -692,10 +692,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// private class Command { - /// - /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command - /// - //public int BitMask { get; set; } +// /// +// /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command +// /// +// public int BitMask { get; set; } /// /// The command code after bitmask has been applied /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs index 12c821f345..e249d0c02a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs @@ -379,6 +379,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// The register array + /// /* The AY-3-8910/8912 contains 16 internal registers as follows: @@ -410,7 +411,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum The AY-3-8912 ignores bit 7 of this register. */ - ///
private int[] _registers = new int[16]; /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Controllers.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Controllers.cs index 749fc03830..59cd117a90 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Controllers.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Controllers.cs @@ -59,9 +59,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // keyboard List keys = new List { - /// Controller mapping includes all keyboard keys from the following models: - /// https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/ZXSpectrum48k.jpg/1200px-ZXSpectrum48k.jpg - /// https://upload.wikimedia.org/wikipedia/commons/c/ca/ZX_Spectrum%2B.jpg + // Controller mapping includes all keyboard keys from the following models: + // https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/ZXSpectrum48k.jpg/1200px-ZXSpectrum48k.jpg + // https://upload.wikimedia.org/wikipedia/commons/c/ca/ZX_Spectrum%2B.jpg // Keyboard - row 1 "Key True Video", "Key Inv Video", "Key 1", "Key 2", "Key 3", "Key 4", "Key 5", "Key 6", "Key 7", "Key 8", "Key 9", "Key 0", "Key Break", diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs index 41fbc650f4..5d3542f3a7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/SNESGraphicsDecoder.cs @@ -615,29 +615,29 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES } } - /// - /// returns a tilemap which might be resized into 8x8 physical tiles if the 16x16 logical tilesize is specified - /// - //TileEntry[] AdaptTilemap(TileEntry[] map8x8, int tilesWide, int tilesTall, int tilesize) - //{ - // if (tilesize == 8) return map8x8; - // int numTiles = tilesWide * tilesTall; - // var ret = new TileEntry[numTiles * 4]; - // for(int y=0;y +// /// returns a tilemap which might be resized into 8x8 physical tiles if the 16x16 logical tilesize is specified +// /// +// TileEntry[] AdaptTilemap(TileEntry[] map8x8, int tilesWide, int tilesTall, int tilesize) +// { +// if (tilesize == 8) return map8x8; +// int numTiles = tilesWide * tilesTall; +// var ret = new TileEntry[numTiles * 4]; +// for(int y=0;y /// decodes a BG. youll still need to paletteize and colorize it. diff --git a/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs b/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs index 4a4a5cc4d1..14966b9f26 100644 --- a/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs +++ b/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs @@ -165,10 +165,6 @@ namespace BizHawk.Emulation.DiscSystem /// The block address of the first block of the system Path Table is kept in this field ///
public int AddressOfPathTable; - /// - /// This number is used to indicate the revision number of the file structure standard to which the - /// directory search files conform. It is set to one - /// #endregion diff --git a/BizHawk.Emulation.DiscSystem/Disc.cs b/BizHawk.Emulation.DiscSystem/Disc.cs index 88b38540ae..6aef0c30e4 100644 --- a/BizHawk.Emulation.DiscSystem/Disc.cs +++ b/BizHawk.Emulation.DiscSystem/Disc.cs @@ -96,11 +96,11 @@ namespace BizHawk.Emulation.DiscSystem return ret; } - /// - /// The DiscMountPolicy used to mount the disc. Consider this read-only. - /// NOT SURE WE NEED THIS - /// - //public DiscMountPolicy DiscMountPolicy; +// /// +// /// The DiscMountPolicy used to mount the disc. Consider this read-only. +// /// NOT SURE WE NEED THIS +// /// +// public DiscMountPolicy DiscMountPolicy; diff --git a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs index c8ab3222ce..549f906b2d 100644 --- a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs +++ b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs @@ -250,10 +250,10 @@ namespace BizHawk.Emulation.DiscSystem ///
public int Session; - /// - /// this seems just to be the LBA corresponding to AMIN:ASEC:AFRAME (give or take 150). It's not stored on the disc, and it's redundant. - /// - //public int ALBA; +// /// +// /// this seems just to be the LBA corresponding to AMIN:ASEC:AFRAME (give or take 150). It's not stored on the disc, and it's redundant. +// /// +// public int ALBA; /// /// this seems just to be the LBA corresponding to PMIN:PSEC:PFRAME (give or take 150). From cb7e0b0a8290834e4643cb86e01f4560ed23f870 Mon Sep 17 00:00:00 2001 From: MrWint Date: Thu, 30 May 2019 20:16:54 +0200 Subject: [PATCH 110/138] libgambatte: Remove unused RTC callback --- libgambatte/include/gambatte.h | 1 - output/dll/libgambatte.dll | Bin 170496 -> 170496 bytes 2 files changed, 1 deletion(-) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index d86187c0fd..1a841deccd 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -125,7 +125,6 @@ public: void setCDCallback(CDCallback); void setTraceCallback(void (*callback)(void *)); void setScanlineCallback(void (*callback)(), int sl); - void setRTCCallback(std::uint32_t (*callback)()); void setLinkCallback(void(*callback)()); /** Use cycle-based RTC instead of real-time. */ diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 17b09b4e0ac45dce42e273eb93cc6acafc2ba02c..c129498a5a16a3b8c5530974f8b960729f199a42 100644 GIT binary patch delta 109 zcmZqJ!qu>aYXb)(Gn4FxW^TrIZbruK+>A^weXW54F$_S!1jODz%u~X|z!L}J0mYzl lJV3Sx5Jv#zA`o)Z_5GP7K_+hZ_Gh}v$H=-}F^=iJH2{+h6*m9? delta 109 zcmZqJ!qu>aYXb)(^Sn84o4Fa=xfvO^b2Bo%^tA>G#4rE>6A*g?F;58-15X@?$G`xS l;{mcofH(pu7lDwQuJ6wz2{LiJw?ETWK1P=9ig8T$tpUKu8m<5U From 73f4b0bf52fb1af879bf61dc93dc5b2469638981 Mon Sep 17 00:00:00 2001 From: MrWint Date: Thu, 30 May 2019 20:53:17 +0200 Subject: [PATCH 111/138] libgambatte: fix setTimeMode typo --- libgambatte/src/cinterface.cpp | 2 +- output/dll/libgambatte.dll | Bin 170496 -> 170496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 51c4730ae1..9d6e862e36 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -68,7 +68,7 @@ GBEXPORT void gambatte_setlayers(GB *g, unsigned mask) { g->setLayers(mask); } -GBEXPORT void gambatte_setTimeMode(GB *g, bool useCycles) { +GBEXPORT void gambatte_settimemode(GB *g, bool useCycles) { g->setTimeMode(useCycles); } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index c129498a5a16a3b8c5530974f8b960729f199a42..de86acd89ffbcd566dfa3495ec62a43b03e4462c 100644 GIT binary patch delta 182 zcmZqJ!qu>aYXb)(ldozs7h^jYBja{1My6N3R=%nqViaYXb)(6O(K+7h^jYBja{1My6N3R!p)VVi-jTD0nOX)<0*UUTGL$$nQ~Nhx|kT8 zfjA0?%Ye8ah?fKLF(AGP#Gined;8TwCO;;Qkj&gv-~5!+?P4WNT#VaIOPNlq007*! BDHi|$ From 1c0f8ff36b3876d13b05d9452c924f7dc30fbe12 Mon Sep 17 00:00:00 2001 From: MrWint Date: Thu, 30 May 2019 21:11:58 +0200 Subject: [PATCH 112/138] libgambatte: Update makefiles --- libgambatte/Makefile | 1 + libgambatte/libgambatte.vcxproj | 6 +- libgambatte/libgambatte.vcxproj.filters | 180 ++++++++++++------------ 3 files changed, 90 insertions(+), 97 deletions(-) diff --git a/libgambatte/Makefile b/libgambatte/Makefile index 1a2c7ddeed..56452b0f38 100644 --- a/libgambatte/Makefile +++ b/libgambatte/Makefile @@ -30,6 +30,7 @@ SRCS = \ src/mem/cartridge.cpp \ src/mem/memptrs.cpp \ src/mem/rtc.cpp \ + src/mem/time.cpp \ src/newstate.cpp \ src/sound.cpp \ src/sound/channel1.cpp \ diff --git a/libgambatte/libgambatte.vcxproj b/libgambatte/libgambatte.vcxproj index 6612bff667..37d3a96a03 100644 --- a/libgambatte/libgambatte.vcxproj +++ b/libgambatte/libgambatte.vcxproj @@ -156,15 +156,12 @@ + - - - - @@ -189,6 +186,7 @@ + diff --git a/libgambatte/libgambatte.vcxproj.filters b/libgambatte/libgambatte.vcxproj.filters index f096a22f6b..b34a8d79f1 100644 --- a/libgambatte/libgambatte.vcxproj.filters +++ b/libgambatte/libgambatte.vcxproj.filters @@ -15,46 +15,58 @@ - - Header Files - Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files Header Files - - Header Files - - - Header Files - Header Files Header Files - + Header Files - + + Header Files + + + Header Files + + Header Files Header Files - - Header Files - - - Header Files - - + Header Files @@ -69,39 +81,12 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files Header Files - - Header Files - Header Files @@ -111,22 +96,31 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files @@ -134,37 +128,37 @@ Source Files - - Source Files - - - Source Files - - - Source Files - Source Files - - Source Files - - - Source Files - - - Source Files - - + Source Files Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + Source Files - + + Source Files + + + Source Files + + Source Files @@ -185,28 +179,28 @@ Source Files - - Source Files - Source Files - - Source Files - - - Source Files - - - Source Files - Source Files - + Source Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files From dd0d34593e3b3e83c508a11445942c6c1eadf28c Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 1 Jun 2019 12:25:30 -0400 Subject: [PATCH 113/138] Vectrex: More bug fixes --- Assets/gamedb/gamedb_vectrex.txt | 2 ++ .../CPUs/MC6809/Execute.cs | 12 ++++---- .../CPUs/MC6809/Indexed_Modes.cs | 8 ++--- BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs | 23 +++++++++++++++ .../CPUs/MC6809/OP_Tables.cs | 22 +++++++------- .../CPUs/MC6809/Operations.cs | 29 +++++++++++++++++++ .../Consoles/GCE/Vectrex/HW_Registers.cs | 7 +++++ .../Consoles/GCE/Vectrex/VectrexHawk.cs | 16 ++++++++++ 8 files changed, 98 insertions(+), 21 deletions(-) diff --git a/Assets/gamedb/gamedb_vectrex.txt b/Assets/gamedb/gamedb_vectrex.txt index 1a706121e4..f4042d8ead 100644 --- a/Assets/gamedb/gamedb_vectrex.txt +++ b/Assets/gamedb/gamedb_vectrex.txt @@ -1 +1,3 @@ SHA1:67F8513958C04E936B135740ED4EC6E6FA1763D5 Clean Sweep VEC +SHA1:38E38B5C60466146D4648F8929B5CE3A08DCBE0D Scramble VEC + diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs index 836508c574..df96726c14 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Execute.cs @@ -157,7 +157,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x83: IMD_OP_D(SUB16, D); break; // SUBD (Immediate) case 0x84: REG_OP_IMD(AND8, A); break; // ANDA (Immediate) case 0x85: REG_OP_IMD(BIT, A); break; // BITA (Immediate) - case 0x86: REG_OP_IMD(TR, A); break; // LDA (Immediate) + case 0x86: REG_OP_IMD(LD_8, A); break; // LDA (Immediate) case 0x87: ILLEGAL(); break; // ILLEGAL case 0x88: REG_OP_IMD(XOR8, A); break; // EORA (Immediate) case 0x89: REG_OP_IMD(ADC8, A); break; // ADCA (Immediate) @@ -173,7 +173,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0x93: DIR_OP_D(SUB16, D); break; // SUBD (Direct) case 0x94: DIRECT_MEM_4(AND8, A); break; // ANDA (Direct) case 0x95: DIRECT_MEM_4(BIT, A); break; // BITA (Direct) - case 0x96: DIRECT_MEM_4(TR, A); break; // LDA (Direct) + case 0x96: DIRECT_MEM_4(LD_8, A); break; // LDA (Direct) case 0x97: DIRECT_ST_4(A); break; // STA (Direct) case 0x98: DIRECT_MEM_4(XOR8, A); break; // EORA (Direct) case 0x99: DIRECT_MEM_4(ADC8, A); break; // ADCA (Direct) @@ -205,7 +205,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xB3: EXT_OP_D(SUB16, D); break; // SUBD (Extended) case 0xB4: EXT_REG(AND8, A); break; // ANDA (Extended) case 0xB5: EXT_REG(BIT, A); break; // BITA (Extended) - case 0xB6: EXT_REG(TR, A); break; // LDA (Extended) + case 0xB6: EXT_REG(LD_8, A); break; // LDA (Extended) case 0xB7: EXT_ST(A); break; // STA (Extended) case 0xB8: EXT_REG(XOR8, A); break; // EORA (Extended) case 0xB9: EXT_REG(ADC8, A); break; // ADCA (Extended) @@ -221,7 +221,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xC3: IMD_OP_D(ADD16, D); break; // ADDD (Immediate) case 0xC4: REG_OP_IMD(AND8, B); break; // ANDB (Immediate) case 0xC5: REG_OP_IMD(BIT, B); break; // BITB (Immediate) - case 0xC6: REG_OP_IMD(TR, B); break; // LDB (Immediate) + case 0xC6: REG_OP_IMD(LD_8, B); break; // LDB (Immediate) case 0xC7: ILLEGAL(); break; // ILLEGAL case 0xC8: REG_OP_IMD(XOR8, B); break; // EORB (Immediate) case 0xC9: REG_OP_IMD(ADC8, B); break; // ADCB (Immediate) @@ -237,7 +237,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xD3: DIR_OP_D(ADD16, D); break; // ADDD (Direct) case 0xD4: DIRECT_MEM_4(AND8, B); break; // ANDB (Direct) case 0xD5: DIRECT_MEM_4(BIT, B); break; // BITB (Direct) - case 0xD6: DIRECT_MEM_4(TR, B); break; // LDB (Direct) + case 0xD6: DIRECT_MEM_4(LD_8, B); break; // LDB (Direct) case 0xD7: DIRECT_ST_4(B); break; // STB (Direct) case 0xD8: DIRECT_MEM_4(XOR8, B); break; // EORB (Direct) case 0xD9: DIRECT_MEM_4(ADC8, B); break; // ADCB (Direct) @@ -269,7 +269,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case 0xF3: EXT_OP_D(ADD16, D); break; // ADDD (Extended) case 0xF4: EXT_REG(AND8, B); break; // ANDB (Extended) case 0xF5: EXT_REG(BIT, B); break; // BITB (Extended) - case 0xF6: EXT_REG(TR, B); break; // LDB (Extended) + case 0xF6: EXT_REG(LD_8, B); break; // LDB (Extended) case 0xF7: EXT_ST(B); break; // STB (Extended) case 0xF8: EXT_REG(XOR8, B); break; // EORB (Extended) case 0xF9: EXT_REG(ADC8, B); break; // ADCB (Extended) diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs index e330edb35a..89e4e87c8f 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Indexed_Modes.cs @@ -86,7 +86,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void INDEX_OP_LEA(ushort dest) { - PopulateCURINSTR(TR, dest, IDX_EA, + PopulateCURINSTR(LEA, dest, IDX_EA, IDLE); IRQS = 2; @@ -96,7 +96,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(IDLE, RD_INC, ALU, IDX_EA, - RD_INC_OP, ALU2, IDX_EA, SET_ADDR, indexed_op_reg, ALU, ALU2); + RD_INC_OP, ALU2, IDX_EA, LD_16, indexed_op_reg, ALU, ALU2); IRQS = 3; } @@ -114,7 +114,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { PopulateCURINSTR(IDLE, RD_INC, A, IDX_EA, - RD_INC, B, IDX_EA); + RD_INC_OP, B, IDX_EA, LD_16, ADDR, A, B); IRQS = 3; } @@ -430,7 +430,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case I_SBC: INDEX_OP_EX4(SBC8); break; // SBC A,B case I_AND: INDEX_OP_EX4(AND8); break; // AND A,B case I_BIT: INDEX_OP_EX4(BIT); break; // BIT A,B - case I_LD: INDEX_OP_EX4(TR); break; // LD A,B + case I_LD: INDEX_OP_EX4(LD_8); break; // LD A,B case I_ST: INDEX_OP_EX4_ST(); break; // ST A,B case I_XOR: INDEX_OP_EX4(XOR8); break; // XOR A,B case I_ADC: INDEX_OP_EX4(ADC8); break; // ADC A,B diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs index 286b7a6af2..db47fef582 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/MC6809.cs @@ -74,6 +74,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public const ushort CMP16 = 63; public const ushort CMP16D = 64; public const ushort WR_HI_INC = 65; + public const ushort LD_8 = 66; + public const ushort LD_16 = 67; + public const ushort LEA = 68; public MC6809() { @@ -149,6 +152,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 public void ExecuteOne() { //Console.Write(opcode_see + " "); + //Console.WriteLine(Regs[PC] + " "); switch (cur_instr[instr_pntr++]) { case IDLE: @@ -246,6 +250,16 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[cur_instr[instr_pntr++]] = (ushort)((Regs[ALU2] << 8) + Regs[ADDR]); PUL_n_BLD(cur_instr[instr_pntr++]); break; + case LD_8: + LD_8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case LD_16: + LD_16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case LEA: + LEA_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + } break; case WR: @@ -284,6 +298,15 @@ namespace BizHawk.Emulation.Common.Components.MC6809 case TR: TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; + case LD_8: + LD_8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case LD_16: + LD_16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; + case LEA: + LEA_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); + break; case EXG: EXG_Func(cur_instr[instr_pntr++]); break; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs index bc9e27f4ec..2a867db8df 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/OP_Tables.cs @@ -150,7 +150,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void REG_OP_LD_16D() { PopulateCURINSTR(RD_INC, A, PC, - RD_INC, B, PC); + RD_INC_OP, B, PC, LD_16, ADDR, A, B); IRQS = 2; } @@ -160,7 +160,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, IDLE, RD_INC, A, ADDR, - RD_INC, B, ADDR); + RD_INC_OP, B, ADDR, LD_16, ADDR, A, B); IRQS = 4; } @@ -198,7 +198,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 private void REG_OP_LD_16(ushort dest) { PopulateCURINSTR(RD_INC, ALU, PC, - RD_INC_OP, ALU2, PC, SET_ADDR, dest, ALU, ALU2); + RD_INC_OP, ALU2, PC, LD_16, dest, ALU, ALU2); IRQS = 2; } @@ -208,7 +208,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 PopulateCURINSTR(RD_INC_OP, ALU, PC, SET_ADDR, ADDR, DP, ALU, IDLE, RD_INC, ALU, ADDR, - RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + RD_INC_OP, ALU2, ADDR, LD_16, dest, ALU, ALU2); IRQS = 4; } @@ -229,7 +229,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, IDLE, RD_INC, ALU, ADDR, - RD_INC_OP, ALU2, ADDR, SET_ADDR, dest, ALU, ALU2); + RD_INC_OP, ALU2, ADDR, LD_16, dest, ALU, ALU2); IRQS = 5; } @@ -251,7 +251,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 RD_INC_OP, ALU2, PC, SET_ADDR, ADDR, ALU, ALU2, IDLE, RD_INC, A, ADDR, - RD_INC, B, ADDR); + RD_INC_OP, B, ADDR, LD_16, ADDR, A, B); IRQS = 5; } @@ -601,14 +601,14 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } else if (Regs[ALU].Bit(4)) { - PopulateCURINSTR(RD_INC_OP, ALU2, src, + PopulateCURINSTR(RD_INC, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, X, src); Regs[ALU] &= 0xE0; } else if (Regs[ALU].Bit(5)) { - PopulateCURINSTR(RD_INC_OP, ALU2, src, + PopulateCURINSTR(RD_INC, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, Y, src); Regs[ALU] &= 0xC0; @@ -617,12 +617,12 @@ namespace BizHawk.Emulation.Common.Components.MC6809 { if (src == US) { - PopulateCURINSTR(RD_INC_OP, ALU2, src, + PopulateCURINSTR(RD_INC, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, SP, src); } else { - PopulateCURINSTR(RD_INC_OP, ALU2, src, + PopulateCURINSTR(RD_INC, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, US, src); } @@ -630,7 +630,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809 } else if (Regs[ALU].Bit(7)) { - PopulateCURINSTR(RD_INC_OP, ALU2, src, + PopulateCURINSTR(RD_INC, ALU2, src, RD_INC_OP, ADDR, src, SET_ADDR_PUL, PC, src); Regs[ALU] = 0; diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs index 5c06f9296e..6ce7fb9836 100644 --- a/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Operations.cs @@ -85,6 +85,35 @@ namespace BizHawk.Emulation.Common.Components.MC6809 Regs[dest] = Regs[src]; } + public void LD_8_Func(ushort dest, ushort src) + { + Regs[dest] = Regs[src]; + + FlagZ = (Regs[dest] & 0xFF) == 0; + FlagV = false; + FlagN = (Regs[dest] & 0xFF) > 127; + } + + public void LD_16_Func(ushort dest, ushort src_h, ushort src_l) + { + Regs[dest] = (ushort)(Regs[src_h] << 8 | Regs[src_l]); + + FlagZ = Regs[dest] == 0; + FlagV = false; + FlagN = Regs[dest] > 0x7FFF; + } + + // for LEAX/Y, zero flag can be effected, but not for U/S + public void LEA_Func(ushort dest, ushort src) + { + Regs[dest] = Regs[src]; + + if ((dest == X) || (dest == Y)) + { + FlagZ = Regs[dest] == 0; + } + } + public void TST_Func(ushort src) { FlagZ = Regs[src] == 0; diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs index bbc833d62b..49b52c5906 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/HW_Registers.cs @@ -17,6 +17,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public partial class VectrexHawk { public byte dir_dac, dir_ctrl; + public byte reg_A, reg_B; public byte portB_ret, portA_ret; @@ -111,20 +112,26 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex case 0x0: wrt_val = (byte)(value & dir_ctrl); + portB_ret = (byte)(wrt_val | (reg_B & ~(dir_ctrl))); + int_fl &= 0xE7; update_int_fl(); break; case 0x1: wrt_val = (byte)(value & dir_dac); + portA_ret = (byte)(wrt_val | (reg_A & ~(dir_dac))); + int_fl &= 0xFC; update_int_fl(); break; case 0x2: dir_ctrl = value; + Console.WriteLine("dir_ctrl: " + value); break; case 0x3: dir_dac = value; + Console.WriteLine("dir_dac: " + value); break; case 0x4: t1_low = value; diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs index bbf36349b5..442924488f 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs @@ -68,6 +68,21 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex Console.WriteLine("SHA1:" + rom.HashSHA1(0, rom.Length)); _rom = rom; + + // mirror games that are too small + if (_rom.Length < 0x8000) + { + _rom = new byte[0x8000]; + + for (int i = 0; i < 0x8000 / rom.Length; i++) + { + for (int j = 0; j < rom.Length; j++) + { + _rom[j + i * rom.Length] = rom[j]; + } + } + } + Setup_Mapper(); _frameHz = 60; @@ -114,6 +129,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex private void Setup_Mapper() { mapper = new MapperDefault(); + mapper.Core = this; } } } From e60896c1b745ef573fde784155432bef44e78b18 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 1 Jun 2019 19:44:01 -0400 Subject: [PATCH 114/138] A2600: Refactor audio and savestate it. --- .../Consoles/Atari/2600/Tia/TIA.cs | 19 +- .../Consoles/Atari/2600/Tia/Tia.Audio.cs | 328 ++++++++++++++---- .../Consoles/Atari/2600/Tia/Tia.SyncState.cs | 4 + 3 files changed, 266 insertions(+), 85 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs index 93f6a3b1ad..d7b2901d1e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/TIA.cs @@ -126,10 +126,9 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 private HMoveData _hmove; private BallData _ball; - private readonly Audio[] AUD = { new Audio(), new Audio() }; + private readonly Audio AUD =new Audio(); // current audio register state used to sample correct positions in the scanline (clrclk 0 and 114) - ////public byte[] current_audio_register = new byte[6]; public readonly short[] LocalAudioCycles = new short[2000]; private static int ReverseBits(int value, int bits) @@ -809,8 +808,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 { if (AudioClocks < 2000) { - LocalAudioCycles[AudioClocks] += (short)(AUD[0].Cycle() / 2); - LocalAudioCycles[AudioClocks] += (short)(AUD[1].Cycle() / 2); + LocalAudioCycles[AudioClocks] += (short)(AUD.Cycle_L() / 2); + LocalAudioCycles[AudioClocks] += (short)(AUD.Cycle_R() / 2); AudioClocks++; } } @@ -1258,27 +1257,27 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 } else if (maskedAddr == 0x15) // AUDC0 { - AUD[0].AUDC = (byte)(value & 15); + AUD.AUDC_L = (byte)(value & 15); } else if (maskedAddr == 0x16) // AUDC1 { - AUD[1].AUDC = (byte)(value & 15); + AUD.AUDC_R = (byte)(value & 15); } else if (maskedAddr == 0x17) // AUDF0 { - AUD[0].AUDF = (byte)((value & 31) + 1); + AUD.AUDF_L = (byte)((value & 31) + 1); } else if (maskedAddr == 0x18) // AUDF1 { - AUD[1].AUDF = (byte)((value & 31) + 1); + AUD.AUDF_R = (byte)((value & 31) + 1); } else if (maskedAddr == 0x19) // AUDV0 { - AUD[0].AUDV = (byte)(value & 15); + AUD.AUDV_L = (byte)(value & 15); } else if (maskedAddr == 0x1A) // AUDV1 { - AUD[1].AUDV = (byte)(value & 15); + AUD.AUDV_R = (byte)(value & 15); } else if (maskedAddr == 0x1B) // GRP0 { diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.Audio.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.Audio.cs index 3c84e12bff..fa95102db1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.Audio.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.Audio.cs @@ -8,88 +8,98 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 public class Audio { // noise/division control - public byte AUDC = 0; + public byte AUDC_L = 0; + public byte AUDC_R = 0; // frequency divider - public byte AUDF = 1; + public byte AUDF_L = 1; + public byte AUDF_R = 1; // volume - public byte AUDV = 0; + public byte AUDV_L = 0; + public byte AUDV_R = 0; // 2 state counter - private bool sr1 = true; + private bool sr1_L = true; + private bool sr1_R = true; // 4 bit shift register - private int sr4 = 0x0f; + private int sr4_L = 0x0f; + private int sr4_R = 0x0f; // 5 bit shift register - private int sr5 = 0x1f; + private int sr5_L = 0x1f; + private int sr5_R = 0x1f; // 9 bit shift register - private int sr9 = 0x1ff; + private int sr9_L = 0x1ff; + private int sr9_R = 0x1ff; // 3 state counter - private int sr3 = 2; + private int sr3_L = 2; + private int sr3_R = 2; // counter based off AUDF - private byte freqcnt; + private byte freqcnt_L; + private byte freqcnt_R; // latched audio value - private bool on = true; + private bool on_L = true; + private bool on_R = true; - private bool Run3() + private bool Run3_L() { - sr3++; - if (sr3 == 3) + sr3_L++; + if (sr3_L == 3) { - sr3 = 0; + sr3_L = 0; return true; } return false; } - private bool Run4() + private bool Run4_L() { - bool ret = (sr4 & 1) != 0; - bool c = ((sr4 & 1) != 0) ^ ((sr4 & 2) != 0); - sr4 = (sr4 >> 1) | (c ? 8 : 0); + bool ret = (sr4_L & 1) != 0; + bool c = ((sr4_L & 1) != 0) ^ ((sr4_L & 2) != 0); + sr4_L = (sr4_L >> 1) | (c ? 8 : 0); return ret; } - private bool Run5() + private bool Run5_L() { - bool ret = (sr5 & 1) != 0; - bool c = ((sr5 & 1) != 0) ^ ((sr5 & 4) != 0); - sr5 = (sr5 >> 1) | (c ? 16 : 0); + bool ret = (sr5_L & 1) != 0; + bool c = ((sr5_L & 1) != 0) ^ ((sr5_L & 4) != 0); + sr5_L = (sr5_L >> 1) | (c ? 16 : 0); return ret; } - private bool One4() + private bool One4_L() { - bool ret = (sr4 & 1) != 0; - sr4 = (sr4 >> 1) | 8; + bool ret = (sr4_L & 1) != 0; + sr4_L = (sr4_L >> 1) | 8; return ret; } - private bool One5() + private bool One5_L() { - bool ret = (sr5 & 1) != 0; - sr5 = (sr5 >> 1) | 16; + bool ret = (sr5_L & 1) != 0; + sr5_L = (sr5_L >> 1) | 16; return ret; } - private bool Run1() + private bool Run1_L() { - sr1 = !sr1; - return !sr1; + sr1_L = !sr1_L; + return !sr1_L; } - private bool Run9() + private bool Run9_L() { - bool ret = (sr9 & 1) != 0; - bool c = ((sr9 & 1) != 0) ^ ((sr9 & 16) != 0); - sr9 = (sr9 >> 1) | (c ? 256 : 0); + bool ret = (sr9_L & 1) != 0; + bool c = ((sr9_L & 1) != 0) ^ ((sr9_L & 16) != 0); + sr9_L = (sr9_L >> 1) | (c ? 256 : 0); return ret; } @@ -97,92 +107,92 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 /// call me approx 31k times a second /// /// 16 bit audio sample - public short Cycle() + public short Cycle_L() { - if (++freqcnt >= AUDF) + if (++freqcnt_L >= AUDF_L) { - freqcnt = 0; - switch (AUDC) + freqcnt_L = 0; + switch (AUDC_L) { case 0x00: case 0x0b: // Both have a 1 s - One5(); - on = One4(); + One5_L(); + on_L = One4_L(); break; case 0x01: // Both run, but the 5 bit is ignored - on = Run4(); + on_L = Run4_L(); //Run5(); break; case 0x02: - if ((sr5 & 0x0f) == 0 || (sr5 & 0x0f) == 0x0f) + if ((sr5_L & 0x0f) == 0 || (sr5_L & 0x0f) == 0x0f) { - on = Run4(); + on_L = Run4_L(); } - Run5(); + Run5_L(); break; case 0x03: - if (Run5()) + if (Run5_L()) { - on = Run4(); + on_L = Run4_L(); } break; case 0x04: - Run5(); - One4(); - on = Run1(); + Run5_L(); + One4_L(); + on_L = Run1_L(); break; case 0x05: - One5(); - Run4(); - on = Run1(); + One5_L(); + Run4_L(); + on_L = Run1_L(); break; case 0x06: case 0x0a: - Run5(); - if ((sr5 & 0x0f) == 0) + Run5_L(); + if ((sr5_L & 0x0f) == 0) { - on = false; + on_L = false; } - else if ((sr5 & 0x0f) == 0x0f) + else if ((sr5_L & 0x0f) == 0x0f) { - on = true; + on_L = true; } break; case 0x07: case 0x09: - on = Run5(); + on_L = Run5_L(); break; case 0x08: - on = Run9(); + on_L = Run9_L(); break; case 0x0c: case 0x0d: - if (Run3()) + if (Run3_L()) { - on = Run1(); + on_L = Run1_L(); } break; case 0x0e: - if (Run3()) + if (Run3_L()) { goto case 0x06; } break; case 0x0f: - if (Run3()) + if (Run3_L()) { goto case 0x07; } @@ -191,21 +201,189 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 } } - return (short)(on ? AUDV * 1092 : 0); + return (short)(on_L ? AUDV_L * 1092 : 0); + } + + private bool Run3_R() + { + sr3_R++; + if (sr3_R == 3) + { + sr3_R = 0; + return true; + } + + return false; + } + + private bool Run4_R() + { + bool ret = (sr4_R & 1) != 0; + bool c = ((sr4_R & 1) != 0) ^ ((sr4_R & 2) != 0); + sr4_R = (sr4_R >> 1) | (c ? 8 : 0); + return ret; + } + + private bool Run5_R() + { + bool ret = (sr5_R & 1) != 0; + bool c = ((sr5_R & 1) != 0) ^ ((sr5_R & 4) != 0); + sr5_R = (sr5_R >> 1) | (c ? 16 : 0); + return ret; + } + + private bool One4_R() + { + bool ret = (sr4_R & 1) != 0; + sr4_R = (sr4_R >> 1) | 8; + return ret; + } + + private bool One5_R() + { + bool ret = (sr5_R & 1) != 0; + sr5_R = (sr5_R >> 1) | 16; + return ret; + } + + private bool Run1_R() + { + sr1_R = !sr1_R; + return !sr1_R; + } + + private bool Run9_R() + { + bool ret = (sr9_R & 1) != 0; + bool c = ((sr9_R & 1) != 0) ^ ((sr9_R & 16) != 0); + sr9_R = (sr9_R >> 1) | (c ? 256 : 0); + return ret; + } + + /// + /// call me approx 31k times a second + /// + /// 16 bit audio sample + public short Cycle_R() + { + if (++freqcnt_R >= AUDF_R) + { + freqcnt_R = 0; + switch (AUDC_R) + { + case 0x00: + case 0x0b: + // Both have a 1 s + One5_R(); + on_R = One4_R(); + break; + + case 0x01: + // Both run, but the 5 bit is ignored + on_R = Run4_R(); + //Run5(); + break; + case 0x02: + if ((sr5_R & 0x0f) == 0 || (sr5_R & 0x0f) == 0x0f) + { + on_R = Run4_R(); + } + + Run5_R(); + break; + case 0x03: + if (Run5_R()) + { + on_R = Run4_R(); + } + + break; + + case 0x04: + Run5_R(); + One4_R(); + on_R = Run1_R(); + break; + + case 0x05: + One5_R(); + Run4_R(); + on_R = Run1_R(); + break; + + case 0x06: + case 0x0a: + Run5_R(); + if ((sr5_R & 0x0f) == 0) + { + on_R = false; + } + else if ((sr5_R & 0x0f) == 0x0f) + { + on_R = true; + } + + break; + + case 0x07: + case 0x09: + on_R = Run5_R(); + break; + + case 0x08: + on_R = Run9_R(); + break; + case 0x0c: + case 0x0d: + if (Run3_R()) + { + on_R = Run1_R(); + } + + break; + case 0x0e: + if (Run3_R()) + { + goto case 0x06; + } + + break; + case 0x0f: + if (Run3_R()) + { + goto case 0x07; + } + + break; + } + } + + return (short)(on_R ? AUDV_R * 1092 : 0); } public void SyncState(Serializer ser) { - ser.Sync(nameof(AUDC), ref AUDC); - ser.Sync(nameof(AUDF), ref AUDF); - ser.Sync(nameof(AUDV), ref AUDV); - ser.Sync(nameof(sr1), ref sr1); - ser.Sync(nameof(sr3), ref sr3); - ser.Sync(nameof(sr4), ref sr4); - ser.Sync(nameof(sr5), ref sr5); - ser.Sync(nameof(sr9), ref sr9); - ser.Sync(nameof(freqcnt), ref freqcnt); - ser.Sync(nameof(on), ref on); + ser.Sync(nameof(AUDC_L), ref AUDC_L); + ser.Sync(nameof(AUDF_L), ref AUDF_L); + ser.Sync(nameof(AUDV_L), ref AUDV_L); + ser.Sync(nameof(sr1_L), ref sr1_L); + ser.Sync(nameof(sr3_L), ref sr3_L); + ser.Sync(nameof(sr4_L), ref sr4_L); + ser.Sync(nameof(sr5_L), ref sr5_L); + ser.Sync(nameof(sr9_L), ref sr9_L); + ser.Sync(nameof(freqcnt_L), ref freqcnt_L); + ser.Sync(nameof(on_L), ref on_L); + + ser.Sync(nameof(AUDC_R), ref AUDC_R); + ser.Sync(nameof(AUDF_R), ref AUDF_R); + ser.Sync(nameof(AUDV_R), ref AUDV_R); + ser.Sync(nameof(sr1_R), ref sr1_R); + ser.Sync(nameof(sr3_R), ref sr3_R); + ser.Sync(nameof(sr4_R), ref sr4_R); + ser.Sync(nameof(sr5_R), ref sr5_R); + ser.Sync(nameof(sr9_R), ref sr9_R); + ser.Sync(nameof(freqcnt_R), ref freqcnt_R); + ser.Sync(nameof(on_R), ref on_R); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.SyncState.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.SyncState.cs index 43ad77adb1..252f74e644 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.SyncState.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Tia/Tia.SyncState.cs @@ -72,6 +72,10 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 ser.Sync(nameof(AudioClocks), ref AudioClocks); ser.Sync(nameof(New_Frame), ref New_Frame); + ser.BeginSection("Audio"); + AUD.SyncState(ser); + ser.EndSection(); + ser.BeginSection("Player0"); _player0.SyncState(ser); ser.EndSection(); From a93916e24cf0abc1d329986dd6bf897f607a66a5 Mon Sep 17 00:00:00 2001 From: MrWint Date: Sun, 2 Jun 2019 13:24:54 +0200 Subject: [PATCH 115/138] Gambatte core: Add RTC divisor offset support. --- .../Nintendo/Gameboy/Gambatte.ISettable.cs | 5 +++++ .../Consoles/Nintendo/Gameboy/Gambatte.cs | 1 + .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 10 ++++++++++ libgambatte/include/gambatte.h | 3 +++ libgambatte/src/cinterface.cpp | 4 ++++ libgambatte/src/cpu.h | 1 + libgambatte/src/gambatte.cpp | 4 ++++ libgambatte/src/mem/cartridge.h | 1 + libgambatte/src/mem/time.cpp | 9 +++++---- libgambatte/src/mem/time.h | 2 ++ libgambatte/src/memory.h | 1 + output/dll/libgambatte.dll | Bin 170496 -> 171008 bytes 12 files changed, 37 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs index 3681c532d3..70a2aef2fe 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs @@ -116,6 +116,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy [DefaultValue(false)] public bool RealTimeRTC { get; set; } + [DisplayName("RTC Divisor Offset")] + [Description("CPU clock frequency relative to real time clock. Base value is 2^22 Hz. Used in cycle-based RTC to sync on real hardware to account for RTC imperfections.")] + [DefaultValue(0)] + public int RTCDivisorOffset { get; set; } + [DisplayName("Equal Length Frames")] [Description("When false, emulation frames sync to vblank. Only useful for high level TASing.")] [DefaultValue(false)] diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 3b837f5b78..0de16d0723 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -130,6 +130,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { LibGambatte.gambatte_settimemode(GambatteState, false); } + LibGambatte.gambatte_setrtcdivisoroffset(GambatteState, _syncSettings.RTCDivisorOffset); _cdCallback = new LibGambatte.CDCallback(CDCallbackProc); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index 038ff62021..d156afdb63 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -280,6 +280,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_settimemode(IntPtr core, bool useCycles); + /// + /// Adjusts the CPU clock frequency relative to real time. Base value is 2^22 Hz. + /// This is used to account for drift in the RTC when syncing cycle-based RTC to real hardware. + /// RTCs in carts are not perfectly accurate, and the value will differ from cart to cart. + /// + /// opaque state pointer + /// CPU frequency adjustment + [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern void gambatte_setrtcdivisoroffset(IntPtr core, int rtcDivisorOffset); + /// /// Returns true if the currently loaded ROM image is treated as having CGB support. /// diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 1a841deccd..368b2a4727 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -130,6 +130,9 @@ public: /** Use cycle-based RTC instead of real-time. */ void setTimeMode(bool useCycles); + /** adjust the assumed clock speed of the CPU compared to the RTC */ + void setRtcDivisorOffset(long const rtcDivisorOffset); + /** Returns true if the currently loaded ROM image is treated as having CGB support. */ bool isCgb() const; diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 9d6e862e36..f9b4ced4fb 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -72,6 +72,10 @@ GBEXPORT void gambatte_settimemode(GB *g, bool useCycles) { g->setTimeMode(useCycles); } +GBEXPORT void gambatte_setrtcdivisoroffset(GB *g, int rtcDivisorOffset) { + g->setRtcDivisorOffset(rtcDivisorOffset); +} + GBEXPORT void gambatte_reset(GB *g) { g->reset(); } diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 6059b0fad4..96c1a25b4f 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -91,6 +91,7 @@ public: mem_.setCgbPalette(lut); } void setTimeMode(bool useCycles) { mem_.setTimeMode(useCycles, cycleCounter_); } + void setRtcDivisorOffset(long const rtcDivisorOffset) { mem_.setRtcDivisorOffset(rtcDivisorOffset); } void setBios(char const *buffer, std::size_t size) { mem_.setBios(buffer, size); } bool gbIsCgb() { return mem_.gbIsCgb(); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index d222874ac6..0bc0639a76 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -134,6 +134,10 @@ void GB::setTimeMode(bool useCycles) { p_->cpu.setTimeMode(useCycles); } +void GB::setRtcDivisorOffset(long const rtcDivisorOffset) { + p_->cpu.setRtcDivisorOffset(rtcDivisorOffset); +} + LoadRes GB::load(char const *romfiledata, unsigned romfilelength, unsigned const flags) { LoadRes const loadres = p_->cpu.load(romfiledata, romfilelength, flags & FORCE_DMG, flags & MULTICART_COMPAT); diff --git a/libgambatte/src/mem/cartridge.h b/libgambatte/src/mem/cartridge.h index db46afb262..e07baa4aa8 100644 --- a/libgambatte/src/mem/cartridge.h +++ b/libgambatte/src/mem/cartridge.h @@ -71,6 +71,7 @@ public: void resetCc(unsigned long const oldCc, unsigned long const newCc) { time_.resetCc(oldCc, newCc); } void speedChange(unsigned long const cc) { time_.speedChange(cc); } void setTimeMode(bool useCycles, unsigned long const cc) { time_.setTimeMode(useCycles, cc); } + void setRtcDivisorOffset(long const rtcDivisorOffset) { time_.setRtcDivisorOffset(rtcDivisorOffset); } void rtcWrite(unsigned data, unsigned long const cc) { rtc_.write(data, cc); } unsigned char rtcRead() const { return *rtc_.activeData(); } void loadSavedata(char const *data, unsigned long cycleCounter); diff --git a/libgambatte/src/mem/time.cpp b/libgambatte/src/mem/time.cpp index 71e92d1356..87ffb7e10c 100644 --- a/libgambatte/src/mem/time.cpp +++ b/libgambatte/src/mem/time.cpp @@ -34,6 +34,7 @@ static timeval operator-(timeval l, timeval r) { Time::Time() : useCycles_(true) +, rtcDivisor_(0x400000) { } @@ -108,9 +109,9 @@ void Time::setTimeMode(bool useCycles, unsigned long const cc) { void Time::update(unsigned long const cc) { if (useCycles_) { - std::uint32_t diff = (cc - lastCycles_) / (0x400000 << ds_); + std::uint32_t diff = (cc - lastCycles_) / (rtcDivisor_ << ds_); seconds_ += diff; - lastCycles_ += diff * (0x400000 << ds_); + lastCycles_ += diff * (rtcDivisor_ << ds_); } else { std::uint32_t diff = (now() - lastTime_).tv_sec; seconds_ += diff; @@ -121,13 +122,13 @@ void Time::update(unsigned long const cc) { void Time::cyclesFromTime(unsigned long const cc) { update(cc); timeval diff = now() - lastTime_; - lastCycles_ = cc - diff.tv_usec * ((0x400000 << ds_) / 1000000.0f); + lastCycles_ = cc - diff.tv_usec * ((rtcDivisor_ << ds_) / 1000000.0f); } void Time::timeFromCycles(unsigned long const cc) { update(cc); unsigned long diff = cc - lastCycles_; - timeval usec = { 0, (long)(diff / ((0x400000 << ds_) / 1000000.0f)) }; + timeval usec = { 0, (long)(diff / ((rtcDivisor_ << ds_) / 1000000.0f)) }; lastTime_ = now() - usec; } diff --git a/libgambatte/src/mem/time.h b/libgambatte/src/mem/time.h index aa8e49b5e3..3b720bea78 100644 --- a/libgambatte/src/mem/time.h +++ b/libgambatte/src/mem/time.h @@ -57,12 +57,14 @@ public: timeval baseTime(unsigned long cycleCounter); void setBaseTime(timeval baseTime, unsigned long cycleCounter); void setTimeMode(bool useCycles, unsigned long cycleCounter); + void setRtcDivisorOffset(long const rtcDivisorOffset) { rtcDivisor_ = 0x400000L + rtcDivisorOffset; } private: std::uint32_t seconds_; timeval lastTime_; unsigned long lastCycles_; bool useCycles_; + unsigned long rtcDivisor_; bool ds_; void update(unsigned long cycleCounter); diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index f00e28ac24..7d7dcc1d73 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -266,6 +266,7 @@ public: void setTimeMode(bool useCycles, unsigned long const cc) { cart_.setTimeMode(useCycles, cc); } + void setRtcDivisorOffset(long const rtcDivisorOffset) { cart_.setRtcDivisorOffset(rtcDivisorOffset); } int linkStatus(int which); diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index de86acd89ffbcd566dfa3495ec62a43b03e4462c..e482dab5d7df3febde5246fe253eec2c6ed619d5 100644 GIT binary patch delta 58193 zcmcG%30zd=_dkB`06J_ADkusnDlSPDikgTOqo{+TQkq&>X_l#NrkJ)4G$2gZN$r}~ zR&8Ibv@AfW1Q#GJw@R%~CED_t8spXEH~oadbL zoM*WU`R_&Kmq%>0%H3zaesa2G{GE_`Bt=@<*rYSEB)ujI=c^aVv%-E4m83#-rRJOH7>Rw9+`Ke7mTDr)s z!_inz{8^0%?ImBMriM;(rrsAKIox^4Lw#{mB#V@Gz+TQpO07dV;r;HUEIEo!*$UT! zy2Cv^IW@<#^mnjxcvhdHi~GUkOoy_^`$8e=6=c#X9SYF4NRZOK^aOC+OXJ%T=F%iw z+^a+JTf;OYxxqKMX6YH=*ob`1(sM?#W~mieveX`!QAiz@$Ae5?q_UOjnxz-3mxWCo z)UZ^Nwg_4Gdc%H@r7c#XqU`pb`5sb3m{f;rN7D7%KQaIG_3E~;i!Le;ktFX%;6U#F zKgv>;QtfcNsMMhxawxUlanx(~rb;!oRhlJio|@gNkDR*co>rl$cL7F`2{8=4 z_42m2pq5C2mczZGHbhe0*30`IhMb}kqMQs9n6HbrfI+@j{ni>kpe_*ER+?WHWop2o zw1u_PAK6I#eWG%^LkV}dHg8n>gm;rSs$;@?;`jFOx$$epkXmw*lN|0W{CMJCwOAxy z+)DN5@c1z$NOPqxH{PMN&+$Y*OeG3qQk#NpWOsWxIxYF2K0>*@IZCQJE}~!GFCaT>#{X^(%Qk`@@}T1A(?Y>tzveiNA^->&wH8sHp2m0+0Zi@RbJ(Ta3< zCMPF(-Pe&%3#CV2z&4~g$qN;I!bc-1z!s@&3kfa`Tex=Q^5{~(in3YOXQ?Sssm^<- zg%IW8tN>9qU*9Ooc)}rv@Y{T3b3Os0m>RgWIZl8qz!AczPet1jCM^Zyv>hbIH1cre zt7>#Xa=6Mjsym`Dksno0Mqe)Hr~}%}?f5t%;wRY{^uPRzx|)L)X`gsMP~T~j2>0F7 zW~97N?QiQW=hAQDPy~r=x3m%Cz0zJI=aZwkcJ$ru@D!A*vutUzXe>y!!uGh>^UF1i z9m!UTnkq84|~R!S%u<#@uz zKssA#Y}*l*SX{Sl&sOrw)jw?y$}7}+V}{7(>RU0LAZATWZ~27!Ys?Vm7SJlJysx{x zWW{DAvppq;K`GhEvC&?VPxaoD_ev5*E(vb0&i8`9Y-TaQshwG;lWYNXl;=7QDii>7 zl<*woKm~Psl=5UGMR2?F*(jypjQV!l;ZB+>3XZ|ipj%+uBR{jdR}vB?8n?x6D=VOB z#O@vuYPXdZSjoHGBdnAT7wITUM~HL`r6WZ;meMpg06*TYxM^CkD+NTl;3!Q#y`)x> zq|R*@Jyb%KZPd2NTDyB}A~lN^&5|hHMx>KD{)uoHgCc~#c=hde9S0{OV+4F)4@DG8 zmW@2PLAOQ*3d!-fN!jj|@2P*ao8}~3IY+5lG&kSP=`7D!St%IA(c677E=2{Y_|3~^ z<7BzrXSj7=l(|>N@~;)Yj#=(dTt=lYV_Vur?03xCW_PcUP-s_{ek?jGK?ezv*wM)nNOfg{k7S!;7@kK4} z;!wo&?TP!>uQXtythUn7jv=+S(yIEoMkPwD_0t`$io@!njsqaYs~ugvYQf7 zsn|$t_h13A|0mx*LPK84OM?XJ#CVdrd#6}+Mf^pVmBYE}!@O@kO+M{1DYQ@7L=-&B zB@ArkU{flW5tS41sZ8aJlhz5gvXP;)-NiIMkZgq{4FoJ3tR=-X43G*hDW*YyR76QJ z4FRMgONwa#AQe?oOzw|V^yz)Q@}YTmF?%`+Ty-<5>O$Scyq@BG4CiT(*h;&PY*SK9 zV*qV!CB-xX@*jxd0h)?=yrkHsZtk2sq1%0pQ8Y{01{*0WNpkNi_fgMxd*5D;p01~& z8W#-{gfE|~;%nI5XDi$~5=id%k~cyyhiC9MH6`IPD-8pS;yS0!OSq^jbv-A&f)*dP z!u>$AmAN<=ydx{hIrW`{_CrY#2;vvpN?oK0BvX+jRUkPCNzw(9Ly;t9AURxdg|=1C zC3MapW!P<_Y9iqVF6u67vyi0zBI!WVM#&sn!R|&$j@R{<&o|rW`dz&$F*fosEObyh z*{3F{^AkI8D6^HGaqSGvQvS#qT0xETY_qfE7pW&%C0vkcE3NU>Ufw|6Dc)~K-`6P1 zmPXxCU zN-*$zP4K?XB#SlcPQ;&1e}BN!Ao(t#LOw9@M1i?mAxDI85mhBzn&qw_QEFHY8M@P* z!KlA=#!vhLWhrO8k5P3L%m-4+3Gya&V%H@3v^u|Qyz`bXd_MipD_Ico0H}|Ag7hYa z7Aqzzq|&ZbW|gp$^rC6R4lyIE+$!x-gd#?GLMB;L?`r2MpHK9aOtDDF!KSM9n<`oE>o?XU#!v{O1!GZ_esLgLaAPrEsFM(zTWjEH zzdpGmjQZ6Teq$-MRY$FnwZdHc^%8|Fs3$l0e0D@QcyHAshyY#;XpH#`ug&!w+NOA2 zKZJyM^~Z^hpQF?8_e$u2Mi{htfeA}^411q#L@D6`u8(4oR1x?XN#AwO=Yx`I(37*% zm7Se%NW*d5M4>F}&v~J@Q=R_n<KhH8DJ{x;D*ar z>DG|S&iO|%%*bUTY7IRep)P==+NFCU2N&JJ!m#fJxTlEnEaLy}o+pM=KLb?=$3!sg-AV*$L=hU*Dak{fWC~-N5YghN zbR1R~25H|+?|V>pf!@#k2EE(UcFuNrowH?*6sGB(BYe?s_%f*_L&`>JZqsRp3t#kI=v{+eq$$7>sH3;l^s$PV4NdI_vDnn%Qn%o9SJ-AI%-y@84tm4t_1n=o#bF z-$#^#?6j~W*FAC>>7ixiANbXWWyU#mfA3f)4PvhabRb57LOv+biI?XeNaPC=K+p1w z5B1e5hcNgm5$1$ndN-nfjTEuI(KCo*bEVHsJWj^vp-F_yh^$nSDb)Nv9ogAQ&BpRY zKQ^R^^6Rjg1X;1J7o&9>#Q`#3R>(Htx%RY5xGTG@vFwQ4Mr#hg``SIB$Z&`gG3G&V zVHG+l$OLiVyMHkqm<$kyh)9c6(*jp;a~_;61P>0R9RtyVJFJrtj}H!_ye_aopvN-i zPGA;nqMigQZ3DFzi!fuk_^c?QxyC3_LBS{23D%hfBSaGHPiGqUT}Z~w|1C;{%6Pi|LX-%>xMaI1A$+m4(BBayLNLZz zD@uf5T;k!9rh++X7b@1*kNiX`BTSNPrf4n%6eQVAsCmWh!P#ko zY*x3_s3T#URo!k>kvf}ICRC+p!4NR=2%+M)}ZjaojM)e;PMava^zyL|A zcG=XM`j6nC)QtQBj^x}Gu?N$);~oJR2_;jn^>;*xP%@XS6(z#@T;dTWLdRV4fG8o2 z8I+xKxro(nDl8A{M9d`A0!5@z5&J`G#n#HL@cx?-MBLYVG8MB4$@z~>PFzZTa++p|1X8lSi90Azd_S;zag>-b`)MhP2hBO|T}(+@vM%?ewExqi|oLGwjK+ z7DP}Mv!!`h!FD=yi9b}iU5#7$kjnZ4Fbr9QHWT>e37VQTE+k#Yuydo;N0w;n32kdf z!za;@>{7oI2~u|b2S`LwP_EyE6ltdZ4J4?$_0RkLIB>$|d1&GfKA+%@u8@-xdu10^ z1>ztZ{0+`H!4BC+3kQ-$?||brP-Sf1Zz@#~+9}aSB66EJv2f9@ldwIZSLr{}Vo;EW zSnP(Zixeze^$0_2OuLEhp6&0~9h$K#{!KIJ-xvwAo3vwh{F`?EW|uZ;#xD8aG&^&# zkdpLoXkVD?A9`11v=hzPHUArSk8-mh?y1HPjN%wXe#v{26l24WBew`KHiSvU*w@oR z$zd$vv5~?#B3TqmO7cfN0kz^Z0gE+p;wRRMh9M)j!P-O_mNvX3E5&JSezH=wp^WI@ zLW2@3Od_sVr!-PEJ&wtO1sRw}<>1loXprFHRCbBbK^x&( z!z~a-Xqb}`d5mYJRO-jDzcm9N1`YWJyFp|XS_*%qVCj#5r@wM@m~^Wg;>D56Ll^PL zqj-|U?p5Oy8&a(E4KFpk&+zH-q5%g_IwRrWi73j;8H%F3UZNn%TO|sjK?WMf&bT_- z%Z1h#1DB*1jGV^kF-8^S(7)>I7c!MG%{|-o97TC0(6nNNs375*R$L@1$oZO9#E6P$ z+88vgIV~bD`9RZ(Z@HqS-lZSm-Wj5bmil@$F@i*nI5sz9#pymqAHm<+q?1bof6{o< zikn0Qb+T#2Xi-6(Y+BJ@RL~%4S`jNMsE^L3HD~!0rKL_z`8KeVqNQFd4qh5fYV^^x zS{u<-st+=iIo%xegr5tS(7);J_s0KX7DJ4Dvq=Ne(BID|`UCz3P7>;$XD)rLzXdhm zrPSZfJ$k1m4O*P6oEWo4x4pfn+b!w-o3EQJqm1cF419|4=0ruKU4Is&;Bl00oUZg@ zl+wCI9P!x-7bEY?Qg#{#A6Tq=mw=0L1Z12y(OCp)aM(1xv99r?NgP2&=@*mm;sC`s zaqr)V-jtNsFMFd=@7kGZ6?m zXS?_m(qi}AWz`=-!38AN3$dt0uoJaqsMalr4t_25Ob}Gm>xOmaEsWVr%^wyUN$SBv zY1DOf?Xb>#bHIBEiD{hU7)rq$Q?0N4uCW}3FsqbLX$GR8OeXk^1T-4+VV2M;stAkX zf_D!IIjd)o-Z@wO%da8*N;;HpJWguL?hj#CuM4zr|4ry)e5i>Jb|yYf@BUmX0ewFUz zn`xpI>0JM|JEK!@34$JgO&Iz{flYzs@39F(e?(wYR57u!F7e9}K%7wY$pW2XiisW^ zn=tg=jLpZmG}bRTL+^Ch=WA3KZwTRNv@Yd^BaTz)Nz2{d5m37s)AuE@GAO41y#$1z zzs%TT>xPXVDHSKxg8qK*em$bfplh7wEdsvNi2QU1`tKUBZAJ+Or1^isXY0fXeA0bO z_)g&^#A5 z#(nwyUYM#&}85!*zT$CWOn6y3ebNI-(VNBtvCFTf0W=+nzQdBP_FUbd&Jsq`t)dB!5Oegk+=O-eMJLjR@$iY@;%uD7E?~ooenGV1 zG4aoASm}3*COjDasfp8g1Yx*n!=vDz+K9&&^l)y{vN6u>CHIFlXaK;~u?QH|bEjdP z$V#ywaQ49fq18^c9`Z&gS z8joBV^KtVAWHz%wf?z;aX^{a{n)vk{xevl}EzsxVW3xepXdvv?LIWdoaSs%MFKpHV zz7ek&|9Zx6YA|)gm{^O{R-HDcn^T;53+;pm+QI-W(56aL_JbX`vqJkA2K#mWN$ec_ z3ozgjd9D%U#I!HGL)XxpR%=4J!H}uOK)zk@YCa_P>n35UF>tRGxXs5xBQDhlT&Lb% zAU7WbjmT7E5dL=@b-1ZA1B3rppU{I1q<3=s{a!qkKx2V|JuQSIF*usJy%T=_I8!wi zVZqcuIyWSk&A7bfbJgM4pGXIsfQ=E=9Iv2keXgfKcSs8|nEb4)!X=@pD=cx9&krpO8zGWBOgR>+X4KPIw5hD_Zl zvOmoNY-Dx?hG&{UXtj^kDC~Q|~OYBm-q5MV4fs>^VG@1H+LFl>J3y zNe0S(E3za5W%qKnB^e$V-~MJA4TPxyGyg>rp+Wz53|_`~k@z?0|Kc<;Z_xL0nm9M; z+c`~a8}u?x6VC>HJiOG3=1gD9~d3^|{ ziOG4rAE$}QdA%#r&6qqiA(5G!*MG8+^u*+>{w=48$yxmXr-{i~y_(a+o;?nn4H$9aGIE$*2i+1n4H$H;50EgtqJbTcM*<_ac9^uMCbo@~{BWNif#A#w;)#q}Wm{|22I898f`c<4JCRTkE z(oLD5IKYTQw~-pH`V-hjvl^Xf)RqYl^B6sh)5JVR|1*MmOUz^RUpP(7WAvk(Cgw5v z7n~;MG5W_y{~hxWs)%`v-pOQ+HrGAD1c-T(?&dTxPtqUaG%-)o@8L8tPttGYG%-)o zujMo`PtwOD-ITdHVY0AclHQ3CiAkm&&1qtismq)uCYkyl;nZ7VlBw&QCMKEsH=HIW znfiXDn=#onS=bP>DJrw9>xqlLQlyECUL?}QMZZs^iHm-xND~)*rbrVP{Tig3GC^s8 z4IPzu&m?lE{xV+c0Y4sydUqmV-fQ~idmQr{H)r%vBG>#zz+jldcn(#6182?Vornu= zl$duelHoWl-MMh`qr7yE;B5e1ekxrr#v{p~*7(e|t>|HTO4)+jGRDmg}aMJ8q^U6+lA){dJnEhG<47*paRWS~(69B>nra zAbL&&Tj24b6dB3zWrg3`*^0LMd!iY+lHq6NANZBhc#o8yl@$+$de;Df9gT*h>1gvo z$K=GXuJD6Ey(Oq@LwXx$! zt;FKCe>JwgfQ6~q1T+uOtjWz#ta|*~PJExQ@or!#`fDpwNJaEsiFo_Wp0cy?bwf|A zoVIJWoBc4YR-DGVj>c3S4HM50xOPVA{YhZ+2tU@}#4C0e48w0K*woB^PNVLI zk}^#%6E}iQ<$c1sXz9+Zdd2n4m3Lbs3-Tu6c`uaHQ_Zv+&}AW4fd7SU3F3d`9O$gR z*=j2APH&izqXQzZ6&d4z<0%VSfc?^N^#s2hB^$Je(|0-*QEJ6QPvY?g?==)B{Nd8sOmoyrA^gLniVJ-^OQ|8QGf=Dlfg}A3 ztkhd5gsrsdA7dq67W2k|R?999wQ%e>4!Y&36g!p#W4jT$4(9eycr(vWtF@KksW3X6 zavgP&+xy>j5|61HPn;$an-+!uIRF{q4CJ{`1H$Yr4}!2p1oglTalAd#p8_f4Mbm5E zhjKl^NLRoGAQM>$?2W-~K6t6O`n=I(Eslvbtf;^-(U0GjfmO{xM05TEpp_4W40snx z^u(I6{+znv#yI(F^_3e3@@xI|t=#-Zy#GrgP6eM8DcDhhb~jwVeFZ&-mVA*UT@6?O zcoI+rs0VcICrQr(&H?(SNYYpUJyiK5U_0P@K;*@ebPZq*paif1a0npxmz>f?{XrP; z7T`<3SwN3VKnRcrcoA?MkbbEoJq&mbuoLhLpd%b<6Tk<^!sGOJ16Bgc0d;@~ybnO{ z1Y81e0yY3X0>t2rh?@Z~r#U650*PIK?s$!4BH$*#Qo!4Q!+>Y!Nz$*lN`ob-9UvJn z1mFPV0hR&?XAQ1z06qZh0n`DahCoArQ~=?Oz;!ZUHedxH*bDdxAg4>x zMF8hp_^Aba1^5}z0Eig|695JQh|m~Z?+3gEr~|amkfhOo`vBE|ZvY*JL)C!3fB}GE zfRTVF0UraT%O&YDz+Hfs0bc{!Ujh5yas@sE1~>$uH^U162LUOWSn>n@1xT_>QZC?H zz|DZ$0eOIj0P6tT0bc|D0JIq)NqqpBfNKHE0IvYH0uBRy14N9Jq@IA`BVqr$kys9> z1pEf*ktIo!0EK|}0n#Y+4sZ{k9FQ~`gaJPRE*m3B(*PR*I{}{p20J9_!I`iz>R01h z28g;Degn82une#p-~|kJ&XS}lfc1b60SUJVgnq^~9oOps8vs87`rj(*iO58xp8-?? z;$}Rp#5U>=m4)6saB1e+01mxww{;wku zF&+hg`v98&zX1A7kffP_rvX0#k|x3t0e1nO0DJ)W4iJ%x*Z2W91D*iX0?q<1xeDz8 zs{qFVJ+4Na0XzbD7jO*FZW8Q2Vv;0jfEvJ8fL4| z+>f6+K=`$=6`&7b2w)UoGGG>90pMxC8-P;4HozXhSAZV@{{f_22Mqy60ww~k2iyi& z2yg;k1#ALr1?&bK0(^HJ?0+1Ivw)u0Lrs7Tz!<TPx>H+OhOLYk>am;inSt3E+2tM9~Tm4@d^20)_(|fcfelv%9B#^c;P2Y_BgD-?iiC z;hvaJOW4-WaCE85%0>m6rS{PUGVF^IFTDDb>qRfXt-iW_%2Vc-8Ln z;;e>3_HxEhNGWFwg*?j{Lm`EnF%)t;Wx@@GT>Z2*bA;S&)A4!tgy4H^Gw&KCzpJjk zYZs;O=Jegw_?p`d^ZPp2MZvovQ?{poK697tE?9vQhbOFSD(BWvjy~#$Z*Ahsj`PuT zyAtE5$zOsL{e>KGD4l5E;v&y+yEfw2``hdEz6TX3N?iy7#Qufhj+z=D{_3NZzf%6h zN_sgcf0lK;=)iq#Xj^mBVEVWNHE}3iX>&^T4v%sI--r~Xyiw&CSc;1{E3Oj!j;D`@ zs`FLHJ!`F$$7iyZsK@WQHvYZt$k2!RicUbp9Qrihm)Z1Hz8MQ<$gyhGfdy-^<2SA# zfBPUg33_lS9%4ja^t(vS${Q@Z)cf-?!J{ItXD9lMrfpTF!?XOg*4Sv2EPbgBlvuKK zw|Y7+T|TD{SQKl!)WyzQvbHcB>bp;!yr>^qI~P4L@kk#k|Ma;~^i)V(h1_KCXnqOMNVy`|27U|EMH58~6VK9o2- zk4YG(S)LKHcb3}j!G7(AqRJ>8uT-ZU@b*zBJlI`6ylMV};d12J`(-IRqyaKzzgYN? z-1oID)H&BWBHotddKCq>wvHGG|0X9hlTiB3rZ*q%ZjD&`5MkqUq0gy@mfjkXYGyCp zG`e`9+~I+3RQ;vHEuY#Z=S6IZ0afodb#F<(4kxRER6U~F-2FPJ&8n=_YJ@t`ogx3E zDsK8j-Yf3h>uQS7G5lr1#fnOh#3tA0bGV;?Z=>jmHMqE+Scl&n_ggQCGWznQyXbR_ zY9R2(_uNn5gRj8bhu_7m9Lm{~>sP3`kJdQp3wCLzau6J%Tuj+LF4^Jn(138b7fyCB zoSs>-aEAN+Occ0_vhX|G{k{X2%#!!V;^JMk2bdlY#Q^V_Cy>S`Lgzr#bv)R!XiyZr zM&Y2^{r(DEXV(<1!li)-td3EiRk}tx-0#zuWkJ}hZdDFCNn-D*8)Rt(Ccno&f(G4c zCJ=B*5*LXsp6E-sPVw3(7bbDewU2Ucbp>CPB_fw9E-~VA0;AjERu1#URmm4MUtDIi z>A~$YMK*~qij^-e>ZLHJn%cdHOk#LAgr977>k@@bc&aKiuYbnAJZnbBdqb6N z_0I12R-$syRTlyk*DuDnz(*AEea5PkeRfY~$Y;kwwq>|}C+C`_CZT=KEQQWHF*Ben zq0&{^8jmwUykrzAg)aIgWqP4Xmn_?eZD>SavP69hF4?p2b_Ju1NH0_fXOt~{Bpw1+ zLb)|J%bxYIQJG~MxeIj?x2#f@aZ8*?p&b-fqIOw636thM%VYaq3=~r(Hd2XONi~XW zr7L_WaUJXCRtKqXE$_yk=gbSU7wuov%Fc?R_as5nzL^H4V-^czSN4NQUl75CKFNs- z_r#D5ALGQ+(!^udwkDD(W2U)XH1L#(b24l>vt02&vW>Q-^StX;zIURI^cJG*bE}D{ zY*Yz%5WOa~k-i`p={kE>ts+#~sF(oFlJ0_{pt;apWuSykDeYrrOkReIzSn3lax-U} zT9u_#K>;Kc8k6LTuoLWM3WujKSt>&$aQ?qZg?BWAi3O)$;<@u7^l!|kGQW-A-> zFpk_Pj@ZhI^I;t19;aMsu?x8p7sVDu{T{gZfMebzv`V3`RHt;bE43jX7b^78+q?*T ze${5L(nIUxvOJIa)Y_HNF@%M2^8^!9T8F4VtgPWei9#g4?uhkJU-g5>N64S6zQ^O7 z#Ax$6)WD!*l3`W05x=FJP*_e+)W!_uX9(d|y!eFzX)q*IdUC@M!y1)nj0@XHxDJ_@ zT*p5gO!WpetWyjt9x`^@h<#`&yf4tO_yFq}ns*<=Z$yqd!(h66>2kIRzb>*s# zPLkfP9L`d{%E92w*kvnT4^p;LH!V!dbK7B=H0u%a+0W{-LTX24JW72Z<$g4v*LL^g zvp}?}L<<^a_#iLS zw7Var0EGzpD9L4z{p`E6kMa3P^q0PcoNiz~LPJoDy6jnxl4Kx8Jpga!86aR4N!DJ} zv0NB{%Xj6LLBoa8R z!Rf0E2}V?5k~4&8Cc$bNHt$Iyy%wolRvFoEZI zHXT+EJUOom8GS)w`g$5;d9mWNrOz~A8+;-IpP9S%sd)n_T4Kt0kz!GnQo-@XR=UGp z`D<%?M76CDyCuk7kqf!0`Cf0i`o~kVoaEnIK~!>AkVCuIQ$vL#tr_7*{AEt86{Kj# zti4SqaN9^iASL4+gccA+rG1aLz__v|Fw8rp^!2P!F;5$e>^60WoBL{4&bcc{Mq}zu zFRUPR+sHrNEQ}!uWHOgB|AjD)Sv5i!Wto#_DzOa9_-#QSq1l3ShGxNP;m`GLjq?N! z%M_2#*z-@xStXlT*BKQQdK|M@%!Eoj-cBmKa7pABJy4y_Ao{GIFQmBmPuwlMHViJd zo?R$PSx+-^!Onb`I%7S}(Z=iy=46?KN;hNt_fvJc)70l*rtR2}!E7AVev-Z!jI(f; zmzFa8%nO`QjfQNvK24K`-F3_f1cg>Ub{|#*yr3{dcG|0sg}N%JFL?0dFE{rp%a(P9 z{?EmdbnedoW$n>K$$#&X>;-o6Ny8yWdO}+ZPq1yNi&+?B$LN-&Q7LEg73xpEQbA@I zm2wEqoHg`C8gTCQpR4L~o=93zxoSeOVq2xAtnJi}Mwz!KHb0nO_GFd3*{NKevi4dh zwa2^pv$6c<{Up{EVg=|T2KK6-LzDCE4WDF1)Mb^tNJTc!9pI9_eiar#w!#@?_w#uX z!aZ_vhLo{s32GL!L5bLOd7nB4uka}IX~pz~H%G^9^^4Gq0~a})5xEB8uuI2@92JO= z;GKz zRsM^_s9{mo|BJ4YJgVb`zTKz3EJ@!2_P!!Xf4zn~DX&Y?>wxq(CFv@_E$Ye_5@*uv z>A61?r!R#CVPxyV-uOjt_-xWMmHzz=Z>?u91>)4!u489RBNy&uM0E+YGpg`FUItnz z`N*Ulz_THA=mNj{SdD(MPf{OzFdXaBJ5UBBZjn+YyXc?$a3gi{i$k5%G=CEbQD82+ ztvCaP57oysjeQ|C|F2fzjIb5ypb3=^R6ACOm6|(z*O`9 zaF^JE*!c>1pG9%H$XSbAUd1%&H?NHG#eL6}yw+&e(&~%b%9Z5ejV*f#x}mzgtR+rL2q8qL(8H$g5MP{A-Sg_S82o>VEm2pf`(Ga<_f}iI(Nk`x_Io3%pSaPooFW+-ct3iW z;`j9AT>8fmcO*}M7jFW8y#(Q{_DWMH@U{Q4|0{O z-@h@e2gxo@t7E^RN2j!Mm?Hn!iHOg5{avD!tC{OZ_HIC_Z&5pAr@jdPR_yXuPUDut zVuw=UK-8$}BK0|!1W;RrcX-zCjg--+uR)^{92W~=(uLjOkY zDfo@8TP8sGkfKthZ%+fC;kdSiB52Z*z^#6+j(f9nKXN9oWgAU|Ty87f@9=~Ua}@a& zwZ^PL$Kke8sid%Txw`z#J~*W*d$TL#Ir!#7a+x~$Ew8*vz5MNW)95sZ9@8_=SN;2p zTd-0w|CLb;{TsY^zu))R&@<)LEYeWn!0$h#xcSI?xHv*~`Hs?UmT_nCf$OF4S4dD8 zU#`yI(A&wLeB7ETRgix}8FB>`)t8=f(NGP|YlB^mv5@G8ISx~n1LY;I4}o64Lfiwc z@)A>yX(g^2ROorwJ?B?^i=_0>2uwar?!g`MrryVt?xb&DMm1O}BV4<1&K&^I*iee7dGR{lh3WR<=NIBBOG1=~fi7^+UgmhGXd zGb)DSx*$U6VYhm0WV(4WJzi4d_Yrl}wQZV(6LMXKYSzMXosP@AQ?-%03yX9e!? z16~4b1^fVzKfohLfHwjA0K;L^hX9Mz{qL;l&fb_e4IiKN9zFx5Z{>3;+-KOe1~=tA zVGGqq-@OD*wfWr<;Up3sPsE+Y&`oLhhg?H9O$vVv@Y5EYlvcH=}kzc>Y#$^mPkcmt$cj)wh8!;S*8N6Lc_*XJCp#S||SKNp?2#63lC@M?E)mC^Nkc!G^sgc)8*+7d7$E@Xz z3w(`cUbjXo47bMf?uIiEIQ>nYk&FetCe~iu75DOUsMkY4Hh=3f2nrsjIz#)gLSWR7 zgm-nkha75czS_S$$@v<_u`<${UOWehg>6tigYQwT^;h&YDvHHDtYWILZTYpeekbS~ z%ofEMer+q7jZ)W-S2kx1zJ>EijmtkE`ku8!%~l#Qsk5!DI!h_u*hU>*(a)KQQqDoD zgWkJVk)+G>sfBwvOJolab@_~D6)b9Nhnt0W?YUBarITMoTj6WSm}2F4w$dyJzo79} zeK$-7O_iw5&81F5eYNq8=nz6ong_l5T_`4bsTa#hUJwZV9|X0zW`l#n6R1~xQao0` zehZEcF2ZdPf&GrRBs$Dlum`h_q_+nCg%*)e8r&jXK?oMP1wj@Tq1&0Z(n(gsBGc52 zij=u@s}tRwh70;>eVip0w?T_@sW1};IfIr9N$*rbdcU@#Ul3a%eH6mfdw?Pzypxz0 zJJ1Acyh?R%#j~dBS9S>6;@vw~^&|`EkYo_))0HiXWOF${2pSeQYFS==FpB&N?%R}6 zf78g>;DkVAD5etK%TkmzP_e^vJNCMt;!}FwKh*dSljQf*^bgmYa(9XgD)+G45lir4 zz2y9o;vJAWv+&fCX!L+@Dl4)t*Xr8i)IW{&3$`fQKb)#j8bo>jp2y0o2DRCz4?1DQ zH%J}YMk?sJXST0uHUsdb$RU5G7p;m|oKEh(no`nYl&H~JhsabGl@3fx=_^^)XDwW|)D zr!|aBZ_?COGeJplGN+WPun;UZ+|15hObZ)hT%N*lvpFssO?w=rLAo9@mrZ*If;hHE z^oWA3bZlo>8N+Y}a;AC5#>2KTu&up7y{WS8gd}R$Nin^~VOukG#SoN|zQ+;sTG*h07@MKI7#f_a!-m2`W z@`k#OwuY&yj>h0I23ZQJs;X<{E-oao_{IONMu@Mo1tlaCAzB!4eEkeL{Z(Mvl1qze z!JAfHSZQ;=O&fq_vnx#{>f-GK+c16oMxelJ+o(x9;&W-HaPzcLZSNpe+dE0_xiQ|` zN;p8}Q{{#^_=N>&o^x*~!7tm9CpApWf%Am2e45&AN2f_KP#H{)-$0@b#Y{AnDmM(p zFNo&i(ip3WTtHA1L#w*@V<4&Bcf>|OP{Ln6BL=d^Io<4dI2r^UD3N5rrKWf?etk~3 z{00XV3+Hoh=!=Zs1!+xDEHzeF7n5>i3@OqjhSX7KuY8zX`7QE|Xvi zESqp70fVwsH&iDWPY^JF#R7 z>ko_+BZ?D+kbQ=-y(*eC8ssf9NG3Jdfd*!e3acseDjn80Waj@UXIjfBZPhmjBz5}k zRA+0H=nJ`E4I&?Q$>M)_7v6+2u%^d;?OP~}Vyyl~&j91((h*sk-E$Yra{`R9mcTDi z|ASf}oeYk&Lm>Swkp3``u4_iBR$!eHSf_)N`a~e5A^?Kl0E&Yb3bjxD^OLTvg@B){ zT|e#W6zRjF@etAYvfz!s7Dz({QhIQtI)OAyAY}wc`d%OnkLHiTF26iDmY1=XU&*A3 zuLzFxGmxrzG~+uI2vD=TYkY68>PPGB@G?s3_oEo5J^?T1{5*k1w+?4J1sB(WqfDRCQd8J-@VUZ zhJts_M+4kioKOK5I~qC=X9_qGeHhD*{H+wsaLWh00JAb30QwXksar$opbp4>s;2@GMV{%u7JhbKt}zwz{;mZWhN@=SWq9O1lB%`jIDHo zI56b6<@(`D>=;tkS#kTOI&V7baksbYGkABWGH<+*J+6MV&mkwN`}W5eYdjq)c!Whme6B>jcLc28(N-W{y`G*?#YUX32Y92rEnZ)V^OA5oM(M z^!`C|50WI6nRO0i7A+)cfF#L~q`H{mldPYDJ)u1{?m)J)FG={kD8S&r8Ep}M_2mI2 zg^wVE4lM_n{y?u^MEj&}=80D^A97t?RGbQ9{$CHfh<%HvU3O0qot4ufuUrlLtef*> zC2liUVQB|w0Nl9^?+R|mYqo%=0C79;Y87DCPCTJkjdwx;mKwaO1-QQ!Z@dBi^Dz!^ zcj0Y1z)3*Q-FWxx6TCwRxam{8O$|7<2gja!@yZ_{W4|Ol4%qt{-pf4unI!f89Is^q z76Jx*fmiDQ{SM+?KtSvvEH?pj0WSlJzr=fjfVTlV0bc+neT`SS03N{LZ}3(mpaIb1 zTRijxa0BAi=+7U=aqha$6U4KnI8JuoOUKD^1J&K1UlK#-z{A%q#0`_mtdb9)p71XQ zl$$Wj-%-^ z^~k}_woU7aVYcTndO^nfg=#%?pREE5EDs-53t3kj>V*^N(nG!4zH<*ft+|I^W^09q z_-Cp=AL`t9^dh4a@1{`c2s4jY-jH8Q_tWum)*3DnfVy#jg;lUB5{$Ot|ZOfX0;*R zZDt7{5`l6McP%#?6uU3AUAV06>eif^p_%gKLDxlfRFK)spuBT}0 z%M}7onv90ss7cr~q}p+6I#M!H@l$@kD~MJnHYE`^#>^W=q=S8jXHuxWoH_|w6YvIs zsRv{ysvmuoU>SKoTbE3F>@K!rt7xRV+|Ow>>0hDFsQZI(e;OhMXgp3e^JG&RA!O5U z-=-_sG|#Ly40eZ^H(X>g#vaH)mvmyly2SbaZtw7GB!@v_pg=KI7T3?rgQK#K)qBu; z=X8@}q*-ln47pb=IMzPn+nY^!x6XfUA z+rLh5K8hAXyQW(4VA3=2HYjieJoJKr(ErXRO5>#waJ!<|e5=y$rnKfkUAtg)6r6HA z&gfQL2~kORrhn5-Cp7%)jtd3QXj6^4UxU@rni_S-g4NNqhPs1I>YT=a5_ff?cQvUr z>gdTRH2f%7-Fu?$U9M|35X(i~E5X`%Mcq@0!7Aw?Trhl0?e^{PwgYZA^lf2JdWi(QqEW;P5&mWC# zMWOE!O15{##hBy_@>Vk+80~DAn|`G?^@+HnW**Wk-w4~wWCXmhH$`MYT1DsYA;fgp#5pE%;W*~Lz98%!O zxUEfF#+8|Q!#)=TwvWunOg#jlkJO1r6D{v7BxYo)i9|RyjN+PGU3avTycoZ+&bTm> zu%XBExB1IV17p^gIBpf_ebhb2I>_;Ax9{Stt3+ICO_}gD zBJ-cS)THkcEU({5ik}px&TjN0@)X*hL1%?1ZVXSR8yWFwanMQ;prYrgSA8F6H3HHN zoG~I$E@zC8Gm9J}rp}~VONW{2?cOe}s5)(?`j~g{rp%v5 z$(G`qxOVhSC>pAs_$7Y&JPd5tPk1CW$4t;d()E{YE9!!T!~G!Mtx@ia!9z8+!d58B zclN~A;dcm>@s+LUXI$|b96cP9O1H^h?t?|)3B;5aEen>YxBQyac`)wAPQWX}qmMVdUYFQA(*qF>dgT8G zoo-L5^2x57HXQF@k;kajzolAwU(bE)j6QyM9raPo{ZDv@>#uF9x+Jvp_Skgye@2JO zQ`OQ_sg@yA(5}1X{rbVqGUsN7k8iPD2)rzrZ6if$07CkS<@C{GSUc?VHGH4Ld4yw_Nnp0G> zz^F+HM@_C#b3-_4QjD6%sV3a0*?}7Qd+lgAxNW6NymmC2F|9L*Av-a(lUjLh?q=+;wOMWozQUaB35g#GW=&PK|aa=JD=O70=| z)^3Udq3+s)QF0Q*c$O|ONtAq<<#?vH(k7>d=VSOF@Ktm6QthT_In1)os4Ee5i$z`Q z(J?^0%BZ7TvdH!|>uAAf5p`C2DgxOrweH~1YIG9PnJ~~5l{1W@ zR20QAa`;Ap{PPtg>7}hl4@FfqXHvD)7`e6OS+gb+HH(d!wNx{~tZ|^GuTj&cEoyw1 z8`N-K5&b1+QniPuW}{g{%ehBIP55CU!%VYo2I?}5x;jzUPSmv;JqL9^Yxefg>Qb+$ z+fLa5Ve?V*tWk49)Z|fiusp#iJtIncaaOBqFIz3=GK7T?Gf11C8CgVP%D!P_<3+Z> z$R>&GG?CRBV$rcnjk;7(*UG4yABVbch7prQ?TI)!soREOv@W7WGajtQBPiLlyk0$7 zG<#u~b}mxxrk#wFFKLsKGBPR+|I~b3e3mjYRvXYk?k2a`o(xWx0Krr z+R9F%9@uasHH_89#ml`cpM0XtkC(3p{z4NUPmKk^pRXN{mj`H9+%31$Qaj0`dj4aJ z>KnBa@p4}+^cOi+`@EB!GN>E%mAW%B7QGqSq&F9`DA`GlQA8kBh2r=e^ZWR1RUH-bq|CDO9O-RC$w9cG;$W z?5O%FDP{aNd^`sar;dxaO+A1m(IDH@N|^Aox|0rDzeDtcZwO^!$%$5!t2}ADF*+e# zmQLEPtvzX*z8{4bZ*z}~BC&^R6FSSuP7+o53&Q60SMG^bw&977dmu0tdVBCB61-Iz z7nM>4UuT&s?VgLR?%Sj4yLeYl6S`1tM?F=RE{qSURTjp=U%Yv!BoYuZ^RpjQ&ePNP zxg_l#^aYP98v<6H42PJzAZFN9Ej~%^+eWM)%-^!iBso{UVlo!r_-Ks7)1@C$Ic_^v z74~=s7DYLp!4tVC70=rDPs6us+{1D_mwz^pQX{bI>VIaSwx_%NvFy>-^pN++L$up^ z%6+i_SkY7NEqB$*ddhdnN6LC9%OhLM3$=ME7{f~0Qz`P^P%J;@rOHbYPJT<3QN%lIpf%76J1m0tBu*Ljkb1x+-dT;9;O)QO)+LRqwCKLx~q+8?Qx(r>DFpvqH=3d z1LaN$i>cl-3Klf`y?T>~?zd{0K!}|x_z;fCdY^XZK>0?wK>K8%+$HV10|@bfid(%y z5V)=zeY7b+qpNF0MYfihCdYRfj(Rgb_?dqyP%hT4N|PtW&FM=0-pvP+_zKGunp8j0 zHmAv5`V2vpxh)0)&K`gemt;1;7N7Il`82s}FS%Kji5Pu7lJA$N&u)4qv0C(-(Ifwt~SIks~q zl1K5Sj|)utiDti2ZlACO_X?YI^V$l#9G6OJv7x$AEfgxqwg1H0l)Q=V0UkapvZF?1@0fMJm&aww0d-87yM1gDY$ zUI((NDzhSPl}W)EAupMEqv13(^hRjUjgdP#Pe(N>!z3_uE)aeUQW2MJQZguShFpQN zQe1wBMQSRmmM;d)%I5uuLPxYhQCXyAIuKsMwduHY2xBtB7N%fvNgAFnnS@>VQHPw= zW%mb-L&QYURtaKPYF)EIEJYiJOP2&3hnOb!V?HY|BeezD^6<19u@egH3aNb?%KU22 z@htYoBi8-J+R#`?xD>ZFRzs6m;EtbzS<&p(Hyz*SC$bWT6Qju znI5=Gj+1}a3a*wrMniox%(147o@?Qd7Z!{34DHja5auRo1FptSrXxzO5XpEX`-@~J zBoiqaZ;7}EwX%*_UkqBVR>m;%@ny_#^K7QY4Qqrzm|2a z{FOXg>vo;I&hpEsva0Lkn=P`tEcpicrl?pMZknS!mJ2gxXH?}y;mM2AGHtG0+Aeze zVjSer(KnsamRR?J-$;q(qkbxMj)nD7G5_k0MJyY0o}_)yd(qFCLNa zZ7qMJl#2NnZp$?tGc}zO zv*v`Lh!D4A>7-G#lvZfjIeL5wY3Tt`$ z*~6mIa&E6S6?*kbcYF%o$Tc6e_6@)}87e|jc%|l))Err+-9D>iO`gbTiAaiWnIW8Iim3j4AuM;9`fvuFq-qm<7)OX zQ((x@VfPe~%Xo!SVPCN~Voyi(Nco#IeQl`T{J%5MarOQ?LunYU91?4n@rrf+!2Y4X zRO5ZzotHR}L*n@~G?iUfPdCb>l5S!dz5qf;8@0V@*G2tP#IC^9G4C5OFO7$V+3%rAtm$umEuxlT^4cX< zuD}%7NcokP4PRRc{(Y&jZ;PZf1VQ>z`!12Z2u(v+^zHpJ=koUUPvwkoYZ|W_^O>pE z=QzleRfWxVwNaK;jr#{Fx9~E{Rcq%Tr1q`iJ(b2!mEs?WZL4rsKSn%S#U~n9-QJ0- z`9O}qd`>!VWaJIrkN2r?Ne4Q?&$sCUEYLaB0aN~pGVYt z*L%D>CKOu+Vsq67f5cf=Pzz8rC`3jzJ&t^}K;M^Fv<9tIglR*&t9$PcAHaEnShAg08s#X6}?%}VBt)KEWMnPZk;%EGr zQP4+J*vW@tUZ1{`=kn>I^XI%6A&t&n_@;|&FG3payw|;afx#<_sk`}beq8)_H%~&K zUT`1(4FL+(!eiv`^FL*3BKJP+Bhl{!Uctc}HysU@!*gk$F zg!d6|ALWfa=E) zW)+B;4CW{?qrnssGZ;*%)?oU9IZT>vU{(^-p*1)+ajn42XbA>kpJr=`sRQO?Vyc5l zAjS@+4KcWaHLL7RKE}WGi+vP_moYj<$M=<$2`=3XZH5??3tQ*M;4*}%BoBLx#Mtz`9=fbIn66XWH)?b_a{3p{*?O#@d=VgT(FpNR@v45$}Gfr zGWW8W%aA!nnIlEW8JMk^2a)+c{>jY$L1t^_A!Nq&hRi}tBC|E~P%^Jk=18#?=6V(N zkp<$w%fpgC9!Z;6lwqWN3Cd=|cZP@8E2ysyl@i#=Rv)%47G(ue;yJ55QAD0a0J@)O zbrug6(#~?bn0S_#=CNYsSsotX!a<_hqDeyZTPepXWe`bWhP|{nf0kG16#p7Edxi}q z)BTJY(0GG1$fB7vr=i>@HhX<2di0nj_%C?$Gxtt^Og@EPu=PAI%V&wb=P}SHh%XXSuA@sQ%+wV~1Cngt_ zmC`nn+{s0uQhJpn&+z1;a#HL@V!z~~@>1%7L&|?KxhPCZlSyisTof*)StLD|Tx6G0 z8Qeun)Y!W_zIi%l~ zl4x`h{bjkb=y5%dr0`PqIn%@i%m;k0n0FC3E}O)P#elO8+2$hqA|8HM7Wo%( zM`fEXLrtRU&v<%TFpauISeZBUkiBHe%W?8Bruw+0y@}n2ddfWYcy(cv{jIFW>jts$ zXOtNya(+hdtR=p>#O;CYRR8WdNoE>hKR2~RCh7F$85H`1^bXL2G)qZ(jBb&V@La+< zNmmwnB@LVcc5M6nOq7{|4ZuK1|XZY2hcRpQ3af8ir+e2EzO8?Vvw!-z-4cpByC8=rhF z3Qx(J<`mmUM9}H@w%FbWOtF2C6c6nV^kZ4{C~#nWac!sg;x`P|Ihol1^bwkf9?P|i zUt$}M*I43HiBHbL4kp_zIK-#ex{-Q`Z7<$@Bu@wUELgH_>CjNV*|s!r7@*L-r8)VD z-T3iY$S|1RnT*f&<22(w(GN-qUb=~L?(P?5YOz^0c%rF9%81ISBBM_NBp+-^pE!2( zeTkl7I&iSX_7^HqjXtF-aMR*WO|#-t`$fBG8Dd`|_U7~EF%K%@6l5nC8*{fK1IN%I z11XQImnvFMTdM7CQTZD0%5%l2Yy1pub=&=p-2%B{+V8w=xfDG9SeUbi4z6s+1B-2Q z#QxuL3*-?4)4_9$$%?cOUs(qz49tPeT6ruqEK8NC@M8P-V#+N(D*Tu7 z(v}d?oqiOAc1+l@jl zh)-|x@d)-r7VRWM0_;L1*OKf3a^YN1hwlZRJAtt!rw}{k2-l*bU?BFfC``7TP zld^3w*wIKCW!q|s?+bb328C;JaX1u^ZMy^pJEPeW+eL8g?;eOs2unT`m2Eo=5oZ8~ zL!$8=Ugw$5pujIo97wJmAx7Ncy{a?`q1Jo%3Y_9oSD(fWEk-XobFqDM!2m09>N3ng3Sbmo`?-GNnS^SB!45c)PB#ZH0oLS{jn7a_h~$#@w&z!?H8pnPNP%fNR2*? z2Q_}Aaf8k$QOmMWx^tSJstSHfqf4W9U}csod&o*%L2dt4<1LNh+Rsn>oqQ^v1Z{s& zqskwzUq7d7R#l^)Mu*0abb>UEi5layy{DG1Xgs3PJb>8MEQzL-B%2}8)U#0N#cO{c z=o2f>{K4PzWW0}{1kBD;3Lkr}S8~=<`m_w~ceNK6eEfZj3()x^VlwYRypQrUq`-f`(`C9MZul&>gt1y-HD4%6~ zr3=)CWjaCHmrC!@`o&uB(Ee_%Ptkgx_IGOi60LVq|p;D|Fs|qkHGePzVhCWNB6vvIY3W(%EpONAM_$6T4LGEHi$^qCsRntGki zCF*uDBFmU=p&dn^F2^`jf8zE*8Gt*!- z;3Z`-akvp_cOuBO7nGn)QWoom8~EiMKZ6w@{~9g)Sc`;?EMVjd%#n!tfi_8ZoD%3u z>R1UmqK-eSz+Ygc3v9kpF2nga&rm-Wn$VsF#C2fqB>bE#=uce*EsGW-jN10x`S=NF zTmah6QdO6-cy)vk7E#iKx?ugQ%g-k2D6_o%>LqEZj+HS1F6HMjCBw89v-*2t0oe^E`Kv zv8bQ%v##2!q>S}S9#(M&1Mx$%0Zb-?f1dQkVLYYd{s!}JVz^~xfKF){X5B3%hMETLivt6hG4xs@$;yZ2hmjI;3IF2nB^w%dq$sYjeuUN}7umywu za)9JtLChO%)N17n;cPZ&)m$6~vi3{BhaDgb&^x3vM*M{25uw;78V$;wL9TR~ z(E~{*BE}eV?9OI*vIUy^n#xJaV)GcIp2r=JH-bP}l#_?8xT(IFaExK*F`&Lu7B$BiHSL+hIr{+= zgYQaHV@O#H7-ziT@r~p7IeVO4X~M}b3}hvBI3lZ$u96S$QQriaM^r+lDq%e2&fx4< zkU1Vo$mRW5`GnGyrK4jeP7lazVkwJeuV5BTn#I{pke{A{q%6k0V!YftZ5}!XC?g3+ zMY9&>3){f}sVg;~v#q4Z(UQ*-8Hd;}n3YHiA1RA+iur)A3HaT?fVzGCHgBXY2F5oa?&YaVA8B;~K6+hpqE$}o}(L3?!( zPs^0Y<1{Ei<|~3H7*%>_zRuaG#hiuDr`q8fM$--2q@*5Q!Rn`{pseMbT>~xFV^_*z z)&!$ntF-qx`xLZ+vX#wjNckdknX)MSqB(f0EYpaa6O71KY&~atHsE={eN(5nU$Ai{`wEMnzmZ-<*i9QLqy`wLeESbwVkNqZ5rPqYJ#8MeO42B$>kf zSa=@7F>$4(F8Dv3`ABc~WA>4Om^13V<)byiQyl-J{QIMFJ9(Q}f~(4KSz+xm~< ziTnape<_QVlZ?oSwC^}O0LqXi^t_QlOzK3=B%>XUBXF|O#$Irnvl@k%?-r^Iq$~zZ zHtN{tW3*v*VYeS}miPzuGvSmciq(^i$Qooqj_ll@oOOH1*;_Et-@D*9kt}|ITMyH% z0IHBjoNd=`4Z*jv$bpspS>?F0tn!o!zHoP#%Pjd-_zWnml(_rss(BW>IQOwrh`_1HZJLAuzg^Tf-Zn=fNV?A za-f!=UZC-y1)z68dqBrPmq85oiq$}^LA^lZ#80mpJ$P+z-6_TyBXml_h>_!_kDEGq z%H+|br;bVxcM^;-BUuveCe6Q0L{*YPar%(*TB;t+l+xlJPokJ z7@URRX^^g>!3&-S=sO_dY2a?f7&`<$HVPl*iozhwgpi5r-np8%JIBS@2fS4a;}SfJ zX6!u>=`(;GYb!n!)5Qr;EYez6KC}Y5{tA{7@FxtIim4KODDXjo@@LZ+E1Ir&=WGNJ zdd*RVIe{IpPNIUXYbIJdl}p5B7ka|Bpf%vFiy~Su)lb5-0zF|o=rnl3v7l?<-9U2@ zM7V7}%JN{1Ld+3ReeiO1qZdQ8D5|>v^BMGn4$xTegq=Y%!4viXrGa+>hlA);yMgyW zbVth;;^D$7+*rT|VI-ChlKRz%mDR&P5)h7J<2COFE?NUU5~KlNc@swi-VNNCfq4@C znZTI$Ra<6mz^y%qn!~#IvM#b{vGoOl^3k|8CY=5WV=ZUnn~%h70L8JB~^*yA@b-3qFL`KqtWycK!n)3-E;f zK=;8Dt^)<&eh+~{*6L4Humjlsq3W237cvADWhH6NTeH0>mt&+SfoYdAy6iK2#&nkl(xF7~c0jD(J_~+D8#SJ_LqM?-wTu@IPWg4(gedUj6A=?QeA4CjU zNCU;Yfq8fm>Y@q(yJ7Jw&zxl;?4cELH1^Xhh7(~UPzKc$_;L%C05Lzd1tgmQ_@m~1 zz`8A!J{I@`h$`U&?rp8oW&!86<#HG!w8*xAWX}h#YR5fty2YzjY+MHHV{OaS{MEl0LTL^Lt4TDPzLz40oZ~0FPug24AFob z5Oq3hB!D6WAA|P7htTsS{^dfjh5{%=kP7laPxuz75PSwOd5Ah&X}~!{6^~#oyQ}#q zgbS{L}T743fnhDB33OG>~IgC{&bL$#kZ(m)Z2 zdNXml;X_El1wVuatU(6~K4gKyp(i{Gst?`=Oqhkf0^S;l*y({Xa5f5qfp8AUMNYsz zb5#4efYnh^H}p}!K1t{+;9bCZ^OW8ihp@&eC|)rn83ze}!sVbm@Pq{*Pay$RzP2Ovczq{%8Tp_s ziPof@q|M2gcRZE4!t$ImMqhqF)i zs)-2Ct=U~rF3u1hlCy~*;*)@jzf?YWWXxI~RC9^rpa)Trua$ui&!5#KlZ_4nqQrQ( z&D!MX1i)K|wg0#Hl++Q70#w2pyP+7)v&YfK&=a->Ee4Ng;A|^s4R}1?W+A!YJrM9v zn@u7Cyc>8-^SQu=-zhzwxU=P&w?=~~DzyIuW;&!LJPz6m9y{mIKVkA6bXf3dz;Sn#KYn(ct-Fi%cfqg~f)7L& z7{cxM(95C!3|RX$^fAD8AgZVXn5KEc z%@5K38FchuT0cVDfNu+&T#PvY!8kYYV^Ag%X9CA@%nQ&j2A(i*0Rn##m{bbB;0f1* zsIXjMzUB*ov3?-v2`6aY=Vv(CLkN_B*$g%iL~FSuAcZKCkSQU>B-bodNP)+5;0Y<1 XNIYRFf4b-xZ}3vby&>twty2F7GS^vK delta 58091 zcmce930zd=_xHU6$SCNbf`Fi+qM~S;sEKGYI_h9(l;x7|d*&^CDH_D~O%!PTs=XvfOW?1U?|G)3&|le;0%);FtfVWpQDR&S$wKhs&qe-gL(;>q!OzHv|R#Zbgpy*$GI}BHDRud!o|7%8j8vp z4MD8+3@l%H0R<)^U%v7WEm^)&0In#s1!f>pC&h6f6NglqR93z+UcM=4(tvX-1z{JL z^@#h2??qvkk*G+A+$WJCVftAe`{JhVJ*@w!FUos@diKl@5Cr#H;6Uz{KZ=4yDziEr zRBDyJuu2u~MC!G3N0A)fEXnZaTsf^-4>4iKW6c7^2UiCPf<}e?^|T{jhs3`-qyIV&FWf3WAdx^PY=N9><=AFbX z@}%Zn@%u#cxlvojkP6b{gSfBAXRPxV^57tLXkV8YJBrG27$9OPdHNtqN>WKsaOtucF)5C)rTZLVc73 zW(xuC3|lz%Ww4PX{~T&E6kFt!(0;aT4~-Kh%F`AfQFczP6XkBg@e^eNl{BGxT?51G zCDuWILtD|U({8`Hz#24g%R>Q<;vbojV$kz~5 z52s;(fAbZIkd78fhuz!c(pIr>-)~!u6f5LmruL$heq;M#1f@BJe2nc9bGc|IM|12; z*lTrV=gSLBNwaAz2&SC2xR~ulYcO^MQ{lm^iBeTsN?s9KFSx~(EqFYhVICkZx*168 z2q~+ZE4w9%9hXBFw@;JuDDtGcf+j&aQ$cv^5r%MF_v}rR?D=x@uw`PNyfSQ%m@j`E z77a1K2?zb$gWbdDG2>XA&I_z{9Lk*QLfNl?U+Zk=HB^jBUd?Q28c}7P zy~pfadl`jhX|Xy_7o<~G>F;qX4rH}9OGgveZIP#h z-z?_u*bv@Jyj4fJVwJx1K|w?5h_&ixv!}{l%zQcP2`frcipi5r4q5=Xa=qScTKO~z z?8WQk*6qTL`9MJsj+6Ve>k3D`tzCQZsQgg7-uQjK-Sj~fB$cT^m99WG#`c&lSsmMB zI@_rlTe(kUR4N}Z3EAarz<5Fzcd$x)s&+-xoTC8~YBUuDMg~-v3QB9{YLzH4)=aZH zijT@GB5#Bgg^`YKCE#UUQIcg!EZ#zFD>2zu{p>kPXvhm$NsvIE5k*qp7#%Keit2e& zKAfv2$i3}F@@a=op>5(0qTpI1U|>rp{HfdoD$hjsV?-|7Xh~oy92uDD%%$OhWHTgb z9AJfD%*&-wfK>CmTp9yNwaCk*5r9-kUM~4RQlWXdOf~MTRO3P7|YWbF%@(k*(xuWh5*`{@^Wba*q;bvu_-mr};s3S~kbm2_Yf)|b%X#lJa6qTm`8SXYnA zJl0cpB}eH(4fB{D)I}g{Dv-H%Ff8hrAm7xXqm8uVDdBBP-9~}6fY53pYa~%4snoQ~ z9pZG5f4Iz|(?Pn@Xb1YDwG>DR8lJ}w@9R{uSiSDF_}k{~4|r-M-zQYa2hOfgFn3Di zh!CztX&x)JIEzV?awdle-Kn<5sK0aBOT2-yq|5H7sX7$q11aeOd6PV&W1M(iws(xO zWqt1PsDBSCb}Iz1O&L%XNZoMqfPVo66k?O7cMLs50p%Uo}8Vo%-IQtG#tU2NR(yzvo-W~s#DJmquy$GjVqAhl@Xq| zH(F=@_|w}Nray-H5-=s^;F`;qs>Xnl_VzOvX5=z0Dl|QwrY?Y_+^2Ia3ofda3B!EP z$31zJXCnUZ-Sfgw>Zh*?;h5+~$WgN654PWZ-E$v9=E{Y8YRV<|q#lxbUt<^&)imLr zRHZ)Qi`KYy8Qz4!gjip_*?;(}m!bCLB*_yc8Ij)BB_fv8nkO^oyzi>VgV;>*EUO>W zZhjZ8-6A>&fM1rT2!iH;Y)grvcTv=U``1uO)1FEp#J#f)C6CQ8>MWvEP)reFlvD`^ zAUvy0I>h2L(xpEcLoQ2SxHqD2t}&viu!1~CA~g6(p2T8FCq{*}CFf?96v?TQwC@>0 zTo`T>+Gk`=>S#U4N{y?ZA?6bzdE&*c;R!S}nK!elm8g1PHlj$)Y=lUynI`>$ zJ{Hv9uCpjZ2p$Xs%@8yYbW?UL6zIUq^)DpsoCMGi zvJ@pYG^25-72VH~NV{6eovehd^ZXUX)?{OUAvMu*m>jbwZ%u+~ts{8}A@C)d8pKPu zV20Mvzxw+CCOwyot)I^D5-u1kIl@c0V65b0R??JU@7IuEgh+y|O*#Gfm|sTrh@{#!I+htmGzM!Uba`-B?Leg0*LY5h4lpw=IeFolC}=|HMnU z%Gh-MIWOUYv68*Kgz)*&LVb^yaKRYPMqa`NVsB*m_kDYE`7pdQ}-(6-lpg!5NjB zjA9KFt0_Hna-*9=j>@rp#)Q&xMZNJxK`3(s%a8UM!Gcmf^7C0FXIaXz`PVidvo?AY>gvBXS>@M+bm7;;hHQi0 zO!8|(+VX4DSd)0xq$%%>{?V&ZxG&ck_T*R#A}I6OQa`LVxQ>bCL$B{j!j z7_ta$Ch*H9XlhcokaV2I&W%` zO{o+@+XUK3gzVub77p5V61FSwHuXnZ407@ii@71wMIsiiY70$kjJBWdUhd=79hxy$ z{D)@Hzcvyw{n{~i{D*elW_|sdF_-*rnqBVAr6m1p+UMr_m)@0X?RYchn*R;ERjgSf z?kOkq4`nfk{F3cW615FKj@(-CvB6Ek$G(~jN>*(NkBt=05y_%hQj$NaF{tII30SQ0 z6F~ zz9q2~HGkBah-q9CNR78{d#(ov(SR=6#w^kK+wk z@T4;m7CaF}*>Z-WC|fU45M^5>3Zjh+G!{D}s%bA5Sd$A}lAbfNX`@FQRggnHmEaY! zAH&r5Y*SejWh(*yiV?hmg!8ZH$t%eD{42tEMG$Qa{A>Q=k(YeHzv5d~(Nyn}PqW@> zqVksNRy5IqL^?k<*JH(BJ+wZ8ztOLgOE`bhxPQeAUO}DouNciMsFVH`eRu^8690;D zUO|1d`PW=!rzlNza^knXo#ZXm3V!fXXHuALAk%|$7#Tlf*5DQ7YAHjA`hJNUq2-Ms`{v?Czx zyot^tP=mv!X?1mVCr$haGF0tN!t(i4I-0((swGPE1PQj%SbRTTOQ1dx91(tut zCJc2s$EK*FV`E+7mBoiRp{RFobc!iDdgIuHp>}83>=>8EdV@3c=#w5#ox0eD5ROLc zQnql!aVkAjdB{BiYS&}>(Kx0Iis}C>0b!_bFl@ec!^V%4ij!(izsg;uwkXx;YNvS% zfp60yKiz@;rv}V6qc{W7{J-Hd>qKyT(tT6-Htr?bvDXissK44>oPQRGS?EKKPx^0) zfli;b0Qb)i&wB9(UdQxpni{YEYfdn6qaTv_0h>ZJ$tW z45?yc$0k($tgr6Li2C4+=S^v3G}Y9nC86mpe~zUdvpdiKMN1o*QE!^ho3bIrPdFOL z>%)}L^p=ZwOH%WH!IW8pyP!=S%A2xb_U}vyO=oIgEqwWv7MnR zGqk2PzOss@AucEjYLDVsDkz8a)i_-nA1Nt}ur|ABn)OaEQfZaj+~w02TIkGUXsVGn zVIxEzeN8tZH1+dn(uVf%3Fl&~o5dQiVTyi@w_#)A-`OywKgyf1!SHWQY}z9TLwOrE z3jVDPe|$l0&YCoBjB7{8{b3Cn0C06I0!DS+uNfz#gf9qeJupaccUIT=WkW!|18%n_8fc-52_$iRZnGxvwRpwwr!sthgUPp#2{&90 zljn@-WaDSvTsr}rHa9>Mw5d{;{X{#~S+0Fps!CO#$IijK00SP8XEmH0pZ2+Ts0y0X zYK<$mF=VRIkRRl{>JN!3RVPd}8t!n8TYoIn;ZhC9wW)16a{WP2hfFmZ;h!R?!~V+j z4gRMN(}NA9cXIqHH=atMu|UC|7Q!JI9QEAZ2ETuXQPmbQ+5i^5);af!^&xgf6K$g`ZYQSHvNoU>7lWLZDXd?7(+ zp7O|B+G;Ww)zjD)d#w?s9_3jsLzr61vs{KS^?jb@GK8s{d6vr%rasHFT!t`p1*8RFEwJj-Q>Q{#A+%Mhow=2F9J2npfP6(sZ zf{N+k{&ZaracVKc)VwlP-Nv(AhE(-sp5-#6s!#JQmmyWP@hq1iRh`GPT!vJ27RxrJ zhrhitq^do6L(+q}>wdL8&yoz34dGdmfwI@|R1OSBGEnwco+TM5`z_Cs43s^>vQ5b# zjca=kjRwM0fN9@MBGjrsh2dR{&BVV}{fecDd98YcrHON`x|gMiZLM0!(!{e?-HNn- zG<#-zpP9s^R?TF1#N)bp7fTb5>*{!xCLY(-5iCtSuB(Gsns{7Sd$Ba}xUP0Y+MkE) z8XwD;TvvZKk?_Ris`@QU6O*gzF_tDKSJg6>CMH+aT`WyZuBz{{G%>lVzJ_!?Ce3e+ zW#i|n`UpcLCV#2-urx9GOP$El#N;n^EK3uUzto#qnwb2h_Gf8g@|W5jX@4dt_F4Ex zmmz#r|D`U%xVCSG7Vk!*-&*NCJg@%9(!~6{dWxlq`FXXHrHT1@bq`Au^Ydx}OB3_+ z>f1>BGnd5-uEz7~B8EskJgq*!(!}JnI-RA7$!Ya=mL?{r)zK_XOirsqSelreR&PMM z9+M|ECa2XaE%l!4R?o3CG1;x2WocrvTRp+j#ALU6kfn*qZuJwECMLVp_mQs0Rl{NOl<0SmL?`Pbp%Tj6Pr2+X@4dt_OVsZeHfU# zE(EJ9Fks18xS3*8MWVpg`J(z~D5Z(JsH!YY+(q>pmL~3^TE)`DT~zn8G;tTzok;%^ z_icOODHWpHoS3s|U!1D0U<9b^26ZV*6LW+5FiR72gF1_)iMc_&lckBdK}}<6Vs21} zA??pxe&lxUDF(GULnJ1F>h%!4hk@!vmL?{cO<9_l1gc-MG%*QOKV@lR5~!9UU60An zw{s%~sxF2|OpIzaOH)sb>Oz(#CPsBGOA`~LdN)fG6Qgp4b%n8&G3mL}$L>XR%@%;VI@Selr}srRuoF^^NHurx7`Q^z6g z&s?5<2e)CI8qE-iNvhhCrHM(ZDzY>&Nmc)BPQ4{2sjAA-#3WVyhNX!~s#=9~Jtn8_ z;5Ni$ib{)dD{)cR@icK!SMW4(QJ3;GaZw-UY2u>J;%VZd-ifq76O{Vc&{~4mOhWdn zZ{V#S@M8l}?MwvpTTS15k5hi_-i#VZ9>rQHSN z$HDHqP>&q|e|%HFbJZWTblNm}a~{IOLeyv3HgUZ7`D0U#L^pwSRlFaJdsa=|q9OZ0 z%kJNyULC379U-!u`zTP<`#`LLUe~j}*w_so^{f9zu`58UDaF?5bq27Cuq+T%ce8qW zRcGT#2Y-!rKl8CyrM?#3kN(kTDzsYp;-vOA@g<;Yx0-CAtt%C*o&#Z@Y>%^ykN*v& zXFg$^*qtiN*L9lnWy@~3>5h~Q4f*ufrmGsFX`Nt>G!RLBo zp=&k<&3!bhbJG+nd!|IQ+kAC50}Ie!Q=vpEqSs3J%V*}q{dI2}y28bzgPBg|he;Lu zFxGJtAZGcLgjf9j-N8OR|V|5$eu+v)C_3WEsW@^TMPMz)slQMNL8+EFa0>85 zw*e-Vj_?x;n>$F$(fN?uh>Ui=@q&RY!2D8k^%$=lDhmc zm3UXo9RXTRyEuBlV#j&VE$T$?6twIKX<7%`>f7nO^%5TOi{jLq8EEv23FMv5zYDYfmSpaGT>Dx-Vk?ehWXm|J2y=xC92ts&IK^OtJ2jB#}2lxum zs+S#6rjq5ppaFZbP2HXtD z0New}0uathTsHvr0ZstifGdDd*qYvUBb;{|yTm(cXE0|-N40zf=~2;GG11AvzSM*#sTf-nd$7f=BB6wquaR1Js%bO!VSBmta&od9~3 zx5qF+m=1Uja2OD9GwgrI&4Mr=P!5P4E(nhS$^bE`f-nzo2oPo#gj7Hp;C8@Nz`cNn z0c!y}0EYoT0BQk|BhY(58ekb?f0m}fz zfRli3w%LL(8t@|E9YDyv9HG5-?TPDHz(&9cK!^KyJrNm>^lCspAShE1W&*MSRHwtY z$a?^H+z(R#eh0Lj!|UU4wLOQQ0zk-Is2=bf-~vD=Ai(}ffC*L*2W$s?0|-eIgk-?| zfL#DLAZjeM0ayaq0yqgU-hvJS76H}*_5-c}`liE#>9GIvNL&H*9S4U3YzBM-h#W5n zw*e%;2|(Dba74g#zzV=Nz;VD8Kw<{`0S3qAt3SbOi z0$>Ip7a#*R0=5DQ0eh#x{zs7b3J`ENA{ZbB&;yVJ7!J4vFbQA>tOjfVybj0*d<3Wf zdrV}tSKq#b${zKe&v zOkdi;x9?t;#W~?dT7n?6L0)%%xRF+0$k+Zhs(enj0}f>-Jl~F&7y$ap?nb zB(J81ryH%*)UuGs$kXQrcF3UGQ5TWbj zG|Ol@DWi;h9t_@L#hOB%Wf@H&Pf(`0rjUDHRI*2iopyL0cq{-PaeM5M0pe@&n~xl% z^rI~OXc<27_VBy}+lEm1DmtC!%BFAMr8%?nP-1lj-O!Ka)>4kX^oWmb;&YF4U}duu zW-YhRLyG+Rix0nVgO-_;p|W54{CK1(I|!0OP%CL33+)xd(qWEu|}oe`A52 z3(ChW=T{tC+KP5NGX`Q3WHhW&N7}Pez11bT@!?2L%6+X60a|hpXUSp5?>PE;s60oW z{Mbe#Kt`6&1Jt3!jjciM@a^XE}&?pJZ@2+K(n+qPQJDvHL7GS`P)bF zanOTRauFl?%wM#8N7g`5mRDt^g2$n(uF>>uP1Ca_R@a&>!PtM~t$e8!l$f`2uN=HE zS^PydFAO(zaxmx3+nCdw&NJkD7xqHyH4C2@=?;Z#_@dN2NC6t@FoSD335;jENLI7G zT0{wxx2_9bxlu)O_Z8#hCl?J9->9exDI6iS0 zO2B<5zD4+I>flLFL|b|JlH*-F*(m!&6tOvCE)t-5cL>VN z(x+C}q&DfUZqMylvNT*2i)Gj2oy9VF`{Rr68vi6d#Fh}W`(w0q1r>dST<}AavT|FqVx}Fv=NG+}r zqI-heWm&H_38>Oa$4O;L$J~+f^ktpJiXHZ4&Bc(K$3-D6pcXPs+5GI2VnWd_>YQT} z5pPX$6{5h@+8PGoKVr$$IFy#|_~@z5#unS3By4;`^j-OmPv`Y&7tmPMe7TdeSG&!n{;iDEs=qwLnIfK&Uv$!U^9r09 zcVU3QyaIN-9*@=eTprT6z_A7Aa~trR?tBL!i^}LDl+G20F_w{G-{EsUN8f&RK39R? z#R%_Lf8Uy!nQ7{j16G*LXRa!@(P!M?*8#^QCMqrMZES2)Z~;06FH|G z#V?ml$hlhH%<80SmJ14FIY$NMoN^w!Nb`6ufnSXL;>PH>>&5;-FqyC25O1+7*X+<9=7K@$`X2`>s`_Q2LBs_F9&gym|U;p?%kCZ~hsU zcX{*q$m7GkOn;vB@@ZEjvkAf~vjM&uRDJ}@$1&4BA%}N520-Z+Y0ON#;72x*Cf)0l z$t+fBj1@6CF9=wcJc&$1MJQ>8l03;=R}hQ>X6rnOOn9j@Fso0>(JW(1Ds+%5l(#DwA_$x>!sj_Mnk~3e+2MNt=y#E*Q#)4XoR*-o`)xu_GrWksA5;V;_X;4~cGhxh96^O(!*(EynMUM4E zlMP?!#52?+$?QFTl1XDGI~_CxrCaBun9^rE!qC_>+LX-ZU8nSQEb2&a0n$;Y9FEF5 zl{k*dRj^>u!&LaNth4O@R4QrA5~pJu27)x^A*X{Pn5l5g zQ#f*?fMF`k9cYIckX=RDf?Nl3c@ByqlKeH0@d3xI8)!X3AE{1^G)ol$2XdtM<^Aj8 z!l($t!Npoi9)tYnx^h-1uyt>i3Co-~`S3F%#KW>lj<6BcotwY_cA}mRDK(9_n0P^A zQn^C&Q>5>~(J58q7wRG(k126w1R*rlsZ4Ws(@1y(>6kpi>*cyG8@1wWA4{7}BaWga zcPc+C+KVsHbowNgzr}WhBq=z>L5k3P%juv6-Tx<#vKNzz@ga_7+$Em5#BMa?q5!6_iW`PFhzMWwgO6 zXZCXP#N*YLfQnHmtEi8ooU43#XLdeA9&46zmXqd2Ci5!|lC;^+knTr0my;baNPzSV zA(@kNR?*d_VbLH4mgcneu{cr*5NJH%%e#z`*|~~>4x-{J5?14N{JW$B_)sKtKp#C$ z)-adTXyXGcZT2b>7sSvl8;Q*%@e#XJlUEmm$H|$BoHN=U=D#5kO*H&W+kSadFYaP1^XPcDF;3Y8?1{D zoP{g9wV$Sab=jF6$Ly3%fgXHF7<|I|0@#_8pVcH7Q3}?Y5cMS33$?M(lej0~fH}wc zzMQXgv@u1R3f7SV&50GYdybv0J!sBj`B8bR%j#-8k6@Q}F&H-9ChA=AWd%X3iI%(_OxG#J6bY=enV2ypc$}S7 z*l@Aq72Q{z2vH5xRWpxE(fe=Q9-I;c7u(8QC{)@?lXCWcJ4~Ijm8NNJf(CQ4OiYQB zVf^>Ab+S#@=M~*{%#aOaf{h!spP=ppV+(HU($a-J z$LztPfUPMsk!|MEvw@Cc>IEBu`NoL*opDaK8l>E;w$-KZ!KB+n6 zNLOGm_XN|f>aYc2W{hr87?pV0E>VB%QZbofRN@zKX3OBsG~k?D56hchafQ&L%26JO z720Y!Wn*+38fEUb*w$bOR$B75Md!iT)J>JF7#KM~G6tURkD?SG?Fqi%k7;iV% z9=5cow&ZQ5B9rSOa7o^}8fzd^&P=lV^{f`$Ju+}Ql(J(UYUZ~>3Exh+SDl4dxTHC> zX!_heRKFR-{6zAa~r1f8`^O-rP}K zD&Mzx@MJ=;?;uv$`uf_4Gfa3&O_+a#3n>5pu-wK2KbUqg1bl`dAASdqv&hk^a;kNX7epMGS} zYE$nomS()8Y?X-|>nK}fYXAMir@vZfp!iEApL zcj+A7G|&D)up_>#`GAJVuYw)L3RU8XxPYqcTAB@GZzQ`I1 zPiWxY{uBk}Y4I8K-ya@|pKMOtC+04Jk4R<8`J2S3R(1bB44Z>|x$^Bu6CK=I@h?j5 z^c;m)`SKrc59vap^TXxvZ|DIiB_EcspS{rHI9pWbDfx27){)&Wq13amjkYmgh<^<> ztl%%)Ay{mcimeE8HILv4>`U^_t#RTd`P9}<5!Aqn??YGvF4uHO^3+7L`c~T_2a(lE z&l%|7zP*50W9pO&$UzD^l&R8FS<4P$9D6XkOEk|r<-_vSZS8xJFS&m!MI&BrDyXu$ z0*6>vcoqg@Dxh<0Q-P3|(>`C`xUC1AwR~Gg$n)d2C&lgZz3;fi)$+J^-%q0RX?oaB zKMwV79`3;ML;rU~Vf1h7qS!xRbL>1U_ut+%vCu*q%IW{v#}IY(^4D>(1|0O9p}Qit zT*X(aSJH7RFrxBh`}XcO=E&!bsX{TiHW%(+a+X?>s?|gY)I7A6Vea zn?6YHm^2()SQG|^RTH<>Iq|1yFMAmO4~7QxUmtYD?Zb8-_U=I2eq*<6kV@x)aNKNj z>d@?k_^&r>w#zd!U_T0Mq6?NGc$h!CvKpxN-L%FKoVLOQTunK50ck}cEjY58 zN!w}awa#8sw`y17P~uc*o#9jj`rUp30w-@{6Oy)SSNIByb;Y@cRx)Y;$l7=3Kv3|w z)E?T06?~(92)rx!G4j8SOXOiiakfnu$I?h+a_&qd7PLb7WOhqwqqibXtH|ZIoN}qc zwCh~3`Y`Bg%oc`eer;NjiBiXp!|O8!->iA0#x)-heb+{!W-4egp}ncF%p&D(X(gu@ z_p%K}Da%2s6YlBHlB8>vPz&c8CXv}k)HRdqRWMP5txhJqqjI?VX0%sCQ_dD-bg|N1 zyD8McFKE0KJPMORQ+e{5odq^ceHBr4=n#TWnkU>}K7wMBmwK^=BA~Q!i?jkESY#T4EG$BI zA58@ljG9F<T*X% zG%9zm2N6r~b-Z|cUhYSbIyL9gl9uQJy9X?Zo(!X-(x!eI?iFldOYd+hLun(*`{Dtn zyiY(a^RE*&81Xeyhq8qVx>ja-N;5HFklB)&)yh<;;-4N?dpxB-v<&#!xqU6l)ko^s znQ~?|&SgHhNM)t&p!k5=ioDzsv>O_*D7cKJ0<$X-?(pU3a9@{=YMfF}P(nEUm^lC0 z*4t52jvJXq`uF!-W&r9R6qSdIMOs6hBh7DnR@0{~FPAVOqAy3(r-;f5zY`j)~>j7nM?&v zRt)u$jLX~?!5@&*d5Um1*U?r?O|mM!^tSr%{w*;=Too1z34J zF`I)%-f{Lo;}o6%1q?IlD)B^DM@dhwg$>8Kp6Zt-$+wwD4~n@`Nr41 zAgjIwOjCS8E-iSI%5q9f&Ua}8P;YjnsYK4*+rJf~uTBRFytb9xZ(mdf%@j^HZIqeY z31#MJ!8td~Jt>a`s3laneI|ZkL7L~B+wJ&ec4U(pCT8DxLRym{_uUsg!3dSX;dRiJ=MAs5F`=>=?>tMT}@f zMpvid)E%SK^%e_ItSAjdUKg;zwC+vsc+D!|E+VrVl*h0A1(83+{24+xo8`^p0A#s*(2etJmP2NtM$gB`; zSFsCkU1L{8WoFlCV+vC$whyFjP0>zvPQ~xQDEt8sX4>Q&e%yu!K>XEhBR})%`@gV$ z6Z*!k2feyPgXjai1+My>os8giE*SwbD|J%R5OL!fhKkKdV}oMj~eVl1HETCWt4e~&gg4X?LUgC z#zIOP)$JTfe&|p?n+GN80#>jV5fHm&{{OghW}pnL>1kc_E()g@$tpd%ivvt+NJU!L zgHp~KHyC40fnT8hj9MVoG>-HUNBV^${i-3^>X9npSm!v_`Nm1@<46ezgy7ec;$cIf zDmYRvj+EFq(&4cjt2f8$(>T^qj&uV@>f1QdXL82jj=i};PVxr*d4r_J8+hR}*4)GzC!(D`W*DQQ&o(K~#&4LH3V!#F}_4XX)-?@^+edvQlumxgs1Gq1ZN1xh18L z-8MAwQw#EU_iD^k@Xk4Cfcu6w7sJKQpqvgypTg?HzWV|^4fi9hBF<+daLnjAZeZzRu@w=*Kz)tWJlGo4yxpNJ_ z%gsX4zegc0X!*u|TU{{v-v@tnKRWMKHoc&cYOlN*7NaM8)GfZ1FY?M%RMPRFI!f}b zeF_;Rxi=NyU!Y@WlzhMN3CL%TwN7mV^qIm zCgEW&=L9m4hgi~?qgv)$Ny-FAei+FjrpB?FbDXKMNPCfSyiLote-AYCKIlML7U@%S zmC7T^NO^130I@wu(vLA~@5`(um!uYw#6ps?T#8SkdI|P~_T+BI(rj@g;j6p=g9B%^ zEAXqX@hQn!jtn}q24v`#Xw5>}FLlySzH-@N*X=8E6X1OR(?hQW&};J4%j{Y~XXdon z%ajRuUfP>tFcsCC49iZ(YysvT?Zv+Bv{S@y;1CCWp;LcK$~yz-W*^lz$kb4>=_*E=6@E$pB=@q^7D)6SUF;Z{MBbSgwc8M&`k?)WihOtyq5XBWo_}rZ2kTB)aU2ZmmlnqlYvr z*=uRd@a+9#^0hD8Crn(ZmEx5WD!pCL$ zq1*IoO}fQ;9^}?+kvn}EVY@>w(op8$Awbqmo>%A|6Qr4fVmupw7(|s^8g};*b>mna zMwD+Itqf6TZlo^4f(F7Jdp(5^4F2%3yk7nYiaRBNQ7CI&JR=#r195i|TrL`>52nhoiE-|CtW zXfC2Yg4T3A_phq~*%@->sTjkA$C+`-qQ5=D%-F0Y(tRFhX}RB5fwtJk8!_qDNBk5X zv02ZPNojzPNh{x_E15J$uh#6fOwVf`axaD+WP>W{9FeIKw*d~hd*3NoH4-B@imtMV zA$lGhrK3zYC){^W(>ccI)f&gPi{y1@+on|Bqa*yG`@Dwmi=HQX)tXbDe?Uk7bfJ9u zY=roUJmc#a@m=|euVZX4pas{iu2wvB^b(v63cMW-+F%?Ed)QBDY-I%88&Isj1nKos zTJoT-OJj8uo6=pjmhD)jzh5YH?+FcCG*(A@Yt+>~)KEBumei>Gt+6_q)lm1NU!6@G zPyFUi%Ts=pS{*(0goc%k)otT-dstn)ahT8R3L0xy&FkKdZLE?Wum!_c|=I{N9=HW)%5ures@NM4V1eBOj&beS@88nC@49!%i%!Xy_O9JfvB(1-3Qk<5@2Z z1{`+B@xfH7qi9Xe&aETS6QfO!e#cQ>7yanPSE{5Nj1ad>_MDCwrNz6Q3{$s(h8a<; z)78`$!t?dx-B5W-b*!PsTsiD?cu)dJN6TxgBig-%NyMjPEW~Y|LrBdi#y!WA6yzK{ zITOi+b4ZCJBaZktjwsjjnvEI+w@N)YQ!hcNQl4=p)=;{D@gsZ9Aj;uE6x^Pd^Up+! zx%dsYMMUV7HD$Kc^S*&B4|6Wp{ki-7dKK}bp4W6#$)j+CKsNd|ox(OfP7_1ie2sWr zo^>`nrhJl)u)-Gs^-s!c&xQ}7_vpC@)9ckw)bqZ9>i~{kIr>fVw`bcK5+0TNeHY&R zSstAtd2R#G87LQH*!eK&enQ0NOusJbQR-O~*F`Dao3t>M+h`?^Q!O#Yd>>)d;?lz` zqXnXwETcu92`r<9n$awyg_dN>$WMP4EcT{Ub1iao%6z6e+^B_$Hmrdb8-f^`77H%l zC-?g{R{rh#$aaTV*XmyD#2JR*#=Dz8yd_SQ%YW$K?yLK#?{x^c|0lSY?=bz?&R__> zPwwIFEB+`y?(P_bmt|XSMyiXLzvE?hLV)4^SyXH2K1+VW-Juy(kDMjH;vTpot(~3?=Se?u8N{zHM3=h|sa*Qak+qz=w zKpTscQ>GQ?aK+ne^pH$Hx?TQ84=f5VAgF9M%zs?YIu{pv6Yk26Z;i(zi?F`Oiw=X# z$E(fK_|QaE+AqI*u7kKyK78)g{#c6(_U~+YQ{au$;;r=1+1+XdiSnJvezgVOpw2V5 z_o;drr`*nn9R=q*8N^BQiHrRVgQl_`w?~hEzl(Y-&-|@4pz+--K)ej6Pq z-Y=J3>Sq`|5$!q~0w%IH8GqGuuDV+5$-Z(8n2YCT-R=0h%i?9|L{6KBTEO%0#E(Uu zcKKMBEf6l}*cSH9U{XJWJamT5@hlrwGj<|ZG zD9U55#%DCYj)t?#FtC)%wH}aN3-atiqMgjz>x}ePE}l=Y;#sY5yf3*S1NBa$)w#r2 zmKrA11f=1mY#y6&Fuz4EzB+bLq;I44X!LDeqs;QuFi|K=ZPT!6%C-159|!yJi$v3S z`LS!!M%F(f|ID@c{+Yfw?SS+0tzMZp`36$Cuf>aDa?9&I@Y3)q?<&AuLQd#;(r z6YoWn8cVX;f@qIAqRx!4`V=*NPo$YBY;96W&1|l(G@TZaA^A(jd1Yfg$9}fH%9_=V z?{-I^C`(D=IJ=P8I9D^ICg@vni3+Ib_`T+(HfIjm*g3qiNuRt|-TUB&gv`4Cutl@byvriy7wdZ^e% z9HcxN3PLw3t3$;&F+q8UE%CsldXB=&1=$KXNOJHfJjl}B5OL56&-E|1sc z^19&BVL+Uv)zN)gWC!bYQOLC6bw+wr0$EkL5geM0jzfAcrEfHD;x#X5HMG*oqV!<# z7Okisin=l6=J_1?+RY?s-{8@MQFVf4`Y8xU!G?GAnpD)}YBk%bX1ZQuMa^KXrekZ= znDiPPUbIw)F(oK2swrU^@S&yM3%sWJNiM@E?CEDSKnkJk-3S)m-2;Ig}kJPS;8=^U{GVt6XR+8pTkSZm|;4g0%Tv3O5+yFlBdX z*(jb}r)A@Kb`H-fts>B|;aXikUe`{mvs2x#Lx^gu@Yd$wC!`q3SAn^=b6ni`IYPT+?f?MmR zZmBGBOeoFXe_gPcwwGAMF`+eK?oX9hBE`Pq%SvUW7^hr_6vxDOPJGahFxp7_y{$%4 zt2WA%D6yMjj}oT>eL(~CGJo_(lof%Fi1m|}?*&E5WshWn-~wNVIgN2A5z zgE~`R^_2*EGt#d&Os*l*F(FB}1SXaSR5))5bSAnJl#%VlL}J}WS>9e;AZ}MKwHI^6 zo0O+w#14j@1L@pC$&V2O4Y33H!9@p{*2L369g(hGA1j6jbwcV_q@vn=J%CIEi(rYz z_t~gAqTCRR!C%a9yQ1KIWp=DMLi8wa#)`AVcNAj>Fi%sKbwI#KQSv*85kbVL4<)0; z7+yk5nzLlHI3)k-ue{em3~$yM=^wOo7o?B#bP(}5prm&c2itD2Xzq~K+Dx}X1@rN< zW~s#d*Kf`gnER+joDj;M1!wOA>~$AS(KY2vVY>3Eq=(LZ9-Ou>4Wq@Z^c$XVOBJ%> zOa*B$gGD-`+2D-%uZzl+j$+H%)4W8*07le3mX%BhlqwPrT1(w=_!dq-(E)+O7n4&OAJ8gD@M9{i_Ql_YudYAlXje5Qq)DP6elXVUBv|PNhQCl*j>C?`J$`%i0COC9WRay7G-5sB1Y@h!d;2t zkw9^QvZ|lBQXHzZzEO;_z1UgAEeEVA^$&JUq{!P6r6|JJdTX`sctu=6gd!|DHN=Mk z>hch0dWQDhv2JnX-&FloJ#=p#dsWm=TmmkgI*XD1%-3r(*A2?<8^!25V!P^MT-U|O zu1D9K=XBR=Q`q}J^Xt}nZBqJ=(!0MH9ivdaYZMHo_j~;g9?4fIGl3AknDZeVo%IF9 z)nA-0zN-AvU+j<+fSU#Mg`_$H`#6Eev4`@nsNfZIm7z&uREKG(*CTE!rMl~`qGCqu^p5LQ^c;ya|6Yj#8l-| zv^4C9Wy}=MK+Jou@Jw^u&mo1mVwu=RO@GS@&4a{VhKMuKnzL%&MhYCI*awSI-9JE; zE~~Eoh>beF=G+^VPXMm-BCjN4 zAva#xO)d5)U*VGcE*1j%L9Q;(`qz2yUSV~7((u;3!Rww@`VJ9?Cw&{)&{anGkUW&` zTGUVX6E?QDDX$I@BU-Q58)}wauaplFJ9b}Ouh^USahc*sGDwV}EZWa!-iziw)7F;+ z6#t#_K#Dj{yi+Mkfi)}IF>5y8#JjPBXN_8qUsFs&;VkP4dk+;qGl*G=I9%)yaYI`_ zb55YO<}*ska521nDv~0q8<_MLW!7-9ZTk(lL0DhC6VlPh#M(Eb)nsiOr4+b9bR%Rx z6-S95vDyqeA*{iNL+X#$33sF71;*CjIuoX&!qr%d8K{`23`-TG+TY(;!&#`Gs60yb z0~>2U8}%8=tEq_OuParlV#kQPTQ}57sgiFNBl?k6`l7l{D-z+EBKI1r9U zHQb>mkpd0?Syz=_5%GaeK^q|Z^t{%PbYTopJ{coM+9F%liKP>mG#3cX8mWkwt5eb_ ze+jvKWnF@XFEf$+WmW8a%wYfM-;YoPb0vpYzM;&tBD(Zcmf_N_8zaN5qze|2s=Q+r zCy1*R=qs*6%|~@3L`P9@Lzu$r4CUrD5W7XW3zrVqM|+j;#eA7#CMwUQi9?f~!luW! zE2Q?bDD$d4-L=>oj+pM#6>+Q>(S4BKP}9k1J@2FKRYnROZIxTcia{|O{CcKMgiPlv zl}Cx98>co*6pi9!Nbf5eX*t%Yyge4DE{V-Ke24=zNM*R`Pzn$~vPf zRAZ~;^2(Q#&bNpWZ3=YRi8Hv24yH*hQCV<{*g0UyET@@hIp?g+&(PFyFhEsPj1-fj?w zDRVN!Q-*s2l(`u=NqO-$F`^s3tBBrQq2p!OZART1`kXQWE6$cq1CN5?NZXZPZ$lJ( zRJrYT>|!EOg8eQfqmUfOlhH^HrDT*L(Li4xjZ~K3E_M{-l~->UyBao#%6n$CAaYMD zr*Fr&Uj`u>4ql@EK%+IpY_ig40>=I5MiJ=TcR=B+3F3c5ad~0LouWY$ZAz<&;z{w% z!k;FJHKMpnIX+ojD_&IYog$tRS1QBr5;qxIjxIcNmw1ms{7<3fZgECvcxQNVy7Y7g z?3$KRniYx%GENj0&J_#VwA{WJ2YPfOj#eoEQ!KF<>Td8yId~(bGf)ESiG)0v`TCrbr#Q}_}q|E<{8=e`a*eS6~@;gWfv|z zb_2;=lnT4+dqf26`Pi|rmKX@w)kj=8sNDLr7|}sSx%QsBgco-8d$$ve(1}gCK@y_| zQB&R2dVR$6{*u(?iT?lT?abq=D$f5ubI64R0tCqg!Xgm~i!6;SvWRj8v7symK?>p$ zR-(r=_08X)Iq ze#;>By63kHH88~QHrp5LhOL|UR|fNkjGoP;?3ihp9 zh6}PA5g!s7xNdW*^mxHgbP{3mi{M{}y=Kan=#<~T>N`b;MYN1x(WWug3wFRORvsO- zyF*PknM+wa*1l!d7V7%-gAJp0*ZlS0GNHvfsP~)oOIZ|ew0<@Gp6?eGq_=UD9I6kM z9$sgP3i*;jdLbdwt#9~-OM;_$iY&G$Bh9Uax@nueQMGI3_EFiEAlkEOk|l8+fnd!g zw!3S+DIMITOm!?f7YjUvoRaA>IF4|POaDK9q1Y8erT9Ew2no-!=@MY-vjaT zJ$%;6J?8aSb%7pSa$~U`sr3r8ZoO`%mzZ7abqnHF->j#pPM8`SbO*h_blsra5$qqm zfqradW^B;wz1(3Yvskw<1OKYSdYRetSH0Rx8fGT^O~2mi)Y+^b@^nwLe2X5Vzc**L=sdz8Gqw^2S!4daRWITiX4*Er znR8{k*K}L2(H}~Nzoyf*_i=wYbh3GByYA?Hkl~l37w*Il>$3J| zm2n33U->WSx~2yYQOZ6nqoC^!;UBmB`@$Dke!1}TEdNLN<1=x-N|>oI-w87TCb=if zZ7`P$GYsY%F%5uOFHE1FaD~G4fHB=+2nu!GE=+5fcZInWW`!_8m{G!T2J70hsw|F^$SzGHKN>O%;JgqJ2?%pbi{QQ6Uv;HW8>26cqGK_RF=6t&+3KMEQLO@{7+!X+Q=Wkl#_OHO^H zv$TG~4Be-D>V0O(KHaj}8*^p3$&6VUk^&8U@clF~z9eU@eHFq;p_Und?>vp_gmh0|g z60Ie5-Hv9>e%&DD>lk}=v2*eld!>1gDJZ7)nBHlBA(IB8Ska($92qyv$Fel_E8{AuvOZ zN`YdtT`|XH%c3uv=H&bThwKhJ!d!Vkw`g{3mgHqO4$&B+< z=Q?N#@z*~}A(G=qTl+Cz(qqiB&vlddu~zxIuUvHy?~T@byfv(|-V+RGq$csQa8Rpx zzS892?oFO$F8hj`pGyzwR^F>K%+h@vcF#dwS3hnJ9Av&PHWfhgu;1b`g#4c4JWCU= z>SM>mv>9f|mlV-W>G3A>3r-Vvnh9U%mf@bQ8QL%tSGMX z6>+{|Un>-8z9Qf&4vHe#S5)^EuSurWd_@gkaX=KOC|-U=ys!9D6o>d&DVhXd^NeUp zeV3ZPVzel@(}71VU(sC@ulR~YU-7jl{^Toa`-v%8eJ{b=6Yc6+_wpvtPLc=lsrseqdPC*sT)6Lkt+^RG7yzGv-)4X|@ zV-7RNIHvAv4t=SE3BBX}Os7ooGffHpa&MJPR>`+%IOvbQcf6aXWma;t^c`O^YrdpK zHd%|jtVXJ}R&rByu}Dqz46D4uy4>wcCjAJBZ?^m(;WMn)80*#9N^ZVhYNc`3R?kXq z%EtMUIY=Jf_tX4|mEb1sr&f&5w&~t1N&QNX4d`{|p>OnM-FKy&tK`|1(9n$hZ&QgG zblzPV%ukWVc&9Qr4W=?U#~0t;k`SjNa(8f4MrB%#`TQHE>667g2=yWzBzNb!XDkdn z$m=Z`1;Xb?c$6t{iO7or69pCq4)DIDc!uE1NV+Sq3612tD^Lu_)I_(%asFp@GbTpJ zu=WN?xhqb~ihDtS>!R8(z92adj7yDbd5X1mK~zb~9*rrYd{3C7cbCr?hlUQ9?>&X6 zY-Mn4BPr2e#N!{#-Vaoex)~OJsE`VxP6r5ajaUS z*k&sTY&AWMzcx>w&`p|tMq{3; znjggcg?hCQf^P+0Fdv=JtuDDNaISLttcIF>g@Ab<1AJFE05ALx2 zop;SHv+;Y~zV?9Uq!~V0^v{gWL1RvQ&kUYn>Xhr!It4U54+P4+oLzwj%(vybMdzoJ z@h+&n6gc{F4Zq}VkKV(lv3Rp8mBY!0E3p4j?DMhj3bZlToz(qmp5yA{y2^i52GUI7 zNiNAxo7Ye3=I!>fdLF&^Kb4iCN6+%bp6>bA%tGT$?|O7TnI2uwRl(6V)p=>H*%(vn zlpfhJ6LYvm=g6^gidE33GXJce(T`!4NB%q>HoYd-!15%8I-Xn^{J}hSN{>$tSX*wL zf$|$4^6&&F&00U`R?XhI#HLCp7@_5taE>SAvS^?0(#;J1LC>r`rAR&s$QWUu-flkp zK~E&w)BCi(I(Y5NREeKpzkXq$GwgAG!60yjS$dk~t@g|2FQ@hI8Xn-O-nv`HltmEKIVth`pOQ;DEQj+u0S;y9+_4P0~+qSGdogq>*v3nx-0O_)4UJm8;+VG zKkC-C_M+eiBX;Dc^)UHA>KmKfREG*I`qNRIG747i=Zcou%V4eyt~THO$g@V3rsEks zw8Lk$Io4V3LSNr9Q?>=6jDmjUbysjEV9OvA{|OxAS7<_&!AHz1XY^J5GdPcBZ0+>S z7abmN2Y2<3>A4yC;~U{Ms1Xe){)_r?BfB48*h@rO6v?Sj<0aG77T-o{uKySDnp6N}v3y*M#$)A^d zqB5s1x=5c>Wc|u6(r0eB`lOF6u5=ldzh>p4y%twEec?7=4y)o1tf9~u%3OkUmteWm z7dd_Aht_|Y(-%8^#OWV%`qbUlFX>+vA9niET~;nG6%6xsqBE53w1(98E#^6Wj!Tf~ zCtw9~`n? zb^e)7zsTt$&OhDh7dm}r#O4!n`bVSwbR|z+D3$t&b#Qu>wARYy`!_!34erx6-3_4V zKni7KFoXGtz&q`LDqmp-SeZ%a>-DZz?8IB+thvyPL>(?WX}$8!Sxl<5nCkTEw3S15 zxm?Sw9L?r`;S0_`)8$)UVbc};TqS=-+OJlzI@=x~TA)z0U=E`NDt2=G#EbmT+I-3! zM*VZ#fnT`0s(;cc@u#N?eTMeFsK)y*IzXOs{h=*J{fj&+kGQA;rLN`5ezXNkKVz}z zCyV2!j2<(oB-qcJ7#9w;cX?jar_sL6p5j{H`6YF*{^<@w4%KAqm+Ab9{ztxJv#-2E z#>&|2PJ*Vgzjy4q!frOxr0y0A-H16l)n=O2%jq3vNA)gU$g~~cHLn?UEAMM=8sJSy z$a3a%vwMK|yFO7dZ?HSsJymm$++_9HPG98wvNEl{ER%be-rRagBdi=6X|dSs9_Tf{ zGOEtH!>Xf|D81JnCTcH>+DlRfd7oALk9fjq|xG!hI69Nf&G-1BQ4X)zQ_>Wm(>xSA~8g&Y3%YW^T*LQ}9=r0Z(z6cwW~s zJzb4Kx8%HTrYaAVY|ru@)&2Ky1=ex=xY4U zx-1qG=hsDa-Ak5@@g`~=F~5%Wx&d9sd6x%E*~>R4D$r)8r!K?Gm(ApHUh`mxVAjh} zt~2?vSv$^a7>>kws+{~U>lUZF@dL~8sv1~&QnF>cx9Kr;qW(@ljFVCJ<6Y>EuQDcS0zKbBe1uIFaMoA zY20jk5V6O~ei}1mf;TD{+D>^QEG*8|m(A-FysHC+Wqb_4=sUgo;l_vfRoBD(O04s$ zDzh&+!ftJ60zdZ}ul!{AAMt&u#zi{K&(>A%6Kdly$!?Y^MtGeHXXnlC0OVlP&(ruJbEF2ed4XW3Y5R^oqT74mH!Tke|0l2 z+q=9+sE$^5Lo4P`4YH2Q<--ohk3dg}jw~*g{WRutlBcK^S|vlJGsIPzIgSrVpff3V zdG`m?yK)B$n)86o$(PN#yS#Sc%nYq=gCder+HY8OU!ITdZRalbSoy!wuyT|R=4J_$ z8|~=-(lIk*eDtM>>eAd=X6W5svmUIRstmHlXF-USr8SuTA);~yWmqrmU>HhS#S%K()vgoO;_*{^w;;`DPN?Lq;+0>itU4C0xKA$jrh`Xrs+@RW9+m|0g*CwhvU0sR1 z848JxEH0KMkMn7;`}vw>lfCA*rO(%D1ho2mc8R|HJh~U6x-K=9$a|q}?hqHtlE?Wp z9Kz4n)Slus8B+KNKgzOzN%WwUjtRwbqv(^WdWJ%*pId^8mhhe&w7|_>UpBL*c)fe% ztkG&Y^qgetcQc~T5{78Z?Z$THIZ`)Dq zv9h1W^q=aVH0MqA8glM@d@4hubfZ@7H&INN(3j1-Q@th=N=vk=fcAGxJsS!8jEhm%ySCuSD13?^>O9SzRnkUgy)%&^CWFILGT4%-W+>+jq6P^&wk+ zUpC8fyyhu6|I+GNsK_@l^2Q}9UuSmbc)h7d!ad&A!O|c2YUXLJT0U$u@MSad9QDF zmN~aN=d?Z);_z1RAD1;n=LPSl#CgkLO@E70iQd*;v#uX*_YKDKnB2oxo({?B7eRYE^Q z*<`pF(f_yDQpu26-m7uTld82@HP`FjKWUcTVn$}VE$0l2nGVbEvvR5P%Zj4&FL!=P zCG+Nbb>qV_;9rB}%0ecHOpN{Tf}Lctz{{jbmdOGylV%_EExb&m$C*6B%Ou*u1UwBd z6Y(J?sN^Y=a4{sjOwOm6M{mQYrt;yfRC=r!p@?(ao)%nza{?{}4`0p!;mg6LEv>!~ z?7~tYK8hX98&EoFV|O>Q%Q<*A+XZ|C&rV}G6#skq`KMg#Uk)C-&+?(!1POX`178jn z0z0u6^7)v3k?fE3Txx`mV0&maeC$R?HbqVISPjq%c8B)E3yy%kh0g+`8y&$l4|1$9 z`w(HaLG9rqV06PHnDP)?N%Vs0P&T|^H)tlj;5ASod! zZm?oEQnI1?%S(I_k;`Af39ryfv%Rp-tU$=XPy~+NU^B`AU)n_Tp)Usemsou!_}*q) zh*D4<8ac?3S&11UvMc_=962^#5jr9EAC0)CRr~Y<$S>$OMxP zGpf-GJ_W_IK@xlwN`)6({UsU03vP!7!biYszOe-jfk(~>GKfxkl8987TePt+KmD3l7Fb!owg6*ev5GW8uKc}91I zVc8bS_At7Qi{0YMc5oXM!AI~Qv=?5m$IskjgBQF3Itwqj9E#_fj$oi_`-?qrI(X%; zc3=_{R0IzFLV#g)KZ1-#qLfNkTAoOy8svDTH7lCke-V#UA)d#O8VK^Ly=uh4GHdft zVjX)i8M{%8-4Mz~aWhnmzu;@oPT7$N^EI>=Lpj*Akyc0GQ^6lEvwZCKQMQpcLTB+2 zoC+nf5lp&VtAkJ~d>NS2QmgLpg2_B)B77>i-SH7{Sh$rnWP!PDcsUTKJaE(%b~};< zMj)A5f^*wheI7_;(f21Js8&MaLsU?maC~M5YRFy9Eb=S`+p)owmW$o&hGo|q$5Sy2 za1yKw6~QNg-MZNX#P!r7NVWM6>jgVhZ@Ts0QZ4r2DFSa7gAi{@g z5hVGPg1NnQ*k5k*dh=jl9};ljOz?1Dn;`vqE}3tzHBJXRvd@+lirrtw?!9FXzP3M? z-uMWv`~#QU@PfObIKKK>3O+H=wbsBe7qNq#0KNnHr30gzb-~kofh3v4f+I57qrnT_ z0`-C~18WU&Edj1)e?Aa>>^@!g@4Q)~ve66HgXV-0QehU|Y)5Y)SZjo>CGkvkH6#U! z-Q3G2eElTNNlTQ0qX-scp^pt3NPr=Al2&rJQSd(K1$e;?&^GZ0qX7lM z3HQ?fdoWD6mke{MF}&cbGi?9GMiV5;P-~`E<@g9n03j}qgMkwv2`mT}LCNR^w?OUT zBj7Ni3ccWCqYW#=D33t{F$j*DO+my7>~z2FzYutCE(;2JMS(lzF;?J1;OKc)9~*0k zjYUXI;@W&FiND|!=m@-EDHJ}9Aj}s~JRyMC$V6;(AvW?L5sBb@YJ|UFV<;P5uq8AT zUa%vy06sPp5gSe*tPnmQdyp7J9D#yT5(p+hN8kmgL#N>d^P#v0S%|=B@IkP~LY8jy zg7VHy7x?JAH^N8X!SVIHi!*ky_|TWatn>vI3hf-@X1 zC{c`o=>2F0yhJx7$}w^&s~~#8DNqi4`YKky@Z)xw%mY7p%JOAk{iiwW;gky2S;MG? zPXfn7vWCaTNMd6l5+i9)#QK20U=wIRyxF|QD zKq2^I@cO?nE#Wi4og3+U_}D;+1WaBkp*7G8?t*rT4;YP@xM)Y%50iYi`9f$!LL|>X ziNrGm@7uzlf)|_zb%7Ur9=aYrvQ?`k+w4Nbt!ec!R7wkRA6yOEZuu-Q`ybYayTYo` zPP>+*?hG^M5#+2T$Sr2O$be&a*~HwxR!w%h1mFk%bpGJbJ0|VQ zjiCkb+~!t`q1Eu*!d54Q42JU&QR~*j`b5)1PjwIlwx|-tn*ocorexCV& zl@1@lSD|h2+~ik%KcoWi+`v~GAlasI(_XdMYk6+?tMFq^;Bf)vePj(hQlO?eJ`cR~ zW1CSPn6}UIJied|B(>*}1;yhDJ};QL-|~V-pab}ngAG4HhUfOT%C$Vdj0Ll~j00nc zfaf6T4t0n%|1ire%WCGAL}9P?TE{SyQfZF3PIQB;h z1)l@qaOZmg4JkRc)@%~4pt1lFQMz_d&_mT_e<)m_D)s%f1j=@7XSbN From 0216359c1ffc9e3bc928ff10deb3c9a653c9db9b Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 2 Jun 2019 18:31:09 -0500 Subject: [PATCH 116/138] This image is pretty bad, we can do better --- BizHawk.Client.EmuHawk/AboutBox.cs | 14 +++----------- .../Properties/Resources.Designer.cs | 12 +----------- .../Properties/Resources.resx | 3 --- BizHawk.Client.EmuHawk/images/HawkInLove.png | Bin 194224 -> 0 bytes 4 files changed, 4 insertions(+), 25 deletions(-) delete mode 100644 BizHawk.Client.EmuHawk/images/HawkInLove.png diff --git a/BizHawk.Client.EmuHawk/AboutBox.cs b/BizHawk.Client.EmuHawk/AboutBox.cs index 92817df5bc..cf4643b863 100644 --- a/BizHawk.Client.EmuHawk/AboutBox.cs +++ b/BizHawk.Client.EmuHawk/AboutBox.cs @@ -163,24 +163,16 @@ namespace BizHawk.Client.EmuHawk private void AboutBox_Load(object sender, EventArgs e) { #if DEBUG - Text = $"BizHawk Developer Build (DEBUG MODE) GIT {SubWCRev.GIT_BRANCH}#{SubWCRev.GIT_SHORTHASH}"; + Text = $"BizHawk Developer Build (DEBUG MODE) GIT {SubWCRev.GIT_BRANCH}#{SubWCRev.GIT_SHORTHASH}"; #else Text = $"BizHawk Developer Build (RELEASE MODE) GIT {SubWCRev.GIT_BRANCH}#{SubWCRev.GIT_SHORTHASH}"; #endif - if (DateTime.Now.Month == 12) + if (DateTime.Now.Month == 12) + { if (DateTime.Now.Day > 17 && DateTime.Now.Day <= 25) { pictureBox1.Image = Properties.Resources.alt_about_image; } - - if (DateTime.Now.Month == 2) - { - if (DateTime.Now.Day >= 7 && DateTime.Now.Day <= 14) - { - pictureBox1.Image = Properties.Resources.HawkInLove; - pictureBox1.Location = new Point(pictureBox1.Location.X - 40, pictureBox1.Location.Y); - pictureBox1.Width = pictureBox1.Width + 80; - } } } diff --git a/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs b/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs index 8cb04e3e15..d9e97b6eff 100644 --- a/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs +++ b/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace BizHawk.Client.EmuHawk.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -690,16 +690,6 @@ namespace BizHawk.Client.EmuHawk.Properties { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap HawkInLove { - get { - object obj = ResourceManager.GetObject("HawkInLove", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/BizHawk.Client.EmuHawk/Properties/Resources.resx b/BizHawk.Client.EmuHawk/Properties/Resources.resx index 301536707a..1876bfb3b7 100644 --- a/BizHawk.Client.EmuHawk/Properties/Resources.resx +++ b/BizHawk.Client.EmuHawk/Properties/Resources.resx @@ -1455,9 +1455,6 @@ ..\images\tastudio\ts_h_piano_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\images\HawkInLove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\images\tastudio\ts_h_piano_00_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/BizHawk.Client.EmuHawk/images/HawkInLove.png b/BizHawk.Client.EmuHawk/images/HawkInLove.png deleted file mode 100644 index e29af04f0e8f99f18084d76c3ce3de508b75ac59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194224 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�@a^pNRe&<;Q?t!~sN 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 h>|2^aJ#!e>?4I%%`8{|D`szEc1I From 2642ef4049625fccb42751d6329807e7cc1cc968 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Thu, 6 Jun 2019 16:41:10 +1000 Subject: [PATCH 117/138] Remove empty docs --- BizHawk.Client.Common/FirmwareManager.cs | 2 -- .../movie/tasproj/TasStateManager.cs | 4 --- BizHawk.Client.DBMan/DATTools/DATConverter.cs | 8 ----- .../DATTools/DATParserBase.cs | 4 --- .../DATTools/NOINTROParser.cs | 3 -- BizHawk.Client.DBMan/DATTools/TOSECParser.cs | 3 -- BizHawk.Client.EmuHawk/AVOut/AviWriter.cs | 1 - BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs | 1 - .../AVOut/FFmpegWriterForm.cs | 1 - BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs | 1 - BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs | 11 ------- BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs | 16 ---------- .../AVOut/Quantize/OctreeQuantizer.cs | 3 -- BizHawk.Client.EmuHawk/AVOut/WavWriter.cs | 1 - .../CustomControls/GDIRenderer.cs | 1 - .../CustomControls/InputRoll.Drawing.cs | 1 - .../CustomControls/InputRoll.cs | 1 - .../CustomControls/MsgBox.cs | 1 - .../DisplayManager/DisplaySurface.cs | 3 -- BizHawk.Client.EmuHawk/IControlMainform.cs | 1 - BizHawk.Common/BizInvoke/MemoryBlock.cs | 4 --- BizHawk.Common/BizInvoke/WaterboxUtils.cs | 3 -- BizHawk.Common/DeepEquality.cs | 1 - .../Extensions/ReflectionExtensions.cs | 1 - BizHawk.Common/IImportResolver.cs | 3 -- BizHawk.Common/SettingsUtil.cs | 1 - BizHawk.Common/Win32Hacks.cs | 1 - .../Sound/Utilities/SpeexResampler.cs | 2 -- .../AmstradCPC/AmstradCPC.Messaging.cs | 5 ---- .../Computers/AmstradCPC/AmstradCPC.Util.cs | 4 --- .../Hardware/Abstraction/IBeeperDevice.cs | 4 --- .../Hardware/Abstraction/IFDDHost.cs | 1 - .../Hardware/Abstraction/IJoystick.cs | 4 --- .../Hardware/Abstraction/IKeyboard.cs | 5 ---- .../AmstradCPC/Hardware/Abstraction/IPSG.cs | 5 ---- .../Hardware/Abstraction/IPortIODevice.cs | 6 ---- .../Hardware/Datacorder/DatacorderDevice.cs | 9 ------ .../AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs | 5 ---- .../AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs | 12 -------- .../Hardware/Disk/NECUPD765.IPortIODevice.cs | 6 ---- .../Hardware/Disk/NECUPD765.Timing.cs | 1 - .../AmstradCPC/Hardware/Disk/NECUPD765.cs | 1 - .../Hardware/Disk/NECUPS765.Static.cs | 11 ------- .../Hardware/Display/AmstradGateArray.cs | 8 ----- .../AmstradCPC/Hardware/Display/CRCT_6845.cs | 11 ------- .../AmstradCPC/Hardware/Display/CRTC6845.cs | 30 ------------------- .../AmstradCPC/Hardware/Display/CRTDevice.cs | 10 ------- .../Hardware/Input/StandardKeyboard.cs | 7 ----- .../AmstradCPC/Hardware/PPI/PPI_8255.cs | 10 ------- .../Hardware/SoundOutput/AY38912.cs | 7 ----- .../AmstradCPC/Hardware/SoundOutput/Beeper.cs | 5 ---- .../Machine/CPC464/CPC464.Memory.cs | 10 ------- .../AmstradCPC/Machine/CPC464/CPC464.Port.cs | 4 --- .../AmstradCPC/Machine/CPC464/CPC464.cs | 2 -- .../Machine/CPC6128/CPC6128.Memory.cs | 10 ------- .../Machine/CPC6128/CPC6128.Port.cs | 4 --- .../AmstradCPC/Machine/CPC6128/CPC6128.cs | 2 -- .../AmstradCPC/Machine/CPCBase.Media.cs | 2 -- .../AmstradCPC/Machine/CPCBase.Memory.cs | 13 -------- .../AmstradCPC/Machine/CPCBase.Port.cs | 8 ----- .../AmstradCPC/Machine/GateArrayBase.cs | 12 -------- .../Media/Disk/CPCExtendedFloppyDisk.cs | 5 ---- .../AmstradCPC/Media/Disk/CPCFloppyDisk.cs | 5 ---- .../AmstradCPC/Media/Disk/FloppyDisk.cs | 15 ---------- .../AmstradCPC/Media/MediaConverter.cs | 18 ----------- .../AmstradCPC/Media/Tape/CDT/CdtConverter.cs | 13 -------- .../AmstradCPC/Media/Tape/TapeDataBlock.cs | 5 ---- .../Computers/AmstradCPC/ROM/RomData.cs | 5 ---- .../Hardware/Abstraction/IBeeperDevice.cs | 4 --- .../Hardware/Abstraction/IFDDHost.cs | 1 - .../Hardware/Abstraction/IJoystick.cs | 4 --- .../Hardware/Abstraction/IKeyboard.cs | 10 ------- .../Hardware/Abstraction/IPSG.cs | 5 ---- .../Hardware/Abstraction/IPortIODevice.cs | 6 ---- .../Hardware/Datacorder/DatacorderDevice.cs | 12 -------- .../Hardware/Disk/NECUPD765.FDC.cs | 6 ---- .../Hardware/Disk/NECUPD765.FDD.cs | 12 -------- .../Hardware/Disk/NECUPD765.IPortIODevice.cs | 6 ---- .../Hardware/Disk/NECUPD765.Timing.cs | 1 - .../Hardware/Disk/NECUPD765.cs | 1 - .../Hardware/Disk/NECUPS765.Static.cs | 11 ------- .../Hardware/Input/CursorJoystick.cs | 6 ---- .../Hardware/Input/KempstonJoystick.cs | 6 ---- .../Hardware/Input/NullJoystick.cs | 6 ---- .../Hardware/Input/SinclairJoystick1.cs | 6 ---- .../Hardware/Input/SinclairJoystick2.cs | 6 ---- .../Hardware/Input/StandardKeyboard.cs | 6 ---- .../Hardware/SoundOuput/AY38912.cs | 8 ----- .../SinclairSpectrum/Machine/CPUMonitor.cs | 5 ---- .../Pentagon128K/Pentagon128.Memory.cs | 16 ---------- .../Machine/Pentagon128K/Pentagon128.Port.cs | 4 --- .../Machine/Pentagon128K/Pentagon128.cs | 2 -- .../Machine/SpectrumBase.Input.cs | 6 ---- .../Machine/SpectrumBase.Media.cs | 2 -- .../Machine/SpectrumBase.Memory.cs | 19 ------------ .../Machine/SpectrumBase.Port.cs | 4 --- .../Computers/SinclairSpectrum/Machine/ULA.cs | 9 ------ .../Machine/ZXSpectrum128K/ZX128.Memory.cs | 16 ---------- .../Machine/ZXSpectrum128K/ZX128.Port.cs | 4 --- .../Machine/ZXSpectrum128K/ZX128.cs | 2 -- .../Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs | 2 -- .../ZX128Plus2a.Memory.cs | 16 ---------- .../ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs | 4 --- .../ZXSpectrum128KPlus2a/ZX128Plus2a.cs | 2 -- .../ZXSpectrum128KPlus3/ZX128Plus3.Memory.cs | 16 ---------- .../ZXSpectrum128KPlus3/ZX128Plus3.Port.cs | 4 --- .../Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs | 2 -- .../Machine/ZXSpectrum16K/ZX16.cs | 14 --------- .../Machine/ZXSpectrum48K/ZX48.Memory.cs | 14 --------- .../Machine/ZXSpectrum48K/ZX48.Port.cs | 4 --- .../Machine/ZXSpectrum48K/ZX48.cs | 2 -- .../Disk/CPCFormat/CPCExtendedFloppyDisk.cs | 5 ---- .../Media/Disk/CPCFormat/CPCFloppyDisk.cs | 5 ---- .../SinclairSpectrum/Media/Disk/FloppyDisk.cs | 15 ---------- .../Media/Disk/IPFFormat/IPFFloppyDisk.cs | 2 -- .../Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs | 5 ---- .../SinclairSpectrum/Media/MediaConverter.cs | 26 ---------------- .../Media/Snapshot/SZX/SZX.Methods.cs | 2 -- .../Media/Tape/CSW/CswConverter.cs | 7 ----- .../Media/Tape/PZX/PzxConverter.cs | 2 -- .../Media/Tape/TAP/TapConverter.cs | 1 - .../Media/Tape/TZX/TzxConverter.cs | 11 ------- .../Media/Tape/TapeDataBlock.cs | 5 ---- .../Media/Tape/WAV/WavConverter.cs | 2 -- .../SinclairSpectrum/ZXSpectrum.ISettable.cs | 4 --- .../SinclairSpectrum/ZXSpectrum.Messaging.cs | 5 ---- .../SinclairSpectrum/ZXSpectrum.Util.cs | 10 ------- .../Consoles/Nintendo/GBA/LibVBANext.cs | 15 ---------- .../Consoles/Nintendo/GBA/LibmGBA.cs | 1 - .../Nintendo/Gameboy/IGameboyCommon.cs | 4 --- .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 25 ---------------- .../N64/NativeApi/mupen64plusAudioApi.cs | 3 -- .../N64/NativeApi/mupen64plusCoreApi.cs | 15 ---------- .../N64/NativeApi/mupen64plusInputApi.cs | 2 -- .../Consoles/Nintendo/NES/APU.cs | 1 - .../Nintendo/NES/Boards/DatachBarcode.cs | 1 - .../Consoles/Nintendo/NES/Boards/ExROM.cs | 1 - .../NES/Boards/Namcot1xx/Namco163Audio.cs | 3 -- .../Consoles/Nintendo/NES/Boards/SEEPROM.cs | 4 --- .../Consoles/Nintendo/NES/FDS/FDS.cs | 2 -- .../Consoles/Nintendo/NES/FDS/RamAdapter.cs | 13 -------- .../Consoles/Nintendo/NES/INESPPUViewable.cs | 13 -------- .../Consoles/Nintendo/NES/NES.Core.cs | 1 - .../Consoles/Nintendo/NES/NESControllers.cs | 9 ------ .../Consoles/Nintendo/QuickNES/LibQuickNES.cs | 11 ------- .../Nintendo/SNES/LibsnesControllerDeck.cs | 1 - .../Consoles/Nintendo/SNES/LibsnesCore.cs | 2 -- .../Consoles/Sega/PicoDrive/LibPicoDrive.cs | 4 --- .../Consoles/WonderSwan/BizSwan.cs | 25 ---------------- BizHawk.Emulation.Cores/CoreInventory.cs | 15 ---------- BizHawk.Emulation.Cores/FileID.cs | 3 -- BizHawk.Emulation.Cores/Sound/MMC5Audio.cs | 5 ---- BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs | 5 ---- .../Sound/SyncSoundMixer.cs | 3 -- BizHawk.Emulation.Cores/Sound/VRC6Alt.cs | 3 -- .../Waterbox/LibWaterboxCore.cs | 3 -- BizHawk.Emulation.Cores/Waterbox/PeRunner.cs | 2 -- .../Waterbox/WaterboxCore.cs | 2 -- .../Waterbox/WaterboxUtils.cs | 3 -- .../CDFS/EndianBitConverter.cs | 8 ----- BizHawk.Emulation.DiscSystem/CDFS/ISOFile.cs | 1 - .../CDFS/ISOVolumeDescriptor.cs | 4 --- .../DiscFormats/MDS_Format.cs | 2 -- .../BitmapFontParser/BitmapFontLoader.cs | 9 ------ ExternalCoreProjects/Virtu/Keyboard.cs | 7 ----- 165 files changed, 1013 deletions(-) diff --git a/BizHawk.Client.Common/FirmwareManager.cs b/BizHawk.Client.Common/FirmwareManager.cs index f6bbbe3abf..d6dc3040fa 100644 --- a/BizHawk.Client.Common/FirmwareManager.cs +++ b/BizHawk.Client.Common/FirmwareManager.cs @@ -129,8 +129,6 @@ namespace BizHawk.Client.Common /// /// Test to determine whether the supplied firmware file matches something in the firmware database /// - /// - /// public bool CanFileBeImported(string f) { try diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 671fb95c05..38b961c6c1 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -460,8 +460,6 @@ namespace BizHawk.Client.Common /// /// Returns index of the state right above the given frame /// - /// - /// public int GetStateIndexByFrame(int frame) { return _states.IndexOfKey(GetStateClosestToFrame(frame).Key); @@ -470,8 +468,6 @@ namespace BizHawk.Client.Common /// /// Returns frame of the state at the given index /// - /// - /// public int GetStateFrameByIndex(int index) { // feos: this is called super often by decay diff --git a/BizHawk.Client.DBMan/DATTools/DATConverter.cs b/BizHawk.Client.DBMan/DATTools/DATConverter.cs index bcf1cf67b1..8fc61718ec 100644 --- a/BizHawk.Client.DBMan/DATTools/DATConverter.cs +++ b/BizHawk.Client.DBMan/DATTools/DATConverter.cs @@ -29,8 +29,6 @@ namespace BizHawk.Client.DBMan /// /// Choose output directory /// - /// - /// private void button2_Click(object sender, EventArgs e) { var fbd = new FolderBrowserDialog(); @@ -45,8 +43,6 @@ namespace BizHawk.Client.DBMan /// /// Add import files to the list box /// - /// - /// private void buttonAddFiles_Click(object sender, EventArgs e) { var ofd = new OpenFileDialog(); @@ -70,8 +66,6 @@ namespace BizHawk.Client.DBMan /// /// Removes selected input files from the listbox /// - /// - /// private void buttonRemove_Click(object sender, EventArgs e) { List files = new List(); @@ -90,8 +84,6 @@ namespace BizHawk.Client.DBMan /// /// Attempt to process all selected files /// - /// - /// private void buttonStartProcessing_Click(object sender, EventArgs e) { // initial checks diff --git a/BizHawk.Client.DBMan/DATTools/DATParserBase.cs b/BizHawk.Client.DBMan/DATTools/DATParserBase.cs index 7034724261..a65f72afbc 100644 --- a/BizHawk.Client.DBMan/DATTools/DATParserBase.cs +++ b/BizHawk.Client.DBMan/DATTools/DATParserBase.cs @@ -17,8 +17,6 @@ namespace BizHawk.Client.DBMan /// /// Parses multiple DAT files and returns a single GamesDB format csv string /// - /// - /// public abstract string ParseDAT(string[] filePath); protected List IncomingData = new List(); @@ -170,8 +168,6 @@ namespace BizHawk.Client.DBMan /// /// Used to get the correct system code (that each gamedb csv needs) /// - /// - /// public static string GetSystemCode(SystemType type) { switch (type) diff --git a/BizHawk.Client.DBMan/DATTools/NOINTROParser.cs b/BizHawk.Client.DBMan/DATTools/NOINTROParser.cs index fb0381daa5..6ab083c29d 100644 --- a/BizHawk.Client.DBMan/DATTools/NOINTROParser.cs +++ b/BizHawk.Client.DBMan/DATTools/NOINTROParser.cs @@ -27,8 +27,6 @@ namespace BizHawk.Client.DBMan /// /// Parses multiple DAT files and returns a single GamesDB format csv string /// - /// - /// public override string ParseDAT(string[] filePath) { foreach (var s in filePath) @@ -116,7 +114,6 @@ namespace BizHawk.Client.DBMan /// Detailed info here: https://www.tosecdev.org/tosec-naming-convention /// Guts of this has been reused from here: https://github.com/Asnivor/MedLaunch/blob/master/MedLaunch/_Debug/DATDB/Platforms/TOSEC/StringConverterToSec.cs ///
- /// private void ParseNOINTROFlags(GameDB g) { string nameString = g.Name; diff --git a/BizHawk.Client.DBMan/DATTools/TOSECParser.cs b/BizHawk.Client.DBMan/DATTools/TOSECParser.cs index e5137769ed..6a7af48079 100644 --- a/BizHawk.Client.DBMan/DATTools/TOSECParser.cs +++ b/BizHawk.Client.DBMan/DATTools/TOSECParser.cs @@ -27,8 +27,6 @@ namespace BizHawk.Client.DBMan /// /// Parses multiple DAT files and returns a single GamesDB format csv string /// - /// - /// public override string ParseDAT(string[] filePath) { foreach (var s in filePath) @@ -121,7 +119,6 @@ namespace BizHawk.Client.DBMan /// Detailed info here: https://www.tosecdev.org/tosec-naming-convention /// Guts of this has been reused from here: https://github.com/Asnivor/MedLaunch/blob/master/MedLaunch/_Debug/DATDB/Platforms/TOSEC/StringConverterToSec.cs ///
- /// private void ParseTOSECFlags(GameDB g) { string nameString = g.Name; diff --git a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs index 2cc69d918b..706382c3ec 100644 --- a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs @@ -136,7 +136,6 @@ namespace BizHawk.Client.EmuHawk /// opens an avi file for recording with the supplied enumerator used to name files. /// set a video codec token first. ///
- /// public void OpenFile(IEnumerator nameProvider) { _nameProvider = nameProvider; diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs index ccb9f64379..999c1deb7f 100644 --- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs @@ -160,7 +160,6 @@ namespace BizHawk.Client.EmuHawk /// /// returns a string containing the commandline sent to ffmpeg and recent console (stderr) output /// - /// private string ffmpeg_geterror() { if (_ffmpeg.StartInfo.RedirectStandardError) diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs index 510ca56392..bdecd7fedd 100644 --- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs +++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs @@ -43,7 +43,6 @@ namespace BizHawk.Client.EmuHawk /// /// get a list of canned presets /// - /// public static FormatPreset[] GetPresets() { return new[] diff --git a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs index bdaf8c0350..ca93ae6c19 100644 --- a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs @@ -105,7 +105,6 @@ namespace BizHawk.Client.EmuHawk // /// // /// name that command line parameters can refer to // /// -// /// // string ShortName(); } diff --git a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs index 00286e0120..6acabff970 100644 --- a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs @@ -267,7 +267,6 @@ namespace BizHawk.Client.EmuHawk /// /// write big endian 16 bit unsigned /// - /// void writeBE16(UInt16 v) { byte[] b = new byte[2]; @@ -279,7 +278,6 @@ namespace BizHawk.Client.EmuHawk /// /// write big endian 32 bit unsigned /// - /// void writeBE32(UInt32 v) { byte[] b = new byte[4]; @@ -293,7 +291,6 @@ namespace BizHawk.Client.EmuHawk /// /// write big endian 64 bit unsigned /// - /// void writeBE64(UInt64 v) { byte[] b = new byte[8]; @@ -309,7 +306,6 @@ namespace BizHawk.Client.EmuHawk /// write variable length value /// encoding is similar to MIDI ///
- /// void writeVar(UInt64 v) { byte[] b = new byte[10]; @@ -333,7 +329,6 @@ namespace BizHawk.Client.EmuHawk /// write variable length value /// encoding is similar to MIDI ///
- /// private void writeVar(int v) { if (v < 0) @@ -365,7 +360,6 @@ namespace BizHawk.Client.EmuHawk /// actually write a packet to file /// timestamp sequence must be nondecreasing ///
- /// void writeActual(JMDPacket j) { if (j.timestamp < timestampoff) @@ -408,7 +402,6 @@ namespace BizHawk.Client.EmuHawk /// assemble JMDPacket and send to packetqueue /// one audio packet is split up into many many JMD packets, since JMD requires only 2 samples (1 left, 1 right) per packet ///
- /// public void AddSamples(short[] samples) { if (!stereo) @@ -459,7 +452,6 @@ namespace BizHawk.Client.EmuHawk /// will be written when order-appropriate wrt video /// the sound packets added must be internally ordered (but need not match video order) ///
- /// void writesound(JMDPacket j) { while (vstorage.Count > 0) @@ -479,7 +471,6 @@ namespace BizHawk.Client.EmuHawk /// will be written when order-appropriate wrt audio /// the video packets added must be internally ordered (but need not match audio order) /// - /// void writevideo(JMDPacket j) { while (astorage.Count > 0) @@ -593,8 +584,6 @@ namespace BizHawk.Client.EmuHawk /// can be changed in future /// should always match IVideoProvider /// - /// - /// public void SetVideoParameters(int width, int height) { // each frame is dumped independently with its own resolution tag, so we don't care to store this diff --git a/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs b/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs index b8d7c772b4..a974785b1b 100644 --- a/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs +++ b/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs @@ -24,9 +24,6 @@ namespace BizHawk.Client.EmuHawk private readonly int _capacity; - /// - /// - /// /// total number of buffers to keep around public ReusableBufferPool(int capacity) { @@ -153,8 +150,6 @@ namespace BizHawk.Client.EmuHawk /// /// big endian 64 bit unsigned /// - /// - /// static void WriteBE64(ulong v, Stream stream) { byte[] b = new byte[8]; @@ -169,8 +164,6 @@ namespace BizHawk.Client.EmuHawk /// /// big endian 32 bit unsigned /// - /// - /// static void WriteBE32(uint v, Stream stream) { byte[] b = new byte[4]; @@ -185,8 +178,6 @@ namespace BizHawk.Client.EmuHawk /// /// big endian 32 bit unsigned /// - /// - /// static void WriteBE32(int v, Stream stream) { byte[] b = new byte[4]; @@ -213,7 +204,6 @@ namespace BizHawk.Client.EmuHawk /// /// seems to be different than standard CRC32????? /// - /// /// crc32, nut variant static uint NutCRC32(byte[] buf) { @@ -510,8 +500,6 @@ namespace BizHawk.Client.EmuHawk ReusableBufferPool _pool; - /// - /// /// frame data /// actual length of frame data /// presentation timestamp @@ -562,9 +550,6 @@ namespace BizHawk.Client.EmuHawk /// /// compare two NutFrames by pts /// - /// - /// - /// public static bool operator <=(NutFrame lhs, NutFrame rhs) { BigInteger left = new BigInteger(lhs.pts); @@ -587,7 +572,6 @@ namespace BizHawk.Client.EmuHawk /// /// write out frame, with syncpoint and all headers /// - /// public void WriteData(Stream dest) { dest.Write(data, 0, actual_length); diff --git a/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs b/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs index 5033f6d327..6e57519a29 100644 --- a/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs +++ b/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs @@ -149,7 +149,6 @@ namespace BizHawk.Client.EmuHawk /// /// Add a given color value to the octree /// - /// public void AddColor(int pixel) { // Check if this request is for the same color as the last @@ -267,8 +266,6 @@ namespace BizHawk.Client.EmuHawk /// /// Get the palette index for the passed color /// - /// - /// public int GetPaletteIndex(int pixel) { int ret = -1; diff --git a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs index b57f5f846c..195c47b029 100644 --- a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs @@ -104,7 +104,6 @@ namespace BizHawk.Client.EmuHawk /// /// open a new underlying stream /// - /// private void opencurrent(Stream next) { file = new BinaryWriter(next, Encoding.ASCII); diff --git a/BizHawk.Client.EmuHawk/CustomControls/GDIRenderer.cs b/BizHawk.Client.EmuHawk/CustomControls/GDIRenderer.cs index 5bbe8445fc..92ef9d86c0 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/GDIRenderer.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/GDIRenderer.cs @@ -125,7 +125,6 @@ namespace BizHawk.Client.EmuHawk.CustomControls /// /// the max width to render the string in /// the number of characters that will fit under restriction - /// public Size MeasureString(string str, Font font, float maxWidth, out int charFit, out int charFitWidth) { SetFont(font); diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.Drawing.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.Drawing.cs index 8323a367bb..b5a2556f7b 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.Drawing.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.Drawing.cs @@ -530,7 +530,6 @@ namespace BizHawk.Client.EmuHawk /// /// Calls QueryItemBkColor callback for all visible cells and fills in the background of those cells. /// - /// private void DoBackGroundCallback(PaintEventArgs e, List visibleColumns) { int startIndex = FirstVisibleRow; diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs index 3cd63c326b..5bab6dc2e7 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll.cs @@ -289,7 +289,6 @@ namespace BizHawk.Client.EmuHawk /// /// Returns all columns including those that are not visible /// - /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public RollColumns AllColumns => _columns; diff --git a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs index 6a3dad199e..278fc0c73d 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs @@ -288,7 +288,6 @@ namespace BizHawk.Client.EmuHawk.CustomControls /// /// Paint the System Icon in the top left corner. /// - /// protected override void OnPaint(PaintEventArgs e) { if (m_sysIcon != null) diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplaySurface.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplaySurface.cs index 91e0c23f01..1a053418a3 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/DisplaySurface.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplaySurface.cs @@ -141,9 +141,6 @@ namespace BizHawk.Client.EmuHawk /// /// returns a new surface /// - /// - /// - /// public DisplaySurface ToPaddedSurface(int xpad0, int ypad0, int xpad1, int ypad1) { int new_width = Width + xpad0 + xpad1; diff --git a/BizHawk.Client.EmuHawk/IControlMainform.cs b/BizHawk.Client.EmuHawk/IControlMainform.cs index 3716de65b5..4579ee8a0b 100644 --- a/BizHawk.Client.EmuHawk/IControlMainform.cs +++ b/BizHawk.Client.EmuHawk/IControlMainform.cs @@ -42,7 +42,6 @@ /// when a Tool sets WantsToControlRewind /// Returns whether or not the rewind action actually occured /// - /// bool Rewind(); bool WantsToControlRestartMovie { get; } diff --git a/BizHawk.Common/BizInvoke/MemoryBlock.cs b/BizHawk.Common/BizInvoke/MemoryBlock.cs index 7bbdf04f36..b7d938ea11 100644 --- a/BizHawk.Common/BizInvoke/MemoryBlock.cs +++ b/BizHawk.Common/BizInvoke/MemoryBlock.cs @@ -66,7 +66,6 @@ namespace BizHawk.Common.BizInvoke /// /// allocate size bytes at any address /// - /// public MemoryBlock(ulong size) : this(0, size) { @@ -75,8 +74,6 @@ namespace BizHawk.Common.BizInvoke /// /// allocate size bytes starting at a particular address /// - /// - /// public MemoryBlock(ulong start, ulong size) { if (OSTailoredCode.CurrentOS != OSTailoredCode.DistinctOS.Windows) @@ -192,7 +189,6 @@ namespace BizHawk.Common.BizInvoke /// /// take a hash of the current full contents of the block, including unreadable areas /// - /// public byte[] FullHash() { if (!Active) diff --git a/BizHawk.Common/BizInvoke/WaterboxUtils.cs b/BizHawk.Common/BizInvoke/WaterboxUtils.cs index a85a437485..13f2ce5705 100644 --- a/BizHawk.Common/BizInvoke/WaterboxUtils.cs +++ b/BizHawk.Common/BizInvoke/WaterboxUtils.cs @@ -12,9 +12,6 @@ namespace BizHawk.Common.BizInvoke /// /// copy `len` bytes from `src` to `dest` /// - /// - /// - /// public static void CopySome(Stream src, Stream dst, long len) { var buff = new byte[4096]; diff --git a/BizHawk.Common/DeepEquality.cs b/BizHawk.Common/DeepEquality.cs index 04d09b4796..00cf2299a7 100644 --- a/BizHawk.Common/DeepEquality.cs +++ b/BizHawk.Common/DeepEquality.cs @@ -19,7 +19,6 @@ namespace BizHawk.Common /// /// return true if an array type is not 0-based /// - /// private static bool IsNonZeroBaedArray(Type t) { if (!t.IsArray) diff --git a/BizHawk.Common/Extensions/ReflectionExtensions.cs b/BizHawk.Common/Extensions/ReflectionExtensions.cs index 29bdfafd92..505939d717 100644 --- a/BizHawk.Common/Extensions/ReflectionExtensions.cs +++ b/BizHawk.Common/Extensions/ReflectionExtensions.cs @@ -205,7 +205,6 @@ namespace BizHawk.Common.ReflectionExtensions /// /// the address of a field relative to the address an object reference of that type points to. this function is very expensive to call. /// - /// public static IntPtr GetManagedOffset(this FieldInfo field) { Type type = field.DeclaringType; diff --git a/BizHawk.Common/IImportResolver.cs b/BizHawk.Common/IImportResolver.cs index a6130e8c67..ece638c7c3 100644 --- a/BizHawk.Common/IImportResolver.cs +++ b/BizHawk.Common/IImportResolver.cs @@ -16,9 +16,6 @@ namespace BizHawk.Common /// /// Resolve an entry point and throw an exception if that resolution is NULL /// - /// - /// - /// public static IntPtr SafeResolve(this IImportResolver dll, string entryPoint) { var ret = dll.Resolve(entryPoint); diff --git a/BizHawk.Common/SettingsUtil.cs b/BizHawk.Common/SettingsUtil.cs index 6a8e940692..2ce139ebfb 100644 --- a/BizHawk.Common/SettingsUtil.cs +++ b/BizHawk.Common/SettingsUtil.cs @@ -21,7 +21,6 @@ namespace BizHawk.Common /// /// set all properties (not fields!) of obj with a DefaultValueAttribute to that value /// - /// /// the obj to act on public static void SetDefaultValues(T obj) { diff --git a/BizHawk.Common/Win32Hacks.cs b/BizHawk.Common/Win32Hacks.cs index 77960636ff..7a20f6a95d 100644 --- a/BizHawk.Common/Win32Hacks.cs +++ b/BizHawk.Common/Win32Hacks.cs @@ -408,7 +408,6 @@ namespace BizHawk.Common /// /// Functionally the same as WaitOne(), but pumps com messa /// - /// public static void HackyComWaitOne(WaitHandle handle) { uint nativeResult; // result of the native wait API (WaitForMultipleObjects or MsgWaitForMultipleObjectsEx) diff --git a/BizHawk.Emulation.Common/Sound/Utilities/SpeexResampler.cs b/BizHawk.Emulation.Common/Sound/Utilities/SpeexResampler.cs index af0aeb6976..ff25d2276c 100644 --- a/BizHawk.Emulation.Common/Sound/Utilities/SpeexResampler.cs +++ b/BizHawk.Emulation.Common/Sound/Utilities/SpeexResampler.cs @@ -216,7 +216,6 @@ namespace BizHawk.Emulation.Common /// Get the latency in input samples introduced by the resampler. /// /// Resampler state - /// [DllImport("libspeexdsp.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int speex_resampler_get_input_latency(IntPtr st); @@ -224,7 +223,6 @@ namespace BizHawk.Emulation.Common /// Get the latency in output samples introduced by the resampler. /// /// Resampler state - /// [DllImport("libspeexdsp.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int speex_resampler_get_output_latency(IntPtr st); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs index b80977c5c2..7f47a0fb50 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs @@ -13,8 +13,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Writes a message to the OSD /// - /// - /// public void SendMessage(string message, MessageCategory category) { if (!CheckMessageSettings(category)) @@ -51,7 +49,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Called when certain input presses are detected /// - /// public void OSD_FireInputMessage(string input) { StringBuilder sb = new StringBuilder(); @@ -467,8 +464,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Checks whether message category is allowed to be sent /// - /// - /// public bool CheckMessageSettings(MessageCategory category) { switch (Settings.OSDMessageVerbosity) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs index f12acf1514..f51a83db9f 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs @@ -13,8 +13,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Helper method that returns a single INT32 from a BitArray /// - /// - /// public static int GetIntFromBitArray(BitArray bitArray) { if (bitArray.Length > 32) @@ -28,8 +26,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// POKEs a memory bus address /// - /// - /// public void PokeMemory(ushort addr, byte value) { _machine.WriteBus(addr, value); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs index 2bca3c69eb..42626f6590 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs @@ -10,20 +10,16 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Initialisation /// - /// - /// void Init(int sampleRate, int tStatesPerFrame); /// /// Processes an incoming pulse value and adds it to the blipbuffer /// - /// void ProcessPulseValue(bool pulse); /// /// State serialization /// - /// void SyncState(Serializer ser); } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs index 89c99e3eb7..c65f7a6eda 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs @@ -14,7 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Parses a new disk image and loads it into this floppy drive /// - /// void FDD_LoadDisk(byte[] diskData); /// diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs index e1c100a42b..7afe0d007c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs @@ -24,15 +24,11 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets the joystick line based on key pressed /// - /// - /// void SetJoyInput(string key, bool isPressed); /// /// Gets the state of a particular joystick binding /// - /// - /// bool GetJoyInput(string key); } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs index 9c78f826d4..194837241f 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs @@ -36,21 +36,16 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads the current line status /// - /// byte ReadCurrentLine(); /// /// Sets the CPC key status /// - /// - /// void SetKeyStatus(string key, bool isPressed); /// /// Gets the status of a CPC key /// - /// - /// bool GetKeyStatus(string key); void SyncState(Serializer ser); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs index 826cf338b1..2481387986 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Initlization routine /// - /// - /// void Init(int sampleRate, int tStatesPerFrame); void SetFunction(int data); @@ -27,7 +25,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Writes to the PSG /// - /// void PortWrite(int value); /// @@ -59,13 +56,11 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Updates the sound based on number of frame cycles /// - /// void UpdateSound(int frameCycle); /// /// IStatable serialization /// - /// void SyncState(Serializer ser); } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs index 9394bf1d90..01a351f4b4 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs @@ -9,17 +9,11 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// bool ReadPort(ushort port, ref int result); /// /// Device responds to an OUT instruction /// - /// - /// - /// bool WritePort(ushort port, int result); } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs index d9bb008f20..32adc5dbde 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs @@ -29,7 +29,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Initializes the datacorder device /// - /// public void Init(CPCBase machine) { _machine = machine; @@ -296,7 +295,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// TRUE: skip forward /// FALSE: skip backward /// - /// public void SkipBlock(bool skipForward) { int blockCount = _dataBlocks.Count; @@ -354,7 +352,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Inserts a new tape and sets up the tape device accordingly /// - /// public void LoadTape(byte[] tapeData) { // instantiate converters @@ -416,8 +413,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Simulates the spectrum 'EAR' input reading data from the tape /// - /// - /// public bool GetEarBit(long cpuCycle) { // decide how many cycles worth of data we are capturing @@ -768,7 +763,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// public bool ReadPort() { if (TapeIsPlaying) @@ -800,8 +794,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// public void WritePort(bool state) { // not implemented @@ -821,7 +813,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Bizhawk state serialization /// - /// public void SyncState(Serializer ser) { ser.BeginSection(nameof(DatacorderDevice)); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs index 96815e78f3..3d110314c5 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs @@ -2471,7 +2471,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Handles CPU writing to the data register /// - /// private void WriteDataRegister(byte data) { if (!GetBit(MSR_RQM, StatusMain) || GetBit(MSR_DIO, StatusMain)) @@ -2523,9 +2522,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Returns TRUE if successful. FALSE if otherwise /// Called only in idle phase /// - /// - /// - /// private bool ParseCommandByte(byte cmdByte) { // clear counters @@ -2618,7 +2614,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Parses the first 5 command argument bytes that are of the standard format /// - /// private void ParseParamByteStandard(int index) { byte currByte = CommBuffer[index]; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs index 487048bbc6..248f2fcd0d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs @@ -69,7 +69,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Searches for the requested sector /// - /// private FloppyDisk.Sector GetSector() { FloppyDisk.Sector sector = null; @@ -155,7 +154,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Parses a new disk image and loads it into this floppy drive /// - /// public void FDD_LoadDisk(byte[] diskData) { // we are only going to load into the first drive @@ -335,8 +333,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Moves the head across the disk cylinders /// - /// - /// public void MoveHead(SkipDirection direction, int cylinderCount) { // get total tracks @@ -378,10 +374,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Finds a supplied sector /// - /// - /// - /// - /// public FloppyDisk.Sector FindSector(ref byte[] resBuffer, CommandParameters prms) { int index =CurrentSector; @@ -449,8 +441,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Populates a result buffer /// - /// - /// public void FillResult(ref byte[] resBuffer, CHRN chrn) { // clear results @@ -480,7 +470,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Populates the result buffer with ReadID data /// - /// public void ReadID(ref byte[] resBuffer) { if (CheckDriveStatus() == false) @@ -797,7 +786,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Parses a new disk image and loads it into this floppy drive /// - /// public void FDD_LoadDisk(byte[] diskData) { // try dsk first diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs index 6a2c89f506..e58821a477 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs @@ -122,9 +122,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int data) { BitArray bits = new BitArray(new byte[] { (byte)data }); @@ -165,9 +162,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int data) { BitArray bits = new BitArray(new byte[] { (byte)data }); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs index 9daed05605..41b4465f44 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs @@ -96,7 +96,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Returns true if there is no delay /// Returns false if read is to be deferred /// - /// private bool CheckTiming() { // get delta diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs index a365a7b796..25f623548d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs @@ -30,7 +30,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Main constructor /// - /// public NECUPD765() { InitCommandList(); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs index 24ad458a34..f74d8b4d29 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs @@ -18,9 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns the specified bit value from supplied byte /// - /// - /// - /// public static bool GetBit(int bitNumber, byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -34,8 +31,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets the specified bit of the supplied byte to 1 /// - /// - /// public static void SetBit(int bitNumber, ref byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -51,8 +46,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets the specified bit of the supplied byte to 0 /// - /// - /// public static void UnSetBit(int bitNumber, ref byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -68,8 +61,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns a drive number (0-3) based on the first two bits of the supplied byte /// - /// - /// public static int GetUnitSelect(byte dataByte) { int driveNumber = dataByte & 0x03; @@ -79,8 +70,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets the first two bits of a byte based on the supplied drive number (0-3) /// - /// - /// public static void SetUnitSelect(int driveNumber, ref byte dataByte) { switch (driveNumber) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs index 110b2ce975..685893689e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs @@ -1197,9 +1197,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { // gate array is OUT only @@ -1209,9 +1206,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); @@ -1306,7 +1300,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Screenmode is defined at each HSYNC (start of a new character line) /// Therefore we pass the mode in via constructor /// - /// //public CharacterLine(int screenMode) //{ //ScreenMode = screenMode; @@ -1319,7 +1312,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Adds a new horizontal character to the list /// - /// public void AddCharacter(Phase phase) { Phases.Add(phase); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs index b68b4e8d21..265214aa8c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs @@ -873,7 +873,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Selects a register /// - /// private void RegisterSelect(int data) { SelectedRegister = data & 0x1F; @@ -909,7 +908,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Writes to the currently selected register /// - /// private void WriteRegister(int data) { // 16 and 17 are read only registers on all types @@ -953,7 +951,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads from the currently selected register /// - /// private bool ReadRegister(ref int data) { bool addressed = false; @@ -1029,8 +1026,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads from the status register /// - /// - /// private bool ReadStatus(ref int data) { bool addressed = false; @@ -1107,9 +1102,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { byte portUpper = (byte)(port >> 8); @@ -1143,9 +1135,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { byte portUpper = (byte)(port >> 8); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs index e17d5572e9..c0f7c303f6 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs @@ -48,7 +48,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// The only constructor /// - /// public CRTC6845(CRTCType type) { ChipType = type; @@ -363,8 +362,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// CPU (or other device) reads from the 8-bit databus /// - /// - /// public virtual bool ReadPort(ushort port, ref int result) { byte portUpper = (byte)(port >> 8); @@ -398,8 +395,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// CPU (or other device) writes to the 8-bit databus /// - /// - /// public virtual bool WritePort(ushort port, int value) { byte portUpper = (byte)(port >> 8); @@ -496,7 +491,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Selects a specific register /// - /// private void SelectRegister(int value) { var v = (byte)((byte)value & 0x1F); @@ -509,8 +503,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to read from the currently selected register /// - /// - /// private bool ReadRegister(ref int data) { switch ((int)ChipType) @@ -527,8 +519,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to write to the currently selected register /// - /// - /// private void WriteRegister(int data) { switch ((int)ChipType) @@ -544,8 +534,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to read from the internal status register (if present) /// - /// - /// private bool ReadStatus(ref int data) { switch ((int)ChipType) @@ -756,8 +744,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Read Register (HD6845S & UM6845) /// - /// - /// private bool ReadRegister_Type0(ref int data) { // Type 0 - write only register returns 0 when it is read from @@ -805,8 +791,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Read Register (UM6845R) /// - /// - /// private bool ReadRegister_Type1(ref int data) { // Type 1 - write only register returns 0 when it is read from @@ -865,8 +849,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Read Register (MC6845) /// - /// - /// private bool ReadRegister_Type2(ref int data) { switch (AddressRegister) @@ -916,8 +898,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Read Register (AMS40489 & pre-ASIC) /// - /// - /// private bool ReadRegister_Type3_4(ref int data) { // unsure of the register sizes at the moment @@ -984,7 +964,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Write Active Register (HD6845S & UM6845) /// - /// private void WriteRegister_Type0(int data) { byte v = (byte)data; @@ -1022,7 +1001,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Write Active Register (HD6845S & UM6845) /// - /// private void WriteRegister_Type1(int data) { byte v = (byte)data; @@ -1062,7 +1040,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Write Active Register (MC6845) /// - /// private void WriteRegister_Type2(int data) { byte v = (byte)data; @@ -1102,7 +1079,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Write Active Register (MC6845) /// - /// private void WriteRegister_Type3_4(int data) { // unsure of the register sizes at the moment @@ -1132,8 +1108,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Read Status Register (UM6845R) /// This is fully implemented /// - /// - /// private bool ReadStatus_Type1(ref int data) { // Bit6: Set when latched LPEN strobe input is received / Reset when R17 or R16 is read from @@ -1147,8 +1121,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Status Register is unavailable but attempts to read will return the currently /// selected register data instead /// - /// - /// private bool ReadStatus_Type3_4(ref int data) { return ReadRegister(ref data); @@ -1158,8 +1130,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Read Status Register (HD6845S & UM6845) /// No status register available /// - /// - /// private bool ReadStatus_Unavailable(ref int data) { return false; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs index b9d83a4723..c1bc6b89a2 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs @@ -306,8 +306,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Adds a single scanline character into the matrix /// - /// - /// public void AddScanlineCharacter(int index, RenderPhase phase, byte vid1, byte vid2, int[] pens) { if (index >= 64) @@ -332,8 +330,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Adds a HSYNC, VSYNC or HSYNC+VSYNC character into the scanline /// - /// - /// private void AddSyncValue(int charIndex, RenderPhase phase) { Characters[charIndex].Phase = phase; @@ -343,8 +339,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Adds a border character into the scanline /// - /// - /// private void AddBorderValue(int charIndex, int colourValue) { Characters[charIndex].Phase = RenderPhase.BORDER; @@ -377,9 +371,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Adds a display character into the scanline /// Pixel matrix is calculated based on the current ScreenMode /// - /// - /// - /// public void AddDisplayValue(int charIndex, byte vid1, byte vid2, int[] pens) { Characters[charIndex].Phase = RenderPhase.DISPLAY; @@ -521,7 +512,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns the number of pixels decoded in this scanline (border and display) /// - /// private int GetPixelCount() { int cnt = 0; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs index 74e1b06d09..993943a333 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs @@ -102,7 +102,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads the currently selected line /// - /// public byte ReadCurrentLine() { var lin = _currentLine; // - 0x40; @@ -118,8 +117,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns the index of the key within the matrix /// - /// - /// public int GetKeyIndexFromMatrix(string key) { int index = Array.IndexOf(KeyboardMatrix, key); @@ -129,8 +126,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets key status /// - /// - /// public void SetKeyStatus(string key, bool isPressed) { int index = GetKeyIndexFromMatrix(key); @@ -140,8 +135,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Gets a key's status /// - /// - /// public bool GetKeyStatus(string key) { int index = GetKeyIndexFromMatrix(key); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs index 0f6599c4dd..1e7822e773 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs @@ -154,7 +154,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Writes to the control register /// - /// private void OUTControl(int data) { if (data.Bit(7)) @@ -214,7 +213,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads from Port A /// - /// private int INPortA() { if (DirPortA == PortDirection.Input) @@ -233,7 +231,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads from Port B /// - /// private int INPortB() { if (DirPortB == PortDirection.Input) @@ -279,7 +276,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads from Port C /// - /// private int INPortC() { // get the PortC value @@ -349,9 +345,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { byte portUpper = (byte)(port >> 8); @@ -396,9 +389,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { byte portUpper = (byte)(port >> 8); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs index a1ee410cfb..34057aa8c6 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs @@ -186,7 +186,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads the value from the currently selected register /// - /// public int PortRead() { if (ActiveFunction == 1) @@ -215,7 +214,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Writes to the currently selected register /// - /// public void PortWrite(int value) { switch (ActiveFunction) @@ -363,7 +361,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Updates the audiobuffer based on the current frame t-state /// - /// public void UpdateSound(int frameCycle) { BufferUpdate(frameCycle); @@ -613,8 +610,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Initializes timing information for the frame /// - /// - /// private void InitTiming(int sampleRate, int frameTactCount) { _sampleRate = sampleRate; @@ -636,7 +631,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Updates the audiobuffer based on the current frame t-state /// - /// private void BufferUpdate(int cycle) { if (cycle > _tStatesPerFrame) @@ -822,7 +816,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// State serialization /// - /// public void SyncState(Serializer ser) { ser.BeginSection("PSG-AY"); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs index cd2732bb21..e655305d41 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs @@ -82,8 +82,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Takes an int 0-100 and returns the relevant short volume to output /// - /// - /// private int VolumeConverterIn(int vol) { int maxLimit = short.MaxValue / 3; @@ -95,8 +93,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Takes an short volume and returns the relevant int value 0-100 /// - /// - /// private int VolumeConverterOut(int shortvol) { int maxLimit = short.MaxValue / 3; @@ -134,7 +130,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Processes an incoming pulse value and adds it to the blipbuffer /// - /// public void ProcessPulseValue(bool pulse) { if (!_machine._renderSound) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs index d2b069b5a0..6ba6df3e80 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs @@ -16,8 +16,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates reading from the bus /// ROM paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -61,8 +59,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates writing to the bus /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -96,8 +92,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads a byte of data from a specified memory address /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -108,8 +102,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -119,8 +111,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData[] romData) { foreach (var r in romData) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs index d51f167e5e..73f6e99746 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs @@ -16,8 +16,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); @@ -58,8 +56,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Writes a byte of data to a specified port address /// Because of the port decoding, multiple devices can be written to /// - /// - /// public override void WritePort(ushort port, byte value) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs index 930efa8fcd..e1f1f57511 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Main constructor /// - /// - /// public CPC464(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) { CPC = cpc; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs index 80e52351ac..0f89faff43 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs @@ -16,8 +16,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates reading from the bus /// ROM and RAM paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -127,8 +125,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates writing to the bus /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -211,8 +207,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads a byte of data from a specified memory address /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -223,8 +217,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -234,8 +226,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData[] romData) { foreach (var r in romData) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs index 089bab38b8..86c2fb5536 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs @@ -17,8 +17,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); @@ -72,8 +70,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Writes a byte of data to a specified port address /// Because of the port decoding, multiple devices can be written to /// - /// - /// public override void WritePort(ushort port, byte value) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs index c0aae0bf36..d14333524d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Main constructor /// - /// - /// public CPC6128(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) { CPC = cpc; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs index af001c4957..0c3d98f48a 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs @@ -105,7 +105,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Called on first instantiation (and subsequent core reboots) /// - /// protected void InitializeMedia(List files) { mediaImages = files; @@ -227,7 +226,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Identifies and sorts the various media types /// - /// private CPCMediaType IdentifyMedia(byte[] data) { // get first 16 bytes as a string diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs index fca9c18f31..ccfdf22ccc 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs @@ -71,15 +71,11 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates reading from the bus /// Paging should be handled here /// - /// - /// public abstract byte ReadBus(ushort addr); /// /// Pushes a value onto the data bus that should be valid as long as the interrupt is true /// - /// - /// public virtual byte PushBus() { return 0xFF; @@ -89,38 +85,29 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Simulates writing to the bus /// Paging should be handled here /// - /// - /// public abstract void WriteBus(ushort addr, byte value); /// /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public abstract byte ReadMemory(ushort addr); /// /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public abstract void WriteMemory(ushort addr, byte value); /// /// Sets up the ROM /// - /// public abstract void InitROM(RomData[] romData); /// /// ULA reads the memory at the specified address /// (No memory contention) /// - /// - /// public virtual byte FetchScreenMemory(ushort addr) { int divisor = addr / 0x4000; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs index ccc61b9165..4cee77f59f 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs @@ -14,15 +14,11 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads a byte of data from a specified port address /// - /// - /// public abstract byte ReadPort(ushort port); /// /// Writes a byte of data to a specified port address /// - /// - /// public abstract void WritePort(ushort port, byte value); /// @@ -31,8 +27,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary /// - /// - /// protected virtual PortDevice DecodeINPort(ushort port) { PortDevice dev = PortDevice.Unknown; @@ -67,8 +61,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary /// - /// - /// protected virtual List DecodeOUTPort(ushort port) { List devs = new List(); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs index cfe9fedf05..31fd0a3573 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs @@ -276,7 +276,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Selects the pen /// - /// public virtual void SetPen(BitArray bi) { if (bi[4]) @@ -296,7 +295,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Selects colour for the currently selected pen /// - /// public virtual void SetPenColour(BitArray bi) { byte[] b = new byte[1]; @@ -308,8 +306,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns the actual ARGB pen colour value /// - /// - /// public virtual int GetPenColour(int idx) { return CPCHardwarePalette[PenColours[idx]]; @@ -318,7 +314,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Screen mode and ROM config /// - /// public virtual void SetReg2(BitArray bi) { byte[] b = new byte[1]; @@ -361,7 +356,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Only available on machines with a 64KB memory expansion /// Default assume we dont have this /// - /// public virtual void SetRAM(BitArray bi) { return; @@ -397,9 +391,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { // gate array is OUT only @@ -409,9 +400,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { BitArray portBits = new BitArray(BitConverter.GetBytes(port)); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs index 34be938128..c83bf7d840 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -149,9 +148,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Takes a double-sided disk byte array and converts into 2 single-sided arrays /// - /// - /// - /// public static bool SplitDoubleSided(byte[] data, List results) { // look for standard magic string @@ -231,7 +227,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs index f1f875b95f..54ac222dae 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -154,9 +153,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Takes a double-sided disk byte array and converts into 2 single-sided arrays /// - /// - /// - /// public static bool SplitDoubleSided(byte[] data, List results) { // look for standard magic string @@ -218,7 +214,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs index 4524076517..c8145e910b 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs @@ -88,7 +88,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -183,7 +182,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Detection routine for shadow of the beast game /// Still cannot get this to work, but at least the game is detected /// - /// public bool DetectShadowOfTheBeast() { if (DiskTracks[0].Sectors.Length != 9) @@ -222,8 +220,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Detect speedlock weak sector /// - /// - /// public bool DetectSpeedlock(ref int[] weak) { // SPEEDLOCK NOTES (-asni 2018-05-01) @@ -287,8 +283,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Detect Alkatraz /// - /// - /// public bool DetectAlkatraz(ref int[] weak) { try @@ -330,8 +324,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Detect Paul Owens /// - /// - /// public bool DetectPaulOwens(ref int[] weak) { try @@ -368,8 +360,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Detect Hexagon copy protection /// - /// - /// public bool DetectHexagon(ref int[] weak) { try @@ -417,7 +407,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Should be run at the end of the ParseDisk process /// If speedlock is detected the flag is set in the disk image /// - /// protected virtual void SpeedlockDetection() { @@ -515,7 +504,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns the track count for the disk /// - /// public virtual int GetTrackCount() { return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; @@ -524,8 +512,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Reads the current sector ID info /// - /// - /// public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) { if (side != 0) @@ -578,7 +564,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// State serialization routines /// - /// public abstract void SyncState(Serializer ser); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs index 3859f20479..435b067a90 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs @@ -39,7 +39,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Serialization method /// - /// public virtual void Read(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -49,7 +48,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// DeSerialization method /// - /// public virtual void Write(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -59,7 +57,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Serializer does a quick check, returns TRUE if file is detected as this type /// - /// public virtual bool CheckType(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -71,8 +68,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Converts an int32 value into a byte array /// - /// - /// public static byte[] GetBytes(int value) { byte[] buf = new byte[4]; @@ -86,9 +81,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns an int32 from a byte array based on offset /// - /// - /// - /// public static int GetInt32(byte[] buf, int offsetIndex) { return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; @@ -97,9 +89,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns an uint16 from a byte array based on offset /// - /// - /// - /// public static ushort GetWordValue(byte[] buf, int offsetIndex) { return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); @@ -108,9 +97,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Updates a byte array with a uint16 value based on offset /// - /// - /// - /// public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) { buf[offsetIndex] = (byte)value; @@ -120,8 +106,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Takes a PauseInMilliseconds value and returns the value in T-States /// - /// - /// public static int TranslatePause(int pauseInMS) { // t-states per millisecond @@ -135,8 +119,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Decompresses a byte array that is Z-RLE compressed /// - /// - /// public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) { MemoryStream stream = new MemoryStream(); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs index 3361d96126..44cee4a43a 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs @@ -63,8 +63,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// However all timings are based on spectrum timings (3.5Mhz) /// so need to be adjusted for the CPC (4Mhz) /// - /// - /// private TapeDataBlock ConvertClock(TapeDataBlock db) { TapeDataBlock tb = new TapeDataBlock(); @@ -110,7 +108,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Returns TRUE if tzx header is detected /// - /// public override bool CheckType(byte[] data) { /* @@ -147,7 +144,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// DeSerialization method /// - /// public override void Read(byte[] data) { // clear existing tape blocks @@ -207,8 +203,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Processes a TZX block /// - /// - /// private void ProcessBlock(byte[] data, int id) { // process based on detected block ID @@ -1674,9 +1668,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Used to process either a standard or turbo data block /// - /// - /// - /// private TapeDataBlock DecodeDataBlock ( TapeDataBlock block, @@ -1900,9 +1891,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Used to process either a standard or turbo data block /// - /// - /// - /// private TapeDataBlock DecodeDataBlock ( TapeDataBlock block, @@ -1957,7 +1945,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// If neccessary a seperate PAUSE block will be created /// - /// private void CreatePauseBlock(TapeDataBlock original) { if (original.PauseInMS > 0) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs index 8b0f9fafbc..56ab7163c1 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs @@ -88,8 +88,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Adds a single metadata item to the Dictionary /// - /// - /// public void AddMetaData(BlockDescriptorTitle descriptor, string data) { // check whether entry already exists @@ -143,7 +141,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Returns the data periods as an array /// (primarily to aid in bizhawk state serialization) /// - /// public int[] GetDataPeriodsArray() { return DataPeriods.ToArray(); @@ -153,7 +150,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Accepts an array of data periods and updates the DataPeriods list accordingly /// (primarily to aid in bizhawk state serialization) /// - /// public void SetDataPeriodsArray(int[] periodArray) { DataPeriods = new List(); @@ -167,7 +163,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Bizhawk state serialization /// - /// public void SyncState(Serializer ser, int blockPosition) { ser.BeginSection("DataBlock" + blockPosition); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs index cb37bbb177..9520f50323 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs @@ -35,11 +35,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// Initialise a RomData object /// - /// - /// - /// - /// - /// public static RomData InitROM(MachineType machineType, byte[] rom, ROMChipType type, int romPosition = 0) { RomData RD = new RomData(); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs index 3988706911..3b8ec3b0a6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs @@ -10,20 +10,16 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Initialisation /// - /// - /// void Init(int sampleRate, int tStatesPerFrame); /// /// Processes an incoming pulse value and adds it to the blipbuffer /// - /// void ProcessPulseValue(bool pulse); /// /// State serialization /// - /// void SyncState(Serializer ser); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs index a62c6fe567..3bbc0c81d8 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs @@ -14,7 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Parses a new disk image and loads it into this floppy drive /// - /// void FDD_LoadDisk(byte[] diskData); /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs index b971e3c412..6e29e02012 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs @@ -24,15 +24,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// void SetJoyInput(string key, bool isPressed); /// /// Gets the state of a particular joystick binding /// - /// - /// bool GetJoyInput(string key); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs index 278d39b6fd..085792d874 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs @@ -43,36 +43,26 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the spectrum key status /// - /// - /// void SetKeyStatus(string key, bool isPressed); /// /// Gets the status of a spectrum key /// - /// - /// bool GetKeyStatus(string key); /// /// Returns the query byte /// - /// - /// byte GetLineStatus(byte lines); /// /// Reads a keyboard byte /// - /// - /// byte ReadKeyboardByte(ushort addr); /// /// Looks up a key in the keyboard matrix and returns the relevent byte value /// - /// - /// byte GetByteFromKeyMatrix(string key); void SyncState(Serializer ser); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs index 0d54d6a97c..4f1523e70e 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Initlization routine /// - /// - /// void Init(int sampleRate, int tStatesPerFrame); /// @@ -25,7 +23,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes to the PSG /// - /// void PortWrite(int value); /// @@ -57,13 +54,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Updates the sound based on number of frame cycles /// - /// void UpdateSound(int frameCycle); /// /// IStatable serialization /// - /// void SyncState(Serializer ser); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs index 4a30e5eaa6..2ca7909fbd 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs @@ -9,17 +9,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an IN instruction /// - /// - /// - /// bool ReadPort(ushort port, ref int result); /// /// Device responds to an OUT instruction /// - /// - /// - /// bool WritePort(ushort port, int result); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs index e18c3ae68e..7b33813ba9 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs @@ -30,7 +30,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Initializes the datacorder device /// - /// public void Init(SpectrumBase machine) { _machine = machine; @@ -263,7 +262,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// TRUE: skip forward /// FALSE: skip backward /// - /// public void SkipBlock(bool skipForward) { int blockCount = _dataBlocks.Count; @@ -318,7 +316,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Inserts a new tape and sets up the tape device accordingly /// - /// public void LoadTape(byte[] tapeData) { // instantiate converters @@ -463,8 +460,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Simulates the spectrum 'EAR' input reading data from the tape /// - /// - /// public bool GetEarBit(long cpuCycle) { // decide how many cycles worth of data we are capturing @@ -929,9 +924,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { if (TapeIsPlaying) @@ -961,9 +953,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { if (!TapeIsPlaying) @@ -981,7 +970,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Bizhawk state serialization /// - /// public void SyncState(Serializer ser) { ser.BeginSection(nameof(DatacorderDevice)); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs index b06daddf3c..54a2dab8a4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs @@ -2413,7 +2413,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Handles CPU reading from the data register /// - /// private byte ReadDataRegister() { // default return value @@ -2478,7 +2477,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Handles CPU writing to the data register /// - /// private void WriteDataRegister(byte data) { if (!GetBit(MSR_RQM, StatusMain) || GetBit(MSR_DIO, StatusMain)) @@ -2530,9 +2528,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Returns TRUE if successful. FALSE if otherwise /// Called only in idle phase /// - /// - /// - /// private bool ParseCommandByte(byte cmdByte) { // clear counters @@ -2625,7 +2620,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Parses the first 5 command argument bytes that are of the standard format /// - /// private void ParseParamByteStandard(int index) { byte currByte = CommBuffer[index]; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDD.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDD.cs index f96ae1938f..e639f6f604 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDD.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDD.cs @@ -69,7 +69,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Searches for the requested sector /// - /// private FloppyDisk.Sector GetSector() { FloppyDisk.Sector sector = null; @@ -155,7 +154,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Parses a new disk image and loads it into this floppy drive /// - /// public void FDD_LoadDisk(byte[] diskData) { // we are only going to load into the first drive @@ -335,8 +333,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Moves the head across the disk cylinders /// - /// - /// public void MoveHead(SkipDirection direction, int cylinderCount) { // get total tracks @@ -378,10 +374,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Finds a supplied sector /// - /// - /// - /// - /// public FloppyDisk.Sector FindSector(ref byte[] resBuffer, CommandParameters prms) { int index =CurrentSector; @@ -449,8 +441,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Populates a result buffer /// - /// - /// public void FillResult(ref byte[] resBuffer, CHRN chrn) { // clear results @@ -480,7 +470,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Populates the result buffer with ReadID data /// - /// public void ReadID(ref byte[] resBuffer) { if (CheckDriveStatus() == false) @@ -797,7 +786,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Parses a new disk image and loads it into this floppy drive /// - /// public void FDD_LoadDisk(byte[] diskData) { // try dsk first diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.IPortIODevice.cs index 3c53007c0b..7964653bab 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.IPortIODevice.cs @@ -74,9 +74,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int data) { BitArray bits = new BitArray(new byte[] { (byte)data }); @@ -117,9 +114,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int data) { BitArray bits = new BitArray(new byte[] { (byte)data }); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Timing.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Timing.cs index ee4224e8a9..2ef6f4080d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Timing.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.Timing.cs @@ -96,7 +96,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Returns true if there is no delay /// Returns false if read is to be deferred /// - /// private bool CheckTiming() { // get delta diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs index d0c2c5ad20..c4b8d755a4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs @@ -30,7 +30,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// public NECUPD765() { InitCommandList(); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPS765.Static.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPS765.Static.cs index 7788bca84c..276bd41ccd 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPS765.Static.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPS765.Static.cs @@ -18,9 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the specified bit value from supplied byte /// - /// - /// - /// public static bool GetBit(int bitNumber, byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -34,8 +31,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the specified bit of the supplied byte to 1 /// - /// - /// public static void SetBit(int bitNumber, ref byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -51,8 +46,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the specified bit of the supplied byte to 0 /// - /// - /// public static void UnSetBit(int bitNumber, ref byte dataByte) { if (bitNumber < 0 || bitNumber > 7) @@ -68,8 +61,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns a drive number (0-3) based on the first two bits of the supplied byte /// - /// - /// public static int GetUnitSelect(byte dataByte) { int driveNumber = dataByte & 0x03; @@ -79,8 +70,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the first two bits of a byte based on the supplied drive number (0-3) /// - /// - /// public static void SetUnitSelect(int driveNumber, ref byte dataByte) { switch (driveNumber) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs index 68606406ad..45e19d65e0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs @@ -57,8 +57,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// public void SetJoyInput(string key, bool isPressed) { var pos = GetBitPos(key); @@ -84,8 +82,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the state of a particular joystick binding /// - /// - /// public bool GetJoyInput(string key) { var pos = GetBitPos(key); @@ -101,8 +97,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the bit position of a particular joystick binding from the matrix /// - /// - /// public int GetBitPos(string key) { int index = Array.IndexOf(ButtonCollection, key); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs index 87cf5f491d..733d33e6b1 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs @@ -44,8 +44,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// public void SetJoyInput(string key, bool isPressed) { var pos = GetBitPos(key); @@ -58,8 +56,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the state of a particular joystick binding /// - /// - /// public bool GetJoyInput(string key) { var pos = GetBitPos(key); @@ -81,8 +77,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the bit position of a particular joystick binding from the matrix /// - /// - /// public int GetBitPos(string key) { int index = Array.IndexOf(ButtonCollection, key); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs index 850b371054..ac4fd96c55 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs @@ -43,8 +43,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// public void SetJoyInput(string key, bool isPressed) { var pos = GetBitPos(key); @@ -57,8 +55,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the state of a particular joystick binding /// - /// - /// public bool GetJoyInput(string key) { var pos = GetBitPos(key); @@ -80,8 +76,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the bit position of a particular joystick binding from the matrix /// - /// - /// public int GetBitPos(string key) { int index = Array.IndexOf(ButtonCollection, key); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs index 1b5cc0b779..f96c125153 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs @@ -57,8 +57,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// public void SetJoyInput(string key, bool isPressed) { var pos = GetBitPos(key); @@ -84,8 +82,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the state of a particular joystick binding /// - /// - /// public bool GetJoyInput(string key) { var pos = GetBitPos(key); @@ -100,8 +96,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the bit position of a particular joystick binding from the matrix /// - /// - /// public int GetBitPos(string key) { int index = Array.IndexOf(ButtonCollection, key); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs index 4c391b41a8..59c1922372 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs @@ -57,8 +57,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets the joystick line based on key pressed /// - /// - /// public void SetJoyInput(string key, bool isPressed) { var pos = GetBitPos(key); @@ -84,8 +82,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the state of a particular joystick binding /// - /// - /// public bool GetJoyInput(string key) { var pos = GetBitPos(key); @@ -100,8 +96,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Gets the bit position of a particular joystick binding from the matrix /// - /// - /// public int GetBitPos(string key) { int index = Array.IndexOf(ButtonCollection, key); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs index 36a55e3d29..012b4207a4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs @@ -188,9 +188,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an IN instruction /// - /// - /// - /// public bool ReadPort(ushort port, ref int result) { /* @@ -264,9 +261,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Device responds to an OUT instruction /// - /// - /// - /// public bool WritePort(ushort port, int result) { // not implemented diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs index e249d0c02a..5f3e12d0ae 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs @@ -170,7 +170,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Used for snapshot generation /// - /// public int[] ExportRegisters() { return _registers; @@ -223,7 +222,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads the value from the currently selected register /// - /// public int PortRead() { return _registers[_activeRegister]; @@ -232,7 +230,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes to the currently selected register /// - /// public void PortWrite(int value) { if (_activeRegister >= 0x10) @@ -347,7 +344,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Updates the audiobuffer based on the current frame t-state /// - /// public void UpdateSound(int frameCycle) { BufferUpdate(frameCycle); @@ -595,8 +591,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Initializes timing information for the frame /// - /// - /// private void InitTiming(int sampleRate, int frameTactCount) { _sampleRate = sampleRate; @@ -620,7 +614,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Updates the audiobuffer based on the current frame t-state /// - /// private void BufferUpdate(int cycle) { if (cycle > _tStatesPerFrame) @@ -763,7 +756,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serialization /// - /// public void SyncState(Serializer ser) { ser.BeginSection("PSG-AY"); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs index b18ad12a2c..922bea1d84 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs @@ -103,7 +103,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Looks up the current BUSRQ address that is about to be signalled on the upcoming cycle /// - /// private ushort AscertainBUSRQAddress() { ushort addr = 0; @@ -172,7 +171,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Running every cycle, this determines whether the upcoming BUSRQ is for an IO operation /// Also processes any contention /// - /// private bool CheckIO() { bool isIO = false; @@ -245,8 +243,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Returns TRUE if the supplied T-cycle within an IO operation has the possibility of being contended /// This can be different based on the emulated ZX Spectrum model /// - /// - /// private bool IsIOCycleContended(int T) { bool lowBitSet = (lastPortAddr & 0x0001) != 0; @@ -384,7 +380,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Called when the first byte of an instruction is fetched /// - /// public void OnExecFetch(ushort firstByte) { // fetch instruction without incrementing pc diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Memory.cs index dba9be0182..327e90619b 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Memory.cs @@ -41,8 +41,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -111,8 +109,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -181,8 +177,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -192,8 +186,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var result = new ZXSpectrum.CDLResult(); @@ -262,8 +254,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -272,7 +262,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public override bool IsContended(ushort addr) { var a = addr & 0xc000; @@ -302,7 +291,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if there is a contended bank paged in /// - /// public override bool ContendedBankPaged() { switch (RAMPaged) @@ -322,8 +310,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// (No memory contention) /// Will read RAM5 (screen0) by default, unless RAM7 (screen1) is selected as output /// - /// - /// public override byte FetchScreenMemory(ushort addr) { byte value = new byte(); @@ -347,8 +333,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs index d4507749ff..15fdfd9b04 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Port.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { bool deviceAddressed = true; @@ -79,8 +77,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a byte of data to a specified port address /// - /// - /// public override void WritePort(ushort port, byte value) { // get a BitArray of the port diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs index c46e265ccf..c8f201157e 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public Pentagon128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs index 18345b0077..08076cb8dc 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs @@ -279,7 +279,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Instantiates the joysticks array /// - /// protected void InitJoysticks(List joys) { List jCollection = new List(); @@ -300,9 +299,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Instantiates a new IJoystick object /// - /// - /// - /// public IJoystick InstantiateJoystick(JoystickType type, int playerNumber) { switch (type) @@ -325,8 +321,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns a IJoystick object depending on the type (or null if not found) /// - /// - /// protected IJoystick LocateUniqueJoystick(JoystickType type) { return JoystickCollection.Where(a => a.JoyType == type).FirstOrDefault(); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs index 46d6a62de2..4ed3a2a499 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs @@ -115,7 +115,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Called on first instantiation (and subsequent core reboots) /// - /// protected void InitializeMedia(List files) { mediaImages = files; @@ -240,7 +239,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Identifies and sorts the various media types /// - /// private SpectrumMediaType IdentifyMedia(byte[] data) { // get first 16 bytes as a string diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs index 475c0cd6bd..ea43ab75f5 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs @@ -96,15 +96,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus /// Paging should be handled here /// - /// - /// public abstract byte ReadBus(ushort addr); /// /// Pushes a value onto the data bus that should be valid as long as the interrupt is true /// - /// - /// public virtual byte PushBus() { return 0xFF; @@ -114,8 +110,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus /// Paging should be handled here /// - /// - /// public virtual void WriteBus(ushort addr, byte value) { throw new NotImplementedException("Must be overriden"); @@ -125,37 +119,28 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public abstract byte ReadMemory(ushort addr); /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public abstract ZXSpectrum.CDLResult ReadCDL(ushort addr); /// /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public abstract void WriteMemory(ushort addr, byte value); /// /// Sets up the ROM /// - /// public abstract void InitROM(RomData romData); /// /// ULA reads the memory at the specified address /// (No memory contention) /// - /// - /// public virtual byte FetchScreenMemory(ushort addr) { var value = ReadBus((ushort)((addr & 0x3FFF) + 0x4000)); @@ -166,14 +151,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public abstract bool IsContended(ushort addr); /// /// Returns TRUE if there is a contended bank paged in /// - /// public abstract bool ContendedBankPaged(); #endregion @@ -183,7 +166,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detects whether this is a 48k machine (or a 128k in 48k mode) /// - /// public virtual bool IsIn48kMode() { if (this.GetType() == typeof(ZX48) || @@ -201,7 +183,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Used to auto start/stop the tape device when appropriate /// * This isnt really used anymore for tape trap detection * /// - /// public virtual void TestForTapeTraps(int addr) { if (TapeDevice.TapeIsPlaying) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs index 3f5cb5a477..ec3f4b9dce 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs @@ -24,15 +24,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public abstract byte ReadPort(ushort port); /// /// Writes a byte of data to a specified port address /// - /// - /// public abstract void WritePort(ushort port, byte value); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs index 6ab1341a93..d9883a4321 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs @@ -137,7 +137,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Cycles the ULA clock /// Handles interrupt generation /// - /// public virtual void CycleClock(long totalCycles) { // render the screen @@ -306,7 +305,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Constructor /// - /// public RenderTable(ULA ula, MachineType machineType) { _ula = ula; @@ -318,7 +316,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Initializes the renderer /// - /// private void InitRenderer(MachineType machineType) { for (var t = 0; t < _ula.FrameCycleLength; t++) @@ -549,7 +546,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Renders to the screen buffer based on the current cycle /// - /// public void RenderScreen(int toCycle) { // check boundaries @@ -690,8 +686,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns floating bus value (if available) /// - /// - /// public void ReadFloatingBus(int tstate, ref int result, ushort port) { tstate += FloatingBusOffset; @@ -773,7 +767,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the contention value for the current t-state /// - /// public int GetContentionValue() { return GetContentionValue((int)_machine.CurrentFrameCycle); @@ -782,7 +775,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the contention value for the supplied t-state /// - /// public int GetContentionValue(int tstate) { if (tstate >= FrameCycleLength) @@ -797,7 +789,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the contention value for the supplied t-state /// - /// public int GetPortContentionValue(int tstate) { if (tstate >= FrameCycleLength) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Memory.cs index 5824f782f9..8bb3a0b215 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Memory.cs @@ -41,8 +41,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -111,8 +109,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -181,8 +177,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -192,8 +186,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var result = new ZXSpectrum.CDLResult(); @@ -262,8 +254,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -272,7 +262,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public override bool IsContended(ushort addr) { var a = addr & 0xc000; @@ -302,7 +291,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if there is a contended bank paged in /// - /// public override bool ContendedBankPaged() { switch (RAMPaged) @@ -322,8 +310,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// (No memory contention) /// Will read RAM5 (screen0) by default, unless RAM7 (screen1) is selected as output /// - /// - /// public override byte FetchScreenMemory(ushort addr) { byte value = new byte(); @@ -347,8 +333,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs index c1839dcaf3..6c990fe182 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Port.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { bool deviceAddressed = true; @@ -79,8 +77,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a byte of data to a specified port address /// - /// - /// public override void WritePort(ushort port, byte value) { // get a BitArray of the port diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs index 2a3884c9b2..5388165142 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs index c5f833dfe4..d276e52bb1 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX128Plus2(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) : base(spectrum, cpu, borderType, files, joysticks) { diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Memory.cs index 52d002ddf1..da344caa71 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Memory.cs @@ -62,8 +62,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -207,8 +205,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -356,8 +352,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -373,8 +367,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var result = new ZXSpectrum.CDLResult(); @@ -518,8 +510,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { // update ULA screen buffer if necessary BEFORE T1 write @@ -551,7 +541,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public override bool IsContended(ushort addr) { var a = addr & 0xc000; @@ -581,7 +570,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if there is a contended bank paged in /// - /// public override bool ContendedBankPaged() { switch (RAMPaged) @@ -601,8 +589,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// (No memory contention) /// Will read RAM5 (screen0) by default, unless RAM7 (screen1) is selected as output /// - /// - /// public override byte FetchScreenMemory(ushort addr) { byte value = new byte(); @@ -626,8 +612,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs index 1e3af11048..1ef03898d7 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Port.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { bool deviceAddressed = true; @@ -60,8 +58,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a byte of data to a specified port address /// - /// - /// public override void WritePort(ushort port, byte value) { // get a BitArray of the port diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs index ffde2726f7..a05903b7e7 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX128Plus2a(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Memory.cs index cdb5af1444..3fb9cdb2e6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Memory.cs @@ -62,8 +62,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -207,8 +205,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -356,8 +352,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -373,8 +367,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var result = new ZXSpectrum.CDLResult(); @@ -518,8 +510,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { /* @@ -552,7 +542,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public override bool IsContended(ushort addr) { var a = addr & 0xc000; @@ -582,7 +571,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if there is a contended bank paged in /// - /// public override bool ContendedBankPaged() { switch (RAMPaged) @@ -602,8 +590,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// (No memory contention) /// Will read RAM5 (screen0) by default, unless RAM7 (screen1) is selected as output /// - /// - /// public override byte FetchScreenMemory(ushort addr) { byte value = new byte(); @@ -627,8 +613,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs index eb87580a99..35555bb076 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.Port.cs @@ -11,8 +11,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { bool deviceAddressed = true; @@ -64,8 +62,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a byte of data to a specified port address /// - /// - /// public override void WritePort(ushort port, byte value) { if (port == 0x7ffd) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs index 98576ab5a4..0b4a0a4610 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs @@ -14,8 +14,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX128Plus3(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs index 33b26800d1..ef4af265f2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs @@ -13,8 +13,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX16(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) : base(spectrum, cpu, borderType, files, joysticks) { @@ -44,8 +42,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -69,8 +65,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -94,8 +88,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -105,8 +97,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var res = new ZXSpectrum.CDLResult(); @@ -128,8 +118,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -138,8 +126,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Memory.cs index f14b35a003..b35cade838 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Memory.cs @@ -40,8 +40,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates reading from the bus (no contention) /// Paging should be handled here /// - /// - /// public override byte ReadBus(ushort addr) { int divisor = addr / 0x4000; @@ -65,8 +63,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Simulates writing to the bus (no contention) /// Paging should be handled here /// - /// - /// public override void WriteBus(ushort addr, byte value) { int divisor = addr / 0x4000; @@ -96,8 +92,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Reads a byte of data from a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override byte ReadMemory(ushort addr) { var data = ReadBus(addr); @@ -107,8 +101,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the ROM/RAM enum that relates to this particular memory read operation /// - /// - /// public override ZXSpectrum.CDLResult ReadCDL(ushort addr) { var res = new ZXSpectrum.CDLResult(); @@ -132,8 +124,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Writes a byte of data to a specified memory address /// (with memory contention if appropriate) /// - /// - /// public override void WriteMemory(ushort addr, byte value) { WriteBus(addr, value); @@ -142,7 +132,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether supplied address is in a potentially contended bank /// - /// public override bool IsContended(ushort addr) { if ((addr & 49152) == 16384) @@ -153,7 +142,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if there is a contended bank paged in /// - /// public override bool ContendedBankPaged() { return false; @@ -162,8 +150,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Sets up the ROM /// - /// - /// public override void InitROM(RomData romData) { RomData = romData; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs index 75aa48425b..d5a4c98831 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Port.cs @@ -9,8 +9,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads a byte of data from a specified port address /// - /// - /// public override byte ReadPort(ushort port) { int result = 0xFF; @@ -62,8 +60,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a byte of data to a specified port address /// - /// - /// public override void WritePort(ushort port, byte value) { // Check whether the low bit is reset diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs index caf5ee440f..5c235eb47d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs @@ -15,8 +15,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Main constructor /// - /// - /// public ZX48(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs index a52f1e3bbd..c0647b76e6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -160,9 +159,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Takes a double-sided disk byte array and converts into 2 single-sided arrays /// - /// - /// - /// public static bool SplitDoubleSided(byte[] data, List results) { // look for standard magic string @@ -242,7 +238,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs index 05d99a88d1..3851019be3 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -165,9 +164,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Takes a double-sided disk byte array and converts into 2 single-sided arrays /// - /// - /// - /// public static bool SplitDoubleSided(byte[] data, List results) { // look for standard magic string @@ -236,7 +232,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs index 656609fe19..63f709ab5b 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs @@ -88,7 +88,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -183,7 +182,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Detection routine for shadow of the beast game /// Still cannot get this to work, but at least the game is detected /// - /// public bool DetectShadowOfTheBeast() { if (DiskTracks[0].Sectors.Length != 9) @@ -222,8 +220,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detect speedlock weak sector /// - /// - /// public bool DetectSpeedlock(ref int[] weak) { // SPEEDLOCK NOTES (-asni 2018-05-01) @@ -287,8 +283,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detect Alkatraz /// - /// - /// public bool DetectAlkatraz(ref int[] weak) { try @@ -330,8 +324,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detect Paul Owens /// - /// - /// public bool DetectPaulOwens(ref int[] weak) { try @@ -368,8 +360,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detect Hexagon copy protection /// - /// - /// public bool DetectHexagon(ref int[] weak) { try @@ -417,7 +407,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Should be run at the end of the ParseDisk process /// If speedlock is detected the flag is set in the disk image /// - /// protected virtual void SpeedlockDetection() { @@ -515,7 +504,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns the track count for the disk /// - /// public virtual int GetTrackCount() { return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; @@ -524,8 +512,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Reads the current sector ID info /// - /// - /// public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) { if (side != 0) @@ -578,7 +564,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serialization routines /// - /// public abstract void SyncState(Serializer ser); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs index 4ebf4ea26b..c1560f3339 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -434,7 +433,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs index 00297c69b7..d38209f49b 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs @@ -18,7 +18,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Attempts to parse incoming disk data /// - /// /// /// TRUE: disk parsed /// FALSE: unable to parse disk @@ -77,9 +76,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Takes a double-sided disk byte array and converts into 2 single-sided arrays /// - /// - /// - /// public static bool SplitDoubleSided(byte[] data, List results) { // look for standard magic string @@ -190,7 +186,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// State serlialization /// - /// public override void SyncState(Serializer ser) { ser.BeginSection("Plus3FloppyDisk"); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs index 74ae9b5c57..1047d2fd1a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs @@ -41,7 +41,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Serialization method /// - /// public virtual void Read(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -51,7 +50,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public virtual void Write(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -61,7 +59,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Serializer does a quick check, returns TRUE if file is detected as this type /// - /// public virtual bool CheckType(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + @@ -73,8 +70,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Converts an int32 value into a byte array /// - /// - /// public static byte[] GetBytes(int value) { byte[] buf = new byte[4]; @@ -88,9 +83,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns an int32 from a byte array based on offset /// - /// - /// - /// public static int GetInt32(byte[] buf, int offsetIndex) { return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; @@ -99,9 +91,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns an int32 from a byte array based on offset (in BIG ENDIAN format) /// - /// - /// - /// public static int GetBEInt32(byte[] buf, int offsetIndex) { byte[] b = new byte[4]; @@ -114,8 +103,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns an int32 from a byte array based on the length of the byte array (in BIG ENDIAN format) /// - /// - /// public static int GetBEInt32FromByteArray(byte[] buf) { byte[] b = buf.Reverse().ToArray(); @@ -146,9 +133,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns an int32 from a byte array based on offset /// - /// - /// - /// public static uint GetUInt32(byte[] buf, int offsetIndex) { return (uint)(buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24); @@ -157,9 +141,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns an uint16 from a byte array based on offset /// - /// - /// - /// public static ushort GetWordValue(byte[] buf, int offsetIndex) { return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); @@ -168,9 +149,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Updates a byte array with a uint16 value based on offset /// - /// - /// - /// public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) { buf[offsetIndex] = (byte)value; @@ -180,8 +158,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Takes a PauseInMilliseconds value and returns the value in T-States /// - /// - /// public static int TranslatePause(int pauseInMS) { // t-states per millisecond @@ -195,8 +171,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Decompresses a byte array that is Z-RLE compressed /// - /// - /// public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) { MemoryStream stream = new MemoryStream(); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs index 0c812b9e0d..0f2c25dab0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs @@ -29,8 +29,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Exports state information to a byte array in ZX-State format /// - /// - /// public static byte[] ExportSZX(SpectrumBase machine) { var s = new SZX(machine); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs index 8f0ae34787..0506b1e232 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs @@ -53,7 +53,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if pzx header is detected /// - /// public override bool CheckType(byte[] data) { // CSW Header @@ -80,7 +79,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public override void Read(byte[] data) { // clear existing tape blocks @@ -242,11 +240,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Processes a CSW v2 data block /// - /// - /// - /// - /// - /// public static void ProcessCSWV2( byte[] srcBuff, ref byte[] destBuff, diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs index ed35aadf55..d8eb9e1f07 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs @@ -63,7 +63,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if pzx header is detected /// - /// public override bool CheckType(byte[] data) { // PZX Header @@ -90,7 +89,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public override void Read(byte[] data) { // clear existing tape blocks diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs index a9ab6a895a..ea2cc70f5d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs @@ -101,7 +101,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public override void Read(byte[] data) { /* diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs index 1eca78ec5a..f9bfee53e4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs @@ -61,7 +61,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if tzx header is detected /// - /// public override bool CheckType(byte[] data) { /* @@ -98,7 +97,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public override void Read(byte[] data) { // clear existing tape blocks @@ -147,8 +145,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Processes a TZX block /// - /// - /// private void ProcessBlock(byte[] data, int id) { // process based on detected block ID @@ -1614,9 +1610,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Used to process either a standard or turbo data block /// - /// - /// - /// private TapeDataBlock DecodeDataBlock ( TapeDataBlock block, @@ -1839,9 +1832,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Used to process either a standard or turbo data block /// - /// - /// - /// private TapeDataBlock DecodeDataBlock ( TapeDataBlock block, @@ -1892,7 +1882,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// If neccessary a seperate PAUSE block will be created /// - /// private void CreatePauseBlock(TapeDataBlock original) { if (original.PauseInMS > 0) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs index ee82000d46..d60267bf76 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs @@ -89,8 +89,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Adds a single metadata item to the Dictionary /// - /// - /// public void AddMetaData(BlockDescriptorTitle descriptor, string data) { // check whether entry already exists @@ -144,7 +142,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Returns the data periods as an array /// (primarily to aid in bizhawk state serialization) /// - /// public int[] GetDataPeriodsArray() { return DataPeriods.ToArray(); @@ -154,7 +151,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Accepts an array of data periods and updates the DataPeriods list accordingly /// (primarily to aid in bizhawk state serialization) /// - /// public void SetDataPeriodsArray(int[] periodArray) { DataPeriods = new List(); @@ -168,7 +164,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Bizhawk state serialization /// - /// public void SyncState(Serializer ser, int blockPosition) { ser.BeginSection("DataBlock" + blockPosition); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs index 030900e3c1..410155a2fa 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs @@ -53,7 +53,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns TRUE if pzx header is detected /// - /// public override bool CheckType(byte[] data) { // WAV Header @@ -75,7 +74,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// DeSerialization method /// - /// public override void Read(byte[] data) { // clear existing tape blocks diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs index e03bbc5258..e6274bafb3 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs @@ -246,8 +246,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Detailed info to be displayed within the settings UIs /// - /// - /// public static ZXMachineMetaData GetMetaObject(MachineType type) { ZXMachineMetaData m = new ZXMachineMetaData(); @@ -354,8 +352,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Returns machine metadata as a formatted string (to be displayed in a textbox) /// - /// - /// public static string GetMetaString(MachineType type) { var m = GetMetaObject(type); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Messaging.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Messaging.cs index 4a3a20d6ca..777ce22db4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Messaging.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Messaging.cs @@ -13,8 +13,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Writes a message to the OSD /// - /// - /// public void SendMessage(string message, MessageCategory category) { if (!CheckMessageSettings(category)) @@ -51,7 +49,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Called when certain input presses are detected /// - /// public void OSD_FireInputMessage(string input) { StringBuilder sb = new StringBuilder(); @@ -438,8 +435,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Checks whether message category is allowed to be sent /// - /// - /// public bool CheckMessageSettings(MessageCategory category) { switch (Settings.OSDMessageVerbosity) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs index 21fd979f96..777269e51e 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs @@ -13,8 +13,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Helper method that returns a single INT32 from a BitArray /// - /// - /// public static int GetIntFromBitArray(BitArray bitArray) { if (bitArray.Length > 32) @@ -28,8 +26,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// POKEs a memory bus address /// - /// - /// public void PokeMemory(ushort addr, byte value) { _machine.WriteBus(addr, value); @@ -38,7 +34,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Called by MainForm so that the core label can display a more detailed tooltip about the emulated spectrum model /// - /// public string GetMachineType() { string m = ""; @@ -74,7 +69,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Called by MainForm - dumps a close approximation of the Spectaculator SZX snapshot format /// DEV use only - this is nowhere near accurate /// - /// public byte[] GetSZXSnapshot() { return SZX.ExportSZX(_machine); @@ -83,10 +77,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Utility method to get MemberName from an object /// - /// - /// - /// - /// public static string GetMemberName(Expression> memberAccess) { return ((MemberExpression)memberAccess.Body).Member.Name; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibVBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibVBANext.cs index 2ca23cd040..ca1e532cad 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibVBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibVBANext.cs @@ -63,25 +63,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA /// /// create a new context /// - /// [DllImport(dllname, CallingConvention = cc)] public static extern IntPtr Create(); /// /// destroy a context /// - /// [DllImport(dllname, CallingConvention = cc)] public static extern void Destroy(IntPtr g); /// /// load a rom /// - /// - /// - /// - /// - /// /// success [DllImport(dllname, CallingConvention = cc)] public static extern bool LoadRom(IntPtr g, byte[] romfile, uint romfilelen, byte[] biosfile, uint biosfilelen, [In]FrontEndSettings settings); @@ -89,19 +82,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA /// /// hard reset /// - /// [DllImport(dllname, CallingConvention = cc)] public static extern void Reset(IntPtr g); /// /// frame advance /// - /// - /// /// 240x160 packed argb32 /// buffer to recieve stereo audio /// number of samples created - /// /// true if lagged [DllImport(dllname, CallingConvention = cc)] public static extern bool FrameAdvance(IntPtr g, Buttons input, int[] videobuffer, short[] audiobuffer, out int numsamp, int[] videopalette); @@ -143,11 +132,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA [UnmanagedFunctionPointer(cc)] public delegate void AddressCallback(uint addr); - /// - /// - /// /// if bit 0 is set, thumb mode - /// [UnmanagedFunctionPointer(cc)] public delegate void TraceCallback(uint addr, uint opcode); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibmGBA.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibmGBA.cs index e3d817d8c3..b0a4f3ed04 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibmGBA.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/LibmGBA.cs @@ -87,7 +87,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA /// /// start a savestate operation /// - /// /// private parameter to be passed to BizFinishGetState /// size of buffer to be allocated for BizFinishGetState /// if false, operation failed and BizFinishGetState should not be called diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/IGameboyCommon.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/IGameboyCommon.cs index bc7d54a30e..6ad5fc0fe6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/IGameboyCommon.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/IGameboyCommon.cs @@ -8,13 +8,9 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy { - /// - /// /// current value of register $ff40 (LCDC) public delegate void ScanlineCallback(byte lcdc); - /// - /// /// The image data /// How tall an image is, in pixels. Image is only valid up to that height and must be assumed to be garbage below that. /// The top margin of blank pixels. Just form feeds the printer a certain amount at the top. diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index 1a05daea20..1fb710656d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -9,16 +9,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// public static class LibGambatte { - /// - /// - /// /// opaque state pointer [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr gambatte_create(); - /// - /// - /// /// opaque state pointer [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_destroy(IntPtr core); @@ -104,7 +98,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// blit from internal framebuffer to provided framebuffer /// /// opaque state pointer - /// /// in pixels [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] unsafe public static extern void gambatte_blitto(IntPtr core, int* videobuf, int pitch); @@ -112,7 +105,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// blit from internal framebuffer to provided framebuffer /// /// opaque state pointer - /// /// in pixels [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_blitto(IntPtr core, int[] videobuf, int pitch); @@ -136,13 +128,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy SP2_PALETTE = 2 }; - /// - /// - /// /// opaque state pointer /// in [0, 2]: One of BG_PALETTE, SP1_PALETTE and SP2_PALETTE. /// in [0, 3] - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_setdmgpalettecolor(IntPtr core, PalType palnum, uint colornum, uint rgb32); @@ -181,7 +169,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// Sets the callback used for getting input state. /// /// opaque state pointer - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void gambatte_setinputgetter(IntPtr core, InputGetter getinput); @@ -301,7 +288,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// Returns true if the currently loaded ROM image is treated as having CGB support. /// /// opaque state pointer - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool gambatte_iscgb(IntPtr core); @@ -309,7 +295,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// Returns true if a ROM image is loaded. /// /// opaque state pointer - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool gambatte_isloaded(IntPtr core); @@ -340,28 +325,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// /// new savestate method /// - /// - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int gambatte_newstatelen(IntPtr core); /// /// new savestate method /// - /// - /// - /// - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool gambatte_newstatesave(IntPtr core, byte[] data, int len); /// /// new savestate method /// - /// - /// - /// - /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool gambatte_newstateload(IntPtr core, byte[] data, int len); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusAudioApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusAudioApi.cs index b7cec664b0..a61fb49b0e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusAudioApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusAudioApi.cs @@ -56,7 +56,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Returns currently used sampling rate /// - /// public uint GetSamplingRate() { return (uint)dllGetAudioRate(); @@ -65,7 +64,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Returns size of bytes currently in the audio buffer /// - /// public int GetAudioBufferSize() { return dllGetBufferSize(); @@ -76,7 +74,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// Afterwards audio buffer is cleared /// buffer.Length must be greater than GetAudioBufferSize() /// - /// public void GetAudioBuffer(short[] buffer) { dllReadAudioBuffer(buffer); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs index 3547d5459c..f2670ffe46 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs @@ -179,7 +179,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// A function to use when the core wants to output debug messages /// Use "" /// Use IntPtr.Zero - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error CoreStartup(int APIVersion, string ConfigPath, string DataPath, string Context, DebugCallback DebugCallback, string context2, IntPtr dummy); CoreStartup m64pCoreStartup; @@ -187,7 +186,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Cleans up the core /// - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error CoreShutdown(); CoreShutdown m64pCoreShutdown; @@ -197,7 +195,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// The type of plugin that is being connected /// The DLL handle for the plugin - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error CoreAttachPlugin(m64p_plugin_type PluginType, IntPtr PluginLibHandle); CoreAttachPlugin m64pCoreAttachPlugin; @@ -206,7 +203,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// Disconnects a plugin DLL from the core DLL /// /// The type of plugin to be disconnected - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error CoreDetachPlugin(m64p_plugin_type PluginType); CoreDetachPlugin m64pCoreDetachPlugin; @@ -216,7 +212,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// The name of the section to open /// A pointer to the pointer to use as the section handle - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error ConfigOpenSection(string SectionName, ref IntPtr ConfigSectionHandle); ConfigOpenSection m64pConfigOpenSection; @@ -228,7 +223,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// The name of the parameter to set /// The type of the parameter /// A pointer to the value to use for the parameter (must be an int right now) - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error ConfigSetParameter(IntPtr ConfigSectionHandle, string ParamName, m64p_type ParamType, ref int ParamValue); ConfigSetParameter m64pConfigSetParameter; @@ -240,7 +234,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// The name of the parameter to set /// The type of the parameter /// A pointer to the value to use for the parameter (must be a string) - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate m64p_error ConfigSetParameterStr(IntPtr ConfigSectionHandle, string ParamName, m64p_type ParamType, StringBuilder ParamValue); ConfigSetParameterStr m64pConfigSetParameterStr; @@ -249,7 +242,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// Saves the mupen64plus state to the provided buffer /// /// A byte array to use to save the state. Must be at least 16788288 + 1024 bytes - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate int savestates_save_bkm(byte[] buffer); savestates_save_bkm m64pCoreSaveState; @@ -258,7 +250,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// Loads the mupen64plus state from the provided buffer /// /// A byte array filled with the state to load. Must be at least 16788288 + 1024 bytes - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate int savestates_load_bkm(byte[] buffer); savestates_load_bkm m64pCoreLoadState; @@ -332,7 +323,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Reads from the "system bus" /// - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate byte biz_read_memory(uint addr); public biz_read_memory m64p_read_memory_8; @@ -340,7 +330,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Writes to the "system bus" /// - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void biz_write_memory(uint addr, byte value); public biz_write_memory m64p_write_memory_8; @@ -353,14 +342,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// The DLL handle for the core DLL /// Giving a context to the DebugCallback /// A function to use when the pluging wants to output debug messages - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate m64p_error PluginStartup(IntPtr CoreHandle, string Context, DebugCallback DebugCallback); /// /// Cleans up the plugin /// - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate m64p_error PluginShutdown(); @@ -369,8 +356,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Handles a debug message from mupen64plus /// - /// - /// /// The message to display [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void DebugCallback(IntPtr Context, int level, string Message); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs index 2fa3a412e9..f412ac0b35 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs @@ -25,8 +25,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi /// /// Callback to use when mupen64plus wants input /// - /// - /// [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int InputCallback(int i); InputCallback InpInputCallback; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs index ae44856892..78bb3379ee 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs @@ -1355,7 +1355,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } /// only call in board.ClockCPU() - /// public void ExternalQueue(int value) { cart_sound = value + old_cart_sound; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/DatachBarcode.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/DatachBarcode.cs index 59dddf8770..916b3db9d6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/DatachBarcode.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/DatachBarcode.cs @@ -228,7 +228,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// d3 /// - /// public bool GetOutput() { return output == 8; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs index 16800da327..e47c3925ca 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs @@ -55,7 +55,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// use with caution /// - /// public byte[] GetExRAMArray() { return EXRAM; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Namco163Audio.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Namco163Audio.cs index eea85483c9..a3f51e1e3d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Namco163Audio.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Namcot1xx/Namco163Audio.cs @@ -15,7 +15,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// F800:FFFF /// - /// public void WriteAddr(byte value) { addr = value & 0x7f; @@ -25,7 +24,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// 4800:4FFF /// - /// public void WriteData(byte value) { ram[addr] = value; @@ -39,7 +37,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// 4800:4FFF /// - /// public byte ReadData() { byte ret = ram[addr]; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/SEEPROM.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/SEEPROM.cs index a708bef9e4..7d52d63589 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/SEEPROM.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/SEEPROM.cs @@ -221,7 +221,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// read a bit back from eprom, might be mapped in 6000:7fff /// /// bit from NES.DB - /// public bool ReadBit(bool deadbit) { if (!OutEnable) @@ -233,9 +232,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public byte[] GetSaveRAM() { return rom; } - /// - /// - /// /// 256 byte instead of 128 byte public SEEPROM(bool Big) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/FDS.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/FDS.cs index 960a93dbc1..45fda00fcd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/FDS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/FDS.cs @@ -91,7 +91,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// should only be called once, before emulation begins /// - /// public void SetDiskImage(byte[] diskimage) { // each FDS format is worse than the last @@ -116,7 +115,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// returns the currently set disk image. no effect on emulation (provided the image is not modified). /// - /// public byte[] GetDiskImage() { return diskimage; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/RamAdapter.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/RamAdapter.cs index 77b613a588..6686e53409 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/RamAdapter.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/FDS/RamAdapter.cs @@ -98,9 +98,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// advance a 16 bit CRC register with 1 new input bit. x.25 standard /// - /// - /// - /// static ushort CCITT(ushort crc, int bit) { int bitc = crc & 1; @@ -113,9 +110,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// advance a 16 bit CRC register with 8 new input bits. x.25 standard /// - /// - /// - /// static ushort CCITT_8(ushort crc, byte b) { for (int i = 0; i < 8; i++) @@ -289,8 +283,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// memorydomain debugging /// - /// - /// public byte PeekData(long addr) { if (disk != null && disk.Length > addr) @@ -357,7 +349,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// data write reg /// - /// public void Write4024(byte value) { bytetransferflag = false; @@ -369,7 +360,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// control reg /// - /// public void Write4025(byte value) { if ((value & 1) != 0) // start motor @@ -425,7 +415,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// general status reg, some bits are from outside the RamAdapter class /// - /// public byte Read4030() { byte ret = 0; @@ -448,7 +437,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// more status stuff /// - /// public byte Read4031() { bytetransferflag = false; @@ -465,7 +453,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// more status stuff /// - /// public byte Read4032() { byte ret = 0xff; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/INESPPUViewable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/INESPPUViewable.cs index c3d41a30e3..b9f0aeabfa 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/INESPPUViewable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/INESPPUViewable.cs @@ -14,7 +14,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// get the 512 color overall palette in use /// - /// int[] GetPalette(); /// @@ -35,32 +34,26 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// get the first 0x3000 bytes of ppu data /// - /// byte[] GetPPUBus(); /// /// get the 32 byte palette ram /// - /// byte[] GetPalRam(); /// /// returns the object attribute memory /// - /// byte[] GetOam(); /// /// return one byte of PPU bus data /// - /// - /// byte PeekPPU(int addr); /// /// get MMC5 extile source data /// - /// byte[] GetExTiles(); /// @@ -71,26 +64,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// get MMC5 exram for exattr mode /// - /// byte[] GetExRam(); /// /// get memory domain for chr rom; return null if RAM or other N/A. for direct viewing of ROM tiles. /// - /// MemoryDomain GetCHRROM(); /// /// install a callback to run at a particular scanline /// - /// - /// void InstallCallback1(Action cb, int sl); /// /// install a callback to run at a particular scanline /// - /// - /// void InstallCallback2(Action cb, int sl); /// diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 676279ec21..03e977c730 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -66,7 +66,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// for debugging only! /// - /// public INESBoard GetBoard() { return Board; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs index 97ec51fa95..726a7090e9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NESControllers.cs @@ -56,9 +56,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// public readonly int OUT2old; - /// - /// - /// /// the old latched $4016 byte /// the new latched $4016 byte public StrobeInfo(byte oldvalue, byte newvalue) @@ -80,19 +77,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// call whenever $4016 is written /// - /// - /// void Strobe(StrobeInfo s, IController c); /// /// call whenever $4016 is read /// - /// /// bits 0-4 are valid byte ReadA(IController c); // D0:D4 /// /// call whenever $4017 is read /// - /// /// bits 0-4 are valid byte ReadB(IController c); // D0:D4 ControllerDefinition GetDefinition(); @@ -108,13 +101,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES /// /// read data from $4016 /// - /// /// only bit 1 is valid byte ReadA(IController c); /// /// read data from $4017 /// - /// /// bits 1-4 are valid byte ReadB(IController c); ControllerDefinition GetDefinition(); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs index edd891063b..de1f04a45f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs @@ -32,7 +32,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// context /// file /// length of file - /// [BizImport(CallingConvention.Cdecl)] public abstract IntPtr qn_loadines(IntPtr e, byte[] data, int length); /// @@ -174,12 +173,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// get memory area for debugging /// /// Context - /// - /// - /// - /// - /// - /// [BizImport(CallingConvention.Cdecl)] public abstract bool qn_get_memory_area(IntPtr e, int which, ref IntPtr data, ref int size, ref bool writable, ref IntPtr name); /// @@ -187,7 +180,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// /// Context /// 0000:ffff, but non-ram/rom addresses won't work - /// [BizImport(CallingConvention.Cdecl)] public abstract byte qn_peek_prgbus(IntPtr e, int addr); /// @@ -195,7 +187,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// /// Context /// 0000:ffff, but non-ram/rom addresses won't work - /// [BizImport(CallingConvention.Cdecl)] public abstract void qn_poke_prgbus(IntPtr e, int addr, byte val); /// @@ -221,7 +212,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// set a trace callback to be run on each cycle /// /// Context - /// [BizImport(CallingConvention.Cdecl)] public abstract void qn_set_tracecb(IntPtr e, TraceCallback cb); @@ -241,7 +231,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// /// handle "string error" as returned by some quicknes functions /// - /// public static void ThrowStringError(IntPtr p) { if (p == IntPtr.Zero) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs index 46728237c5..8a65fd9a79 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesControllerDeck.cs @@ -96,7 +96,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES /// controller input from user, remapped /// libsnes specific value, sometimes multitap number /// libsnes specific value, sometimes button number - /// short GetState(IController controller, int index, int id); ControllerDefinition Definition { get; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index 94e6335b79..e86ee2c289 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -428,8 +428,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES return result; } - /// - /// /// 0 or 1, corresponding to L and R physical ports on the snes /// LibsnesApi.SNES_DEVICE enum index specifying type of device /// meaningless for most controllers. for multitap, 0-3 for which multitap controller diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/PicoDrive/LibPicoDrive.cs b/BizHawk.Emulation.Cores/Consoles/Sega/PicoDrive/LibPicoDrive.cs index 425e99eb76..096a6f6173 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/PicoDrive/LibPicoDrive.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/PicoDrive/LibPicoDrive.cs @@ -29,13 +29,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.PicoDrive Europe = 8 } - /// - /// - /// /// If TRUE, load a CD and not a cart. /// If TRUE, preallocate 32X data structures. When set to false, /// 32X games will still run, but will not have memory domains - /// [BizImport(CC)] public abstract bool Init(bool cd, bool _32xPreinit, Region regionAutoOrder, Region regionOverride); diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs index 95c8f01167..35a4b51dee 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs @@ -15,28 +15,24 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// /// create new instance /// - /// [DllImport(dd, CallingConvention = cc)] public static extern IntPtr bizswan_new(); /// /// delete instance, freeing all associated memory /// - /// [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_delete(IntPtr core); /// /// hard reset /// - /// [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_reset(IntPtr core); /// /// frame advance /// - /// /// input to use on this frame /// true to skip all video rendering /// uint32 video output buffer @@ -50,28 +46,19 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// /// load rom /// - /// - /// - /// - /// /// (out) true if screen is rotated left 90 - /// [DllImport(dd, CallingConvention = cc)] public static extern bool bizswan_load(IntPtr core, byte[] data, int length, [In] ref SyncSettings settings, ref bool IsRotated); /// /// get size of saveram /// - /// - /// [DllImport(dd, CallingConvention = cc)] public static extern int bizswan_saveramsize(IntPtr core); /// /// load saveram into core /// - /// - /// /// should be same as bizswan_saveramsize() /// false if size mismatch [DllImport(dd, CallingConvention = cc)] @@ -80,8 +67,6 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// /// save saveram from core /// - /// - /// /// should be same as bizswan_saveramsize() /// false if size mismatch [DllImport(dd, CallingConvention = cc)] @@ -90,20 +75,13 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// /// put non-sync settings, can be done at any time /// - /// - /// [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_putsettings(IntPtr core, [In] ref Settings settings); /// /// get a memory area /// - /// /// start at 0, increment until return is false - /// - /// - /// - /// [DllImport(dd, CallingConvention = cc)] public static extern bool bizswan_getmemoryarea(IntPtr core, int index, out IntPtr name, out int size, out IntPtr data); @@ -134,9 +112,6 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// /// return a CPU register /// - /// - /// - /// [DllImport(dd, CallingConvention = cc)] public static extern uint bizswan_getnecreg(IntPtr core, NecRegs which); diff --git a/BizHawk.Emulation.Cores/CoreInventory.cs b/BizHawk.Emulation.Cores/CoreInventory.cs index 9f5a5aa905..711219290c 100644 --- a/BizHawk.Emulation.Cores/CoreInventory.cs +++ b/BizHawk.Emulation.Cores/CoreInventory.cs @@ -64,13 +64,6 @@ namespace BizHawk.Emulation.Cores /// /// instatiate an emulator core /// - /// - /// - /// - /// - /// - /// - /// public IEmulator Create ( CoreComm comm, @@ -113,8 +106,6 @@ namespace BizHawk.Emulation.Cores /// /// find a core matching a particular game.system /// - /// - /// public Core this[string system] { get @@ -129,9 +120,6 @@ namespace BizHawk.Emulation.Cores /// /// find a core matching a particular game.system with a particular coreattributes.name /// - /// - /// - /// public Core this[string system, string core] { get @@ -149,8 +137,6 @@ namespace BizHawk.Emulation.Cores /// /// find an exact core type. slow lookup. /// - /// - /// public Core FindByType(Type type) { foreach (List cc in systems.Values) @@ -167,7 +153,6 @@ namespace BizHawk.Emulation.Cores /// /// create a core inventory, collecting all IEmulators from some assembilies /// - /// public CoreInventory(IEnumerable assys) { foreach (var assy in assys) diff --git a/BizHawk.Emulation.Cores/FileID.cs b/BizHawk.Emulation.Cores/FileID.cs index 5b343f7360..d86fe0e53e 100644 --- a/BizHawk.Emulation.Cores/FileID.cs +++ b/BizHawk.Emulation.Cores/FileID.cs @@ -80,9 +80,6 @@ namespace BizHawk.Emulation.Cores /// public int Confidence; - /// - /// - /// public FileIDType FileIDType; /// diff --git a/BizHawk.Emulation.Cores/Sound/MMC5Audio.cs b/BizHawk.Emulation.Cores/Sound/MMC5Audio.cs index 559ed36672..e53e91506a 100644 --- a/BizHawk.Emulation.Cores/Sound/MMC5Audio.cs +++ b/BizHawk.Emulation.Cores/Sound/MMC5Audio.cs @@ -165,11 +165,7 @@ namespace BizHawk.Emulation.Cores.Components private readonly Pulse[] pulse = new Pulse[2]; - /// - /// - /// /// 0x5000..0x5015 - /// public void WriteExp(int addr, byte val) { switch (addr) @@ -231,7 +227,6 @@ namespace BizHawk.Emulation.Cores.Components /// /// call for 8000:bfff reads /// - /// public void ReadROMTrigger(byte val) { if (PCMRead) diff --git a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs index 9ab9e3e05b..350ccc3187 100644 --- a/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs +++ b/BizHawk.Emulation.Cores/Sound/OneBitBeeper.cs @@ -57,7 +57,6 @@ namespace BizHawk.Emulation.Cores.Sound /// /// Processes an incoming pulse value /// - /// public void ProcessPulseValue(bool pulse, bool renderSound = true) { if (!renderSound) @@ -110,8 +109,6 @@ namespace BizHawk.Emulation.Cores.Sound /// /// Takes an int 0-100 and returns the relevant short volume to output /// - /// - /// private int VolumeConverterIn(int vol) { int maxLimit = short.MaxValue / 3; @@ -123,8 +120,6 @@ namespace BizHawk.Emulation.Cores.Sound /// /// Takes an short volume and returns the relevant int value 0-100 /// - /// - /// private int VolumeConverterOut(int shortvol) { int maxLimit = short.MaxValue / 3; diff --git a/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs b/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs index 2052546040..7669caaaf4 100644 --- a/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs +++ b/BizHawk.Emulation.Cores/Sound/SyncSoundMixer.cs @@ -110,7 +110,6 @@ namespace BizHawk.Emulation.Cores.Components /// /// Removes an existing ISoundProvider from the SyncSoundMixer /// - /// public void UnPinSource(ISoundProvider source) { var sp = _soundProviders.Where(a => a.SoundProvider == source); @@ -162,7 +161,6 @@ namespace BizHawk.Emulation.Cores.Components /// /// Returns the value of the highest nsamp in the SoundProviders collection /// - /// private int GetHigestSampleCount() { var lookup = _soundProviders.OrderByDescending(x => x.InputNSamp) @@ -297,7 +295,6 @@ namespace BizHawk.Emulation.Cores.Components /// Ensures the output buffer is ready for mixing based on the supplied nsamp value /// Overflow samples will be omitted and underflow samples will be empty air /// - /// public void PrepareOutput(int nsamp) { OutputNSamp = nsamp; diff --git a/BizHawk.Emulation.Cores/Sound/VRC6Alt.cs b/BizHawk.Emulation.Cores/Sound/VRC6Alt.cs index 756982d66b..60f7df8d56 100644 --- a/BizHawk.Emulation.Cores/Sound/VRC6Alt.cs +++ b/BizHawk.Emulation.Cores/Sound/VRC6Alt.cs @@ -14,9 +14,6 @@ namespace BizHawk.Emulation.Cores.Components Action enqueuer; - /// - /// - /// /// frequency of the M2 clock in hz /// a place to dump deltas to public VRC6Alt(Action enqueuer) diff --git a/BizHawk.Emulation.Cores/Waterbox/LibWaterboxCore.cs b/BizHawk.Emulation.Cores/Waterbox/LibWaterboxCore.cs index 0cacab7e64..c3b3e1c647 100644 --- a/BizHawk.Emulation.Cores/Waterbox/LibWaterboxCore.cs +++ b/BizHawk.Emulation.Cores/Waterbox/LibWaterboxCore.cs @@ -111,9 +111,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// size of the domain /// public long Size; - /// - /// - /// public MemoryDomainFlags Flags; } diff --git a/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs b/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs index d81aac84be..0c69b1a304 100644 --- a/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs +++ b/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs @@ -1154,7 +1154,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// Adds a file that will appear to the waterbox core's libc. the file will be read only. /// All savestates must have the same file list, so either leave it up forever or remove it during init! /// - /// /// the filename that the unmanaged core will access the file by public void AddReadonlyFile(byte[] data, string name) { @@ -1165,7 +1164,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// Remove a file previously added by AddReadonlyFile. Frees the internal copy of the filedata, saving memory. /// All savestates must have the same file list, so either leave it up forever or remove it during init! /// - /// public void RemoveReadonlyFile(string name) { _syscalls.RemoveReadonlyFile(name); diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs index f202a6b3dd..11031bf693 100644 --- a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs @@ -316,7 +316,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// variables that it needs to. /// the default implementation does nothing /// - /// protected virtual void SaveStateBinaryInternal(BinaryWriter writer) { @@ -327,7 +326,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// that were in SaveStateBinaryInternal and reset any native pointers. /// the default implementation does nothing /// - /// protected virtual void LoadStateBinaryInternal(BinaryReader reader) { diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs index 4477642d4b..27584b1a0b 100644 --- a/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs @@ -12,9 +12,6 @@ namespace BizHawk.Emulation.Cores.Waterbox /// /// copy `len` bytes from `src` to `dest` /// - /// - /// - /// public static void CopySome(Stream src, Stream dst, long len) { var buff = new byte[4096]; diff --git a/BizHawk.Emulation.DiscSystem/CDFS/EndianBitConverter.cs b/BizHawk.Emulation.DiscSystem/CDFS/EndianBitConverter.cs index 3ecee543b6..307185eb91 100644 --- a/BizHawk.Emulation.DiscSystem/CDFS/EndianBitConverter.cs +++ b/BizHawk.Emulation.DiscSystem/CDFS/EndianBitConverter.cs @@ -124,10 +124,6 @@ namespace BizHawk.Emulation.DiscSystem /// Returns a byte array of any length /// Not really anything endian going on, but I struggled to find a better place for it /// - /// - /// - /// - /// public byte[] ReadBytes(byte[] buffer, int offset, int length) { return buffer.Skip(offset).Take(length).ToArray(); @@ -137,10 +133,6 @@ namespace BizHawk.Emulation.DiscSystem /// Returns an int32 value from any size byte array /// (careful, data may/will be truncated) /// - /// - /// - /// - /// public int ReadIntValue(byte[] buffer, int offset, int length) { var bytes = buffer.Skip(offset).Take(length).ToArray(); diff --git a/BizHawk.Emulation.DiscSystem/CDFS/ISOFile.cs b/BizHawk.Emulation.DiscSystem/CDFS/ISOFile.cs index e81d6316a4..f07ab2394a 100644 --- a/BizHawk.Emulation.DiscSystem/CDFS/ISOFile.cs +++ b/BizHawk.Emulation.DiscSystem/CDFS/ISOFile.cs @@ -173,7 +173,6 @@ namespace BizHawk.Emulation.DiscSystem /// /// Returns a flat list of all recursed files /// - /// public List> EnumerateAllFilesRecursively() { fileNodes = new List>(); diff --git a/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs b/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs index 14966b9f26..b3ee6f46a7 100644 --- a/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs +++ b/BizHawk.Emulation.DiscSystem/CDFS/ISOVolumeDescriptor.cs @@ -457,8 +457,6 @@ namespace BizHawk.Emulation.DiscSystem /// /// Detect ISO9660 /// - /// - /// public bool GetISO9660(byte[] buffer) { //zero 24-jun-2013 - validate ISO9660 @@ -475,8 +473,6 @@ namespace BizHawk.Emulation.DiscSystem /// /// Detect CD-I /// - /// - /// public bool GetCDI(byte[] buffer) { // CD-Interactive diff --git a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs index 549f906b2d..4023f114ba 100644 --- a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs +++ b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs @@ -109,8 +109,6 @@ namespace BizHawk.Emulation.DiscSystem /// /// Parse mds stream for the header /// - /// - /// public AHeader Parse(Stream stream) { EndianBitConverter bc = EndianBitConverter.CreateForLittleEndian(); diff --git a/Bizware/BizHawk.Bizware.BizwareGL/Borrowed/BitmapFontParser/BitmapFontLoader.cs b/Bizware/BizHawk.Bizware.BizwareGL/Borrowed/BitmapFontParser/BitmapFontLoader.cs index f25a9d1a47..a1dfb1f748 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/Borrowed/BitmapFontParser/BitmapFontLoader.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/Borrowed/BitmapFontParser/BitmapFontLoader.cs @@ -54,7 +54,6 @@ namespace Cyotek.Drawing.BitmapFont /// Loads a bitmap font from a text file. /// /// Name of the file to load. - /// public static BitmapFont LoadFontFromTextFile(string fileName) { BitmapFont font; @@ -173,7 +172,6 @@ namespace Cyotek.Drawing.BitmapFont /// Loads a bitmap font from an XML file. /// /// Name of the file to load. - /// public static BitmapFont LoadFontFromXmlFile(Stream stream) { XmlDocument document; @@ -287,7 +285,6 @@ namespace Cyotek.Drawing.BitmapFont /// /// The array of parts. /// The name of the value to return. - /// private static bool GetNamedBool(string[] parts, string name) { return BitmapFontLoader.GetNamedInt(parts, name) != 0; @@ -298,7 +295,6 @@ namespace Cyotek.Drawing.BitmapFont /// /// The array of parts. /// The name of the value to return. - /// private static int GetNamedInt(string[] parts, string name) { return Convert.ToInt32(BitmapFontLoader.GetNamedString(parts, name)); @@ -309,7 +305,6 @@ namespace Cyotek.Drawing.BitmapFont /// /// The array of parts. /// The name of the value to return. - /// private static string GetNamedString(string[] parts, string name) { string result; @@ -348,7 +343,6 @@ namespace Cyotek.Drawing.BitmapFont /// Creates a Padding object from a string representation /// /// The string. - /// private static Padding ParsePadding(string s) { string[] parts; @@ -368,7 +362,6 @@ namespace Cyotek.Drawing.BitmapFont /// Creates a Point object from a string representation /// /// The string. - /// private static Point ParsePoint(string s) { string[] parts; @@ -387,7 +380,6 @@ namespace Cyotek.Drawing.BitmapFont /// /// The string to split. /// The delimiter. - /// private static string[] Split(string s, char delimiter) { string[] results; @@ -439,7 +431,6 @@ namespace Cyotek.Drawing.BitmapFont /// /// Type of the items in the array /// The values. - /// private static T[] ToArray(ICollection values) { T[] result; diff --git a/ExternalCoreProjects/Virtu/Keyboard.cs b/ExternalCoreProjects/Virtu/Keyboard.cs index e598b881a7..8adeb1fcac 100644 --- a/ExternalCoreProjects/Virtu/Keyboard.cs +++ b/ExternalCoreProjects/Virtu/Keyboard.cs @@ -210,13 +210,7 @@ namespace Jellyfish.Virtu 0x7a1a5a1a, // z }; - /// - /// - /// /// 0 - 55 - /// - /// - /// private static int KeyToAscii(int key, bool control, bool shift) { int s = control ? (shift ? 0 : 16) : (shift ? 8 : 24); @@ -270,7 +264,6 @@ namespace Jellyfish.Virtu /// /// Call this at 60hz with all of the currently pressed keys /// - /// public void SetKeys(IEnumerable keynames) { Keys keys = FromStrings(keynames); From d41bd867b8dab3abaa894a14bcd76f7f894e0357 Mon Sep 17 00:00:00 2001 From: Brian Armstrong Date: Thu, 6 Jun 2019 02:04:47 -0700 Subject: [PATCH 118/138] flags --- .../Classes/Api/MemEventsApi.cs | 8 ++-- .../Interfaces/Api/IMemEvents.cs | 10 +++-- BizHawk.Client.Common/lua/NamedLuaFunction.cs | 4 +- .../tools/Debugger/Breakpoint.cs | 10 ++--- .../tools/Debugger/BreakpointControl.cs | 6 +-- .../CallbackBasedTraceBuffer.cs | 6 +-- .../MemoryCallbackSystem.cs | 45 +++++++++++++------ .../Interfaces/IMemoryCallbackSystem.cs | 45 +++++++++++-------- .../CPUs/CP1610/CP1610.Execute.cs | 3 +- BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs | 6 ++- .../CPUs/HuC6280/Execute.cs | 2 +- .../CPUs/HuC6280/HuC6280.cs | 6 ++- .../Computers/AppleII/AppleII.cs | 18 ++++++-- .../Consoles/Atari/2600/Atari2600.Core.cs | 10 +++-- .../Consoles/Atari/A7800Hawk/A7800Hawk.cs | 3 +- .../Consoles/Atari/A7800Hawk/MemoryMap.cs | 6 ++- .../Consoles/Nintendo/GBA/VBANext.cs | 17 +++++-- .../Consoles/Nintendo/GBHawk/GBHawk.cs | 3 +- .../Consoles/Nintendo/GBHawk/MemoryMap.cs | 6 ++- .../Nintendo/GBHawkLink/GBHawkLink.cs | 5 ++- .../Nintendo/Gameboy/Gambatte.IDebuggable.cs | 9 ++-- .../N64/NativeApi/mupen64plusCoreApi.cs | 9 ++-- .../Consoles/Nintendo/NES/NES.Core.cs | 9 ++-- .../Consoles/Nintendo/SNES/LibsnesCore.cs | 18 +++++--- .../Nintendo/SubNESHawk/SubNESHawk.cs | 5 ++- .../Consoles/Sega/SMS/SMS.cs | 9 ++-- .../Consoles/Sega/gpgx64/GPGX.IDebuggable.cs | 18 ++++++-- .../Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- .../Consoles/Sony/PSX/Octoshock.cs | 10 +++-- .../Consoles/WonderSwan/WonderSwan.cs | 9 ++-- 30 files changed, 210 insertions(+), 107 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs index 8db4c5223f..05993e866a 100644 --- a/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs @@ -13,28 +13,28 @@ namespace BizHawk.Client.ApiHawk public MemEventsApi () : base() { } - public void AddReadCallback(Action cb, uint? address, string domain) + public void AddReadCallback(MemoryCallbackDelegate cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable()) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Plugin Hook", cb, address, null)); } } - public void AddWriteCallback(Action cb, uint? address, string domain) + public void AddWriteCallback(MemoryCallbackDelegate cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable()) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Plugin Hook", cb, address, null)); } } - public void AddExecCallback(Action cb, uint? address, string domain) + public void AddExecCallback(MemoryCallbackDelegate cb, uint? address, string domain) { if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) { DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Plugin Hook", cb, address, null)); } } - public void RemoveMemoryCallback(Action cb) + public void RemoveMemoryCallback(MemoryCallbackDelegate cb) { if (DebuggableCore.MemoryCallbacksAvailable()) { diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs index 2b497ea11c..ef0f5ef0bc 100644 --- a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs @@ -1,12 +1,14 @@ using System; +using BizHawk.Emulation.Common; + namespace BizHawk.Client.ApiHawk { public interface IMemEvents : IExternalApi { - void AddReadCallback(Action cb, uint? address, string domain); - void AddWriteCallback(Action cb, uint? address, string domain); - void AddExecCallback(Action cb, uint? address, string domain); - void RemoveMemoryCallback(Action cb); + void AddReadCallback(MemoryCallbackDelegate cb, uint? address, string domain); + void AddWriteCallback(MemoryCallbackDelegate cb, uint? address, string domain); + void AddExecCallback(MemoryCallbackDelegate cb, uint? address, string domain); + void RemoveMemoryCallback(MemoryCallbackDelegate cb); } } diff --git a/BizHawk.Client.Common/lua/NamedLuaFunction.cs b/BizHawk.Client.Common/lua/NamedLuaFunction.cs index 2bdb677ed9..9737d77a93 100644 --- a/BizHawk.Client.Common/lua/NamedLuaFunction.cs +++ b/BizHawk.Client.Common/lua/NamedLuaFunction.cs @@ -1,6 +1,8 @@ using System; using NLua; +using BizHawk.Emulation.Common; + namespace BizHawk.Client.Common { public class NamedLuaFunction @@ -47,7 +49,7 @@ namespace BizHawk.Client.Common public Action Callback { get; } - public Action MemCallback { get; } + public MemoryCallbackDelegate MemCallback { get; } public void Call(string name = null) { diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs b/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs index 3d9ea3b08b..b296f0d821 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/Breakpoint.cs @@ -7,7 +7,7 @@ namespace BizHawk.Client.EmuHawk { public class BreakpointList : List { - public Action Callback { get; set; } + public MemoryCallbackDelegate Callback { get; set; } public void Add(IDebuggable core, string scope, uint address, uint mask, MemoryCallbackType type) { @@ -69,7 +69,7 @@ namespace BizHawk.Client.EmuHawk private bool _active; private readonly IDebuggable _core; - public Breakpoint(bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(bool readOnly, IDebuggable core, string scope, MemoryCallbackDelegate callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -83,7 +83,7 @@ namespace BizHawk.Client.EmuHawk ReadOnly = readOnly; } - public Breakpoint(IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(IDebuggable core, string scope, MemoryCallbackDelegate callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -96,7 +96,7 @@ namespace BizHawk.Client.EmuHawk Active = enabled; } - public Breakpoint(string name, bool readOnly, IDebuggable core, string scope, Action callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) + public Breakpoint(string name, bool readOnly, IDebuggable core, string scope, MemoryCallbackDelegate callBack, uint address, uint mask, MemoryCallbackType type, bool enabled = true) { Scope = scope; _core = core; @@ -111,7 +111,7 @@ namespace BizHawk.Client.EmuHawk } public string Scope { get; } - public Action Callback { get; } + public MemoryCallbackDelegate Callback { get; } public uint? Address { get; set; } public uint? AddressMask { get; set; } public MemoryCallbackType Type { get; set; } diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs index 2224cb3e56..5d8dfc5bc9 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs @@ -60,16 +60,16 @@ namespace BizHawk.Client.EmuHawk : Color.White; } - private void BreakpointCallback(uint addr, uint value) + private void BreakpointCallback(uint addr, uint value, uint flags) { GlobalWin.MainForm.PauseEmulator(); UpdateValues(); GlobalWin.OSD.AddMessage("Breakpoint hit"); } - private void SeekCallback(uint addr, uint value) + private void SeekCallback(uint addr, uint value, uint flags) { - BreakpointCallback(addr, value); + BreakpointCallback(addr, value, flags); var seekBreakpoint = _breakpoints.FirstOrDefault(x => x.Name.StartsWith(SeekName)); diff --git a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs index b37479fd36..da0d6dd1fc 100644 --- a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs +++ b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs @@ -46,7 +46,7 @@ namespace BizHawk.Emulation.Common protected readonly List Buffer = new List(); - protected abstract void TraceFromCallback(uint addr, uint value); + protected abstract void TraceFromCallback(uint addr, uint value, uint flags); private ITraceSink _sink; @@ -80,7 +80,7 @@ namespace BizHawk.Emulation.Common public class TracingMemoryCallback : IMemoryCallback { - public TracingMemoryCallback(Action callback) + public TracingMemoryCallback(MemoryCallbackDelegate callback) { Callback = callback; } @@ -89,7 +89,7 @@ namespace BizHawk.Emulation.Common public string Name => "Trace Logging"; - public Action Callback { get; } + public MemoryCallbackDelegate Callback { get; } public uint? Address => null; diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs index 794986c830..cc08a8bcea 100644 --- a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs @@ -67,38 +67,57 @@ namespace BizHawk.Emulation.Common } } - private static void Call(ObservableCollection cbs, uint addr, uint value, string scope) + private static void Call(ObservableCollection cbs, uint addr, uint value, uint flags, string scope) { for (int i = 0; i < cbs.Count; i++) { if (!cbs[i].Address.HasValue || (cbs[i].Scope == scope && cbs[i].Address == (addr & cbs[i].AddressMask))) { - cbs[i].Callback(addr, value); + cbs[i].Callback(addr, value, flags); } } } - public void CallReads(uint addr, uint value, string scope) + public void CallMemoryCallbacks(uint addr, uint value, uint flags, string scope) + { + var flagEnum = (MemoryCallbackFlags)flags; + if (flagEnum.HasFlag(MemoryCallbackFlags.AccessRead) && _hasReads) + { + Call(_reads, addr, value, flags, scope); + } + + if (flagEnum.HasFlag(MemoryCallbackFlags.AccessWrite) && _hasWrites) + { + Call(_writes, addr, value, flags, scope); + } + + if (flagEnum.HasFlag(MemoryCallbackFlags.AccessExecute) && _hasExecutes) + { + Call(_execs, addr, value, flags, scope); + } + } + + public void CallReads(uint addr, uint value, uint flags, string scope) { if (_hasReads) { - Call(_reads, addr, value, scope); + Call(_reads, addr, value, flags, scope); } } - public void CallWrites(uint addr, uint value, string scope) + public void CallWrites(uint addr, uint value, uint flags, string scope) { if (_hasWrites) { - Call(_writes, addr, value, scope); + Call(_writes, addr, value, flags, scope); } } - public void CallExecutes(uint addr, uint value, string scope) + public void CallExecutes(uint addr, uint value, uint flags, string scope) { if (_hasExecutes) { - Call(_execs, addr, value, scope); + Call(_execs, addr, value, flags, scope); } } @@ -136,7 +155,7 @@ namespace BizHawk.Emulation.Common return (_hasReads != hadReads || _hasWrites != hadWrites || _hasExecutes != hadExecutes); } - private int RemoveInternal(Action action) + private int RemoveInternal(MemoryCallbackDelegate action) { var readsToRemove = _reads.Where(imc => imc.Callback == action).ToList(); var writesToRemove = _writes.Where(imc => imc.Callback == action).ToList(); @@ -160,7 +179,7 @@ namespace BizHawk.Emulation.Common return readsToRemove.Count + writesToRemove.Count + execsToRemove.Count; } - public void Remove(Action action) + public void Remove(MemoryCallbackDelegate action) { if (RemoveInternal(action) > 0) { @@ -171,7 +190,7 @@ namespace BizHawk.Emulation.Common } } - public void RemoveAll(IEnumerable> actions) + public void RemoveAll(IEnumerable actions) { bool changed = false; foreach (var action in actions) @@ -286,7 +305,7 @@ namespace BizHawk.Emulation.Common public class MemoryCallback : IMemoryCallback { - public MemoryCallback(string scope, MemoryCallbackType type, string name, Action callback, uint? address, uint? mask) + public MemoryCallback(string scope, MemoryCallbackType type, string name, MemoryCallbackDelegate callback, uint? address, uint? mask) { if (type == MemoryCallbackType.Execute && !address.HasValue) { @@ -303,7 +322,7 @@ namespace BizHawk.Emulation.Common public MemoryCallbackType Type { get; } public string Name { get; } - public Action Callback { get; } + public MemoryCallbackDelegate Callback { get; } public uint? Address { get; } public uint? AddressMask { get; } public string Scope { get; } diff --git a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs index 24cee31137..90d1b36369 100644 --- a/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Interfaces/IMemoryCallbackSystem.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Common { + + public delegate void MemoryCallbackDelegate(uint address, uint value, uint flags); + /// /// This is a property of , and defines the means by which a client /// gets and sets memory callbacks in the core. A memory callback should fire any time memory is @@ -61,35 +64,23 @@ namespace BizHawk.Emulation.Common void Add(IMemoryCallback callback); /// - /// Executes all Read callbacks for the given address and domain + /// Executes all matching callbacks for the given address and domain /// /// The address to check for callbacks + /// The value contained (or written to) addr + /// The callback flags relevant to this access /// The scope that the address pertains to. Must be a value in - void CallReads(uint addr, uint value, string scope); - - /// - /// Executes all Write callbacks for the given address and domain - /// - /// The address to check for callbacks - /// The scope that the address pertains to. Must be a value in - void CallWrites(uint addr, uint value, string scope); - - /// - /// Executes all Execute callbacks for the given address and domain - /// - /// The address to check for callbacks - /// The scope that the address pertains to. Must be a value in - void CallExecutes(uint addr, uint value, string scope); + void CallMemoryCallbacks(uint addr, uint value, uint flags, string scope); /// /// Removes the given callback from the list /// - void Remove(Action action); + void Remove(MemoryCallbackDelegate action); /// /// Removes the given callbacks from the list /// - void RemoveAll(IEnumerable> actions); + void RemoveAll(IEnumerable actions); /// /// Removes all read,write, and execute callbacks @@ -111,7 +102,7 @@ namespace BizHawk.Emulation.Common { MemoryCallbackType Type { get; } string Name { get; } - Action Callback { get; } + MemoryCallbackDelegate Callback { get; } uint? Address { get; } uint? AddressMask { get; } string Scope { get; } @@ -121,4 +112,20 @@ namespace BizHawk.Emulation.Common { Read, Write, Execute } + + [Flags] + public enum MemoryCallbackFlags : uint + { + SizeUnknown = 0x00 << 16, + SizeByte = 0x01 << 16, + SizeWord = 0x02 << 16, + SizeLong = 0x03 << 16, + AccessUnknown = 0x00 << 12, + AccessRead = 0x01 << 12, + AccessWrite = 0x02 << 12, + AccessExecute = 0x04 << 12, + CPUUnknown = 0x00 << 8, + CPUZero = 0x01 << 8, + DomainUnknown = 0x00, + } } diff --git a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs index 8d36295e3f..dcaa1b7cc7 100644 --- a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.Execute.cs @@ -192,7 +192,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 if (MemoryCallbacks != null) { - MemoryCallbacks.CallExecutes(RegisterPC, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(RegisterPC, 0, flags, "System Bus"); } switch (opcode) diff --git a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs index 5f6c87ef66..a8f7d659f3 100644 --- a/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs +++ b/BizHawk.Emulation.Cores/CPUs/CP1610/CP1610.cs @@ -31,7 +31,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 { if (MemoryCallbacks != null && !peek) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } return ReadMemory(addr, peek); @@ -41,7 +42,8 @@ namespace BizHawk.Emulation.Cores.Components.CP1610 { if (MemoryCallbacks != null && !poke) { - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); } WriteMemory(addr, value, poke); diff --git a/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs b/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs index 09328c92df..cfc1db3d95 100644 --- a/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/HuC6280/Execute.cs @@ -60,7 +60,7 @@ namespace BizHawk.Emulation.Cores.Components.H6280 LagIFlag = FlagI; if (Debug) Logger(State()); - MemoryCallbacks.CallExecutes(PC, 0, "System Bus"); + MemoryCallbacks.CallMemoryCallbacks(PC, 0, (uint)MemoryCallbackFlags.AccessExecute, "System Bus"); if (CDL != null && CDL.Active) CDLOpcode(); diff --git a/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs b/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs index 6f95f789ae..3d6904c695 100644 --- a/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs +++ b/BizHawk.Emulation.Cores/CPUs/HuC6280/HuC6280.cs @@ -230,7 +230,8 @@ namespace BizHawk.Emulation.Cores.Components.H6280 { byte page = MPR[address >> 13]; var result = ReadMemory21((page << 13) | (address & 0x1FFF)); - MemoryCallbacks.CallReads(address, result, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(address, result, flags, "System Bus"); return result; } @@ -238,7 +239,8 @@ namespace BizHawk.Emulation.Cores.Components.H6280 { byte page = MPR[address >> 13]; WriteMemory21((page << 13) | (address & 0x1FFF), value); - MemoryCallbacks.CallWrites(address, value, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(address, value, flags, "System Bus"); } private ushort ReadWord(ushort address) diff --git a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs index 9d35c23ea2..45eca4f1b9 100644 --- a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs +++ b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs @@ -183,9 +183,21 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII private void SetCallbacks() { - _machine.Memory.ReadCallback = (addr) => MemoryCallbacks.CallReads(addr, 0, "System Bus"); - _machine.Memory.WriteCallback = (addr) => MemoryCallbacks.CallWrites(addr, 0, "System Bus"); - _machine.Memory.ExecuteCallback = (addr) => MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + _machine.Memory.ReadCallback = (addr) => + { + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }; + _machine.Memory.WriteCallback = (addr) => + { + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }; + _machine.Memory.ExecuteCallback = (addr) => + { + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }; _machine.Memory.InputCallback = InputCallbacks.Call; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs index 199a2ea393..bef82b1590 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.Core.cs @@ -160,7 +160,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 _mapper.Bit13 = addr.Bit(13); var temp = _mapper.ReadMemory((ushort)(addr & 0x1FFF)); _tia.BusState = temp; - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + var flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); return temp; } @@ -180,8 +181,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 } _mapper.WriteMemory((ushort)(addr & 0x1FFF), value); - - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + var flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); } internal void PokeMemory(ushort addr, byte value) @@ -191,7 +192,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + var flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } private void RebootCore() diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs index cdf8024739..9d792e3d31 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs @@ -291,7 +291,8 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } private void Reset_Mapper(string m) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs index fc8108ce99..7f871dc7a4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/MemoryMap.cs @@ -20,7 +20,8 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk { public byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(Common.MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); if ((addr & 0xFCE0) == 0) { @@ -98,7 +99,8 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk public void WriteMemory(ushort addr, byte value) { - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + uint flags = (uint)(Common.MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); if ((addr & 0xFCE0) == 0) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs index 3e9493c92b..33fc348968 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs @@ -168,9 +168,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA void InitCallbacks() { padcb = new LibVBANext.StandardCallback(() => InputCallbacks.Call()); - fetchcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallExecutes(addr, 0, "System Bus")); - readcb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallReads(addr, 0, "System Bus")); - writecb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallWrites(addr, 0, "System Bus")); + fetchcb = new LibVBANext.AddressCallback((addr) => { + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }); + readcb = new LibVBANext.AddressCallback((addr) => + { + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }); + writecb = new LibVBANext.AddressCallback((addr) => + { + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); + }); tracecb = new LibVBANext.TraceCallback((addr, opcode) => Tracer.Put(Trace(addr, opcode))); _inputCallbacks.ActiveChanged += SyncPadCallback; _memorycallbacks.ActiveChanged += SyncMemoryCallbacks; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index efe4d40e05..9d9242bf7b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -296,7 +296,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } private void Setup_Mapper() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs index fa546bb745..a3a4d1b2db 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/MemoryMap.cs @@ -29,7 +29,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { public byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); addr_access = addr; if (ppu.DMA_start) @@ -157,7 +158,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public void WriteMemory(ushort addr, byte value) { - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); addr_access = addr; if (ppu.DMA_start) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index 6b6382d4b6..4ef7f815e0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -95,8 +95,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public bool LinkConnected { get; private set; } private void ExecFetch(ushort addr) - { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + { + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs index 1006903e43..17e1041253 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IDebuggable.cs @@ -59,19 +59,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy private void ReadCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallReads(address, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(address, 0, flags, "System Bus"); } private void WriteCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallWrites(address, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(address, 0, flags,"System Bus"); } private void ExecCallback(uint address, ulong cycleOffset) { callbackCycleCount = _cycleCount + cycleOffset; - MemoryCallbacks.CallExecutes(address, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(address, 0, flags, "System Bus"); } /// diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs index 1f89a92ece..6d56b3e7da 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs @@ -752,19 +752,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi break; if (event_breakpoint) { + MemoryCallbackFlags flags = 0; switch (_breakparams._type) { case BreakType.Read: - _breakparams._mcs.CallReads(_breakparams._addr, 0, "System Bus"); + flags |= MemoryCallbackFlags.AccessRead; break; case BreakType.Write: - _breakparams._mcs.CallWrites(_breakparams._addr, 0, "System Bus"); + flags |= MemoryCallbackFlags.AccessWrite; break; case BreakType.Execute: - _breakparams._mcs.CallExecutes(_breakparams._addr, 0, "System Bus"); + flags |= MemoryCallbackFlags.AccessExecute; break; } + _breakparams._mcs.CallMemoryCallbacks(_breakparams._addr, 0, (uint)flags, "System Bus"); + event_breakpoint = false; Resume(); continue; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 72fa925abd..2642787ef7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -916,7 +916,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.CPUZero | MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } public byte ReadMemory(ushort addr) @@ -966,7 +967,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } } - MemoryCallbacks.CallReads(addr, ret, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.CPUZero | MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, ret, flags, "System Bus"); DB = ret; return ret; @@ -1013,7 +1015,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES Board.WritePRG(addr - 0x8000, value); } - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.CPUZero | MemoryCallbackFlags.AccessWrite | MemoryCallbackFlags.SizeByte); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); } // the palette for each VS game needs to be chosen explicitly since there are 6 different ones. diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index dbd655cc9a..c65360f4dd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -364,7 +364,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ReadHook(uint addr) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -372,7 +373,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ExecHook(uint addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -380,7 +382,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void WriteHook(uint addr, byte val) { - MemoryCallbacks.CallWrites(addr, val, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, val, flags, "System Bus"); // we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point // EDIT: for now, theres some IPC re-entrancy problem // RefreshMemoryCallbacks(); @@ -388,17 +391,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES private void ReadHook_SMP(uint addr) { - MemoryCallbacks.CallReads(addr, 0, "SMP"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "SMP"); } private void ExecHook_SMP(uint addr) { - MemoryCallbacks.CallExecutes(addr, 0, "SMP"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "SMP"); } private void WriteHook_SMP(uint addr, byte val) { - MemoryCallbacks.CallWrites(addr, val, "SMP"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, val, flags, "SMP"); } private enum LoadParamType diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 6ae3dc1d52..0487bd3f2a 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -72,8 +72,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk private readonly ITraceable _tracer; private void ExecFetch(ushort addr) - { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + { + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } #region ISettable diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs index 5430c859de..9872272391 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs @@ -283,7 +283,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem private byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); return ReadMemoryMapper(addr); } @@ -292,7 +293,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem { WriteMemoryMapper(addr, value); - MemoryCallbacks.CallWrites(addr, value, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); } private byte FetchMemory(ushort addr) @@ -302,7 +304,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem private void OnExecMemory(ushort addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } /// diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs index dd895b4cb4..ea17bf2374 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IDebuggable.cs @@ -61,9 +61,21 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx private void InitMemCallbacks() { - ExecCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallExecutes(a, 0, "M68K BUS")); - ReadCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallReads(a, 0, "M68K BUS")); - WriteCallback = new LibGPGX.mem_cb(a => MemoryCallbacks.CallWrites(a, 0, "M68K BUS")); + ExecCallback = new LibGPGX.mem_cb(a => + { + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(a, 0, flags, "M68K BUS"); + }); + ReadCallback = new LibGPGX.mem_cb(a => + { + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(a, 0, flags, "M68K BUS"); + }); + WriteCallback = new LibGPGX.mem_cb(a => + { + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(a, 0, flags, "M68K BUS"); + }); _memoryCallbacks.ActiveChanged += RefreshMemCallbacks; } diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index 7c6717e04c..29bdbab675 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx Header = "M68K: PC, machine code, mnemonic, operands, registers (D0-D7, A0-A7, SR, USP), flags (XNZVC)"; } - protected override void TraceFromCallback(uint addr, uint value) + protected override void TraceFromCallback(uint addr, uint value, uint flags) { var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index 06f3145933..6e7041d8c7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -880,18 +880,20 @@ namespace BizHawk.Emulation.Cores.Sony.PSX void ShockMemCallback(uint address, OctoshockDll.eShockMemCb type, uint size, uint value) { + MemoryCallbackFlags flags = 0; switch (type) { - case OctoshockDll.eShockMemCb.Read: - MemoryCallbacks.CallReads(address, value, "System Bus"); + case OctoshockDll.eShockMemCb.Read: + flags |= MemoryCallbackFlags.AccessRead; break; case OctoshockDll.eShockMemCb.Write: - MemoryCallbacks.CallWrites(address, value, "System Bus"); + flags |= MemoryCallbackFlags.AccessWrite; break; case OctoshockDll.eShockMemCb.Execute: - MemoryCallbacks.CallExecutes(address, value, "System Bus"); + flags |= MemoryCallbackFlags.AccessExecute; break; } + MemoryCallbacks.CallMemoryCallbacks(address, value, (uint)flags, "System Bus"); } void InitMemCallbacks() diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index 5fcb14f2a8..b64d3bc70f 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -142,15 +142,18 @@ namespace BizHawk.Emulation.Cores.WonderSwan void ReadCallback(uint addr) { - MemoryCallbacks.CallReads(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessRead); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } void WriteCallback(uint addr) { - MemoryCallbacks.CallWrites(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessWrite); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } void ExecCallback(uint addr) { - MemoryCallbacks.CallExecutes(addr, 0, "System Bus"); + uint flags = (uint)(MemoryCallbackFlags.AccessExecute); + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } void ButtonCallback() { From a21297f16a480d6b19ad84b71924be84350395d2 Mon Sep 17 00:00:00 2001 From: Brian Armstrong Date: Thu, 6 Jun 2019 02:14:09 -0700 Subject: [PATCH 119/138] more flags --- BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs | 6 ++++-- BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs | 3 ++- .../Consoles/Sega/GGHawkLink/GGHawkLink.cs | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs index dc94847b60..3d28d0d5e6 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/MemoryMap.cs @@ -20,7 +20,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex { public byte ReadMemory(ushort addr) { - MemoryCallbacks.CallReads(addr, "System Bus"); + uint flags = (uint)MemoryCallbackFlags.AccessRead; + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); if (addr < 0x8000) { @@ -54,7 +55,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex public void WriteMemory(ushort addr, byte value) { - MemoryCallbacks.CallWrites(addr, "System Bus"); + uint flags = (uint)MemoryCallbackFlags.AccessWrite; + MemoryCallbacks.CallMemoryCallbacks(addr, value, flags, "System Bus"); if (addr < 0x8000) { diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs index 442924488f..6e297f9b6a 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs @@ -123,7 +123,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + uint flags = (uint)MemoryCallbackFlags.AccessExecute; + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } private void Setup_Mapper() diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs index 1401820939..9f58497577 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs @@ -90,7 +90,8 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink private void ExecFetch(ushort addr) { - MemoryCallbacks.CallExecutes(addr, "System Bus"); + uint flags = (uint)MemoryCallbackFlags.AccessExecute; + MemoryCallbacks.CallMemoryCallbacks(addr, 0, flags, "System Bus"); } } } From 1ac27e3c25e8d75f6467140775a673384d821fdc Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 9 Jun 2019 13:39:46 +0300 Subject: [PATCH 120/138] update mgba to 0.7.2 might need some fixing --- mgba | 2 +- output/dll/mgba.dll | Bin 814080 -> 964608 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mgba b/mgba index db0041340f..2eab773655 160000 --- a/mgba +++ b/mgba @@ -1 +1 @@ -Subproject commit db0041340ff260424f38772df4f286fc3907c1c8 +Subproject commit 2eab7736554ef3f0ec3e8327f6bedd92367755bf diff --git a/output/dll/mgba.dll b/output/dll/mgba.dll index 0e1b57716ae68c2466e61941e5df9689836ae9b3..67b010a87f84e35d2f540fedd88158e0aca553f2 100644 GIT binary patch literal 964608 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

k?s=x@q7{4z?4mV%BRI5tSfF)UNW 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 yTaY3=^OuT& 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 z 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

J(Z_3E@}S06m=@98u*jmO%D! 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 P%pepbWK_s}%wPWoVoZu= From f5bcdc4abaf878387bb1f5fe415c221cf23b585c Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 9 Jun 2019 20:34:14 +0300 Subject: [PATCH 121/138] fix #1513 OSD info on branch hover is mandatory, so I'm not removing it. drawing the branch OSD-framebuffer on the emulator screen is barely possible without butchering everything, so I'm not doing it. instead, keep both core and client framebuffers and use them where they make sense: osd FB shows up on hover, core FB goes to emulator screen on branch load. --- BizHawk.Client.Common/BinarySaveStates.cs | 2 + .../movie/tasproj/TasBranch.cs | 20 +- BizHawk.Client.EmuHawk/MainForm.cs | 2 +- .../tools/TAStudio/BookmarksBranchesBox.cs | 3 +- .../tools/TAStudio/ScreenshotForm.cs | 218 +++++++++--------- 5 files changed, 133 insertions(+), 112 deletions(-) diff --git a/BizHawk.Client.Common/BinarySaveStates.cs b/BizHawk.Client.Common/BinarySaveStates.cs index baa4b327ae..d2fd35e270 100644 --- a/BizHawk.Client.Common/BinarySaveStates.cs +++ b/BizHawk.Client.Common/BinarySaveStates.cs @@ -60,6 +60,8 @@ namespace BizHawk.Client.Common public static BinaryStateLump BranchInputLog { get; private set; } [Name("Branches\\FrameBuffer", "bmp")] public static BinaryStateLump BranchFrameBuffer { get; private set; } + [Name("Branches\\CoreFrameBuffer", "bmp")] + public static BinaryStateLump BranchCoreFrameBuffer { get; private set; } [Name("Branches\\LagLog", "bin")] public static BinaryStateLump BranchLagLog { get; private set; } [Name("Branches\\Header", "json")] diff --git a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs index 2eae586ab0..9e8d9e31a7 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs @@ -12,6 +12,7 @@ namespace BizHawk.Client.Common public int Frame { get; set; } public byte[] CoreData { get; set; } public IStringLog InputLog { get; set; } + public BitmapBuffer CoreFrameBuffer { get; set; } public BitmapBuffer OSDFrameBuffer { get; set; } public TasLagLog LagLog { get; set; } public TasMovieChangeLog ChangeLog { get; set; } @@ -50,6 +51,7 @@ namespace BizHawk.Client.Common var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); + var ncoreframebuffer = new IndexedStateLump(BinaryStateLump.BranchCoreFrameBuffer); var nlaglog = new IndexedStateLump(BinaryStateLump.BranchLagLog); var nmarkers = new IndexedStateLump(BinaryStateLump.BranchMarkers); var nusertext = new IndexedStateLump(BinaryStateLump.BranchUserText); @@ -86,6 +88,12 @@ namespace BizHawk.Client.Common QuickBmpFile.Save(vp, s, b.OSDFrameBuffer.Width, b.OSDFrameBuffer.Height); }); + bs.PutLump(ncoreframebuffer, delegate(Stream s) + { + var vp = new BitmapBufferVideoProvider(b.CoreFrameBuffer); + QuickBmpFile.Save(vp, s, b.CoreFrameBuffer.Width, b.CoreFrameBuffer.Height); + }); + bs.PutLump(nlaglog, delegate(BinaryWriter bw) { b.LagLog.Save(bw); @@ -105,6 +113,7 @@ namespace BizHawk.Client.Common ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); + ncoreframebuffer.Increment(); nlaglog.Increment(); nmarkers.Increment(); nusertext.Increment(); @@ -117,6 +126,7 @@ namespace BizHawk.Client.Common var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); + var ncoreframebuffer = new IndexedStateLump(BinaryStateLump.BranchCoreFrameBuffer); var nlaglog = new IndexedStateLump(BinaryStateLump.BranchLagLog); var nmarkers = new IndexedStateLump(BinaryStateLump.BranchMarkers); var nusertext = new IndexedStateLump(BinaryStateLump.BranchUserText); @@ -180,7 +190,14 @@ namespace BizHawk.Client.Common b.OSDFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.VideoBuffer); }); - bl.GetLump(nlaglog, true, delegate(BinaryReader br) + bl.GetLump(ncoreframebuffer, false, delegate(Stream s, long length) + { + var vp = new QuickBmpFile.LoadedBMP(); + QuickBmpFile.Load(vp, s); + b.CoreFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.VideoBuffer); + }); + + bl.GetLump(nlaglog, false, delegate(BinaryReader br) { b.LagLog = new TasLagLog(); b.LagLog.Load(br); @@ -217,6 +234,7 @@ namespace BizHawk.Client.Common ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); + ncoreframebuffer.Increment(); nlaglog.Increment(); nmarkers.Increment(); nusertext.Increment(); diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 6ec93e6d70..5bd423d1c3 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -2023,7 +2023,7 @@ namespace BizHawk.Client.EmuHawk } } - private BitmapBuffer MakeScreenshotImage() + public BitmapBuffer MakeScreenshotImage() { return GlobalWin.DisplayManager.RenderVideoProvider(_currentVideoProvider); } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index a163f97c2e..15602c210f 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -182,6 +182,7 @@ namespace BizHawk.Client.EmuHawk Frame = Tastudio.Emulator.Frame, CoreData = (byte[])(Tastudio.StatableEmulator.SaveStateBinary().Clone()), InputLog = Movie.InputLog.Clone(), + CoreFrameBuffer = GlobalWin.MainForm.MakeScreenshotImage(), OSDFrameBuffer = GlobalWin.MainForm.CaptureOSD(), LagLog = Movie.TasLagLog.Clone(), ChangeLog = new TasMovieChangeLog(Movie), @@ -203,7 +204,7 @@ namespace BizHawk.Client.EmuHawk var stateInfo = new KeyValuePair(branch.Frame, branch.CoreData); Tastudio.LoadState(stateInfo); Movie.TasStateManager.Capture(true); - QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.OSDFrameBuffer), Tastudio.VideoProvider); + QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider); if (Tastudio.Settings.OldControlSchemeForBranches && Tastudio.TasPlaybackBox.RecordingMode) Movie.Truncate(branch.Frame); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/ScreenshotForm.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/ScreenshotForm.cs index 65e407eb5f..3c765cb845 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/ScreenshotForm.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/ScreenshotForm.cs @@ -1,120 +1,120 @@ -using System.Drawing; -using System.Windows.Forms; - +using System.Drawing; +using System.Windows.Forms; + using BizHawk.Client.Common; // We pretend it's a tooltip kind of thing, so show only the actual contents // and avoid stealing forcus, while still being topmost // http://stackoverflow.com/a/25219399/2792852 // This is not an actual tooltip, because they can't reliably fade in and out with trasparency -namespace BizHawk.Client.EmuHawk -{ - public partial class ScreenshotForm : Form +namespace BizHawk.Client.EmuHawk +{ + public partial class ScreenshotForm : Form { private const int WS_EX_TOPMOST = 0x00000008; - private const int Interval = 40; + private const int Interval = 40; private const double AlphaStep = 0.125; - private readonly Timer _showTimer = new Timer(); - private readonly Timer _hideTimer = new Timer(); - - private TasBranch _branch; - private int _drawingHeight; - - new public Font Font; - new public int Padding; - new public string Text; - - public ScreenshotForm() - { - InitializeComponent(); - - var fontSize = 10; - var fontStyle = FontStyle.Regular; - Font = new Font(FontFamily.GenericMonospace, fontSize, fontStyle); - _drawingHeight = 0; - Padding = 0; - Opacity = 0; - - _showTimer.Interval = Interval; - _showTimer.Tick += (sender, e) => - { - if ((Opacity += AlphaStep) >= 1) - { - _showTimer.Stop(); - } - }; - - _hideTimer.Interval = Interval; - _hideTimer.Tick += (sender, e) => - { - if ((Opacity -= AlphaStep) <= 0) - { - _hideTimer.Stop(); - Hide(); - } - }; - } - - public void UpdateValues(TasBranch branch, Point location , int width, int height, int padding) - { - _branch = branch; - Width = width; - Padding = padding; - _drawingHeight = height; - Text = _branch.UserText; - Location = location; - - if (Padding > 0) - { - Padding += 2; - } - - Height = _drawingHeight + Padding; - Refresh(); - } - - protected override void OnPaint(PaintEventArgs e) - { - _branch.OSDFrameBuffer.DiscardAlpha(); - var bitmap = _branch.OSDFrameBuffer.ToSysdrawingBitmap(); - e.Graphics.DrawImage(bitmap, new Rectangle(0, 0, Width, _drawingHeight)); - if (Padding > 0) - { - e.Graphics.DrawRectangle(new Pen(Brushes.Black), new Rectangle(new Point(0, _drawingHeight), new Size(Width - 1, Padding - 1))); - e.Graphics.DrawString(Text, Font, Brushes.Black, new Rectangle(2, _drawingHeight, Width - 2, Height)); - } - - base.OnPaint(e); - } - - public void FadeIn() - { - _showTimer.Stop(); - _hideTimer.Stop(); - _showTimer.Start(); - Show(); - } - - public void FadeOut() - { - _showTimer.Stop(); - _hideTimer.Stop(); - _hideTimer.Start(); - } - - // avoid stealing focus - protected override bool ShowWithoutActivation => true; - - protected override CreateParams CreateParams - { - get - { - CreateParams createParams = base.CreateParams; - createParams.ExStyle |= WS_EX_TOPMOST; - return createParams; - } - } - } -} + private readonly Timer _showTimer = new Timer(); + private readonly Timer _hideTimer = new Timer(); + + private TasBranch _branch; + private int _drawingHeight; + + new public Font Font; + new public int Padding; + new public string Text; + + public ScreenshotForm() + { + InitializeComponent(); + + var fontSize = 10; + var fontStyle = FontStyle.Regular; + Font = new Font(FontFamily.GenericMonospace, fontSize, fontStyle); + _drawingHeight = 0; + Padding = 0; + Opacity = 0; + + _showTimer.Interval = Interval; + _showTimer.Tick += (sender, e) => + { + if ((Opacity += AlphaStep) >= 1) + { + _showTimer.Stop(); + } + }; + + _hideTimer.Interval = Interval; + _hideTimer.Tick += (sender, e) => + { + if ((Opacity -= AlphaStep) <= 0) + { + _hideTimer.Stop(); + Hide(); + } + }; + } + + public void UpdateValues(TasBranch branch, Point location , int width, int height, int padding) + { + _branch = branch; + Width = width; + Padding = padding; + _drawingHeight = height; + Text = _branch.UserText; + Location = location; + + if (Padding > 0) + { + Padding += 2; + } + + Height = _drawingHeight + Padding; + Refresh(); + } + + protected override void OnPaint(PaintEventArgs e) + { + _branch.OSDFrameBuffer.DiscardAlpha(); + var bitmap = _branch.OSDFrameBuffer.ToSysdrawingBitmap(); + e.Graphics.DrawImage(bitmap, new Rectangle(0, 0, Width, _drawingHeight)); + if (Padding > 0) + { + e.Graphics.DrawRectangle(new Pen(Brushes.Black), new Rectangle(new Point(0, _drawingHeight), new Size(Width - 1, Padding - 1))); + e.Graphics.DrawString(Text, Font, Brushes.Black, new Rectangle(2, _drawingHeight, Width - 2, Height)); + } + + base.OnPaint(e); + } + + public void FadeIn() + { + _showTimer.Stop(); + _hideTimer.Stop(); + _showTimer.Start(); + Show(); + } + + public void FadeOut() + { + _showTimer.Stop(); + _hideTimer.Stop(); + _hideTimer.Start(); + } + + // avoid stealing focus + protected override bool ShowWithoutActivation => true; + + protected override CreateParams CreateParams + { + get + { + CreateParams createParams = base.CreateParams; + createParams.ExStyle |= WS_EX_TOPMOST; + return createParams; + } + } + } +} From 3d097e3f049525a90ccfbb7db7b0f9abc488b7cf Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Mon, 10 Jun 2019 19:09:26 +1000 Subject: [PATCH 122/138] Run jpegoptim on *.jpg and oxipng -so6 on *.png --- .../Resources/MoveBottom.png | Bin 3829 -> 209 bytes BizHawk.Client.EmuHawk/Resources/MoveTop.png | Bin 3829 -> 206 bytes .../Resources/courier16px_0.png | Bin 4424 -> 2943 bytes .../config/ControllerImages/C64Joystick.png | Bin 32397 -> 29327 bytes .../ControllerImages/GBA_Controller.png | Bin 45809 -> 45523 bytes .../ControllerImages/IntVController.png | Bin 75000 -> 74020 bytes .../config/ControllerImages/N64.png | Bin 64917 -> 63264 bytes .../ControllerImages/NES_Controller.png | Bin 17614 -> 17353 bytes .../config/ControllerImages/SMSController.png | Bin 70135 -> 65395 bytes .../ControllerImages/WonderSwanColor.png | Bin 192091 -> 145514 bytes .../ControllerImages/ZXSpectrumKeyboards.png | Bin 435119 -> 178527 bytes .../config/ControllerImages/psx_dualshock.png | Bin 85228 -> 71123 bytes BizHawk.Client.EmuHawk/images/AVI.png | Bin 1002 -> 929 bytes BizHawk.Client.EmuHawk/images/AddEdit.png | Bin 3416 -> 830 bytes .../images/AtariControllerIcon.png | Bin 735 -> 728 bytes BizHawk.Client.EmuHawk/images/AudioHS.png | Bin 686 -> 660 bytes BizHawk.Client.EmuHawk/images/Back.png | Bin 340 -> 339 bytes BizHawk.Client.EmuHawk/images/BackMore.png | Bin 451 -> 450 bytes BizHawk.Client.EmuHawk/images/Blank.png | Bin 155 -> 154 bytes BizHawk.Client.EmuHawk/images/Both.png | Bin 3591 -> 815 bytes BizHawk.Client.EmuHawk/images/Bug.png | Bin 385 -> 384 bytes BizHawk.Client.EmuHawk/images/C64Symbol.png | Bin 4007 -> 1082 bytes .../ControllerImages/AppleIIKeyboard.png | Bin 199114 -> 112878 bytes .../images/ControllerImages/C64Joystick.png | Bin 32397 -> 29590 bytes .../ControllerImages/GBA_Controller.png | Bin 45809 -> 45523 bytes .../ControllerImages/IntVController.png | Bin 75000 -> 74023 bytes .../images/ControllerImages/N64.png | Bin 64917 -> 63264 bytes .../ControllerImages/NES_Controller.png | Bin 17614 -> 17353 bytes .../images/ControllerImages/SMSController.png | Bin 70135 -> 65530 bytes .../ControllerImages/VBoyController.png | Bin 38450 -> 35374 bytes .../ControllerImages/WonderSwanColor.png | Bin 192091 -> 145140 bytes .../images/ControllerImages/psx_dualshock.png | Bin 85228 -> 71123 bytes .../images/CorpHawkSmall.png | Bin 1061 -> 958 bytes BizHawk.Client.EmuHawk/images/Cross.png | Bin 897 -> 844 bytes BizHawk.Client.EmuHawk/images/CutHS.png | Bin 588 -> 578 bytes BizHawk.Client.EmuHawk/images/Delete.png | Bin 154 -> 150 bytes BizHawk.Client.EmuHawk/images/ENE.png | Bin 567 -> 550 bytes BizHawk.Client.EmuHawk/images/ESE.png | Bin 628 -> 609 bytes BizHawk.Client.EmuHawk/images/Erase.png | Bin 612 -> 579 bytes BizHawk.Client.EmuHawk/images/Freeze.png | Bin 961 -> 942 bytes BizHawk.Client.EmuHawk/images/Fullscreen.png | Bin 761 -> 744 bytes .../images/GameController.png | Bin 836 -> 806 bytes BizHawk.Client.EmuHawk/images/Hack.png | Bin 667 -> 664 bytes BizHawk.Client.EmuHawk/images/HomeBrew.png | Bin 919 -> 868 bytes BizHawk.Client.EmuHawk/images/HotKeys.png | Bin 787 -> 751 bytes BizHawk.Client.EmuHawk/images/JumpTo.png | Bin 3167 -> 512 bytes BizHawk.Client.EmuHawk/images/LightOff.png | Bin 3276 -> 832 bytes BizHawk.Client.EmuHawk/images/LightOn.png | Bin 3596 -> 955 bytes BizHawk.Client.EmuHawk/images/Lua.png | Bin 2188 -> 2059 bytes BizHawk.Client.EmuHawk/images/NE.png | Bin 586 -> 583 bytes BizHawk.Client.EmuHawk/images/NNE.png | Bin 549 -> 544 bytes BizHawk.Client.EmuHawk/images/NNW.png | Bin 827 -> 823 bytes BizHawk.Client.EmuHawk/images/NW.png | Bin 546 -> 529 bytes BizHawk.Client.EmuHawk/images/Pause.png | Bin 3451 -> 886 bytes BizHawk.Client.EmuHawk/images/Play.png | Bin 3004 -> 382 bytes BizHawk.Client.EmuHawk/images/Previous.png | Bin 3087 -> 389 bytes BizHawk.Client.EmuHawk/images/QuickNes.png | Bin 666 -> 592 bytes BizHawk.Client.EmuHawk/images/Recent.png | Bin 3447 -> 907 bytes BizHawk.Client.EmuHawk/images/RecordHS.png | Bin 429 -> 358 bytes BizHawk.Client.EmuHawk/images/Refresh.png | Bin 500 -> 449 bytes .../images/RetroQuestion.png | Bin 3523 -> 775 bytes BizHawk.Client.EmuHawk/images/SE.png | Bin 623 -> 612 bytes BizHawk.Client.EmuHawk/images/SSE.png | Bin 663 -> 660 bytes BizHawk.Client.EmuHawk/images/SSW.png | Bin 723 -> 710 bytes BizHawk.Client.EmuHawk/images/SW.png | Bin 642 -> 629 bytes BizHawk.Client.EmuHawk/images/Save.png | Bin 1070 -> 862 bytes BizHawk.Client.EmuHawk/images/Scan.png | Bin 3668 -> 544 bytes BizHawk.Client.EmuHawk/images/ScrollTo.png | Bin 2897 -> 220 bytes BizHawk.Client.EmuHawk/images/Shark.png | Bin 3757 -> 1000 bytes BizHawk.Client.EmuHawk/images/Stop.png | Bin 3066 -> 441 bytes BizHawk.Client.EmuHawk/images/TAStudio.png | Bin 3136 -> 438 bytes BizHawk.Client.EmuHawk/images/ToolBox.png | Bin 3344 -> 665 bytes BizHawk.Client.EmuHawk/images/Translation.png | Bin 1084 -> 848 bytes BizHawk.Client.EmuHawk/images/Triangle.png | Bin 716 -> 711 bytes .../images/TruncateFromFile.png | Bin 3416 -> 849 bytes .../images/TruncateFromRW.png | Bin 3406 -> 710 bytes .../images/TurboFastForward.png | Bin 487 -> 397 bytes BizHawk.Client.EmuHawk/images/Unfreeze.png | Bin 1141 -> 982 bytes BizHawk.Client.EmuHawk/images/YellowLeft.png | Bin 340 -> 339 bytes BizHawk.Client.EmuHawk/images/camera.png | Bin 889 -> 872 bytes BizHawk.Client.EmuHawk/images/cheat.png | Bin 667 -> 647 bytes BizHawk.Client.EmuHawk/images/corphawk.jpg | Bin 27022 -> 26959 bytes BizHawk.Client.EmuHawk/images/dual.png | Bin 1346 -> 514 bytes BizHawk.Client.EmuHawk/images/gambatte.png | Bin 560 -> 535 bytes BizHawk.Client.EmuHawk/images/gba-icon.png | Bin 1331 -> 1327 bytes BizHawk.Client.EmuHawk/images/kitchensink.png | Bin 476 -> 336 bytes BizHawk.Client.EmuHawk/images/monitor.png | Bin 17383 -> 16721 bytes BizHawk.Client.EmuHawk/images/pcb.png | Bin 239 -> 191 bytes BizHawk.Client.EmuHawk/images/reboot.png | Bin 3532 -> 1013 bytes BizHawk.Client.EmuHawk/images/redo.png | Bin 672 -> 662 bytes BizHawk.Client.EmuHawk/images/search.png | Bin 3384 -> 884 bytes BizHawk.Client.EmuHawk/images/sms-icon.png | Bin 402 -> 354 bytes BizHawk.Client.EmuHawk/images/snes9x.png | Bin 232 -> 229 bytes .../images/tastudio/icon_anchor.png | Bin 2836 -> 203 bytes .../images/tastudio/icon_anchor_lag.png | Bin 2831 -> 203 bytes .../images/tastudio/icon_marker.png | Bin 2831 -> 203 bytes .../images/tastudio/ts_h_arrow_blue.png | Bin 122 -> 120 bytes .../images/tastudio/ts_h_arrow_green.png | Bin 135 -> 126 bytes .../images/tastudio/ts_h_arrow_green_blue.png | Bin 149 -> 140 bytes .../images/tastudio/ts_h_piano_00.png | Bin 116 -> 114 bytes .../images/tastudio/ts_h_piano_00_blue.png | Bin 140 -> 134 bytes .../images/tastudio/ts_h_piano_00_green.png | Bin 143 -> 135 bytes .../tastudio/ts_h_piano_00_green_blue.png | Bin 152 -> 143 bytes .../images/tastudio/ts_h_piano_01.png | Bin 118 -> 112 bytes .../images/tastudio/ts_h_piano_01_blue.png | Bin 139 -> 135 bytes .../images/tastudio/ts_h_piano_01_green.png | Bin 142 -> 141 bytes .../tastudio/ts_h_piano_01_green_blue.png | Bin 156 -> 148 bytes .../images/tastudio/ts_h_piano_02_blue.png | Bin 145 -> 143 bytes .../images/tastudio/ts_h_piano_02_green.png | Bin 151 -> 147 bytes .../tastudio/ts_h_piano_02_green_blue.png | Bin 163 -> 160 bytes .../images/tastudio/ts_h_piano_03.png | Bin 122 -> 121 bytes .../images/tastudio/ts_h_piano_03_blue.png | Bin 142 -> 139 bytes .../images/tastudio/ts_h_piano_03_green.png | Bin 147 -> 146 bytes .../tastudio/ts_h_piano_03_green_blue.png | Bin 160 -> 155 bytes .../images/tastudio/ts_h_piano_04.png | Bin 124 -> 121 bytes .../images/tastudio/ts_h_piano_04_blue.png | Bin 141 -> 138 bytes .../images/tastudio/ts_h_piano_04_green.png | Bin 146 -> 144 bytes .../tastudio/ts_h_piano_04_green_blue.png | Bin 161 -> 155 bytes .../images/tastudio/ts_h_piano_05.png | Bin 124 -> 118 bytes .../images/tastudio/ts_h_piano_05_blue.png | Bin 143 -> 138 bytes .../images/tastudio/ts_h_piano_05_green.png | Bin 146 -> 144 bytes .../tastudio/ts_h_piano_05_green_blue.png | Bin 159 -> 156 bytes .../images/tastudio/ts_h_piano_06.png | Bin 122 -> 120 bytes .../images/tastudio/ts_h_piano_06_blue.png | Bin 143 -> 139 bytes .../images/tastudio/ts_h_piano_07.png | Bin 128 -> 127 bytes .../images/tastudio/ts_h_piano_07_blue.png | Bin 143 -> 142 bytes .../images/tastudio/ts_h_piano_07_green.png | Bin 150 -> 146 bytes .../tastudio/ts_h_piano_07_green_blue.png | Bin 163 -> 159 bytes .../images/tastudio/ts_h_piano_08.png | Bin 120 -> 117 bytes .../images/tastudio/ts_h_piano_08_blue.png | Bin 141 -> 138 bytes .../tastudio/ts_h_piano_08_green_blue.png | Bin 156 -> 153 bytes .../images/tastudio/ts_h_piano_09.png | Bin 121 -> 120 bytes .../images/tastudio/ts_h_piano_09_blue.png | Bin 142 -> 139 bytes .../tastudio/ts_h_piano_09_green_blue.png | Bin 157 -> 151 bytes .../images/tastudio/ts_h_piano_10.png | Bin 130 -> 123 bytes .../images/tastudio/ts_h_piano_10_blue.png | Bin 140 -> 135 bytes .../images/tastudio/ts_h_piano_10_green.png | Bin 155 -> 147 bytes .../tastudio/ts_h_piano_10_green_blue.png | Bin 160 -> 159 bytes .../images/tastudio/ts_h_piano_11.png | Bin 126 -> 119 bytes .../images/tastudio/ts_h_piano_11_blue.png | Bin 139 -> 137 bytes .../images/tastudio/ts_h_piano_11_green.png | Bin 152 -> 147 bytes .../tastudio/ts_h_piano_11_green_blue.png | Bin 161 -> 159 bytes .../images/tastudio/ts_h_piano_12.png | Bin 141 -> 138 bytes .../images/tastudio/ts_h_piano_12_blue.png | Bin 151 -> 147 bytes .../images/tastudio/ts_h_piano_13.png | Bin 138 -> 134 bytes .../images/tastudio/ts_h_piano_13_blue.png | Bin 144 -> 142 bytes .../images/tastudio/ts_h_piano_14.png | Bin 135 -> 128 bytes .../images/tastudio/ts_h_piano_14_blue.png | Bin 143 -> 142 bytes .../images/tastudio/ts_h_piano_15.png | Bin 134 -> 127 bytes .../images/tastudio/ts_h_piano_15_blue.png | Bin 145 -> 142 bytes .../images/tastudio/ts_h_piano_16.png | Bin 135 -> 129 bytes .../images/tastudio/ts_h_piano_16_blue.png | Bin 144 -> 141 bytes .../images/tastudio/ts_h_piano_16_green.png | Bin 162 -> 160 bytes .../images/tastudio/ts_h_piano_17.png | Bin 139 -> 134 bytes .../images/tastudio/ts_h_piano_17_blue.png | Bin 149 -> 146 bytes .../images/tastudio/ts_h_piano_18.png | Bin 132 -> 126 bytes .../images/tastudio/ts_h_piano_18_blue.png | Bin 141 -> 139 bytes .../images/tastudio/ts_h_piano_18_green.png | Bin 158 -> 155 bytes .../images/tastudio/ts_h_piano_19.png | Bin 136 -> 128 bytes .../images/tastudio/ts_h_piano_19_blue.png | Bin 143 -> 142 bytes .../images/tastudio/ts_h_piano_19_green.png | Bin 158 -> 154 bytes .../images/tastudio/ts_v_arrow_blue.png | Bin 137 -> 128 bytes .../images/tastudio/ts_v_arrow_green.png | Bin 124 -> 115 bytes .../images/tastudio/ts_v_arrow_green_blue.png | Bin 156 -> 145 bytes .../images/tastudio/ts_v_piano_00.png | Bin 122 -> 115 bytes .../images/tastudio/ts_v_piano_00_blue.png | Bin 154 -> 148 bytes .../images/tastudio/ts_v_piano_00_green.png | Bin 129 -> 128 bytes .../tastudio/ts_v_piano_00_green_blue.png | Bin 168 -> 156 bytes .../images/tastudio/ts_v_piano_01.png | Bin 118 -> 113 bytes .../images/tastudio/ts_v_piano_01_blue.png | Bin 155 -> 143 bytes .../images/tastudio/ts_v_piano_01_green.png | Bin 132 -> 128 bytes .../tastudio/ts_v_piano_01_green_blue.png | Bin 166 -> 155 bytes .../images/tastudio/ts_v_piano_02_blue.png | Bin 163 -> 154 bytes .../images/tastudio/ts_v_piano_02_green.png | Bin 140 -> 134 bytes .../tastudio/ts_v_piano_02_green_blue.png | Bin 168 -> 161 bytes .../images/tastudio/ts_v_piano_03.png | Bin 126 -> 125 bytes .../images/tastudio/ts_v_piano_03_blue.png | Bin 161 -> 153 bytes .../images/tastudio/ts_v_piano_03_green.png | Bin 132 -> 130 bytes .../tastudio/ts_v_piano_03_green_blue.png | Bin 170 -> 159 bytes .../images/tastudio/ts_v_piano_04.png | Bin 130 -> 123 bytes .../images/tastudio/ts_v_piano_04_blue.png | Bin 157 -> 147 bytes .../images/tastudio/ts_v_piano_04_green.png | Bin 134 -> 131 bytes .../tastudio/ts_v_piano_04_green_blue.png | Bin 167 -> 154 bytes .../images/tastudio/ts_v_piano_05.png | Bin 125 -> 121 bytes .../images/tastudio/ts_v_piano_05_blue.png | Bin 157 -> 150 bytes .../images/tastudio/ts_v_piano_05_green.png | Bin 133 -> 131 bytes .../tastudio/ts_v_piano_05_green_blue.png | Bin 169 -> 157 bytes .../images/tastudio/ts_v_piano_06.png | Bin 124 -> 122 bytes .../images/tastudio/ts_v_piano_06_blue.png | Bin 158 -> 152 bytes .../images/tastudio/ts_v_piano_06_green.png | Bin 131 -> 130 bytes .../tastudio/ts_v_piano_06_green_blue.png | Bin 170 -> 157 bytes .../images/tastudio/ts_v_piano_07_blue.png | Bin 162 -> 152 bytes .../images/tastudio/ts_v_piano_07_green.png | Bin 138 -> 133 bytes .../tastudio/ts_v_piano_07_green_blue.png | Bin 166 -> 163 bytes .../images/tastudio/ts_v_piano_08.png | Bin 124 -> 119 bytes .../images/tastudio/ts_v_piano_08_blue.png | Bin 156 -> 150 bytes .../images/tastudio/ts_v_piano_08_green.png | Bin 132 -> 128 bytes .../tastudio/ts_v_piano_08_green_blue.png | Bin 168 -> 159 bytes .../images/tastudio/ts_v_piano_09.png | Bin 125 -> 121 bytes .../images/tastudio/ts_v_piano_09_blue.png | Bin 159 -> 152 bytes .../images/tastudio/ts_v_piano_09_green.png | Bin 132 -> 129 bytes .../tastudio/ts_v_piano_09_green_blue.png | Bin 169 -> 167 bytes .../images/tastudio/ts_v_piano_10.png | Bin 130 -> 123 bytes .../images/tastudio/ts_v_piano_10_blue.png | Bin 148 -> 145 bytes .../images/tastudio/ts_v_piano_10_green.png | Bin 151 -> 142 bytes .../tastudio/ts_v_piano_10_green_blue.png | Bin 169 -> 160 bytes .../images/tastudio/ts_v_piano_11.png | Bin 127 -> 120 bytes .../images/tastudio/ts_v_piano_11_blue.png | Bin 149 -> 140 bytes .../images/tastudio/ts_v_piano_11_green.png | Bin 149 -> 140 bytes .../tastudio/ts_v_piano_11_green_blue.png | Bin 172 -> 156 bytes .../images/tastudio/ts_v_piano_12_blue.png | Bin 155 -> 151 bytes .../images/tastudio/ts_v_piano_12_green.png | Bin 164 -> 157 bytes .../tastudio/ts_v_piano_12_green_blue.png | Bin 171 -> 169 bytes .../images/tastudio/ts_v_piano_13.png | Bin 140 -> 136 bytes .../images/tastudio/ts_v_piano_13_blue.png | Bin 154 -> 150 bytes .../images/tastudio/ts_v_piano_13_green.png | Bin 160 -> 154 bytes .../tastudio/ts_v_piano_13_green_blue.png | Bin 172 -> 169 bytes .../images/tastudio/ts_v_piano_14.png | Bin 139 -> 132 bytes .../images/tastudio/ts_v_piano_14_blue.png | Bin 150 -> 145 bytes .../images/tastudio/ts_v_piano_14_green.png | Bin 157 -> 150 bytes .../tastudio/ts_v_piano_14_green_blue.png | Bin 167 -> 160 bytes .../images/tastudio/ts_v_piano_15.png | Bin 135 -> 128 bytes .../images/tastudio/ts_v_piano_15_blue.png | Bin 152 -> 147 bytes .../images/tastudio/ts_v_piano_15_green.png | Bin 157 -> 151 bytes .../tastudio/ts_v_piano_15_green_blue.png | Bin 172 -> 167 bytes .../images/tastudio/ts_v_piano_16.png | Bin 136 -> 129 bytes .../images/tastudio/ts_v_piano_16_blue.png | Bin 153 -> 150 bytes .../images/tastudio/ts_v_piano_16_green.png | Bin 154 -> 152 bytes .../tastudio/ts_v_piano_16_green_blue.png | Bin 173 -> 168 bytes .../images/tastudio/ts_v_piano_17.png | Bin 139 -> 134 bytes .../images/tastudio/ts_v_piano_17_blue.png | Bin 154 -> 149 bytes .../images/tastudio/ts_v_piano_17_green.png | Bin 158 -> 154 bytes .../tastudio/ts_v_piano_17_green_blue.png | Bin 173 -> 162 bytes .../images/tastudio/ts_v_piano_18.png | Bin 133 -> 126 bytes .../images/tastudio/ts_v_piano_18_blue.png | Bin 150 -> 147 bytes .../images/tastudio/ts_v_piano_18_green.png | Bin 152 -> 147 bytes .../tastudio/ts_v_piano_18_green_blue.png | Bin 172 -> 167 bytes .../images/tastudio/ts_v_piano_19.png | Bin 134 -> 129 bytes .../images/tastudio/ts_v_piano_19_blue.png | Bin 154 -> 149 bytes .../images/tastudio/ts_v_piano_19_green.png | Bin 156 -> 150 bytes .../tastudio/ts_v_piano_19_green_blue.png | Bin 172 -> 169 bytes BizHawk.Client.EmuHawk/images/textdoc.png | Bin 2988 -> 251 bytes BizHawk.Client.EmuHawk/images/thumbsdown.png | Bin 556 -> 452 bytes BizHawk.Client.EmuHawk/images/tvIcon.png | Bin 565 -> 483 bytes BizHawk.Client.EmuHawk/images/undo.png | Bin 685 -> 666 bytes BizHawk.Client.EmuHawk/images/user_blue.png | Bin 4987 -> 1894 bytes .../images/whiteTriDown.png | Bin 3230 -> 588 bytes .../images/whiteTriLeft.png | Bin 3270 -> 555 bytes .../images/whiteTriRight.png | Bin 3280 -> 585 bytes BizHawk.Client.EmuHawk/images/whiteTriUp.png | Bin 3184 -> 563 bytes .../Resources/courier16px_0.png | Bin 4014 -> 2268 bytes BizHawk.Client.MultiHawk/images/Blank.png | Bin 155 -> 154 bytes BizHawk.Client.MultiHawk/images/CutHS.png | Bin 588 -> 578 bytes .../images/GameController.png | Bin 836 -> 806 bytes BizHawk.Client.MultiHawk/images/HotKeys.png | Bin 787 -> 751 bytes BizHawk.Client.MultiHawk/images/Pause.png | Bin 3451 -> 886 bytes BizHawk.Client.MultiHawk/images/Play.png | Bin 3004 -> 382 bytes BizHawk.Client.MultiHawk/images/Recent.png | Bin 3447 -> 907 bytes BizHawk.Client.MultiHawk/images/RecordHS.png | Bin 429 -> 358 bytes BizHawk.Client.MultiHawk/images/Save.png | Bin 1070 -> 857 bytes BizHawk.Client.MultiHawk/images/Scan.png | Bin 3668 -> 544 bytes BizHawk.Client.MultiHawk/images/Stop.png | Bin 3066 -> 441 bytes BizHawk.Client.MultiHawk/images/reboot.png | Bin 3532 -> 1013 bytes .../TestImages/courier16px_0.png | Bin 3074 -> 2268 bytes .../TestImages/flame1.jpg | Bin 11356 -> 10032 bytes .../TestImages/flame2.jpg | Bin 9812 -> 8459 bytes .../TestImages/flame3.jpg | Bin 7078 -> 6285 bytes .../TestImages/flame4.jpg | Bin 7622 -> 6607 bytes .../TestImages/flame5.jpg | Bin 7761 -> 6892 bytes 269 files changed, 0 insertions(+), 0 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Resources/MoveBottom.png b/BizHawk.Client.EmuHawk/Resources/MoveBottom.png index 7befbdd79546a8ad8512beddfa777227639077b0..b79e61272ad004f0acd96bc9ee6dcb02ab822ab8 100644 GIT binary patch delta 132 zcmV-~0DJ%S9nk@h85INo006c6H|hWY00DDSM?wMF$t-`9kqR!6BNbo(N=ZaPRCwBB zV4ycRa32KmNHg4L_|Je_$pMh`e}?}wQ2@3b;sOu^v(c0tKuG_`;ZP(cxcouTn-C>< mq@hZ%3jb%ofCv5)6*~Zkyi*%e9W$~300002D literal 3829 zcmdT`S5#AL8vPNZH|dBdy-BaqA)!}+AOTc5K@kB(X@c}3UJ#LP5L9{*L4u)Z=sgHX z4Mmy=TwpFmP)dfluCtiY>pa{w4|CSq=ljdI_xbjII04PnbK%wW)yLtL}-gNWy;?jpgxx8+8x?Z{F z0)XEb(gFdqSY%P%p4@~O#)LdF^fYHC=Q4-Hg)k)wh;UQT8^mzuj53=woY2-L;b_l} zA&!p^xzB7SN_~%VglvxcX?*yzn0uYO(}B<2hw8RJ_8e3Vt1XmlAS-*xFyz!JdNO8m zA=HJC(7s;&xvbAp+gjcOcSsG*(AWe%gJ#ToEHQ3f_Fa-fDq(P zdLR+7eZAi4I8^9$2ldEB~A{Y?^lKNJzdZ4@-V6gO56@Z)? zNSeh&3ImcrVBgNm>jxsz0h7+UmC7Gy%jg$G4wFi+P(kx4YKPjAi+Ph-S&5$(!s@f0 zWs-L|=8&Nw-sqpsE*&aM_hF+Ofb2x(L$@3IepuQvELJ`qMQbOv^p+IQY7TZc}opaVps9mZ<^+LvIJz3r_JZ)W&Hr7wl*lI(nF?A|oWJ=Ob=BEoU}V}kBp zH5Go3bAYE=-w_QLVVX5#@Q&BYxW6Ht%M%NEDBQx|k9VG#65S zW9Al>eFX_X;w_N1|M3+au?Yb4_zHa~yNr>$a3gM-A`iI~FrS=ABm!*yriz zW#>s<(xf#lpJkX&6y(58$R*f7N^?-=FU+C~7-er|DE5T2=o{viK207t>Bj1|edWa` zpPCaB$)`d=Sn4<`lF_5vUG~amSs!leW=DqXS$An@*C_i;0_}(Pb zn(&M;N1m(^TFT|3dr?Yi3cOga*sNH0xn90(B_EkruU%`s8%nF$W*~S`P#2MaJ&s(k z7`2$lr_5(DR#n<66EAYl<;bbk@_lE-Z&E=3RBhUOv|N4cmr-CH*Vf!9m^S5-V z;iQ$+e55#PESpM;oVTY6r$ig>4>RbcCJkt=L$X8abVMS$PvzO5&Tl$&_ph{GoaLMK zX!U4)CO|5{EnsN8WW1VTZj8zd(tKE1qt2V2mFeyE0ZP%@Uscx_CGHvqAvWuL8 z-sQzR;{))0AU}kk2tgbhsu^l~Y+V4~60U#E@RXvsNSXZgYj39ZRyLw% zkTX=Xfvjl~?U%g#bFht@k@+lz;tZlnDH=vGCg&dgLz7;lfaN~_I-@UtJf(jlXCs0~ zqEEgrW(0as1b9qRsD%DGc zKTLe!4JqO_PC_A;5FcG{ca^wARvffkkE@nAolMr@UiqNpxV0E13X=B;W+OB#LRNur zv2uOe6WghnQk-?RXQjKc6Zb&j@!Avo3PU5q^g~o`l%bUvC;Vf5$yLP)6>onWz3~Q(&a$lyhq@0foS{@%>xnv5Lu%4=N z_!@=eP-Bk0SH^^6O=Z42A~fzd&k^m}`8Iw0(W}DZX0&s!YrpH_$4Rj)TiTSO)Q_pO z*J(z_UeQclc(tpsi=K8Ule+um2}c!RSfvNRra9dy~%->uwMFN-Z&+)3H>xKwK5;l0vE+)unu z#!HJDM!z5A>{o@ECk&lk)}?Jb^X34#<|{@cPh@d@uGP@{O!sT!;}(?bl(84rU;C_A;N}^vUR!0n zP_pw_@>x3Ylqkdz5aW5a*>)b1l#d`4cpsS3PMIv}-aCsQpm)4h) zx}KW!*5gj@{t{-H{ROVIvGw$u4nG;G%bOQ=R~mfBeL2^jP0^Xo-Ql_`gm?S$a?9df z{%#U`QWBnoIBjFkNk$BJ_`k{Jq-SmnKmb1gA>jag!5`K|0B%VFuw)N_QW^lPo)7I> zbO0dX($~_2`4ItnlC@oc$K(GN{uY_=@&By=27{UUj=!?{mlF_(huIQvI4Aff^fQtF zCO{y613~crK;VdPf_DP`W#P~LxAUWRe#qd6$Wik5^$%hGAV3J}FGPMI6MBCt@Dq`r zl7A_1ROF~sH~p#-5n}9S V%U~*;s&699sjqFKRR*yS`zOw-#})tp diff --git a/BizHawk.Client.EmuHawk/Resources/MoveTop.png b/BizHawk.Client.EmuHawk/Resources/MoveTop.png index 397032df283fa40b6f3c1e20f4666bc80f2a8430..fd7f8593d2edf816e0b91dfa111e62653f7971ed 100644 GIT binary patch delta 129 zcmV-{0Dk}V9nJxe85INo006c6H|hWY00DDSM?wMF$t-`7As3UA3M^d!M@d9MRCt`V zk1-AaFbD$q|Eu^3PoaYjO{%6t3*%i30(YTtl&)3Hmjn$81;MS7*p0H`N}&)>2T`<5(8iU>^@yX?%^*Dx}c%05a$DO)u5twWN%5tV(Z$Y?AzmXKwH ztb@sxaBz>MQI@&f=QvNDdph@z`^UY%=lT3TpXdAiykDQ?`Tg;WJ!h)N!g!Ps0Kj6P zuWhmG+4qc|cK3Z^mEyST7`*juZUDe^c+aRn=EEZZFq&P4!_S>__wx0+;qK)vU;u{; zcwhH&yL{CZ0RIt;B?@6V$E`*lUxOLNpdT1{S#Z${Sis`ZoJk@OK?Zii7{T0OF7t*% zIyy9bZ8HeUr`_(W5zmW?%v=A86`Qp)u(qmLP`)ICMBWO@VU~z(MrR zr#^tjY-9vc0lNo+TvRzpK;W=zj5csr0j1sN<8%O03UIm^H7kK32_R))?WPZ&R|7nO zov8xQGXp8}n8?$BCI~pR2?_awhz!7~yJD^S+nI9qS;+3DGAdMY!b&=!cJvZHbk^3A z$HfQ+JZCr+91l2VYDzW+Wbn#_%CUW1?F1kviEDS-)op(QYdL|Skbq^qBr*SnmU7a` zX=-PtyTn@)fC=A_o*i*$E!uPE@u?*m_lrz9H_7pC6>OSSAZKpGdewVxH#)iZ zaKpnh)6+wS%`iL1cI)6BRO2PQ_4d`TA*x&C^^dP7g+pa7gzC|3d~EDoGtN8KeV-x1 zY4lT~-c~geWsAS>WV3-24hi9$GUxC~(9XQODwB6I7Iy#i+f%(1mr0WNCbc?A9z4II zP8F0SQFy_b`iqe$JJJ_FNd{o0)~n%z7(F%GJ$$0ukFu<>t(S8Opxq4a`v7oJTUZj& zUa8Sa4}f+~DCD^o-&(^FaXjs@hJ&LGOj`~L5isHAMi@Jc(FJ|%y2I(xFql|W*K>Y| z1N4I?zZ~A&Ju2CoRkG3Q6|0&z+c!u0>;|#APzD;UHu}Skf+I0hPH{+~1bUu~$PK{; zeHxBIz8zJp%vz8ADFA) zxI)FF5xS3=-n;lpXC`vzWWB%s@~GNfh1}WqCGKn^iR$oHDg5Unbh6D?r6gOLU@y*! zGbB5Ayf|6PT+(v%`T0`n+SqmH?iYSE9HBaR1_c^Fn1JJPEq$ah(sW3_P~e!b+@TQ$ zMF#2!^G4B=$%RHQMQRRxZ9d{8BOQ&@7Z)1fNIVQ>4~l^|D++VO!evBp_YN4mc#7!d z=+*7LW+5~uUX&%Le^e;>-H3}v1)b6Zae*^!k<*yzrfJz}zG=Y~J4TF?rq9z2%Skbd z_A7?GGwd^RGqkShGFnzoGA+gma}kH+6K!E-xmb&5=Fx?Rq80D2cPU$=9 z&f`wL{Oq%D&7rZB^ggG3re5=7W{KhoZ;e5T@n#*NJA&f%JMt{uIG?vK zp0^btr6|3SKAXXo;bnz{U?I1;lG+(l3{yl>_#jY3QE`6pcrlaJs#OOfvFM^@aJjCP ztmRY@!-v!ot76Q#1xr3lRFO(ybTO*X3!(8e#AZ8|)~3n0$qfF~Jm?r--6VpZ}Zp2s}&dJD#2w9WvweMRv)-&&`qWLY&`TeWtbH! zNLvkw8|Pd;J$afhU(OgO?P~8)oSK%3EYUA9FVS15S14aBz~tBK)Y@!@vTC&&irS0n zp%MuPF|(G#mSY8s1>7cT%IoEl#U6QlxwYDUZ>|+ArDwmsh|V_lDi{x_pZ#_$7`lzv z_WV|`uE&g|tz;IaB{CC^sJ@l=@lxf7wi16chhJ#Ygy%V?IHpZRB;k5gpY-egqRV#o za*O?x@RVnZXUh{2S`k4JBa?ZPrA!MGT>j~N6=N0S)~?R3$6W&%@>y!qgEF&Ovsr^# zq-qCSe_L^EA@-H4LB+IfzReQ0?pma+l1(1c%JxE~ZW*TR)Ie=nZNZ@eoN2OYN%jD$ z>G^Nici5t8-sdwzw8V0(CpOp-<-~)kep}wOlw6-2Toe4uwi+Ev^e}4)zb${rjhELs zmCq}WXA&MRX#~GrOPzzFklpOvL$XuY!yTuaFJmmT`t(pdDBO+k)tLBLqp%LiG=$ut$jlMZdW;2n@lXk3dd;4YHn5LZssG>$Pn``{m1?2tn4yQfwT`<+T) z3~1zUM4g28DD=b(!R;Z(O;_|GCV}^VO{$X*5PmD0Cq9FV5G}e_XUt+emZhA{oq0>Z zQ$|g>UON1K(mfwov7kvZ7B!Fh@!`9ot5pxdx{U2A5j)L8aXEJWAmbntR?u7pXy7mC{?KX z1P~dgxDK9)I!{}w`YH|!@$5G%S+q_o52+UkH1P<%*w7xZ>}}f_H>26%E8w#2VroLSd?p{R#a9d{cioPn+BVeWR3FJ;<=5~P0tHurk*~F zt<=5L+jK&#*g@Qfe*RuHghk@OnFT%8))TLHFw1@tED9`EzdUT26!O*%n4TjukjTeb zlt*se4Jw_W>pO9aAH@&70?S;<)XlQY+_ZDDt1;_T?-`gM58Toto?v?@r)m>mxQcjp zd1NlEFB!GceHW902@a9`I_f}tj18J~CXlYMc`etl`%d)gP~vA*>Qo5!E3bT4Du^?O ztzTJZK2yHrIqy5Kx|7^z)>`|pHnSXO?}1witgi}kBhT?=D-y=m>H~h`rVR9FE2)ju zuLgRN-;&o!++!ivMYjnZwZnd*OJ#Ltb(hvO7qy1rW6}K@b~~d(%cFO$;Qew|dq(xh zw2|T6J4x$_Z197L8HpWHEKv*DXVsOICN-{a&utaJyIs0PvUzqM?{t*&a6>~j`WFTX zJ?TBUX)9^TZ#-}3ZO`Kuc%Knl8e5LPe&;VMeR1vl=3;~2s2~6G6B3)*^lgDVVifnU zFV-#J7i=c;CMQ#9sMA-soMk15yZ@U4&iWQ600f=_038m%SIVxR1K_3<0P_w2D5nF! z<8}YiTU`KX1Prvb5dKtvoo0CxP$-oD%6<^z@%Y`s;6K`4-hSa90Dm0rQud$SWYT`T z@Avce{NDn87nA-B`Hz6TgnjXD)xDAa1^HgMAOB?se-iKSAL8H7e(2-}!2Vp{?O4Yw)Fu-Lb;n%oxTtU&}GZ@u{mdR93M3A&LVRXxhvEI(RWGP*RLk-c&`F>-m) z&l^xf+p1Tz^A1g3(ey~GX*+%OL1J+B6d^`d-jj}>r*Py2T5@-|QqIdn*?G+)KU`ks z5Z65~I=`ag$tOF$7k1r#9a^Ds`7;0FmZRT3!z*v4_dv*JABz|fUoNGe~7r7A$*Mgp}PbrKf zQ60l}qtO;lT7eU)CqI_`?Oi$zu&Vq~*7LE?K#H_3d{^#!jNah09j|lo#|F+Wf76w6 zq#?==uJAYi&~?S$-Fc=Y7U*hG>MgIh3S>hv09`n9%b6~$B$1zBeKJ=P{nFm;Lh8TN(eGZpix5sum= zNYjx?x}j5H^}^Y?FG6uOL`m|oq=RSF9yEeaJl!CCvI-Yk z)@m2`sfo_6>)cPMr|p7t(_e)jCUtu;oQdZyIPQy#WUu0;TaPI!r#WZOXOZvqK~a_O zrDJD}RfMFL6Jlcvl~LS8sXNAn8i#qr9puOAc}$Mr%KE>&ZeCVi;S5wm&eA%!0=izR z6)b<;RpBXhC`NKxb?SX%!(wc0n}RVOvT$!~y?=GW4uL0VxQ6oVRlyqk#RTWy_zeCw zV~LSn{0ozGn-wU2kwdp&v*9bYVP4dnbr*^jO`kK{ z^2_QUw0#G^aVKj$Xl6zqQPCONswhG_}behC%Qk|$V!xeVgH3z0S1B*e`*+3_s zgel^F@0d~6Uu_*59K(En5Ft6VDBJDy5*ee6~lwX=FX^vZ3WZ(oz&xq zEs6-)z>vhvE&ppzk$@WB`+F|C!@EF;s9QjE?WQlyt4#%T&Sd)zB^7f%*@*kh5-@k@ z9Rhg=yG&1uoTG z+V}>6HLqp50$h*`6ymkn8Wcz>6WxGS86U0yihzAllY0f-hCM?-EVocMy9;dmuCga; zkw%m!Z}zceQ%q`W%2tcPZBC$<@?|}^IJI$Cw18`f2}D6i(4Wh zP71d-)2-=B(VYV{tIRVZ&Y8a^>J)8eZd~b+FTMXAA=Se*H>Mv+cATMc=%EOt(Vq^~ zjR~%SV+L(^H#r9v1+Dle#O=9!mI#%gAfufUuFyronusmE6Q|fk8uPqFR+NG#AXfeU0Brb zK%78IO_RI=U0#W_j(SIE0!d2Vi1UeqGTF3G(VPCO1GHWz zZSjlL@3HDU<9~561T(mRn?7CTk>z(l;H~ty=|50}yjz=30<#91+ONfb0ve^Fy4jUJ}^+Ia-ROXSfHnZDhIkq}Lungu#%ABHW19Hb--$%QR%SUa64 zNCp&SAp0Z^C8ElgQ{zj5uS2aRdjzO&IpxBPBd2!$JuOGEfPB<4ga}VQ?&g)3CEdNS ziI_2P{te$BeBlrY0A&DB3Ez-|H%E{wZs?vU_R2S${HV*tdCmPthv+ zU8{Iw*D)Y6R|GNN9qHgW3(~6ZgAIoCVp!I3ezQ^@H+16|Kq4Gv>hu=5=KU9n`ywv8 z6<*gK!GNa^@yd1`)1?@pi_$+-sbfmp>?&?P`g1a`wr1t1X-Dw(YvOn_Y zlSCo|8VZvIVwb0+N}js|JD`00%cZ(D%+>vhd9#_4Nh@LU$UkzKV^o9bJYkp*Z1*_F z`K4h^kMGtDHBM2!NpIT~AL8V+sIu_>qZX{4$v+p{(eJwA>7rg*rzEyx$+wtRtG^FE z8m{A)el6R*-4jhJEC1|Vx`-EvmQzB_brnwu<-tpmuo?4a`cn6PE~=I}vFQr0xJo3{ zYc*DcpIgvn|j5S=xj)k^s#g~{y5D#itCzX06U>Z{WYYPpR#`vcDoW{Y-ItZ+DprG(JKe8O=FLqo)G>rZ3p*|b+rPGOB ztnM$BHhed%-pGpSL&kg{3syI&;o-snK*qmdxJB_@>! zo+q?2e+zN!m^+!y6YEB|AYZD+k2(XBgMP5^r(*-_b2R%hX?W5Gk{f=^M*Ab1#QF2i zEQ0NxNugXmWzm!86`HS;sUbiR{6{Wk>x=5+G6~wZdUHE6<^oTrqOb~$km|l!Uf|ST zJe-~&DZfGkI}ga=(o-V*lxx;|u zbe$D)#~dA_^#)*s?uenv=EWTaH|z}`v1hu&lXjGDtDU?2%nNkB9%AJQ0hjIHmQH*= z{rJY_NgG8+%u80+J=JrlrhMdt)w@9yOVrIT7YZCvdmK_I?G1^6Atfp_7rE4_qUl8E zrz+Mq-vIaIoo@x1C(drlf7+A=2K$rspnb%`nyi z=roawhv~|8DQstxfew5ohQat!Y$D$CsXf`o6;Kt5;zh((cAWBWdUlQO0*Sz%MZMf6 zo0Z1g6#Prm>-QsFXOHIqLI%~0To=(sA36c~?@ZR-ydKD{`K=83q^(B|ea}X}6348Z z2lE8oCfY2~a5a0aGvpOlgUcyinnSxei63;nLtkC@R_#$}>jY3z8ipPP5lEAgmKj&N z6Cm~ATW77r3gqqulW*FGP+JIT6c;^gHKLbkG+^v1P^8)3Y-$Or$(#-^e`k8*5^$5~ zAbR_Zv(S^~mNI|Pk_<7q&((kn9u~LdW8O_F3V{SH_b!WeKcjj$g|aRsNoF>`a_htJgAFB)z z8&`Hs4OVe_e`p!!S~K8rG-9EOV{4wPZcp;x8c83+Yfm+A3o9sq5GjPROWO)gXi%UY z)0K`?gz+t9KR~H$L&zymCVD7@^A+`}|}f!(V~YgvZDTnBBRZ_bkt zdg7*)-#dc_bt~E2))jS zoEHN^d=eQ!?a`()YP!0*N1p%I<7)&S^h)P!1f}08vHZEyN*IVg23}9?YJ*(YJq6;7 z;;1j}UGd%7FJNo(o0x68G2lF#CAWF?Ut@59tckfK*D~mxyLi>D#Me?ee-IM%?waF( znMY2egRv=~#rKe`R<<$=8HtbcU+bxM{tzXlaOKlCjXaBpsSKzGDvnGwKa1o=rXvc( zUZ6xrsuh*IKa0)T^7;1rn9rxiHvQ%zB-$?u_e&b^$PzCfb=N{ou8Ko#lzpnDYOJ=v zFa1}+J^EYys7p@5qtw@K@JU8Ne+D<)9~fi5_+IbZg>h^`K{V8AqQx_fIO(M|itm~c zpF!l=w_eLD3Qb(zt5}FgFFzJEYn0>;H8Jfn3LhdEZsUlmf7%7DL@e9<`+zJJeMV2R zyWmf95?MbXaN7*Y{!=5e9M{jjkpRJ}m?nOV+6SxgPC=8nxhJ)6JU@CdLSE0`^k82D zS$FaS59YA?UHWTa_nOg~apZ%nT%sbl9uL!G6K=csR9>d`*J+@GPsmEh9a+_s!!tlq zWQ<7~l4WTn@a1$9|KEs3+AE7e$A2X`zY6gO0bw9{3w{mdRGXb~AySJaL~-fxv#2B) zJ7`J&y$%d$2FgXU+a6_<4XLX{H}o9hwcgI%cZ~|EbR5#{HT_$6v7lFH^-B$pTc~uV zOH1G7oe(WY+J`xpjSB~jFFYFTvn(e)tT(ERam6S=bq95Z=am5CIhp(rNpcKw$@OM0RFa1@BYd|jsG&E`Xrg!c{?=hG0M!!UoK3HwFR)4jiz6$3u8Ajc1-<5KyjzX2 z`qF4x4rp>*)TwrS1I^LFWt5FtQ>gmbB<5GoyC3k++by;4tDm_&5`3`xntQKHKllj6 z4k}VodwFqHuM!k?KdWLevO4V7H<0G4ALq0(65b}Y#<sv>riwth_sc8D>XC!S!jbQGv>`vnoa7`2abqh5!;Yj;$th)tC zg~~sI6jPtm{^FsnF&O&G@5nEa#&hOvOM_X>%GB1Uc>Kg4v2fcC4f4_xBTo0_Eg|VY zrOSDU?nluS9ZnRMW|-3V(+hi?+(l{sgbmk8!B)`|qZZ$C zJG1@t~hQuMs;BpDq_A@G@dQ?(^X*Mb}ZIL3!Haeq{N*plP~3y-f4O{5SJ_% zI6uMO=q8PpjFOqMpp4h!^Az;7EWOI2`3n<%?-dx;jG6bOObQ4)dvy%JQuRRBU43G{ zVtOve3-vtLGEW#5ci-G_lyf$fjHdw^!!6bu@KmW-MWGWM+&UE4ao7$x}x z&*EEel;p>(rOyKQ;hU04yEc!m4*y6-3U-^h-Nilmolf&>(Z))d7-Ad){L3tA?+B?C z=do!Ride?0AV>=U|8Ih@(|T$Ea^SdF5BWA z9$&DO^6637!A*dj*XY(}2@K`wlC5FU>nHd(WdpCYeU%L zi~IF-`>xP~#CMloZDVe9#8^MNie1kV|V!>fAwOUtc;v0Bmj8Zq_1s{Tsk)*pB_g-d)^5zk1C!;wr90 z0d;bR@CcqJV0ijBOOZyaTL%g3{5shVqkvGJ8A$Z6$RBZ1`{yY-gh>r-Qf1e>M){lQ zSC7OgDmi!hIWC@z5=;JTXbThIg-BC2x=T^n4t%^x63{2sS=>;>Ag;><5=Va^q~SBE zX6vfJQNtIwke58ndjCWHi|^!swTIvPr8+P1r%pCd{h!lzchP7$WtnM(#pklg#EG$o zUJbE~j&b44qFHrg7B7*~6wo2~`GWDESa9>?A+ZCFHM8Fi##&9oN#5k- z>2WGF{GseqO;Vp=_?SLUdPee}FZCF<@>{wC-jrmEwZ&YE|6aJpU9~jDecS6%kN67b5iMwkqwj6SA@2r&JqY^1iE|r9#7?tdUF>@;$?p`zR7(Y0XOlh zTUq~;Dwuc*wG{eXC1z(pT3GLHn1JHPv^i%Ep1Gy~8rFp}@Mtg?%B%!7jmQvzARI zNi^`GEXmkL2N#{{0yh!Me4fzWH&=)<6B7>PJeMM5+|R?hAlqu?@gOPjSPKgY=*e9D ziWnF)pZkwhIMx=FwHVt{|$^r>Fm_i0__woMA+KrOO9s%cEQnko$-jxi-Aem%46ATg%#+jD_gSaS>- zD^2-!IxJu(g{u>YosgIyIWC!Dph{>NZTe_|*zPA}3H-_8MLFL=Vys2pqQ zLM4|fZs3Q!l~*Kd+G7t9_=bkt&$t*-B;fFoFhgnr@@07OS7L+m+~s`t7D}^oFuTWr zx?s}CJ;6LQBf`9c#x@Sr>D4Jdk0jh8C+xBlDd%NfFhu`-AKW2ze0vqs5^~A&OU3-J({g%}cG<%?igj9Nvj{4ef zRBx#!iMSr#X~g*sq#T)|iLxPUw|@+(R541smGCk##(SZ?$Idn)u{Y59qYFG(q0wTf zZY*kjvsbMPKSU4|=L+7QV_k+dm zZZ!~g`ahwO4qLl*-i0`alm!k-jlc(;G%D5c(3EEWs%=g&tfm4fGaP)Z?=W7xKhbUF>kaZssLQ7%{LXAk?n zzp`4bZceAu9mgMk{LwFe`O8W_|M@Sz{)a#O;cVacja)7l+;GDUA^pB%k3UXCQDmB? zY0RBFH(I}bedsujvuV?&;Fh2NBKq_NpOL9lN}cw}PpRpj^Q&L~n)uj9KC1pN*ZSJm zzfQ(+Y{YRKS(cR+LIl73#VsEF+Xp`Q@APltvP&+Fp3QriFNVcmuwa3;XwiZ~XJ@BT ztJS`3n&wfo=&_11Ix>Q4wT4E$(KZ75s#Ys#Ha&!4h#&}1E|(Dm^nJ9uX&Sp5hJjSd z!Re=;hQkhf1?J3|yTmljLT^t`y;7~pX}{huP1EvyA5W}at?JbpdU|?1uj%n~&O7Ja zct@Xkx)B_A!tvs|?_K-9GKxaJ7_M8lR`k#8H}=|VukesV4zcdJ=N?Q>PR6-h?peRj zPHhM?X7r>W(B-C6$Jv&B==k`!VHn0?n>K9%-Bn&>-(v%)R_kbbO$31t0SU`8VA~D= z0n0LxN~Mub3n(RE+ZMtggb)UNzk-`@{ux%RSTU=sv+I~t%DwKg%P+6BK7#+_aHh zJlzP(veEQ?Se6CLG$EydOg2x827|uOq!ESz#>Xev6S%HRn;YaXn#~Z7?I4N-Qce*a z9er@!!tyW_pL^(`RYL%7XnzO=0R{67Z+Js+%PqI4IF41dQVEYe_88;)-~T~G;pdsY znw}@p>9lpydruA<&1U$6XW<>9C{j|&$n%;r)9FmPR@o87d8kV0dEC}Iymh9E7$-}`>h4i!qp z5Wa9+IlH6@Jmt{{8MFD}yaQbJs?z-#9{XWSBUw{4e;j_IC+qPpvh~`z7UH+VL!WX~z z`Q|_3UhdR}@Z+D{EDS>k-w!#q(;^NJ4rck z#bWM>`Sa(mdZFHr&wlm-N%){rsl=cE{1@4{&OYaKSt#VNY15!ptycXjF5fZ!kUO&> z5W06#CL$HV_nI)IAP~hkKp{k&Wm?E&GN4qF{_UZM|9*X~Uc39BeO*c^p_JmaIqAJ8i)Z_~APCY!Lt6?f_TEcQ zOb&}%fAyc1ltM@;q?BexO8ZIc{l?e4Nxbg0Z?bl3Lul4L1mqDS2^E`c*AyX?5yLP9 zq@bJAM7>r)wNgQ?QbD~@hvJ4x%7Lty)K= zQbx5l3E!_n8Zn%d1;aA=j!?MpLmz$^LP&{BHp^T?quGQsB)Yr1(c3rUpLRV_6p8cC zKi|0Hj+Kg-$ta3r6~)ix^;Od_#y#IxW8&NTQwMj6nlK15z0D6aDi@F{2oSKHR{Dq) z$_29kaReuw;tb-S`6Yyi>-9PgKl}(vA%o<{&)O2c{N=CE>!K^Jyo&znCy!|!v>vC^ z);6#C#jk!I?(|@h5Ixbufgb~s(g3L+wBW=YsF=wmG6({TY%EIq!@v)Dr<<~lLcSA) zLJ78M0=Cculwm;-po{`GBEk!V6#pNBKj)mY#RV5!_<#CE=bwKb;YOTy z-udnK`QZ?)+?aQ2|zP_fqt!x&v%28WV)^JbUNJMV1&g}*_j?!(*OdZbLHTy^brKX_WhkUO^_ z82q5iAVZK+>7CD^B7{N&A!4SC1sRFdY%nc08xTyykwmT5K)G5)y;(yu@Zbdvc)kxs zbhBZ>vQnHrc65~9fAh^Z9r8lGA7`HRDf7&;K9v$87E>X@ZX3b;dGqCmPWhnuVhjyj z570sr)kY3a2k3<6nKgw>CL~PFDv~GQvXO#*x#H(qRG%O$5y!~qa=pbuvGhW`7w4XL zCJAKd5uASd+3if@2iM=gSF>dCQUZ@%BO{}9L4z+ULuf7PcC1|TXA&-Uly(}1_6pFz zFd`g5s4`BH%vcwn=nbfnnaO0iFtvH}(0BIPcg26b5bwojKK(g0E#-XD*Q!S!QG4vU zVq$P`otjF&A)`>Ir#p3Muq?|ELKsS^Hb{K721IEkr!_6#qY?q2*#g6>lvgW9_#Gr_}#I`938$;F8?DRJw=3JD8BX0 zXI3J8@9N8*@;M6^ED<}kN8p9$#S>`#r+0F~D(>(x6+WP}_=GEwDj}Q50F=fDD#06) znMd)UZQJ*}kgh%m0!b9eGd=IL4}DOc_2CaarOUkWCqE8$YC{NusD>CJB?J`LHLb26 zw2<_+8NHCMe`0jvX>q~yJUfhI zaoQ>WE?$g0f>WYW0pGv=hNle)A2|8n#48Vb1&(^>@od1K_}~Yae}CWmP8OG4cE$9-DRx>z zIPREZ(+@oGz{?(d=%HNNwl#}5-R(m>Mb@AtXf3PY;20;`#Gen19|rXXGBmEXQ7e*E#r#TUMI5np%^M)KnyIn~T(Gr@Tmex7gJP8%8) zELtForJ{&c{G4CgPBAgXOw+D6l7C~6D2*fq6|8Kk*Xt9Rl(YGTaP99p;W&BXyN-X# zwY%ivZ!i+Rt{y}WxC)BhemS}qfRzyolmC7YbsgGRzjjsz_Z5Yw6$k=C`-WsdidJsFW+7Pwhp?E{>-yvUmo=Xg`Nj!xpYc z3KngTphJsJBL!(6J1xt4TddT==kvPXa^w+Dd2t{8$iF*rq|$~Z8<$*q=iV1CJWHH@_Gfo~k8t!c z@05cZ2H#RHSN5aW9to;5Dy}3xo3KFCGI;>~Pz)4BB5NQ$0)s?;9+jP_+sQ#?vT|3m z=|BF0We$&dhfypP-9oYWv>L}ReeP_&)X#nTbiP?HJ7}NGiseh(ozf%R@jrhyq9~r* zXw*~G+6EO*WdhGCJg6t-lp@hA3Vt8S-bIU941RAZk#)3I?FC0MUwP@b#rh2!tiHZp zHwXew6@T~NzY?!F?6ptw9-lh%!ZsB8#Vt2FciwSl{--zHv~y++wqwPXZPf_bw?rvQ zspl*s6VpNAHg_WCmPT%jF-?SVgkrI{TiSKMbJ@4Px!?2R1>gBral-LO@6ful*(`S7 zWA`xSx+5x9+@QN7BX|-aH8~-7-+hnjk#BwL#7^lEve_K?UN7OrydzThqJjbuGv9ad7xeH21 z9P#GnPU#UQC(Ec*DqK32t(a~Yi5givCu5lI6{cP*+9ZQW=*GYgeh;Ykf8ax>KK8G^ z-p^imzMxL$?Y~a@=tsq;KJpRqzkT0RPx++E=kpcAFv6YEBaDrY=?*1Id#H5@Nk0P@ zi>7N5R6Bc^(kF-~5lh+tradoVC3V4x%H0$?;>xDYTPL26>s2ZiLR;uIwT@gi%Tqd@ zRlVUUz7Br*D}$XjeGCJSXA(pqK{}JGk5hdOdSNwqj5P3T;|E<+P?*~N`gytqPDPTv zjLB{FiluJSP_QjY>6IC7N7DQ&zRo%OG~xTc{LBSkc#`YypV?YJ%vh2%bXO(YO2{WX^IisWzy3%(F97#U_8$g z|LSWU86Cxr<|TaaDq`p#8XMDIT7dDaWx>P(VqYxs=2zcG~ObViqN#ZW3J33i?W*VvU2_|eaMe~#b z+m!!uQOYHkT&cDX2_HZ8gGQ;NXu4^4yjE#Etw;F&wO7)WcH6dHShr@4T2ts)zvqg* z10n8zaWIQv7}p$2cw$=Vc$)+;#tuRQ5NQy=9)MXzp^^|0u}|POdD$vuODkYapd@)=)y?wKDGk3aSpRZiC*dF0WP7himh_l7qfyu;7G zQ+kB1j*_9EW>%|pn`R-=JOfNGEhkz-#t2EPJoP+ig_53z(&{a3sgfuZXda=}KdI{w zl$4~>DO76JK2I9+F1q64_+NRgm2&w>zb}lUy88_6Y+w4q`BuHwuo{ht^1uK4$M`+o z{N}?%N2%k*GbrPbLtm~IFJ2f@6AE`i$I%oCq~hcOo`k}^k7_Et)J265Q5^8@XM+$e zKq0w{nv8*3>d9yS{&Ub&TUNjz|x3^o2jgC_@2hTUy5l&D^OB|PzWwPsel8Q=7 z%t;G<44BejNqeiQr8PdM^>^|vp&uYH1ED8uJbz!!rspnLu)sD=tM+uyTd`u_uwJi) z?>ze0XT`hklpbO3+x{8y&NHLWQCfNXa3!0li^fAp!lEP@;4s8dj ztyZD{GtfH&8#ZjXb#ij@@6YG8*K3XXqJ@jgOO`Hp$`Ez?ZGW^K$1b_V*jp?l8amT#VP_Yu<|KSbci^3x` z>h;brjAl$-z>^I@NSRDb!**3kxlNA)fk~l^9oz~{IFT-)-e@9Q$m7lLc-#1&?!5hZ zYjAo0d)_OgH0*L^!k~FcfFQ(}5<;X*Ls~Q#{I|ckRlMpouWhbby>|HA^FF=J3`WOJ z3CpxzJXu4vR!xUtkWJEq?X*c#Q9#>4#MqJ3LLn18p;bzpPAaWApdlJG8$l+MRhVO- z6jDkan2|5#ap1u(d-tlx{6D#>1fNGQWHV5J-=Lm&<#SmZq@7gb`JQt`6H2Oaeh}k~@<^T3DG@Sb zNI0O?_sD6UY^#o?6x-Em^xx^{MpC+_;!{hzO0P2$?P3sz;PzTuvXM|IaZH!>jG>BX z)CN84RrlQchmZf|fxj&NSKW|{F1aM$FgS?u@yXQ1-~I-JoSSaC-mz`lb{r>m9B1;B z4}J7m8^OEZ{!a1J>wh2~zV{yag7pZ?_c(}_Xe@bb^F^caT8o$XfE}QOCua-O%hWtN zCn-S6R%a6whXL{+^gDz~BW+qpSvJziK_H}NG>PGk;+#$sC>o#Sh+yQ=-1_aFBz(bZYPn~y$5J$&yyJ89O?Xtq3p8e(nJ(es?6*z}wAU7|2JGmhiWKK#&~ znSW?(G;Fx3^fnhUd)C}&e0(zUeXqy!d@(vU>YaVgr=J!NWU}<%wgVOyE}Tb`WcmAD z_u6~s6t6ZLKA)$+451GG+knMw8)2XP6(^uV@-R+q5NrxEh9X0VV^|PKD*?0SBW~0n zjQ}trHafDwI5dzl9XJ-fPh=wY>HMe_58nT$)IaJvKl{b6sd}SQ{?Pl5Gp0bWr~vf9 zm=LI3dg;~A$Q%kGCWVmxw!jlO^~^KXPMtosl zArj2c;v)2SvMp;9fe(Lp7@-wHgdSW{!uTF{A9Q}^trI0F?(&69z z?MuG#q|czo4)5eVf|1a^t(gcCt@gF)*Bh}iStvUxQyYo)Akx!OVk9wN>Iti@a~+b| zNi?84j(uQ!7&aZ?(Nu7y4THd<3J{S(%&}1H?m|~!(R^DpC&w|lVeq7Ad?K%EjVF|8 zK5*ADNBw#fO~al)P(SR#%bqiu|H?P6h|f9y%xBe0aon+Qv&P5AWTje-3Wc0_s*_+Y zzwDdhz3=;w+UX5J7lmT(Ql^?g3kry7#-LioNHN7FtL>AB_MiHmg-XA`R3uQ0VfZm5 zjoC2-d!MGE5SlTwG+EO|)-58cNsQccKWg{ii^l3zFvmua3)I`xWCNZQl_+ifM!6!5 ziSpz3edyiamxj7$`PaYutl7y6E<8(m-m`l;ne*V_U|cMAJnaj%Hv&AT2~;m6LjaC5 zO?fS~qETwMqvnNa?a>(oJ|9#zeZ#(?NlQ@3=*Kh9;uYTp;|J2i5-ty+7 z#F8a*@%b-)W#{(@3JHM}D=r_?#P#XD4AX~Y=>Mll-P@i+E0$z3usd!uklVf&VG3bN zn6^d1M$c|0X`2+7Shofb-E=*QYe%st(}|wWUN{|n@TEXS1PG)JyAi@|guqw>{)W}_ zn;RZJe_+wvN%!}Ek~NuYrVR5-6anaW{j-eV-%dPHmWrj!*!V)EZuX zz<$9UcifF2ieMY&HX)%EB4~jbBVgJH1rhV`tQN7PrEEzNN+lEAh3m;!dLh`cPKEEH;@j=&O#ivlW?aO<(i zJ+QIpKX@eufBU<9?)9&D&;NY&oEr}K*ad_CjC=Ktx4)IHlnyA39miI;-1>_bk3wnr z@|VmaD%hAlFKzn{C#7|WT7#(nM0;9VLO`{fniRVjL+TUWjFxd&79z)nbX}O14H?F; zB5J4*d|*g!(E{vq{K?47-33F9CMLEHBN*C%`o^_r_)TUeGlewL`7~%ML1-xW*=~#r z2SHeeTKf>{KfHbcZoB^{tKN3l#~*(Ce*N2D>s#M?91pg5%P~j%ufljXo1sHdqiCRU&co8wxixE=&?Nj-)X*Xx#`E|$tN9t;;(MK<#UfdzR}4z1`MIoL2hSnjo?nw zLzzg?6cYJb(!W5H)QC$UVJg=X=($vdOhN}8=4HkaW_ER=(A9yizAkjnoB^Yd;c?FC zP{I@j>e9#Tg#(zqU>A&66gF)gN4Zvq*Q~*gsxT}c21(s430u0bV;3R)=a}&947}KZ zJr)`1)k6b8x$^RQNA9rGk3TZK@2d{=7wx@VEL^(OpSO5d%%3wW`@`#QcuvRqee0WF z6TiIm*Lc}M2dYahy?h(OY3Y(BWa;Ljg$vb!`3uBjk3YV17{ZT!c=;~xIO?e5ZOb{_ z3o2*-@wPwbH>}&r3&x8qjBW6P)+VZ{KE^gK7TYM63_htP)vi<6Bw3?V;4G8BpFJ=G zb7uF$&ZMwmas);`4L9vV1rb**<2Zn)0%RA>!K{P!hAibUIaWqEJPvncv&I~T1!Xue z%`8ka1IyGW&T{2b5T#9Nu7`MBna#m^e>EC^rIcf@m^0A-vSCl`lj-aY(sB9G+g9H5 zwCv#-r+-4+e*6El|4v3gUw7X1`;%$|dv-|~xS)uWHn_j1Af1uuLElm- z`h#4xT3uvW#_Uuo^(M!WFPF-kYnYa~W%zM?>zkM1p1al{mvy1y0P)oLWZk=@T8Dk= zt|pxl$SFW6b=E*9oMf^&%`z$ln|dB&fm9}qeAdO@doDwNZwI?`B^7$;aIgLzY}vXM zaif7fciRJwm1bhe%w*sNAv!uc5C=Xg_pQPBuWv*3*5AP0yc!*rf%HHgW}yJb$w0ye z4Nh&;>1^m24Wo=ujiE3Z!z~A>1U~SRxpB07V0_E6SM$zO{uGdfLKIBp|{kDU1rb4cx4<9KK3By z&Y6wocm=B;S&g1-0a?pN5XGn%A?l`qQr{eO?zJ1NWeYKGD2#3#M03+tpjLw=O*n?j z#t;h&(sm)70M(#^!03eU=aI9ss1B|d-6Bq_Fvv$LI3V5M^V&l1jJKD|)#a~v&1>#o z`R6~6Jl%af`|PvCK?fcnZoB=@JD(wZ_lmD|J9g^h>6G=xuvv4*Mz>;YY#3e`^P>5| zB<{ZJuNWDwGuk(JfO>0j6ER8~4z%E7GJ>~7FG?K>X!O35U<9&**w8PeZfMIg(9uyq z-K)|$4S3B#hoH;NV7NR6k+IR!S;E>!o4Di8t;cAtAAvtoL+C45wh5#oM5zYyp^bDSkMWd&kyM1T2$4z^;L0NMK^AL9 zw_wbu*>tFRxx_J zx-oaoER2i~Ar=9a?Y0Dy<#7xRkH9uuHjH#Bk2_Z0fvxK{U`9_boUDtmQb&EFf=sE1 z+)H*r@u2;X?i)aTqKfL;$KZ@_h8;E0Ncr%jg^ZJj5>14*k1!>X$rX@tvgqh3A=A@| z`&X|*&60TKn~p$VXW#t6jhhaZhODexxBk96?!2pQ2t7R=qEO7?Zx1|zbIv_S?6ddY zV&%$}FMLDz<~Ke!Lm>W|P~itB#)c0W8QEgcDQo#s0fj;Vwv%R;O`)JtuHlY9--VHp zF{IoSFMga1!_w$~+Q7{AiT>_RWNZVS zy*-eYiHHAwKjN@K9k@Kcr@O0%->1}3;8SMrzUvMYJBmo9)7Y|M7%9VI$(tXC@aagQ z&K#`ei;&r47nt3h7_C(>vUV%dlL9&FtcvUC69WBa3Y~_7l626MFQ9W?H_aZ$$~CJ{ zDP=Hc`EoYa{{ETSLZMLHx^?T8R~&lqehU`NvF`or1Dn>b-^511VfM{$k>{Ov-VRBm z?|=6SansL!{`?!lSHJX`jyJsi;G=C@eJ~E{?-<&$u`>!{6gx_EeiCfQ)>#1)e?$W- zY~8X2cdon(<cc z$QN^{)N1_s!@xs5R`9yJVeGRfGW+ZYXXYHJhC;12hN@qN3>8Euktuefqkk3}iiTc| z%;kjIP?|t^(H}{&?9zOBg-~Jcl zhhP8tS35L<+y3iTF2@?QzeZmEtT`M8A&RUy4$29u&k-k zJ4xF-fkj&M&SDopj$qF0S(r00zyq(=tX+dg zAAJ-{7w*DFOy@+7O^l;bD{b=>PRUg0hg>!q?t$*TU#ZvL#1mf-}YSMfn z#G!|#M=D_xJ-xj&&W;zSRMUxEVjV{zi-rS72J{;Y}>xi_reFi^yM#%y&y2csqcMz z>d=D^c(rB8&qPt<-4bEO_ZtX10{cFIAaqkv|!%5-w0+Qh2AKL(*J9B{zF$mH@gg^lJCAPz#rL4e*; z2{|{7N;5{>@L^9*!kn0d5z;|p4w|8ZW^AA#1;Roas*r&ojN#g7beIfqeJ|u@93=vH zUKL6hFijg#taX^pW&^fkxTb@iWy_cD+t=IOi}*z${8 ze)0Sm!WS?6rO*Cx~ zV9VAmc;wO5SiNpDLg>;kBLSth8MMus#H4|>)d@A-^@VgYtTf@e85owG6ruD`4XPm! zF34t6m_K(mvbhX4tl5Aqn>V4*nZdwJ4IERM0!&MXGV()iI*l0vGhw^>An~5A87LI< z5GrOS(Xk{d}x4p0rHFw|cg;L#6UKgx9EvI10>cHaoC*@uFROy1SQ0DtJewJifb| zPT%?Vx4ort#GBp_9e3<;;>SPH=SBb14dIMWz5fuu+4!1isH0PcFq+i{2WU#}2%QsZ zr_)w>2#T=bd0h2piq~~qq>L15)h1T2UyHvz{3upEwho>jwOu~XOjbzR-DR6d(tk%X zD@nDPM*2Y*>EW80OrGlvQPSdOkjtjdr_e(opFvl52O6G_haY?#_y6TyY#w|9eo)1X z8U1kVJaV}nM6p5TN_6*iAzRF%;Z+d^J`6L3?yfEr3RxJA#O5u7C|4$7Wi4#pIs`wA zF=x&~2A$l+8co77oA5m!mat%woQ~=xwt%uEVW*3HOaRchZk35F^9)1)DIEgsnrWxBO|`^}WIlrA2R$d1b{S-HW}@`-b@!BkOg0V6ptBw~ zVco_JsMMR-v}FR1J+c9j5A=4Gm~bLPwry&Zt@9$LYzI<0sCxl}QQNgqC>4+^79dRn zBZFID#tO@pEM=a7IOg(}VcdWJ18}m$mvo^KgzWAe*Jglh#tvj;v_lDFjQ-(98snqb$ zLyzF0RckQWh~bBt7a$orxkCU1YR*$aC-&@W@cve_rIdQum6?Hc3b|N zTW`H}_#bKr=brigtPt|E*EG_3j~;&%?G2P7QhY8iG+WVFEX0 z!%f?erisz<3HwR=VxY zv0e5CDw(CIN9}1=lH9B32PjWgQ1?94YCfV+B2DBLVr(7Sh>_6|baZs0x2KD2 z$QlZDwAd8lR3fQ!Q!cBe0?RlTBU%GRMf)&QnjT|2t~+n;0&|~z_w8Jo~bxgUeH&32Y$Z^ii@$XdU1~Gn44e z$eo&|r6uiQ1kVfjd}!Bo;Rj7r%44t{$}}vD4v%1X>mX*$89=GC6Xj|hZl=KCv)O1M zW!g|t$X=qOP(nJLL(LCRt2a^170}($g-kk)dZU3S9(x27bN1M6H>_K`9{1dJ2L@)$ zU{6E8SDG<%96CkT5`38q6y09WX>!A^;;HiFQNTv+A)U!0U+6~K%_5&G!nRYeOsk}T z8~)FRaPg(z$i4PehrDKNbko;u8Lp7ZlYX-bhlm=HqM1LS$!COSiN!N*n{Pe=#USuG z*QS_8lqtnGy4W>qH{fp%K8DG%58KZ04i*TsrckR+dGW(2N)*iTHsPRkc7vSmE)$6w zFL12Sht`!x9as4PkVvtC7zu411R)zL<>@Il8cN%0y2HvyvC&S9Z{jp}&fIyJ(cjO8 zLt#b45rQzJ8;y{DCJp5CSx7RDAVyScB5gUyxmlD71yCkj%%{-R*^RYp*J0Hos}Rwd zy(;9h_{bx0>X>wEv!Y5)KlU`?N%*8&#c45z5%MgSjZ7woQn3@cd>0!5;TihehGC3a zrhV=I$q+vK*>iTE99#dj>g3vUO(X6^BKV~I*XO>2CgRYC-)!)XOJy>Qu$2m#_YZsz z^;#8~OqvacZvJGof&aPVJ`9c2VHhb+9SL8kh`B z`<843VF+GqMNKZ`5hz`ykdUBlf-OWZlVQbC#3YsyEfPwxF$ig5qB6lmmYd7KkAZdT zw{SkcY}u}`>G`n-%XLwnEc5S4XIxb3RW`z|<X&h9LA1ikL+%nQRu>Ocv=}4t}7! z??*<4S!*$S_5dFL`(v1#n83U_vpGv@RB5A`FlEH)C42o?8-$g3GoLP&u$1j0moK2V zrw{pDfpM7U6IbK2VWm=;iNV2*-~C@1!j~>QBmc7fSG*39|2acOuTD9(q#HpXjx!0hjwX{ zG{Eu_B?C9rc8w2la;l4JkJd}3@aYq~*Z{~wY5BS?IFaXS^+?cbDYfL;jF8Dep!&UN zr_yuD5N(?TCLZe5N%YU0fjM($^KPT!6&ZIF1+Xm17>IUjI-6#^K<6>iJ{8=J4V#;t9FImD~Y+`%@Uf^q>9Y;C~GIWN(;+!aAj-|7s16^I+$Yt^z z?#Mfn^4nr>>_G|>*>tXQ)m2yj>^U34`DcH0zHP~qY$N_^(ZPbW>p~a~48u$YPza8} zd_$v%)xLDY+;oP?qBxm^9(YaE>kYVWx_uCL5DDCU?;{u-nqWLZjVLtr6r2|7Sp|eA z!dMGZX@y`k3(csNIt6t<}B zMNDhT&7f2)@f?PU$w|zdITQQuzdwKG%|lyY6Y!K0p4Vi+X-KObE@=}|^^;y-D0XnB zLgZQC`^g>C*#vnGx<8&5j&Iz!Y58+9gl}DR;r@Zw{Axa99n)EG(~d!-tR<9bCc9 z)1HVvcNAz3Pr-iikwco4hpvKVPM1;5$E=-4P8U-c*!%$tY# z^A{lHrum+@=`1Wqr_H3XB-c&Oh&BhE&qcq(PNh&F+BgW%3_QkJRKfIvkd223D+ZKN z0LRjwVaALZG-^+C8r01l1dOAkw35?p^>ckMfRQ&bIyyG_kq>|HD^F_(XP@<9St#aK z*eQAPtbv}B1s`M~_=ZK1!L8vmxQljF6ziKw_{=ahYNH#)K;6)TD5#jk?PI3h26hz7 z87RgvAJHS&Ju3!N1kC8*42q$QmXmnR?4XF-rRQx7Vj7n~E%PS1+bGnrR%mHk9LXfT zjC7YI?Z{R-+G>%D60DnS^( zzV)sDNZGdanS9Q@wliZLpQlDn)8?HkGO>~J3gh7m%GY7EOK6|m;ZgirG$?;J%Dig4!g|y?c zkz1zH6X3#_I_6+ecUBa#@We4F6}4f+T2e;^Cxh;>kQ`>6Yz7_O-RS7(Ep*7E%Js6 z;e}yhO_8Q#rQZFF#%bnp80qghXlX)&%$uw+=D9;s11*|Iq2M%{zwH&G~*VER4-##sZi*yU4+n@Yt5Lg~Hq zsk5}8NwqX)23(JNYmND#c?=PGAf4W_mlXN{b32tri8F&9CcL7S$DnYWB8oiVQZ;SL zFbv?NY=nNy?C$Ni-8Q*$<;o5r#P|s(98=q&Ay}62ibAgR;dIK(`+i+FZ)P$~kPylh zaVs@boRX2PLTcVW3JBqcx~+_64urafUhL=qB>|9k zMyQa^J!|=yhiGl*DcF|GWDnL=M*^JAKUo-F%Fsd^b%2H^|1OJ|uv~F5>;|i;( zxerYd1Jab-x?k$*Wl)%Q)0~m`exy&jBV7d*^Xycj?@&5LR|bm3EPngj|HgIS|Nh-k zs7^1HicdVL8~WO-F0yp?p0pw{qUrz~z)VMC+zN5t$Zp%3oh z%^1e9dxJXOK_q=->6tQ5a7sfg*T)~ItCm3_aM8dYN^7Z$}D;E*hw{F~!M?E1*XH~l8R z*2!eh2ml8*N}U}T8y#a~(ILY`XICe>yE`$tdJ}9Od1Gk0)N~Ly$1k^IFXlo?M8)}ae=?G)!vm)YTsys>ND8)0R2HDJ(nzUik=f@_43RyQf>7LcsOUno2Zb?J?V}q?XEReJfYB`U1XIfSZR+tenN*_p;CV%k z%}O1MQ?C*xC(4}rl7&;uCXcYo(nWZD^(N-{Ek`6nvy=Q^g*>f<3RY6+PUwh-k8f)X zyqopF)orqh>EAPiA^t*Wz^Dgr3XZ`{x=`+|nF}aoC9l`Jmr^!PFNswofM=6&G`L={ zVBuWuZ){Y2CaEZs&^t539+ei3YAdawpES}>wdOKteq4LLq`V$6=+eKR>IGfhedy@y zg=J>AIvVTNuB4M&<0g|mQ~=*6jHSKp?|$X!b+^Sh^p*STT}uTbNkgtY<`YsWi*E?6D>05Nx^P?`fJt;TAH+c| z=hNur?Q8Xfd&o->iYJT`dIEkkVi($MHktY*wv(%&oUz920Z1cA#{rUHl?=$X(nzQB zTriuMD6?|vpo0#?E=!i6R;w^#r(I9{e#%MnhF~LuiIkh;T}-Jd{}S5ufzHC(hX>F| zU{3Q4SpNb}bqCN)Vq<6){%Ea{7`~;#v(Ni5yBM z>>Z^}1gKbqktk#MPg2w<0cxVC)GCbr$qP`;fx=D{M4a+8>NT#FlUIlZ6<0EtHFE%K zo>+^`Lt9~rn8_KD4Av%km39e@$kpdT>$puTPavuF_vxkSZ9+qf$znIJ|1K$yryEN} zm`o1&e4d|6#1K7)*gOK3Bu68+P8B^O#i+JGI*Iig)?mhrPJHl`_oBC_mlfC)z9?=F z4Q*kZMTS70fe58JbLTSAG`w{yr*(9Hi8x}?HJOSW^EhA|nS37oGiRY#?BLBpj3615 z!Bxg7?t`(Ep^Z)JJu|rV)?0D;<=;W2Qs-6x&-aE7JYfGXEn2+j*S4LK#B@ITsP2f8 z`E22p%|^wb3#~O8Xc9N>2V5hdo!qQd`BAS{dC@3#gBG4#aiBj0MQVzDNZQCuL!)CV z#g=+{IG3KB7{l1`R>Z!?83%zU>I&}Y=;C@nwccP#mpJ>Lt`gqGpvw1c~;vmA%ZyO>Rj70!6F%q4oO{tiqkO?8AINfs`i^Ut+YzFCUhEp@z z#WdZOiaGg0Cxb1@|EVIHa`H)mjo4HVLqnUGta-~@-iTe6F2VTZIBy=pS7T$NNvP4O zDs3PtITs2!z7D>ZT7}3vnyZ~GG1HaTY`%o9?itAEIvF?yUd)(;-ir(<^nJco)+fS1 zquxZ;&BL`axbfzn;<8Jx#O9$Px5_dsyTJX#y-4hjYSvcnRqeH{!Gg2t2R?Cd?$;A_J)yL_? z7#kZwxjKQ@zV0v_d)zzNsQjkKVTHismMvSE|4%WwqYVK>GP}*SZ$=*qr6PNS^5g{T z1CW%=k$5c2PN7gNp|7u>F#)*>0)A9KkcQ4CS|=J)oq44$RQ^#?M7?_7NiD%Bc# zdS|dFnkY}MdHw5Nf7W|We%G4+{MmmR0|PVFk|j%`Yp?yD_6WmUhI+{@k$a~2(hMRr zynypi0vwIRD>SIpo7{Z4jC#4uKO6O1Iig>kOd7QswTpYqp_9wqZ@(2d;kdV9*351+ypYALn%fA_^y&;eNexYl zL~ZQEoaus)CW+!{A)zg9<@pB&^CB`i3yMB7*XIqwDr5*T?{eR-puAA1Eds7q zSHI>puRimjLk_u*+vblrJW?tQulxRYr!c~@B?G5P895PawoDycWis%%B?4`!bV8NH zUzG@?q|O|qM&Berp*)??8qFaLl|FdOaZCoC<;ijOF1dU+9LjBlrgzin6obf#@o|0+ z0%ok>2|_Gdun>KHGx)IV;o)&+Hy!FQ4#W1m0}4xY(}_JJhEnSyH1&>j>&AW^QsnpEkxG8Mjyb-l}1qZ$CrTFlNPQjcxGg-?R zg;Y$+Ve`-?4q2oMijx81#Hq~e???a4nHU=##n$012?ZV{RZtC>i={5~_RU18)XDd} z(eRQJXUw)y(?;O4CW!1ZCAYc}*K*^HH{p_tFXNg@AzxsyJvuVH{uPJ4;_UO!IsJw! zFTc3G@JGD)P2&Fh@3Rg$-T8`g<`xwuL`0?a<-j z&6u1V=MZR_DM)29_dzZ6^A{{&>@~D;kkwf-DWH)N5bhvPKus^XTqpAfUQ0({XpICb zm}!G?K}K+aih4H<)5Q<3{}C>|_)6H8i(;XKph*fQ^|!tD-2K9R_TBf!AKh^MHe-2j zyzyrB`q#hKrTcaF-G7OUnSGsS6bl(W##;|AZcCtB$&5g*TZc!v2GOF7rztp-wl{D~822}Ft=~*M0Hv6w_FAo>8X}>3r9R$|)V(Gf zf_@EA;sgT6Mu)Lz;R3wp~cQ5+-XCap_GOgaAmO$Q^N&iPuQl=0il4c#( zP9yMR{Oo79;F3!&XWnAwz#MED+KhU$zWS)Q9QDz&&pGX;?Tw(_k9z7UYW@24MsHtt zWc2qI&gd)^99^?l$?Z$=7X@b8#lADD8#j{3+&BxT-fQ+`I7R zBM--WPCgNP?YTRXOZD0$9Giw=Rq?yu{{{~}{1E2Oor~R;Er*-VbJ|80x?te~ba!`Q zX!9lvZQaaDGC=L>?)dvrM;-aegAab$FE76Mn@>r%-}sZ8_A+rT@6O1ZYH`w0!9LlP-^XmZ)I-FC(DWxHVZ z+yS1h)@U|(;Rsz5N~WDd55+XN4iDs!bQ6nA+QFa!8>PR2&+eMLt{OE|DwCY%?YZZ2 z9Dc;>aNM!)z`+L}gnZ8BPGmpuV40-7Y+!KHdQK+^Fc$JfX8SUkB4_s?d)-1MV1cfrJ)(yB}fxgmQ3$lb`%2uDRw~ z-jJQ0-3WqsA`F7x?zjJnvp@dv5B>V-jG*;()>&t$?(WW6W>;5tNEg*Q4_Ui?G1a9* zX(5Fq*_u2OC%S`{Qpj)rtksD`$lmco#CD9Vnd2f1Eehe|Y@vwxOBSOM1sGhv5vw12 zjCBhG0|N+}RZNVHVMhM|mM(b-i!TW@ZrT)}QKu9R+-FGN6FBOd(Sg31`(yd?#TeW; zgrUt_v2NWU*00})vC#>X%N6z(la(f>P1e(=yO~qE1^St72|nbL2%&*lGckAW94uYB z1oIcnLn&W?>(~q;iBBPnKyZlA|K!*NgSDkgma*q)HbOKT5$c|gzM1{#>7IefavAG4 zJb`MX!Z?I}AC3Jf7CTv4ME4}3f)U{@Dj=D<*hbX1<|~*uX929RU6!3)^S$rky6@e< zB44U1dPH`a)}u?7EI#wxbIuNa`2N$ADyRdxEy^yk9Y#bcK z>c>|BVFSgEF6_R??wHXx8`*RLO)uabO9m0vUDRteOpI4J)~2)6{nUWzI4E^x(bc^R z!rgX3qeks%O@5FDa(H-{UsolIWuH5AmaaP76%;ks*oz@CNDXVPv^_SQeM z+YZ7;^|>n3=gphD6KmXx~u0nxhazN;p+SPgBluAa>fKh#Gur;ArqJ3Ej zY#EHM8Du#$gvv^8a*8jClroN+=9V`4JL~*}uJDC^9UIrJ!4r?I;*(K&XU;+Q%-QJd z=!P_1o`Im1(OPRrhDr-it(B7=z7*27t4H9NR-z%)q0AtOmy!r5#gcl5g{%pT5JIzt zj+2JtxX|(j#r%S3kMoT=43ekJx+ykx;yEb%5Rj#x)9G&xxfV+4NIvGIP{@~9I#%lI z;pcAIxDn%HBe1BchCZB?L03;dhY{+WCUGgH$=nM`+y>qEC^=1r1UeCkR+X0S!N8Ax zbR(|1@@l@n*=&izorhA8Y@0Ci08Eej>uYbeq!jFCI!_Roa zz1iE_w@RyhbZn2M*7G58_pS14+^XC`w^fNKf$21!MryvCK%wHUq=!wduY{$~gC<^!c?Hct@y?=qU?%+xErrtP*a)Y6tu&N= z2Ln*X9eQ#LRay(B4h#&;;;}!&BU`a)(?-;4le%9a0n9zU{pg}|9c)cBF)!0Ts#K?m z^qJ{?(kLOS!H~9rhK&8_$2YPkAPho+6C%M>9MyYzx>sF&&6R&R<&+Oo$Fm~@a!N&2 z(~?oWUQ4Z9c}KAS{x9{Pc682r-*aNm?YG^2RLZfL4=^mv#U~5`Sh*|{0x3x^HCdC4 zt81OQ8|v&p=WSqPi2Nv#l<8&{l{B7M(%_D0;>}}WqR`omRIbE}SDP5+nFLhlNLd!2 zz{=R9O>#-z9TpF`PO-khWMCzeUPYf%uP~8{>7m_)QbMhG_l>ZlaYL8Te~2gG|R_l&6z`D4|dmEhc;tk%SQaa_Pzu>s`A|b zJ=#+FosIRTQyqK;2ML5GjkO5viiB z0%BXVpwvHBgs=n*1jxS3c4p=*|L1+b?@Z!V`*#8Ba!;Q;RKa29%y+);ec#{Ki%Mrw zX$iDTX6E5eP(a5C?oQMl7)*&xdJO2Z0767nNJ8FLcxGcgJig*d`nwPq!(+~30i~?$ zoO_%u+g)$I`IfPJ_bwmpbj9?0G>nL;W8XK?ucKY}_UXw{BW|5?fFfiN?67Dkh^$ zN#;{Gop&}WbqfgcoIZU5PMm0_t=PfgYvdLtNRb^Q+B(iCaLkP~5wxOlIh?cun4XNJ zBhZ zMZ#CGg~lTX=N;%IhsU(n?V(ZeQ%|jjRZpxYVhXmQ(P$iky`e;9<%EZ-tEb%7(b1am zqbsivpMQRH?9kyuaP(NCQB*WgmMyX^6zq+!UcD+>GVmNbBHLG9`S1FRFTVKk)VB%a zCuG#uZ~Ae1MmlNwag5A}l#Kf?g30%n`xwN@aBfByqxO)kXJA+)A4BVGVUZMz;8vZ# zgh0a}?Bit|DA7)Wx<3lRhSWeh!KR3+MSAh63_&Oyrg{b4)bR_F%-|J1{9?)_3!V8+ zCp-Ib3zfJ;4R-|uwi*r|fTpG_09%jvJ zp)DO@<(%vs$jZ(JkIzTg$;sy9@Zr%TWL0BFYhA8MwAx&donHu9*@Yko_+_h1uV_GW z<^lb3CUEwG_ulPrky{Mb1Z!5W2aneSfk1%f1YKR-FmuNAho()RvS`Ybs&HlH`Fd(< zivQem&l5ZzSNveZA)~SJuzFzs2eH9rgT=g@0-@o+!5BsdXJ=>Gue2liL^a0pY$Gnb!OUgA)>NNUI@^A~rN*H)F4(<}9b;fO1?VCf; zjzFVii9R%{hKK-){5=AKI5{2X50aHA*O?g^;Bq-Yi75~YDYR8bqd}VVAufPtsUTWu zi#7?VdXiy{@0^{(_*Uu5wOI*D@9FJe_KZ@oIKtH?JcK3PsG3`v0YIUWpH}DkXtwaGBR>O(`AS$I?I~I zhlUTi#D0Y=))4rslNehfJoDT$$Tp@fBQ-UZP*B4#^vRVKE2^rd{Axx0i3YBe<7=(bgbC@CL?$Mc3Cd+01svSqmyfyu zuP=oLVz@}q$O9G0ZEY>k)7efMPyFviuJXpu=12)ZZeBiQWaW}vPf?iAMidP`+)}CI zO8P$`&(ko#?Qm1QwPD>lShscqy(jFVy1To`baeW(X%9}GJo%<+(<^)XKhc|>-<-JO z-!6}9swOu#H;dO?bG5#8>oywo7UmZlk|Y{}BnhE#NWcdHEqe+Iill=4V%YiSUv%k) z8~)oWTdXto@86$}H>MKY|*;)G{6JOlL`>p|6!9p$0f2#RhdR!n-hqGIB2rcbZx{lt-R{qu>L zGiOAbnwsnb1`P05R7}!#?06$_^w<&O=!cE;o}3PwWVOobqmMos`{57gLsQdn>yGy&M4>f2F2M*1q>7i~wYex@scJ+YI?V%@;&_^VYN-Di!JkwQ;hhZ6gnFyo? z5>28NeB8~0lU`WCr6p~0iJNGmoI1lQtR#M6uO$(cTP79`j-s(@MinwXEh2}U37^0o zU%@eRh;Rr->x$9j(o`z-4+EoCQD!>;c`}PKJK9v03OC$+us-SR?k0IU9ZmT9D5K*f z7E^?x5qlePgG|UTC?uva8CKxpB$0}RTLr~wHzHfXgh~qzX9?)dgidj*Ry_$D);$aH zgaHm$3f&te5mu*6sk&#{wCaV`)sut&tPR}0{dFiQ8JH+2D3EM6TM8DJ|MOPbb~8_lbIeA45TCEwQ@M~*Za zlO|1!m6n!5T3TBAz<~p#qM`zA-@g4H8!YYI`DbJEA2w++H-vaQEzN(u0q|HP7SF_) z0$R}GuF%sPgaMH#3>=tER4u%@hN!aY)_|l)#B?PwxJ#M9kxbS;ib+>gbWuqVTB&jv zHbGB27Jzn@9UEcpWR6ow2daih<)gD*LS*v-+yUsuVp~TlD}kw-xhzZo8zym3s|q{^ z+62$c_l&=RugkfCL-YJq=H;coHOp;(cDCyoE#I#MBGsJT#@M;@0!d zE7w2I*!cF_@4&C2XZP;Eg%w2!$g-Su^UXJ%^msh#4LAJqpGN`KWWk^Th2Zmf!O#^Fs7f?i)sn6v>;|(5lSz3O`)CfyZCI9BmA5ok~)6#7HEaM4VI{B28a4 zJ)q=^$Bs;aEIW%879!7poiwtDp{ zZ*Om}(b?H4D@rVU*IjqVKi!MjfQGW6=jD1L7goMJV(ugN8 zV+oCorFrT)=Z>-V(&RUpPJFy(=FA%_&L10wGjP4|!sghNDV6wHe1Sk9FnDm8R$Dte{`%{$f3gK{%jwo5 z3l?1S*S6Mn?Zc+yWvZ^*5HiK>x2va@Y;r9&kw~eyrL&~n{%RtD%i=_ylfX9~yg2|I zQWfY7)p!j-+b04-+-=QNIkUP`qjpp0Tu36k;7ufTkU+9;vqND6Fb3l?ABALm2fda_ zbJs-Z$G++#-bnqZ?|sg#%+rv}s!+A1YSijsuOCRyfvo%zaG=c(5m}gE1>0Cd2JY9y z14xl*BC-w(YXU47H$MF=JhAFY+KO?AhHk8i5{cK<)h-(~dgQ{XRh4IC5t!H3t=qK9 z%F0M#VX+vEM!dSN8#{LFh<&OT^Q*6JZ7nM+`_t*ur{k%q{;{2%U3NU5Q5D@CR>&1q zCl}Qerj!;KOIPQ_SBZBHCY{_&)-br;E#eQrIS%yniAn zwwdRGDDl68RN8tnfrUyE?i#{~tDL_m3dsPlkA3M>yfWa2wY&mj36T_?war*lAo~dG zft7DKaw>`U*20Y zd?k@a?l1jv0I2Sy=>2mMrmx!{L;9^X3`9{N*o0Q>RXi-*nSW z|9_i)MN#wv2M+w>=9_PRv$wa``awg(NW8&T(l|=c(-VeJBuMwpt3taTBaz^%mX z^pK2x^D<`&{0;!co}l|>0}cof9Q`cF(QY>l{_8h<@4 z=|7Df0`ec$JoS56wQ3bD473l#d)L|BsnyiXdScAzQNOCGozZnB7r-;mJYyd^bg0ec za)~yZ%@z)a+k?Si_>Md7(7$kk%ig_vBmUIXKVLq7{z+Xo${UX!OOePI&`vF8dv_1S zqA^JEcnP{Ce4lU80Opp3n5MP|jvNF2yN&1SR9vaAP#LBs3yDmI%fvS7gi_0#enKbPTVBpOY;`Q}^ij2k!l zuLlnwK1bD!BBsV=1s>A3yL*B}6LYw|%qC%?9#|N+3Nem(FyA&v913l;I-NOGs>#jD;nNdvKQ$F=JY`fh<_yx%y4;=p&Dk z{xOi6L4WV*))u99_N@EIjUT^o-rU+Rya={z*&>V|Ki-L)iL$aXtJCRpWn^T;-+S*p z&FOTix7~JIV#}5-uxZmK0A`WlI_ zJeV8|HsiqekL+wbww`C#ts+4TCNjNu;l@h2t*kT&sw3aRyQ`S5$I7)dbLGW{FF6 zg9SLSr9;dlf^xiq%&qMS?o|McsU%7~E1D5%@b4yTA2RgTxF@qno(M%ngTU|4B+MYH zGWnUo+f*h*WsY-%B%-|!P8AaxA)`n&d%AujtayACDW@>yrK6)A7lHP@OD}#Eo1ed+%?_(AP@{oDlO-b4|nO(`6=)37u2dIDJl|(Km26cINPI zj+RZU|6~Lp&Oby6GBa}_zW^n50Xj~Ugu>0Q`(SIcZIw9Nm@EJVnHa~o8?0Hi239?_ zhA8K0em`_}b)x4n)YjH6pItlama*eTh0er%pE140rzTYSl~=a(d@U9NkbFD(;kDQP z$5yw;)4gZUo(fe{Eg~AU88XC>Y}wNbdOQxPDRzR4O=eDi4`qX6yoT9I0?QyW_%V=l z7!vvkbSdY6efg%LhbeB>xLOE{G+j56wFYkeeP5_bxB;?{0%_S$R9p(FDe08NqQt}G znLx#)%&2UP5UX>?c(Vf%z~}Lim%)bB$Shh%X|G<7hiGx}cwD{cqKlVKoi_EhapOjR zDFErU*Isj9a>@4s#l=PLSTtrmaiY2P?YDPnUz>%1*DHT~B{F&P`7Ot_d^;P(+4>0Z5Vw} zGy4-dBakACnIdtxM*?9G97!bGdV`q7*?Gl~UpN3Pw> z3hP&|gZk%R01+M8oF3+htj3jj7tFhF+O+E1hL0E;{i64DcFineUqvF3_)o6CUirZf zeh_YMZVumh=VI+leQ#$qB>ej8uXC(=V%3s(BJpFp)gt27t;U%`85!R>S!qx*AfNIM zw0M+lwZJTQS$iijXHhLd+=!3V5`r0Dr+xN3yQ&Fvypm=%r?v;Mr7W|GO4nxETV_!G~l00O-+HGjxJce@+sK#+-C54 zQ%Ri_Cqr>VsjjYCUR_mr^VsntBk(o9&T1s^u3fv;cp|Z7`0(-!x7(A}($boW?Ig<5zYJYo}KD!%JJR@)#y~t!V+;|EL$)wQ*Pi--{6iw6nD00L#;JAiL znaVQce$5f&ICS(v zED|Tv3#Y@yw|?^pXR&?e7h|G|Iu8d=?ik$Ohp~f1lIf9%UuR-mi7^bo?n!~7f@10r z>=bsPahGfghbEiaRUEM{G|cXcBv)fh2i#C@}7 z%(!Lz#L@9Hb?+{ytr0{)aEYQI9yoM3aW=jm`77Rmf*Bd)^!>MSkB;N%p>EoH`2*rLV~%tZ~0 zMFq1IWCc7PH{|5zfW?89J&a9FOlq@z<@7hrVE@iac}@v%IlT~zD6|v2_`-{XLOMM@ zvctit)~wpv$MbS>7LK1ZT0fIFEs&9c8=DQC0MFJJ^Hnbd*tv68*SPa5{$tMU{1;ZY zwk>LDX&H$}f`!sW08X|Ap*wOAN(L4}epZ0KYB&q|K-_`)gf6o_^!uf4!)NP0Wn`q|kB&dzsvV*K_4@0tH`dkF z-Dgb9w@tSpw3m%C{9u3hK$ z^ae$r+ezc;o=^m0hfhE(ra@kA7I?f4u!t-!2RL;7KeHJ`o(j)~P9k|iA&m}&u9DS3 za#W26iW6H37oUy!9%I3o9>{>^re;|A*b}hr^}m4I?;}Ai`ZS25n5dXA;r_HV|F7!i z&QZ_y{XuOa@`40G(7u&N!~eYY@8AD&U0vPWAI_h@!sYRVxXHDqDp(KJSO&x9A`iA|pDD=%DSPq0nq|%co zPQqi4JO)Vh#$a#syX_5OO`xh{Mvc1f;(2p#{L$qYX^<4)4By z7@AJElczHa0c8>voqmvdW&us&d5Y)*C2Ei`5?JqnU~`akT`=r~6M!B8S!6Lq2v7w) zUTAA>f#nZA46knA3Uq+PFXiP!^uoe?S@H*n>n*4`TfqGJy-l%43s|4^~M`-=vkSWJF~K~P7N9~D8KpCsT`~dt+GgG zeK4XB9S(6Jn4^q<7VeqgKkX=v;hKl^eC|G3XbdFI# zXiwAH(g_bg@Cdy6r>)=(1iqQqzcAXedXIVoY~y?uw^y?sZZqgw&l>ZI{BcK-=gA)W$NiXxjg zAWmQvM#oAAIkiX)*3uZrBQ(N=f zf7Sg!cJiHf-YNbw(D0sn?h{6i94&0$zEwvWLNKozZn)u~)oT5(v_RnZ0|%D2t7O9?(7Ye@21ibug7@|xhNhFP z6gq-XHxsrBM2F*gY{qR6St^UlO*lz`geYQ4HncRi!S9wm1aG|Y7O9zR4i6cHqkO$? zPVEEp=Fa`~(DKsIzv@0%EEdr)jI<3KHu(DeYXi6cYpz+~*tP3z8yb0pLLuwo#lLla z|NGyE%*;%qzJ8Nq{`~o3OG`@_%b_c-m`{W*6xFz0ZhhL+89iRFw?&3;!1ez7@3#&v z9s2X?X;t;Fz4pgj4<9~qo+vo!Sit1DQ|+CEVwRTVLve8~*erGu!mwK<0P74znjIj8 zj>gmib20I_vM7>g`SRtk_0?@)vpc}$^FlBhhGWML$7*NJSa#9H7v4F1*wEm=_%`Ug zeRRI_&N~TB)8yg9&(+qhT^rlEbEn5_DRdbHZn(cx=r zYwLXb?cK4r-`;J$mUj8&KkT(wEWIN~jWWJA?c-;;4jkIocHq#y&Ev+6Js}-C_F!CB zCq(0MaCv>?{1=Oa;7DT=8D$SBDgd|FP2?2w>Bm$JjNn1PMhf?mnDgt=50Ajg6|3Nl z*ZxM9c2=(oBIuVCi)d4-E0>NNKX%dZVPBk7at3!sWAWm}U4~&;Wm&d%baXfl9&AYX z{eDGN)gFP_DxKh;O9qY%>PtupviQ=qhTAf)-dU^QYOBoq*ARv0~Q64YLNG5B-x!74Z? ziT1(!e+MtUvK2DY^T26$LIfStLf!Fs7tedJynNU#7u3x7+L223?%gY%I(16Gl$fz& z$A02$;je#vQ>dtz_?aQ=Z{$M2>&6@Y+nJS}bK!#zJa9+j(W6DFZZ|#UWP}xuQG$AD zQ7)9`rGe85fYH@sCR9S*rI$fkRu;6KY=cK0c^r1^_#4=KUJy`~WJnMR1*0{!Gas&< zGwb#d!^?y49l7Lh>KniNo_q00T{m+0uy(K8wLF%H53rIoA07cd^csK<4jcq6(hCEM zb08JNM|r45OG^(t`q)Z%^|fu__h*s+BF-p!dxJ_i9Qti>aq-d-!^^|)9lE4%`Ug1G z(t2c2Ny!HjC!ddbNyT9$YD3;425lmnh*{$W!RhwFi1S8)C_7>KW2<2M>wlrdbqwl6 z>pZ)~79Tb0+B9^iGUUpm#~PO;5~`2HG!83$z(}x{46cWi z4+V!a71}z&l#Xh1+M%bj3qEW-78^Ha%#r6K`;P4d-V0W}z@nf0=d}^|j$YEY z?E`gnb-#DjRX^Gj4J#=J8xEC-vPD8-EGnH)mzbAd2o?)=2dLU^*Dw3trAr1D72omT z@}*Ju4qxK8@k1?KxaiL*DJfU!x_%e(6){Q&E!G5yQQeTwpvJ?7$K_a-mzTfj=38%! zz<2x-zSSR26dkkY)O_}}ZB+dh7l z%h2^`c6RPlkPX`!4jx?A)6-ki-PIMj`lbiFKe_r?F*#9m8cKttq_@pEW9HLMF O0000z#AYceY!ky?b|KSi#INkwGb`;I^YjapB?xq-nZqa&q!l zI-QPLT3R~J%wL_Dm>55N_%KSP61v^4{G9h5aU7#ksUS%b)awn@YW3{gsa~&lqS0t9 zhPkP4eB&EWKlZj;5r@Dy=~Q&N&mH4<0<|E?&H7lYq;Y zFQ*SZ^pGPW6@D*!?>Sr>T5I{;0i=}TTCIjtr%uV=Mq10?M?@&FzPc)(mvfsC&Z{tV z7%qyU3K6AKQ&Zh=|FG6(bHvOJTY!k*J!9p{GFt5(42B=@o+HnG{P^+Xy4h_0J7dg~ znb19ZtX#W>Mx%*#tKC;)vsfV6^P#xSE~t(_SkFMU0Z;>Xt3)^xy^!)gQr z5Fz)vq5zFX3!QEUY1#upA&NBOH~~P2GOJRm1fda_DV&dBQwt)EUayXCfBS#nfd?MA zWoCNj*Gi@GpEa7Trcw+ALI(D}W3Bb)K0J$HE!52HY_flDuDyJ189_1W*=L_+0NHCi z@x&9j^UgbwDb73Zyn`Gn09tE@O(?8anBRO}jgF30K6mF`)akT+Q0!V}*{rp5N~!F4 z#Rue{mHTzp0wkJ?g^P=5)S4(yO~L^%&ZQVuSnH0=&d&a;qel-uzPNBzEnHp@6R%Vz z=op<|FB~I8#y}~J>c|+_d+6+SwE}BXtgWq!B`BB605q6^PRAmN6F5gGB@OPGcH&Up`HMtqI$iKOP4NX zf)WLF&OvESfrcVQWC3J@2UmU)$7r?NLMsJ0Kq=*d>DgDQRBO#vqcuG}jfI7UbqWa7 z#@W43O--O&D#6+o>h%r?1b7Rj03w9~=HZ7Q9%diG1Rg)Oc;&Ks_tZ~ODOV9z352^z zqg+uSMUYkHoX`M!4;7KT?)B0>RWN%H#ZZc1QwQf5J`86aMysP3sgCM2?N);Ds?3ay z^*YAJN5IT3&06T^K@oAOT+S3%XTlB2 z!l|_w3#OeiItc>C>MB~T)}S&lvu`u=e4r)UX}3A;^*~CsoO4)T-@v{1-h(7o2rd#X zUOW$g`eQT9#N-5q6_GLBi}RQ2Kl#Z|0EU?Ta=9wP1rgX2T-p~ljEMpEaIPc#nxR~- zh}F{zW(&D;qakDc=p@RBC{xcWdJrS1H9)>MhOqxe?Mv)>ri0q*|iH_ zdhCnXw|@?AzVW6g{ine^_uO|d#2~GS!h#TP2b8S1O0^1O5}^ZT29Xj$6Cr>AGH@PX z&(KOCXHpO`n8n<~x$KxJN(tF&?e)4)%3x+@Tooo8tN{4U-2G`*tUn5{{3#p+xq+|! zy{GW^pMDy~7`*i2i=qf}4@8&@79>Nv-R?V&+2QEXLt;IGWsvh@W25-|=l=$-ty~j@ zyBQc`6owT<8K0*j#JJ#5rO|4(;JJaMlnB>HVGuE_ONAqiir|^S%8QbKwJ3#Sn+q85 zAdu1$*2PhTT5Thk*wM2g3_X(xDMR3A%r9Kn4wcCm1Va=Rz0zhFg02vIq29$>LEDBStR)v=dz{ykZ{pVW_ z-15fs)O6pIXZ8T-CLCKEavitf)&sY~Z8p`^r-*{GC?Cbe8T|-?18p2crCiPx%ZtyE zqq4fX7C-vMFKpa#$L;>ai4#UC@?nrtrm9qIy(71{u!fc88ge5*!kV3ScZe+l3ID+< zFbrgIlLKoHEwM6?rX8fVi(WTE5=Ssm35ltIL|MEzgRowB*c*Z)C6tjmkIB(8%H!h* z0fA7(uHCzmx88nR4e&E6l@fOEn#Ly~nCzec2XN%@VR`*Aun0M`KI+w1U-cnWje;Xt zVdjRDFqZ6qpCO^GH7Pu^Sb_oQ;Alpf;~40p8Wd#0TDRoA?*-qao~E8#%`TktGPKbE zA$GksOsm<(@PYv%S>;Sxk|bg!yaO~r>j;V*ocD04MYESenI6(OMWvh|DaS}m1olQE z1kWDU^}t?;;Q85^S?rtJhjyne=eIzSM$Wh$ zFTM0qrUI$=F7tEz=AY?yd-8kY_iO_yV zhys?&2_~n;Bu#hhCPWM-NlLx*=g)CZif%DmYx&1Nej8eAl{+t%h@iEBF@Pd9%+w$# zLbibw!t(wT=%lX6y!B~$b#^BkSR(f9;R4?YIQ{N0E>%Po_Xl!ANX$g z@28$xU7510}K-|%+8|r-s?PW-_Fm;Dk_9cIt-=y7C{E(W<5_B z1xtXB&R@KG?%etA%*?c$+Xh7Vp-e5;ylD_i*cT@n%r{hg@dZLV-gV!BO;f~42}&g( z09^}3q-}sV#t79p3qQB_00Na51Me}kAW{%{QBhfxQ_MvraZ4(ZAqxO`7San(qQBsj zf+7L|a%5&GO&?58O?~gX-+j?K#~|9irAlJ6EgwN^S*iFWrppF1`(PP_CW=MTtTz#% zhlxreA6siXzjt;TO8d;R1;v>T(ZkVDx41oP${~ZHrUnrfz?5@8<#Hr=PuLQJK7{xd z0Ox{|7epY>ML{c90tF&^Hwf{~F+ILxt|tQ0Uh789s6_}U;a)H8;3l9*kx`_&o;}us zGK8K=j8v*<)azgny1f)}6sws^#Jlghom;8JTfsND?a1w+e0{gjhf$RZxphg@B{3aucH-lsXF1melr$rL0SA@?&oJtd)|za*9qhmPKkg$ozSdJpSdHdwl; z;h?m`_kZ-irIFXPyKM|95(WKaxfCBHBJg!Jf8^L|)fGn%h)@ZNWB}BkA8h;(UboIY z>O6f#D|!w)hRaqb>ULe4YKdr5)afBbKuL{jng1j|r`zfJ;61UjT5W^OSD*a57)B&XQVA_;kGy;G ztRlJr>v7-X2Qx^1Fz;>b_bv(*$k0lfRPZyI`I~ik zTaC6TaZ-xF>blTb0iZ0^T&Y$)8BKe4@9}E+8m_I^6$8dIr*V>a0BjB(K8RsNsIRMw zmoAcLzoQVdup-3$GB7lNlo?8_fbQ=FurAF?$m_Ecvx{RRRqPxP^S{1!RjPk#D?cGu z&`*KN|7P#42NP|MDouVV*Dr;aODc*ZvwwEd8m(QkE!KpQ!z?c?WB9-*SIVZ@XzITG zX5Lo#xS2Q@JW#|UP(Gw1TB)pVa0fI0meJ~)49sKu$gc^sn$5iJp0E>Sv44^zMKmKt zsDXr9!i;L#OPj53$9eB@`N|>`kzvo{o_S+#YOK3fZ*!~N!CiM9#oY23Osmzz(1E1& ztJ@1GG~RC#GV`Y^0wgpn{0izT6amOX(maeLBylnw=;5oL`7fAxekYaEa#F&N-+l{g z>+9HV{-)4%W~NX9l@|GIBuSh%yO1b>cU;ktYKIo~ZY&*Hk<4qYy8t#kBeLFir>4g6 z)+^tKIEu!=?A^Z?Lk8i-PPa4B>2=2nfl|Jz3*4Ay6^OLt4~S`SC4ra`X(PhdqyaC{ z12hRApV5k*B%+hp0kl$R%A#|!g0)uL_boi5-R^KvI0~U+-Wlbvy0(^C3J$xhTCH}g z`-Lxj0b#F&^fP7~e>T>n0M+%xUF#ino#n8S;Bv(`i;Igxs0dm$n~h(s)#|?>EnY$m z{-!9RXhZkx#R_oVyh6FZP&Be=Q7%R{Q%VxlH|qbV)0zHoVr&G?`JFhoID76auC1)d zYi4W{QVq>2kkW4uc2VJh`;KSAmr{4wpsPdnvphaAk)W!BuB#T7Rb_!+|N{M5Kd+xqV_FSaa!h25#4;_m3?Acuo3gEi^ zA{23vZjK@)O}vT}JKN*9RKi#O_Ae*nlapi5g}s?3nIwu-;+U)bu@-a`_qO{J&-9*LNaBmv6fxqMgtog#ixm49s7eM{RvWu6y9t z12}g4n5{P&*Vwb$r0sGKlYu5ymzUA=F3Ue)B3P95jdgYG*zpD_m70*B9?CZM5FgXh z(wZbs;@Au%fM`dW#U#$xK!uM7rgawf9fhKEo_RHloov{ZQZzK6mENurNC))Qt5=y6 zVRCE&omNLiKF>dQ*U#CIV&2lXSg);NY+@2gxs0Pnj-uIUA#4@I>gsCe(7_{BP*a*Xk@(NSjme25W2AGRInIWn^>|`wtwz>dHExG)$y9P-|Ul zZOz*H+VE~^$h&p`5n`Sw>eEE=ep7#foY+h!*MAPwzmC#C6cLp2^~;M(>$_$q5a%sl zH>+r!UOO|x03rW7w-+`VV<)MD9-JNhvUSkn(-qU?zYS6bxch%G$rv*eDC$ ze#eCMJwUdstDTV`vusIA;*uyNd)9ON=1fSluQls!$KbxSd#(+~JrrBmQ~-e4IF83J zeDo22G(L6lz6TymiQWOT?=KdUrXIrxA~chTx;M%pd5CLj$ms@4y04cBHlS4M{7HjZOgh(_E^fQQmdU#j}^_!w){dq1%pLj3V9n==@p9 z%6{ux|K1C z+@6_xDedSPZR!Ql*4?v$3bE^r0iS9`N$}7&ix{ z5jR(G;ldewKW}$mvt2LmBl5@%uE6B z+)Ew6Nl?srT)A=$eTxtZH=o)43E2}w|H*ItCjRU{{dX*1yVft=CP_@ID{JJOlg^y2 zn1O+Ol@mzitKNGs7;=tC1P>1wr9qkslPUv@;=S;)?WIUfnoT<467N58Uxj=|8>rPK z(2rh(IWUXA(;+;@gum<&mU<4cRyVitpMmw&8kU0K#>Pj>M~)ncjft8QlU3Qn=p0Lx zv0N(SbDz5ld-v{#bKbUEP0Imkn&O2Qz8B`F;Vr>?E06gL3ia9F4NXLHb6P1p{nX=l z^|iMV%BI4T*^RyX?t2;nwN-K_7rHnJ{SXpV1Y$~tgoW~v;u#7G{n~$?r7Q?$|L!@w zf9l=;8BFtgaU5U&R5a;4HWJ&<-8zYKHO9ybKY;Zf*G`?pdfGusgb4;l6mXaB;+LOz z0?)npvOEikh(2*kU!&DQR+jGTr1xIFpWqnAp&~iL z?CV67W_uzx)@y@_FrmRgLsoqfV|1i~bln!I)fw;oZ8GmYw4!ZBW1Cn6)Xzut z+u~(XiT}a5(4!=2|LK4Eb6=^J3*kw#=_8Llf?xlKUq`!H2irCXfN>UZ4k`!_#Xie? zXs|p3=@0((zrpYS^M5Mc#h@Fer{(^Ox`8|g$`C6B#mvHg5Ws4!xz|fwyVX(W&VCdv zUt0>NRC@aK8F37WMB52~9sGXB$HriWeo)Q(s++V`J}o@J?}N83d0AX{UwyMhzyS ztxVgEC`5StOMmlGy!^)N;_!V83{euTj8K}<5hUalzdC zdcE2C=-l}p!v&?SA~rF+lD-Ra)~aqV1xYAM@_>+k{G0y>W|%g+K6w9Kc>b?mhI6)J zZ8`#=?{)E3TYy9lT;8)%bSDGM*-=B~%A&LmgT$08;=I$DAt9tv^1zI-$uWHXi;w(z zwTu%RwY9U|Zch^a9$qNH7>#X1l+*aN;t zL?}y?K=|oTe}driMWdq=k!NpLS2ucVYjwF70mCxqRG>A=%HXLd9?!ze&$J>a0Cxg7 zlGF6bz;z$K{QZ|1LrZKT+19S}mzvvwKt&D<3wr zqTR0J+R8c-OcRp7UlEllThZb)nR7#Xf)R384WhIF73In%2$2n zBwE)Cb1j@X{Xyx_pUSNhj|J-TUe4>hbj@Crp`U;UF!B?2A$oI+OTZ4s`4eMe=XU`+wi7$CiSchIF$4G4rJ1gMWR()4og+wVUK&NIv-1Gcfr(JY;N`rdne>nrd2 z-tTjUhg*#>iZ{k5wxXZ(OlVj=apHK`?^q&#I`XWIXI*@`(GJCv`=2QCJef$6 zw7a~roNV3FG?i9ypF|&1Gn0@+R=nYjZ@~Zehkq<{d(woCbwKwDrIX=WjOo!Ko8lMZ z=_mGMd}3VtfyJ!XS!`hxy`mueD!)Wr+wnEv1k@IX4jslL4?RMDUcc9cTWPRJwD0)1 z_~N|-VX%{7vvyCTm_h6BM`-MK0JpvL$I;nLxLO@c9pmcd_krVdfpGr52!tlWb^KBr zaHVV4(#MoS;QFX)2Yx4o3e9TG0I#4!iNZLQ9%A2ozK=XpK2&N?;+{7eitLv)Sv8Ae91wE>&BUxR@eI3s`0wbXFfzqKZm z3D?#a_WTTaVbn|?fAJT0Ax}F9<0{&l3CR_gTzat_&=5aY*zDanj+sQMN@UK#nX$f| zEO{?I+n2ubHF)yLgM*L@yb&7C3q}N>K%Bv5Dg~lUXUiE%@x9g*P#{XuEUZ&i=B;EY z(#1vOK@KNRP;p$SRH0ue6!4(@LWV*m2odUm2k}-58di{=&QbZV7yTEhedLxzu)Xo$89>TfjU7`Ub7yv>zdh`fXQ5F}aGIOB| z<#}4a>DS+gU;CBc(P@@2{XL38roelF4?l3>$+-W%d%o|e;d{*%<|N*C@7K8J-5MIg zVIg8dmZeazFvV!A1(R6&Q?L0s?Ay2hwDnCm%{qJR$O1xw z-yuu|H;)`0@-?gPi`Nq3KK1;6j)tEs1%~UM#T-`=>ke;D8d4W z0t}CjVJr)Pei!}qRjeO9_HT;SwWjX$p4PtqkQ4Zy1#%Cb*M+OTi`ihPC=2KoIDv=F z&YC$^l`EYDs(^Am5t4x)2ev7&AtJ?E1rkxXlGa`f4K*CCl@5X`l+Mwt$C%qX!9tw% zYQ;&rUENFA-{A+p*Wh_f11An|Opu^qIC=a8?!Nm=*s*I5RKc3bbdq-N*=dD?)yu>` zS;iaQ@T+)Y|5F2i=rp#HB1;+C;|r(z27^pw?eM`Fe8|CFbcVFz^bra zeeBpVK^8YmCJKU}DV5XiL%Y2W-y6nPzVZM!oA&NKOMAX&2{SfB>7RE;k-}j@9y%%m zLGbvz>k;uoR^<51XFdMuWA3IkPXW=uyAL2H_71lrhRSch)$CfC@ zwviE3mBQ-AGMtT0BkZRyZ`G>s_RYf?9l5QubL9O&J-V+Jhq73!T?Kr_3F9;vpM|$} z(m~eOVO+!RUC+Y3_kR_tNCYN!)xy#O%L32MZbux&==C?teHRXU%SnulBI?ci?)w`4 z`&-^>`cXli=RQRc_>TEp6ozz%78aI}BtM*eA6W_Ynrp7c^KQNtq35v4=k&}h-u`E| z4-Bqt#bdm9ZF3IJY^USce}hzajX_E|eIQ$~TUpKVofX=Y(u^ehFhF6EIZ~}$2Wy89 z;?X-lg5g8U*i{?F#ONfVktw9|+NP5sb3=r^92FT@=^;IOU`PMxW4}GOYx{cTZ@=tz z+(tk4{Qn-T&i`TK|1fVs zr@amW&!H`U$%|fqW=&L`;OX5?C;R%>??+ZpWe!Zj;Paed`Un`5P=KSTg-T$FLSjj; zAmV5zS!=@11(#TXEOMbM0Z1$<*e3*Cl_H5^sM;7h?UTszO>}~jfbSq|45R4|W5dzt zI9+6c12ybG=PoK;W3I{Q#- zNOS+8$jfU+P2v7u!faxbt6Ofm3BULYuayep=WWTAvatZinZ#GlsRlQjzY`&=O?H2lJ$I&JJa8<+jm&!V<{FXnrFtesj!Hh&b| zij;$ zPza+sTz?bY{(3Zs21tS>JNwk~DQbuTE&{TsLO*6iR;kMG%8*@B&o&nA$Y-^A&Vh1_ zeE0zu(f@sA`UOn$t99pJA3pTxf6@R#mK4uGh>4|coRZN4O|75+q?~yE32F$iN?MV_ z)ee*u1Wz-1ASZwsO)8TK9EaOzU}$t0MZ1T7r;7kCYTAVg9dz9u&bjFlY_I+b9{=E7 zc;XxPV_~U-;i!wT<_3aB1UHV@2V%$>Lf+Bn6n*548a7n~`CHQLMuODySg#s*;d8h0sHpD^W&0^u25$5ohPl z9s22~59HlWqRSS-E6d9zi_XikEVn|W-5=&sx}E`zjOueegI4{b9Q^OLJH0<@ce_mw zoLHKTLFlN@gp>#2!RdFTyu0wq;+n35!10I}0-6qNWw?RyZ8Pv&4Sef~M{)GTG4zX+ zt6dvNIL)w@bP!*AJ}!I9FXHSsz82}8Jy_3N^o|@wvapPFv(JvQepEx;XrU<@p%MURhN~?jk@I4^(&{jD%6tw_+UPO%pN1hh1{Bd*yKyuqT8X}yv%?yj}4%W`y zg5jV4Nlg6OZ(#VReg-Eert#qXVXPfJh-mE?kj*2CyJ$57H0urddje5q4&9cArIAfk zE29`bIfV8n9z^T2Us0DHef-*4Fa7vv?EF?7N7uk{ZY&BlYr|nqv?Te`nFOGPIuF4S zWOR|HL~~2HAEP6~4BbiJOH;Ilhi&mu{ljA#4oWDNC4F=@){*r3=SN}qu1XZ#9{c#2 zENSmtUODBPF0Yau#3otfFT!RipB6T1>m&j|nU8={cb@*f0gIY_9y4eto6W2Mbh8W# zGTED1AFaj^cF$}sWFW8W&%P9dGy< z%>CZ4qW_8);7~or(E}&3`qW`0OCmr?fk1mqMHdJem0FC{0oH0`SPo}Ut<52Ml-@i%6HI6{(iprNViY$qA| zMq9UUp%9FS5Zrpp^|>01uhkm*m`j@2rHWn7w&`sKaZ+a@X z=*TH*1Bcz`uo?1dNha)^ae+-*R zcly$oz6=*%dj3leA6>1lF0H;p1mcUnUo)xct6CQf1qDxVHaqKpqx8tgv?+*DMi$J0 z+_QTpUi7@@BFz$9c)@v4KNJ~CG~>J*^E`iV7~*G>WaD2gEv+*y4gwEDtzpz^!|bc1 ziXI#<20R5n_MjBl^;H)%1Mtc|&zcNpC{o!JigII$q!!QqFgNI#${x8slQmqgteaE- zMZ$fCdJrK~8IGlAFHp#V?DyD*s=)4Ug+9c!58S0&iVgTe@On zZRu>2sqFayhDS%3Sm6h;Qpav!V ziB6J>Vg!d@z~_D6BUn`pfVdLl*r^2^c=91psTH_x&Rx}ug=V&Nat-xX6Kz>_`}aMH z^UgUJCnd)3AD@Rw{169Mw8%OICYTl*{hAkG`pR?B`P|>(l&N&~=mCsx0F8+roFK&x zKfqZ*4ILxY2r<+UL6~VVA0b=aVDZco%k!v*OupUs7^oj7f835MFpdbw3VXBxxQB6l{D-0g*%Zzr< zBeAp;B8xYuvWz}`imWhs8Ee?s9D-R{)zHIVefqC)kqE)L=U)I!H_6RB{?HLze)*-? zvvW7@{?gr8m|w#SU-UxEG^ep9ennN~@bf+jKLU1chrjcuG4}lDBKy1hpkypBJPqC3 zK;c#q`&AK)Ni@c%vDr;<;_wOFzkCSZ_z2E<&J~E76?6n0^qmkhvlExxcH48`w!E}f zm8xow&YxVmBaEA$@dJO~#s>Wb)$e84SnorRcxVkZu-WOt_vj4$Ffg5*D^-#FRxj;b zyRp%!r2URli5qCt8>m)dPF_OO5J5Q^I^9k5`k??KOU93&ZTB4ysaECWf5-jlhyn$o zd<^;+w(|Pv<@}4X`Uo5{m-_uSCf#vn{&O@xnZU}aW$B~152;g#DYz2P79r@R zIi7fOKTa(z;GEs(V`=de`!4kJ3}Gd}+?Fk_ZcvFkVwR_|KUfF^;Y1WbvbUj=3)$AegQh01^h0MxQP+euu_R9=H_Nh_Sh9) z`qJGC4?X zpvH@$57$*dQLxm@>hd}!CMV0*G_snO87{gW=ot%t3tZGbkfqtEX@JQfo~5w4b{l=9HH?X|QPisq9L)=CJ$n~Uoj8hlndnM0!to=A zFw`8uMyHQ0vs+QQp@I3Mr*QPhVQh7`;<&{6M~@xBEw|h(jOK0V6|0EC22c&Ln5FQV z!>De%7T%=_aX*7_7O|idmZLhtbGKnC1_F7{W*lHG)o{}SLvam>m!RG2!gIJC#$1Lg zuK1B__MUgnwg zsAtNZ9IW?JQ$Ug1pjcw2u;#;~me4Mv2?{}@QA6xj5QiQ;Y(I`MCql5XvIJ?Ef#XM? zLch0(!-oVXSa}4~)7x>|i=T}p2|0Z{$>-Z^8wj+6bGB}W5rOkmj$o66|2znABFS z;SIgu#W(FacKF1Dk3W9knuYn5WOHNblUnP8a&8Z1Ie9KTN5{$kxdg$1DvG@#jX#Yd zdE>_FsZg0Pv7cK&$b(9A6bfiGhiQ}7R@V>&KAp5MilJSPK+^oF1*WX^<+GYX;=)yf z^1Hk_{5?2Y2H1z8)D*l8$f5xuUdQ#J7&5ZlE`0WlHc25BZrs!=0rrVQwp zBvb^!2vVc5{192cEvkAG<53NhbCVKoo?^JVSDZ%E1Z?r-Np#y0RGwh@)Je<*b$t8r z$MN*Zr*ZzJ7mIWGEKJs$=!qW^hYpmhkt78o(?B#&44(}>-DeA+idW$=DwQ!};`TcT zhclTajzd;gO_QDrmBrEw{EC}zzV?dwlgrY+=b@iC`1GNBy1m}({lGaa2|rz7L}}AF z{0B*Jp_JJoRM&5;ulo~qbC@;c_{(TCLe%P2EU(Wa za3j>Jjr?Hiy_%gUhDj9!&o+9N}6RXEFFabov}R2 z$?=EQqFz^dVvUB`_Vp;~CX{@9-_v;Fz(KNldcB0$LF5Ijpk64uV`xz}Qq)U9FvB8? zx`dVio0Lnt0!6%??<26H0B$*JIO6QBNyM;%V~Z!z?s+K(!ttG0?V-;TGI#wc4vdrX2*Fz5$AADf&FWJW1gf1(D0u z)iq->^ktV{Hok59;>)ElczbMO+?9@X|63N_BXE%VKLAY-6otBOb$$6Y{m$}_g+6?b ztE^zAkspGLB9}$W_&=m(<@FLcZb4P-hde2PlQ*#M@uvj%IEr=#6gdgNaBXvMubgCy z4l?8ecyB|3)9NKS%tdo-XjszT%5ae-c8oAE%uF+lMS+4BPR-+_sbQQrm}pI-(~j^r zpS=eQ;w(P*dADHig_k1q6$vw)UQZCdo~dQTb2}lLV05%aAgop&5_tD)OpZ=sd1*<$ zdl?6%vdMW;*rL~IdiX6d|`LNO#=9?X63gW1$3ZztTYW8Rzsdn znDhdV$f)c3Xf*2RCz+F`$+pq)24=TRtxio(UpzZA`xAw7Ubbu3uE+if1%Vg1u8QJ6 z_d9E^_PxqQ4loBzK@El%`IG`0jRCon|)~b z?EJngvHR3Wgv3?&_BS7+cG6CWbI#ep^0;xe3WJDtI)+9cLTlDfVEj^vs}%a&^Ds9) z2I)h@(D&%#0yX6GUvw*yp5Zi@2xN$6uUZe$Uf)0!F8tUZRAO~V+y%}|$SKdCIhL6s ztqq!H(1X&DL56qh0>MCjgR0{?s}z)JV~&T6@m^nQ5mkIx4J}gH#s?jkwy#4%Zq{*o`AIL zmH56T;oo!c$fHk+J^wOpyy*tyl^Cg$qVCq1n(q(-_u)AjF1$0!FO;TF72Gdj*ZREB z6y#c?A!CR%c%jJ=qjBI~uc3$Ce}V*(MxOOw)a$POQS9Rum3REUafW;i&ySGw3uGzP zFW`X03OGhW1BPz`i*m98YumCy;qc+(vdw!0hTIbd6^58D3aUrf;hq{x=l8RedHMyx z5zSFX1?mi%JT-_FTD~?Yk3)}A+b|3=6iFccBqi_?`7xTc25Pks+DSz?JLu;?t^?6n zPvBE`ej27=)x`J&eGkDq$d^oPkG{n+LJhHo~)xEbAjr6R08sqh8DUk}=Q*${c$EP+(kh4D=g@ zhet5l8b@n*5~C);HqFKCoid9qcNi`G zj3AH~MDRn#$Gp&Kks>!EOHixE2t1dnY@^+i1l9dmTutG575KE*8MO8o?iI-C;d^xa zY1B&}pw#)SwB~pOiKvcYwLqRL&=fdkFr1(RL*y;X;aS#GQBbfL$#|hhb5Z09^;(nP zC;ks>B89aPbn^=CzV|TF8%^+d zSs>Koev2j*Fl6-5&ocT4Q5f^Rqa$O8qYC=D5#)7h;~@0lnOO43k^CPj2u%Pts{ZCL z2QIGmt4&KHEjVeskcEO%Xk?k}!iVi4{*0=CwXxe2A!ce$g$WYc%D18ue z2I9B^LrL$5`ma_aq$D2LP;qm(?L|FFh-GjBYRq;8N5JVx<>1*{mwVJTUSnXXF5KV<2#3sb##A{8BXb442 zW^ITm2<3I(GyK&aawzf}#3a)x4#h@);uD`5@&5rOY<4(~dUZ8+f34>0I{Z2k))^>} zxm>vfJhYRV=WGoi=GZZ2&$XfyCuwHXI@7VW2Gw#_I5==<9vhv4bZ!R$S1MJvjIymQ z<7K{`+)Z)f&iU@T1{4G1Yy2vkXtg97E!b~y=HUvVHbF7q0RLn2Rdz-MwOFRn}~ zeSx7y6PcF^#;_k>`n#{-{PWI(<9arexPpGSO$}D7R7g-=-)LiWd>mmEk*>zleFh+s z$2v<4*OR8@+`Z@Fuw*qY3XHvFZi~?1F6B9$n4d>ft{3>1(#noE0Ty}nrarU zVA*`~4FIC*q=?a3{Lb3_{tP#Z(NIgYyDklvl!*aVkf29z*4(KF1G-LExU<9aEMXNO`re%_; z>`J*v^8$1nZJXgN&5#u-Q{tPA7Vfy?&OcdMS)K8}r^FFpn^M`&Mt*Vi)a1ww2EOg* z3F+`|0JugHp;%RnD^3&nKu>8XMS2)VN_Fo6jyX6^4DkgE`WgDR*>EAetTd+_$|>kO zkmJbs&kO~vpJ88N(CFJ1(S*(a&kg&R>NC%QAfQp9U=o3p!Tkrk*`&1x|{?C}jg=HSgvQYHC8xm1R67<$lhVngu&{oQ=3rrJz-+ zbp%m|ldQE%=h^pwEH#l-!QTku7(=1aiW&M@V$2jLJI!*k(8C}!fUFrwEo5 z@Q@%xP8(dpxylwCC631n1qZZanrTv`#?zkh2^-h4v>Y76e&#&;z9wewxSEYK;N;L{ zF>O$boJM>-vz#4|onezAZ9kV$Aj>(Cd=3;CvLKAsvY?V0bXh5YLTP@k*X!H512*$l zX=6$_pdC(-7lejs#Fl>jen#-j^~||?FfA329Xkp-#X&%FjNCJVqBweH@xZKJMne>K zs&FF|xxoNv^Pv^ZX|5E>ub%HvVC&5$W@l$GJvBvV(X?LZ^;5t(Jv%(l3S**qey!mV ziOlxjRjF0BjE_%@{e2oC4#VI#nvKdU>lJ^SO7Bzypfd%yyvUS3A1>9L zr!_p<@&fJ7Ci+Rv_&KZ^*mIQ*U0kd21U-Tu#s>gUMBHUlst1>wN1;_s1w4XA4ir2K z6R0yxScwf3FrnoDKX8<5;pM`HUW^QALknsh!1tKp3*V2+dJxFc9_U|y02bhA`VaJf zwV|mup;U}4^Kr@mN+LM5s>g_Ec6LtoCN4qN&#=7KMwsR_m7`|sIjW$y*=DF+WC}W0 z@Tu|WX!ExMF9K9a+|wvj3J(F_m!m*buVG|l93$hC2;&;V!o-*Z0De zN@)jfUVwi)Bn-kDG)}gHrk(YDpDU+YsZ#(P&ttQ5k3F!QZZ>jYUQwLXqpZzO#n19uEK(kl`0s~1avGll+JAuiMJDypTjEJ~}ohme%P2ByJudLs5&pjh@E~|1p z9Uo_!17o9a9BQ=QSdIOrNp>K4vsNR>!lY282E4n18USDy6rjkAy2`1t6g0I20S!6e ztN_EHOcx-tD6q*Ne!xl|BV!{7Jkb7TSxP(Z`2lSv$b24T9+!LY`g<&Te>!#E2Vje3 zD84vwbOGqnS#(NBmbw7?JL)jeEI1(%JU?`(s$sd7D$l9m^CIIp)@y9~K@dzSUGC0O z?H8H-9TIox><*3@G_^Kwf>wi?BJ@MF#3>wZwOE!v&**@|^X%4pULX!*)_Tqh&9Kzb z23V@&3t#vfDRlnf`-@!vn&1^rfBoxcR!k9-re9jAdcPgG&Mu|sDU-YB%21#xhNB#g zGUErT>_%qQwTa1N3V;{ZSb3YzO9 zb7%}ohA*H&Tlu{TL3v+J0(p`aYk<`lsvx#N4d(!MHRd!&YS1Ie2seEOm)a!)C)_w@ zd4gKKV$Q|ZEzpQPUSc|XRiC?>fJPbF@cdEY8@^K_q9qLvu+`}m>gOIc=SOoyIv!3howQjG?iJF`orwP?Mx1C{V=IE%^Dz;mU zjDSpJ3R_t&h`tInEzwUV?Z}{$4PqL82>KVJlOhB&aNW?BJfy?QltN+e-dW(^A9#Cc^~ z9{!GkF6%OYDAr(mT}DBti@%Rrt%0%eDU6691b&U6oYGvBWcHP{W_@a?jE-aAQQP8+ zpZ`1j!5_TU?DVSLyZ0=KFn?1J%A{OKe!W>Sz{gdas|&x^HFi1Rs7eBO^dQnu2hM-D+;4G~r4p=mm-;1qo2G@DyGohnnd zTZ^`vRw(J@{H;9n5O{V4m!?H$P`1wl;6o__R*dO4Ha9RgJBHmmcTp>9C+CXocN41Z zkyeeuuCxb-*TE->s0sy6Jr@zR0l33xeJ)l>2_klH8J{phFpj{l(jQQ8xPzEv$sknZ z$rVUUL1HECf*sdcm&CT0o!|t*nz( zVhoy(&)lYEva7bWm*}YRyHr7(0nmzqDO!qu(=ID*JZ|C){eG9>Y!uc}iDXnGvA4^D z{H@@HFT4dWyzMr=C(rualVFD&?Vw(7nB%4&GCDrVO{FF7{&m5iAuC|T)slN zvZ$wK<#Q7ztfk;_27C`$kTLoAK=U2nnqEZPPdnsOdFCWyE58>sc){WiDY*u!P=-r8{rU$ z;iROX`d5~&?)o%@jb;P2AwsLXP~FZZKj%Wr_n8oD*a!rF&*3WaXkTA&+bx3G?_wCH zvOaScO5lfCPOJzz2NyQ{MGCBY`&%@NXAC&(8jl*DI6JT z8S`Q@h^&K(0w93q1F(*;>!a2j#?17bd}h>yot%R#OKnJ7fS;uxD^L?D#r=>ds!Bn! z&)`r0>|F$ydB$E_wUK7hn9aTvJbk!inMlW_UMWcl9e5<`2GvnwPyqE+ozVHMrtEKSWc|zcFf$32KHs1JOokE6_y_ zpEyej-wn|3Cvtp4O!~d^)1Sue?|v`l1-2g@8#C7{fzCg4^G!FtEsn!(r`xVhPEHgv zGt*i$1iW*0&fV!dy=Nb!vnRa`_2n;uu99_24QF2^M z*l4fe*5}`ZpZLjtMH83y6Phb=9z{q_5&w?~?htpu)btcdy^CTNB)c05IiSnL9hza* zVjhyuO-;?vCxGM8@e|W!tGsw+M`H?6Xw9SN(sbgJpAsQ>-}|vCLO3xwO&?`#WBuT5 z&%f>0wN4KxzG3-5ejQ(pi2Q@1JP`N#+z^4bRvP1-78Ck!Fx~bsNY{B&cI%#x_{D449mL&8wqR8hY zZ`-;Jqa!0EiU?hco^Yv3^CGh=+Or^&Lm?WJ=eMx(KqJ`q+2mP2q>n1SJvk693 zSw`=D>si~l0OpS$BWZ>l48WQxAdH9+h!D&YofNHPb2^xW!bQggN6k!Jgv0kj9^)tP z{1o2#?)MNVtJdngMp853z^%7F?@c${bo1YC5!&5_7oMXJ9XhB#_VJG}I%8;j{+_vC zb=@N3zJX&VKv^z8X%aM7HBCjXx#CK0Ac(ya_~6Rag%u*DS%)y!Mg?r*0-;?mpjO~-$ahkhD{;tGX5wujgdnQKGReou#eB{+ zSK^It_<4!RXR*1lf+A1J-8?yeg0T6dc=?L{3E^bS&dgwDc9sRLPAx822)wYnpiDi- zaBB>cQ?uMo)__glr`agY8wFP@ng+7CqcA4c^2tx$iFdsH&$#_8CYVCGytH`a#+z>Z zjhk=2`3?sz&u3zyg@+$`#Ch<+ZwDqC34%a-b2DRa5=n|+bL8m+ax#^jY!WC9o^CZn z4i23|tBeO#7k&e~Dibu!4WFaO4spBv<*#@dUiUMv#Wpcvt1AmUUf+WV>q(<6 zXaWO2hO2#IALFvhcSwFgnk3W)LQAKKay5m3eupHih*0emfg2@$kmR|o+2C;1YZ7+o zL(p6I9Uuy;@cars`jL;}Pv8D-=6DW^Cdv9K9O#EHdDcb0d)eiee^Pj(Iom6%oKe`} z!-q^|_KLY)Ns<)a?9}L+hKFjAE}PSX>ix8eWZI%%1XwgUlhsZ*8b1qiQi+rAA!(vAMM`_x@Aj-(bP+}#GSx#I`GVY?1*snhad?oX40Ub3Kn`t*Duk`QNCxXG zSOK7;2*UP#y zL8YIx@x{OWJRW)MQFC!|fiyU&RGTbl1vqldXA5*bhIwH{&r7H&f=?d_n%Ug!pffc+ zi@H(g$}P`@*O7>!0#n;M?KYzW&vl6rINHZYKl(}Be*62l`87T|Ne6XoeB|+0yy9iQ zeBE`|{Pptk5}nN9kx`P3mzR!Ho7&=AO2W#D_(6$x_O|I?uZiIxd4&D|>0lOt8^qxh z048e;5;<~nuLsm~Wos4CtCbPxfRTWrNzqJ?l8NV;%`cq5>c%>2Db^cxgh9lt-Fxr( zs;I4_W@XS>3M+N=k~TbtCW#q6BcmfY|AKR+qs(4m56z)bub3E_6PKnrz2q$Cu)C== z57bB&u%Q6B9%$ke3Pv1V?$l*$@5e;bp$4AytPAntmpmUo`4j&N*IoA3$8bz!M0lQ|-OS8ZGz3%W zrv;N*pdI>5lmHM?C+Nl0_#`uVk`#zfeBv+g{`Y?nT7zIwmZ`No%f4{MRhRxonr?pf zb6@xj8uH#b`TY&Sf}WO2a9g&RjlH^YVu@CY^QfiV&K6&!F*heg^;)WZlu-b{uuuWq zzqfD<-$Q1Q3@0t0BbSi^r3yr84izfY{e}UFI4K2yx}5NiJ-g8>GT{Oq$ASI(fkK&s zC9`;KWd+l6@y^+Eo|ujiI*lhzWaxEG2nU3rWB#UdG&MbfsoAT<3*IdkdERgf*!=p4 zeDBKgnnCrbE!GWNschn9GvF<518tuR1BXpMCk6eS+cGOFdz&zr_K00S3oTix72EKl zYgT1IJfCTG>nm%EpPEN#0x}A8lT?mv1{34cr0yL#`ZU_2S>SM$8>Tlq=1fdX z@tPElLzJ*k4uw>yve^m4bpRgXFeFvLbpyQr10TSLK5z%o%P5MG^t#3zKe=bm?l&Jf zeE8wJzxFvu? zi)y(x3Q$}@+;&FcmT6}SDlg3i9Y{cFYKSz?2u)`}4((GDz^_;MIer&BG+JZ0@L882 z4l6i*>=+I_^#qXjM174(O87;Xp4y6fb;$7b%!;Kz#<{%wub zMIG)%e!*V!IteLfG8o=TNj`pVW1~&L1#H~KHp2`P>$R%6Lz0s%< z)}{xPo2J?cAJ=M;IJE0BxogmcqO(@14^ds`xgu5)S861?$RcAR%F$y-37R=X8<{R< z3SUu3>h&g*ce{oL;D9F7M}R!*!Lb-gp>vy|%{)qc@Pi-1hd%h{)GVaJXDOq%nc49$ z%X{r3hmT;}mOU67nWNTWCb{o(ksd!b&qYU9fC2{N(>&(SZk>7f_|YeKG-Af}$UIGl ziEVOi=L_cQF|V!wvYa&ue31CbTzpT3V3Mj*h;_id`&{iqo5!$^q z0r;AZVWS$LUh&~gj$-#&TUc+w;{-6wq|cBemFEHj!^)_TEJGlNz!c30L$h8+Q-?Zt zM>R2p)zzMHWcj{|d^YlYAajsu4PPD)wOSaFNp4L|(0^HwP;*^E%fKl>B@{L#IuK1U zHAQ5#YkDd%W#6$S294=8yifu}$clvc2x~dO6`$avc<+1PM~AjvZyA%JmD2B%QaK-p zqGT=H?n#V$e!wAHjxJL(Q``Nq6$2)l701h2H zfwguAYDZ2`C5WpaMV%?;x$&;KYguhHNJq=kjC@4-&juH4VuWDC)I?y}A8F7{ z)oePnxlqWh!#puLgE7Rcnh5~IeH z*p|K}r9C8Qq@WxhL!;v?SZ!YHtSt**bAnueI0z89mX}b1Tul9rxgQ_MeH1X{?*lxGU&D0vUB~d8%3@gjr1-Ma_ zgwieBwwYuPs_Rn{zO5}B$HwXk&)X%a7GiR4MjXnm#+>ltGdj>HH>jX6Ank@e395Vz z2=TEyK8bg|^S%77daXe-7X;|<-Mi<%S8LJlUwF}8Eu0DCcNLkr2o3^CDsm-3)%1gm zq#~Su=+L2D99m)=#|6u%#7$}*Chg8lZ+mKGwT%f=lMiXRn>W~Nut^huPcvX?rf@ZZ zCb*u0S17)x;Hm;&LlMe9`WJLGRhAQP53>TO8bqvtATY@;4!Vg#b!ZHG_eNN6#W;B6 zgkbUWqAQ^XA9g$OeG8=GMBh}3y(XUt)XF)mQJ7G1Mm9) zYV`)Y=WT9u&=Hd4HP>AGwyU3g_3wTC>t8bk$~q!&>p|#>Kp28pq0=mjlBD1L>(6{< zv)k!6g!NSQeXlR)Qj`rlzVNv(3lHO5_zyq2FFSs6NmRrv8uf^Nf`THD!DVRGzb-)= z+HHo47T#qR5794Q(;;MDK?sFVk?w{*bV&$-<|?ERq1tc|#C3*7P(Tm`7?+5l)|$Y| z(lYn!*Oyn=+NV0y6qP!G;n6YLb?PJSFr%x%xV_3by@c#awL?=G9>wV$# zf79N%Ye#Lzj_q|h#=e-oL~G&+;6~P0zjn{e^4iAFWoe(=z16tR6QD+gOX-B=1r#=^ zb08F;3RdK;^Eqk~ijtY|e1Jnx2nZ!ptB^I6k+BP^|A5&}Ox|O9RikM_xe0cLGb*p$ zHlxk%=mj^3XiMR^p^S3HQr&ZCZH}CF7>;c}7)Bwtf7dtG8CIRWVz?z@8*aG%O@834i-t1f znM~5!vm#gH5+!-!O!uz8;aWPGCy$>}K@f$yP+BsQ(#=jsD^1zuM7l_dXg2Dkon=X%w%iD*Vwo0B7HlGr&5EJzhPG&&MIdQW%1tPx zcyAdzrDgy_E~o6b%$JzP#rvWl8=3p}Qrw#Ne&F*M88vj;?D>>rJ*xGQ5a5=ZZ~kA`UVE*u&fE>r@N~!p5HjW|ld{06Tw7nNw7XljY*liON+54z zMzjcpmfvvNowg$jfypsjw{G{29zA9RLHR%TbFW`|;DK*FcITaUp4&?m9+8?w?adAB zIp=JG9w|9@pk{D1>2A>FeuTxp!Tba;UZrE@0Lt-@IT}oRqs{dJGNi$3BLN*HWzarO zNS@XZ)*1*SpS(YW0X=ONy^CDb!cd&b5vVj_wp4F@1FMTmK)B3=mUdiceqJ2a85Xi2 zhi_JNNXWTt;WXTAAoOOr@-!H7qFx=f>0u#!kD9>w#@_N#4nT zJY}lC2H|$rffy1Yn3~;AOrj`AI$^3hR1U>(oWIL!n30(rfO!=`NM7PcKJsDQ_3^vl z>VVGS=6Z)(_1f#Mf7=yTUjCl|Y!uAa!r(^Mme-MprYpzY5Dhsg+IqE83A({lOBpJC zf4z@-JvIlB=5iBr>dX5=0I@I5$I(J%e*!pfH}R~ev{Wz?WNxE_3q%-(M~1iwq*Mam z)6kAjzo5`ICEF&UlWvyhOF1D5 z9LXhaM5b~WhfF8S8ZB9kD}6rD%(30X5F=5v;eVs#&Qj9l$rU^0xU35Hq|P+Btr(QwIv%9Y~& zNMz5=u&Eohrr97ONkzHAb_!_=Nh-pg;e{)V?+cl|a0P4Xc(nMLh* z&(r{2%el2hP&{EokIF+oj>C;+vu5CK{nS$j(&kVN_V9DSa%diT^r1qKvQw0a8Lx6YYdeL7)T(dC6I3s!oBNGzF@x51>VoYf1tv11R=47)*P zvsoiLFY6(Y?6%`s_X}WGV_TQVA8ap&oCm+?9AL8 zvx*9C9;M`7mSLr6*{85PHwbC|3xpn?XA~c zcf;>Wx?DoSkmKRI+>{9N+Ii=lr({22eBZu(q2LLdQouXewtbF$pJ<*Ls-iH%C$%gH z?iXPYatr=UF!ISbGTw27l~n_!ZemBbCtUq$ld44kMY}m|sbjtB0cQX<^ek%^*b8PO z4SLCDvMCICnH^+QD;>a?ScF2y(Ik+Du>nqE;_!rT4Mol+UO<&fkjupN6cz^<(88E) z1?5q|VEaIqn`h-Q1B%~E?Z8Uy#vGhprOc%exRyPQvL++HqbPt}7X*{0XSRqY*osQ6 zLGEGFPeGw`9V?`Cl==N>(nl1=q^3hNrvi6;SP(AM`4 zn<4*8Yt6oje(1B@?c+~A%_Pj-JGQZApoc!eBfH~x`a$TyJxC)XtjotNbWJ#zbTcFg z@8SA3=~R1mJ3FU23ey;hmCdUNV(wRvcvI+{97@j#tw1@9RLYL;zT;Y340`7dy?+}P z+UhRU5QC;()(qrw&&TBeg~y?%4*&yT&Gw6m!wS*D*)3bqsJ9H2oqHsn@}c2U1LTTS zb_y6cDBN}St{uJE z>6y2F?VkHC5U-qd50f;<;bZeqnZ{1()!Z7Y*i0E-P;(J!Z%bccAPbue$llci-~do8Fu!ss{jP z3PH|N17YZsdHv-teHG7s_SHl_W$W2$E+V33veAaHu0r|khMjy`$v zDEu=!yt|*f>86{0Vs&-n_4nR;?`!1b1(Awb+U1z(AlBOyHqV?$(gf*hB`LNfm1xbC zHsJN~c>ugPKtaclmCv}!d}ie;(_E8in{S}*BIIWsPGSzy&x|m{IjXe=y=#Vul&#Pz zc~+6)MDs#Z3K`bQur2(o0HhSq)7ViQ3}>Cv4TSw$hAt>Hjtmk?eV=r|k@0Ck40n(q z!g7B$5i~FiXWtSu3(%Q`QV1=06a}FXex{ebTQ-n9-zQLZV(Ap}JV~Yf@gJRk@df`) zR(6jfIJlL_FOy{)N0%Cnq@YiK`Y&+nt+(P;uX>g2CEU-~4jw#2!L$^+v?$cV*#)l;r|Bd2x9+vxGpP!!}uEi$9D8lka7vGkOsM2hMd-b)* zhvR8VI~-U_8&&E6p|ev}R{ZK0ig-m3SX_Y`Glxr$Ttj7rt;%NZD+mVoFGyza0OPU2GJisL--_}6}YEhj&!Nl|& ze9Ja23dLMVZT$|-?_-iId7;{xhFWcikn*4Z`5kzVWEN$GB7tRnWnCt>t6uoR7yOS~ zpL^?nKDl(V$8&;r+A-!_6lp1{r}+pHI+AO7>7_q{uYK(vzJA|*-w?v^m?&X|xWZ_1ojWo|c>Qkx%clK z_cm$=^*Ov#^ z^833*0ER&{-!+=1FTY{T#rNFGhm#=K_oI_jQ*RdA*B_l2{kO}DOMc}0+@fAxZG$xv z6OB3X8^nZgWpekggrkAegn@R>vJlCIu@}&_@p)k@r8?T+2B2mra>I<$3}02IslKDc zgqS9=qt0&*q6!pC2PyNJ0%DP_-@8(_>3SATl{OEh(XItcXB&u|~DfT^egiz?YyUxN;qsIP1${o}%(q+g+i%<+yuhtB$cmd2L z8LYsrE@i8r`FTOX^3wt;q7YCxvM@)j&}BG>nC0m!@FL%q_$$gyzQON}w5zn$&c)c4bF85cYoLU*IGyNUSE1y=Nan` zApy_>@Qgsj_f>FHMrU+%z~llOap|JJln*X0%=Q<*ZRg2kkE%J%N~gsF#=LaWr+ zbaM6rCuBVzHq41<9RRNmjGLOM%2yMbHkb+M&j~wJFT5?UK3PeowC=gdN z#HvbO1syi$Xk=7gEC6uAuymVJmf_JxCMO<*EewXu$aD`7#*FU=gr!Mgivfk zhv$-bB6gXaNaf@pPLa7}W;^ikv5$QmfA**Eq`-`|CODZ3rxyAzd-;q1$3@S2)>{Pi zTjljQT?hzA?|bZ9TqJSDDmbXG!Tn z>N}{dITHX&_A0ng!~w`x(ivBs&Mi7fiQpi*r>sw4gNBm8OK>I#LatKV-J`q`6o@kP zRhH4EEz0Q=4)H+`zd9s5g`H@PPVu{wB&8-QBM_2g4KUVEEJ3$GxiuRbmXj062GU3I zJ|UzU@MdCc3Y(kk*_^!cm9O}pS6zMiTQ)Y^t7nGr9v$Py9{*-pOWHW3WMr458){Ql z4pvS1yD5URnWpKQfJT{UQT1IW{vR(0rEp>mUEoAARlZ?|=VqKDBS(tminU z@B$s6$DY`arR5V|+HUZW?UUJ5v4E>dk)x;( zFfUSbz_#?UjAjyP!mvP8VVG%s66*tazSTN|QhBzDKLycuLyWY>Bt+bX@zH7WID1Kt zkxa>n0KklGS`fQK8Bj0`-M>oq^T$8IL{plsDFKTXmzK-~r!RTQi~r=xE3f(;rStX~ z6A}c>yEt+10O+^aj&qBr7Vy}kkKpoWKL<*I=1FT^5iQh`b2zMd)9Q5F|AQ9<3cjeH z^tsP_-a8+9_~D~Z?A!Ntt@ZY_*T+z;f=)lhu~X|%0NFcJ<0GWS_j?^EPZQ+O&;vox z)@duzKIB}joK!k|22*gLe2=P~gqr}Cqp6UTiJ*4BA~$9t&iMICg-eITo6=ciPNS_! zpp@<0;u0=Lb7)jF!EOodCb?(O%M(zLEaTe3yBw^bYQVB2WwMRr6B6nC=qK;MJKuG? z(LOA4VHihg+Am)9%2)i+Raag8-?B7sYv?nCpwrpF6OTPevrzIjG3Y}@{>R$-I-YuZ zzl5;kg^*R;M%^#uhJVEEAKkBk?4T^oJ|hVnuet7;Yyacd?*01nRu&hdm_;WFoG{J4 z`%j^>We&5`qo|tfTb*&$J2<^xBjaP&v*42liw3}ghRC5x!~y&mY?w)Ig>Af%lfqBC z%F;i4qb4OiU^+dCv8B^BxHq2*Ji@#)v)hOls6w-^M4?#KtZWWy?X>MeLw@~+l4AB zK~$wAuWuxHa{nRp+nd<4dj@g6MmQFhGHy?j7kFUPK|z5_qKysB%C{We-_Oo`P*%*N-A=E3naD5U{ z;gEAkO#u2av@L+58Pk@^=itM)e-Iy)=m6R^spzb#o@H77>Q}$|kFUM%+W%T8-6_rl zik znD>E`SMn<~@dAd2ocKTnRX2GO zO7num7_z(J8TC#Q3P`gznt_5wkSFqdQr7ZLBI)M03-{noCZ4p0he?D<(oDZX%)!k! z-Td3KL)ax)bmkT^7eENDuqwW~7VOAGRj&`-uYEev63V?Z?|9~4c+&^^#P@ANh ziK^nIyZUw~)NP3!b&{9Ur^{pZ?Tc2;vwd?)DNReEnCv zLWJPv8-7PC-7`WEp1#_t0sFl!R+kr_K?pds6#xaG4`9LKAsYYi8=dbbo_LhBeIGx7 zTP`;7SyWj`0kk*jT}w!YEBL(;ctW@-#OcWhz51Ewq(?gMOT8y7NI zbgP7{2Ohr77AlPPaLKxYrKPYLnj|v%6#i#;k5)=`WiX7i>1fdUnL6;g<=>}`a*=2acBM^BS6aER z)+#>$K{(x1^psZr?!5E%sx---|Kt--?5M=Cv5Dj=96WZ4rG0mtH6tPB5Y;Xiivz3= z%*`vRld?wfpectvBd@U4)3jTDl)zGvrG%uTqJW?KoM4C2rctm^rjISM5+)`l*-RtJ z7zNPW44R4ZqQdc5pn_UJ>^;N8Mzx8hg=I-9`4H~%r-#IKUb4*dc;5fy4St#vVZ^czwldbp1we9*E`7uzt_YOuM5A|WLKxr>31!L5|^vTh=M0f6Wsfi7N*%#vtAzIU)i?Yo+j zrJNMQt&ogl@nuYtP9mQAjHa57-A7QIG*`RiTMpHSvA(*A4}aj#ao4B+5>c%#qbAR- z0m?~U^um|@fq+H74KL0H()U*u86xyK?Z!z6Q(W(qIhA<4K#saxscF~O>IX>@3Y@SK^PS1%oKfuv5_&XEUn_h@Bgrrw*3rgXnq{wl!S-1 zDApI8cm5w;dBx?wZDZiSFZ3qg@~=Mq3097I=JyU@WI9Da*RNJFFI_14MfR);M0zpuW=Jfo^`J1R&gwJw<;r^hzMcJl@_O^C(gnQ^ZZ`To| z{}6WJ;>Sm+>zGfDz(!fJs#uk`6~s)98#itTB5UVFV^QYxQR8vw3rBHQ(S{crgOQlb zIqeowN#*zqvc&ZGl3wEtYn2C95^w;~iQNN%Vy6S59Zd5Nom@bfJ+Yj#cA`w>p^(cF zWeG(YilzJ+;1;(8W}}74FkZ$!K|{k^peT0kZT{xw)9eJo^2-rKYnM8KA0i9cawLOX_4=P)|2}58F6!{<4Ki;C zojG>}+ot`@d}4Pf#6~VuT^X&yuK<}S%*17~oLGhsj0M0bzNZ*wZYPF#PZ4++VT4I3 zh;oz{c4Sbw&7d+wJr$2~WOm|(_jiZk4=>fj-oO5ZxQ;nF^!Emdwk9!o()brKr&*6- zBucr4bbE6eK3=aU7qn4YoUCz6`{2QY*^)Xh9f3^)ZXLHzm@wfP>?$6|5^Y-~9v_MK z&5-qkngoA$kg4{@j41}hK`?`wnoeZ&BLo-;;093j2J|GGJ3y9FkF#cn%LNukAro|{ zRAq==O^s_$mL6ceMslMo;=x- zxZU_n?wLr&SlBZM(?oute$okc?b;E+NPG%=^QRXY+vhmbe+@Z(6F5yL+8=3 zmCoB{Yu2nmBzZfR+QPVjE)JQXvXJu25rk0(ud~Qg^y5hrCw8{9wETQvP<0^siIB>y zl-6-A0O5E7?w#}nD8W!64~pTF(4?lkfZ16j5b{HmOJqPKDRLH*nIUMBRsaSj@gz1= zCe`4vwcF+Zf2R+&Z`}rmjvfJryAaGK3swgq+R=>HJX*Qgs#t$Xmzt}|GJ{#^P~Rgb z?1zeRjCqgD3bW3(ww~i9mh$okdC0{}wb!+xK$n%a!YVB-z9$QoHy!>UUY&TD1mbb99|D|DD?#Th^H~VY}t1< z*3?x0>gYR1DV*i%1jIW*)Wf;H2zyKv#+ z63Xap76r_Zk<34R<~;NVBRIG!!{o~av{V;MM0qX%93n(%Df3z#H-_|hvRX|ttGt-F zLuqrk!S4@1UEOBfBRmE!??~R#4qWSD+S}@y%9j>=bHREL9nBn#5zT>sA8{FHd1{%P z@uI7Qj3^SZpkSg(Y;QDN=iy#<;sU0od>9g|Ht zIdN<2xQdsr!os4@wsLFiH?q0l)Be4T#SvTYkQ zHXbL?Do-Y(@ffeKFL?OjEmeZ?YV~=Z%jg2zV=OO1o8o!^!V;nVVlnxyr(a_MKRa8`%XU&?GeB+IVXj$193N2DH z8PYIhXc&Ui-}w5x(BUJ0i^wpvO^|=9-7cs5XY=OGTY;+RA4GVsASKk;Y;ZNu3r+90 zV9WNhki}&L@eM*yp*Tyug94$Jj^Ad;yVE{`Azs_JZ%3-R!!!kCL9*~b6xuJIPfVG7 z?{lcluvU_#5IJV<#$kaukbeZITixD$Th>s`JDqR+%lohMO4XC#ED{$saE5_ldpefPB(kRb-Ntlx<{6ONx6;41eUT%Yp zb#)|=$r5=shYe!H;+BXGe)Ve)ZA8wZ-{@ssnCkUAH;(g!dHk%ynm)Y5Ua`Mm#)Q#? z!EY^qmf{;dQtV(`|g|a+ek3T$f6-)8Xi(_C5%Iiplxa< zR?#BMCnb{;c#@J>2^T+OYQX=-x*|iqS%&?zW$KrvE?@K1Q{OEsExi=z>7#ZvO#>NZ zdd-ia;)63d)VV^$m)xb)F@>Lw1+dJNg(Fb(_nS6C<2%Q|;~l{W=7g%!irK)zs;VvD zs;F3}0mKO7Fa(YFdZ@v43#ZB2O-w5J?+96wAcpboHK)zG%5Jr^lQ1^R_v?Afm}PQ5 zI@=0oTiYQRjf0LXUUicmC zKX3%x-qB#Dt>kc+wlS0CIy@LXT;%9*LrUG=2L09W1eHB=QWBzp+3hJ_sk8PGgCA1)R=eCh!bJ2GAMIDWtEh zlO$M&|3_3LQ^Sss*QRL%+T4Sxr%R_zo%W{R7f2B!oUy>d?PZJA0Uobc2x|_IHgmdi ze&xo63l}|$&NOhhyadCJAhKgcvHTtT>npHSdXDgleZ2ueh{aGh#xtnNsAjX6H=*K6 zEl%}fqE9gF2zQZ*{Y14lt!eAa%V&S@%X1#Q$U2IK4B>VxjuBvRa5IW|KclK@6#p%U zm(R25;Vw43`~jrA*##rv@VVC3O{hq}00li`PpnwA6+PkkU3*?l0Nb$r8xyj|_ZQJ$ Qw*UYD07*qoM6N<$f(ng`;Q#;t diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/GBA_Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/GBA_Controller.png index 9eee422dc5c3a32f6b8b7d9f43d6b1d6ffffb8db..1311133ffd2258aa0af605ebb564c0cf0e6d9853 100644 GIT binary patch literal 45523 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 R6Q=+G002ovPDHLkV1h|>l1u;q diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/IntVController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/IntVController.png index 0a6fe8b09f851bc6a0e6be16dcf2f0b38e7b291b..3f52174551f8a5fc5cb7ef1bcb03b8117a7a31fb 100644 GIT binary patch literal 74020 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

$U@~DK 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%0AbUQb_dE*_6X0-<0MPhrH? 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%0Ad>bWa@Iuesq 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

E60 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 AS^xk5 literal 64917 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 AGynhq literal 17614 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 Eg6yYtUH||9 literal 70135 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 R^>Y9K002ovPDHLkV1khOF-QOa diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/WonderSwanColor.png b/BizHawk.Client.EmuHawk/config/ControllerImages/WonderSwanColor.png index e6ef63cd4818062c529faa2ccc195965f988b7ce..996fb672ef17a3eb68275d75973bad462f96d27b 100644 GIT binary patch literal 145514 zcmcFq1ydYN*JaVg7himFC%8k91r`YqAOv?!aCa6$aEAwX4}k=NySuvtcMIYl#moW3_)O+_9XgA4-!0RdY9231Eu0K~nG&w;3K*B#@H(6<}9BTUBy z0RgA`eEJA=K?idLT>iHX<$Uwxd)zES@%= zoW4NlTS6ZUw(4}mwq2EFKYwPKw*vH0rN&5N| z`@+-Pt^NPc<2Bat>eF?-|D8O5780-@`||gDz*y|-Y&(wQ!+w^>NfXI0cQpJV`{o_4 z*m5m$W|cz%vW=%r3>P&bKIFQsY;{)Cp)cBMM}dP;%^rrkuGRNvH;4BbG^jz$m-^NM zc=se$d(ECXoV_6Y-$?#9cy^+8nA4ZEcod?{fa) zdw4CZ9cyGOo6|kmJ~!RitxJt8&{)yfvdjlMkNg1=t%V^&OS3OhkbhXIbQCF@9NTyQ{nAg4teX>VW4_EYmag6SmvSkH6@)jBa{H9= z&@u7QZhk*OW9%7hyq%4d)yMnauLGg&6*aU{NJU-xOzLVQf4$nH>TR=aGzyN0kLv^r zORxM)o7d>@!v=r2nR1s`VN{TEW2k>WdVX1Hka#|hyZZaBwm0$TrIGG$hpcgzMxugj zqqYWf?HgMa)rEg`sh^sXK8h&Xu+LMDjhKSN@I4=nNrjmndJ~SGvr~Bu*&=0WVTEJ= zjqU~y53lTHOZZ&aw;yV|9-Z8*Ob1*?<~%?3pSE2g5N$o*w)M1%zOymBcFAUOzy4N$hf-UjSl8r|0#>AY6G?yI&9w@U^G09voZa{$^=)fE!= zgGPI3uba5|7ac+;+yqeaRm*g%wxj0PGeN(n*N3}j8iqcRkHdj9x01OvNX9i}=rq%| z`Aq~U5?2pLYYi(aJ+r2*epmY&q2HL6vv$#(Pe|qa4Z^wCB{pW&{xNH5XWO^=FURCi zYehO>Xa0R|B;Y;PtB6vZJi)yLJW^#qX_@cbeN<$I~s8} zeg-y4iLOaJZ!Mp6eTUkwU%${fL6ZDi#o8H@$9#g0l8CJFBGdyqQna%a-5o?8@*kJU zgSMC_ziW|yAe1gxR1U+0<|;?a=8*oy>g8sElBnxCGKU;w$3X2sW`+DE+B8LBG+>-! z%|nXf{(4py^)0ZTDsG|Fm34dn0o3E6(aLGClK%j(hu)J$K+B)k*%`q;Z)0@NpK{| zBuxc7X%r~CP%{{}(M zlO;5u|1p+&WpL%NlaG9Fe4IPHL6j9k9nV9bWW-%EtW?-iPEE}z4tg2FiX55xsf>i) z9p(~*OwpZ@$4z@ugFuUiS5%iqLC65X7^QRw`e}lyK(meVF=>f$Bue+D!Mz9ENlCzf z59Hq1wMN$LKp73EVcd0xSi>8-oN6#=an!>nCzF_6=#ca3YP`!MH6QZ5jxv;*-7H(s z6H3c>HYXXqAX{u#pp-U;r6B$xN|#A}=xzp-1~ic(%Bx8m1AHB^w@x`%w@y%t_U-rq zb?RaBL_}{OG6mLHj?^YJ1*&7+QgUNd@Q)x0f#uYSJ`ka!5P_6H2!&Lvp%rQ36+j^i$nnH1srONJ&f|1Wz~11g z*Td6U-;ElVf~SjVl&5A?kQ|Ce62eFrFkie3orEc3;t)!NLRiWiPh%AXu8<;-MARYr z9pkE)#q@{u?UTT?AX?<`_3t2Lc}IY}g0P8UB^f#ot*|t9s#Te?t&td$HqvOh!%E%} zPsoOO6No#*iSi>Lnv&ZciwZ2u{R21zB8i%YR-?z`r8=dBQ-J`NL4PFkHbD448x*0$+uC|d1_0b7bvZS&=YYaoD3S**=AktjTo?nxEj;T1? z6VrSJ|4+dHrFG9!;|#uU7Saop6(H@Ws`JF%fK1*RMR%u zE{r@Tn*!b5k&iz*FbKL0CMO7H2Az!Uc@5eN>*5QC#Hc|O`ad|?o3fWMIOLYegs+il zEdn6BJu?_mD7V2FeB^^R9V|14LWrv%qNoTRdPU1@`Aq2)UfP&6ji28FjYsONU~D&k zrK6)cnS#hiv1S>#U8AP?yG@PLacZhIO^Rp2K?J3e|4J>C4n=;AQS-KYcJ)5up4XW1 zmp5K7)f;tM>kSf^H1GkI;&8) zi=M2Co7I0!nv#@%kTAB}yuZgD2!c5N(RFe1>$LO>imYCV*&egD%eR%+XAPTXvUor4 zYSL@@pA)+NX?=}Wsf$J9aih1BY&-1uw(mNUTw2I+;S?`pz;L0wS^nM1`};}3HP8Ei zySDbHD%HzRjK0|ScdE}q9h;|5+pjNHtA2YcuU91g2Z=w2Srp8q4n?4uvVyrZpk~+z zUe7rw9)k?BA4M9xP=J5N2wz{7q$8sgWb&5m0U?KhD6j+9xq=7AqFICL6(b^OYjnB7 zVJ?3N)A?AXqQ7^|-!u0BVx>*V|-@vn0%ZMy| zBS?y>FvSeqb-Y{H_0Tch6e|tXl+T%IW(j~NnCF!@BAtSoPEYR+wW+j8t^OpRDz3M9i`CYM_a7SPZvf@_(g+QrZ|d-Pv%R5V34^k zZy_l+gELiXAEgv+En#8o!Z8eA_nXAE^-zt#lrMb<4#Ngc7``$b9vY@AGrO3=k&!6c zvmhm!`^Qvpbi~cHRj7c7CKw*c`*&c%ZsF95*iSw&*qY&1T9AE!#ze>>B$Lq2#}ued zSiI6>+8Bb+$vVlTFNzZ?UOP4;fFH;cy-o4sGPnnt#W{g+sSS|jH?cz;-KN=cN21Zt zD~Lskh7Ao_M?~;mMd-FS*a706-VQH2V*GSg+wLyBazy=wc@4co9X_(Iwyj1SC zDk=-qj5p1cKYP*3(D9fpEVZw~glYwfouFb|qr8o$q{-;<$ec-yYKPgsjMV$YX^{2N z;)2%KRjNa3pWiC)C()4$RZzia{Fzux>_tX4-|_(q&a5bpq&ZRPaHuZW zdteQR@%I*O78#?`SQXpgf{%Jh1?NdzpCx|;87J`&h*&J2PEH8vuW?1IHhSJj%t%s1 z@x)mFWPcdAzmE~cH8jm;d!G2XG}5Z~TZ04S!_d=n?XQ{;T+?MD=yH9W*&myuUh=i6 z(u&f~`&yj98-&fnjupYN!+~4WUN7{03u*d zOYSB_x+LhMQ#2SLC}UGf8pg#>7qJDUV34&+ch|N9##_pLWD1R84rl&vI76J|9Va?H zyU4rN7r14RXJ_if#1@r}8)K<@YrZ{vvIxaKBqNX!ia19m*FkTLOu-=2Of!5$(UAYPg;Rz^M)83tJ&vAR)Rkq!vSwG?McTe6sgsUX z?ma!uG;E#&eET0EFBwu;fs{3>!B7&9j5UK= zJc*=%)nJ}m&uqaKNTark{*yN&@vmfYlHvgABvd&bEQ<3;?p$Bk7#CEzw#LPd+JhhZ z3|q63K8!c+K{i~stVgN9dQRwm2_eM)p~sUFE)w0djHl5B`clCzvS7!g87+2|lssTy z+AgYABEHp7q$+(G_N7P9%TSe$eAs^>(c%-t>5x&2M ztY9uk(G;AVNbDgAZ5VjbGj>Fn1vyTfa$rRzl89kj&QgZx$Q2hl8y z1+8g@o60?o)=~wuGgu(cK0QJr@kolZh5b2}da@|oA2!2MwPH}&R%_Y5LeqIhnmion zL^bFnskYml>_3p%>YCA8(Y!rsFlN7I*?zR>U}RiGBkT28q3ZNPLUL!($co33RK8Bt$p zdi8oz9V4M1t_(s^Ww^*d`Zii1q8@TQnUCox>2RnS1vzI7M&V3eal=1u09_upnLRyz zEAuEhCysi2T;&oMN#7yz?}Akud*x+xR;DZuChz)CW_Z{RJ+txKzbq~ zH;fh5MW3q<@+i~PB>0H5DM!LPN+#t^k6ekcktBu%M)6?!PE`@OEalQ$lrQB(P)0eB zSD?v++}T@-|M44)A$MjDc*u4L_BLcVY5q{w(3skn(5(`qne0OOmO0x6?zv5(1ie9X!hWtF<(?-;+>~~S$`I< zN?ADjhHrUO#xc{80s|p|-S&n5n0C)Y^y)l@(%kd?v*5EgZ~5By)JVtxQu`dVwE5a!cA^r+=b{ zVu6SfI{ecQLVGs2s+Kxtz37Uw)h#vIXfRIV)fs~@EU4lUW|LBBS1QeysLtlNervL6 zr^SI%6=n5HFO}Ozk|q}n#kR86?ue-TUPwqiQgVG>)~R2qYJ7;gVK%uV(uasC<86|E z4e~Bw6u}L;L7X}jCj=Lg8MiaVu70N34hz&c+cl6qlwMX^>9X&Q0`@p)5B`BE7<^5$ zEbmqWdYE1($7O`A7BSzA z=oAp$M7ZX~mq-VKJ{$Q&_YNYRv|PZuGk=7pb&q0OwC_AEx~#rV{he`Anjs%k*|vJA z4cPK{u?jeOd>PK!VT0YV-iNnea3kCww7=rMjxhP(PX}zc;2I%=VFt!ta|9RZ5|-*} zx?Ii@G<{((v?(CjU;-#7EKAJ_4KUE~sZw!5(#*IFO&uR6g)YW;%26;(PLUFak3?E+ z8FQ7;A*Ru|Ht&y_?SG9zo&}SYUV~g%}V}3dgLY(sT`m5=pN9It)68JgE3c|=xxcFa9JGsz{F4e z2d2@yW>?4VdJi&JBY5+b zOa;}jN1~DtSvs_T*|Fj3o(Fi`yP-ve@D9 z*>fo=Kawj`C?E-p_LLs$nzcJX#6K{x;$_fEW$vOY1QPxyJEpHsZO!T`BMsHLLOL>$ zqRD$kuVC@RDKziNlL_KwC$6b7F;Sh*QDZ6?Mt5^$>jD2DD&?&iGM(gZqDz1oYRg;H zo{(yZ56^b|Yi0}Txb~MrvLz0$o`wNcFd`sfh&Y?;LMPI8IJA5&#1lkt6R5OM)%f;c8}b&D2p+`31cB>B|J@OnyT z({{rNkr>e`B`dg8=~&gR<3B+$!^>T}lXxz+3B z@7ME776Q}$O45Ph>^$l?&|ub|V~6S-#-=3T2AqJj=`XaRrb(7UT4khoBoyn9dGpF- z`k%jOx<9ouSS(a)BfLTnl}X5H&{?cnge?J=c=2htVdfoEbtX66}kt!i3WM%LK*U!M-!P+I6P zyIO+ep|pl{WzsPdZYmsod|Eexyxj++Ds&7RwvL9at?MuU2<)>eU@RLv`Ad$77GJYBSt*2R!Gjh??@us;3``!KoSs8YJaZQyC!vw%gW zV-lx@dIUu=hhGZ%k_kAnHweVzhNCGcV1WFTqih{;8!%y zC~|lz%dau}#~|6UkxSV8??GV`JIk`~ZARQGA%JNUbIur_%`cx19tbkCe;$#uVk9(( zwRd1e+!A^?FM%Fn7QfFhA#b_*DH0Z)ez%A3=!FFh4Xd;_ZMRQMbZcKMfSZTNj5Yk{ z&mlgtM*}GrLI=u2*^z#&ArB1<$bwO`|@Pj z<#txRaKH=LfgqGb_1xvykXwWwXTI@v6be zYJ2Zb>U)u7ruz8G+&NO3tqn4~-mkb7aKQ+RzPi0R@6P)j*xI|){-NGp29ntEM$hx$ ze;et|xF=H%_AYxnzhzuUBQKe1oRD#_P@9jCw(f$}bN+;rt7~oko42;<)~{o~2=ZFh zz>!Yw8=VdOH%e#Nb$-dVF?$CUb>;TxQZ;(HLbR%mg&2v9uYJ&A%xNO8iFylXAH!4V=(h$0LO@zRz() zK8#RISW%?-322K9kEvLW3g3WCSUlYI$3-6-HN!S+repV5qRQxUalCyvWz~P+rsX5~ z$X1v)61V$wvR8>~p400rz)a~UZ-RFM(Csy8hp}1&#bIpgGOd44^-X>_b`9U2IN#EP z@~7A@3S*w?9K8Q~eo41z-#(G{y4NzVGNehL1n+-lDs)US0j83&$cwQWPywmJxD!NZ zdV#+RDbTq$Org*dk0#hCbIMJc5qw4h}=&Ms|z_;yKCo;5q5D7NamA zkxl~nMu=>1Iy(_4xS)j7@G?m@co6yt(JjWW+z`*+PavfRW@Df+&PfcY1G}dKnF)aH zf#g9(1cPt63gJ2UI2PRn>XH>{N+16ya(1~V%pg}Z71IYzb(}nOSZ=@^|8$6rH|RUP zo=`%JO|J}!V*i^H$pxT#54pbvwP7k(Px$Wk-eX>DCaGI#dZ&~8y4AaB?i-ceYGF^^ z?Q>s}(xzG3AP#5wqc4<^Nc1xiyR7S*DCXQ(Z9`U%G1TN?m`$7pf`>jb6eO_@KT{Pp zVtiuU$k`BrAR;0|%=3l;Ad0uP^$UuDw1H%pH*Q0+Rd@28Yn>MU$OH$LVLA>ZGfSIceRQ^l8>UqtdE$*+_`hY)A zf-9`Y;dxN|dux#RVFzI}zFuN@^m4CU+CogH@+7#DySN*s)^C@eq)39MNn1Tyiq52v z+p+k?xY@6#g`=h$%8GlxA8NQU@4tl?*^(>j^POaTjmcwt!BE@`4_OxcH@H`N=zGTH z*Sc$#cdbvTCbvOV5__(^j?Y)zoZ=o-EfI5pacs^1WTx_ITmRrFJtQ@H-9)`JG~l*9 znapYpxl$T?mvcGkaHrLF=GEYTo*M9UBl`YKzWoR{VA{iP&*Nn=;8ykZN0&q1z~>3v z*N$7H(P5aSqM`42r^iZ&6A`>bQ1-eE`1(ByK#}O z(}z|i-Nn2{JnN*JAbHi_p0|;wyeD#nACMI?SNy-5)UI1TMh#y|SD+Ppe=}Uk&%hkb z^xvO=xLTG=Z(eCSk*xZ>Bnhm*(V(}>O=j$$C*J*M^gQ#owWUMbT zyYuasQp?M3Xrsq#5=hbsiYSG`1?o3IKw+gtU=)B%vSE)_JEz8jDoOG4dy5j>L-ZJ@#Tm^QyNs+NzaZHgG?`A8x%C+SYxhz&W6#aK#BPlFzmi!^F#ONk7)BI#b z_iSjGsa#MzW17M5J;((SfZWlE(gWB)3R)KmT8FRurqSVWBE%rj23a!gbU3%J4^w2W zX;M;@@>j3Pe67sD`ndDZf|oM%_|Ednr!i`WM*o|nf0vlff)gv@Ew`%#&LEt5wOwgZ z{Yvq*^HtGPjsB5U3@88S+ssn+OP?2We%X}Vr#q3ZldIQ0 zf0+(lZoXt4&(Y^D4E))R?bc%A;bhE7;QWWy(t;w#(O_KI=f0bw4=LOGjR&_pOmW~mIkduIc0vtLnv`|e|JR^~?zk#A&pK2ke)`oAQSPw@JWu$@c}%MJP}9u zet(*Iy+}c@f39tRk_k9{+v(b@*BULi|E*pAxo`uSz>zhJjK)$QaTc)%Y}Q(sHVt~H zgeVpq{U;lgtEBD`dmG?4YKtpL@SR+jCulTG#FF=?M*m*;k7baH&^P_syLjNHI>GD4rlpHeFUbzY9bYs$Wqwq0o_9K}eFT4Bz8<(Ju(f}`zB2yA zzUk=VG${64io|-DUYKh($URQFC;a&4b1;Y$m*7b6tF$54XmqHmL&NQmgN##L_}Io9 zsIlQ^AJ#4^eD|YMB&{^bPGU?-Kc}+=(H=t9?ZcqUlzHp44c~mav1gD}I(++T0C-L) zHepD>pl_rxG@A`kWLRXwazLb!OHGIye%x3qm&~MF|ZYfXE3) zKt=SF>9GcT%E&sB%t+C10>jpUK@d|292f)#Q-iQ-Hm3r?VF;)~;8(2PA_!v`0@xD? z5d1DN1okZ#2my0OfWm=7aHKA@%)Tr^N)Hg0zT@Y%k*cO{vKmywPW{w9@lDDi)>@2d zF^#^i+3J#+qG@a-zZ76oM4|DY9Iu>j{CRCtv?aq0AGWV5P@Mx(u5sZslhKj z+ywSI$WB*=2uXscxW~8AD{Nnj>vjbtgwMwGaxB^@NjG^9UAtSal@>Z1h2C3bqhuvX zFb{t)_IjjB9s`%8b&K(MLrvua9&u{=#k@`psGe@-51b|4davE3d%dn+^xjfUC1WXJ zWd!)R-%8Wr_&4Lw4JocliWs@WzPh~i+5W%r_(yEaQ-zf%-6DO79Vue>cWv-lHma5z znkN5k$Lpk&lVvNP)E`?YZUXl9_Nne)akjEM&`p|*MaPaqklwZ5aOf}V7x15_jR(Yg zMQHx^b$ZPF>tVQgbu+x&_DZ8NZn($WzA5%FrT6qc=Pvs7>HXcw`-`i9m$jD%+%rA; z3!=04erq{fgO8_!ulFABU!LFJ4%WB1CC6M_u5WJ>WuCkEmQeyD}ZziX@Qrdcjo@x2Q^*VQx7EkEvg`5(?C&SjT2#(Zd+OdV#uE)wXx*H=px+e6RWWW^HkN4y!>CIMBGA67$T11(dOjK4zz1ic5Hp=mxLVU%LvVMqTBt^<9qr2hglQ&i4c z3a|IJpp#N==$CD#*WJ_m;& zY)C=S#M44IxRg=(d^>1?z^?nKFd0QS0^)Y(f6V9W-(_ViQz>Xo;dq@LXRt1i z@qn0d7_deXnM^HYkVcaDjHQ7uZVCxqqfjOU20#Ob4Fp$3B1ED)hYVI)YdiLUY<^1q zB}VqfJGU?Fd9CFvcVN@zsn!R@1F#&$JQCwt|F$ zVkC~&J1fb#4KhgiF2FTo-f*Rl%kX~NE>kQt_V#?{`1oouz&XSS963m%rAe=#WaSrH zhv)T=RHtk58(OBApLF(re4QHe=oZtoBs6X_9G=+Pv+)8Ldm=SXvdKc0R%|?UGGqvI(tfskU14Kj}Bf1-(E$F|y*Y<$f{xJMj9t7EVMe{h7K)Ca0dx)-osTHAC zziM)oL(<(FxF94vpNlJrx31JiE^GSUv(aj1msBmmx&S_&;K1)l^w2x3+i4-=5zTV? z*NB+iGU(dY-#`FsW$H=i`yhqF%|{>J4-}fGo1&{Bio;8kY=>Ddg>;q<+ctJ!j>X36 zl(V*7E=;=54@647A59&};mXM(=q3!>$g+A~x@@^Q7@yK2XuCTyg0NGV2J1)vKsMSM zur^gm(6_oB+hdle-0haAPDDbjZ{CiE0g=68?6SJ=Wzsk7R>hSDbyZKVGS8k+$@Nk^ zU%vnC;p(>yOadSh444Q7BW#fZq$Q&;4PSRZr)G29ZCgpG8f0DWk{fm22aWsQFnR8c z3VL1a1Lp19da`0$uq;yn&c?K50Ma#vNC*-|h&=o}3a=9j)`2*@m?V$8mM6OJw6!ZA zW|@k`#YKmYmt9Ky@f&GK{|EqZ22qV-TlL-|r+B|&c6;$5nJ_V(Ga{CZWREgD zkaWV7Taph#OUsN1u)-^6tiekGC%}aVzVT$LLyXJts1mtkp$H=DdQk|T+lbEV8md!x z+A;JYdddk2^V%p~^<5;)}G)_k;6b?=~n#;eD6@nIZb0V5gE{ zTdx>PY=?Hg*b>$DK~n*`f9${-b1&)oHLJ=wtD34YPrHGoU4epgMuqqU2DQhCPDnvG zhYllSWC$!IX~LV1`c^1S9w(b!$oGyhYv$u;(^}n$%RqXUsCsYPfA;6$^Acmm3l;(f z=Xd5gb@gM3{S5YBzZJ;e?tfy)kR2-5uPlq=8%&$0T}YrmqN$G|P5KvMFKAJPp=`xA z<*8^WLx5D>OHmCcCR!=)-9tabNu|u1*89syef;O3UPvdJh0}oMfS!*~ztuPKcFiY; zT+lF2a5+CJu=9?r_e27h+CL-fr$G$0nCa^VU{xkP#!;cmxfY_d#~!0~gI?kR7Wu*YYkt%qxp#pSl4Qqi5WJ8rbZl9S1TM59-q_PbmA*W>o{YHaF1 z!PJ#TPZ_W19jg8tn6GE;sVH?_8mlBGJC?C67Gskeju*@e-z_5#~&xn;W6a90?m?h*)Mu7=sowF`AgMU;)- zN~-!o%Q<*}tx;x7uM$-+Xr1GkJRH@%h-x#%z)6xcEaO|>VH%lc<>cS<=-~gKXwD;{ zf|ldn&8N1j_9q8WGcXiPXBT%zNJ5}*6{=&U%&kvHZGW-d5OkdaTf*2Q3+odr_dN3) znoaRY&CKF0EqOZ2(i8JPlL+{?_EgVJEEzq(O|c$N@nL$sbt4lE03HVyr&m`asl=%4 zyQ8^2P@c5CqRs3?9SIs0qH~m#Fwt{bn7M>X2CLER0l8^|LC#d6rAHVn{p`kH&LtQ= zsAsx>v%%y`b%@D)qY=%gZ6E&D=(oC~$;*Ap!v8DD*KO^DSj6%+In)B(4_xY|gq_LT z2Vs2F8l1F`syS0f?hU?XDTV=*nE>>$q8gJiQ-8_q-|@s>XMSoV??hckXK3^7M#>9W zM9B%34h!3fmXxuYQ(1FGVuhxpjj5jhLQ!7=OUAG(9o#e*+9Tn`lN#p|dUXJx9iDQ= z2q6fjP#U;!M<7D*AP7%7@)J=$CbWYK@C%iM3ms1i00JuGe54~&M!<1|cXM$8@OW{- zo6?xb%2XQ&CabU(Zgvr{sVyR@`y&sSnu~x2I#gDa$v$wN+2Yf2-}zWmw%}#2{M#ez zV1w$LinIh+qd#OpWcQK(^ku_Co3nk$RiLwI;(!>MGj-su^LNqM$0H*;n%l-BN?%Ug zBgrD%0aNp{t%H$NvZFUo-g~ktA#upZ-fsC=g(<2Z#(X+kwy$wIyjK6FB2w&arKWeb z-nI2Do_`SOg?p^}BWX@kdVuBohnmWlB8q=-DXPz#IoHK96&Wg9|4nF8VBQO4zZvl6 zQtZvQQPWlX922ed*Y;FDe|jyK1ZfgZ+s{uF?yR!A=lUoffwN6lRpm}#bgZsLR4*7n z$h7}^W!?7`UMFHAEWG=4oGPVNC8YPUH>vi7EV1Mi-%NUP&HQr6h3{wb&Q;WbbDzwr zS)~B|Db_;c1H}iV-)lbJX7_6W8x9Ds{QtvN?%Ly808#EM=Id<0t>Ep==%Z`KsLR+5W3Na z)OVI6Y^nyNX@U_o^6hUCR1Dd_LM=8?xjUoR~arkUf5EM`h zuMr4NoR+yceZRi%7;A6U^T%GB^G3n?2QfAcYJw$VGWYwYSPs=(zmBn!uN1#{>gwO+ zEg%Tv#lDp*Y{N7{*&&?3L>Ws6!uY{COMbrKDpX9n=Ja>0U&;%z*w$w2=3UEf0CHCKv#?Ci59T63VFvVu8&0&9g z5%?rrpu-9Kli8x-=K z`w5UmySJn2n_L`2n8ojV=ygZ;G}QB;VYt&w+3lkUaY>Jg!ArxLZnmY&h0m8&S} zyOt{%bJ|9%SAaqUR~&IU>#XsD1j`97311SBNhI8qX2h)WodSPESc z%N&9rgOMr*>O>p|j&ukIb4en~A|c~50&r-eFaaCfZ9h>kC4)?0ERYTm9MM=ZGRYW> zUx+g`vyY1k>}UII7;=ZtjlpXsY?qdO?0B`!J$>n7+E`fJ8(rtMF`ct@Y}>iCo62r! zuAqRWR9ww4tuwr;=i~c)kdl_d|7lv?oP}RbM7tnyPrv<-l*1N2d4}H~dlGlKOv=-( znJGTh7*C34X~$Y`rG5@GFkZP8bOkD)QK3?KbIK+9eK+EfMo|y~ug_PW?<0 z@EGvS)P65Oo&N^R*NxK`jE?q4v^C#Tf)8_Ml@f)b12B-=*Si@Lq2y08SRf9yLi8h~ z@!Fs7)E46&s}sE7L#%(wyKioAJ~cvulUvfO(AK=)(k%M#fM+%#Z{N+(_cC)tYfs&N zLvPF91!`h1De+g4RtY`9cN!f1V*XcQgM&eiE0=xsZNb$zAuThVseVok&6Rg>eQ z6x1h|Hy&-$$!{giTXez2CQfap4ertBOBRN&H}4B{v(GM={G-nMaI#*olo0jw$ieZQ zo<05VuSu5}A+%OZKFjToA~xyOy0w|v*$GyZs7HP$t&b8PT8(dqhHLDGOq-xX`?0^z zDt`O_x4^gT{ZICx8++B~=!1HS#?@Tvs8X2RN7u!LCB}q6aX1j25=)XaArM^#PJ_%i zg3gOX@Wzgf0VWV6L>@_WO9;MNPZ3VRPLN}&tR!4sr~^(s$VF=jK_5Xv!~*f08+5^e z;4Xx~4v-vjFewDh5=O<9jSiRB2ZB+7<-J@TfssN?YD13QybH@4hmoSG089O_pat(T zvMFhHtH9aGpnI>}_XDK&ZZW6Vjn~VV%%qUD-mkJ@1lgG*LcSs!FCJ89uBXFdt7`>@ z9Qz~&0)l9^wnmnAKUFEP_Z{@D>;$cn^esg)sxsSwIjoW=|_Zp<4X*>&^?B zv`AaGI`A)pkWVs>G3@`;qUuw#vbmQUp({0nD|kN_NzF(nNp~)imLql9e91k}PBO6O z``8&v3JY)q1tfwRGed8wc~)EAh_J@)PEfSce5n@ZZsP4e*5kI0w3aJ+-mb4H#p`6V ze!E-bxm@h@G=K63iusCX!S+k?*L|j!WuqsBEt!Nfq>HcZSC=C%&Mc~{$dtK5XL_{%K;3@mNhGR`9^w}ZT@jkj?Mdeya! zqqBeCD_ilI^XJ4VCRy~_uHv)DmFA~-4CYG_*6_>j>aZ(izSAC2J<|yh4h+AnMv+Z+ z-Z>p^sDQ;e^V^ba>XIsbD7_MF^_Ba_^%g6_rjT2 z^va~`+=w`_-829&3@!sC#0#u5tV$g}aO=ZD6V0Ti-bhGV^^{CNBc3L;nY6NdCVo`C zvB?ODu8@#rD$*YX+955%CvW2F4PS9qJxG85&Rb8-6f5FPaYf5u*J4WAiSQ4A1x)lV z38TfHeoWreZ}a}|TS@GoU+AP`gGpTaauABwj9U$|023mZd&{@F_`lwjth%TuV>S!Yf=Kx+w zeNf1mc6mI1D!RF(r1P7I9HAfyHu2;Hj{}h+QxT#t5rYxllq3*J-+^@oMvTIgHijef zaLE8cjJP##Rx9!@7a7D9IT#Hy7Xb{BgmcLTBZW>=$fm6#CSW6ihgV6}dr^?ZLF@cHBk_(gq; z>feSI?!i?vRxG2r1X}I#Q%_|1ztuh~GphHgRoa>BJA;qn?!OGAnMz!nWGK4wnGCV% z4Q)>tGjn7|5Q)V~(3q}#>V+jTCn!gRM17?lkcM`GKT&ddNN3;btTl~}rWkEqZBRKm zcg%%2@pugxPe>I6eVUyhuaGLC85Y~|RV-DEiHQNnqD9FeB}WST_(Z7aF`N>009utK4Cj;b(c3WN6cjZ%&Ych<%Bd9YH-<5j30y~5DL1Lt*(<-f!J2Ip(kVwm3N^51rO zGx2VZZwV{{W;_Qeg2ThOI%r(Gf0OPG|({> z85%|G2nTSibLm1L9oB)wEljsmNIY09c?$}QOHCmFyWq1)z}|H71-s+vsCZMW9hHQ4 zN@6#YZ3T9t-<~SLxiX`YV_-od!K%+5!02()M|H2L7AkDm;PL#cdxd-h!e|47(4WOd4Wc%7Qd<|irD*LgYlrI^f10n76j z{Lb-h7{lbOX*<>bKpQmm{Zwk~AR)o`uA${ez#Rdme*W9FCg~`K$J^5?pH_?0=l8kU zIUku+nG-Y5XSo+|;=Dgyo~?6#a_jn&#bx*xML=8cR6{Vn@HkG-SRi8yUp1gb%2{Z` zSYqSNcf1WCyW^0c-$Yyg_xp*e<0Rnj^tJ!?%j{Qv`nb&!iq4=&N z_VzTimy3wyCf-kQG>Y>K+I&ooF#Zy^;5S)UTI0Qd+cuEVA@rsG4;6 z&IK(_#JfPnmigl4w7vRY0wW6#b^*MG2#V^=LWn^ zM+%uh=v^2o6ms69y=88kO|MW16t5fOuxjX9WuupEuw z8nUT=pdvBFP6lC(n1B;xz|IJpK|N?ASbJg+dKr9@%)m?p6MSi4s4zepCk{>a423Zc z3weNxfEEdTiOdueDhZdw8v&r=uX7=p7~^##AYqw@5h~{rC(2_$(C|Y%`v8dOX(l|9 z`f&iDCQ=tnii$K9AISfaA^%$vWG_rJjCi9nc<|B>#~KdwY?DVtMN~$Gnp3e~M0I?L zB8Ev)LLkUc<&X_0);oA0UOYuA8WxCzoy_u$L~E0$Whx85&#v}(1ymofJcjxVh}O+{ zcs*u4K2f(nAL;vC^DcYt^rxzlF{-Xv3VU@q`^%NQJMq2gPaC%~|Mp?~wDLB3jV_sq zP}cZzNaX!_NH3^Sf8^(8ECNSK0uz?FC=oK@{Qvf0GhqIF?rsw( zlyA#gi|#TrOTM^dv(u*}DUv0zKUVmyznh(eNz+Lsz)pGU0Aw5a&Br4xbCt=B!%b%k z4V{y6(>JHbnRuF)IFg{L6<}dg^QpJLT2^kzyaCFeEz-ODZ>bx<%h+~~f@2=VUe zt?x|B>7MaW}d{Y@)B{9DiT&##BK5Xb3%>lNfjiO`x&~5`G?NJ;( ziycsNC$oHQYwW+E5;V+J{|3lE+xSs(Q_KS{`G`Aui>(WefqpUHJh(xedNqSgFHvk0&3&J>;7#Q>U@8`}IwGUmc2Jl;7i|I_Hv}H&DC89ff&}Y8{}01JJih`kE;#3qj0=*u zAc+e?m<%wG10phE5|}^{BSLJ!2_!JUgb)xgYmqg8KoJm_2NNJnhUCCN0yBpMB4P%} z_#PQZNDdGnKnTYNRAUALkPr?-2!Q~3i~^ZMN`Q(OE6fTkwD>Fsfe3&Q4sc)w60(Q^ z!T}L*m>eJ=@?A!YaL63ScR8MkAVEwJDHdBq3yPQ$gg}94B_aa?Aj~3AA#;EOB2ob7 z$$A+VwnrVdpWEg358pxN2yI|;GUN5Hz0N0wyS(_3JN)9``MU)7WuAZGBTT}a(6pEe zF1_?IR*QyScgV@ z)jbC5*RX2JAnW7RvRWRqI-TLO3ZG5+^rwG}H@{;v<$`iKqbwmbHHKqSCWEJs4}J>x z0v`g;hwOKM^B?eQ|I8{T=_BHN$@Ldrr9T|wA|wv-JSWD6`Sg(G@wFj@YbdR)H)jSl?VDD+(SR&S)%<=MJI>u|WioxDXwTZhnHr*;8V3!f0neLy7Z& zZl|DWNNq_(c@*p7zFu=GV0TSSm zKuVAVCO{y-90){fNErh5Xiv91@T=01YkVl00%gPM*tR)3=BX# zV}K!qDIfyR2obp;1oDUow8#P?B3iH(qXnzMYOn?jumwUGHPC`uoHL3+%8ffWSzF)Y zmLufED}{`#-5T0EtfC*&>%rDWZdEbGxM7R(orxP*>x$%kwF;K;Vr;3Kn$R{x3)F3e#T7dn zy^VkUum9Cw{^FOu#Gh2chwQ!A-{LR+^uO}*-~Q!)_*YiW(@z~v3B(qYfuId7ZEVSl z0r|!@AxSA?Bq_QiYVmPFdGM6+aED8;-a#^w1UhL(2$9ulMqEwMY#+BeA+%6*wzzTQ zBV4(4gUyXydZPiuQIDeVbUGQPgf#DggDmMG87_smTC!X&I6gS$y|?f3^xzR$(&5rp zgNlOJ-#%oqiWJ?NZZ~6cx}sAIX_}hUd&Z*;Uc7aO_aEM4x$L?T;=9ZY3BWKK3FJA z&n#bOG|muU049V3A`k!%GE5OOJ|GEjm<%DnBLIt_2pHhN0P#JNki>UMh7mC$0?Z6B zB!?uPF(6_V5e6o}_#TU300Hrg8Grx}76C(YUH*~ z4Z;BiL_mN8bD)5kAsS=>aKu>Qlz@a{#Apx^V+nXL14WR)1c+yhX9Q-5XN(8}Fu*W` z08D`R|1vNG3xERw2nb*fVHg47fe5r99k6GDGDVZn)00j4aQV)RU)d?2dTuGaqLWdfXYO z+#Y*6GK2>V%s_?#k}w1q1_<%T8HNEeqw5oD3=i}KN$QDaP0LOGInQvYZeb%Ckexo0f95zz5MyjLI3EJW$8T`DFU} z#dJ9a&iE5b_>g`3+iwH>^pnRmN_u2j0ZK4Dm}o*vUALGy+;~jmg$0qN3DIWw&{7^g z;p(N^j4ofNY?lnWJz|I~7IPBksTOmV=f@QF972ur1uwqx!+i9UFR{M4O| zEwDVl$Cv-{@A0Sq!e2v~k*mU#(Cv0fl+fGUW%K%Ty!z=+@%mT)Dc}CqA2Awa_>QOX zS9$NfJqBynn4HhRjHWG#*5J)kPNF%6l_pW}c0zy64w@g|8{gb@W64Jo4NiHcw?78~SJA}xWM*B{L|Z93$M zxUn-r))Gu0kU30%YP@xTh|D1whA==lE*OSk2tx$GFg)OJiU^QEI6#1KGQe>`0x*yO z<$!us}@8`o}f{rZ6My2At! zhcE;nkU1niATEgS6W=EUM8IL>fG}DUHHIWQUgTzsQio+CD;(WAl6_{#(d8cdkG6@H zAlK#a{&xs=is7lvGhfbWC}~^Aaz4e9jL~o#m*v#+CEa3(>J^LG6o>m!;D6>%DB(l& zt>6D$0RQv<`Op8QhLj@BDT+Q(5hLK0P=|`L4ix=$vSOXZN~ArHR8xc%_4ygMZ@)&- z8xSngO;cQGk%Kx^#Q%piIQ{iKzYoIxdVjv(-*WbI_qnrrR?m36#u>*B1UmvkR49mw z0&1l`s;Wx;2Y6DcQq@OPs!&z+Ar*qERSQ8BL{kV!AaZP4`#D1ySr22vT?mOnXwsH zT3c!3#(G#NUFW6Gz32x&`ibKkRgDm3gJ!bTn@nfAtw)u-EXuC4`y1=UMmHJl5Ln_g(nZ(~h&abahAC5JeG0=chsvflhNS{D~x*bS{woL=X)@hR{h( zYEqF>O6M|=of^F#zPI#0|JL`dxA$$=!C!dpx?g^FPv;)l)2d55qpRJ@=bpc6X!jL! zC+p4+-h9t?U%l|e!^V1Ih?&f(ovt_OMni1-=1*Q{GP7SdKK}SsvdL&RwRgNoFaP9y zhua$;e`Z%I7OSN$CblPO(ocxyc%AOvTf26+WqT5`%p5Hi-hBU_(u$X!e}q`02}zlV zf~aI7NFPdxBoQGLq4!fEd?->Nv-nUnktwqZ=SC@!WKWDjL3p5$WOf*c6*^CLXp`-ga;}a&Sf^CAdn&pQGFEFtvg_I%^iJquJljBBYXl+y`3!-@L z#V39Bcfajdf9)^$=6C)JWp(9P2{Qph&gRshU)|gLv7Y?gQ=^b7;wAp;zboT2y7~ar3U}?yhklx{3R(m$i8F&G){D-|#c){T#ji>W|>X zAH4GFCt6lr-^;EjrISh5&28GCWo5c;D07q9L{~@iZsYj&+n#&wB|8@m4Z}!Q5n;&2 zW^LS@>ifB2xl}g`8^10R7#_sN}vy(ge zDW#w2qPTwPQ5jRO&$ivYbH~=_n|()@)NFZi`D ze%6;?e$#J#>m8d-@ypL%^3unO5*^V|X3A`rDAWbHCdoR|Mxu~O6c03+gNU9?RGEzo z5fc%;bD1MC2#qANNFky_CvzkqJ&-b?35`sQL_?9zg=mQ+MuE%_(X^z*u8f7qMsy;! z$c7-BP)JCG6lg+|S&1qjN$G(^IG5H!NA^S|JLgh57lBMPVW9O=pc9HTl2u445M=Q{ zAjpO$gp__N6fy{8kO-m=RD=hb$UqY@Ajlv`oauU=`^0mm2M_tD|Lh<8*mF;bZr@^a z%w*U0-WB)nop|C?&+F!gx^Cj_cUL|#pW2>xHbJMji;`?b+7>23KqCBmgp^vQP6!M^ zCKSCCf?%GZ>%yI}8ppKSY?OZL@L=Dq$t{mQ`<(UaMBW}TOy|}^RfD5@ zH=LdwTb&i-Sk)YqzIS}me#Os0@8{_M`iK7yeCe(Cm%7Q8t*tGR)`C(*X@9SZ4YqyWycW`mnbNkPE^_91b z(+l>d#o3L!&W2H6P}bIWU$>gwckQ|7El!Uu*SFM@GwbD%wmvf-W;VygGcP=9aeV3v zpZ|*@QW&HMQZFJzK%$WyDvCfPf|N*fNQ88*NueY(j0lO$K*|i~GE)X;o95*=Zpht- zb>rGEKJldO7(@%Hl0g&)J39_`64fh5Yk&JUzHXdf@$oC$e(ejNwB2u9efSx__4*G@ zb`Rb9&P~7g!bhDBOShJt*lM19Xy3FS)#N*G-}68I=GT?&hkWXK@uy#UQg8IkQ_uOG zufA+DKlCqt_<>*fh3CEe=8+#QI@?>@`U{Wyjoj8cj${zMT`Bt!~TIQyG!6rr8#nHF?An1;eem8*U;XWW<#WIKMSJ^)hGAp9>|J>13%>N% z|B}g!wi)TuW^vc*>WJn)}0&PdGEwxm>ZAoJ3QRe zbw#U9GZj&ZLN_s+Ol^j=wM|hR?jHL1$F_ar`)^xRavIvnVBQZ_$M386n_H(#2UnI3 zE?zW=G}QNW>cv*F5ydRhiAX&>@9CmIdKlMxyvoLXat>b7??| zgp@&KN}(t+J2ZbHkqGCarPJkLQ75!2TDrKmEpjbYDW#x|(v%o%%>Dh}{+7GbZF}nz zpMT*+2eY-lt3Lm+hyAa=_f7Y0+mh~|t^D}bk!9)aj4RJRe33RdY1{sn-};Kh)&&=a zm0$ntr|ooulB3T)d)+_y%6BYlYW>{(b@B4sH^gMBMe#e|`LU-i&i!Y9_6uHr>$an# zcRhA(M@W$&RizCKRf{58lZmd-Qf8t_DWLTtQbr>~L^_ulB9JMwB8WyJQy_)#Q%Mq~ z%78+8AOnF$OCp_%98qNwkWB=si456N#EJ+6IpPe}hgu?KKoxqTiU-jAW8fkz}HgRSFS30x6|{OeC376Qz*pTp~0i5=}%%A@n39 z0u?DWG$BYbLqw3x)rSuq{nLN#Q!jkV8}Izc(;xe^8#mr}aJV+#z9QR+N1uMkM;__T z`&5(t2t77ku}Bt~PO%kXq8KAIX%?aQV~Oy`QVJ~ysiGo-nJ|g4&Sn~+2s5DwH*Z(p z{q9YdE=+v-lZX24OV%~rxiPx=*38X^A2*)d5^-v^UTCXkW1=&2X>aEE=smkTGlx6( zJ^sR@vQ^JL`Ovlh_HX^IIR-z2-p|SZ@ZbE`@W|i&yT9>E1G;{r><&^dve)bz*Ef~f zmdXBA!?+Or)cWkqBac6=^jkJ{)c2i9t_|xGL*3ZajmXi#_DrWIQms`rIJ&>Ky*1jI zHoNnw;qIyLf8`H-{PUkzcDFt9!Y_IB`CgPJD>3PamDhjt`+o3;Uv}k*PkHH=e_f5W z?|k(S+<4DgiJD# zKGc%gq&MrEWlZTd*2AD?r(}vuG7NR(IH8GPcIYbNc8=!uPa zA2N7sZ_B02yT13eZxN{<7d~?Jl9p#)ySen*$y)5}nb#A~K6Xi0@5x+=+|p;5M!4FI z4tEay=&jqjtvwgIaCNuypZwZqT$qiXzk1axZ;TEmp{~x9(u;ng^_>!dB2_e`tRtFG zWHv3Th!BE=A~Tdygg`hKkfTgw5z@JkTBHy}Afyx}rE^IJ87MNF$VN69kYp3lITun2 z=dw+NjvP@j5(P~r0a+zNAsexg8AK7K&>)E*n^1iyQ`S*LAq$a2N|k725rRyzA(1ji z1d3=KN!kcxCJ~er5fWNb35k@^WNwtM6VXXcIM8evN~&9u(6 ziSU6mPbQiRQA{BcA)N~;NqT`)G6Vz_+lovkQmN^UckkPp&iv}1zUE+FY%;y_{>skI z#AY>`ZTGHTe_UOh8BcE7-wS7Vk2pDVGKQ1WrFGkQ`}NngT5YxuY!+vZe(THo(^*dZ zjCwyOuf6^%{QA-9YHK)YCNXUFx2uF*!VF>KcE z9WO;zt%QiFI&$aU;9z&E4Qo5yu6J&pS@yf$zq|0*#i?uiTP|F>U~e|@!>@nSM?U>Y z^DEaxCYe$yEsdLnX*W|>Gn?a$`^O)6=d~ZZd+Uapozit~-(9$Mw03sZ+uEDT8dk%p zaa?MxH>_t`OuhBqyDnY3O5dxc8FOR0y{(j@?`HNM-gEorU2Rn?a_RK`O~xbX)T=-K z2lgMksBIqC%F^O=VS4?lF?UTS)#b}`%hRRLeeQEggor5uDOI7!^gxDiE~NntMP^Ti z4@IKMB(pjfNDYZ16`3J(^i!EBH8Lgk=5wEXwoUE4i2wccdRsnv>8_Flx%}n-(MPQb)}}i_zO?DFs)W6OA%XY6tmfu z)v)q|*Y9buN1bTX-r!6%sETjD`kqzmTpU;a+MoNRv-Lg4>r>lX2QKyLZ~W=!?ZlZJ ziv8)vXP>`BJ5!_4s;G1&jpHaH(1b*hZH<%y1;x2kMHDF&MP_&)5o91~1r1e7B$)^) zLsOt%WL_W;%=zkc<+ki_iz7hEOtfsOZrNC1}|kpRPUk$eym_ zesXUZY-(q=#c-CkC!MjYE}8X+DUV*pZzlash>gT=j8gu%Z`sv|GS^OefQbv_O@=yWIB;T#8l}z-I{v)tv9Vs?wNLJ9PiT2^z+WT-E?vHf_^@CcJdx$?_g_Jj3=Ji>rA5h z^PdB61hMY}r_-}vEMj_X7l z*A62*a`lSar`7-Vo8PcE-SwAWdc^0RKh!yM=Y&^3xNqH><;lV~Uw+FgZ@zD9_t2_U zi}ljsq;vh^1#jP}{_*dA!WBe@ zqROabCtFd+QPz#tnruzBrj1ofGGvBqh3rToi7Y}9*`bkxR7CbtBL{M=*+>IYN~Fvb zkc5y~g+G>~4`uVA*3gKQ5{W=V3PrY&9E4G5QV~&P2AN2NXiyMjk}0HYDcdO9KqFen zmO?MH(2B?oomA0KXel5YSs6!i5ZP#rOcL2d4qB^Z6PaijP!U2$MUq*i(E}+G+0f8r zHjxb}B(0J}5}8P{k&V`5R;fx&NV1^nr+fb3cYoXIa^s!1e_*~d(OM^#3xDHp{v}uT zc9ft9LxdA)jF1s}p~obc2-`syG?btdQtFUG2wjk9C_*@wL^#(cUC>K}!>y@4inX*v zW-$)5+F6{1OKKYxGh2t(tXF4_@87XHxks%I zcK81E`$zBnk)J{5=ivAL#Xs?p+eonzmWnx_CjBK$y-u_fAiYn`)@lY#wqP-8g#Ra(Um78#!#u zw$_gpCna?KL_e9L(}uJ?of|eY z$9K}+!8OCs?Cd^dYdRIBIlOvJs@998b)DEhykfZV6Tk4W>(;BaFMa9Hm`w&$87YF4 z0wG0^n#>fDLdYx#dOq>wffpV+aCs{j zs^z-slb1gFgunV{UhwfJCT3kT@28%-{;;z<$2ObMkKefIJFmRwyRW?M6Hi?AAN|Vn zp1r=MqfAveB_L;{nSlvD{)bx`#Z~M*bUm}c17p4$pOdN}cCf8kNna;mhAj832^5~&F10zG;WDI$^1g{hV)g@iy< z|5iehBbrDuN7_K9%!-jrnMoqUhceK}=3G$_G6P8>A(0*kBuQi=k&R4rWG9V2lp(WX zBQ$BmD4h#5RGEZELXwC?(vnQFktu?#OH`2|RhcOS*~kz{wn|H~Vna5WNhX>H8c~HN z6|y5k8c3*86In?}6r^Z`q@h*Wi0sHjiq=GHWJ4-aNFfkpkWA;>{_x9Rcjf9;-}=_~ z?CxH6c5>?3mpt%$aw1lzx|ryugG*QTY+XKdc;!jc z-K!Sk==SZ~?j7CMHdSrS{rh+S-f}$ozMnzw=iqyP_zn1ruf2X_%1lg(mZ`LcCTlfj zik*q&cxF4Mws)@SXERYM)*?5$tcLZV<>>7GJz*ls)N~r=Tb;ABm2nu1wVHKPAGvzf z56%|O7R`I>Q`_@XJJS1`{rk(ZTmgVvuv(6+s zJN?@J_MXF?9b4O@mQCo9BqF3Dq|7E2VIYe%%1D_VSx_}qW)LB=p(4nX5ab$Nh6WRt2?d?=e1jZCG46q-{JO+=4QC^80-JyK>vCu77~L?NcaM3f{3 zA*3Q(=R++JWDtQ$gp84_&P7WZYwVB{p^=63Kvsl^37H5HO-eFIBC3=KscMQ4A_j?w z;#{cMkWht&LKd=;J<+3KMIva>ib!OUsz@>l8m-9~v}_(IBAduW5s_q(8rh?gof=ID zp^!@?twWG&)gWR*>qK-U>0FA~h(PpYkcg^gQv`~0iHPD{NEsuoBi5dJ;YDx0^%J|- z9A;ep6BVvV7tdjoI3yRv_2+v;SnUNCMp+Tu*tPb}Aio&6n)(?hF!ckFEK zIJ$pNHw*pbz@wa$)DdLwnoay?4uE6JC4whJMo1r>7p>)=fGWc6sG{U-jIlK5M=`ap&gS ze)6NAm`;kb`^OdoM|X~FmJ`b?Vt$dfBU+QIushqbt+TQ6o4@mKY;9fk%rj58cl!gg zSR2VPRUEJ0*v#ri@ zbIa9(x$Jj5`sj{ys$_^LWRsE3rIZNgQf8GZs?16jO(UU@q#&V*EHYB+h(WfMkm$5b zGSDLss9LM!RO&=lVI!rYAtbV{oXhN`Ml4AtnrpkA6vBqqv|MSX5)l*HfS@%+NTa5S zx}=4!%5k!(9t(@D`s+1;jkk0i=2_lp%2vMl*MCx>9AZIc*7*K>N zOl4L|RbnEdp@>#RNpcjCN|#zRt@%*PQRvj#$dJ-xGSONiQs$rtX(T8mMd=U%vJjnY z8>A>RIa0bNA|*t~7GxEQmLt(bZfQy!(}f zdr1+tA~Y0)2l@#2Q8R5t=#W9hC`E)p>J%-~G^x_4Xi^CZ3WR?vrG`7hU=zI>;pXjX z-f!95tHyQJn<(2`bRA={JKu5l)@>KAh5NVO6i&>#BJ14A$(f_04=hfWx?0VGEQ9^& zR5`u(oS#weXY?=r_rC|_Z~yoI(_a~ddDkg|tZHkNFxIt6&h76`t!gou9$2q~j?LboPymR2?_g}S2RGaSDm@1L5^cU`@BmGR6&*B=$rnU8<$d2)f2 znvj}MvXfF;OB-P#t<}14|M;He*;-3l4kD4gR@Z8)N-0`PnP{O^q8nv|)~bk&Vj@vn zlD%xB5=9-?GA3G^(wfo*tuwZ@h7O`iX&6SO6fHLxM9h`!)Es4oNLo9Q*~yqIu}?cD z2AQ4AA`wxw+~~}e($t*F)?|(*eWwJ&(Daj{<{;~o7=)0Dt|KjFR+(WknabA72BS18 zrPFm2T}icug9{f8t75UbNmijCj3Zk++cK-ZOl($5{dA)AojMLC{lqY?ZR!dW#$KzH z2-8_73fV%oqU-3o2|CqEZOv?QU^<R5BDhGOOm)-ocJ>-5bWWb6pp@GDl}J zFUB0y%^+J-YcpS9KAx_)CbE@bv*(*sdbM93UX`l*YTui3xwkc^&8DgA#% zRvE}n$?DNZuIg-g-ivHil`LDl^7DsCnwA{Sw z^yH4(cHO>v)2s}RPmXN$8*-zy&g*aAbGkjb>SxsZ8U66h*WhzMc~@tdDV>Nw zL(!R-_sxZ^x!2xZdFEpmb>n^6Myp}1p1oreXJ&d?PaR%4P{)Cm?w=KR*Q0yK_dRlL z?%L&TufKiMx^|<9P-+9}l zAKklm%VNE;INlgnMf6ic-4flNS?Mg!PR+XF>Bk=N%1>VQ+BB$9omw59xw5zGgPSK}dt%b9 z)jEoPDz-0~%q~0o;5#lp_qfx$x9x8iqLG1+8k&>>nH@UK(q?_++kf;mw{F~&ZK5k% zGS;$fL{62G(jX;5Mv{#TwN<5`Dag7ZgG>aPRF!TbGqhGj&WM%FqGeIKR9h2~iXxND zjZkD3VyYBc8&QP`*^5|^ou(&3v64d5ITt!brwQS%w5Al<3I>rOqM?&|vYB*K5u`?@ zmTUdAiqhMxI}ueWA#_BD>_il$8$=f(r&^=drTfRn=!GV8Bzh+&p_E?4pdd}9hK(-B z2x)2ZZ2<4%f;cF9{5OHP^~NoyN6+89U-6mVg*2~eO&KNo1f zv?$OIMv^8-TEj@vrdAX$&FB?(-7`XcXKz0W6~JIe_H3@|gC2o;7i;RvHg z$bdr-Krl`S-~bgNV3-IegcAk`CkzlEW3&SEY|Ph6*BHS$%CUe5?fr&gTrsR1>t)85 zj@TIkDcJSfI9Ze0N4R=r53-}K1Gy_HtfE^TV3rB>5bclg)Tort^8tB2pqV0Srem%pi%T>6kBD zy52FL3o!{+j_9l=swZh=essj?%_)yvy1?P_5ih-R6?1_{o_q)|2T0!MXn&94WQ%iW zFY?sG=NXL^S9ruCKmC)R=J4JPuDx>~{D7Q2s%y%6NXl^b@k=aM3!Do`TF@TPK`N$a z9;L2EY;&Irr$?OLn)37$XMr_fhyWOZVk97A2$;h(@XniW^3K((cpq?1Kq7)66kvjp zIbjAEm>FP*1sopH4k2Uezy!>3!UQmfX^A=m1+xk>1q@J>gkWHXsbC72Vg?2n4zq|u zFdQcY#Vmq2FasirfPtAH<}fp|Wy}(05i`X!fhm|`#=FciLc{q4cO_l15Ag zu>t|a08z{Y5R3-Z4ov}(K-+bs)RI$=nxST39#udcs9|QPf?A82g4JYAq|^|Tl5$2> zF$2{E=CPbG=|CN3irNxiI8t(0jyQ>6Uz+g7yuF~0i79$kP&KwT7+OA7=|Dy zARr)|5Cq6T1GEM$LKLGaJw+)bO%$atnH7ZE0Y*J^WHE}u@P!d7kM{*f`w3qUk-jHs z!UkhDPCbO5oa6CN{za_3$oybUzrKeH?cwqA;5YaH0v}M$0`Q9_MsO_>CK#XwNI=A) zni&p<>>nI(=KN(!m)SeMM_e9(9gx;Np%}Ay>M{?Xe}Z#oha4W>=jNT8WHUBrp68#w zz>nT~2h%Cro2O}4phOnSHI9P1bc~CVYWp;Mq2YMG;?--nP^ZK+;?(9QVoGW~i=#Cz z8@?K|Y!WHdteb|^WzOvEP}LPby81R(Z`{Gln2Q&;nYlIAF1dYt$Z+!`X6)g%r4Je95F1W{NVbWs_;}HFbbIkEp-@DkESH)Y3Gh;N;x@= zjcS}m&W=i&#eFV+>@mbLMu7olhKK+TLBIeMGe^#eTQ{#0e2H1)U22#)Onb}%5HLCr z1p~;awKz$b1rR_5Ou;gS0E(yp38N>+fb)ja9uvVNU}hj-WZq?p0RosQf`Ij86wD#K z$DCjQW`K}Y5Wwg`3^flJkPrf96^O$~n00^$bBGwm3MTq%4M{*de~hBw(6x&Lf&I%>?Jrlt3~$M?^fmEigC7 zQKHg-^*9&su41`9X0<-12nDJcksiwqF(K!k5GrE7MolowN&pp zl`nJt!ew5(@+zWASqr@iZH7Srk5C$v0>PjY;SdE8A|M7y3=_cs!>9y2;4n_8fZ){#m02X%dcMH=6-`Y&zVy-Ph6Z3kMFV6z+}9|&gL$k zcs40Pf$^sLQ8Td5B@M!KZ^Wb_y7!kF_Imk&V z$`O5D;wj0NagxD=E*V8AFwHnAP&3Rru!xfi)G+HY2|$ZTzy(8N!Wk%uYzgNxSbg#4Zw3Pf;6A9L^vj#Mn{>p$~!7D!~U-8_KezZ5Mb4&IEi()9+JB%vLxL<^rmL-~ypgG%qmi0nd85MuOnPq1xeG2?nW);Du~Zl@(oD zV`@k?>On#9H5wd~;gCU?5PZqn~ zN*;RR0(a&e7d9&@fkJrKQsBUhl?WgtzzZY;704I@EDX2Kfd zsB7_6MOg+sfCvE)U^px}?mC77&I=kGtwLEj5=K&E92|Y0**a4(-`i$>FsD;t;CpUf zdlL&&_V2#U&8u&*UcW_P#m;8UtwTPLzz1;kt!n_kbm!K72}6A0aN-aI?>(B8oD+Uf zvRHL&pFWGPXLvQ%%bO%!V#%?2`Yh)kJ;$Y|F0)R1w0At?$%tS6)nDg}|M2f{{jIl2 z7AfL{Pd)!QFaGdt5M?r*aCo#&iivg869$2*E*MBjF+0zy7_nU3<+U4knN4dpHcG_R zgknqYF_M(P!w_`&1T@q9%Dqune(dHNVIC#~@zVF+VQ+6i z8(VyEK%`5N5CTaZK03rDQm>dMqzdGiK?THD|VNeR1g;g|qQN|;W&)_kdD70B|-f$Vl zwL>x#rBDtWUF%Ry#FWWdaD}7ql@J_lt3**s@dOVc8@(AZIjVtUFbrsdZXF4w1Iai8 z=L6Xc(~NV9bAf79v1%f@&6HxyCW1OgN=8bCh{FpE>p-(i7@2HBQ96dh0&P9wg;m>8 z)HShRV`lU{jE07FkX<06Y)lLKCgQxODhrnLL?0u?pky&`8Po;C5tu0{Lm3LjlNwh* z+w`a<%F5BKgsLc595)Qd1u18ocjOc>?U+m}nl4k71!l&eDp65#j%b9k7_nS-w3fgX zh$xyA=OH$Uot=tb_^V$adPl&~EDK_YcvEJ(118(&5K06A1H=OY2$*3wObypJT)23F zyUS}#w?}lxOUkV=ZnNa-8~1ta(+|;O^avSffmXl)9nhIkig46r3`Y?J3{o&^pcbJp zqZddBwLyhpKt^Z)stN@L2%;G$LRO`84kr#@1ZshW8EW7KN(>K-oRGxuL77g4!K~tV zv5DgrZ69funX7MpgF8oi+&efR_J@SjVVdPX_`>JqfBC(y8}C!#190 zu5nJmDM^)3I6_o5#{>HHoQsb>kCJJ+B{?6^%$JxSF{~$SZ=S;lbju^MDU0PX-OdGm z{#SpE-~I>xEq8C;#^RF9H9q#tE-$?FHid3byEQ9aBSC3bEy2JS4)51cDm%N|6xQ?l zTl=inLKx0zn-X7)xqau5ovjIH&hFxeogKLrw9ojN_H<&VOr5KBKVTvGiYF3 z4yX&mNylJNQxt~tYe*fq5oR7l5ezW}3@ihRs&ePnO}tYK#jHm(qq*ni-8KK{OMgOA zj{+G35zKg(0A9cWYP`z;Lof^hFcAJPhG8bC7$*clgm(!b2w)&!0M>#CYKHJ0GXn$= zzz_ftj6~@iU2bq92w*58f)FtbGr`O-PALBeLpk990Sqt{;XNL~1PntE>LSpkh?o&X zNTy^FPK5gz5utF9RLLTU2u_S3O5q(?LL7()7-WT%4V;ox5i<-B14KC?fb+r$Ym{=8 zNKwhj0HyGPse<$ff&n5hES0>!W|<8qLS@FOFyr{}n7S-jwIDfD6-uZK%O1?=RLPdn z+%p+ew5ty1J-$ddF|reyMi?xFtHD1v#RL`VXq_cW%A5E6z+x887s&2759J>GujCEC7YHE(DZYpiccWae{yBqqBAyv_R* zc%NQ>;ST_2f8*Ex^Pg+*;4)=Vkx7_=1KOs?iBJqHju#8cYDBY|)2~+qi9pX_yoJk3 zT^ICvNW1LN3`M=m-rd{Csnh)Oul{Fz`Jeth-hTZREH)Hw$S0n?%=ccsjdw$atDY1g z1kYl5%y=}VDhnn>BBw}Ijj5_3N9&SF7~`CBe6Y`KQt-)VpXU1Q>wM?6H#lA>YQnHE zE}z?AdzuNw918;m<$#B_ALr5MpF|~M4A2=v!T>}tGt?5x~UrJKJ3F`-i8JfzrjxH4vEE)hGW z8aNCPGK7FtBZ^{1zqpH#5fjvUp85DQ^#7xA=JXD4{qQB8{MqM8Y8jX(3ERFo9%7768FeDse1LNC;kx3UC5qMnE`G z7(_A-z?1?<7Gpyk*?9sd6ze0YO>ArlXCB(*yWhIPaQ7jKt2bC2?NPZv=>wgNFze}~ zu)TBPQZRy zA<_pr^8_6Az!6F%bw-Rw{NC?=nLqRAewESAjQiHY&MyD%U;mHz7r*(pxqjsu%ly+_=PQCTsWo#x4pKEthR-{AEh-{LR)@~@Fqu-qfQLY*Pb zG1-`~TpkjnLv+Zba!9|R7*|LxkYMx&w{cdYIC5+-F??FGF{^3%o}JAdpu#YOgpt7% z!~n$r42(=p9ryR{;YGmhHy`9mh7M=9$HWQdsHM+4N1_2CUlZwP{kA!-Z;!p6oXRi*s+&TX6uIHTMgaO?Jh z-AiM#2#Sy}3=jjd(e;WSdTJ3wU}GFO94KvaD3E~GU@1Zilm@*R4xu+A0RdsrW|nPc zcUm$QLr@IC0i`%fARr_R5Ii7afZ$A+RTUaaiYhbOQqEj@g8AWHp8MPvu=rWlTJi^9 z`5msl@`s>9VqURW>}~S_INqlhUVM=kUVQPV?=KeMl;8p)4n*j?786j(3`P}QuWU>= ziDq;vl)%<>z+_`aT@Kit&ZtLYG7E0L@h2?r&G7?|+KQ%GbMO9r=BpvU@YnwaXD{zU z+$Sy%nS=vA`uGmrd`>6|B0U7dmmbrIW(5k0(i3AslQA7`u)Vd(uny$TI6RJYog9cB)0M3xbb1y(>tNCIpf^QI&t6jAnP-*>48e)u5j;XLK?Ix# zK?D%IIRpWO0%6MuAqcx?3dWONs%pY&xnz9$6x+L(X$~6(WzAri300;TRD2MQ_i3?Q zvRE!Z+et!#;!DL@MpO|Wz#N4O4C|VtP!4D0zJ=UF?l`l3j*ma{5q|0uk24rTs4|ZG zy!P#Hvb{az`@i=^zWR^3ndmj*&1>q4E>a%3?w4mx}mB9quG!$lxR}SS}s2{;PjxOUu2d?naXW* z?xAOR{No?T)tPIre4Fm5;l|aM`PvtMgKz!IFQd_eW-PC1`#ELlD5M};#`_f;6R2IF z5Kpt-C#5-QeMIgf$=4+BSu7Wj6DhA542-(uT_OO&y97Wm1Pl}~GY;?XfhJ57SVk?Q zmdL56@D*iM^1uThM)hc$V1`4%6$k}go6xM7WeyJZ$yqTo)C|)EDqvv3dkoA3v!3Ta z`aJ!?KAXPeo$tR!YLvlr!qHMu<2?o#7+^pK3}pn=X3VpqKtLF7IHubk3*ZdA0Rn3T zML3a6K?D#Afs5NUQowhwtypA-00@WyVi@260R%w60V09`UW8hVQ!`;>d&0Vjgra9W z+vM#lFQEM#u?Djxk6hYeXLrH}5qO`Dj#_|UNIImbM&Kb?M?DzQcNtJb996vu7J2C0 zE={{&wOTS6PdI;mi`h<1PLa1>zrn%XS9#&<|AyM1V&mKe>hXw&9{UJ{3UVgtg8hBa z%^AP+>wk-X@*Dp(ecN&2+$K$moO|dLso3FYe~;A9(UeeyQMpM_C2Py}bc>yxO-^l2 z==#iHwn;I#g_n-9gtMoF+^ktOHRI8YbB{dA#it&}xnsWhufE9DAHT(=r+h_-MYmz(dQLepw9`-!muuwOl!JTq|uJshX=G>Vm#hry%xIIFx?2$ zqk>aALm(kIKmkR>FbohdFcSnY6^;&%0OMWe0L8=*XF$ez#{&<17-cItKJIanNwNk8 zIDuplC|E9!>EoO_)QD6d1t6Fxf`AzUV1gv$BhNp@mw$IkoolXq^E;gV_(v&g;qFnQ zkI)x}VmJiMFcnH~)WMNOIRFah=sIN;GlPL=TszincDJcO6*q5b~cEbXx3{EEOB()Q_drU zjWM>rqO5A1)x$BrHXm`2lskfsuhB zP$B}Vh9hGl2m+EB4Td~^@oAdtclp8hUgBr&ACY!8**G=jXuoA}rotJRfFKM#jJ;!# zj8-9c#{E?$c!w_nxfPCl=4>745qdKkl){Wk9E#8gWHSUq0R_B+jcGt7a?}Ygym*5r zFU|PKr7@#mI1@}jFhKaf6B7!Qvhsv7aQn^yue|y;*mXRKq)WUj(FA*`XYaV>gK)eL zue@@FS6;dDm-h~v5*$*3Nr_Tp=E*n=M^SG;s2COjmwUVfx;_zH&9Kd`KjpZgS)4r4`(_c^-zI`^)<$Xl;`owu%hlcT-s^s6OrzxiFh@}+-57c&Q|23)3y zYld_fj!1eA=7c7 z_K_4@R=LNl#EWBdTvLRCOBc>yyhlU;!Av+|mN83U8MR2$&S~2gs4#OF5j6z^lSob- zDfT?@z=zT9=}oqFCZy;n+yDV$j2I5XFcSOwcQH+X02w5L34&mNnPQeP5}J<4siC%x zcD3e5zyDQIlh`=7&6QVfV;M9XUSVRe>5O$ulp+X1GGR0fgbLP+o_3{l2n*oQ6cfWl zh~j850zxps;pqEB9}|Kh7|CEf88F>|$DZG1Z!LV~TX*^9kM7YMU|YOQa;KD5O^Pg3jjaY=Zp(NRTg+(A_gJ}vcpWVqQH-5 zc-HuGjI)xSdsti{g%U;{RV7m62^bkLgv9kL-{jk0{kJ^(na_hA^YRNnVzT)-fA*LD z5`X-)f5W|-hdlbk)0~=~;^x(T%!KXfgzg~XMR4A*Zbi-$3M(l~$6~Q$P2%d|b!0e1 z!hn1CmpGjuIn#DV6CLGn6H(9dc%N5)@B&YL;wKr59AX02a=7;f-74bhn%&)9rsDx` zA9r+XWxeWIH-`jY;|2qKN(^hEDteOj6rn(Jhq-`DhPOm*iOI$`u8xdG17L+&KmbfJ zF)+aZp}@$PDf5E`IcJ;+sA3pqh9EdRjTjOf4?OT;$u)ffz4Vd z&B*5H`<~Oof`bULH$)6yI|j3oiIW0yBMvpGZn!7$#_tI_t#{aZJ1e!;oRXW6^A z$7jFrSIF@!U;F3(1F)pGmZ;5~4-j#VtJ&Xwo4td5w(ry&&Rcv4M9VlYXck0E&7$Wg`F(^I1L938Dm zeP$X4_&(v%0?(4!bcdsZW9Ca^9BQ`51>>PHbct79{9~T|%ui4aD?}VO-gt>CfAELM zaErlsN?8whn(^ik7w0&a zLBT{Z05OachFF2op(M;A?fM8I0s(P`YQ!vHYFGxc!;yvCx7KX zCbdS9jKRo*LBzN_k2vqSvCb@(f+jFEYJ)HkLhZ30RD}h`2q*PBeAmbfmgscTei#6%c zc2mIiT*ZA4~X=YoyG>Znhh>BuFoIuwYv1X1*568cKx59ECaB7BmU(GNFsS#|-C%*k!6g0F)9( zAs|2oIt9tFI*u5DzJqd5v1$zG5~C_G@s1|-RH0;dB231@!xvBC%+Z^&R`|h`PB12!SbMEFdFee1pbu%^}qf) zz~}Z3d&x4S@D<`6h4(lUkbpV}MNKLum=xp~$m+2y#3ZazX4M{YYU?bAd#`c({t=cV zt|+jqoN#W+pa12*i6AVFZgS;2zfTBT)FThtbNBWQ+CGt_r)f%xogp`GA8~jrh-I8B zK*y}t4MBu?zeajRTurMEI!8~(Bj-0cKOS-G_BHx=n?AueUi?0%CnaSOm`pAaGMpL@ zc=dbVpx~Tn@|=N zO@gM+(>}U;eobgFdDMX72o>KHBxGL=81EB5P?6X?|=U#fb$In zB8Crwm`8DBlpuy?gK~^iU=rEd8PKg7#1fK?wv8MdEEsRh*w~t4Z|u{x9mBdr1e}42 zQ4ePv-Ft&;KYSUN1*9e6X<|pOkxXEnBGCutF|k<8X;pBP#N`r8j+_!rig+`G5-9@% zKcbxOvMP*s_KtaUXNwDG&hh3uZ!q6qFh5$+9V&(1!xa@zK7I!0do~9p*Is&o$DjKQ z^=!h0M<2t9l5;{+M>C&O4+gZW`>eYa>lk_E$>jc+28fN@7elvH@!hG(6%%PBeFOuFjYx3BLjpK&WwV@C7Db{ zhZ*r7sYzwV3N;!h3Tnp0n1B@oWKmRP?}nyndZp>^v-Nq;Iq&+s&wk(cwfs_tmNJt} zY18B{>U=))N#xk(9b6$K5CsyDQ01Ex0c`=15Ijxe5e&)|5m2ts6i}dU5;iNi>ZLz&$s#ygZF+{*21P%{&Svz_?0tf~)fhgZ3fP!LhbRc;)Ha6J4?<j%`&=cIiopD$BJtknp$Zp#R`O|v|0iR(t_ZGF^W@Y099}T zJ}Op(CPGy?>N=2TmTHl}7<{yh=gRVOhq+I>48e9O+Uux=z5QM4CK6+Xj~)S(fGI7;G(bg66_OXY&KkC}%Iftm z;4mqtFP@{jyvFMC_2gL_b%ul4kkdN{Jb8YL$DTODbl#Anr&lB%fB1fy*%VSkiVcuh z%!gdQc!~YpF;G&?XGp54Lxar&{iPh=RLtfcZylNoL`Z&0DbOq``u#ql0n`B&!2*Ja z0D>SOiIfua$&3^dBnt>vD4+yV5=dY$)Qg&{uKI2yrl$54DOSwK=Me%)14sf5C?1uX z>2!)11r<~U5dj4yfhHgz8b~@tz-*ilK&{XuMT`(VSOTR1FHk8gfW$Krf*3E8pZ@A9?S4t_ zEM?w7QUlCMso^`}_%?jz)1TpczW;k$pZMd?yfmniSwSSCY7v2y5-~J|R?xO!h9ZJ)Lm&(Wh9s>m=2|Wk#2`=pS1}lcHwE!S;Ece(W32WEfLW zhnoHULwx1IBx1}-B9yH*lkI)xbw!zHBo(Aka;Y#`PN5yzN1(t{`5fA7q;^iICpdEx z%g1kF^w{V5@>jmZT5rJmN*C2N_V+Haf3S8LeUkPfo6h$>e~wrA=Jwu}FO~*CNb^wDX2enJA3n>;lCCf~cS< zDh5Rn6jZoEBr-nSM>IoCjVho5C?Fsn!P3+XF$J!=>bsNDYPXmzJcHceeL$>|B4}!3 zL_xYtCUcSxn9PIZs0t#2U_b=~AOVVM!;LpwM>tH3cXyfB6-gY^{fjhH$FKeJFYt@M z_M1%GCx~isBBUsQ;w;3*kWyr+6FI(;@%VnE(=#Lt2}MOIR1koqEVWCv4?R&6Bq60l zQgFE^G!~nckd)oa2{D0IJ40y5G9k0VXdXzC5D%aK^BunQsZY|>TUaV=?nreTm*vbg zk}$N&L{(KZDApKaYWPk#z6~qw4#11{_a=yda|TR?qM!*x2r*%^0XDZZBq|S;HpFHh zV+V{!4NWr47x3^?7iqO3>l@2#pMRKWJiV1AX7hcvFFcJ+89@_^YQg@&E>a6o3T8>j zT#xyp;b3b>tPCa<_{yVJ$+{(3-eJi_x*cWES*BZ9swyM&ui?Ul9qLrGfBK8GmX}Gc z&2+xtSZ=xQ#C2p+lA4^I!^gRJFr?NwMssRyxbgZ;Osp_z&X@o4k0{GN1|h_X! z%<36+3Md{Vr^xyw0>@5V!`Uac@rA|DrxdAT(016Y&1$~@48j#PDh3dqVSogppc%@H z@pK1cBd9@1fP#8ZL!u$7VeS)Qs=zHbyFTo_vyj{q{HVrgy%F&dIxo zg(c4vj35e9Bw8h`bS+=ss_>@7Rf*V9j0lR50Uo7ogj`@S$Qe!(n!q`wZW4KxAqM6P zC3wXdi!qkNy-1chR3la*u5e6e%0u^_=AMs!f@*Ra1XMFZSYR@6)>4omS&PMVjLS>N z7FfxUnDd=*d>fv6@+p8tSx$3I#M%HyXoCMmvF2M)HSe&uMR3pxi@CX4!I5@n-vEC|(1+4*# zigHEL1X_TAXhYFTEG;jwF%LYw{{-FsCZpMy=xbtt-L1>~+AsV=UiXjxTkd$}8>nfa z4dfQeLfG5!RP!7$B}pJOLIM&AiNawMF`2=M;6q}O48{qfpb=0(lSN}BFDwQyKvgLw zvsATWj4-b){vdMtk+XdMlOJO5;)8^=i`4|F!utx9gnGfcWf~vJTWxaNriqc+;h0{3 z@Cv>Ij&H;E#chB)yySpITtXy)W+;YdC`Jqta&nh56=ipOiywIDE2-}P3RTml)oURK zaB=sL$4bXdW|daqC~^nZQM9@=jb}6&aX6d%P(MJ73wDe=kC>-1<+L)AnsUfw4Z z8x)e0QiJ*tD}w<(ELb~w0uc~3fI$%uAz=`WKtf3f5sk`hG6y`603iX2C8|e^l8In+ zj+FsdUG?2a1TrH`4-e_*IR;De7BNDo8$f{!YlZo2ijokWqgVvtn?wPN5J`Y&BBqMv z&2_ehVEubm^KUC-0+d#`nOy?i1~uF)8SvqFlF$y_O02BV4O zluRHXiH~!VC|g?>8T6JJ?QJ7Xn^w`GEDENJii^8} z+jRcs zyEL^WnGIUSDyL4~%n$wWOZedb`98+OeKuBBF{UB*mCP0vE~3H9jq2)rY34+IvR0sIK{dFy;3l)q)G)*J%^(MYVWam&a_s1 zE+h$98k8aZtY3c*&s=@Ffj*AT0On1=3=f_hO?SAkaB&|WH-jUvW4VuZ8b zIOKsZe1+l81e@XW)b74qXLO; z0h>#P+pg(w@<>f9cQ_~X3&*LGCwRrHet?rV+{DlQ^Z$;`BPII>V@&j{^*l$``*d7~ zv?K_n2uf|tMirCfE@ccm=SUt8gDSV6MHCXrN81F8nq1S!!p zfvOo3(hNmVKoAsA1jT?_L=CEfhKA?gdJBuuh{6GJhL?s^ltfqXf|vgY>o@-Zvw08S z6r6eFQQq@U-pWV+-Mbi_e;A1iQb^=kVEL$H_aG7Gf@&flw9AZ6X&H14Md7Ga84N6> zNDPVAQbCePo|m*bIj(dxUdfzeKJh&H=nnVYb1w%6=UL1qT)w!4F@dHI)E-84z$8m% zO3Ky%X9ep#OUosqpiap%LrRh0mG6Y%S(@%$WV(0pl{-5lM3lVkP-ls1Xd+-ODS?n< zOov4@)Qdoo=OknvsaV2<03l<0d!Gj%dXR3r%hKu*P8>Ui z3pK;ZnERhN&1W8ZlKanYb9z_V9ttVzlZrJ|I@B>RZ5p~OYiO2nac6?K7GfJxn&Ibr zxJK!>JCrU*5(t9P8leUas76#3)FA3W9hx#G<2gohgbFkg)T1~Q2Ut`EMQIvE)o|5S z-;MITU^p2QLIjNv6PgsFq8d?E6tLE^m@f#v2CWc4RZtZaP*IeC5>OOUVs&GQqU^J> zzDAuu%`#RxH1io3p8Oi+@-o-I^fiQhjrn54WOB%d-}gKG>$ks=kN(?tvHkF;(PqLE zUz;=EGlWL5Vu?TqO4LL$3Mg#@qy0G=p{gRWhPW_9jkp4$fysgLjfb}R(qDd!uiX1N zs%lEN*Q1pS^}!Yr=j8n^WoLy!dl{7ylXZzckxNFmmCNAFm~2BkqwjTl1$5CIYx#blAFH7P;XZBu!VimsH;qu;;CoeQ?k1~8#QuK4i^AVK<7V2qi#<&jDz9B}XU$nUHH@|U7+11%a?~V*#ZJ*8U|Y_4C+>tFqYbjyGV%4j^}((ah8{Rv4*Y}R4X1O&^p z@?@@{)#*@+Vdro`h+t4i6~3BLc3Ld0uF+|AFho=$Ni8eC5wBao?xE%2&VgFeXcM1_PQ#xOn~vCgaoOb`E}whAA7zk5FrdwEN7x#kdab zu4BDd&}rvLQ4wN7q$CB0U({WV={V1k<5{|}wGD8>s{!N4Tpvgv22sI?!Fx|u8lr)A zr)1~!8Jsa>ML~5a{Lx4Ln7i)0jafCPnMGnza`W}qvbR5{X&iY`(CV}?2x2T*Droge zVsh;6E?6{kf>*?3Tz_(tB3sbyPC2zYK&Y{<1+Jvq>GJ#+-$j;<`NkJN$(^r!God=b z=Z;GkJtvMI;jKUS&-lal{ZCxF_%usLEGIT0D>gZO`U2xo#i{F0v9OJ~p_ zH#wd58n>UihKM1Uf<|ks%gFOKsZxR_+Wi5oP?H(Q;i%#KnJGwtF&$!~q^f3i;90+R z6R`ywYpbYwk_HSGuqXuxI$GC5&r+6s)z_zs4CwgB3z-WTp=P{^*5{QhNA3IRdYg^;V2P>lp@CDkSrn| z!QdPm9uDa(Jr7VIfPkuiD1x90poj!WQ`R?^IJZ4OYY%w~tYS3M3=g>Q(5G2HaSI2N zK$*3ud>7IT?<0`~b>%tt&_kSk>~Ze@vybwzV@Fv%ejV+#4OUi;aCEgp(YD<6(&tl6 zB8S5Un-}=SjLSPaC>iHYA9C@+c?O+LVtW}n>s;Ku!1Q1nriaAlBD2JaUvEoB^CZ?V)W*qJIJSfW*sgh`5zFq_vrSB_^XD|3KX1uQ1BAOL~_ zQ4$d_E+eU>u`Q~oRLqH1FlCFZ)#3c^A$LlPyl9bU3l<@eQbw=aLu?yWK{2%Q7C|er zPL7+km{m2XMVm;wDCqWDbX$>37c3VEN0&+E>6Su&{RB5W|AmxGkte_S=QN9k?waAr z2S3Ns#*M6>%(=Y1&Bodh-tbfJ;NSnouP`~>VR>Z@w^T7dy3EB36Bt*l^;W6co`dO( z%Ln@$SzF`Di(4Guyn$*lVHP7=SzOkl$l6HZNO6Y6(pfr6?i^behYTyBaRV?)(h6oH zBwS{5;{_Nh`u!Flpaq~PR|ueh0!q>vNN7sTr!^`b5R@sZ5kWBGNE%U%SPT-C%owhE zc4CYeV@N3>B7_id&LJXv%O8H={hUAj1h0D4tNHa`|8?H>_P6o$g$w-HkH3L?zjzNH z|HLOae*8E;`BQJ_n>2!0u27A{s90-JRa6yY3|FL-5D~6WRYZiV{$|z*UZM7is*q4L z309OCD?|ii6fq8BL`Q-P5g z)8UZm>|UUY!2kyG4ln+yNn#C3!YN`mqx2eVf zDKbEj%(AxBW2qNOX~JmHK+I@6$9%B>92iH?nltB~;<<7>3-|x!rvS>Ic*{>`QF3xC zKtQzs42>q#C>ctIVz8K`lx4=jK}9e^%=(~?`yP6XTb{Q@w!FX(N5o{YSxGamXtfGv z^@5NKSW6WunrIo1#zdcyXB}>T(M{}MIz!KTVl!hl7KWp3x`Sm-oIJ{nciu&rRh)n1 zi+uGnpCv0d`P_&81mlGMu`$a>j)GXWcMdpuY?HUX|=cD)1T$U$&+kuZZaN^`O`o7IKTIMzsFnO`d04zp6@|`mDP2egOm~? zf-!~|BUgwBs){j&tDc=jHDiA=Vmxn?Qou+KnurmMBrt-i1yw{6v)P0c8^p9g4c{aQ zR8SNVzDW^cY`E^^IuDmh2n)nbscK87wMhsWwq;3SK~dCH^BIPQB3oi_?=rn3H*xI? z-p+hnG2Y%~=lqwL9v(0oACl4zi|{m7J<`ds*Dg`bW^`6JseMjWc?zw#v~`wFcfjSR zpTvq~xP69Z_bJ3SSSwg*(CLI}vjFKbnu4<{SSz%O5+4_2t$>#X$x5sU9kqB0Tp?f^ zFyKiP-7e3S<5~FN|M9;9oLbE54b_M>U5vBbjDM=Gh-~!M@WHCWa z!Pe7>Zjn>w8JV;&ElX9^v;;bZW6*80P={E{qE@EU0F9;J>2m7&>+y>NTw0)hNVS-w z*3nPQrN042bIx!mWqbX1bTz_nn$zsNIHX}1i*=o^g^~kc4IwS_G z17Z}c7(^gN<-+;PEHvQ_h~|hiAPdIRJvMtST+tB1nA}BFJ)(|8Ld2j%Q2vSmGLXn( zF+&VMM2QFqFnp6HNFGQiip>ndRnLa1a)mJl?>$+Tam63}!5{Fz0}t@w4}X~VzyJNb z@s0n0>fOJ>k&UDL{6G0`ICJJKKl=B7oMXq1p};LS-^>R-@Bxk;JH~7_<3k_%5WnUsR#*Z%@5M+a!_IsfoFKiFlXr`&YoDb753mZ}Nt zpLv{EkFkRmxIlloN1i(l_qUNW!&gIcr;HaByOTgBI7S}jMcGa`n1Jf$AZ z*f?^O!Ab}3r)a3?w{t>sfEGE+?R9Rw?Pc6@*RAB;3`sSu!BPJ6pZXO{)**!k)r3Yv zz|)K`@#i0WKX<{w{Y>oC5~?%|Ui;eD z((CnzF=C8CL=X|K`rFN?Q;Nb6Q$WN3f}#i+kWld$v4{l}LZf(}uugeK0t|ux0vI5H zDk;{iudSlCLs@oN%nxarA;v@syM#+6c_D}y&>9@aS>g5<-pW@#{m0Dq_Nmg>X!llW zFRgR_k!!g2w!1lc^Y^iI{mt}_KM$J{%Wa|O95=1pz-)ia@afZ(PPlyjQP!v!XA8!c zMmS?R*xRBkTa+$mTJ7Q~Ng|{=VrW=C(xK8sRgEY+CAlk^)t-KDnYu|Jp0eL!d>F~v zC9Mpy{fsbE?)m&Z2RuiPXW`6K=Kzk^K~S56t$_$cM8V-uKv9|yz$K>RDXW7PhX)n2 z$rMsRP*U>jT$->pSYgJTr9p?}5AgngJTF^0a7v4hFvY?Pu0gJV5QmpZDL59VfKsCLLujjn@`(DoHKlTBxz3!c; z8MC+Vxb>#z@tW7ahQIju7s#xmJ197&*Ra2L5$_FFJsO2xcNvRgK3}l2cfd8*TuX{$ z#3nkXLmh?v;gF|ycCfaMMkV5Lu|mU`+#DlowOQ$}l4X`w+ac1R8WD-8g5VGY={1%;Sck% zk9~roEP3UtUWE@HBL-s(iV{P>IY&&9H@xA;84Q;A;upWjt6%eX(HJ|oV?}~!{Ly3yyG1dMZx1=|2nUG-RtT0x|}$1g0kJhs380m;TftR!c~7QcNvL< z_YowLG-A{t5=j_@jHE(FPK<%5HK87(2D9;c;0Ra?MK@)V^1!dvb94s@R&#*Sf zk_gQnowi|G?bAJel3QQ#6P$hE%RF$;C#dF^h;~6?9dVX1^$V_DT4VUgy`28SpMfY% zRgo7Z8~p(vD90q_7y3@VlrbsnIRYq6}in=>TNJs>QeMtsEI%V6c9WSD~8NwJn;EH zDK3@xdc+f_r&LjqJkZHH>;Ln6`Qg|6AjhuRATKfu79nAs5VfJ(ZSnS>{u#a{ zDH!XR&1Ss$&2Ofz8-C_z{wrSp`qy)Xi11s#^;>-Qv!CT%zx>PmZ@>M!eEG}w(dl$( zh-g%d3RqB$kOI~?z;e}JbJma*EqpV_SxXFx2%v%(5FDb05NfPxA*$5#37vid3?Mv1 z5w3_Jil`tM#CiIyoZD``f%BK2MjfP(uz6x<_#`H?%!W^K&ma8{RHJP~MwmjO5vmxm zGUdjb?_#unncYiIlVy zYpl)4Yh`tFgUj2Oi0Y}erjb)?o4$wi4Q9LbajW zQBZ@3V`WgjdUrAWD$jxAS-8Bt4RE5S!C6NPigkjh0fmSnC?JS2XzoZTxyw0r@(8m_ z%5>a9(<7+NDBBTZ13UAYZoSGN?{MP8I-~tL(%L49017G?6;u*vWc^5wkN@xgju+f5$>&F^4-(G54N!CnKd9_4pF2%RORBRP!l8Gs^BVMkkC%GfWnd+~H%S=oCyE<^0|* zwScibR3fPkh!6PL5YduabJ}e~<|@c@2FnGi0vJF+6i`qB0W_f~N&tmwF(*ktNuUZJY5)NQ5|p_^NnG_GQdNQ`GGj4G5fxAc=h!-Tj-P$oPxIPW{UCN8`JMOvDu4L< z|DON!hhM>Xd(6_xI<#t>Ex1B(ga{%aD2RY6k;E16eCIp4;>?*dOePb0y&k7do#ND~ zQ@reDFXK&bdLvIf`2@fG-@lvhdC{G`c@eoWy(hRi* zQNTJRvjp!6%~KcxAtVS96p|#w1`hW}cn_^k2a^K*tc{h(v^pdu;p~%-vb1uNYBXUw z+#<7)XCh3>Z-i1)>=$6-F{rOdyG5 z3<;skd)P3?k1udI+9vBq+A*VP1{A$@k}*i~i1evapRVNO?H+M7BzRAf3}-DdC5p_F zIxU(M(d0msvzK}7*_F3CFhAjn?%ElAR-E=W3iY68K58vSX2`#iKI13Kyj!Vs>Pg?5?B4dh>%3kq=*WnNRouXuzTrg zUj0L_q<4Ic&wTbC{?X6AliTmSgPr+;w)41gpzD^glA|hE1IF@Kge#Ip42Djp!`*k^ z%@udweK#QlzC~4uG4ik8{cb+_=bxmumdAFtx%G!$&7GUaaVg=V1qH7OagMA0LyBNb zfgq%iP}5+nV92;4>J$+{lOc14RA)@aHCKozpr`_pKrMpsO`<3s4O6bW`35fSY~eJg z!eD^pN{of9w?cJz2*xAMBI0p4D(?Y9UgUK88F{{f4-scd!aQNdyQp*+&-M{l)9EjB zFsv#2N14@uBWovk^7NQ9=gv{KJLFl1OcKTkolYBRITm$8YG!1q=GgT&u{GQ!`Gyn= zP@%{wERjrBNg)F#*eoN=16^A%)`DDeR0^sXd9ECPi_=d%0dRdCv_us#g3^$ZB5G(t zz}gJ37)`7#^^iQF8VS{eus9$qDtt#N@(x#|7>EYS!3uL#7SV9}+y#0|eY#nRucwqn zhuLCGtJ4J{;uYgEM&l`yd0>0240=j#JuK#ox6jc;&(=2{L?y%J23tDBB@n@?(qF%Z zYBJ;gzx-32)XYXTRh<}3CivLUDtnaOl1mp4kt}2GCuI2&-g`Qob&SctL0J@70~#7m z9X-K?%e$PtFs2qmt_9V6AB{D>5~>ghp&`pQ5W7SnLQZ7R>!BgCy0VVw9PlU#VgUgR zss4aPdz_G)w8H)lx5D|{ucXtWA1#> zODJ1C{-07xq?EAMqN>CgvDVURwR!JvzYpge4?X-S@B7Gy_^EgO3;y1J_M`k4FMka; z^g9qBvx$TP!c~7Qr5fvm$#{;l6+RiDAR&lmh$SAE#|_vhaGZNK`| zc}COJKmsHogy|h?7985zU=h}e!60K|8{)FC#AI0)@RAJ}ymD}e?GUhclLf@ahC?+1 zAsevhMRiaaO`oU#>bKo{KYIq9ocQe7m5=o&^Lm*iCk-jSu0T9u6qj_!I}7YNcsX9W zbn_uQ>ti_kLpC=~k=X>H;Ov>R)DiN`~x96fu6#pPw{?HvY712#9dh&T${r7Bzcc}gPC;%I|sUT-5^rDBGXVyJke9RGl? z+&gub@ zYygt8F`YB)XUuk{WHM&Y(gK1(aO7Es*=UTjeZ)rQRZXRRPHfjK^h@&85jBN2U~L2& z5UIf{&8`sJK;6s<1kjAkEzs**#3-#QWmOTIoWw+I+i?2W2{tBR@bk->CCO4A+#InvZSb8gG$mUnjx*U_N5rGSk|aZHzKG;~j0B9%Xvdp$vQ=P8 zl0{IpPAA}Tm5v|cgdINzy8L<|a`pn!;i zDkO#z^C>so_BB5D?M>#VZsC@D-pTX!&G@I6!>_(zmG}PnI;{8v74i z%!v~ZaO~s}21CQ+ufCjKcZmZB4)Tt7{5G$;?)CiS;lt!b&hqjS#u$t-s45`@oO6T_ z5D~0RsoOdK?tl9Oj-J|}2@T)+!99F)bC*|Mbv6I&30Gr?7!<{Dj;MkNsvyF7D}Y&{}iBp|KFR}-3YOxw&!I(@3DMyP3LyExZEB2+%G zXE3C#Mrho|2EoOKG<8hM3fh_^H`Ko6?9LpTDQVtkUbo~~4klqdtq_^9yWKJyou+Op zXftfvlB5O2(h^}_5_|B(CsHh3f)|9~VBfNRUPLZyQ-f+(m) zR232MVTLmWVho9`Fk)zZO1ra5y>pthzXqKQlQg6;$JxCkNsh}sQRWy7qgv>63T&7W zHKh)Q-eAb));4LLA*vWjNz;swM7F9K_nesF%bW`qJ)Oj05=Cr+s==8QB@o(@x@>4Q z#fTEp89pl5NLxoDN<+nbqLkH)Hbh!6SUiPxspc(N*2iW-*3FpBE0$OGFr9BOYXX~N zL#YK#XrYeGcXqHgA*zKiqHaBzxsbfKm(ZSOHaaiKcWe(H`EBxaGq0QtPzvrBUmE@z{CKi;X7vnZ@c+s z*6;Zm*N^|4|Lz568P<@vlu8ueZ1BrJ*CXo~KJv*ezP5gh>kWppcmk zH~z;DaNBpj&8^?~7FRv}Fdw?(4&L$ATeF}243lo7s+>LfLqap5SmUIyAIZMLVu( z>V{}qT9eT04cI+fqfDqLB@4r4oJ;VkbhH^kSkQuH~(2QV(s6yJ!Xi4xg zp+^5>ppIL=~p>jJolZ^A;Z!k3-2wvIVT^($w1^8C4K^X^(k1B8G-K%vm2#seDRI z4bm7~n-avJC!hd;k0S@Lfmvby2(*>bv@N0akXWpOxD-K%F(Q%?RX`(RB6T^(Bz=SgK|ur|0d+tGQ63Ul=w}R9 zh8(I6a(eq-H0dxISHuW;;#j?KKdpAaw8-LK%JB}f>e@j@<1tw}q?)xD zTVjdCy25B6F*!z3s@Vii8Y zF6}c|-bXfA!MhII6T_sOkz^^|PKW7a3@xmzu5d}Y!9A0s%<3s;H(Em7uy>`yPz0Bh zBr#(;-9k)G2y>d?h*62L1v4eJ0-7VnqQMYFsC__8ic5Q>X^%89SZP_^v&Os$B+eiN znh0l3?o!4fDiPxY8m82BOBhW+QwSB-Ewi|GHNM>fJE95^XP2oOORqb`d(WVs0Sc;s z@c%_s0YzzP+BpwVR6!M#5;TB1AV)L>EfEx=f<(?|3itqtRbpFVk`9XS-mm-}|M|AN zICRN=p8mks`PpkWsON%94Kd7k(i1Jo;+)(jbb_UsCVcYi8{D(gqcfNjwF|PBkACt# ze%9^himNW3m9(<;1u^(cecKGqmkc z+raK@o20wI&dyQx9z4YM);jg9#CllhFHzQWL~EY;l;`t}@83b{EW>`EQ}qtmlvV=^ zMF$+Dy#kYDjAt{5mS!fz;D|)#btDAE=#-`&14 zAjXJlM8t4TjGmaZls=I80A)a1#icFM1_Vb`gHedH3S}LzD3&M&n`GFeOFbR4Gug&p zaEM~*ViMaWmxN;{=JbjY{eD71WOw5f)(MwfdVpgO9AiFj+1#zz9qm%2DOQ9*C#RD~ zOd>dOSQoKQiEWAZ2|)|$wxWrFX&GsPBTEM?3

f@H!#U0 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 WV7la{1I|AH0000X@BRFXcaBMB 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%0A8L4PzBI=05+dF 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 RRxbbm002ovPDHLkV1f+6jN1SJ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/ZXSpectrumKeyboards.png b/BizHawk.Client.EmuHawk/config/ControllerImages/ZXSpectrumKeyboards.png index 1af85ebea9d43492a61e560046e2a74126a54225..6dbf1387000a15332753515b03cbfb8361168ea7 100644 GIT binary patch literal 178527 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

BshY9rr)fbgD7HYnxEc(khJ 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

ChMrh;k96x~J4C;&eVCv{U*5(cek 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 z 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

xWRU<^d;K;GOOgYoA=<~ba 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 diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/psx_dualshock.png b/BizHawk.Client.EmuHawk/config/ControllerImages/psx_dualshock.png index 3ca47a305ac6a9bf196cffece924ded90610691b..2fe9d86ad4d3c8923237a8c655c36f46fefe9c57 100644 GIT binary patch literal 71123 zcmV(!LFK-QP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00009a7bBm001r`001r`0jlEN zk^lez1ZP1_K>z@;j|==^1pomRNl8RORCwC#y$O&US9%`!zs$P2`b6WtkH&ppBtVcj zNP^^$bA>LqwH{gFkS&G74tq6rtYWpRP&g!cEqkQhSlO$P92;SUq_x^3o3>`C;S4!E z01_7ukRSo#zVD+O=)2C``2LqK^X1Ez)s2HdH&~BRM0ZtnR%Pb@zyJFF?-x{GiR-DS zp2`U!+S}UNX6Ezx1q}@i9qDv>hT}NRcnBfz$Ptmi@Awyg=Xu_s=Xr%{wc77_-jL^c zedTibYN=GZIy^jlslUJf`0d-bFA-7C{{8!_^($Rp^>uG+)22-h5lw)OHZ?UZ&gF75 z)9LiIR4O&i*UtvWahik>Ss_H;|1+;zt@cS(^@gFJ_#KZ@sdRa0Xz0}7;NWTKsONdz zd-v`gu3u^U67@?!v|_~ykZnM`IH1dxa_l}g1a zm&>ABtx}~@f%L^5SdQb65P~208IM#d<+-klpQ|t~<#PFEp-?ziC=@;#930%=+uQqj zPfyRe{{H@f!-o&ojY@shS6ok>rlzLG2@@vFg`Vc~`Aykuc0)FsotsLfCc#Klt5pZO zsq_>NrJMMfH$7iB^@p#UN>A~|A{@YCv3RvuES@M73P*;9hCYR!c6WDQ92^{ko_ciy z@)cg2H*ap7GG)q^_V)J9#>U1c(&_YUL=xq4IaMqcX?S>;@NcP9f8Y8 z6lJqn%H?v@(9nS2D@4>^DwQCZANTe3z24K)v-i%OI~P9q;Dd5~>!`1<>U!ddCsM7g zt+OXgnDA6{bMx2o`TY8HIz5Ysn#$#}J2W)JdRizH9=MLC(`m|NGOVZgHl}e>yaBz?yj4&7w#Cs9I zd%6L>_X7ciF==dU#LpE(DBa!NuU)!y>HoZT?b?wqzWAaZmDJZ)W-VK`%$YiM>hhU0 zXa0J7d;8ZBVHAr+cVJ*3&{LHKcvyN0qoVXQpU*>YhkAQ^51c!9?zi85`|Wq@2IMQU z7A#n>V$-HgKW%JmoZ8#l%N~p=h{PWNMpM`1WdV=#2R)leQ)I|KQ4%D_1XHzWiV7 z+e>{t?rY-2iQk6I4-E}v`}+D=M{Ucmb@&;BDhUzP8~KsXH*l(0K63mo^cXr@smS^W zbY4FW^t4}Z9Yd<$IFz}TsxPRpgNG_M#;JWVf zH*elxA%Q@_+iz@aqNb)MYHn_#hK4-la#=s`DGi1yjO&}d+VGWkqI*6tL=a90pA^gz zhux~SGB`LuP!1Rg2qFGP3BUR*2sR8!Hk-}1wzhtki2jC%O7$(Kz8>S1hO7?{4`-nl zDr!)U74%5y3UqYh#CB?HYvV`&X(bqm(9wf~<^&F&8Aa&Fj_PhTFe>;wCR8wLgj-me>w$80TIwp^rAPJ1eqeleX+e>b0R$WEU=ou*8g zLK7xTP<01#-IO0m$Pm>`Q-!~J5#g&Plu^Utv8N;jv`VFtj8GtqFeC`odwcu%cio^s zh?|?6H%y*9dHszWH}==}nEHBL7i1i=u7E4*U+4lHycsj5BSN9p)>i%<^#~XY<#gFn zTG8K$Q&sY5FY>(lJ=As2ni7LksB{;4d;9hs>gnmuZrr%x|MEQV56k7sPXPaY>#esQ zdz98=UjtdWa^=)aCjC!ZT3Y|!)TvYF&7M8mnKo@IHe@y$Djd~?&)ob?K~%5nMkc8y zqM(DJAQBr9T_~k@B|V-(VVFIfJ9m0H`WP7K=hq;(M~@!;-nnz<{+Ed4*H?W#M*Gp+ zxpV*RqD71TC3FFXVbY{YFe)^8@+6Kl6e7yZ1jwx{s<(P(Ag-fCroD;kt!EgN@YrDu z)C&v>q7xXBTeogjdwP1#7K_EdbY1s9y!z^Yzg9OO<8-ZBwF=(MUo2QKf7yZs3s@N8 zv8cL(i3LxJB<%mn_o1$Vg=5-`h%HPuy&7dyq7h1k(_M&0y1RP_^_uSPTl@0){4c)t z+TWh7?=|)HxUJQzSIrYb{O9S@r*ED&Z$8bQJ)0&>kVZqV6)JtT71T`#ulo7+?c0H_ zsR#uBB8q{bN{U31vI$AL44p+(a_iPDWE8$2qVN2t|MX`c*A2+H6UNnxTU%RyymsxH zc`zQxkE&=x3Ze**7d9iJ1Wflt%ybrBhoB%GHEGhsSnA6Rh1GNFnDNwBXh6b{xynXr zaBv7=GCuF@@NnU~LWuwI>Z`BTp}qAr?iU&a)9KW=+uA1l;i5$g=Pg{gh@%bECqrGO z7$QpPT4)sFQHRO`Ku@t?Fz_A}%Msnfcp!}({*AC25WDe^j-UDr{WYZCkdj6;Qms~B z`lCPk_s1W{d*?o;kw;@wQ`4WVT)A??;>C+O>d+$&DSVVDlR({eAuy<; zgzpoH$2E@~ei!q7N{|KDWgzJIjE07WHqWd6EM8o*X3d_@KKrb0MCxnYu9YiSrn1@W zZ_b=K^N%)e+&FQ`k|osI+QPt<(8;sukgjVKODUTR4j5iXu^qaUPN%pCj*TDAWmNBz z_1M(uB$zMu8^566R;g5$Y~H--)xCT7J$3+?$IgJPUcFjmGMVqrpFjT}EnBusM1?~n zKH{7G$N~dl1)>U(Lq6YVJ)Z5@$=^Z8r+Yz!q?7{>*~pZ4g`lUQ7Y7d>+*99%>TA5N z*|TSV7Y)5nJh3q|bLLEz?_}K+f%9eC(Dew!d|d)lDjXR=XYl}BS204=G6=N|7{xwY ze-A(~p6AW4R4V=3wrzX=z4zXGtnQ!lxCvxBonA6&(!_tUaAAkj*qGPSQOVi5sMn(2 z=Z$Cp!kjEcQeiejp?g#2F~XmPk7XAzJ}v!c316I;X=!QstzZB3Uw^W`4b|6pTpKrT zd~)j4slT;m&FTya<*MN}DYLE{54|Z+cd(SMN1yZfZvp331_ON|_+6>~Xd{dy=g+Lq z=naWYO-)X7bMwE*X0uBkw|n^58IXpChM$=^bJir}HEroAyI|^Xh~_~@@$%p(qcxtV!tu2j>jsNhsfBU!Vq?q+JuGZGA&xn?m=6|?wVMhy$ zM-)}%CF-YcB%;r$2*8UO8D)^5Te9a1k36Tz5QU7!(HqU{CNPI6Y#45AY@C$K<$k7a zK*sRevSmxAu`%B{Wy<6TvLZS1AS;`$Su_hnWQx6>WS~a&TpVk3As;p)5*iov{&YG+ z*=%OJwB-C}0cx+qUMd>?5>N4TanM|gm zTrSTgq7!ukG8RuJmD{6WFKJ^o;eIy3v_S#we?v@xqM&?gDLyT;sAmejf(iEulYB3rgR?WEJ0%~B}u z?zCz%MBDPQ$q>GHeZ++J#f6n3xzjlMO0R*0#dt?Q&XVta@83D~ZK=M-!`iuXC!D+` zxm-h{u7=3QWEic@X|wB{7{MVN>Gja5qgW40GCC`KJ@Q>P|Ir`)-;a&1K0YVni1utY zyR4xhHwuH{8I%WJEbI-1(N<)y1_gN22-$?)<{{N;ii!%Q<2MsJkwUu;TO^|S$O_cA zrurHux|&I+Q}Y3-9gVIk-OwSrrY`Hwomq4@>nrip)JW-Sk&wxV>n|D2$l;ukfZbx5 z5Td_G*3( zUUwX~8GBXTfQ+$~O1bNsni_?K1bP;xP2CgmEJneE{fQa|VPuafngTInA^9|Ej zVPA;W$kGFA7FJE$=C7xT7&NAYwr-m&-^7>*P@gNx$2k)6>sUJ*R|pQ?hZQ1Omn6^jh@0 zC2{9zzpwk_KmLCni{{_Q1%;JLrP8ZWl(PweLOR6-h7w_bYDNbJ$AEMV<1O(oepf?o z)Z{@5W|^yTnrZG7ms1V1gu0BJZkY0;2G7!{hHPnlYpSpD zuw2(!3Z0N1`{*|H===^5IE7}UA*XU0fh;3)`^A)F{0qM-?Fqb)6RqMD+twlyZ15MYx^ zK^mJtkrw~qAAV1K_q+eHK5VMK#_W3j`JKXb-NiZrD~SZr?(9+E?8*5XCDv6nfK82v zR-&&TE1?E3o zts9WBVL%o(G~`;NgJHbHuvg9lC{bUZ9Q@ML)5B8$@tmqLsAvMhqXa3eJ?O-3Ax1np z`m)M~2Of`{C|G7j(7wK2x_tQ(|1FLQBhubJfv2v4YFgHC;$B!3`4Jiu8Ikbw3y2(8 z&_aEis;{xDt6s)+QwyM1NhzLM3pxrzAqTAWu<<}-0X!8`51^wl-^F71ifwcS$8SIrmX{Wbc01itwgl2 zZa~J!avTTs4`DVCs{E=FPzVIZPD`LfN?6+-VSv+s5dp4e* z>XHvBlrqGI_XLA-`*shVI(3=_6Z4)ia(CjyNj$SaS28n=6^%fgIYLmrZb0g5Y#R_K zpH8ReAhlcDaEOS}xOwv?UA=mZ9X{pgK|jz<-rAbwNM7n~ij9Ujwa^CtrG!z``miW{ zs2e^PI*WayxAzY3Atz6s;>-f3okDNh+uKRshvLqk|Ev(}h-ln%yN`PV^7PYNoKz~c zzM&!SQ-nl|*zhXgJzTqXjc>S|wVdMG1j11WpvrTOhVtE@CWu5gIxi0e^Uy``y|B^a zv-By1YIH5aZanZkuUxsp-w{#Cj2Sbjt*zD4#H5rgNTW?8@+K2ePko!JuQ9wPXEN!D zx^omyGZRMw$P8S%bcr24=!r@vK_66oLLX0U>*X@jWF}h6_BWxvOMOnIJZ`hnGYrZJ zgwEn$=q$b~z7zCz=FAzK@-m|=4XCsJPyh5!oL~LbUmMp0;l{lIaU3U|PN!Dp^9@>l z)Z?290la?w22TxypdqXUQcD>PJZIy#v9WvFkQFA@+^k>d!mAg~Ly7~3!)z!9z7sqh zcsCGA47|B|^(tMta+Pzg)2B~o4+rlJVZK$J_^n9@hVmY-?@{$NhV^w;Hk)fwDIaq| z?jiHojG?!nTnF{K(p!}spc({+HfK(!{?Ri9ideN)#G+>(Bn^=hj8woNIYcLjObUfz z|NCE|%a<=xb8|Dzm@$K#3N{=Fb8p_f z#a@dHFDJ49qHqU+Od>(6#fuY z6>TI``tMmCyODmjMJ36)OIjO%<466<5O_ho6izJkworiH4$;uiARRk)jLx1t%Z3Dc zixjyuWbS;T>V)xL2YDPK5ESIva8s{bxy-cc2r;nmQ+i7Y=tMH;(&G_FsB2_&o|{G|`7@#@s*q68(V)cP@u0VW z@gv)Tnh6Xe49VHEXXw(Ui=0WAJ$p9g^C|3E3+e{s5wCPQy+#P(o;h=xZz#L~Fua~3lLCoij?qnUhLEm;j6=3DLkIt&Aa0`@vFV=fr0F^xH56{m z38Trz$&1uH$uf#TLHy&j7l{f(rT{58IDdGYKQGUD?%cWVv}se<5Ye7-odFuJU%a!k z6Fc&^Jrl*vah8|0t=^Z$9EzE#!NSX(=HKHu2d+InEttl7)&+_}vu zTGS8#W|2Kn*%%)jS=e@MbnUf_0430^C+W921kR?%`g?T4Vd|}f_mkh?SmD$bS_YuE zj^muHR4TtgME|3!tE*BsAP>)YAlLtYIF9&cHk(T$2eMyH>^^;U1-$fdcDjO2?tssj4y)Bi>CC~GIKt%s*S6A1#1Hg!JCWHtrz9WSA zy;LeSwYj;8g%EjDg{UG6;-Z!(V{Y!XA_LGc>8>qqCf=fp7!0 zB@M|C3XnI6==X`}KXi3<4b``<`Wgdz3y9=D5rTdrolZ|`Zf;>HF7#G+_>#KOlcIsq z>Yhy(lOmL)&q&H9kkS7YI(li3+}tXauRPN~L;@i2gSs`irivu5p9R65~h+ zXA{xyI*$0Ca=C`ogb8gy=eCXmCrf=Jp7SIti>FP1OgLavuqZ-{pdtx9Rc0%cN4=J6 zWR@~nW*nFyvMG#`x2wzs1cszgC{#Vq`q6atJfP5*h_(^YAE#2OWk6Oz2vLYrQAbjd zoDzmP(J1DfkMum%Xhs_8SfgPd9m$A91v2z%kk*1%1EF-?)U7RBo*F=XWE_{f>T6ss zkItVzPkZ+4ZLCx(6Om#@mp1g)q;S`3l}V{*+h$E8qOe+UO~JF@%&}c(2t!csJp(X%KYbR3R+>O%iMywSui+hhyl%iD(32F}S|) z`_iRLY2m_-yB_shU-fk_3vvjGkE2JAvTlJh3ILa|3D(REIEs!ZaWGrF03Jpxswp^0 z=abXe_SrsmKn(>XsnA2EyEa|584;TUX#T5eBQPYTQn|5m!oB`R6~ zO#{f`@VgBO5~jA4P)11`)q8Z02A#3^7oD-ntC=xlIxShU#7fp!U-k8%7MvF}&!JZd z@Kxv+da?8kUe6BbDI`U7XnOe}0b+E6MhY7oRI1TX>8{O4-LLMdhtgdM*35E4oMY@haJhQGE{m93zTkQ!c*5@c0RdC&$#7k)|3CYe5Q`GI+d0l`B@f{+C^ zXiII?N@s<1*D|FA1H59z3jR#5j?t>G2f2|5Vp%(U_%IWMLe^kBptsoAlN>!;WMJyC zZT3fFV-q(DDm}Efn?Wt(R-W}>M zj7Wb!>#bL*R9+>bU+wDZx>YwIBO4DC%m2i6-LJK^wF+$V66WUyLZPRuk_6HWU(M%n zOrSuNAm|Ld4?6lV1xpDbA`m6~pkL8F8A@ROHR~dA1LFDpB4MEpp)qK$A&~G27cE*$ zI-PcX)z|$lbd(=Iew-Z@AS02sLTX8kKrjbK*+$vc2EKTa(Xog=l;bD6zf(1%52T#X zc#B3p{EN9ipd7(of_(tr83c%P=FH~rZW_Djs0Numz`r<0IB1CUZ4AGrLD8Z5<_L%| zBJl#aFZ6a`V9+a<%daDyKh}!tW6FSZc6N3E#+FW}HcKIF4}?(VN^Rt4NhvIKiqQd3 z@_EI;iwBHJIPXJzDaOO}L{tp~4;V)@7@;|kYEVzxgwbY9!hgL0dydajf)1*M1q&81 z-9mlU*ZnS}NKcDF29bFM&Q&#J*p{gqaGHz0B2F_(z`I-O2$ga?3vxhlHp6Z?|T8zy{D zf6nIJKmb6SpeRqwv6Ww@0nu^b5JH_E+BVDCj6`hFh#86K!l)h!G6;Hmoa^k_bLx>u zecgBDapA&wmaT~s+ar3boHtvF$Ohewr^Rf@DOux#zM{6GXx&Zc5AuKJ%vpN-?RV+= zjT=#iv6?VJ9ifGO5rpti z!ks&Jayp>C>g#S7ipX!i`35^<7=Q+ZWE5!?rkg1Nu1g8D>`^kqs4hTnAiI!Tq@VD! zUZjVt@7=qf_UzdwN82Jz&9g*u{BO_~<+@ZYmVEsy@o|BILN>s4Tx!fWau(#3S6{d=6A{`ra*cOH8PM_X8qEgOgCP5YLmGf6D7GXqQ?&|8g`IR>yot>R+MD$nb zbowP24tOyNrmGXA>Ba3hN+T6mb6tpRv&PkXaKlmP3+bZo-hjv%00lNedPqK60|McO zA=7iJNgj-9gwn@x>P?7d{`Xgn&x@0kA%VT8f{`q#hC#m@SwuhB;yL-fNRzD7Mg z-PGPbF)$uVUv*{(GaaSFb!{mtJw>gfnv_gq)5h_UDuYo_pQ|?aUAuPE{{0_v#NlvS zszJ^YL8OAu!*Nji_~v#RdiNtL-?%090`qvvCCOI>p1DGSjR-#H8{c@D7A%;bXh2jt z%SK;h+p|LCm1<}dL3&NEm68wBSD&dFkslM$-|gz^y8V?kAf26^O+@tnrc$Y2Xm6h& zRL#RgTA65#TIef1)U6dBD^$|G8W0q?5VqpRDsN~sMnvxeQF&A~=2nHnw%SM1^CqGs ziSERFs9DcI%wU2VA`xY{>#M$MJ5EJ<^UXKu+O_Mkv{fzLr39p;sk0-!2A#1P5Xkz6 zAAZbfE7UmLRN7Bb=g2h}E8N9%sqyc=Ooc+AE1#p3sg=vTVBy80iLEVz%*c!0~` zw_Ml#)wZ@a2ZE^6uj{psT86|{KqsG0*(R*&Uu@p^Jl%LCaq-kL9_q&9cwiINL-x@` zA`l2YWR0IkZRq1jiWz@@_%k9md|!#zTWUr(hok{Ujn^YvT%KG_U4 zd}{|e6I#ff+)kBK7s%`F4{J8~t~?~lTLJvSmvGW2I6{y6&3il%%U> zT3(O3%)f~`!-BsTek+wq%c|9?Sh;fL?!$)u!yRUW^MpjAULe+vr?lY2qrwN`l_#__4((Y^8*pLNll{5XxvzYGFNK?C|PLS&EK(UD+8jU59rbBKl%yX z>h2~dm7*Mvt`5a(> zVHDs7wGQ2o=$uzc(TUk)X!C|l!M^*@y<{~WYC(u)L*U(0pr~_*pI3Murq?3RIeM+s z`&3k=Kk!`iAu;qwMROzj$ukvR%CYS1WTQl%z zvJNAqmw~vtaN#0v_-W-7I(`veGYd{ro-$9b<(;qe@fYL`7bx8^o6<`cggWIYU36JL z8uE?&{R^ccefZ%=0o*>Szm)iW!*h3H*G27ZN!L-qi`Cw!bXVzZQ&VHkah!jHJ@rw@ z#6#z`@DW%4F`La!M(z}Ypd24k7fm|}%WxTeOeICSP2;GC+M_V7rBTQvNWJ(L+3qU^Q}lza9GDxbbU z)xn{#@e%XRJ%=(ta5Xe=J><@vUOIW=6fIl6bOhbizprhkkYnwGiKef~M`sDYo8RM( zbr=)!$LIQbJ9%JW@IQ8Tc0T*Cky)vSY&>x0|2myctw8>?si`^eN=%C#j+Bl5tj0{r zi|iS>eJ{BA;if7yp;qV*5uqnAi&-`Sl|+thqYv$zID#apfTpnECbf0gG-;l%8&E9h z=dO&d{9Js7gcvKYM&jJn&lUggB^^ULo#Fd&`}S=*aNq;lzI_`#Y8v<(H?Gr1AAQVJ z5%`WOs#2&F6j5i+oXH)~NT+=Bo8OFV>@XNdjvS`br_XRRmNFbF<)Hu&pvqacY#Gg; zKR-BUa2&n<`s=Z16USe(W(}=dw=TH1a4KGX^;P~1b79=@^Ups|-~ayiV;~8AEnK*e zo_z92J`NCq=E7%g+_>?P+y`9m0|yRp&j$b(a4zJACIW^C<-IEz4CP(~vK-w!qdKYn zM)f@D4vumxZB8Q|KqXzibcKZPojbZ=)1!}xZIpgu1yQ9+#oZqh4Hv1n_ftx*SxoNK ziIiEtoC@zBBq6Gtz9M{2;RTJ0;FiO+IClI5Enc$7&|RJ1E4uIK{b+Jukb|c}BjWLO zl(JS0xW7U~mk4wkze{u$*FgwA6YfX3Tv;(ZJp8XaJ3IgJ!<=sTuw9y;a~$U%G&i>h zMPR7Y9E1<@pBEM*5M|blZmwqDQ1~}08o8K^pCc^@PkZ~9i%`-PBWxZd>uhM1eRP~^ zaIWEb2~FW3-0?XG@_h>VA^#T6tq}0+n|R*(v17-1Q+-tH>eVas#v5;N)B(fl`@ zq)C%`W5I@f>C(j@AFnn!(&%5#o;}Oal-ks>@vUCH24jC&SrHMOIdhs09XiAY3N@gU zCr{GWty_7_Dn4`j_8km&{_w*OBhkpgg9rI~u3fvzqqejQQLvSrKJP(CXDGROkbLvW(NKP791 zj$t@z4TTc1-<5Z5h6pMfVWx%j`Q*BOC}WTNnaXCODQXc_uC>n4-=UKl_W<=P^fiFy1@FVqGDIh*PoIiJ1^9m0 zv{1;zu_42Vh7bk87~Q_zLo;T~q)nTi*90N_w${p^xWx`dvObSl?o02;9aVA-wBRcz1c&l zjydE`X=i09pEw^T+9FK665@*&mM&e)*F+Z4DVBbt1f-ccuSm~2*!DeJYD?E+Wpw?B z%_$TL8&|AY@!t*~KHU4*L?C|Z>NnHr)O>hax)6?pwu)M4r)J(U`9epZuhpy3-Q8nN zAv~BUL-3}ArlzFVlj=32rF*cG(uL8P-i)bVL;c$3^9}5AfArBuOy%&f=ZL7zUbQ~| z{4-Y6Y15_=#-S?eihRC_R;^l1hYo$p8?{PJe*E#lpynVWg>{Mb5p2$wTY-p27K$&@ zxpU{(h(tX|7^11v+j}Qy{`}yB4|r2txpHOAUL^hAz{tUAIB;Npz(BBj_b%QDVRZKG z+sly(e&4a(hw;|$+5;pshbk9qaWxb9!l8l>+qfEab?U?VyanmWv zKKCSt+2v1;Qsw-W=vxXUD(?D_8h+s=%B)*T#e-jvck!AQ0TCM_mA1ougM1ZR zHUP=nACEZ5LRX>-YIA7Q;Qiq_Kg@;iGb4YrqYHD>*=kx-U>L( z@VyYhE?KfPk{VP$+dg*r^5y)mG9vJ(-+udTnl)=CojG%c&++M}pP?BuW{jF5=gU~Q z_qY~FU4cGbB8E(KqZ6Ym87-^sNTi8LdTcI9Na|1~n+@3-{9EA(qSUhal$t+_yh4!* zyFMnbQjO_J>G(NHpFB^grSmDb<4NlO&#w`cJ-LtLJQ>#O`W#xGwVpMaNu;){fo=RX z_Q*;_XV&nvbi8a7b{xH)>ToIxdu*vx`sH%Dj3&dk#=QYSx497XI}HuF2AStgMH=_a z!BFv#FWwXw7NyMMl~Z%1ZL~Ke{#`*~0A|tS$B$95R2)^)o~L2QJ;SB)43rI0cgVrp zlwc$wqX@#vvo>Gp^Pj`-CIZ8tuD9$rsYaMa@uOZ3fwzgY$-#r4@CKXY!GBo`MQW^5 zr%w7jLt*133<@4su3Vm&HS>(_6fj*f+o6u^LMfP0TrpPVL` zicz!M96(*iOr5m#Ku`^8cd9X(IF zQ6E60p{_4}-?wicMb<@lWsDgj|c@dLCvnFXXv{H9TLv+a~&~-hISd`ul4-ah`9xnVMS|-M= z0qN}QoFIhwZewHKMan^^Ot+=56dW!@7I{W-&EXAEVajzuGdI!@7HcbTiJCNEAYW^2 zYVt>MrXs~ap&%4~Sj&p88I2%$fzERDYxtDWL&HNO5|71c=;JKHQ9+~#3M)i{#L-#u z`6wj<8#Tw#a{XQ;VuArhDhn{#j*bN^m=7!W{>B?WVPkdA51TPVAEHUCXv_s3N29Wb`)cp(NxCbetri2J1S_hJ;Ci`4=^V~yLZ`Jdr^jJ?lvlej5D(sE(7!RcoS}^!cO-*jGSo&^f zXXjscb#?W8S+eqFS4Y2-PNx8xtax`=K()Uos)i>Nn~oD)}_ zo~n5ZFieTw@rO{Q)AIGS6j;25x&a>inh*KQq_dRvks*?IYUIlurGKVGBuZF#^Nd~* zN(_mko+BAu>Q2N^s^{d?#wvTHw!WD!>j7#AY|5X1eweObzaHea6@>+g%PUr_3{nYr z9!;sZuWQz<4N`9S8$fGS1EI-U4C8qH`nBNt0}VBO`V4Dtkls6l&p{-zdGk|2gP&qc z)eZ7!&NXV#yu==*hxNd{Mj8-KpXxT(i@iE>O4qNXT1IrEq)1&ZS-(ZhaSH36(Q5|! z9oz%V^k~fIS>I6mXn1BlIjzl9zSd2}!zYO{Y39KaS^01Hdxiv1q1g<1Lj@{+beOk@ z+_nwmH0C3&gJ4Mbq*zK<*U9L)+f!S%y^Rc%rTp9I^;LSSBP$ix7xY!lg@@keayjHw zzcVf)kj~D|79qqx%jffsY&>$ci=a~)I0>mNp&0}(ao+i8&>nGaoe@KU7%Y+DfTT8K zk0}#8)!hxTV$TU(d@?4HiUNKshl^dpZ%i6Z1QI`|+J$vn?zk2?ovf9p>r{;>ziG&1 zgJBaxSr;!}^w6RZwJ@LIM?d-zZ|sOdkdMcAMZ@D4Uwjc1GiS}39q@Re0KaY9c1|lH z4FhQI>#zTa4Gs(s{vLG|)ErKnI37f7h$_&}f!C2D10)xJj|UbY!>EtJP~p4aeW-ij zIsrYU_jlBaK=66!Q$b@I;K2Gq5nUPZg$oz?#CZ=l`anO7Pm>Weo|?2Iaa|R$=k$%< zri&vX4xF*0Kj+_!WZeqHU(Ilz z*haah*HZuM@5zEX$>RLNg$sB;(+lZl`i*L!Ky6@wc&g8Y>k7kADgQs*W5Tf)uF_j) zczF1qb#`|CSyxwA@3=A`sC}f<=?=gv^;&`+g_s;wals<%=vvdWNqXKUq|psDDJw2L zoqz(GrP(|a)^k_C>z(elbJx4xb>x)_ zh1GR{GN?}PkorUx*71IL{7}jhCr)zH+ub%|-tAKKD%hyeeT|J9y%Ty9o|+|(hSWui z7ICwkZUixw^c&y!79Bfwls9E`E2E#moHGI0L}47qfDuwr-R;|VxDiopT!=1l4bY_z zgF1EU)Sx(z9u+J=UKNl*MkV$-2HpeXhm;#}qiX2QB5n8a#~<^(03D8s3?CByjqfpf z9h#aZ24iVM-E|`cbR|o+RF&S1t;?K(rkaIvi86A62t|*u<9Zy0SL0f(T(yGU_{mRM zJ|?ucQ+nH4{&RoSr~Ui(UrOv3w655d+B07OGWu47L!po;NT~p34Wt|x zk&zOGG6(l)gqjLGYdlo(T^cC)_u&ZE=(Vf`3RqNK!)!RLE zv%80lVU)~J+h>G^u+kfOaWA!0WqELzhWq+yXrP}qZF+*XZhbm355zV=OGixFqK^3U z(c-x+t!@vkI|zO_+-wCi?W@VHzz?ro_M8MqBIId&JffD@O%ddk?c9>Qn32w1 zH^_<`D_T>LsI1Vdl;0m-jS^aHCK#}TCc8z8zI=$O>5*ZRM>88y+o%nyek~;9aAVD= zC+R!f>-%ecFWp1Go6q<%7w#=U2XZQC+B(a_)Z3&P7D=gRTQRwoj3@tH^gVD=pMLr& z`r!}$mabp9$~`od{z2;Qf#X)?351@IAQ(sQH8c9o^ap1SFe$KHq2ll`_rpB##D-Dr z8%d6D{JN-y!DRier6V$u76H;y*KdUu%Vx7nhlYk;B%=R5=8Ne5pr~KT<#Gbvfj;Ta z^jgf~oL=;e3S=@Ri5;cx{Avez89nCe?@2*qFh#CT23Li9E)cb z{eE7A`-etBi(s!C)xM4_W zd_2a-s$!Rq5(&a%B2f_WgniTF9>jd)kS=BUD(&?1w~pVOu)u2&K3auBQW2B*#`=gSx48j_{)RJY82AXv8wkT!&hIMQ-FoyQ{u@iLo^TX8U zQ}j1AH*=i>K$pS6A-dgjo4UJi(eThPgEf${TDfX@A_ts)U4YmIB1_+oZ2OeCA1M@$ zq#Fv;=jJrgc*;2n=?{BBqQ{rcUzOA9eldN?(9jTY_yTmInlZTQQY$4 zLdm>i&iBZZLuI1c^bqEI%n5)hEL5{NMiOiV-4%+eS?BQ5P)d>Xmn)}>DTiVY11B01A;yb^k|@m z2}TkAg**22BSMydB}+0cMVx+l>-4Z(mo(>aVgaHE%H^LLf|SA>}(u{&V$ z=?gDBPn$PC$#c`so;gQ1Z`_~@=Pxkgj0a6+GE7~xWbq!W!X!R9WmhAOnj;!3!(9kPm(tvb!c4mbT zFQd>J3ZfH)nI;LFj?6;DqTs$d@6KpzBeiNKWZ`*I^R8_c-ZKU}p^zp#K~+&@gCXU> zZisGJnJ}9PB zq%$;t`ubANjsgnN$O~8eXvGnUp}xMk;IN}(XR`)ofv2@u`(+R)$;t1{Dy_-AZkxzeI00g*)@Mb{=qSFoO=_}i;9=)R< z8<}DTFi~3%Lx1n~bJ9MS-Muc8Y0iz}7N{0D``dXNTWYdW27lKIJSV3e8X)D44*1XNKQVb*A-20ln(wADY-z9P5^ zZKaVkdQ=VSAmkVHstT6qE0iL3hat)`BvNn(wIWP2KieeLd(hXw)=Q#<9>zew9~AI? zRfFb29S8u>0gMPdR@4g6boO{IFYsJ}ID-K}moKItg7T!XG5=Vcr5w$h3P3Mr8q>yf zt=hEa@S#BJa-R<*j6gm^rShixHJymRL^Z+hcD z(jvNX;|6a;3Q!UbjS@ytI{Le$hZ$f8B%5_L#8zAwFr@9|$y3bo3+jAHCsU08Kk)ge zSD+bi*|MeVm^^GfdC>cbk|j_i9X)!SufeTb-LcxE;$)jPZ3^>jEnL_UV@=S@0C+!+ zp|Un+kBQ{nqkv#hL3{Dud_FJk+_|&;LCpzyAO@tfvoq&7&N}1)b$V?b>SrTORMCey zxam;|3poDQtzAPOAN+($Oto>(@Q>8RMoPs{0{%bSklCOp};V&0y9CPay)ie*MN*0L~kyTvrnd$NN%q zRlq4F)6Ve%y2-+;j4R|H8<;{{+M54x{Leo>!YC+^Q*sKXs(72KK6QPVe(4|RX9M%m zM+cetdGqEc{C=bHn;zW1{{VgQ#WB8C73Qgu=dW{Fv91j`fZ5WSGv}zabw90Jx0cqd zSsf|nn^B?MgDA4+;u?nqbked0^8QJFGiM$4?5?h^;jt2d%yeC6uJUA(I?Zk5Yi4?7 zv<-#Wyl&jQ`9O$aQTPY#0dB;)b!#Z!n5TXF4g?Vr5E>a27+r_M_Q-~!6u?h+;U+e5 zNZQ870|6oE#G4u$Xvg-g%%?*>Ss(}sy$5gth>9fS)EQOYRyXka7+iCHx{i4dsiLJJ z!F|Sa;Kv%zN`5Z}Sf(1rzXid)gHwbkA_{hK5~$iKf+(`hwov*B0K%JZzD?)OooA!L zeMRW<_Is~*w1K~g$}z-6i7py0@bI-yKRrZe&z_@g+n%Q7%a=V;r|WK)q=h*}Z@u*n z8xaQ6Aj(3t){r7s>&TZi$r2k|oIlQexG+rbyt9j$kzagqC(j?T8IcgF>9CV$HWh~H zt?*}LRMP3p+;VvcQ`1h36$7$7l}hIzi1Eo~Vgv?Hy6b{DF8WV@`ZjgkttS*YbWsL zU_8jD=I-h4rU?^TY5TTk0v;XQ;QjkQpu#%R;qfsb=2%)Y(txqV`QCd3GWt=q(cARkBXZn3Z00&~VvNU4Pz?t! z%3Y<_rAwFTZ~yjn>gl=7>5u6JmsNK8YXQRL{;amgd8XCBW9U%!-#c@O?AZ#oaxK_&NU+ksx=PUI6 z@BcUY`q#fkbLY-Ub|3>PqH2sqB1}DpF#K#b3pnrcv1CA2rPFCwc5~XpV7>Pt+O}VN zLR(S-HlG<8Z3A5kvJe0Hh)=io-dlnlfTpM+6pM8Fq_8<6w&YnFJ z0m54gaH`AP+#g-Yi>jE5IvS}=`8ba;|y9j0_Y3->NWBqcFr zi^RUHFbWCf3Ymew`J2}y<+>0|4T2tt45znKF*y|es06(qDwECeCOXjH$1^zg?Agb! zqnBf>L#PiP{FL5(cQ=&*xlN^fa>^VVQO8YD19>#X5!43wFnLt0demL1(A83f`ar4T z^KkJXvw?orzaRYIZ|U3L{)Tnba-3u`8gba1zg#YhoYyKM`oUN+AZyhKSeZr%8{~8= zX;MPp_m@wlsHvqzj*>+P?nq(OoAw;PP2KTXb%V&kFLq;I0IdGyOPA>FcXn}kQo_?oK?QOoh3{Xq8M2b34?fQM~%pNF%_MU4FLK^PG*XQtf@ zH8nQ#4KoMFNFFX3fdmGG^i5YbC1Gspo!hsWGv}?h-=$Yxeu)d+ zCm-@?TndIzsnnJd6j^wy`a@&$vBDWx@!LC&~|8KTIk- zdh{4~Q|upfWeqFX)?{3Gn;AcG2$1K4$qxCOY7Hf2&NK_ z)_|xYs=Aj+^*|eGU|55o#Lav(XC@d+FA#TO?90wd9-W z*H(U;+Oo|Q22R3AA8SsM_Pa7LyDuN2AD`MweSNZ51&$o}t&k=jYYUDBvK7Trk?Ra_ zLNcfcI}WYQq-aYnMGdGqLZ+%7-Kly6NDdf+S{y;Gj-VB}G%d)a=>35LeSm{DHS)E< z{&cImn|ANsLodCwb42;Fqh3SD#7D|@j0pqM+1c6PIL;hZh$DluKjhGfTFbi?dOKUC z&y=e%>!Q#t*>mO3Dn!2A(3!JmI1>5VOFIK79X5}x&upRQrY8FI z(C4gpP<&8dgI5RN0|jvyk4mLP&+gbp(`QVNBpZ+}_~~2k(CO1B*{~sxj_3(qhER2) zkhMy7!28&7X*gVM0+}r2mvMbd;=a=w>i*~+jAZ6@Vuf^t<^V)cQN1JTLNqd77L4BU zjFsDyZER|i|A~MV@gt$AAnxaYAcQ-1f`hc+6N%FmTv#-4aor1!xzOG%n&WI~S z9!SG5HIbX9oSUXQr2(#m2*v$GQG=lyLl}+*CqsERN7+<{9W2NgCVC>OM}1+(j;&)Z zmG#LdhZs13G!?f4q|;n1-;_(y=3I(gL3F87rH_hLx?J_BPz@pfY4T{QBk0L&ie|Zj zb~NTVO4-%tQMIv=vmP*@Cyt+_70Z{>jF~g6sVtRprW%y&|1sS??3P%f2Set9`|T)aG1Jp-J*2brRSb~K8RlQ(EhEr z-=PyHj`POR-ad(%IrXNFosvqWdk`QqM9+om$u4kzYL%x!|H6i$_;mwXOma6>M`=W& z$SZRIkZrz!>N>`?7*7TSX{xPTw{Zl4UKZITC=0n}L!AUZc=W*s2N=(fYmWPdwAGwB zbD1kk)(}QA9u)AARedNcJ`Xc0KKtx5PSrpLaav;(o5!`AQN6IgcqA?S<9&4 zo=N8@e+Z0tsaRz19>#mahP7OmrM4tI|d0bgp>#Z9|wO8xL&0vST`BN2v%Aoy6t3+PGQ2 zK<9f)OfBMuG$oGOs0ENHa_nifQl{R%Ui$p=!@PMs^Yl|1ZsBNc@)mwmmx z>=`vTH`2Ck&roAN+M$f^zH9e;oI6LDJHa;|+yU+zH#L6*XpEpy5#B#3el4O3$kM7Z z%@uCw$*C)N$g&yBsX5!*41Y~_RNGWU`MK4gc7imJ=d~oJN>KMfF84vy+VOdSTq`*A zy)LAz)~#C?z(^H-9vjx)y?ePnfb&NB>e#Vk?37HJG?8Y{p2J21o7&wn1}N^PkW!}X zQ($=PbU?8Y;UGPR^r$i>Q>IL2!xl0($NA#)pF=0ji;aE_H@)FljU&!x9Y#2|k+o_K z4h(Yt0y}Elkm!uexXb$L9{-TqGy_NbfQqC zawbFRbe84i!ugBT+uIjRStP2Ra?~?Hx~#Zv3TU8-W5Iw-bzRp9BLrccU`Cdawza}g zWjsd8@kbR%Ht~g#hz}`Nlll-PkqC;?!tW*r2G=FYC`x|X2qb!#YK9!~`gPHI6Y}IQ zf9*wj=iOaAM`6MId5jP-`E{^SeDJ|XoECwRLCr%_7UbB_@r`sGzd2DxB8m=$y)@VN zSV@FMbC-e*C`jR1A~|eKKxX0d^w4&s>!`ZT!zi(8?F&IFOQB|DXR(){To-89?)O>w zfvE9_?xBZ5%~Am*GDjCLUZ$^o?FHUg9zgvr#*MUj^HX&Db`Q@zfx((FVeMMd=b3Cw=JJdRyeBj!jwRJ)8i6=XPRKo% ziV&OX{B^3Y$Q+zx7S^v`yT(Q&oeTR(Xp|13xrzF2Ug+@o@`lL9Dah0@hF`5-y>iT? zu}~Z3>y>h)151KdWm8<+=&pM7UZFx|OTHzD9Hd#{H{f#Y9WK)>*P$t{LmTordb3n! zgE2TzqC&C2wOVxSoA=br5`>cpy?}^O-N$q~jUT3tg(CVy9j2=bpbbh!5ejB6!kDWM zlv2jS%pV6u-!N&a73PJH#PT;oAJOC}qb7nHb#M$3RG5f8C{ z@%e~w@KAhlmoHyp*f*RH7&8>}CrzG24O(OprfyAR;zVY_;AcgksT&Xbb$4P^IHpcs zxqKx|#X89|Y-+m*{wC_fm4&~da(&Q~Q5Whp0FK%R`qe$~7 z?ysutsYu(8KpwdPX|wTI#qr6>^v-%t6#@(INH-pKWwgx|Cvt_>$ml}{9oLDaWE>&G zWahU59f{8yBg5qesBMi zRaL4=ZyF0D8aZb`rD1IMsp=c)=H?bQAT}s#EdxTv@U4p9=%=P8j;E#biAf_O>mb6C ziqPj@o5lptW7KbQ4LO=VZ92`KJ)0&^p2+Xf8Lg#35q#g31ENw~iUcv4e@;ZuJ2nFn z07UNeO2ok5LGg`*1 zil>C}m3rC*H^ihyu9Xtd^Yy&3aG!*bbO9O_aya|k3nmDvM!;&o#}jVoNE0+QHFKZC zrOTJ;op*NA%P+sgk;h2u^5rXx2S0cI93Q7`!UW1@8zia;=^+T4BZbZLH(AG@sV?|? zt4&506?L91em^+5^cm_Sd>`G2C={19l#Xl;;V_$!8k%B*fgp%w?fb+WgMe2{M3_VG zCjApdlX!j~j2D|Jttjyo-H1Y~jh4DwQP<#{?uOqBpR4%XMu);u5lGd)7x7x54RxqS zsG>Hfj0qeZK#7t5nm%3DOn?l8F-fJOBbfE$;hyQ41G3O$s2ZF3UCg=)Hgicnnhw)t zUb4d0Mq!G$cdm?x-^GsaUL55f@h~C~=FIbHoS>gMADDy4W1w2wc9@w9e^}mWaK3EEtfSPMm13aYSEBV(mP8_AGY=ReucbERcUN#bL4kD)W|vn}X-sg*4-5pB-W& zJ9+XHE|%Z8ah;}3n`U)(WLmP7n@B(W@IzX=b}jdZ=#75nPHILVst?3=4@Qd2RQ(Au zs;1PbG#8>hq`6S5n>KA~fRNM2E8w2lY9=;4jzf99SmcZEgFL-rnvI~Ey}PM}czWe4 zqRT>$mc|VGfxM>~Zlq32B$}#$`b-y|frd*mpn5HYX-<@rra4fasQ6B$9fg%tNY}|w zr8CO=Yi=wU5Z6Yr5Fd#-@_}GDjvV=dPM$nTixw>!b%UIaNYWvKeCr%lfYo4wm`>NzuAXn9Ydy+wiEPjLg0Z zMHGhu`1R}8=#x(l(){@gq_ucw4w|A;VeEoH@n+qUHf)7Wwr1 z7;Ov0)zYO)c`6}}h3@nD^XGFTBEHLt6)X98*g#=$-~?gKn>UYX z@KcHqfP@~DG9Z4TBSsYw!V@XT+sc#+`Mg#wTpWi|Ksjg4oWXMnMzdC|SWfM26XY-{ zZBkoU@1S62y6QmpV)%O91C(>w6^)6~LhmjxP4L8#JIB0%B=nL_H)CT@j&mi2s2!7* zL&x}=QQ-YNDAGR={VWMGD04KT69GcOSFT*i-Qw8z(Y$x&%xP{U1Z);S2q-^#LI9zK z(|}__4wo%k#_6CHD^~FRM=uY0HgG;LK!{jy3>X|lA}}T}GW+-MqJG(xS)oT$IK+pqh5a&wyLq1o%kvuO}bYmAVP~Uy|G|GD*7g253Q0s zQO{sLl~Dnd0iHX&Wiwx&n8s4dr#j4o{H^@GQmty}VxcpIghu12h$Ub7qmn6qWF@+mPI7LjD=?*Q;p_GtcuY@$j zwNf5PU0uC;mA_Z?96W1uU`NcE5v3F95wIDMfb)nvD{1DvJjj?^Z*GW)0IpoQOv{(A z@C~KM=l=ft?=du66_-&bxNzYjbCQA2YX1BVnmTnF!?O48-4o23#xY<7-h1yox^d$s z|BgDHyf&#wQ5yGf%9JS_WrSl+rDqPKqG~c`2ezlx>P9jm`2L78FlraZ4bbol7cVh$ z^wDF-+32Cs?#U-NGExU}tOF)=IJW7iP^6jFj)b$N5~og^!fdjrJ7QxG`L3e1F#WlE zjzSp$Il(72ee?_RFlq8cW;bB^l5~cP-$Tdcj5w6N%ql$DcpI$2TCP{H|sk%^rOz1vt}5B z&P3cfw%kW`B~^xKOc)R$L^_&J^_zL7<}S1$rJwbwvG zW2lP8HUl!^oO(-Fe7pvt_aH^1E2MU?@k`{Aq-t+#lWYK}8z7oO+6vJJ8Xi%E#%nMl zh)`f)PMkQw^$f^{^gPpSn2GiO#Xr$!D6O8H}$Q(A9`2|Dls7^j&+vw^BQiVq#si&9LMuknvtz~Tu;=S=*GfY(6N9~m%VrHQ2V4wOsaZr zXpq@;VMKN|r0EBPCAy__+UWbxZ&14|Z0aGSVW|`3W+SEN& z{$Cu~Wkw=GWjxZ4)PQ{FJKqtNN@co&oZ1jGCK}5=^{kc=S;2~m3uZzqgH(nJ{qY?b zp->6B(n(YTI*+gi#5XFcSxz_{62pT7hZH=!Qn5fAH>^(_dhg{n!5}ben-EN$sbr3HBemk1TBffD(k0Vnz8zb*S0URkMq!!==;JYGSg$-Gy zoMdm0#|8kNG-DeZ8`%Nav}qF`3v!{97Eui99xxoJabP3fuwes7GC*QU$`;S>S{M8p zjs+w1)KgCxK!xZYq9D5XEF2%s2hd)ar;WeCF=x$^=rY|hLW_5O6QNXks8mV;HRR|e2|eNUD9CEn*m*dvl^iP-0a z5YvC@mwrk7`Jex}_eczg;|Ry|#3D80w-&}HQJcfq`X~ptow0!x}#DX-ao6*dLb>hS+diL4v z)*g}8))uaxy#D%6sBd79hKGj8$v098@K=@Bj!>+GxsIwAHqC`a&}x(*G2t2_%0bar zpKUREL|Zi4Nb*kM-O7=u>BJNk-yRImX=~$o4oPy7luprw9)=2$A*ik6l=BWp4*GL| z*oKAPC|4ICuZT?Glt^m&47IjqBHvxYa^-^2iJ)Ydbu}A1w)r{gcWm&080%gA!e@Au^17VwkJ zo;8b3ojggKp4v=KRh~1PvlXrLBBK;ycEe=o4g2X>H>#y7m5T*-yf$sxI3_0(qUHnx za`D0iTDWKt!+CGryhX3x8KiHuG|-fkOW$ft)A_PT$4V8t$#m{OY6+U;I%I&~wd!Ss z5Oef7;kJUTIix21`2j${G%uauxFjQzikk0@=!2?ZO+*lTL*#oz*g)XzLD_C~_fUUd zALlf|ylab);1Rz4_PccS*fHiy!ZCo#LCs{xj_owlLbVJsJVYXIzw<5)4iz{@%u#_* zn|;M6Q}hBvj29_7`(r<0a4MDP^9gLbpt=}+8j`Hk&nn`H*FM4yb$If?|0gvPVxy9b z%0)&ysnp@!7Ea0MMgwiQ>d(3N9Jq|CIyx4PiiZ8ctZ2}85!Q&Hw?l*IdRom7`f#(<%lcUu8lqC6NKb9q z%(VJrakWour>CCU#HlPqkaOqE;d4U&Sl69F+SZt(<+(J?PdWVXv{o=>RMEM9v|Od# z!)5Ac@I{9AvO7Ju`TB0(zBTBzv7xZ^fpAeK?MjeBReLZ%9zqb(EAWB_ABh103%cit zX=c01xW(s8y&i{xEl_CvMq#_|{JdmEizjtomp@F`B znmlPD6C;{MMy%7AIQH&)oKHt5ENI!~<~U5pkDuVQ*4C}h(87faV#Wulunim5(}4pY zvO*0F3uf*WDaS|W5V=16e3h!frpak6ZA5Q4mm?gfOF~4_M76J*7rW->y-{^4-J{VR z0ev_PzI!b?a~RK#1@k#-8y+6Ie?@I?~G@au;)1t_{60Sfo!1C0d?M)2y`1-Q_Mr^N9vLkFHjUjmLE)P|_J{%4As2u3f## zu=5?;xALUaTI0WMy<4_S5MJ_)(6nmRYkFh`gotJeAsQv8PuVE8kv8lm4h^*-hVFK` z?2)CpISj(1|el!(D|?SKgi(vD&M(usj4D1l6|7L)d}WlI>1 z_1^n?*~?wGejT;7w$jyW*O|i!wKX+wlt$!uRo%nu_)gjApbgUR%3v4K?KR^zOU6>8+o>MXOh@rbP=oxW0oL7IXu{p;USl4ivhp z!7QBSIp}xj^r=(qlr3Mjl+(Y8$$6|V$oh*f?xa0?_R^=He#R+pL?$?o-o8F&$HsL4 z3p4IX7Ex$A!~2RlM?@WG&z#}=^4xPfXywY~BLa>><06bmB#eI5F?9a0X;UR>Qf;mzmo^lC6gc{qewARCe zL-f>^O)+!_Qc~}~zlT2g^bp;+evKNNnt2p$zOji5?}|=cF@-`QZ})W5wd+@z4-33r zTem*VXe_;Wxn;{{u7ljTd6S{Go?l4!E6yQuNfpgiZde%;4F=uX(!$3Wt#@WGT$62yuDW4b6b)c-#or&Ye zkMeQVCbx9yaz57i^XFI@iRZD*VziT)62sgM@K}xYC`6%P&=rsKfJ~rw1s&~*g<8ol zQf-*U4jIRFUAlA`Ul-8iE7}xnJfLj>3>k1_J#7qmMRDHdz(I!L#3ajxr%}L*#1x6C z=eS>pM3BCG@4Y>=Z{I#fkfBFs#>|;CW4fHES5>vWN|o>Bjq5kK2o0JUfKOg}=>=M{ zWYL%`n%7#WQy>zVJ$n|P{~JGfgKIZ9|LN1FGGK!%Jynm>dWZ}VX@D3L4k*%nh`OG6 zW(&`MNlHJP&Vsxr)tEB~T~+oy+Au;3!#2BGc{#Y5lQnmuP05A4wwHf1pIVv=Cb?H)$ZAQXiW;lVNf#6b03kxD~E zz@FXhH1*uRO`m-72^+TOp4-kSB(?i%e3JMQE2ddO0^<9t-D!`p~*{>m&Ul2;X7w(Fg}QfU$!RU%PhIC(hJ{6J5Q= zH4ZsrMMjk1ssatm%9X45d%}Z)LPGJ-Cj{UEt}mdpW1HeV^a{}}4`YEe2kJxEbYLtX z&&Q7+^9NY9@^wH2f{o?s)hqlwi~{Oz_&YS&qB#=RW!kjqyio%ksE(Iq$`AWB0m=-M z39*4=BBw2iG3ia>tqaMzi^%$0-}*YUQ)A>U3?_5}1{1ZOl$(;nvx-Ij9!O)s=sf@Y zvurp<%lt4F7p?<%$N(FcJw!+7z=8ejI3P-q{CG~lR3X7AS+11=5)I>{_DRpu9}`9u z(b|VfXX(+14urw$a9%_HLT}L{F(7~c@BdPUNX%2454?3%434HU;srb&X54#OK>ED>_Acf<8WC>kLpMi}5hUG!z@f8YVw9D)*Ap^c!%Y)YQ^Vq69l6g;6uURsDpB zti?d}Ud7pU?%cV6w9q{7OeV#fCMZ3|a)FhM87Ok%<{%paL}|DtigpAB01gY#Ja`{A zn1O+Qj<8^O)OEl{3~01Ox;a7m6@~`aZ=`Di4lAUK^!_5*MIS~m(ey`@3IoxLZAh6p z0v84z1z_wEa3-!_zrhX!oKDCCD1UGsa0;N;<1ON-wGic@AsUc+I9OM&Ugro4o4D$2 z!(M<|D54D*mm~*T=Sx!nh-f6@#i`+AX=R6}bp}YQ-S5+x)2I0cPntAE4ugX6zyv&v z9aMEV1=ie?o;j#cxbT@mU8ILjo;tP2fFc2qSV`^82yWj59XJ!C`3|Zx24e>4W&75<(&$~YF z^S}w91OvkecH8!0Ldy{~oCmn6kd5HlwN2842H#qG*EH1SIFU)ffFi@ixn6zs)!rF5 zsqbNM0NB9aJp1f3Tmr-cF!BcvFjC}8Mt%T zE}jFyN3C7ErZw7ss~l&(`49nteHKPb8vV6b`_qG-g5JorJw#1!Lb0Oa*C?YPqDDOz zB?}lfT$J_eH!z*~D8>TW1{{qz6l5}}?W07M>ngn4R0(4lwoB{RZ=_YLR@2t4o4Fr^ z^Va(1v8=a`Z+f8pkc}Y2!?|Pa(DT9H*0n7(>xb3qC;coBY{!DIM|9~#qp)<)Bl_*= zyJ)uQw=(E!1Lpj%2sGdBdsid@q~rx#g~|p73-dBnnwjWpW*sGg5T(hvz*wNqfszkqNiemmvkzwriy&fLWE1Fi%11!!8ZUdYZcMUV3rmIh=fTeoiEEXEk4_{Z!JCsr}Q1N(mQ;<_L= zOaq+}KJN!VxR<3Dkcr|P^gPy^HKuK!FY{Xh!+*Q075chj4YAkZ;BA3#?`+vGS2b{Q zzHlBWJz_3K?y*dZtF?EGtQC$(!QdAgV^CY)@wPe;W6T;YCWXz6i|Am1vaq#_*$a}k zQiFr00wO7p(4i?VsDU`~OlPzRX)lHnT6q|B)Em*jg%it<50M#{to#N|c%mew_qZ-W zAXznG&EiiC9d@%Oh@6G8Jtxz{#=vz$)`Nkgy6zV?pg9ZIAku~721I6nrZgJ*+JQJe zoo4S!vw5Oq0*A18@si}Gar79LQCHa5*Is)a{~V<#I7rl9i9rNYL4p-dN6H(>NP)0| z!IalxZ{S!_;zVzXBNtUR!+S{Y;NA4VF{7V>ED*g4l=|cx(Cfe+bWvx`Xf~mw0ix>A zp@Y0{aqhww2ZsbCB(4)2G0Urta7~cuVJ-1FdfzpB8qNC{{fdu%^rKuw05v|M+f--$ z%nfLCf|O10o1lS$^Gvg)(LPM`%1ICRbb5&Ty1@A(3quwth_+aUq~b93>0bkzWQPc< zFtChFpIXRBOMnP~SI{zupa{Oc9cydY@<-n84CM0MyGdgx!az$5y_ASg;fdziM?UhA zqz*L7W;oNR1IP2+bI&J>lBelz0I>=%T{-y5GyIZM(sBce*0F2WqPylP8iacb3x^@8 zUJ&lH$wo#g09bi6(%N{$+M1N3L`fy$Pkl4dfGJji2I@7%`W-oPmP!h zDqZ1$vR3}u66Dl5p_Tm1Z?20kz9e&&?~VsR8F-c)zCI^p$xceZ{SHyS)V=X9evYhc z-MS6oZvgup^_n0Xgd>adAhuz+oBJVt4Mzsj$y;u@b)@^YB==DIn?ZXVN{g7I(8F`X z9;k5O?_PanCr^t5Dhr2;z3j@(j!}5cn$_I&m+YqPzS6b>q@5tmJl&pVQ)}K1y(U!D zZYe{pbr9$z7c6Hl8pKkvIgz@4H>U3)!~a?z7k z$wu95FQbT3+Hq2|ABcG67>k2)dLSp%6_nxi=Tg^d-o*dER<-%aJevN!jw&QAFHvUe zbEN`PZhQHu`SUhMgdZU_Mka*FAI&*8XEEc!5xt;~f#ZNfL<8NJS9z_G#X$ERS%s7R zHS|x9cjCi_G6)c0C|x1w!#%ro>x+p|l76H^#7%O^2v0=+aA=ab$~{*3USLTIw=FO^ z)4l9?yn0E$rcHYH$dRM;^iw~k7himd&s9X{g0dr7I(h08L-lv>*+Wl1^$aarb}kP? zf=o4M05A0vUD>W0dhTuDl>D`W=!HtorUXdI|CInA^EPgPRm&cj^`HCPubQua{jcoX z;y{dHMfSD%pcyVA2AnkOYJ>x}r&(pun$!uDoJ!l*n#+kYT5wqe+(-^WT&q5aa~9!v zn76m`#BWuYY!64J_`ci?WXSgW(R^}tQZdDRXp^WxAVEV(Lz*%KT64OznMst8Q+ZYu zWq#u|an0DHJc|KXB_PKL0Niz>q=cvyBwMaUiboLKo`n!->>%dBb5b+@!Xn6(2Q4Z9)jC(F4f;MsJ?d&vVJn z$THja{6kF~d+n*zbr!;#-y8QzNzY2Q(eFoHY8es z6U{}uQhE~0eHP3a042rBaei|lidwvQ%8L`FsG2-F(h{q3BRdJ#9vdp8$s*8&`aVi? za3)&Z=${^M-2+CEnGOyd2xuJBM^VflQ3uWfXi3K#l8M4n7e7RZf zKS=TdjfQIlIfuDZbF_0;kN*A}ce4}0WPMu(lGDlzJCF8kto{DhED?I>w;4>@z_Kim zZlT0Mu;}h<3cvHV2u*YVq7J`Z4g`}-%VIztjWePazztnv)2js9s#xDkBbBy`Y+AFJ zc27Py4c1Pf1bJ(G4zGoGGAu>~=Tard7~#s90M|88IR3VpY?DE``E(HBp1%=icrT#2h$(VVQ=plS>10N;{nO(u za2$P(oI&~GhQ(ZIRIjtp>z8WjZR<=5;w=Mga3aW9T{&!q(P0o+L-k?9hV|UbLaC{A zPqtB`3@gFvpUW^^{=jj4|NB3rty^A1Ym&O-;~cz9c%H2QdXcBsLaDo!`;@pZW~ZhY zsVF6{d%yofe%+PtxgxnSkLT|EJn%0KPQSBr1L}@w_ zpC-tyWkmMex6Oe-1H=sy#>iMM5EcWd4wNte6BL-I?lEWMZ%{O<_ za2zka^fJRNaib%px_uxe|{o}DsPO$QF_r#*Z2hIK|65yvX)Tyho>)IwP) zx9L=3nWW-rb-X982eJ>DO+fUH4D?4odXzybn>KA^t}`d?Yg(JYc|UI0eN0py5y01= z2ZHmU$^}VNEcrX(BkzI=Dxz~Qx2u&Gnduww`;#a57QFAi`&sW@baqNkH@_!!5ZEl! zl^f$t+t%!j2zpE$ie{4#o9Wm+D6o!i+qOMNUuk;^TMnDP?QL=(w1(9xL-wF2RJ)8( zc96pH*65~*%F6o{)R=%RMd_&nv&A$rPnAo}s8V|Ab%Q}T6?+ICuB#nGpknu;Poz}^ zJ!#so*)Bmhsk&qfft_sy8IT(C1LEYFXP)u%7!wRzhC$I(=xx*BsiQE(h%|>7x@Q%% zRzxcu#!M!j5z*mzkO_ew2{Q~(aeO;4{J17?q%eHoG{dz9zZ4!f+;9WWQUC}5rvYQQ zb?a7+rh$&b@ge<(lhAC<&`Sq|6C`;cHpDpsa{TnuPxCcLSqJrZ{9FcP&uUBDT6W4H zn#6U5p+sK-{RynIKzTKyD*f6v?wK~V$jFmcCyjPlXBa75KcJ%!FrZ2Q^wU44pZw$} zbnUg*@-@;F{LP90sb+k$#5D>!bNluk+yrOY=!tQ59+#}Wo|Y|NMcX(3Fv(cb_o)b8 zq;gXS{8_73T}_hWj|z1scS9U^dG)04#ZkoZ@jFSE@K(rY=-wksRU&#Fh1(& zrU~h#kcE^=8^cOBc{ywlA*0S#hTWJpa+HLWukKqWFXTbNCBAP0v4h4>NY- zT0i;Z)6Awl{Qjk)Jt`qB+kW2G|0%Tqgo-8&2;G1#_A{yx*vBbsKV*Bb-0R;q7;j1e zoFk?T8w#ZSES5CZZRlV(=@LwEJi4rrdvfiBN&`fBB-Q44^iW)$&fDY*sr>@I;hZBo z0;Gp(Y}jV|kP#ns+LX77nmv!+sRa|B-_(Pg2%_8wpjk*?9m-2&aLvq{!cvvhTRIF4$>X=V3Dm={m=Heq84&{48cAZk>Vj``-7y z&(rHDZAo?%odXTnXH?j~Dci-%FK=g*5lT;EzFc%qP9)P3*OWdl%Da3h`Shv=+! zf8%F9!a4cBu~}cEy^Pj8Ukx_Me~w7+!3Q6rr=EI>5mhjh7|ujAtefNMvq~tQwNOzN z8Cz541a{GMm) zJaCPqo{h33jvpDOG{^Ot=KDm1sq|~|^&WklOY2)Hy>_?G2ow;=xKbtY9)0Mchdct% z6tj^wxPQ4x>`+IWH*ewh?~Zj@n}?~==Voa06aPTFw>`m@bM+N>(uQk3!kLARhWXB_ zD!OFd&2-hxKSyKZQ*`*i4tnzbzohAthxyt%3Z1?agL`>fqm0{*wi*qQRrEq{gu49)Kc|@8ilf)-!H&a`_!)uH_;{I;7p115MvdciH8LW zyw^F7IJh+EbJH@CZAEG1=MKa8zyl9*xdk^WP)>;YN(ypmltf|3Gd6|mP=?gd%bZBB z*ndb5(i`Qz_tBPmlc)ThyV5b0eL^aO!!hD1)rm-v+&QK#0*3 z0x}Q41JH5cJZOlXcQXq~uML6%WH`t^@DxQ-+=%`8S=#dC-Ms%+t-pmeJ9x-2?O#@fK-MHZ z9e2HKaZW@3JVn;kjf^GL{Gi6%TTpr&8)GdJpyBj=ALYh%wnLXV+kSeiyr=CzK)hv) zS*%M|`8$BJ?xqP#d2TLlBz7VYHevD0;N z6X}Sw+$8!eqp2K6mq{j+kwpk8r2|Y<#h!{=W7B{zMkC|i(@nUa;@$|vc!aX!%|6f+ zzx2{oOo>jOYYIPu!^QcCY9Go>=#gA}@uePyUNiI<#v4&SkXoqa1x%++vw8ux3Uv?@yFk$es7LeZFnDT zy!NN5>U8PgzL)5khyI%8W=@7VFkO=C`D_;Z0Hi=$zeo3M%c!vw@+&}@Qh&Gf^AZXx z2La`?jHt4>jC^wVv-uXj-O~*XQk+-@Baw&*rwI?fOAb2{u=Y34r=Emo1 zZmQ?C|FoVS8|#D64O9@5FV{<($St`^MsXqujfsM{2I_W!*81=32+eYlp+3hEGLW`; zkUY9U6oL#O&qqa=Ocvv|NMh*r64 z9)G@6y-$2Nd0q{6u5?P>gj#cOY(PIrt>9p6uD-}6EK+x@#Y)ANu09nH<2 z49H3&vejIk>r!vtL6+eF1&9%^S;ey%rCw|)vlu>kPc7$dlKrHWMCCdlzyO#=1gauz zH<>`!?*%9?Fv?rr>I`HZPd}Ju%{~{y!Aamk!!TjPIpbX?5vUj%F*2Icx~;j_hPE0M zspy%JG)0dkGwD(Yk_6G7tjqC3>zK@TwuiPZ*k)UUx% zAbK7+PRvv28#(Q9P-{~akv@(I4ql+9y`IwwabNcW-;mbFmRh*eaOtukz!PM3K!Bml zf=K_u3ol>=My;?W>Ab#qB;AH{!M{SWkN(-VZQIy@W7gnoJrH?|(L{!Iw$M>hij#dG zDO~IsXCJtxD23sAKHvwCd&#}NqGQL7)58xxOvc<67>S1s95ynvH%|F1 zcFfIeQP$8j(TTkL-1m83uf5{^+%UI(2IRG!&(r27{+{M$-|%Xq4k#0xh^fLo<}}=A zY4Kv)fX(LRzc!-7VQ5NfVerjo<1`XfzDD4Vfl>qu09m+utnVGVQ8Lv=H`Q_A>)s9& z)&}2qDl~R;RGeW03=Fa>7j#s~D%VkN4yp}ew`?O}D|ze`E=UChI~ykb-1P2*8w^`{ zAtO3M<54bnzWCWdqAqLUwexdxTqZbj_;AwXN{0wb&9Wwf17)j+9(ve2j}^Q@Tyry} z(3U7P-<*z>^c6NJh(Zxfx#vvKX4V-PPm?E>_f5^Iya6v*k*GNdN?q0t;sb)X7upGkMQSQa>>QTYD1}XEx!{^EJw1~ zcl1Jn(9#^HUQ*$etq;)B^Dd?3D>pe3*x6I`^7G%P`MK$|i|xD%2@k4J)ngywGfT5H zZG3*Z63|9lG>B1m(43Bj{fpCo;e{8t>?qD6=haI;gI|LW*zh(u5VL_2ni1Xq&}g9u z>6Hd4v>s3=7a9T$`_zk(romOwxTZDUDk!gi+U~ zpb?3CtS$v8`P)Sc7t-__Z*VF+Y!)QKXH5cghT%izf$v=jVR3_kM2tw@)We2{B+f4j)MujW=L){;$9Rptne8@sc_l=p(TfpKw8WP<-i|76RSlWfG`1hD>{ zPFFb&lPDg#b#&!LI1wBHqGq6uHg4P)_|@JF1lC=PnvNYk#`WyD$4++PSdWwp!Qt&M?|o=WW~GpxwLouw*l4V_e@eZRBe*Md6VWBZqYcI_sk!{RlhDLH9*| zUyu1~!;Nm}v}0WG8UZFCPqTgYo9~aT`oOpOY(9y7qN$RFHF?cdMRe9rdH4D~nw^_<6c;`daRz3BKLbV1uM1)LT05O5gy9#3S1qJ8etY!BDXf+CaE z*KLNIMP%=?mpSTmW_WF#GnwGM4afKV^P72{F)QKvNrt(i^!<*t)ys$~1wIYe@V@*0 zkv{(MkMVowk`0uQq{cOJSx@bqR?U5iCiRY6Cp61fZG0ae*PiW9(#hld8QQz-{55p# z9se6W`|w}W8z&F7jstLM&lon;rM;1&+?w`C14oETKQ9kPlTrv3sqj4b#`!xI;^!FD zf&CHNz3Bvc&dTdQcHQSc|M|{e{^eix-x3F6EeI6N^0c;Y6!g;uoN+oA;+Q{QeRU^Y zamD2gYG+r@NFjmciOX^nl5^xVUz5|hmv3$uwx9d-r`|GgA|1I5qEIO{Kp%bdQI68k zNQLug_B;$}W&llT0^GW2eIToXae)zVb!o@@BkaP`>uEIIm6g#*H0wm*!<-A#64cwzv@{fZV4VhoYMY+K zuxv4zy=e5;PWL!1pCdAM01{w;WxhktZ=?<0t5nb?@bq+WFEW^wP8UIH-PamNs4Y zaV~3JcgL^NGY|bYI&o}&A&Yd^9uBXqFPE3p2SJgeQmPrc&r&C18)f*)pZjBvJT@!Gz3D8~P56Pw{PkmV3OB%%XvRS65c3`_Dsl$=esG(3YS0h$h6wig=bxuN zdtT#A3RwsuJY*d(@<5h!$HtZMGcF>{2M$Ao8v8LNsZHzWUUWnS1LGRDj-?mn4t)LC zV^45@1Hpu#^I|!)PCK8}GRFp#ZDkRVzWT|XO;2DxKonZ|Uu2kP1g5r6|Hg7ZPpgJD<@F}4}v#3-#; zPUB-^oEg*R-$zG*PVNnGi5{2XrQSaL&Q> zi#%LX!ctsV^8FHP*~Y&$4#XIvgm4cc$j(qAk>2E1)ec%O41|@A6zLb7O43{3iP78S3ry&{w!7=pn$#Vn7iFK_NtG6HztDMfI)ZVh)FhR62VGIVBTZlq1-m- zky`@!bs|5m8PBvXzE%swjtJcdhypUBIIdf7y~P_#y`NImHS8VCggCv6{cK!L-+>64 z#+(LC#OTgHH3p~m9yljlNA$P257#M|*`#@n>x~Fsf&@UQvEFXL%?x_QglTSWLcinYYBSX}bGV=2)-*Y*A_nz<5%=8SMx9mJV=Dw}y z>RW!EE?#p3XH45S-$&b?|3Pdl`?9M9rF&ofG1dJZU3v4TY0;7k=*GJ~M^E1Wbvklz zmvi#-JwCS8Yc6X=Pv&&=ZMLa2Aeiz~m25>b6A_WHM;>{Y?`$L8PISWVlu?O?}v3TRle?wLt-#*F6 zGdM@|2TqruFuxJcZfUY<*hYQenxQ<04BfE_bQA6>+50-Xfrk0MeXntb3g_V@6y~Vo z=W`^p)ZA1uO}%i@B3iO|3IFRR+Kn$yukK? z!un57$GMX6@tXGR*~j(y+irUw2PE8<3DI%i+Y)zgV_k7A(APmj9z%v{y}xW>WIO;^8wyyht_=5Gg`aBCNVGnlwox9S=AUI6D|}7!^dO*yzGeDsWr( z9Al_5&S&|G6?DOF$A%M*^>mxmfU=?w^g1Z6(deI?$SBKC z?yu0yvdlPlp{^Htoh3_`a%mLDyJqbg zI(70W?cKGN4j*`hc5HdDwa=ATK29A!NXHNFro;QU(}6uNutPj~^ceR(KJbC}D;5V= zs&mAa7c@ArD3j7|XUiBaLs9CLVm)x5Kl*!P~W{(B_A5IKJb#A)6 z$Ni3!HPso1iSY@hFkgD^QvMn@e809~hQmd_ody{niMmN`LsW)_Wp93toAN8pcfwVN zj~r%-l=-=NuDw&wMVb;piOz;Rz|soiiyJ{#{?cs0)qC;&Ff2IN(-|<-I`ovu3!Dk` zR#T;uuaDRLxmPF3vB$P-QPwzc#xd@@^m-Nb)H>sDr)Q?QL?#cw zjDavigFL@JLSuw~kpP1W4VfA4D@Q3a_yDt?#9W9(siL$ePuc(Vo5g=)mr0 zeWp?SVb-chL>`Pi25yh+qS;epe0@$HJI;IcpMCJBJQ$!J2`JNES~o=%P;H}1nkzbJ zVYJ!I3=b6}@WOrTsxEQ%L=ac$+(+)TO_;xOy(qiZ`-ScPYOrDXIV1#7Tj8Ak2aF^nI@OcZS z7O?Z`yDn*C8W+MpHc;8P>w!!Ju+OO5ZHf$~LdXf!k?4Ai>ZoCO;dn%3Czo42oyYvy2r>wi zoHT1RWy*u3xUewSf+>Hg9-uS}rwgO$D0O0n24jl*5!pDd!@BkB7IYw`L$yLR&tefT3EWGUum^`H(JNaUfbhRhF@XTNgCl1fd)3`Hn&e(-}IaBwO2 zK;Bc;*+)KjnD&8_Ko(Kme|q}qAJ2|*N1YBFX%(`j9LJoF##1(tPDMnPY)F)PuqiNh zFOb7HrJf={()x9sU8oqLrgRKVahFsCiB78~j*S86DUKPLh=>Zoc_6A9<~&Mz)3R{- zn!%}}G$ESSdFe_=r#J=-4#9b#bcM2&I1kP?LNw}16nIZK58U`L;xO{~dTeaGbqKDZ zBOfT-DfF-mJL3s<957~o1t8k|@sFPg`$TI_2qLNS zKme4>K>Ua)daV{X_-PXaQRI8-6b*OVGuOcohbLK?E+Y(j;@GinIF~%jlya|p4&DzL z@GHc)3 z0s*4}eN%8~M)c9oZVAhkuOwqJtx^rlXcSgdUDKTBjO)Z8O8`?>ePI@C)Wt7M5PUP~-ub?ekHZ%TSi0(l9eY#~77oF8KH`hxx zA`Ar_M=A(a6|*|PqF;M$KiBnPj9^rZuL)OG+V=p-AtGdlezU$-Kjt}tJm?^35ZEw} zVAr{F1?D5L&IlBcdDMRTIIOepSAmKLh6S?`y}G8!iAfG9Y{K#&qG^3UBSHyUCtqh$ z`&P~mpJyi~X?A9suOTuWY?PB;Glj8qC})ugnWQdUcX(Kxk1WrO<&n$wTePM2X zj$YgM8om0;D|F)c30l2oHQjl~ZM5{bHmm3$(NInQg$!1)A7~LUM>gn@ zby#n*EqXgnrod`xW{=up$nf|C%_18z6_-=+nm2&dBF|34{-?uE7RQU)d|l7;+yZ#B z1aJ_=$B1V{kgaq&H3vRGV_|O~^MS)f84Ll?n4W3MN=Kl+K~HV-3tKoax#xd=hs$ON zqEMn5;|!`#({D_3IS}_D_V7g)UqpA^bvs>l*{TLdmGp%0#Qlft2>q)_!(`Rmnk`6B zmO5{*Rebm`LLQS)fBY0W1t{ZHg$lVLP~bF4?2-9En2uJCFXR)7Sy+nMqadP zaKB>@BWRSyG4z7O2|Mke4)=3#e#pR3ih=+Yt{HUUK>;tpNsdaClFzl*T|-x0{T@b9 z?%cVX4(vY=dSDgz|0Wnd4VA%Fm#yM*mPT6TK@uDXoEb{4a5^{Mcw;NXIHgk>++1(l zGdlBty^vtj&B)oTC#*>yZE?t2pz#8qPW#HdzU#j5g)f+|eeG-ZtT>RWGF`_NZ$sOp zGzX%m#+wc7X6B*k6L2%241|S!_Sxr{bWacuF|8K-bJb8X%=-evc=?ev+!}C9h!KEX4A>=lu8|&7*J09>y!gs z31u9$=T4+rALky&LO&U9gK;ZOyY|@txTus88B>!?;^~dv&wEsLI;o78vT>Q|xd@pV z2%O{Td8!OV$aC{O-{^Him_PpUvuqqd#3ypNIp(9Tom0Y;{ivED7>vXdk7diwJ?m@& zgOGLl0mB2wj=)9tRB~NFww&q+i$B5Fi@;^Lz~Gh4p*=)G&5BG~b&K02)Nh7=}cH+|7pA2C=17 zBjEUf#zNqS*M9iJAELYOzMK1}r~t$uNwm?3GUD60H4H(MLk?EkR_Tq~#vJ=UpG^?cs$+VWX%EB+DpPK+7WGFh5 z(Dia%3lBF5#hH-kIHbqW51)gQ7RqbP);lrTFi7H9yIq%U0+@gjBQgbNT>1_EE!RI- z$YrQzg#GqEMuhmG^!ewDRm{H!?; zW9VE*q-dzEiQaS)Wn#s0U5=6-37~kWabj{66Us>Qono4!OpxIn&E%^ae}j0E@^Th7 z!290!zJa_mB{|79=G;-gE*%q6V%&@l&RHdnLr0}}Af3mJ2!q13DWJ3NjQim~-%te- ztJ`s%gUa<#9MwoutV?RM0=pF&49i?cl+iR$q8FbSmD+J*xe`V{G?jVd@~Ew42ooCs`<|R0;E{i}opj%ckhca`c_^U`eSe>Wlb@ z7sxN)e+x)Qa8q?VT(T77j3^!f9ALdV8h6LtNgBv*i0~j?cG+cN7UJrwujc2d_u-)X zw#^BQ@?K4_Pt^z>wcSWnIqQa9f(<~K^LyX>KA-2>wQGYjlWZe}|E4@wC571ZHIy{b zV`H6vzkk)~W2$U}4qYGVi1j)eEpm zLF7busWT`Q8{j&*e%cr~$5Mx;y7V?enWDBC47M4GibE0Sp(9pT)9$FI;CP@@ky<|` z*UPcYy1IBrHI?H`LdTctfb&OWIy#*9f9(^;Dtu#-RX59(&Zwi#FH*yd`04lz6Mt95 z339omWT-K&udJbm#RoB|2+!60WD#ALt}_E!vU{nthXQ)f-{qW1OZMD}$E}Y6Juk=M zl|p)R=rnpv$X41kTS^iAut>jFtO=B5-`cjdz1N_r_LN4cX$wpCz-3ztxlw-i-QVKg z3?Rf3Q0g+g4$|||dsP|LHqbyPqlO2YaAN;6P&}M})|%+3i8&-^?1AWJQ2|R_)Z%D5 z7ixk0x(k9b4ocBt30LCsKR1@O9D z$?l!{Kz0QR73sO8T_aAx~w} z9J(F6&UF&N$&K>JQ!FbsR&McI^85#rx;xO8>!;DMy% zHViD&mO%_FJ?0e&4IC=Xeze`+g9OIXehKEAI($u@efC*;=9y=>-+?_X&Obem6hY-G zF>Nz=RUju#t38zTKoqpsc;UdO&Q=L)LyCPjEu|}ys1%l=yVOv}(yXIt-Htd5fd>Y( z74=~BMc`CiNh>PY#lgWUKz!5TMq6ySxAFClN@LO72xT3BHfJWU6I2#9jAUCm8>>Vy zK$D0;VMC3p(5VutZs$qeVn~!5lOyj$Y>x$kbibEZ#8WQU&JzcLsUXm!qqtDAQZ?~@ zUu9^K)`O8(D5V)kr45JIuPdth71gHZ@8_A8!#NOSTF`DsHma|$jHOn;T=^kKfpO!wd-E}pcEh+knXW`? z^zN8!B07ir9;I!(UZ$}%`)$d23>Kdo&OKG?b*6She@@lVBP!W}{4;QV2prMRyyu>K z7+iDBHP>*E5vkU5r&K4<-7<5Bo&%ARRdg23vR2d!sjAWBZAY8~DeIu8)7>T$rZGh- zk`&_GbS^Q~i+_X70!%mRpP0bB`s!=A*)E>h^+a5D1e=HYt`;hibS_3N%_e(Zn{2Cx zHVGSJvpvts+9IP|&R2}3i^|5-M6PLMB6z^Ch^_|1Z@nRr{)dzdjMT)*hMs}2j>1V; z-!!M7=U%hZ;C=&+HGmhCq_DhJmHl+@gNLhNWa>I;$YaA>EAU;VLBYmQ4TGtDh4(^( z6hTA8{rS_l0Vl|4|{L?&ii0Ps-b{+9bQ)zmOa zwo$qUc~(&h0=2Ayo=?-+e^WrO3MDJpH}o`N+tB}oMot7bL?@9l_vT2fN@;*pjedwY z4tEWz&^InM+TCZ`v*SR%^rbI#L9mrK$HAjp|9!S#h#fE^fT7H(%StejYKQBqj3%rHo9Th*AIn zjlGOs5Djt;!vyEiBtkUNJc={Gdx&wt4Xy_^MZ;S6Z~XtFxR5e1tPc_4yUp1V&)zD= zTAF-SI%parSz?q<^F~k4P3X#<10J=lXT7G$EUj6ymT6Z?V0@dQ_=7pBDmG;M_U=yT zONKqfSxJAYZJmiZpALsW!Og-{4Usn4mon%XH6G$RQv-FURBTG!&qEw1?#&vhRag}1HXl5Lx`?Cay8Pr@K zrQ9_PB%`^kV&>}j$`CmI@Q3$tpafJG23)B{$uI>w7=N$y6KCa|NI774!@)M`lenLy zw%X5@to`B_zu5hYzxa#Zo6JD$B4f=|Cqj+C%XLOdNF~r+Z``Y!*fT4m2dL@!ielK8%_T z=WXW)dLIgAqluJaQ++DB8h1T_oom$oPn*r^++YR=lScvjfRAF$(Byp)ThM zaZh703UQ)#AVNy0%U=1c56U#hj-5z)4+)f8^~BN)BdE(oqp29Jk*(JJw>8hv3}5H= z3}o;+%QbW5EL%AttJ=5>qyid?C)3?|qkQWo&8NaSAVG4UDa_C=bHlx&9ibMMYrFSy zxUy!h$TN&)CQ>E$PFdfBiWLZHpvy7hJOsK8b^(ZHfk*GAn{G@9Crh@ad5qLTU6N-O zm6x}z5+s-o+GGwyoK0QZi|e|^bnekNR@KSFkpn5A<{o7>$pu=d&x|jY^)VaPKL4ot!dJ`b0IoYNhj6YU*Bv%OXCSs ztSITglVd6w!-3d@TAw>HR=yVRE@Zz&0kIva(f0E;XE6*fE?)!d9}zXB%@HMQW5e3_ zPu1%?e(+B;y14{_?<F65RZsccs0rmeaVltV zTNYSN)LbQJAGMG5esn_5!&M2192RJj;{m?3liX^qPhoLUEnR zhH|Auu|jFmw$6fz6x%Dh>>XPv(J>1BD+CLJIGpfW1X-f_-X=sRziTT^4QiSXYIf_U zd7fpo8Tlxs&}HcTBab}7rAZ700-~$?sd0ca{Wo_iv0T;G1Iee;Q?9J25n>g{DahK2 zQ&~u4z$Ns`n{pskWkBsamNv?p@Lg)K@mhtDD#_oHs$psZ!`ST7&Exd@DjA{yatWe2 z$BrH4;X`=z%P-#)SX!NqbInnVlXi^9hDC4}w+<<0Ojm7azL(P2+|afmy7CQLf-F0s zo+$2VTr(P zm=Dl~QYN6q!FmG}#(dY~k3Y`L5tv}dI6{fX zPnV`V5-RC==wp@An0Dfony(21o&A0xGoiq6?V9N}^wZ#Eyxkiks)y3LkAlM5lsbxb z2yVm{w>8wujrHhUnqn($JVW_VBMdAu56q6hkw8}hr2=^Ri!Z)}ht2x^bl5O*XGI7l zZd#pD#RW?h6HDo88+s!bQ!3RnU9?fPN&$zg!8R4|9DFk^`?0~sCX>=eyyfMcQeG>m zlV?>N+mcl|!%#=*h&*buX-C1dJx+(Wi5~{N{pA@I;_)RE5N|_453}{v`!-hurrI%jf2Ld~d0p;>=q8({| ztlR^M3WH6=tPH94!+Dgl6_gK&%%(TxK)&*ouYiSjecCiHiKa9~n{>0iMYtqu50tyW3lFIWkNnKZCpxfwH@;R7c6bPeIC#0WO z9>mn#VG*SyWgx%7Ox{RT4bFi1k1#3+(@iN1YFme%M3^7QH?}d#Sa<_rQw|K9868sX zX>pcPJ_>J(0HRj4w`iss^DybaR0JCIdZRPz%3vBAmRS6|ZTN6!}*>ad}K77?|;-&om8WS%Ha)LfdH&Bx{ zMwm=9cOA+b(pdGGY1#m1!DMBWtU^VpK8GDpZi^&}S({chQ=^SZ=Qd234~QiXlXe(F ziAETMU4wkAVPq-DDBF-BVx46oci028=ipeo@WKnZByu`^41MEbxJ?|$uqHZwEv3o` zFVE44ah=otZFK618M1OMZOlZfR2o)9=7aW!iKWMM2rm6ubQJnmbt00K$gNsOgA+bk z_HO9Oq;o!&Qh2LFC&`RLdT;A&0M{JweaE%dZ_HOn*~XP)O4$ZAKBEMX(f6(1b0VWF zJYQgjz&z3R?b~^MAuxyLxG)V28(hq@#WrUV*QqW-e05KxRK;-3a!RgoGhnxR%wmnT zgIRfpm9Q2%2ye4F)HL#@)hVPZZblJ{RmEYxc5y07dLVjur|lTYldb`^1?F8ep)o-A z;DZmcu>ln`q6G9y(1e#dqbr@*h7l}7`+2}53%(jm@Zz+J?s6$tavg`RYd%)T~70o9U)E{#BCY^1t;s9D&Z{xNT3&L=C5*fT3|q3260cn|<4;9{%WIL83klhetn%ejeY|8uj}$mQF>ji zDhbya>0*TZTHC+a7_)E?6018T!UCbz(q_ZlB%)BclPG5ngM?O^b;YKqPGhfJs6{)G zva_RbV?wA1Pn5ARk&JW`x&&A(3@E{=pbUl#22tv`r;pI-tZvTbR1|um*fnc=>?}Z0 zfD{*K4A8bCT7h%Ja3s=P)J@Ahqxi4r$me*XB#I>yBEh7Dlv@X>hl>*=6A2Af4_V&R z7J3~G=UP)Ex}|KMD`X=wA4IVvmr{rK*wxtI`)>n>lPc7>v%7cMS#v{5+946I4MbuPupR1bSvAM41FLV#2 zZmu&W@R+9dLDco>@I6o}VM~o())|Hz0$ZRr!nMRb4GDx5D^~D*i}!ItU0nr7*Zb8r zvKy_#qI)us4|c2t2bdW^WFN36fuaIf$4M_}JEn&g%O&j;^=Vr()?tw2CRl)yo<^LG z?-y-xvuvK&wWW1!&p%@aVy(Tns;a59>1Bpsk(=eIQZ2Il9@IjAQWel&?U_rnFH>g8 zM2d-Y6I@Gjg9BrZ2m`w0fD1aN+fGpSLo*&x2L9F!qIH77!-m6qAj`qL2A)E zmgGd#EBXhK6tedCc1ohJe3K(ff>AwnYMMWno5>J@>U0|sJV%J8Zjde~B?cRvhcz}t zssi&X&(*2khBhFHv$AR9UX{+c2f`5I2<4S1L?SkszDAG2mG>fwMoJVeLUh3ct~1sM zjd5!y-mwk@0$i0#NEb+gQ58nZ9RSP%(05iT(-s{dI@)L64ksX8Vz;wIqs zqt6vokEa;%{gU7YRJ}WIq{beHimu4_Nh~#bM}j2lc=VX=p9r@XYn(uz`l5>(ygwR| zCF_UR!@0va!RrKG3|-a(24S#3oCabIj2>e1EFFMBvKBTfxI?)!JDvA+lUH8TLV!oBAEyiv<)hB zThL30J%Us_Lx#$8_JhPagV9KL;zFyk_K$LQH^68%U61TN2g*qGcnc#$>X|^rUtPvABl&7OFz`g zy{b+(kVURpvxbd!DNu;BOOA9Dy+R4bBH~KmwpB8q+3n)r@k}eD*`I7{KIe$39NZEK zAlrKwI;brP28EN?mw$|%jLA!H-dy^^U! z!;+E;>FWgq84zVrxy?om2%i1$vmqi$T1TQgZ4LDeB2GYR>$Nu$k=4~EXsH0tiTkbL}gKE6l{A0qw4lO?q*1SL0it2A_k1ilxSwI@%;}8x6TUVF9$@fpAiT7G{jC~yB>jEpa|wD& zAijE?-S;Ve!X{*i;aZSwuCqzkxm5FyDwHm;VUeuLa4$h$iMnmzYS4_)q}E#rZ^O}%ublrG8Yv@rrOF+&6$wFWwAUn(u-YABin`; zsi91kqB(4%v8+oqIXqaRibxURHaE&=h@f>OTNINNZftP?T8xdZw z-_r^ai8Irf9_jsQ6jm%yL}L;sl~X5bw3DT@@fwHNJ-M8rh?KIiAv5pwzTJ>tk1o1s zB}1-LG)@{ZqU3< z?;!#ih~5C2x1!=Gjd*Eb8!unn>-VBzG&bp5)P)hXK&wA!ozo%okjd&_XwfR8;D}>`(vn zKh2+(12M)dHpZ;X2k6@2yX8spL77J?XWJ<>-phoHrCMTXE+jvWoNl0P;IH&OQQ5FG zGZRYmH&P96n>da9_b8Ep)?G>iZBo3r;a06$#kBTP)n2WP_Mnmi z8|&J9gJ*+%WKx5YoMS?a=*^MIibd&=h}ti%;SX(W)WO}vyo2C^Jh1E4>R@oMzy5kQ zw&HM|L7{}o1R2NS!$(+OTnHycF1EcaG1#%Rt#zA&D9I-0KXaU3v-~;e)u1_!p+d-7 z#JYU?c{m4fy#cl7B!MfMpPh|+%(?->?pW9BfY<~i5qjrgowNB5N~!fD^+>kPq%y5^ zYozO(OzgXR2owJO+NuFk$NT0=ud}??pfShbZz%wjQVjMuIHW}TU1riAWjA zbpEQ8EwtbBG;n~g#4@2vXr;z^-s5QNd8FT0iH#{`G!cGVViQl{yOBV#S>ed-xJPqc z1YbZzhfcSIwVcQ-$)UTYNU3xnDLsiPPM|lP$Y7@sZ}e(FkHieDMdq-#Hh6Ik_oE?1 zYbBbF*brAYkV-{$4+NhD!vek>f%mq}o*){7=*;uaKd)-Az5$Ks)Zg$jq{yUywjb!* zjT-)Q>bCs^V(EGqHse&HpdaEIq#5YOm!iVWrdnrl$jy2K@1oMa>4yvihJ*rWVV))@ z$LZ#qZ*HBs4fGgw%{>pG>7+4@^Pb}24wL9XYkGVtvX_>7d!slAiO>gSBdFgy^xp){ z%^hZ^B7L=7(Nd1(>Z`A&haY}~*N`0~Pu%xHxkvUtuk-9Ic7ZdjMooT%b#eu627r;mzr*ue zZjjbCc%$0CHwg_;Zs4hvGCi%#wPhM9KxBBMyzToolvYZklFotTG)g6!cfCjQeoX9x z^o#v!?`)P>TQ5HY2Vzze+3}`~ZF9~e&prky?w!-s!eqi|tM^Vaq!sBUh2d5g%k zN(RyJi<#+Z&P*Kad5*5Q;tJ*tN>O#`-hv}V_JQ{ncrW?S(85HT?qrmVB)^&RY$FdA z$^eSAH-__)*K>Brf>b9Ns;f&`d3_$`N({hm+qT`G+c?9^$8dh?bvS1M6SPr!6~(fw zx~=NSg_UQYZ9x;2=+WUMnM`op?en0NXlZt4n$co7POS5V7p|nMuDYraQOC8xI^&)Y zAt_xN6}Y*kk=JFx!Ic7&us)Pt6W>#ZOLcKfAnkFOOmDCiO5I$|OHOT3Yubp9RcaVMWFZlKL5X9M>jWt8d*AzBFF4c>DX~^& zG(H-aNp9T$&5cT}sM#Y`ZZ>IbZ9uU=~g!7iCgJ@&??|!E*sCA-z)yK~!Ez-) z*c)DZ?X@C)=|V#dP_#EIfx7UlcDdEfhP;U=r2tMAiT zcbp@L6paw)NN`M6gVX#S%wQZA3hYkAEzS2JygFcV{s%+Ab2_5g3dac%LwG7lncEv;E%6wj5- zP*$Snk*;gXjim_?ZDF0!+roMXmAOKF)2UM@{51JIXUix%!hz&)>l}cCfMDm&ok3_y z8~IocZuU5IMwjdMv}Y!^5ftX|>=Lz6lMBrjO5B68IZdl?TG3h>!kcGoDJw=>udhwR zscHa9VpXWxaM})ph&JjO4b9zCLbH_10#wWdataWs;S*_OfGtjB=Y)$IxiQ=+(Lg8F zl&Q?iU3KD+Vi`kc3EF9-3VG3K=$=XHM4TaYy5|vUXNx5_l(0Vd!Jp#K5lV5q9JTNO z!6Y{eXAB73 zfLg_kVXr}*Aow(z2# zHrGa~9K}4)^$f@8@g&i{aeLBbO->XId-ju`{3JKeb;UpjKLUt2apE}B00|dWYV>V_ zuG0H1Rm#kD;Y|Y?Yi-VJ*K`P_a#Hy-DYFrS6%o@Z^1)nL&GJ`DI9bkKszQauC}A^G z_<4{U*mznFX?+u;|MB|k`xA-Q5?mO^bJtyWF(S($mmJe8qEn&0kl?fO zH}}Ft3mu*KfNN1_IuCgXqf{5y{S`S!>_ITB!Wp>IRh5wOp$7iOsgryjGUb2EEw^y? z(Kd)G*$14_%P+s|%U9A%>IamGG;3uzQ@+4SmYrq|T>bd|wfmlHOKC+elF1 z<~V>H!#el-y&}w7N3GXgcP#@aoKm5a(&b2gepWFCm_QJD&Z2W@3|j3;c3cJql-D_P z9Fz-6X=pET$qws`&t~IeecuD;-0#!zcCC+84@CDsN}oZ++FdCkESIkai&f>nFFB5;2+VLOXL)1h zJrcLbFf3>ezwyQ?Hoz|8Y~CaS{r$yX{0#l+pZ;eL6LpZsXv4ZgTt{ z4N2}jSjC3am=DQexG4^JP;B1u%)xM2=m7{#N$9!s`*h^cp%7K0F^p*RSAX?a+1cnx z{~Vlws1$u75K@BpQXH0>Sf&uAxAnn>>Ar|YdESr9BhI#9qGSYIBnmS2}PIo%Nc{RQBeEs-jA%N$rt;l8k4yQ6Kuj|xVf8hGjEdGTEHl2pu|l^a!1|dYSH|&;*EFMjV zAt*1aVNs41)(yOkaTetmWu4Mrt(yBFf8782>j5dFqr~=YYhs1AD?&X`?roU5pzT zbY(;y1zB0>GLp1sLUDkwwzOpN5}rUlb?Oo}GD2Y?n%26H0;BrL zPkx+Uef1T3^2w(HZ9RzHEp(+O_oihOX)5_+_6?;bYt#Jb|MY}kJ0XMUPK_`wephoa;< ziE~2s0i(Nk@se0}>pQ42t{;f=^60aqhFNAfpq7leImc8gp)|ivtuM}%=XHF*gY!Wj zbDb&6iiNLCoEDn((Ba^LO+oneV~G=`x&yDjPA5;C@EY&4T)qNw@aKR2 z=Zn2bJ<~8g-sN@Nv113Lv}A^+iI$3it43orokTw9XBC=~GF_iMxGYsBQtI|WL&$@M z3H4k_K3SdvgtUxAsobyG8sgrLG*7S}+G%K1TkcpgTMs`0DDMj+IS^yaCOwCgY1w31 zNRFwF8X;{>$Dx#T);8us+6;b^B#~O#EK6mrK|PT{<%qV1YueXn{;c`>T0J9+CyWB1 zx)7~7=bXhfHdZC&4fpy8BZkBH!WVvn4G|0sHa3h0%2fMbe~t0>oo*+Ah>ndrI4ZIQ z%wZrSnVp$s*4L!ruWmv^sWE|*!26&qv0!R}rxEF>db;p7S(@+lXxGl2G(G)>m!Ng1 zt6Oh{dy$fkC5Ahoa@(1;~2(>kd>=x46H zh91UPA_|6*6YBgNvxzx?HZnkzSzV~^|c$DeS$Ge0n@6&&Ll=9!vlIFs_sN9pg&HbE1p zNlrK80v0xGhD~1K<3uCft z=c}QPjrYd$>Z`A!uYBdV*@>m7ne_VNz42KP|AGqKl-Gi=o-ER9IvneEJAc;e^=8U9 zHx1k)ZM;~6c(YP~LpckHWlcLdKR^GavGLxLl=G?LtP1C~di82H+u}ULct))W%Le$1 zU;Hil5C7p$SbrPQK1xY&u2^?uGK(==p+FSIBbu;g=u7qHMV??bH0EosZYTjllw9`f zELs{K;brSs4y*m%L=dv`)mH+gKHe9fvuf2P^t-?NuYJ#|PNu4LHYCU^AnX9$#kt`4 zxW84IBm*f)Kg$}F`VqtK`JD1-5Y5RTW!iL@*$m*mqJ~a-$&QtKAWbBgX6V&?SV5Ik z1taBIy~xm8u*<8z`qi(RKmOxCwgVlAr*GfTMtYcc>zmDO8lpf*inheG_C(saiE>1a z)<{q5%_UBn!99;*8OWf?<2Lyek(CU8 z=~4s>U#36%vp;9bcdXHr&j4S4?KRFQ&%fXTs>Vzdi1E_69X~9|`^m%-pbd<@QEJ$z zA>M?k0D%nEL82F*k3a{dMPxSOJn#fn`|thUzh-)RyidPx8$Ah`eC~9{_UTmn?iA@7Nl9F?qpJ5_wD8Pt~X zl!B;1qYgSiqC}($bAcI?rW1=wAGhCr`-HXh`&DIDv}FeAe8ym!h~dwwIJGX3S?VmR zVuYB^iIhF-u#49gX|!b@IaF|1L$y3>P!}oS5plU`>M?F4BANpt3&y3~PcjOMN9-hS zxZ!%*wrv~j+qcg_dVy-`bosqbo;Xfp;}gtPLox%3-lQo<{$pyA2KCN34oB!NmSfBd-BOA z>A-;lv}DOrevjGNs1B&AlfZNG(y-46m3B9)fNIXp}URM(^!50ZDCr+|+5b z4u%h%qA!>8gCm?bhW^XL4?o-+=s<3}?RG$T|Hv3KQ8M&x&O$fU+lCCaKJhTaUn(mM zQ$ifAVQxmCC1{7|4i}G#y^nm>L-Qo*!MEJ0aHLL#%S2VD%e{9Gc$*J^SwXXy!nNL^bUS(y8Mdcm8pKY)9o%GMTpnyyB^M|lP9=A?FQ^j(je6X zcXIC_Tf{nJ-@N$Zi=qGHq?QdGJ9>l-Jk}lANtIU>5(cij}Rl&muX1Pu4R z^2!d{`Rc1)j@f0GP6oQ7pZ@8Oa)t@X=s~?maUwWxl<^*U%3GLE*4HG46E1?gPh%iG9{IJhW897qM;WF5#ZAPW-H3<*|gE)Ww z@WT&J4=G{MN@L8Trc=lvxx+Nko0&%X`)Wk!bcaM9ZU6WjgCwfNP#NIIw>| z9XPO`(LOSX?}qAJR0=wdfB7%J7`UBmL3Ai*+r_b>H1fa$57O*x&(pM5v250_X?~9T zDGymoFVj2xQP=g$bMx~Ljm^#fY^5nyjLQUOX6ERH7q;-)ArsLh&=O0604P5H`Cp@r z8#mE^{jdKwXPs`HC)sIWuyn`vZM^1iOv{!p=bjS>AJ$!Gcm4Ze2E?k+RLBrJV zN}>aK|4{~XV(M>OYlJ0Qf>C=Qd4|zMYSoFjluRh=Y$TSmTrXtaQ+7+!QrKqEBn6^M z$oaG~TD<^Qx)Z!gbhoH%}h4FwD{BFfkd zcXT6gJTM+8o$T7RlbsNvP?W3?0gE7%Xvw2C|EW)XlK$WiexJ1;+OX^?*uYJ(gRbLm z|MnYn=Xksa zVSw=jLJHRszzGL}NC`YkffMeh%Pw0*ciwpiI}gBLv4+CV>zst8lP6Em>#yzOC)OOW zUchV7R2MQ%Aw9%C!8#)_KsLF3+spLoD?8}$p+kNT_551Tdr9FgL$UwOzxhMD>86`P z&mzCK(itf?#g6m-_P4)HwKcSG;UeEF>9g~j^%OVhxB#gV5e*mvFonKp{&!R?MGYSI zYb$3_qr6peB7>9+o3FPcXC#j7F< zZP#Z$JvwygAZHS7aMZSQa|Wmvn&rr5kZpYSv%kpn?0JMGnDrQuRsorVOasp9?z_Lm zbRU*XASTof$5WvExZm&JNAHpcjupq;?RIa$6gdSQ`;K1&O9u`d=0@@zcihhK+qljq znU4|YAnSk(z!m)2SK@b|y}eL8XC6rH>5ys*BE;F_POD&eLoHL2UBYSU6y3syOS z$C`rvM|tX9H}2c?L&~4iZm$OM@wG|e4pU3ih)pN$o7-(0`n<%`d@db1a)_RK>M0gnaw>#2n-S5ygoxaM0eSCxZw_Kq_uTVc zdghsDJT->#%(C4EoqjB@)fv*vCcIFR2BYSE>#euaCqD6U&NyJSn)EMm%2y9P;d`E6 znV+L?fBS#X%P()IUaxj@2XLhRKQwRwIi8)Fo$vK}UnAR`l6}XPvHJDV9`(L9H#>Jj zWvVfDiWKK+P|kv5+_`f%JCWONdtc!Ea)X(5c3-6w9$3dKue_4yF3=ajIzREm6FfWO z`euGV`MwI}Y8Q=tT?eF9zh4K|1fZmDzWGM__{Tp^*Is*VP=PG*$!UnGtg~pgeD}NG zqdj}}(bA>MTKEV z4qWDe=rG;$wmA_RLBwu2-Hf)w&6yXSp|y=^sCU^oaI)_Y{^0lFP`+(U^^vqJVjA2) zy1ADkwWofZ1(m*UK5a0x z@)|*{MCZ~EH}L#?P2I5xPU(fV1LXotjUPL9m{u%bMz`GZ-tap&l^kisbIS7AaE}oz zkTXv|{WSgPM~^aU3%pE@+%IMDY&zCBXb8u2-g(P7%edo?I~W0W{`u!8s%iSh7({K4 zbAev?-FM$j&%dyR=I8o6y8z>ak`@p}GH?i_(e(86qrG156W_Y~8wcrK^!S;NeQNpG z*x0wGrWV}d3@N$UjQKf_I-2DYB6HkS?VIPPgXT=_Qq%(<1PW@ib5-_!RmNIdwb;R&5`DPxWs|ME zYL&|{0w)|Gxe%5qFI5u_LonekES}PRR+sb=eg0$DYWCTArdr1 zVPj)+K~qBdB8wI+q5b<0(t{5^guWFcSfUbMKg;^!aqC7O-V2TGOD?&Tqe#@dF}wvw zvTN5a+PCjD?wg>wDcnmkxeh~e@x>R@WtUw>>({TNOE0~Ykze|TiY1mNWkS9NGJOmO z_V<7P_q6rJmuYr(K1{Ydhu8_{;gDCev-9)4Ke5&xqIcP&->(l@JO3xf%>2JVJaXA5 z7&<56YN|fHF+EE^d1)I*!MO$o1Arf}&d$J(Gc7#U6up?$t1qK<>(=plV_;RvRJtLXmnL;3AvSUy z#}ym|xZ8H`*+=J`vy@A0$c!upNqyFaK^9tNrJ)pgq<@!Y3C%`&I_)j5kMCE9a(JrP zXEWNAlyI@kc9AM14r0J4_cUy={55>Qad?lnoavaNBBTZj_(u8~=OgH3(SdmJ^mBD{ zs*Hagjf}2|fo{XK+mV{#`E;pnq>a*G8r*QQErU0vh`K6!ecPbrE>E1>AtFLi#Sa@B z4NK`!;ChMl?Sh4i>CoY0bnm_Qa^#OJKtqV#^>+OceWRyjkrebQfS$qg`s=R`zZaC3 zM!w|bkG8t59`4NNdZZ36?}O+Q4Sv+^ckbFlbI3f#oWqpQi?#7S8=%?Q*>BW!{mt+E z&u`jyn*;goJ>Rk)`tZlTNkrc;rutnoLhh z6*5ex%P{y1p!o2_jD`tK{C>l*IWeuy&~?rqk?zAJ1O&*2zVVHJpd&|*)53*| zg9@b3_;^@05l~@O+MjUmE%%H`416xtI;hmuoM5M-7D(C?vBl5KOTEL)P+7`iIIMTH z_oD`ZWNAXZ)B|Z|bamb%IoDddSUZrU+jZxicV0n6U#==s4Nes)89dXasuwZVA@&3%lr5N$N

mdI8sDa9j43&b6@3iBD$YaXAY_69spp6x``~jKrl8a z`Mk1YJ0o`B0Q6=lfe&J4V6y1WHmaMhClZZ`^fOZDUFJpr{eJyx_k8D@2k2e;*uMRx-es%TJ!P%^lriSqCdXFP znm|N;?Dz>r%Hf)z&xC6dwPtJsX{e=H+iL9Exkm-Y)M=-@O6^Tw%Ghe-5E)F}>x>B42q$rS1Jo#Hu;9O&ZX) zYbE79krK;uTSa9whhiEM2&H~X^IyvTwOOwz{2aCN|Nh{E5AG>Ckh|`>^JZhruV}|m zswI|cgLy5mt!ENzjiWn{Ty3k&vTKI2^p>2=ptP@fk!_3417)=A`rknVh*Z!Ep~eso z4`}slU3EH!Z*bpCju|=-TYcKO>s98QLjOTZT20Ozlavz&?Mp3_IVf@})1+6en_lYl z$U0E6LMh|E`|hXL_aE`p{v9_Jt+dQ}F2MTebb99G{QUfvzkAQ!57WE+v19v7M^~*{ zyW3j(F=NblUf0%7l%`G`KSlfZzs}`GO!1?fILPRXVt9tlRZ)vD95u9iY*Bg@>pVR@ zL*Mz%J@mi>50kYWnw(s~Iwr!eh5g+3)A-XfZ`8*0O-W~{#Gf~q>3cB5w={3oE)Clj z^ym5|qry%&XINA(gKEQI zvxB}LWjb?^@yToH|9^Ym0wq^jrTgu_sypEokN|N47w|o!AilkKxd!phESF2y-0Qtd z@kL&Z$V1?wSHuwn4eB_^3?d{UAzd93kc&%a1d%~d9)YMl96^Ex!XpU;NdhE5Lb|K! z{QIu|oH}*>$No=Mha?0zd#zsGr|Z#Or|SRr+56ky_aQKP3AM3eejkABEEabzLm)j; zBncf<7WwF7*)&&~BN}oy4c)wG>(;F%xgS6iau9W(cs?*jM+px-ygD6web0N|h1b9S z4W02jTYxd?c&((44V@7^6^sVv91;KhuyK^wd*Y7|x>#0Lb(ln8CX8;r`4+5s?1_{> zSF~>GDbFLvJyK49PCBit(N?qByb!?Ec!fkeXR7)&KovWixvOnk%l*g878o^|U-O7SV?0@u}^BCjDw5DKP=-)yd%)KitFaZy*zS($ihD)Y>C-+#V$@0x2Z*-=rDA7YS=%Ny?FE5&h@NIZB?D;Q z6~8=w>sJ(Evhgi#xpbtr@M#W{l>NT|xD((R?Sza@`-e%@CZ?X+IZvl6a!4t1^1=(F zsSLciQZ|@81y)5_APr`S-mwh9s!E{43u6jTD$xm_X(q<#D=tbQfbvu zD=LnTHdCtnn(BkKF*-J;$HvBftTliAre9yT^_7x9RZ8(1F$AO5Y~E+%H2Ip>>=SS>{Pv1ZhRZ)=_DFEiBIQ!0YpFwE-rvDaVlV?4 z*Ie^++`jC0*t)fa!3n#i$s=XR4`i*Y6kPANCAU7?Y&K6)D!Bx}-ve||sA~lQVYr4~UhHL|G_P%P7;^0#GW`6p|si4^@tGyrry-UoJV{ZEZbx+ikb~B1j-- zopq-9`Tr8pp`i$2xeiu{kEm{sJtoHJCIMxQ+xFJJin-09FO3;lbyxO2cH393iy%kF zQ47!H@ctaRf6@LD>~F^a`r^pQ$e#{B{GBV9*^JPAu%>D?)fwH)XXiU-A`=))7#lY} zi-#Usi47Z`!d`prnNCjCIx4U+5+o4HG`LqU@j(Y^G3CIi`9B|c;6Yq{_0_ok`Wx`j z!)vg4^VTl+q23Yi%M(c5B*>0KUuJnbhUVzljXFt=zvY%+K7&_SJhtZ1v8huJzCB5j zcK~=p_q-NLl_8%*Gq!BmiVaUajn%7Gr4l2CFJh!XGEiD}Hgw--h@2@~C(52A@;A18 zP1jP*wyYhsYSn67d+oKj@y465Zv8V*G?2EjCJyGK*n{b~u6ch`&^${X&E{D1Tg=>8 zytvVP=R4o=7XY6yAEB^y7Irei1Q~jJmyP|$Ovl_Rf+Cza3MQG#_ALotDYv5-zm}HN zVS%SLSA34N*NM^IV1R8+KwFMH@^6 z%Ext6DT|DtXs))K&9S9g>shxgy>UHWq4C?_+`Rt%|MjR@TJx2O)<IqIRG%)vRR?RtAHBBQjRk(@+OFo0 zGgYN|-;AokJ@@=6?I3}c($$(XPWCIZ`gO9YwnoZNfyU={b z^FcN9*$43Pkm2pOiChM`uM;J?_}RzBw3;pAS+nQ^<(}*IUSqooA|hGh5+B|F(fxZd zeJ+a1ph#_cNgK=7R+ElxvTC-c=f3HD06<1q@df8{{H(Li{4W6R&89(=qpxK1Hu~4a z>V2PBwITJ=rJh|GSm^Ua?Bft?fMfn7tL(arT$_bm{4P!$%olG?%<-Ar#q^f*KRn0G ze>XBRa<~23rq4Kj&sweay@?Yi9zSv7#Cl33?0oQZ2CuoQGd*Qv4rTBLBMD)Qp-hKk zuRV85<+b1V#y6%OA?f>UcshBD%ja#xu9ow)pN|*Y zBvlhe!NAxk8-IGE81US4n_=8?jbcJBku$*-DttNTQ*GclV zC5snqw*RM@GiSbsh<;6kNpeq~f_=(vsfFDS6)0Ex6QyzDAw>s@q=BJwkyvs>W!*|j zrZt2uEspTvsHcj!Jt11`L5W2&wACewJ*@NljYK$N_Uv;X^Fj3eh-mk?wiWf%zv_iS zY>WJQuQIQU+hG$4UE&do#GRP(t}SvHJC-U77kJkJAaASkW{-!XjRoKeBK*OBjf*dv zzj^wM6aH~*bZjd#PBoH3=~W$NPJxs=%B2dg#Z`T#t<}QQ&uqan8~=>u_piY2yYGhm zChwba3k+e*O!gSbcq5^nZR*P6Cy?_2%^m2Te|~e?hhMYiF|2v)F|1p+0h=~GhZnYt zqS*X30m;D$u6O@PjEU+kuCI%o1Vv}XE$T*+70-_J0U{*!Uw)Tx*{ zb!s{WY~E+1vz2e^=KZjRP>c7OQ&CGpKr|X@k3YUPB_J9i>*g(6)3Iwam|@;a!`;b} zNA6-+R2}IEx*?=>+g78^X0!Q2t@Ug_d33^j_OAeNqFo`oUgWltgzOdW`kmWVgv$#F zhlMDD6G+b$6GbG!K#DDIc7H$PKHBgc>~nFlWo&Y?ka)>S+Bw-XAMejD2opyaiy6iW zbU)K|^(v6FK1D=7GA=jr2rfB(1ZDmn5>W0}BGNdntFRj%$L-ZO>}NDrGPbeXQg&;{ z=XKcCMIjZSo#U_yVexj?L&RaQuLJl4jmF5sv5jW>%o7G{wc05Y1_!@6VZy{c&0@`~ z0Q3JCt*DOFdCKZ-c7D#iIg+H^nc&i>Q8uMBI9SJoi4(BL?z^SQC6j(1=<-j@2dtSY zwT@-xRGYV?Bbr-B$5Q5av)N83YFM*ZxsWwkWPjDHtHZ3FkSX~#4a@v8fX}$|j$1e3 zRTxLS^S|w*l=|m^dVR*gz~F?sWg8rRZoKy2rL1oXID*bM5Hk;qn zT3@vIviZ%}IhZwT)*Fbh44^48Sgk~*?|8=~tR$pk|FQN6tyIm}_xJa`_AuA0+e0wW?srP1dnm);0@=3Yh&$@5Jq$$RefX6}sN(BZC9tcLxy<}X*#@(C z(Iw64Gfuc*jK|h%&F5*>uN@p1v?vgq4nIzPDT5EkSGtdA1-M5Y6RT}sH z;kTO(fBXCYPts2Q)M~ZAF)%nVd7vX_L&^qzRXU+>8h<)H|JnOe7=jgmu)&`UX0mz9 zCd=zG-;ShBqxA&u4v8YEW7v^eX`wd zf0Y?mEWT{ME;|Qi4G_^>fWMVr&FBAEj?okqfvb{hZk7~sB}~MwEPPDFZgUsEcST(N z`^PX6f1|fwgH$oZWPr*itX#kOT=gNWlJfE8u)`D{cZUbeC*-e!DXgQ8`rzjQyvwgT z%7x3&W5kyPVp#~N+sMM6l#zzqUZFddIv#Ixe}gZ8aP3S@xnx4Woh38R%gBWQ zKgx{bMn)FB&~uZy_ijGo9q+wQC&}$v>o+m;!5OcKItxAns%u@qx{#;HkJI~g+FZ8y zVm{Hujv{YHT!dwWM9ROCQ(Z?x)qQU3?^)jJW}`D4kIvODkBv3&PLgCM13&rC-{0QG zt31}PTic$z|7-6|+R3tZ(mq^kJ(ZcsPTJ(FsUocQD5(6h_oMrMp%??t$FtJ*X9uV1 zPRHemVld-z7<|KgnW{Af$~#k5*@aA&Jkm+4OgY(%VJ}T|avTW%aoNbco)R?o+;fkS z)>+PsPa1qy_V$3tk_UYELMr8~`MQ1mwcF#PyY|pgSUsSRX|4F)=liGoe^&zGrRh_^ z^@o?HQ2hZUW~{yS)?2UX{>8J;KHFS;nAzTs_~lxBd{>oN)2hDovV4AseNyB~COqyn zd4&>z#G+kgR}b1D2HLGCzudFcD}9yA%oD=~(Y5t^EtHep=Fmxd z)l_X(eW3o;!GXa8Guzi}bI1YMc9K^g3EHNeWgY7zDZp9t|KzW=1Ja5K&$2tUf0z1Y zcgI0h$YkaM6z;grZPH0H4}|moc+c;iK@~x~`LExxuOjsoRjZviP_OS(9~dYwDq%dm zt5-&DVo8&~zZUJ^De8Kt`w1r-bjYUWx(TITFGjE}JAiyWq(dCd=Gu053n%uU}D;OIVuqh7y zzUU7N`Ob;1HMHwBB<($ZOWobaw7<_?&#XW8&2P@uofa1F1{C~{a6DG_`-sbhaH%(l z-Tp#UQzuLsF>Bh8_#(48ecprXC8E3hjl#Ug1;wQaEomg!tyI{PIq?;K{VM|g13*`7 z%LZc>=FFilUc}ATwK~zKx7+Q{4Gs?Mm9u?wAU5M&BxrYB4vSV+_Ook6%fW}MymITD zH%faJMY+%1RgASIq}%P*Si7Cv4B$H;`tAMq-I-LWLXHPl-1E#E-}LrxpxwT%)oh+w zuh%|QuMbSfIW#tjGfOPwR+N2w6|Kgi<(LmU6s^#_BB>SAb6tT=dk`YUvYv0XT2~~R zzt7B%E^5r(CgDpWT*1sI5YfByy~AxiQD7kDPHpCGXC(~R_*d!fo?(l)X6-H2ZG*Y( zF4aBG1qid&QIP}+&mMc^7s6{G>+!`tXOG+ZT(vlhT~+}uW24)nyxDWB?rYLo9}3WJ z0JhXScQ(lSWQY`YpWW%p1^5~{R7!k_V;>Z)C}PPfhLPAMollU2^IE95kxz}%dVGO{zjYeaeS=NghbIcPzGHd9Ir)sUQO_JoSdcFRhfq{W~jy>2{ zPiCR#cDdd0Q0q$q)BHr@Udd!q3by}17b~%@Zrbg3k|fC=nfYId=;{@J{?F&D6wx~# zTKPwFVsAh6b#Fbo)oT4uqOmX6>-D$S>-AbbO_i;!fv)_04xsxZ*s-7eR+pVPq+`3? zoZ0fGRY$wkYTd21{^FHx$s|^Z#DFHL&zGOr+?xO;-sUdjQX0k8 zkgT-WyBI6wK9Wd(42Q_WhDHZzK;ecn*Pn z{P08fJyoTJ@yDu1|6~&G=e1ES4_y%VFhunD+ zju(jJ+u;%oZA~j58Kq@?0k zBr#u)P-rpK)Uw-IhBOG!xsAq1YkO`qjp2*U0={_Y*pnA0Npe(MwT6^ZN7iaJGa^de z_t_fL)@B3IDxKi!wwqMe(n_e)+A^b_os*gRD0gs;v~n@6i)O3i*)f`pekRE%v%Uks zFhJL=S-s-fDh<5&So`=&^Zw2~V9KGU?fE~HqGQ_=CcIxKdSd$CXm)r(oz>f&&U1z; zRKd%sMUqVSVlu_Bx&$-UI@y#Yda02jVdh(g7hd$-_I|BqZI~*Ah(2h1De?*=oj+sO zB3a^U*alPf{n5kw+~=A2n1lVdii>A<+DbOY5!>(V_Ll#+SOSpTAmbyxagDn?QN&e7 zib}+^uZU<$cZ}CecG%2J|B1stRDN8H<0`A&#St0y-jzux4?ta$_DE6Ly|KO{D<`Dpn)>?nG-A>-9buwu4oY2v!D>g3|??~5GcRwiJ zYtx>}H%3DTFiAsezJrv!Zb5ygQHrUv-@*HtawszrDAMMq!+d;T`ZSjA`+NxS1W~QkUS!6V<5#I zoLKEHn%YeuN~t$fM*vhda#9{vL5@AGJgTOGB+zRl&exKWbX@EgSk@~n+EQWf&u-CW zivmK~=Q6}448*NKbkMGXAksN`^_cABX ztzWl>t8ISA$5R{Dm;`;-!H2x%?nEcwZnm07fbjQ;)_>b>Cx0_I*q%H%I9S&_n7*Hx zB|z4OGCmzj=hLea5%TFN2o^IKW-)R-22FP&bi>NdkeKiTj%5#NlHi((QKQ z%3o7v`M?1tlG)h8VyJhMhuIt6jDko=lU>e)q_ApFW+9ldmfKsseM0ig90P+SfZfjU zq1-UM{$PI?2pl0pUv|Xjef0A8@b9OE`*;6e^X&)b>TPFlHj5f_&BA}cd`+8vd;{Qp znE4Q9ew+EyTEE`(I+=OzBuVzrT2Dxlq?RN}yWMVYZnxVTTdmf*cDud0)oT5z-EJ>$ zw_7WdBzcBF%{8l5R7v9{iZ!brFz4P>B})%G{C&6Sb~4ze*1iB6uFzpx>$fKL`XTjt zdrGZVe@(q!Gx}=vnyMwFXslMNZ6Ts(iD)emJp$1EMCJ>t3AAa^qIs>C>a`JJjaf4Q zf8QM1J|H13ns3}8;GI7%tUhF1wKr8DCZOoH%!~g6f@g<3lI!nlQp5xm%Z8JrHkXfy zNEh-%G})>^==JD>Iv)~f!q!!pNMgL=KxE3nK33wJXJ>G!btM_DxS%)$11ALTfYOv! zXc~nQ6RI#Nb^gwML})Y`jhA$@U9xz-*$_5#zV80aXNSyHhDws8o+QZxt@S|XXO(1O zz|tl&o5!{8x^rojEOyaYe&3zuy)hRHf9ZTJ{m_5^D0SY`0b^CltOvB#wL~SlR;#tm z`>K>0Q%bd!Qu^{G3wD|JcX+tL#~wS>Fls)`c)P2O1wk=4^h__ncM9-|*d}Y6RK+lm zf|;&L`Do>ex+rC|mnDK&>noO6!+oEfBBJ2+u}?0~a>nf0-!i}bBM}`|W@YPY!1O1e zC~IByVqS*MXR+2*na^|F^oe_np@sxPpA2Yg!^E^?%1MJ=zJwtSeyY(J`AN0SRZ+$G zVrXdS6GU_sbpX7u1s@|qyJ{J|RCmi%c>7c3RgN8QX!BkCog5Z$ZGx4~}eUx10ZB4}vfsRxxFzJpf&-P;O#=PfWnG=EAxU4(znHY;cw9AX z*ElXD_}XAI1dkwFnHwcWb^Zmd%}Mi#$@$(>wA)zR*Q7m9x}f%Lb0tV2_C54+N|VUuDuuL*M@J*=;M^ zEXuX14L_`IQZj}t^o@~`kyf=8R8hq?wX)3G`3Ar**dFJ$ErKml>I;Lq`vjci5L!Ig z0J)qjBs?OPq1q-VjfbZA|;Q|M@6Dxbnm;DQfhCrbDQd8x42$a zQ4;x?D6CT85l$e!nDSm;ZviuZD#Fg>ZuXUlHU5=BD9@oqi4F<-i1~rI(^@Qj@U8@K zN3{)9QN^|gvspuQr9bH;bH7N$I15ZtzM_||_z_rMqtB!g`yRu7!~b2{=gO*(7*5iU zSCic0OTU|(F-Z}r{g}CCOP1JwB+qqOoG0u7%ul7|zws8f-%B*M6ZB>Pp zLRsr8>>Y-tP?Ei^uYH9liSW-aHE>=<6)*QNYsjo6B0T9P1rpY@7S=eNR(e^RNNOeJ z+>)5(wZuoWD+>GA-?xfmf4C=1bYY9%9XXb;=2&uZCu60(I(=M?i1su0nnI*%vShHI zt>V*Fz5A6u)}exOESyq+rzr!kykoI#<%2|WVu00dlC-V31bo-lXfFryC6X3aVHcae zin)!($jWN@S5d`_kA(||S2FWlbOi3*b`_j;2v3?^YIRH4h2-I5Ul`g+L8?gneapr; zBsB|^vg64k2trI8i16e5N==3wipf~X9vC1av^GU$9_U#*DrATyOItW%iU?#&Vv|)d zRbKa`NR>+dK?t?|%aRvIjaK@_JnX(@+`FSp7*TstDB9N2U%`w^s%2kA727X})Fl9~ zfG1T{Fs-Gkf(5L^#!x7@;B@bU0OPQaeIOsAj8Yuqh+!&z+bh4&jwg$93`E|0-F%Qo z(auWM)m~#nk@x6u&?BfjyqRE>`l5&bSiJ9s9wb9pGA3?W$4&`WUM8Y6!~0hl{TNNT zp6K@I8>EWEu2d3$zdJHAvY}e?RaCJ(tB{3eO?}r)&m#c8W0;1Ik%$7PRuuyeh-U|1 z3IB#J#YVCU#3mEQ+gU}WBZ(m*AYqrw)yvbfu_7R1)k{jz9!e>-uZ?H;#5^BJmsEHG zTiTt(gwYGrfB=-ojp`6u?ib zLEJ4?fLPspP z;Z!8P=2y)B!*Ak90D3Oz4!GZmXkW$5Q_42}vc%z57yV!$h%z(njA@s1G0AnQcZdj3 z=FeB#Mp2>ZlWd?AZ)N$Ii6n!P9vg4(Zy8^MYMob6#SXzj%-Z^vS!?pf@3)uyNi3f$ zqCHFmR$}5(UP!oa`5g}(R45@2q+E8XpX1Qi9i?rqvQc2S+m!xlim5;j=uft!IF>xj zW6u$jhA-31inqSF1pDa4`9NP)MIm#7K6oK4`h>Wo!S4TM*yhWsWnM)UJ1&^9jM=O; z5~~J#z1p|iEv&NpyKSs6dB~WD`}i_nBWWTO0j|U1c6hplA*U}GtV$F!Hpxsy zhTfd@;Qxs%YdYN{X zw3o{egAGT}CgWe9~a-!X7<{-7!2P>^M=R5^-fsj1i`(KsLA=Irjv)rJu{-k(e%i_}m;- z=LKZBfSA^m9mV}6c@tT;%EvgQRu)8ZBCPfm{f-$|R?E4HDt3NkYma{?wU8v9h(D1f z^FmnYgve}mTPn%ke`E~A-k(B^Ka|L%lxc7EbGu8o2zh`p>vE-NgR0fkdO!QXL+k;R zVkG@kE3uNOw-y!&JP=jdJ4A%{0YL*lEL&v(MO*92*42-Z5CM!b>+g(=jBKu!aurqV z{8+efp;>$1Va6y#yaJ`8t?um{RrfB;q~Kg!x&u4t@IJ~ejwu-U8P5Qbq=gk$7qZ>0 z|3Ag|YSrx)DWyyWV(9DzNcg+{FpO{#%2)g?qXqc;qU2#zuJI=e z#D>RQs@Ch;h=(02BAA@9!c1YUREjqH`X_NMt6Vc)dAIjhl@yPUx4`ICS(u2a?pB%#v`zFSogL zREgK0wsNZvElgyke{VHF|I%oT=xW_oQN^xMg!AE+l z)_Sux&2qIhuiOhn1ZomKE+SzVzK43u3Ojat*&vTyee~ju#P-E9Pjw%+iG`P35+b@b zEh;*Ftz|^C-cA})J4>!iTuh@k1|o?wqVL;#8Kp>)%JGEbzlr{+9gD(ge*4P0s<{K; zCDn4RqKaKHcnMLuMx%TUyTxvMh=jZldtdUkuDB0eg}VlQG3~2lY)+vd>oLB00wff6}xaOSa7K(!gm2)7b6OWRR%;| ztX^G-atrP8xSy8WZo3#pFFXX}=9PGf(CpO$Ljh4Lt}vSgX(xqN~UWO(^x zONyMX%!yA5a;<8eV>7OMW}`7ORxQOUs(AUuf(4h30emJikH#;KN!(-X3+EVS0?!yP zzdhuIa8%yO#(wPyEAC^WNy0>WPsxf{i0MpyZTj>X?Vbt5#7QTe^Z*f^Zvb`M?A_nk z4R1tp6GYG1W63}zOcEix(;v|-l0bi$htE_G-35yZ0|MaQJvL?U1pwV!EyF6Rcv**8 z!xwbcw7B0C$s+CnQjUorVxb#X%8fk-1X=p<`Fc;aBC7lmbcf8Qc>atTGaryno+>%9 z7Xr8;#z=SV4dX~Yq6ShBXQADb!JZ_F1Q>Ct>h3tnfKmR3_a@)Wtj}#U8WnI}MHMgO zFo3#J>Rhv??TSG1O82EsT&Z^m$1$IEco)br%U!w#ce^xxf(f;>?C<{G9q!4Ju^?_x zN?jN`f6)YT{P8CkiT6{8=#hAN7M5IYi4}q~e#H`>K#1$hKp+dc9_6x+d9P`!7y$46 z?F|5*J~FasYqk8UsN&@x^X6S**7E7hyg`;A;nJibU-ifJv&vL`nZ+b zj7NP}t|a`)s*p{t`%>r)TUUG)K*Ng`T~@WOs;J@>*2-e$;cSh^@Pin^IEINxBCNeJ zknyPRN_t$qHL6(X$kvhgrGMYdG?VJ*#10J|YfkJLW)|3fVZJF!4C_FI z_faGl*EP^)mm?~Um z?};56I@a{Wjw7Pqz|)|YFp++=w95N*Wg=hp&pIl3k|hS;-@~`B)lmiB&i5w(e0Jf& z;T6^Ls-lWle$1Ua&#d*&GUExU!jRfquq2(NPD=3{6ydJLDi3nnTK;q9`>bn$Q8>63 z>gT;Ucj?~z8)iQ4m}91G>Gxcz@toM9p<~wp_#_eCY8r;_rZ1Oav6EHi>nk~Vg_VZQ z3z3=Wu8Sax6I(8`JitEI0(A7kg$sXMEvqW3cvU5l-xAT$*&g7J@yfpBlAMy;^5VcR zM5Z0M?JY#{lK4OoB69VRIeO+7w`#3FIc?gsb>lftYP=_Q=FC}75UHby=thWYyAm%% z=7GfJOb|7x_uT`F+hkx1)@YnmPKFprZtRj)9-q4O(o2_B%c+VgUVSlV&YWcceJa}v zqzc5|f8n?ix(3$O@Cs%4^-Ro*QQUOZrrFo zO+-I~KyE>V=V9|hOod?IKR@<`409Z#SL-R9w$hHBt^N4?`D~pTn`z!*r+#F?f+~4b zQAL$R@DXO*8%{Wd7psM|Z-mk`l;L^S4NATlOW9J}qV{P&hrNKn=l*<1^)Dvn?rj3m*Ho>dO0 zyH!kAwwbl&UjX>n{P_#+tCmj{Ra9~D#dGch_+tS7BHOmykzPA#*t`#aP)L$!LPXQA zxIdMS=JuahTuCZsHhcDY%shSi^cfqs_1vfzb7H4YpYc31f1QXv$INSrHkDhR6_o|` z&}EUlJ$h?g^~*R9@8`6(HZ${g0eoiu{P}CEWm82JRai-6EfIZ&8Q(Q~MGRMvZLkp- z+d*`0m8PwHg$$W*;zyieo_=3r_G|!OH+%StIWM%mPVkZ?i{Ap^heY&uL{x(}Ng!qB zJXyrPCrRS8mhxlsJ-aeax8;xPjP|nD`d()JWdOI#n|Db? z60D+%D#SST)Kkr#c@z=-D-j)`RH_n~3dUVizK-8+*DX99Qw5s?ij`E4sZGnzagTtiPR^EQ1>g4JTVl<#qZtU$rVSD7~;)rA&}WD+Ih=J4F%MT^SC=G^EP2?+MLR3nu6jmm z{c~n*sQPzZc;OF|Y6(Pyc89d)X-A*jAN}YG#mt8qa9V4941hN=a}5#fBVKjD zX-`R*N1iZpnUl_KEv@xRX1-EuzS2k(TyVh!RpO|kiYm5ioPPT0HGmH_V0-85O-iW& zAM+?S{X8M~7zu~d0btc}$9+NX$k$9e^8{ah`I3E@`NM{^ zqP6}2fCHFWNm^HVlE_RQAHJ1yrl82EPGrvV^eF!t}nIuWV z%!Z?pCW<6Up2?iU_$iY#wAL%M)~lFl-8tu+-L5{aRa8;Mt{mr_b55NIQ;5j4yZ)Le zO(y#hsr{8AgP-gP7(l*e5=@PVHWOjBQtAOBx{pZRuN190<&;yOf2m)~{|Be|l@O3g RjI96w002ovPDHLkV1m!47We=F literal 85228 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ͫ>IF=7@K&M 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

T)8!LV96V)5#(9W_uwEV}!=l1@*mVt*2JxwWj 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

%bTg; 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 Xb%O@a;U`Mmpj7GU>gTe~DWM4fe^OQW delta 3349 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 diff --git a/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png b/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png index 2d2444e123289809c6e1e40a1cde4ad59ed47e41..1eec649c376fd1bdbeb279286be2b4b50f9ffe4c 100644 GIT binary patch delta 246 zcmVj8h*Nkl{U^R#@ zVCvVh3W?cf>u5a|x5!m$Qo+5^Tq;gFHR@Asc0%Mo1a3ZqTP5?*Y0a$6!MG8 z?Z&Ir;}L&n6i(2BXJP=h{ZM4VA2OT8(%Bsx4EFmBGh})1rLJ!KWRQpPdXS=Jx88a= zxzcg$Z%5BRsOoj1%^bkJt_9zy)^s`$Xm1T}hcT+O&KXxPWq-&?2RSkh6U)prWo7;t w)sJAf3vAsdr#BH==`nMWpw&fYk}ovpAAG<@5%q#BZvX%Q07*qoM6N<$f+U=D0{{R3 delta 253 zcmVXg*>j8h?NklC|~PLxAGupC^}=XIxak06;hro5??(-82!cW)5Tq}qhA`tlX*a!~TTK1Z*>?J-U?g`rewy+{aFXlfD9OVog?^hU zI}OEs9vQuby@BL+rF`gtRGrH#$o0L|_pL>8pciU0rr07*qoM6N<$g3g&y A$N&HU diff --git a/BizHawk.Client.EmuHawk/images/Back.png b/BizHawk.Client.EmuHawk/images/Back.png index 74c21f21c3cdf7a5a84ee79a6501863f2e139829..1b8ad526c83d15db1a145d9fb9de5f02ba6edd19 100644 GIT binary patch delta 84 zcmcb@beUV!Z delta 85 zcmcc2bcJccW3Cua7srr_xa0%O6W^&joNQp2bIE8^(I*~{2Jb-6$W}(lg4HXt4HhuS p>E>#*i+g>3X}Ex?j*;yV1H(LCmQVNIv%X^h0#8>zmvv4FO#rrqAZY*q diff --git a/BizHawk.Client.EmuHawk/images/BackMore.png b/BizHawk.Client.EmuHawk/images/BackMore.png index f399933f9b2f316b23baa32a15e851d849f35523..563aba269c26ac8afa2ce96d2ce8654d553cb870 100644 GIT binary patch delta 161 zcmV;S0AByY1HuEaDgl3kNklV-LjZ{s1NUHW7omi4qB`Hlp0MmB3UzXozP^3zXDL#X{7IR-?IYcN|2o z?<9t!@kB?=<~pgxa^)j7TOZQ9y@xoSJRoy+5!agwkTnoF!vGn`7x>Qya-Iwu#tpl; P00000NkvXXu0mjflBPxM delta 162 zcmV;T0A2sW1H%KbDgl3lNklMJV(5)E6LP2f=3N4#yBfb}aXI*G{ekq!OvSn6l%SO`y zv^!3$*B=ZeU_6nOn9Ua_z-sMga=Y6A4o5Fj=PBTN^E0gg8RZ&hHb?*M19F}W8^MyC Q`2YX_07*qoM6N<$g000!KL7v# diff --git a/BizHawk.Client.EmuHawk/images/Blank.png b/BizHawk.Client.EmuHawk/images/Blank.png index ab2a9ccc0268cb0dcb408c389cd75fa6eaf0cfde..c8d0a51cc0c524ebef53b08ff74cdbf696f02b9c 100644 GIT binary patch delta 61 zcmbQuIE!&YikYIPi(^Q|t>lCQToMm;SUHZKd2qmiFX5=_#B&E2mstk3GMX|nJhGVI QlF9%Cp00i_>zopr0LRxB9{>OV delta 62 zcmbQmIGb@oin)@fi(^PdT=D@viHAC@97oSQIN-pSka~delBC4}6Ln@T1_o0`hDR%; R7rHV4fv2mV%Q~loCIFSJ6XO5? diff --git a/BizHawk.Client.EmuHawk/images/Both.png b/BizHawk.Client.EmuHawk/images/Both.png index a949badfe7f9745c06c26238ff03cbba2c14eb20..f4c909befb364ec35e1115d0b2711785abd0f723 100644 GIT binary patch delta 720 zcmV;>0x$iC9IpnDB$Jd15DEcvQb$4o*~u(_ks%k8qY5m40+>leK~#7Ft-)POQ*i(X z;6HSg&~=|62qL`5KU7pN-==$WPHo3+PUogfw>h_+we4)vb2ML% z>zvJziA&AV3ngVl1d$M=B){lF@FFRp=OOyA0vUEZn1WmHB+9YrmCqv;S>mO+FO(9%5YxmDD0h8$B+pgLbt(tfY5uK#gut!|neQ7XG~ z6$(bs>v@>X91NWaG|G)P$-h#mI?l>uCY?kgpuRo>g`C~bzt(<3h>FVl;d`TN*1Y%T&HlC5KIg3SowLsezz7VMe@HV?HGmAMLLL#| zgU7_i;p8qrfeIvW01ybXWFd3?BLM*Temp!YBESc}00DT@3kU$fO`E_l9Ebl8>Oz@Z z0f2-7z;ux~O9+4z06=<09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z z2n+x)QHX^p00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640` zD9%Y2D-DpKGaQJ>a zJVl|9x!Kv};eCNs@5@ z0A55SE>z01KgS3F07RgHDzHHt^uZV`zy=(_1>C_4fBaxJghC|5!a@*23S@vBa$qT} zfU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyUp1~-*fe8db$Osc*A=-!mVv1NJ zjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3J#qp$hg?Rwkvqr$GJ^buyhkyV zfwECOf7A@ML%FCo8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QM zFfPW!La{h336o>Xu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJb=$GgN^mhymh82Uyh-WAnn-~WeXBl@G zub51x8Pkgy$5b#kG3%J;nGcz7Rah#vDtr}@$_kZAl_r%NDlb&2s-~*mstZ-~Rm)V5 zsa{iku0~ZeQ{$-#)RwDNs+~~lQyWuff2ljDhpK0&Z&W{|ep&sA23f;Q!%st`QJ}G3 zcbou<7-f4f=x zfet~(N+(<=M`w@D1)b+p*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQ zz32KIeJ}k~{cZZE^+ya?2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+? zJfqb{jYbcQX~taRB;#$yZN{S}e+DKYCQD7~P41dfO}VBiraMeKOvla4&7#fLnKhd| zG1oHZo9CO?o8Px!T6kJ4wy3taWl6H+TBcd!<iO5e?w1!XSL@eFJmu}SFP8ux21Qg_hIiBKK4FxpW{B`JU8Al z-dSJFH^8^Zx64n%Z=PR;-$Q>R|78Dq|Iq-afF%KE1Brn_fm;Im_iKB_KiJlZ$9G`c^=E@oNG)mWWa zNo-3TIW8)$Hg0Ub-~8?KhvJ>$3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|i zDySBWCGrz@C5{Stf5IKYXCg1rHqnUKLtH8zPVz`9O?r~-k-Rl|B*inOEaka`C#jIU zObtxkn>wBrnsy*W_HW0Wrec-#cqqYFCLW#$!oKa ztOZ#u3bsO~=u}!L*D43HXJuDrzs-rtIhL!QE6wf9v&!3$e>a@(pa1O=!V=+2Q(!ODWcwE=7E z3snl`g?;PX*X>E_-of1X{Rblsw%57T)g973R8o)De=F-p4#yw9{+;i4Ee$peRgIj+ z;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8; z+aC{{G(1^(O7m37Y1-+6)01cN&y1awoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQE zJG?v2e_Zmobn>#>OB6F(@)2{oV%K?xm;_x?s~noduI3P8=g1L z-SoYA@fQEq)t)&$-M#aAZ}-Lb_1_lVesU-M&da;mcPH+xyidGe^g!)F*+boj)jwPQ z+}Q8je`>&Yp!3n(NB0JWgU|kv^^Xrj1&^7JZOeuYhU=a(|cFn9-q^@|TmpZG5Hu>cHz6uiM7L#vZ=Ocr!6x^j7=r!FSwu z9q*&x4^QNLAb%+TX!)`AQ_!dTlNpnf{{#b=^Za8oE!&YH6OmRce*+>(L_t(|+N9IV zZyQw<2Jr9RxgOi&8PB+hJ;smNG&EH#@hDh9s;eq3qFr>+h)ou(*np5&^glqVKp=!v zq%0z_gl!kBSVcm}jWB}HHsKNCI*n+e*ohl^9<@C)o_kq92xZGzoz+kJ^qoV55cogC z>h(Gt$En)3{eeWOe<~Owa;N+I%iCX^0GxBA zQmHos-@n>eUq{-^;*uJiKR8`OJxF4@lEcoVhSzVsJ*TWT0S|zE0#L>neBXzWN+F-g zpqwv4*5gpYF_kuOwrC=gIfW-3-4k8lx9XLrBW!MN!Z3{Oe{43(FJHV!Lq$he-vM+V zugujzxQ|g7U>Lf=%EAKfUB8ame*t7^X=y>zwDX3c-{2w|2_D=>>F6$Weu$&^Y3z9# z4u&SOW^nh(?2ET~zxORA?&``)0e9}Sz^c{i7mY?kW6>CLQ4i5%h#%<%1cLF@*tW7 zEImeBZewT9tO!4GBM8XngkZoXl1XXt+BJ0hF4lg2jLzs0f^mrasVNkv%GloyFg-?435X+79Sf6r2=!~99 zW39VOWLb`tO8RWEn9MPzBA=HQ$?+-Qyt(|Is-FF@Q0OI9Rf6ZI@x%AOez~=|`_{}1 z4Obfie}Dj`#57I*Mmn8d5W?c@xX&Qy*E=11V>FtqB@zP+U5-&`-+t~@5sqwt5&{7N z&e0hRq~&JwaM?5|{sAOuw8i<(H|=)1Mo1p9=&t|Ws@1YR3333$l0b|B$G=C2^jD21 z0EV%c_0@2A@NPWLCR~SzsX2*KS%4D)l>&zwK0x34&o>?~LQq5^d`*b0kGhZDPsi^5 qFN(xla-2d4KoCGT0Ly+F_;UaeCtSNLV-!9B0000Gy1AqgN?tgtrL_t(|0d2tr4#GeH0KvVhyWv*c-QoWaBS4#!h8g~9P?7*T z1x+9%BNM|E!cr{?oVF06s`SXUD%#MifiD4Fhx*mg;zfr{sCFk>+8+cXGULdLr?a^m zDLx-6%hh_b-R&Xa&ERkh+|&8Omjo31cDE^bP-5~+KFPfRViWTRn#_qyAOHXW07*qo IM6N<$f)k}hssI20 delta 155 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

mSzwS0 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

(6;ph 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

6jQ4@ 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%0D155^pD1aN!p~U$yP&2u4`)w#6_ES2f$tmx7}v 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�Ev&rhGe_xWcZeDU-{gbx4y^!_D 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 diff --git a/BizHawk.Client.EmuHawk/images/ControllerImages/C64Joystick.png b/BizHawk.Client.EmuHawk/images/ControllerImages/C64Joystick.png index d5ce8bde378edd9c4a26a7a40345e9f9820c0eb4..f3b4eec4cf79808dafd1b14502e0d211bffa75e9 100644 GIT binary patch literal 29590 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 literal 32397 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 Qw*UYD07*qoM6N<$f(ng`;Q#;t diff --git a/BizHawk.Client.EmuHawk/images/ControllerImages/GBA_Controller.png b/BizHawk.Client.EmuHawk/images/ControllerImages/GBA_Controller.png index 9eee422dc5c3a32f6b8b7d9f43d6b1d6ffffb8db..1311133ffd2258aa0af605ebb564c0cf0e6d9853 100644 GIT binary patch literal 45523 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 R6Q=+G002ovPDHLkV1h|>l1u;q diff --git a/BizHawk.Client.EmuHawk/images/ControllerImages/IntVController.png b/BizHawk.Client.EmuHawk/images/ControllerImages/IntVController.png index 0a6fe8b09f851bc6a0e6be16dcf2f0b38e7b291b..941d7fc796db6f7023839b89aeb453f7a6a47969 100644 GIT binary patch literal 74023 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

E60 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 AS^xk5 literal 64917 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 AGynhq literal 17614 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%0Ad>bWa@Iuesq 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