From bd2397520114cba2b51a412a44b813a74822c0fd Mon Sep 17 00:00:00 2001 From: nattthebear Date: Tue, 20 Feb 2018 18:30:27 -0500 Subject: [PATCH] Hackadoodle to change the initial value of the DIV register? This is probably a bad idea --- .../Nintendo/Gameboy/Gambatte.ISettable.cs | 10 ++++++++++ .../Consoles/Nintendo/Gameboy/Gambatte.cs | 8 ++++++-- .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 4 ++-- libgambatte/include/gambatte.h | 4 ++-- libgambatte/src/cinterface.cpp | 8 ++++---- libgambatte/src/gambatte.cpp | 8 ++++---- libgambatte/src/initstate.cpp | 4 ++-- libgambatte/src/initstate.h | 2 +- libgambatte/src/savestate.h | 2 +- output/dll/libgambatte.dll | Bin 185856 -> 185856 bytes 10 files changed, 32 insertions(+), 18 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs index 7e2ba05432..2fd947256c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ISettable.cs @@ -132,6 +132,11 @@ 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); @@ -146,6 +151,11 @@ 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 d618336bb1..4fa2a67ec4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -63,6 +63,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy real_rtc_time = !DeterministicEmulation && _syncSettings.RealTimeRTC; + DivInternal = _syncSettings.GetInitialDivInternal(); + LibGambatte.LoadFlags flags = 0; switch (_syncSettings.ConsoleMode) @@ -88,7 +90,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy flags |= LibGambatte.LoadFlags.MULTICART_COMPAT; } - if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, GetCurrentTime(), flags) != 0) + if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, GetCurrentTime(), flags, DivInternal) != 0) { throw new InvalidOperationException("gambatte_load() returned non-zero (is this not a gb or gbc rom?)"); } @@ -172,6 +174,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// private LibGambatte.Buttons CurrentButtons = 0; + private uint DivInternal = 0; + #region RTC /// @@ -322,7 +326,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy if (controller.IsPressed("Power")) { - LibGambatte.gambatte_reset(GambatteState, GetCurrentTime()); + LibGambatte.gambatte_reset(GambatteState, GetCurrentTime(), DivInternal); } if (Tracer.Enabled) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index 621f8c8998..ecb9b432ca 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -57,7 +57,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// 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); + public static extern int gambatte_load(IntPtr core, byte[] romdata, uint length, long now, LoadFlags flags, uint div); /// /// Load GB BIOS image. @@ -124,7 +124,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// 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); + public static extern void gambatte_reset(IntPtr core, long now, uint div); /// /// palette type for gambatte_setdmgpalettecolor diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 5f1a5e4325..2b953984a9 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -60,7 +60,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 = 0); + int load(const char *romfiledata, unsigned romfilelength, std::uint32_t now, unsigned flags, unsigned div); int loadGBCBios(const char* biosfiledata); int loadDMGBios(const char* biosfiledata); @@ -93,7 +93,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); + 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 diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 2bbabc894f..fc4d793a75 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -29,9 +29,9 @@ GBEXPORT void gambatte_destroy(GB *g) delete g; } -GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) +GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags, unsigned div) { - int ret = g->load(romfiledata, romfilelength, now, flags); + int ret = g->load(romfiledata, romfilelength, now, flags, div); return ret; } @@ -65,9 +65,9 @@ GBEXPORT void gambatte_setlayers(GB *g, unsigned mask) g->setLayers(mask); } -GBEXPORT void gambatte_reset(GB *g, long long now) +GBEXPORT void gambatte_reset(GB *g, long long now, unsigned div) { - g->reset(now); + g->reset(now, div); } GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32) diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index fce1dbae63..167e1093e1 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -81,7 +81,7 @@ void GB::blitTo(gambatte::uint_least32_t *videoBuf, int pitch) } } -void GB::reset(const std::uint32_t now) { +void GB::reset(const std::uint32_t now, const unsigned div) { if (p_->cpu.loaded()) { int length = p_->cpu.saveSavedataLength(); @@ -94,7 +94,7 @@ void GB::reset(const std::uint32_t now) { SaveState state; p_->cpu.setStatePtrs(state); - setInitState(state, !(p_->loadflags & FORCE_DMG), p_->loadflags & GBA_CGB, now); + setInitState(state, !(p_->loadflags & FORCE_DMG), p_->loadflags & GBA_CGB, now, div); p_->cpu.loadState(state); if (length > 0) { @@ -140,7 +140,7 @@ 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) { +int GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_t now, const unsigned flags, const unsigned div) { //if (p_->cpu.loaded()) // p_->cpu.saveSavedata(); @@ -150,7 +150,7 @@ int GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_ SaveState state; p_->cpu.setStatePtrs(state); p_->loadflags = flags; - setInitState(state, !(flags & FORCE_DMG), flags & GBA_CGB, now); + setInitState(state, !(flags & FORCE_DMG), flags & GBA_CGB, now, div); p_->cpu.loadState(state); //p_->cpu.loadSavedata(); } diff --git a/libgambatte/src/initstate.cpp b/libgambatte/src/initstate.cpp index 66b86e4e8e..f8c488efcc 100644 --- a/libgambatte/src/initstate.cpp +++ b/libgambatte/src/initstate.cpp @@ -1146,7 +1146,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) { +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, @@ -1198,7 +1198,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; + state.mem.divLastUpdate = 0 - div; state.mem.timaLastUpdate = 0; state.mem.tmatime = DISABLED_TIME; state.mem.nextSerialtime = DISABLED_TIME; diff --git a/libgambatte/src/initstate.h b/libgambatte/src/initstate.h index 8d8ed5aaf6..dd20a3d07a 100644 --- a/libgambatte/src/initstate.h +++ b/libgambatte/src/initstate.h @@ -22,7 +22,7 @@ #include namespace gambatte { -void setInitState(struct SaveState &state, bool cgb, bool gbaCgbMode, std::uint32_t now); +void setInitState(struct SaveState &state, bool cgb, bool gbaCgbMode, std::uint32_t now, unsigned div); } #endif diff --git a/libgambatte/src/savestate.h b/libgambatte/src/savestate.h index de7dfbd112..014efbb4c8 100644 --- a/libgambatte/src/savestate.h +++ b/libgambatte/src/savestate.h @@ -38,7 +38,7 @@ struct SaveState { 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); + friend void setInitState(SaveState &, bool, bool, std::uint32_t, unsigned); }; struct CPU { diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 696c1b053fb96db96ee570035b2e18a20c594231..20e91644161b286b91edcc243f6fa79ba422aa58 100644 GIT binary patch delta 24558 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 delta 24508 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