2013-11-22 09:33:56 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Common;
|
2015-11-02 17:26:49 +00:00
|
|
|
|
using BizHawk.Emulation.Common;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|
|
|
|
{
|
|
|
|
|
unsafe partial class LibsnesApi
|
|
|
|
|
{
|
|
|
|
|
public int QUERY_get_memory_size(SNES_MEMORY id)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = (uint)id;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_get_memory_size);
|
|
|
|
|
return (int)comm->value;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string QUERY_MemoryNameForId(SNES_MEMORY id)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->id = (uint)id;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_GetMemoryIdName);
|
|
|
|
|
return comm->GetAscii();
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte* QUERY_get_memory_data(SNES_MEMORY id)
|
|
|
|
|
{
|
|
|
|
|
string name = QUERY_MemoryNameForId(id);
|
2016-11-12 01:25:38 +00:00
|
|
|
|
if (!SharedMemoryBlocks.ContainsKey(name)) return null;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
var smb = SharedMemoryBlocks[name];
|
|
|
|
|
return (byte*)smb.Ptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte QUERY_peek(SNES_MEMORY id, uint addr)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->id = (uint)id;
|
|
|
|
|
comm->addr = addr;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_peek);
|
|
|
|
|
return (byte)comm->value;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
public void QUERY_poke(SNES_MEMORY id, uint addr, byte val)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->id = (uint)id;
|
|
|
|
|
comm->addr = addr;
|
|
|
|
|
comm->value = (byte)val;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_poke);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int QUERY_serialize_size()
|
|
|
|
|
{
|
2013-11-25 20:51:26 +00:00
|
|
|
|
for (; ; )
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
Message(eMessage.eMessage_QUERY_serialize_size);
|
|
|
|
|
int ret = (int)comm->size;
|
2013-11-25 20:51:26 +00:00
|
|
|
|
if (ret > 100)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2017-03-06 09:21:10 +00:00
|
|
|
|
else Console.WriteLine("WHY????????");
|
2013-11-25 20:51:26 +00:00
|
|
|
|
}
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_color_lut(IntPtr colors)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->ptr = colors.ToPointer();
|
|
|
|
|
Message(eMessage.eMessage_QUERY_set_color_lut);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_state_hook_exec(bool state)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = state ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_state_hook_exec);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_state_hook_read(bool state)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = state ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_state_hook_read);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_state_hook_write(bool state)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = state ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_state_hook_write);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_trace_callback(snes_trace_t callback)
|
|
|
|
|
{
|
2017-03-06 11:32:09 +00:00
|
|
|
|
this.traceCallback = callback;
|
|
|
|
|
comm->value = (callback != null) ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_enable_trace);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
public void QUERY_set_scanlineStart(snes_scanlineStart_t scanlineStart)
|
|
|
|
|
{
|
2017-03-06 11:32:09 +00:00
|
|
|
|
this.scanlineStart = scanlineStart;
|
|
|
|
|
comm->value = (scanlineStart != null) ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_enable_scanline);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
public void QUERY_set_audio_sample(snes_audio_sample_t audio_sample)
|
|
|
|
|
{
|
|
|
|
|
this.audio_sample = audio_sample;
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = (audio_sample!=null) ? 1u : 0u;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_enable_audio);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-03-06 09:21:10 +00:00
|
|
|
|
public void QUERY_set_layer_enable()
|
2013-11-22 09:33:56 +00:00
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
Message(eMessage.eMessage_QUERY_set_layer_enable);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QUERY_set_backdropColor(int backdropColor)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->value = (uint)backdropColor;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_set_backdropColor);
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int QUERY_peek_logical_register(SNES_REG reg)
|
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
comm->id = (uint)reg;
|
|
|
|
|
Message(eMessage.eMessage_QUERY_peek_logical_register);
|
|
|
|
|
return (int)comm->value;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-03-06 09:21:10 +00:00
|
|
|
|
public unsafe void QUERY_peek_cpu_regs(out CPURegs ret)
|
2013-11-22 09:33:56 +00:00
|
|
|
|
{
|
2017-03-06 09:21:10 +00:00
|
|
|
|
Message(eMessage.eMessage_QUERY_peek_cpu_regs);
|
|
|
|
|
ret = comm->cpuregs;
|
2013-11-22 09:33:56 +00:00
|
|
|
|
}
|
2015-11-02 17:26:49 +00:00
|
|
|
|
|
2016-12-16 17:33:02 +00:00
|
|
|
|
public void QUERY_set_cdl(ICodeDataLog cdl)
|
2015-11-02 17:26:49 +00:00
|
|
|
|
{
|
2017-05-06 21:23:26 +00:00
|
|
|
|
for (int i = 0; i < 8; i++)
|
2017-03-06 11:32:09 +00:00
|
|
|
|
{
|
|
|
|
|
comm->cdl_ptr[i] = 0;
|
|
|
|
|
comm->cdl_size[i] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (cdl != null)
|
|
|
|
|
{
|
|
|
|
|
comm->cdl_ptr[0] = cdl.GetPin("CARTROM").ToInt64();
|
|
|
|
|
comm->cdl_size[0] = cdl["CARTROM"].Length;
|
|
|
|
|
if (cdl.Has("CARTRAM"))
|
|
|
|
|
{
|
|
|
|
|
comm->cdl_ptr[1] = cdl.GetPin("CARTRAM").ToInt64();
|
|
|
|
|
comm->cdl_size[1] = cdl["CARTRAM"].Length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
comm->cdl_ptr[2] = cdl.GetPin("WRAM").ToInt64();
|
|
|
|
|
comm->cdl_size[2] = cdl["WRAM"].Length;
|
|
|
|
|
|
2017-05-06 21:23:26 +00:00
|
|
|
|
comm->cdl_ptr[3] = cdl.GetPin("APURAM").ToInt64();
|
|
|
|
|
comm->cdl_size[3] = cdl["APURAM"].Length;
|
|
|
|
|
|
|
|
|
|
if (cdl.Has("SGB_CARTROM"))
|
|
|
|
|
{
|
|
|
|
|
comm->cdl_ptr[4] = cdl.GetPin("SGB_CARTROM").ToInt64();
|
|
|
|
|
comm->cdl_size[4] = cdl["SGB_CARTROM"].Length;
|
|
|
|
|
|
|
|
|
|
if (cdl.Has("SGB_CARTRAM"))
|
|
|
|
|
{
|
|
|
|
|
comm->cdl_ptr[5] = cdl.GetPin("SGB_CARTRAM").ToInt64();
|
|
|
|
|
comm->cdl_size[5] = cdl["SGB_CARTRAM"].Length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
comm->cdl_ptr[6] = cdl.GetPin("SGB_WRAM").ToInt64();
|
|
|
|
|
comm->cdl_size[6] = cdl["SGB_WRAM"].Length;
|
|
|
|
|
|
|
|
|
|
comm->cdl_ptr[7] = cdl.GetPin("SGB_HRAM").ToInt64();
|
|
|
|
|
comm->cdl_size[7] = cdl["SGB_HRAM"].Length;
|
|
|
|
|
}
|
2017-03-06 11:32:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Message(eMessage.eMessage_QUERY_set_cdl);
|
2015-11-02 17:26:49 +00:00
|
|
|
|
}
|
2013-11-22 09:33:56 +00:00
|
|
|
|
|
|
|
|
|
}
|
2016-08-08 11:40:06 +00:00
|
|
|
|
}
|