52 lines
1.4 KiB
C#
52 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|
{
|
|
public partial class GBA : IGBAGPUViewable
|
|
{
|
|
public GBAGPUMemoryAreas GetMemoryAreas()
|
|
{
|
|
IntPtr _vram = LibMeteor.libmeteor_getmemoryarea(LibMeteor.MemoryArea.vram);
|
|
IntPtr _palram = LibMeteor.libmeteor_getmemoryarea(LibMeteor.MemoryArea.palram);
|
|
IntPtr _oam = LibMeteor.libmeteor_getmemoryarea(LibMeteor.MemoryArea.oam);
|
|
IntPtr _mmio = LibMeteor.libmeteor_getmemoryarea(LibMeteor.MemoryArea.io);
|
|
|
|
if (_vram == IntPtr.Zero || _palram == IntPtr.Zero || _oam == IntPtr.Zero || _mmio == IntPtr.Zero)
|
|
throw new Exception("libmeteor_getmemoryarea() failed!");
|
|
|
|
return new GBAGPUMemoryAreas
|
|
{
|
|
vram = _vram,
|
|
palram = _palram,
|
|
oam = _oam,
|
|
mmio = _mmio
|
|
};
|
|
}
|
|
|
|
public void SetScanlineCallback(Action callback, int scanline)
|
|
{
|
|
if (scanline < 0 || scanline > 227)
|
|
{
|
|
throw new ArgumentOutOfRangeException("scanline", "Scanline must be in [0, 227]!");
|
|
}
|
|
|
|
if (callback == null)
|
|
{
|
|
scanlinecb = null;
|
|
LibMeteor.libmeteor_setscanlinecallback(null, 0);
|
|
}
|
|
else
|
|
{
|
|
scanlinecb = new LibMeteor.ScanlineCallback(callback);
|
|
LibMeteor.libmeteor_setscanlinecallback(scanlinecb, scanline);
|
|
}
|
|
}
|
|
|
|
private LibMeteor.ScanlineCallback scanlinecb = null;
|
|
}
|
|
}
|