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))
|
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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Binary file not shown.
|
@ -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().
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue