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; } }