From 94c9f1eaf69798a9ada069f8a4a5e37391dbff7a Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:08:06 -0700 Subject: [PATCH] use new scratchpad mem domain for cheevos --- .../RetroAchievements/RAIntegration.cs | 2 +- .../RetroAchievements/RCheevos.cs | 4 +- .../RetroAchievements.Memory.cs | 65 +++++-------------- 3 files changed, 19 insertions(+), 52 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/RetroAchievements/RAIntegration.cs b/src/BizHawk.Client.EmuHawk/RetroAchievements/RAIntegration.cs index cd11e62906..dfbeb53ca9 100644 --- a/src/BizHawk.Client.EmuHawk/RetroAchievements/RAIntegration.cs +++ b/src/BizHawk.Client.EmuHawk/RetroAchievements/RAIntegration.cs @@ -211,7 +211,7 @@ namespace BizHawk.Client.EmuHawk if (Emu.HasMemoryDomains()) { - _memFunctions = CreateMemoryBanks(consoleId, Domains, Emu.CanDebug() ? Emu.AsDebuggable() : null); + _memFunctions = CreateMemoryBanks(consoleId, Domains); for (var i = 0; i < _memFunctions.Count; i++) { diff --git a/src/BizHawk.Client.EmuHawk/RetroAchievements/RCheevos.cs b/src/BizHawk.Client.EmuHawk/RetroAchievements/RCheevos.cs index 2e3a2ceb5a..f2801c30d8 100644 --- a/src/BizHawk.Client.EmuHawk/RetroAchievements/RCheevos.cs +++ b/src/BizHawk.Client.EmuHawk/RetroAchievements/RCheevos.cs @@ -376,11 +376,11 @@ namespace BizHawk.Client.EmuHawk _consoleId = SystemIdToConsoleId(); // init the read map - _readMap = Array.Empty<byte>(); + _readMap = [ ]; if (Emu.HasMemoryDomains()) { - _memFunctions = CreateMemoryBanks(_consoleId, Domains, Emu.CanDebug() ? Emu.AsDebuggable() : null); + _memFunctions = CreateMemoryBanks(_consoleId, Domains); if (_memFunctions.Count > 255) { throw new InvalidOperationException("_memFunctions must have less than 256 memory banks"); diff --git a/src/BizHawk.Client.EmuHawk/RetroAchievements/RetroAchievements.Memory.cs b/src/BizHawk.Client.EmuHawk/RetroAchievements/RetroAchievements.Memory.cs index 2a64c8804e..a43f3c9953 100644 --- a/src/BizHawk.Client.EmuHawk/RetroAchievements/RetroAchievements.Memory.cs +++ b/src/BizHawk.Client.EmuHawk/RetroAchievements/RetroAchievements.Memory.cs @@ -264,31 +264,23 @@ namespace BizHawk.Client.EmuHawk } } - private class ChanFMemFunctions : MemFunctions + // our vram is unpacked, but RA expects it packed + private class ChanFMemFunctions(MemoryDomain vram) + : MemFunctions(null, 0, 0x800) { - private readonly IDebuggable _debuggable; - private readonly MemoryDomain _vram; // our vram is unpacked, but RA expects it packed - private byte ReadVRAMPacked(uint addr) { - return (byte)(((_vram.PeekByte(addr * 4 + 0) & 3) << 6) - | ((_vram.PeekByte(addr * 4 + 1) & 3) << 4) - | ((_vram.PeekByte(addr * 4 + 2) & 3) << 2) - | ((_vram.PeekByte(addr * 4 + 3) & 3) << 0)); + return (byte)(((vram.PeekByte(addr * 4 + 0) & 3) << 6) + | ((vram.PeekByte(addr * 4 + 1) & 3) << 4) + | ((vram.PeekByte(addr * 4 + 2) & 3) << 2) + | ((vram.PeekByte(addr * 4 + 3) & 3) << 0)); } protected override byte ReadMem(uint addr) { using (MemGuard.EnterExit()) { - if (addr < 0x40) - { - return (byte)_debuggable.GetCpuFlagsAndRegisters()["SPR" + addr].Value; - } - else - { - return ReadVRAMPacked(addr - 0x40); - } + return ReadVRAMPacked(addr); } } @@ -296,18 +288,10 @@ namespace BizHawk.Client.EmuHawk { using (MemGuard.EnterExit()) { - if (addr < 0x40) - { - _debuggable.SetCpuRegister("SPR" + addr, val); - } - else - { - addr -= 0x40; - _vram.PokeByte(addr * 4 + 0, (byte)((val >> 6) & 3)); - _vram.PokeByte(addr * 4 + 1, (byte)((val >> 4) & 3)); - _vram.PokeByte(addr * 4 + 2, (byte)((val >> 2) & 3)); - _vram.PokeByte(addr * 4 + 3, (byte)((val >> 0) & 3)); - } + vram.PokeByte(addr * 4 + 0, (byte)((val >> 6) & 3)); + vram.PokeByte(addr * 4 + 1, (byte)((val >> 4) & 3)); + vram.PokeByte(addr * 4 + 2, (byte)((val >> 2) & 3)); + vram.PokeByte(addr * 4 + 3, (byte)((val >> 0) & 3)); } } @@ -320,36 +304,18 @@ namespace BizHawk.Client.EmuHawk using (MemGuard.EnterExit()) { - var regs = _debuggable.GetCpuFlagsAndRegisters(); var end = Math.Min(addr + bytes, BankSize); for (var i = addr; i < end; i++) { - byte val; - if (i < 0x40) - { - val = (byte)regs["SPR" + i].Value; - } - else - { - val = ReadVRAMPacked(i - 0x40); - } - unsafe { - ((byte*)buffer)![i - addr] = val; + ((byte*)buffer)![i - addr] = ReadVRAMPacked(i); } } return end - addr; } } - - public ChanFMemFunctions(IDebuggable debuggable, MemoryDomain vram) - : base(null, 0, 0x840) - { - _debuggable = debuggable; - _vram = vram; - } } // these consoles will use the entire system bus @@ -374,7 +340,7 @@ namespace BizHawk.Client.EmuHawk // anything more complicated will be handled accordingly - protected static IReadOnlyList<MemFunctions> CreateMemoryBanks(ConsoleID consoleId, IMemoryDomains domains, IDebuggable debuggable) + protected static IReadOnlyList<MemFunctions> CreateMemoryBanks(ConsoleID consoleId, IMemoryDomains domains) { var mfs = new List<MemFunctions>(); @@ -562,8 +528,9 @@ namespace BizHawk.Client.EmuHawk TryAddDomain("EEPROM"); break; case ConsoleID.FairchildChannelF: + mfs.Add(new(domains["Scratchpad"], 0, domains["Scratchpad"].Size)); // special case - mfs.Add(new ChanFMemFunctions(debuggable, domains["VRAM"])); + mfs.Add(new ChanFMemFunctions(domains["VRAM"])); mfs.Add(new(domains.SystemBus, 0, domains.SystemBus.Size)); // only add in SRAM if it's from HANG/MAZE carts (where SRAM isn't on the System Bus) if (domains.Has("SRAM") && domains["SRAM"].Size == 0x400)