BizHawk/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/LibSaturnus.cs

77 lines
2.5 KiB
C#

using BizHawk.Common.BizInvoke;
using BizHawk.Emulation.Cores.Waterbox;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
{
public abstract class LibSaturnus : LibWaterboxCore
{
// some of the internal code uses wizardry by which certain pointers in ss.wbx[.text]
// must be greater than or equal to this address, but less than 4GB bigger than it
public const ulong StartAddress = 0x36d00000000;
[StructLayout(LayoutKind.Sequential)]
public class TOC
{
public int FirstTrack;
public int LastTrack;
public int DiskType;
[StructLayout(LayoutKind.Sequential)]
public struct Track
{
public int Adr;
public int Control;
public int Lba;
public int Valid;
}
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 101)]
public Track[] Tracks;
}
[StructLayout(LayoutKind.Sequential)]
public new class FrameInfo : LibWaterboxCore.FrameInfo
{
public int ResetPushed;
}
[UnmanagedFunctionPointer(CC)]
public delegate int FirmwareSizeCallback(string filename);
[UnmanagedFunctionPointer(CC)]
public delegate void FirmwareDataCallback(string filename, IntPtr dest);
[UnmanagedFunctionPointer(CC)]
public delegate void CDTOCCallback(int disk, [In, Out]TOC toc);
[UnmanagedFunctionPointer(CC)]
public delegate void CDSectorCallback(int disk, int lba, IntPtr dest);
[BizImport(CC)]
public abstract void SetFirmwareCallbacks(FirmwareSizeCallback sizecallback, FirmwareDataCallback datacallback);
[BizImport(CC)]
public abstract void SetCDCallbacks(CDTOCCallback toccallback, CDSectorCallback sectorcallback);
[BizImport(CC)]
public abstract bool Init(
int numDisks,
Saturnus.SyncSettings.CartType cartType,
Saturnus.SyncSettings.RegionType regionDefault,
bool regionAutodetect);
[BizImport(CC)]
public abstract void HardReset();
[BizImport(CC)]
public abstract void SetDisk(int disk, bool open);
[BizImport(CC)]
public abstract void SetControllerData(byte[] controllerData);
[BizImport(CC)]
public abstract void SetupInput(int[] portdevices, int[] multitaps);
[BizImport(CC)]
public abstract void SetRtc(long ticks, Saturnus.SyncSettings.LanguageType language);
[BizImport(CC)]
public abstract void SetVideoParameters(bool correctAspect, bool hBlend, bool hOverscan, int sls, int sle);
}
}