LibsnesCore reformating round 2 - sort out private fields vs pulbic properties
This commit is contained in:
parent
808d03155a
commit
e3ae4b1410
|
@ -660,8 +660,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
//wtf to do? now we need an api all the time
|
//wtf to do? now we need an api all the time
|
||||||
if (currentSnesCore != null)
|
if (currentSnesCore != null)
|
||||||
return new SNESGraphicsDecoder(currentSnesCore.api, currentSnesCore.CurrPalette);
|
return new SNESGraphicsDecoder(currentSnesCore.Api, currentSnesCore.CurrPalette);
|
||||||
else return new SNESGraphicsDecoder(currentSnesCore.api, SnesColors.ColorType.BizHawk);
|
else return new SNESGraphicsDecoder(currentSnesCore.Api, SnesColors.ColorType.BizHawk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderPalette()
|
void RenderPalette()
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
_currCdl?.Pin();
|
_currCdl?.Pin();
|
||||||
|
|
||||||
// set it no matter what. if its null, the cdl will be unhooked from libsnes internally
|
// set it no matter what. if its null, the cdl will be unhooked from libsnes internally
|
||||||
api.QUERY_set_cdl(_currCdl);
|
Api.QUERY_set_cdl(_currCdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NewCDL(ICodeDataLog cdl)
|
public void NewCDL(ICodeDataLog cdl)
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
public IDictionary<string, RegisterValue> GetCpuFlagsAndRegisters()
|
public IDictionary<string, RegisterValue> GetCpuFlagsAndRegisters()
|
||||||
{
|
{
|
||||||
LibsnesApi.CPURegs regs;
|
LibsnesApi.CPURegs regs;
|
||||||
api.QUERY_peek_cpu_regs(out regs);
|
Api.QUERY_peek_cpu_regs(out regs);
|
||||||
|
|
||||||
bool fn = (regs.p & 0x80) != 0;
|
bool fn = (regs.p & 0x80) != 0;
|
||||||
bool fv = (regs.p & 0x40) != 0;
|
bool fv = (regs.p & 0x40) != 0;
|
||||||
|
|
|
@ -22,18 +22,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
IsLagFrame = true;
|
IsLagFrame = true;
|
||||||
|
|
||||||
if (!nocallbacks && _tracer.Enabled)
|
if (!_nocallbacks && _tracer.Enabled)
|
||||||
{
|
{
|
||||||
api.QUERY_set_trace_callback(tracecb);
|
Api.QUERY_set_trace_callback(_tracecb);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
api.QUERY_set_trace_callback(null);
|
Api.QUERY_set_trace_callback(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// for deterministic emulation, save the state we're going to use before frame advance
|
// for deterministic emulation, save the state we're going to use before frame advance
|
||||||
// don't do this during nocallbacks though, since it's already been done
|
// don't do this during nocallbacks though, since it's already been done
|
||||||
if (!nocallbacks && DeterministicEmulation)
|
if (!_nocallbacks && DeterministicEmulation)
|
||||||
{
|
{
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
var bw = new BinaryWriter(ms);
|
var bw = new BinaryWriter(ms);
|
||||||
|
@ -47,18 +47,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
}
|
}
|
||||||
|
|
||||||
// speedup when sound rendering is not needed
|
// speedup when sound rendering is not needed
|
||||||
api.QUERY_set_audio_sample(rendersound ? soundcb : null);
|
Api.QUERY_set_audio_sample(rendersound ? _soundcb : null);
|
||||||
|
|
||||||
bool resetSignal = Controller.IsPressed("Reset");
|
bool resetSignal = Controller.IsPressed("Reset");
|
||||||
if (resetSignal)
|
if (resetSignal)
|
||||||
{
|
{
|
||||||
api.CMD_reset();
|
Api.CMD_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool powerSignal = Controller.IsPressed("Power");
|
bool powerSignal = Controller.IsPressed("Power");
|
||||||
if (powerSignal)
|
if (powerSignal)
|
||||||
{
|
{
|
||||||
api.CMD_power();
|
Api.CMD_power();
|
||||||
}
|
}
|
||||||
|
|
||||||
var enables = new LibsnesApi.LayerEnables
|
var enables = new LibsnesApi.LayerEnables
|
||||||
|
@ -77,13 +77,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
Obj_Prio3 = _settings.ShowOBJ_3
|
Obj_Prio3 = _settings.ShowOBJ_3
|
||||||
};
|
};
|
||||||
|
|
||||||
api.SetLayerEnables(ref enables);
|
Api.SetLayerEnables(ref enables);
|
||||||
|
|
||||||
RefreshMemoryCallbacks(false);
|
RefreshMemoryCallbacks(false);
|
||||||
|
|
||||||
// apparently this is one frame?
|
// apparently this is one frame?
|
||||||
_timeFrameCounter++;
|
_timeFrameCounter++;
|
||||||
api.CMD_run();
|
Api.CMD_run();
|
||||||
|
|
||||||
// once upon a time we forwarded messages frmo bsnes here, by checking for queued text messages, but I don't think it's needed any longer
|
// once upon a time we forwarded messages frmo bsnes here, by checking for queued text messages, but I don't think it's needed any longer
|
||||||
if (IsLagFrame)
|
if (IsLagFrame)
|
||||||
|
@ -128,11 +128,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
|
|
||||||
api.CMD_unload_cartridge();
|
Api.CMD_unload_cartridge();
|
||||||
api.CMD_term();
|
Api.CMD_term();
|
||||||
|
|
||||||
resampler.Dispose();
|
_resampler.Dispose();
|
||||||
api.Dispose();
|
Api.Dispose();
|
||||||
|
|
||||||
_currCdl?.Unpin();
|
_currCdl?.Unpin();
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,8 +71,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
"System Bus",
|
"System Bus",
|
||||||
0x1000000,
|
0x1000000,
|
||||||
MemoryDomain.Endian.Little,
|
MemoryDomain.Endian.Little,
|
||||||
addr => api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr),
|
addr => Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr),
|
||||||
(addr, val) => api.QUERY_poke(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr, val), wordSize: 2));
|
(addr, val) => Api.QUERY_poke(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr, val), wordSize: 2));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -87,7 +87,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
private unsafe void MakeMemoryDomain(string name, LibsnesApi.SNES_MEMORY id, MemoryDomain.Endian endian, int byteSize = 1)
|
private unsafe void MakeMemoryDomain(string name, LibsnesApi.SNES_MEMORY id, MemoryDomain.Endian endian, int byteSize = 1)
|
||||||
{
|
{
|
||||||
int size = api.QUERY_get_memory_size(id);
|
int size = Api.QUERY_get_memory_size(id);
|
||||||
int mask = size - 1;
|
int mask = size - 1;
|
||||||
bool pow2 = Util.IsPowerOfTwo(size);
|
bool pow2 = Util.IsPowerOfTwo(size);
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte* blockptr = api.QUERY_get_memory_data(id);
|
byte* blockptr = Api.QUERY_get_memory_data(id);
|
||||||
|
|
||||||
MemoryDomain md;
|
MemoryDomain md;
|
||||||
|
|
||||||
|
@ -145,13 +145,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
private unsafe void MakeFakeBus()
|
private unsafe void MakeFakeBus()
|
||||||
{
|
{
|
||||||
int size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.WRAM);
|
int size = Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.WRAM);
|
||||||
if (size != 0x20000)
|
if (size != 0x20000)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
byte* blockptr = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.WRAM);
|
byte* blockptr = Api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.WRAM);
|
||||||
|
|
||||||
var md = new MemoryDomainDelegate("System Bus", 0x1000000, MemoryDomain.Endian.Little,
|
var md = new MemoryDomainDelegate("System Bus", 0x1000000, MemoryDomain.Endian.Little,
|
||||||
addr =>
|
addr =>
|
||||||
|
@ -190,14 +190,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
case LibsnesApi.SNES_MAPPER.LOROM:
|
case LibsnesApi.SNES_MAPPER.LOROM:
|
||||||
if (low >= 0x8000)
|
if (low >= 0x8000)
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LibsnesApi.SNES_MAPPER.EXLOROM:
|
case LibsnesApi.SNES_MAPPER.EXLOROM:
|
||||||
if ((bank >= 0x40 && bank <= 0x7f) || low >= 0x8000)
|
if ((bank >= 0x40 && bank <= 0x7f) || low >= 0x8000)
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -205,7 +205,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
case LibsnesApi.SNES_MAPPER.EXHIROM:
|
case LibsnesApi.SNES_MAPPER.EXHIROM:
|
||||||
if ((bank >= 0x40 && bank <= 0x7f) || bank >= 0xc0 || low >= 0x8000)
|
if ((bank >= 0x40 && bank <= 0x7f) || bank >= 0xc0 || low >= 0x8000)
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -213,21 +213,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
if ((bank >= 0x40 && bank <= 0x5f) || (bank >= 0xc0 && bank <= 0xdf) ||
|
if ((bank >= 0x40 && bank <= 0x5f) || (bank >= 0xc0 && bank <= 0xdf) ||
|
||||||
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))))
|
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LibsnesApi.SNES_MAPPER.SA1ROM:
|
case LibsnesApi.SNES_MAPPER.SA1ROM:
|
||||||
if (bank >= 0xc0 || (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))))
|
if (bank >= 0xc0 || (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LibsnesApi.SNES_MAPPER.BSCLOROM:
|
case LibsnesApi.SNES_MAPPER.BSCLOROM:
|
||||||
if (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf)))
|
if (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf)))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -235,7 +235,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
if ((bank >= 0x40 && bank <= 0x5f) || (bank >= 0xc0 && bank <= 0xdf) ||
|
if ((bank >= 0x40 && bank <= 0x5f) || (bank >= 0xc0 && bank <= 0xdf) ||
|
||||||
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x1f) || (bank >= 0x80 && bank <= 0x9f))))
|
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x1f) || (bank >= 0x80 && bank <= 0x9f))))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -244,14 +244,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))) ||
|
(low >= 0x8000 && ((bank >= 0x00 && bank <= 0x3f) || (bank >= 0x80 && bank <= 0xbf))) ||
|
||||||
(low >= 0x6000 && low <= 0x7fff && (bank >= 0x20 && bank <= 0x3f)))
|
(low >= 0x6000 && low <= 0x7fff && (bank >= 0x20 && bank <= 0x3f)))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LibsnesApi.SNES_MAPPER.STROM:
|
case LibsnesApi.SNES_MAPPER.STROM:
|
||||||
if (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x5f) || (bank >= 0x80 && bank <= 0xdf)))
|
if (low >= 0x8000 && ((bank >= 0x00 && bank <= 0x5f) || (bank >= 0x80 && bank <= 0xdf)))
|
||||||
{
|
{
|
||||||
return api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
return Api.QUERY_peek(LibsnesApi.SNES_MEMORY.SYSBUS, (uint)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (api.Region == LibsnesApi.SNES_REGION.NTSC)
|
if (Api.Region == LibsnesApi.SNES_REGION.NTSC)
|
||||||
{
|
{
|
||||||
return DisplayType.NTSC;
|
return DisplayType.NTSC;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,17 +8,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
public unsafe partial class LibsnesCore : ISaveRam
|
public unsafe partial class LibsnesCore : ISaveRam
|
||||||
{
|
{
|
||||||
public bool SaveRamModified =>
|
public bool SaveRamModified =>
|
||||||
api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM) != 0
|
Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM) != 0
|
||||||
|| api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM) != 0;
|
|| Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM) != 0;
|
||||||
|
|
||||||
public byte[] CloneSaveRam()
|
public byte[] CloneSaveRam()
|
||||||
{
|
{
|
||||||
byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
byte* buf = Api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||||
var size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
var size = Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||||
if (buf == null)
|
if (buf == null)
|
||||||
{
|
{
|
||||||
buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
buf = Api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
||||||
size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
size = Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
var ret = new byte[size];
|
var ret = new byte[size];
|
||||||
|
@ -28,12 +28,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
public void StoreSaveRam(byte[] data)
|
public void StoreSaveRam(byte[] data)
|
||||||
{
|
{
|
||||||
byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
byte* buf = Api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||||
var size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
var size = Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||||
if (buf == null)
|
if (buf == null)
|
||||||
{
|
{
|
||||||
buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
buf = Api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
||||||
size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
size = Api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
|
|
||||||
public void LoadStateBinary(BinaryReader reader)
|
public void LoadStateBinary(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int size = api.QUERY_serialize_size();
|
int size = Api.QUERY_serialize_size();
|
||||||
byte[] buf = reader.ReadBytes(size);
|
byte[] buf = reader.ReadBytes(size);
|
||||||
CoreLoadState(buf);
|
CoreLoadState(buf);
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
ssc.DeSerialize(reader);
|
ssc.DeSerialize(reader);
|
||||||
IController tmp = Controller;
|
IController tmp = Controller;
|
||||||
Controller = ssc;
|
Controller = ssc;
|
||||||
nocallbacks = true;
|
_nocallbacks = true;
|
||||||
FrameAdvance(false, false);
|
FrameAdvance(false, false);
|
||||||
nocallbacks = false;
|
_nocallbacks = false;
|
||||||
Controller = tmp;
|
Controller = tmp;
|
||||||
ssc.Serialize(bw);
|
ssc.Serialize(bw);
|
||||||
}
|
}
|
||||||
|
@ -97,28 +97,28 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
// handle the unmanaged part of loadstating
|
// handle the unmanaged part of loadstating
|
||||||
private void CoreLoadState(byte[] data)
|
private void CoreLoadState(byte[] data)
|
||||||
{
|
{
|
||||||
int size = api.QUERY_serialize_size();
|
int size = Api.QUERY_serialize_size();
|
||||||
if (data.Length != size)
|
if (data.Length != size)
|
||||||
{
|
{
|
||||||
throw new Exception("Libsnes internal savestate size mismatch!");
|
throw new Exception("Libsnes internal savestate size mismatch!");
|
||||||
}
|
}
|
||||||
|
|
||||||
api.CMD_init();
|
Api.CMD_init();
|
||||||
|
|
||||||
// zero 01-sep-2014 - this approach isn't being used anymore, it's too slow!
|
// zero 01-sep-2014 - this approach isn't being used anymore, it's too slow!
|
||||||
// LoadCurrent(); //need to make sure chip roms are reloaded
|
// LoadCurrent(); //need to make sure chip roms are reloaded
|
||||||
fixed (byte* pbuf = &data[0])
|
fixed (byte* pbuf = &data[0])
|
||||||
api.CMD_unserialize(new IntPtr(pbuf), size);
|
Api.CMD_unserialize(new IntPtr(pbuf), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// handle the unmanaged part of savestating
|
// handle the unmanaged part of savestating
|
||||||
private byte[] CoreSaveState()
|
private byte[] CoreSaveState()
|
||||||
{
|
{
|
||||||
int size = api.QUERY_serialize_size();
|
int size = Api.QUERY_serialize_size();
|
||||||
byte[] buf = new byte[size];
|
byte[] buf = new byte[size];
|
||||||
fixed (byte* pbuf = &buf[0])
|
fixed (byte* pbuf = &buf[0])
|
||||||
api.CMD_serialize(new IntPtr(pbuf), size);
|
Api.CMD_serialize(new IntPtr(pbuf), size);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
_settings = (SnesSettings)Settings ?? new SnesSettings();
|
_settings = (SnesSettings)Settings ?? new SnesSettings();
|
||||||
_syncSettings = (SnesSyncSettings)SyncSettings ?? new SnesSyncSettings();
|
_syncSettings = (SnesSyncSettings)SyncSettings ?? new SnesSyncSettings();
|
||||||
|
|
||||||
api = new LibsnesApi(GetDllPath())
|
Api = new LibsnesApi(GetDllPath())
|
||||||
{
|
{
|
||||||
ReadHook = ReadHook,
|
ReadHook = ReadHook,
|
||||||
ExecHook = ExecHook,
|
ExecHook = ExecHook,
|
||||||
|
@ -73,27 +73,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
_controllerDeck = new LibsnesControllerDeck(
|
_controllerDeck = new LibsnesControllerDeck(
|
||||||
_syncSettings.LeftPort,
|
_syncSettings.LeftPort,
|
||||||
_syncSettings.RightPort);
|
_syncSettings.RightPort);
|
||||||
_controllerDeck.NativeInit(api);
|
_controllerDeck.NativeInit(Api);
|
||||||
|
|
||||||
api.CMD_init();
|
Api.CMD_init();
|
||||||
|
|
||||||
api.QUERY_set_video_refresh(snes_video_refresh);
|
Api.QUERY_set_video_refresh(snes_video_refresh);
|
||||||
api.QUERY_set_input_poll(snes_input_poll);
|
Api.QUERY_set_input_poll(snes_input_poll);
|
||||||
api.QUERY_set_input_state(snes_input_state);
|
Api.QUERY_set_input_state(snes_input_state);
|
||||||
api.QUERY_set_input_notify(snes_input_notify);
|
Api.QUERY_set_input_notify(snes_input_notify);
|
||||||
api.QUERY_set_path_request(snes_path_request);
|
Api.QUERY_set_path_request(snes_path_request);
|
||||||
|
|
||||||
scanlineStart_cb = new LibsnesApi.snes_scanlineStart_t(snes_scanlineStart);
|
_scanlineStartCb = new LibsnesApi.snes_scanlineStart_t(snes_scanlineStart);
|
||||||
tracecb = new LibsnesApi.snes_trace_t(snes_trace);
|
_tracecb = new LibsnesApi.snes_trace_t(snes_trace);
|
||||||
|
|
||||||
soundcb = new LibsnesApi.snes_audio_sample_t(snes_audio_sample);
|
_soundcb = new LibsnesApi.snes_audio_sample_t(snes_audio_sample);
|
||||||
api.QUERY_set_audio_sample(soundcb);
|
Api.QUERY_set_audio_sample(_soundcb);
|
||||||
|
|
||||||
RefreshPalette();
|
RefreshPalette();
|
||||||
|
|
||||||
// start up audio resampler
|
// start up audio resampler
|
||||||
InitAudio();
|
InitAudio();
|
||||||
ser.Register<ISoundProvider>(resampler);
|
ser.Register<ISoundProvider>(_resampler);
|
||||||
|
|
||||||
// strip header
|
// strip header
|
||||||
if ((romData?.Length & 0x7FFF) == 512)
|
if ((romData?.Length & 0x7FFF) == 512)
|
||||||
|
@ -103,13 +103,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
romData = newData;
|
romData = newData;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (game["SGB"])
|
if (game["SGB"])
|
||||||
{
|
{
|
||||||
IsSGB = true;
|
IsSGB = true;
|
||||||
SystemId = "SNES";
|
SystemId = "SNES";
|
||||||
BoardName = "SGB";
|
BoardName = "SGB";
|
||||||
|
|
||||||
CurrLoadParams = new LoadParams()
|
_currLoadParams = new LoadParams()
|
||||||
{
|
{
|
||||||
type = LoadParamType.SuperGameBoy,
|
type = LoadParamType.SuperGameBoy,
|
||||||
rom_xml = null,
|
rom_xml = null,
|
||||||
|
@ -128,14 +128,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
// we may need to get some information out of the cart, even during the following bootup/load process
|
// we may need to get some information out of the cart, even during the following bootup/load process
|
||||||
if (xmlData != null)
|
if (xmlData != null)
|
||||||
{
|
{
|
||||||
romxml = new XmlDocument();
|
_romxml = new XmlDocument();
|
||||||
romxml.Load(new MemoryStream(xmlData));
|
_romxml.Load(new MemoryStream(xmlData));
|
||||||
|
|
||||||
// bsnes wont inspect the xml to load the necessary sfc file.
|
// bsnes wont inspect the xml to load the necessary sfc file.
|
||||||
// so, we have to do that here and pass it in as the romData :/
|
// so, we have to do that here and pass it in as the romData :/
|
||||||
if (romxml["cartridge"] != null && romxml["cartridge"]["rom"] != null)
|
if (_romxml["cartridge"] != null && _romxml["cartridge"]["rom"] != null)
|
||||||
{
|
{
|
||||||
romData = File.ReadAllBytes(CoreComm.CoreFileProvider.PathSubfile(romxml["cartridge"]["rom"].Attributes["name"].Value));
|
romData = File.ReadAllBytes(CoreComm.CoreFileProvider.PathSubfile(_romxml["cartridge"]["rom"].Attributes["name"].Value));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -144,7 +144,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemId = "SNES";
|
SystemId = "SNES";
|
||||||
CurrLoadParams = new LoadParams()
|
_currLoadParams = new LoadParams()
|
||||||
{
|
{
|
||||||
type = LoadParamType.Normal,
|
type = LoadParamType.Normal,
|
||||||
xml_data = xmlData,
|
xml_data = xmlData,
|
||||||
|
@ -157,7 +157,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (api.Region == LibsnesApi.SNES_REGION.NTSC)
|
if (Api.Region == LibsnesApi.SNES_REGION.NTSC)
|
||||||
{
|
{
|
||||||
// similar to what aviout reports from snes9x and seems logical from bsnes first principles. bsnes uses that numerator (ntsc master clockrate) for sure.
|
// similar to what aviout reports from snes9x and seems logical from bsnes first principles. bsnes uses that numerator (ntsc master clockrate) for sure.
|
||||||
CoreComm.VsyncNum = 21477272;
|
CoreComm.VsyncNum = 21477272;
|
||||||
|
@ -170,7 +170,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
CoreComm.VsyncDen = 4 * 341 * 312;
|
CoreComm.VsyncDen = 4 * 341 * 312;
|
||||||
}
|
}
|
||||||
|
|
||||||
api.CMD_power();
|
Api.CMD_power();
|
||||||
|
|
||||||
SetupMemoryDomains(romData, sgbRomData);
|
SetupMemoryDomains(romData, sgbRomData);
|
||||||
|
|
||||||
|
@ -188,7 +188,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameInfo _game;
|
private readonly GameInfo _game;
|
||||||
|
private readonly LibsnesControllerDeck _controllerDeck;
|
||||||
|
private readonly ITraceable _tracer;
|
||||||
|
private readonly XmlDocument _romxml;
|
||||||
|
private readonly LibsnesApi.snes_scanlineStart_t _scanlineStartCb;
|
||||||
|
private readonly LibsnesApi.snes_trace_t _tracecb;
|
||||||
|
private readonly LibsnesApi.snes_audio_sample_t _soundcb;
|
||||||
|
|
||||||
|
private LoadParams _currLoadParams;
|
||||||
|
private SpeexResampler _resampler;
|
||||||
|
private int _timeFrameCounter;
|
||||||
|
private bool _nocallbacks; // disable all external callbacks. the front end should not even know the core is frame advancing
|
||||||
|
private bool _disposed;
|
||||||
|
|
||||||
|
public bool IsSGB { get; }
|
||||||
|
|
||||||
public string CurrentProfile
|
public string CurrentProfile
|
||||||
{
|
{
|
||||||
|
@ -204,38 +218,42 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsSGB { get; }
|
public LibsnesApi Api { get; }
|
||||||
|
|
||||||
private LibsnesControllerDeck _controllerDeck;
|
public SnesColors.ColorType CurrPalette { get; private set; }
|
||||||
|
|
||||||
/// <summary>disable all external callbacks. the front end should not even know the core is frame advancing</summary>
|
public MyScanlineHookManager ScanlineHookManager { get; }
|
||||||
private bool nocallbacks = false;
|
|
||||||
|
|
||||||
private readonly ITraceable _tracer;
|
|
||||||
|
|
||||||
public class MyScanlineHookManager : ScanlineHookManager
|
public class MyScanlineHookManager : ScanlineHookManager
|
||||||
{
|
{
|
||||||
|
private readonly LibsnesCore _core;
|
||||||
|
|
||||||
public MyScanlineHookManager(LibsnesCore core)
|
public MyScanlineHookManager(LibsnesCore core)
|
||||||
{
|
{
|
||||||
this.core = core;
|
_core = core;
|
||||||
}
|
}
|
||||||
|
|
||||||
LibsnesCore core;
|
|
||||||
|
|
||||||
public override void OnHooksChanged()
|
public override void OnHooksChanged()
|
||||||
{
|
{
|
||||||
core.OnScanlineHooksChanged();
|
_core.OnScanlineHooksChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool _disposed = false;
|
|
||||||
|
|
||||||
public MyScanlineHookManager ScanlineHookManager;
|
|
||||||
private void OnScanlineHooksChanged()
|
private void OnScanlineHooksChanged()
|
||||||
{
|
{
|
||||||
if (_disposed) return;
|
if (_disposed)
|
||||||
if (ScanlineHookManager.HookCount == 0) api.QUERY_set_scanlineStart(null);
|
{
|
||||||
else api.QUERY_set_scanlineStart(scanlineStart_cb);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ScanlineHookManager.HookCount == 0)
|
||||||
|
{
|
||||||
|
Api.QUERY_set_scanlineStart(null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Api.QUERY_set_scanlineStart(_scanlineStartCb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void snes_scanlineStart(int line)
|
private void snes_scanlineStart(int line)
|
||||||
|
@ -247,20 +265,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
{
|
{
|
||||||
// every rom requests msu1.rom... why? who knows.
|
// every rom requests msu1.rom... why? who knows.
|
||||||
// also handle msu-1 pcm files here
|
// also handle msu-1 pcm files here
|
||||||
bool is_msu1_rom = hint == "msu1.rom";
|
bool isMsu1Rom = hint == "msu1.rom";
|
||||||
bool is_msu1_pcm = Path.GetExtension(hint).ToLower() == ".pcm";
|
bool isMsu1Pcm = Path.GetExtension(hint).ToLower() == ".pcm";
|
||||||
if (is_msu1_rom || is_msu1_pcm)
|
if (isMsu1Rom || isMsu1Pcm)
|
||||||
{
|
{
|
||||||
// well, check if we have an msu-1 xml
|
// well, check if we have an msu-1 xml
|
||||||
if (romxml != null && romxml["cartridge"] != null && romxml["cartridge"]["msu1"] != null)
|
if (_romxml != null && _romxml["cartridge"] != null && _romxml["cartridge"]["msu1"] != null)
|
||||||
{
|
{
|
||||||
var msu1 = romxml["cartridge"]["msu1"];
|
var msu1 = _romxml["cartridge"]["msu1"];
|
||||||
if (is_msu1_rom && msu1["rom"].Attributes["name"] != null)
|
if (isMsu1Rom && msu1["rom"].Attributes["name"] != null)
|
||||||
{
|
{
|
||||||
return CoreComm.CoreFileProvider.PathSubfile(msu1["rom"].Attributes["name"].Value);
|
return CoreComm.CoreFileProvider.PathSubfile(msu1["rom"].Attributes["name"].Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_msu1_pcm)
|
if (isMsu1Pcm)
|
||||||
{
|
{
|
||||||
// return @"D:\roms\snes\SuperRoadBlaster\SuperRoadBlaster-1.pcm";
|
// return @"D:\roms\snes\SuperRoadBlaster\SuperRoadBlaster-1.pcm";
|
||||||
// return "";
|
// return "";
|
||||||
|
@ -326,19 +344,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SnesColors.ColorType CurrPalette { get; private set; }
|
private void SetPalette(SnesColors.ColorType pal)
|
||||||
|
|
||||||
public void SetPalette(SnesColors.ColorType pal)
|
|
||||||
{
|
{
|
||||||
CurrPalette = pal;
|
CurrPalette = pal;
|
||||||
int[] tmp = SnesColors.GetLUT(pal);
|
int[] tmp = SnesColors.GetLUT(pal);
|
||||||
fixed (int* p = &tmp[0])
|
fixed (int* p = &tmp[0])
|
||||||
api.QUERY_set_color_lut((IntPtr)p);
|
Api.QUERY_set_color_lut((IntPtr)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LibsnesApi api;
|
|
||||||
private XmlDocument romxml;
|
|
||||||
|
|
||||||
private string GetDllPath()
|
private string GetDllPath()
|
||||||
{
|
{
|
||||||
var exename = "libsneshawk-32-" + CurrentProfile.ToLower() + ".dll";
|
var exename = "libsneshawk-32-" + CurrentProfile.ToLower() + ".dll";
|
||||||
|
@ -353,7 +366,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
return dllPath;
|
return dllPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadHook(uint addr)
|
private void ReadHook(uint addr)
|
||||||
{
|
{
|
||||||
MemoryCallbacks.CallReads(addr);
|
MemoryCallbacks.CallReads(addr);
|
||||||
// we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point
|
// we RefreshMemoryCallbacks() after the trigger in case the trigger turns itself off at that point
|
||||||
|
@ -377,10 +390,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
// RefreshMemoryCallbacks();
|
// RefreshMemoryCallbacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
private LibsnesApi.snes_scanlineStart_t scanlineStart_cb;
|
|
||||||
private LibsnesApi.snes_trace_t tracecb;
|
|
||||||
private LibsnesApi.snes_audio_sample_t soundcb;
|
|
||||||
|
|
||||||
private enum LoadParamType
|
private enum LoadParamType
|
||||||
{
|
{
|
||||||
Normal, SuperGameBoy
|
Normal, SuperGameBoy
|
||||||
|
@ -397,15 +406,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
public byte[] dmg_data;
|
public byte[] dmg_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoadParams CurrLoadParams;
|
|
||||||
|
|
||||||
private bool LoadCurrent()
|
private bool LoadCurrent()
|
||||||
{
|
{
|
||||||
bool result = CurrLoadParams.type == LoadParamType.Normal
|
bool result = _currLoadParams.type == LoadParamType.Normal
|
||||||
? api.CMD_load_cartridge_normal(CurrLoadParams.xml_data, CurrLoadParams.rom_data)
|
? Api.CMD_load_cartridge_normal(_currLoadParams.xml_data, _currLoadParams.rom_data)
|
||||||
: api.CMD_load_cartridge_super_game_boy(CurrLoadParams.rom_xml, CurrLoadParams.rom_data, CurrLoadParams.rom_size, CurrLoadParams.dmg_data);
|
: Api.CMD_load_cartridge_super_game_boy(_currLoadParams.rom_xml, _currLoadParams.rom_data, _currLoadParams.rom_size, _currLoadParams.dmg_data);
|
||||||
|
|
||||||
_mapper = api.Mapper;
|
_mapper = Api.Mapper;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -435,7 +442,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
// 0: signifies latch bit going to 0. should be reported as oninputpoll
|
// 0: signifies latch bit going to 0. should be reported as oninputpoll
|
||||||
// 1: signifies latch bit going to 1. should be reported as oninputpoll
|
// 1: signifies latch bit going to 1. should be reported as oninputpoll
|
||||||
if (index >= 0x4000)
|
if (index >= 0x4000)
|
||||||
|
{
|
||||||
IsLagFrame = false;
|
IsLagFrame = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void snes_video_refresh(int* data, int width, int height)
|
private void snes_video_refresh(int* data, int width, int height)
|
||||||
|
@ -511,8 +520,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bonus = i * _videoWidth + xbonus;
|
int bonus = (i * _videoWidth) + xbonus;
|
||||||
for (int y = 0; y < height; y++)
|
for (int y = 0; y < height; y++)
|
||||||
|
{
|
||||||
for (int x = 0; x < width; x++)
|
for (int x = 0; x < width; x++)
|
||||||
{
|
{
|
||||||
int si = y * srcPitch + x + srcStart;
|
int si = y * srcPitch + x + srcStart;
|
||||||
|
@ -520,6 +530,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
int rgb = data[si];
|
int rgb = data[si];
|
||||||
_videoBuffer[di] = rgb;
|
_videoBuffer[di] = rgb;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -527,13 +538,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
private void RefreshMemoryCallbacks(bool suppress)
|
private void RefreshMemoryCallbacks(bool suppress)
|
||||||
{
|
{
|
||||||
var mcs = MemoryCallbacks;
|
var mcs = MemoryCallbacks;
|
||||||
api.QUERY_set_state_hook_exec(!suppress && mcs.HasExecutes);
|
Api.QUERY_set_state_hook_exec(!suppress && mcs.HasExecutes);
|
||||||
api.QUERY_set_state_hook_read(!suppress && mcs.HasReads);
|
Api.QUERY_set_state_hook_read(!suppress && mcs.HasReads);
|
||||||
api.QUERY_set_state_hook_write(!suppress && mcs.HasWrites);
|
Api.QUERY_set_state_hook_write(!suppress && mcs.HasWrites);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int _timeFrameCounter;
|
|
||||||
|
|
||||||
//public byte[] snes_get_memory_data_read(LibsnesApi.SNES_MEMORY id)
|
//public byte[] snes_get_memory_data_read(LibsnesApi.SNES_MEMORY id)
|
||||||
//{
|
//{
|
||||||
// var size = (int)api.snes_get_memory_size(id);
|
// var size = (int)api.snes_get_memory_size(id);
|
||||||
|
@ -542,6 +551,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
// return ret;
|
// return ret;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
private void InitAudio()
|
||||||
|
{
|
||||||
|
_resampler = new SpeexResampler(6, 64081, 88200, 32041, 44100);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void snes_audio_sample(ushort left, ushort right)
|
||||||
|
{
|
||||||
|
_resampler.EnqueueSample((short)left, (short)right);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshPalette()
|
||||||
|
{
|
||||||
|
SetPalette((SnesColors.ColorType)Enum.Parse(typeof(SnesColors.ColorType), _settings.Palette, false));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// can freeze a copy of a controller input set and serialize\deserialize it
|
/// can freeze a copy of a controller input set and serialize\deserialize it
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -561,7 +585,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
this.def = def;
|
this.def = def;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorkingDictionary<string, float> buttons = new WorkingDictionary<string,float>();
|
WorkingDictionary<string, float> buttons = new WorkingDictionary<string, float>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// invalid until CopyFrom has been called
|
/// invalid until CopyFrom has been called
|
||||||
|
@ -596,7 +620,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
buttons.Add(k, v);
|
buttons.Add(k, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// this controller's definition changes to that of source
|
/// this controller's definition changes to that of source
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -629,7 +653,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
{
|
{
|
||||||
buttons[button] = 1.0f;
|
buttons[button] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool this[string button]
|
public bool this[string button]
|
||||||
{
|
{
|
||||||
get { return buttons[button] != 0; }
|
get { return buttons[button] != 0; }
|
||||||
|
@ -645,23 +669,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
||||||
return buttons[name];
|
return buttons[name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SpeexResampler resampler;
|
|
||||||
|
|
||||||
private void InitAudio()
|
|
||||||
{
|
|
||||||
resampler = new SpeexResampler(6, 64081, 88200, 32041, 44100);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void snes_audio_sample(ushort left, ushort right)
|
|
||||||
{
|
|
||||||
resampler.EnqueueSample((short)left, (short)right);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RefreshPalette()
|
|
||||||
{
|
|
||||||
SetPalette((SnesColors.ColorType)Enum.Parse(typeof(SnesColors.ColorType), _settings.Palette, false));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ScanlineHookManager
|
public class ScanlineHookManager
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PSP/@EntryIndexedValue">PSP</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PSP/@EntryIndexedValue">PSP</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PSX/@EntryIndexedValue">PSX</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PSX/@EntryIndexedValue">PSX</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SG/@EntryIndexedValue">SG</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SG/@EntryIndexedValue">SG</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SGB/@EntryIndexedValue">SGB</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SGX/@EntryIndexedValue">SGX</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SGX/@EntryIndexedValue">SGX</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SNES/@EntryIndexedValue">SNES</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SNES/@EntryIndexedValue">SNES</s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TI/@EntryIndexedValue">TI</s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TI/@EntryIndexedValue">TI</s:String>
|
||||||
|
|
Loading…
Reference in New Issue