gambatte: add oam, hram to memory domain list

This commit is contained in:
goyuken 2012-09-11 19:05:44 +00:00
parent c5e71487fd
commit d57e195e52
7 changed files with 35 additions and 10 deletions

View File

@ -339,8 +339,10 @@ namespace BizHawk.Emulation.Consoles.GB
if (!LibGambatte.gambatte_getmemoryarea(GambatteState, which, ref data, ref length)) if (!LibGambatte.gambatte_getmemoryarea(GambatteState, which, ref data, ref length))
throw new Exception("gambatte_getmemoryarea() failed!"); 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()"); throw new Exception("bad return from gambatte_getmemoryarea()");
MemoryRefreshers[i] = new MemoryRefresher(data, length); MemoryRefreshers[i] = new MemoryRefresher(data, length);
@ -349,17 +351,18 @@ namespace BizHawk.Emulation.Consoles.GB
void InitMemoryDomains() void InitMemoryDomains()
{ {
MemoryDomains = new MemoryDomain[4]; MemoryDomains = new MemoryDomain[6];
MemoryRefreshers = new MemoryRefresher[4]; MemoryRefreshers = new MemoryRefresher[6];
CreateMemoryDomain(LibGambatte.MemoryAreas.rambank); CreateMemoryDomain(LibGambatte.MemoryAreas.cartram);
CreateMemoryDomain(LibGambatte.MemoryAreas.rom); CreateMemoryDomain(LibGambatte.MemoryAreas.rom);
CreateMemoryDomain(LibGambatte.MemoryAreas.vram); CreateMemoryDomain(LibGambatte.MemoryAreas.vram);
CreateMemoryDomain(LibGambatte.MemoryAreas.wram); CreateMemoryDomain(LibGambatte.MemoryAreas.wram);
CreateMemoryDomain(LibGambatte.MemoryAreas.oam);
CreateMemoryDomain(LibGambatte.MemoryAreas.hram);
// fixme: other code brokenly assumes that MainMemory is MemoryDomains[0] // fixme: other code brokenly assumes that MainMemory is MemoryDomains[0]
// (here, we'd want it to be MemoryDomains[2]) // (here, we'd want it to be MemoryDomains[2])
var tmp = MemoryDomains[2]; var tmp = MemoryDomains[2];
MemoryDomains[2] = MemoryDomains[0]; MemoryDomains[2] = MemoryDomains[0];
MemoryDomains[0] = tmp; MemoryDomains[0] = tmp;

View File

@ -276,7 +276,9 @@ namespace BizHawk.Emulation.Consoles.GB
vram = 0, vram = 0,
rom = 1, rom = 1,
wram = 2, wram = 2,
rambank = 3, cartram = 3,
oam = 4,
hram = 5
} }
/// <summary> /// <summary>

View File

@ -97,7 +97,7 @@ public:
int saveSavedataLength(); int saveSavedataLength();
void saveSavedata(char *dest); 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); bool getMemoryArea(int which, unsigned char **data, int *length);
/** Saves emulator state to the state slot selected with selectState(). /** Saves emulator state to the state slot selected with selectState().

View File

@ -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) if (!data || !length)
return false; return false;
@ -717,6 +716,7 @@ bool Cartridge::getMemoryArea(int which, unsigned char **data, int *length)
*data = memptrs.rambankdata(); *data = memptrs.rambankdata();
*length = memptrs.rambankdataend() - memptrs.rambankdata(); *length = memptrs.rambankdataend() - memptrs.rambankdata();
return true; return true;
default: default:
return false; return false;
} }

View File

@ -1003,4 +1003,24 @@ void Memory::setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned lon
display.setDmgPaletteColor(palNum, colorNum, rgb32); 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);
}
}
} }

View File

@ -83,7 +83,7 @@ public:
void saveSavedata(char *dest) { cart.saveSavedata(dest); } void saveSavedata(char *dest) { cart.saveSavedata(dest); }
const std::string saveBasePath() const { return cart.saveBasePath(); } 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> osdElement) { void setOsdElement(std::auto_ptr<OsdElement> osdElement) {
display.setOsdElement(osdElement); display.setOsdElement(osdElement);