75 lines
1.6 KiB
C#
75 lines
1.6 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|
{
|
|
public partial class Gameboy : ICodeDataLogger
|
|
{
|
|
public void SetCDL(ICodeDataLog cdl)
|
|
{
|
|
_cdl = cdl;
|
|
LibGambatte.gambatte_setcdcallback(GambatteState, cdl == null ? null : _cdCallback);
|
|
}
|
|
|
|
public void NewCDL(ICodeDataLog cdl)
|
|
{
|
|
cdl["ROM"] = new byte[MemoryDomains["ROM"].Size];
|
|
|
|
// cdl["HRAM"] = new byte[_memoryDomains["HRAM"].Size]; //this is probably useless, but it's here if someone needs it
|
|
cdl["WRAM"] = new byte[MemoryDomains["WRAM"].Size];
|
|
|
|
if (MemoryDomains.Has("CartRAM"))
|
|
{
|
|
cdl["CartRAM"] = new byte[MemoryDomains["CartRAM"].Size];
|
|
}
|
|
|
|
cdl.SubType = "GB";
|
|
cdl.SubVer = 0;
|
|
}
|
|
|
|
[FeatureNotImplemented]
|
|
void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl)
|
|
{
|
|
}
|
|
|
|
private ICodeDataLog _cdl;
|
|
private readonly LibGambatte.CDCallback _cdCallback;
|
|
|
|
private void CDCallbackProc(int addr, LibGambatte.CDLog_AddrType addrtype, LibGambatte.CDLog_Flags flags)
|
|
{
|
|
if (_cdl == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!_cdl.Active)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string key;
|
|
switch (addrtype)
|
|
{
|
|
case LibGambatte.CDLog_AddrType.ROM:
|
|
key = "ROM";
|
|
break;
|
|
case LibGambatte.CDLog_AddrType.HRAM:
|
|
key = "HRAM";
|
|
break;
|
|
case LibGambatte.CDLog_AddrType.WRAM:
|
|
key = "WRAM";
|
|
break;
|
|
case LibGambatte.CDLog_AddrType.CartRAM:
|
|
key = "CartRAM";
|
|
break;
|
|
default:
|
|
throw new InvalidOperationException("Juniper lightbulb proxy");
|
|
}
|
|
|
|
_cdl[key][addr] |= (byte)flags;
|
|
}
|
|
|
|
}
|
|
} |