From d57e195e5290d935ea9744b61b66c0f8ba72a1eb Mon Sep 17 00:00:00 2001 From: goyuken Date: Tue, 11 Sep 2012 19:05:44 +0000 Subject: [PATCH] gambatte: add oam, hram to memory domain list --- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 13 +++++++----- .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 4 +++- BizHawk.MultiClient/output/libgambatte.dll | Bin 171520 -> 171520 bytes libgambatte/include/gambatte.h | 2 +- libgambatte/src/mem/cartridge.cpp | 4 ++-- libgambatte/src/memory.cpp | 20 ++++++++++++++++++ libgambatte/src/memory.h | 2 +- 7 files changed, 35 insertions(+), 10 deletions(-) diff --git a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs index d745e14c73..79e3629ebe 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -339,8 +339,10 @@ namespace BizHawk.Emulation.Consoles.GB if (!LibGambatte.gambatte_getmemoryarea(GambatteState, which, ref data, ref length)) throw new Exception("gambatte_getmemoryarea() failed!"); - if (data == IntPtr.Zero || length <= 0) + // if length == 0, it's an empty block; (usually rambank on some carts); that's ok + if (data == IntPtr.Zero && length > 0) throw new Exception("bad return from gambatte_getmemoryarea()"); + MemoryRefreshers[i] = new MemoryRefresher(data, length); @@ -349,17 +351,18 @@ namespace BizHawk.Emulation.Consoles.GB void InitMemoryDomains() { - MemoryDomains = new MemoryDomain[4]; - MemoryRefreshers = new MemoryRefresher[4]; + MemoryDomains = new MemoryDomain[6]; + MemoryRefreshers = new MemoryRefresher[6]; - CreateMemoryDomain(LibGambatte.MemoryAreas.rambank); + CreateMemoryDomain(LibGambatte.MemoryAreas.cartram); CreateMemoryDomain(LibGambatte.MemoryAreas.rom); CreateMemoryDomain(LibGambatte.MemoryAreas.vram); CreateMemoryDomain(LibGambatte.MemoryAreas.wram); + CreateMemoryDomain(LibGambatte.MemoryAreas.oam); + CreateMemoryDomain(LibGambatte.MemoryAreas.hram); // fixme: other code brokenly assumes that MainMemory is MemoryDomains[0] // (here, we'd want it to be MemoryDomains[2]) - var tmp = MemoryDomains[2]; MemoryDomains[2] = MemoryDomains[0]; MemoryDomains[0] = tmp; diff --git a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/LibGambatte.cs index 1112696397..4c6f525a5e 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -276,7 +276,9 @@ namespace BizHawk.Emulation.Consoles.GB vram = 0, rom = 1, wram = 2, - rambank = 3, + cartram = 3, + oam = 4, + hram = 5 } /// diff --git a/BizHawk.MultiClient/output/libgambatte.dll b/BizHawk.MultiClient/output/libgambatte.dll index 5712394eb38bafe0e815d06e72648062cc7aa331..d604749bd259188f3b02701b1d8d7844be61cf41 100644 GIT binary patch delta 14937 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 delta 14767 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 diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 5ffbf24349..12807e8ee6 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -97,7 +97,7 @@ public: int saveSavedataLength(); void saveSavedata(char *dest); - // 0 = vram, 1 = rom, 2 = wram, 3 = rambank + // 0 = vram, 1 = rom, 2 = wram, 3 = cartram, 4 = oam, 5 = hram bool getMemoryArea(int which, unsigned char **data, int *length); /** Saves emulator state to the state slot selected with selectState(). diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index d463b38c00..fd4e440721 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -694,8 +694,7 @@ void Cartridge::saveSavedata(char *dest) { } } -bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) -{ +bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) { if (!data || !length) return false; @@ -717,6 +716,7 @@ bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length) *data = memptrs.rambankdata(); *length = memptrs.rambankdataend() - memptrs.rambankdata(); return true; + default: return false; } diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index ed3899c519..46358dd88e 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -1003,4 +1003,24 @@ void Memory::setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned lon display.setDmgPaletteColor(palNum, colorNum, rgb32); } +bool Memory::getMemoryArea(int which, unsigned char **data, int *length) { + if (!data || !length) + return false; + + switch (which) + { + case 4: // oam + *data = &ioamhram[0]; + *length = 160; + return true; + case 5: // hram + *data = &ioamhram[384]; + *length = 127; + return true; + default: // pass to cartridge + return cart.getMemoryArea(which, data, length); + } +} + + } diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 83b93aa1b0..38617d894c 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -83,7 +83,7 @@ public: void saveSavedata(char *dest) { cart.saveSavedata(dest); } const std::string saveBasePath() const { return cart.saveBasePath(); } - bool getMemoryArea(int which, unsigned char **data, int *length) { return cart.getMemoryArea(which, data, length); } + bool getMemoryArea(int which, unsigned char **data, int *length); // { return cart.getMemoryArea(which, data, length); } void setOsdElement(std::auto_ptr osdElement) { display.setOsdElement(osdElement);