gambatte: add oam, hram to memory domain list
This commit is contained in:
parent
c5e71487fd
commit
d57e195e52
|
@ -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;
|
||||
|
|
|
@ -276,7 +276,9 @@ namespace BizHawk.Emulation.Consoles.GB
|
|||
vram = 0,
|
||||
rom = 1,
|
||||
wram = 2,
|
||||
rambank = 3,
|
||||
cartram = 3,
|
||||
oam = 4,
|
||||
hram = 5
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Binary file not shown.
|
@ -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().
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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> osdElement) {
|
||||
display.setOsdElement(osdElement);
|
||||
|
|
Loading…
Reference in New Issue