From d84da4ec4b9dc8d001b44c2f317d53ba208ec677 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Mon, 25 Jul 2022 00:10:46 -0700 Subject: [PATCH] wire up sameboy's rumble --- Assets/dll/libsameboy.dll | Bin 285184 -> 285184 bytes Assets/dll/libsameboy.so | Bin 245368 -> 245400 bytes .../Consoles/Nintendo/Gameboy/Gambatte.cs | 8 ++++++-- .../Consoles/Nintendo/Gameboy/GambatteLink.cs | 2 +- .../Consoles/Nintendo/SameBoy/LibSameBoy.cs | 8 +++++++- .../Nintendo/SameBoy/SameBoy.IEmulator.cs | 4 ++++ .../SameBoy/SameBoy.IMemoryDomains.cs | 4 ++-- .../Consoles/Nintendo/SameBoy/SameBoy.cs | 18 ++++++++++++++---- submodules/sameboy/BizInterface.c | 18 ++++++++++++++++-- 9 files changed, 50 insertions(+), 12 deletions(-) diff --git a/Assets/dll/libsameboy.dll b/Assets/dll/libsameboy.dll index 6ca1d714bb69cbd75d70142fec954499ac8a0bf9..bb48b78dfae9d9309160fa515f18fd583114671c 100644 GIT binary patch delta 22665 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 WYW(J_`l!E91*{8IuJwUq@&5srwu&17 delta 22630 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 z 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 diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index ebe302f062..a4d1ca11ef 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -182,7 +182,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy _cdCallback = new LibGambatte.CDCallback(CDCallbackProc); - ControllerDefinition = CreateControllerDefinition(sgb: IsSgb, sub: _syncSettings.FrameLength is GambatteSyncSettings.FrameLengthType.UserDefinedFrames, tilt: false); + ControllerDefinition = CreateControllerDefinition(sgb: IsSgb, sub: _syncSettings.FrameLength is GambatteSyncSettings.FrameLengthType.UserDefinedFrames, tilt: false, rumble: false); NewSaveCoreSetBuff(); } @@ -247,7 +247,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy public long CycleCount => (long)_cycleCount; public double ClockRate => TICKSPERSECOND; - public static ControllerDefinition CreateControllerDefinition(bool sgb, bool sub, bool tilt) + public static ControllerDefinition CreateControllerDefinition(bool sgb, bool sub, bool tilt, bool rumble) { var ret = new ControllerDefinition((sub ? "Subframe " : "") + "Gameboy Controller" + (tilt ? " + Tilt" : "")); if (sub) @@ -258,6 +258,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { ret.AddXYPair($"Tilt {{0}}", AxisPairOrientation.RightAndUp, (-90).RangeTo(90), 0); } + if (rumble) + { + ret.HapticsChannels.Add("Rumble"); + } if (sgb) { for (int i = 0; i < 4; i++) diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs index bf8cc183f9..1561299b06 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs @@ -49,7 +49,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy _linkedCores[i] = new Gameboy(lp.Comm, lp.Roms[i].Game, lp.Roms[i].RomData, _settings._linkedSettings[i], _syncSettings._linkedSyncSettings[i], lp.DeterministicEmulationRequested); _linkedCores[i].ConnectInputCallbackSystem(_inputCallbacks); _linkedCores[i].ConnectMemoryCallbackSystem(_memoryCallbacks, i); - _linkedConts[i] = new SaveController(Gameboy.CreateControllerDefinition(sgb: false, sub: false, tilt: false)); + _linkedConts[i] = new SaveController(Gameboy.CreateControllerDefinition(sgb: false, sub: false, tilt: false, rumble: false)); _linkedBlips[i] = new BlipBuffer(1024); _linkedBlips[i].SetRates(2097152 * 2, 44100); _linkedOverflow[i] = 0; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/LibSameBoy.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/LibSameBoy.cs index 36e4e54d72..f8e1a8919e 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/LibSameBoy.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/LibSameBoy.cs @@ -53,6 +53,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy [BizImport(cc)] public abstract void sameboy_setinputcallback(IntPtr core, InputCallback callback); + [UnmanagedFunctionPointer(cc)] + public delegate void RumbleCallback(int amplitude); + + [BizImport(cc)] + public abstract void sameboy_setrumblecallback(IntPtr core, RumbleCallback callback); + [BizImport(cc)] public abstract void sameboy_frameadvance(IntPtr core, Buttons buttons, ushort x, ushort y, short[] soundbuf, ref int nsamps, int[] videobuf, bool render, bool border); @@ -81,7 +87,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy public abstract int sameboy_statelen(IntPtr core); [BizImport(cc)] - public abstract bool sameboy_getmemoryarea(IntPtr core, MemoryAreas which, ref IntPtr data, ref int length); + public abstract bool sameboy_getmemoryarea(IntPtr core, MemoryAreas which, ref IntPtr data, ref long length); [BizImport(cc)] public abstract byte sameboy_cpuread(IntPtr core, ushort addr); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs index 2e15fada63..9875a35281 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs @@ -11,10 +11,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy public ControllerDefinition ControllerDefinition { get; } + private IController _controller = NullController.Instance; + private static readonly IReadOnlyList GB_BUTTON_ORDER_IN_BITMASK = new[] { "Start", "Select", "B", "A", "Down", "Up", "Left", "Right", }; private LibSameboy.Buttons FrameAdvancePrep(IController controller) { + _controller = controller; + uint b = 0; for (var i = 0; i < 8; i++) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs index 9216a39080..bb969e389d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IMemoryDomains.cs @@ -7,14 +7,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy { public partial class Sameboy { - private readonly List _memoryDomains = new List(); + private readonly List _memoryDomains = new(); private IMemoryDomains MemoryDomains { get; set; } private void CreateMemoryDomain(LibSameboy.MemoryAreas which, string name) { IntPtr data = IntPtr.Zero; - int length = 0; + long length = 0; if (!LibSameboy.sameboy_getmemoryarea(SameboyState, which, ref data, ref length)) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.cs index 1aa822dea8..6487653674 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.cs @@ -39,6 +39,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy private readonly LibSameboy.InputCallback _inputcb; + private readonly LibSameboy.RumbleCallback _rumblecb; + [CoreConstructor(VSystemID.Raw.GB)] [CoreConstructor(VSystemID.Raw.GBC)] public Sameboy(CoreComm comm, GameInfo game, byte[] file, SameboySettings settings, SameboySyncSettings syncSettings, bool deterministic) @@ -90,10 +92,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy InitMemoryCallbacks(); _inputcb = InputCallback; - LibSameboy.sameboy_setinputcallback(SameboyState, _inputcb); + _rumblecb = RumbleCallback; _tracecb = MakeTrace; - LibSameboy.sameboy_settracecallback(SameboyState, null); + LibSameboy.sameboy_setinputcallback(SameboyState, _inputcb); + LibSameboy.sameboy_setrumblecallback(SameboyState, _rumblecb); + + LibSameboy.sameboy_settracecallback(SameboyState, null); LibSameboy.sameboy_setscanlinecallback(SameboyState, null, 0); LibSameboy.sameboy_setprintercallback(SameboyState, null); @@ -112,7 +117,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy BoardName = MapperName(file); _hasAcc = BoardName is "MBC7 ROM+ACCEL+EEPROM"; - ControllerDefinition = Gameboy.Gameboy.CreateControllerDefinition(sgb: false, sub: false, tilt: _hasAcc); + ControllerDefinition = Gameboy.Gameboy.CreateControllerDefinition(sgb: false, sub: false, tilt: _hasAcc, rumble: true); LibSameboy.sameboy_setrtcdivisoroffset(SameboyState, _syncSettings.RTCDivisorOffset); CycleCount = 0; @@ -140,6 +145,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy _inputCallbacks.Call(); } + private void RumbleCallback(int amplitude) + { + _controller.SetHapticChannelStrength("Rumble", amplitude); + } + public bool LinkConnected { get => _printercb != null; @@ -187,7 +197,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy var _bgpal = IntPtr.Zero; var _sppal = IntPtr.Zero; var _oam = IntPtr.Zero; - int unused = 0; + long unused = 0; if (!LibSameboy.sameboy_getmemoryarea(SameboyState, LibSameboy.MemoryAreas.VRAM, ref _vram, ref unused) || !LibSameboy.sameboy_getmemoryarea(SameboyState, LibSameboy.MemoryAreas.BGPRGB, ref _bgpal, ref unused) || !LibSameboy.sameboy_getmemoryarea(SameboyState, LibSameboy.MemoryAreas.OBPRGB, ref _sppal, ref unused) diff --git a/submodules/sameboy/BizInterface.c b/submodules/sameboy/BizInterface.c index 30240450fb..4a5002814b 100644 --- a/submodules/sameboy/BizInterface.c +++ b/submodules/sameboy/BizInterface.c @@ -19,6 +19,7 @@ typedef uint32_t u32; typedef uint64_t u64; typedef void (*input_callback_t)(void); +typedef void (*rumble_callback_t)(u32); typedef void (*trace_callback_t)(u16); typedef void (*memory_callback_t)(u16); typedef void (*printer_callback_t)(u32*, u8, u8, u8, u8); @@ -36,6 +37,7 @@ typedef struct u32 obj_pal[0x20]; GB_palette_t custom_pal; input_callback_t input_cb; + rumble_callback_t rumble_cb; trace_callback_t trace_cb; memory_callback_t read_cb; memory_callback_t write_cb; @@ -77,17 +79,22 @@ static u32 rgb_cb(GB_gameboy_t *gb, u8 r, u8 g, u8 b) return (0xFF << 24) | (r << 16) | (g << 8) | b; } -static void vblank_cb(GB_gameboy_t *gb, GB_vblank_type_t type) +static void vblank_cb(GB_gameboy_t* gb, GB_vblank_type_t type) { ((biz_t*)gb)->vblank_occured = true; } -static u8 camera_pixel_cb(GB_gameboy_t *gb, u8 x, u8 y) +static u8 camera_pixel_cb(GB_gameboy_t* gb, u8 x, u8 y) { // stub for now (also needed for determinism) return 0; } +static void RumbleCallbackRelay(GB_gameboy_t* gb, double rumble_amplitude) +{ + ((biz_t*)gb)->rumble_cb(INT32_MAX * rumble_amplitude); +} + static u8 ReadCallbackRelay(GB_gameboy_t* gb, u16 addr, u8 data) { ((biz_t*)gb)->read_cb(addr); @@ -135,6 +142,8 @@ EXPORT biz_t* sameboy_create(u8* romdata, u32 romlen, u8* biosdata, u32 bioslen, GB_load_rom_from_buffer(&biz->gb, romdata, romlen); GB_load_boot_rom_from_buffer(&biz->gb, biosdata, bioslen); GB_set_sample_rate(&biz->gb, GB_get_clock_rate(&biz->gb) / 2 / 8); + GB_set_rumble_mode(&biz->gb, GB_RUMBLE_ALL_GAMES); + GB_set_rumble_callback(&biz->gb, RumbleCallbackRelay); GB_apu_set_sample_callback(&biz->gb, sample_cb); GB_set_rgb_encode_callback(&biz->gb, rgb_cb); GB_set_vblank_callback(&biz->gb, vblank_cb); @@ -163,6 +172,11 @@ EXPORT void sameboy_setinputcallback(biz_t* biz, input_callback_t callback) biz->input_cb = callback; } +EXPORT void sameboy_setrumblecallback(biz_t* biz, rumble_callback_t callback) +{ + biz->rumble_cb = callback; +} + static double FromRawToG(u16 raw) { return (raw - 0x81D0) / (0x70 * 1.0);