add all satellaview roms as separate firmware files

also implement corresponding loading code in the core
This commit is contained in:
Morilli 2023-03-06 03:39:11 +01:00 committed by Moritz Bender
parent bec6e2ac1e
commit 6329d6a6fd
5 changed files with 43 additions and 13 deletions

View File

@ -64,6 +64,7 @@ namespace BizHawk.Client.EmuHawk
{
["NES"] = "NES",
["SNES"] = "SNES",
["BSX"] = "SNES+Satellaview",
["PCECD"] = "PCE-CD",
["SAT"] = "Saturn",
["A78"] = "Atari 7800",

View File

@ -89,7 +89,6 @@ namespace BizHawk.Emulation.Common
Option("SNES", "Rom_SGB", in sgbA_Beta);
Option("SNES", "Rom_SGB", in sgbB, FirmwareOptionStatus.Ideal);
Option("SNES", "Rom_SGB2", in sgb2, FirmwareOptionStatus.Ideal);
FirmwareAndOption("604556B2E62860AF18DB5A77F2956EBC75450020", 1048576, "SNES", "Rom_BSX", "SNES_BS-X.sfc", "BS-X Rom (BS-X Sore wa Namae o Nusumareta Machi no Monogatari)");
FirmwareAndOption("A002F4EFBA42775A31185D443F3ED1790B0E949A", 3072, "SNES", "CX4", "SNES_cx4.rom", "CX4 Rom");
FirmwareAndOption("188D471FEFEA71EB53F0EE7064697FF0971B1014", 8192, "SNES", "DSP1", "SNES_dsp1.rom", "DSP1 Rom");
FirmwareAndOption("78B724811F5F18D8C67669D9390397EB1A47A5E2", 8192, "SNES", "DSP1b", "SNES_dsp1b.rom", "DSP1b Rom");
@ -100,6 +99,17 @@ namespace BizHawk.Emulation.Common
FirmwareAndOption("FECBAE2CEC76C710422486BAA186FFA7CA1CF925", 53248, "SNES", "ST011", "SNES_st011.rom", "ST011 Rom");
FirmwareAndOption("91383B92745CC7CC4F15409AC5BC2C2F699A43F1", 163840, "SNES", "ST018", "SNES_st018.rom", "ST018 Rom");
// see SATELLAVIEW_CARTRIDGE enum in BsnesCore
FirmwareAndOption("604556B2E62860AF18DB5A77F2956EBC75450020", 1048576, "BSX", "Rom_BSX", "Satellaview_BS-X.sfc", "BS-X Rom");
FirmwareAndOption("8417556B5CE22FB9BC4026FE28F7AEE348A76FD9", 1048576, "BSX", "Rom_Mahjong", "Satellaview_Mahjong.sfc", "Joushou Mahjong Tenpai Rom");
FirmwareAndOption("356A3D60E9FABFF4B4CEC66277C9A6B717C958CE", 1572864, "BSX", "Rom_GNEXT", "Satellaview_GNEXT.sfc", "SD Gundam G-Next Rom");
FirmwareAndOption("95F31DFB31200E31E80007CC66A32E2C1A7B02BE", 2097152, "BSX", "Rom_RPG_Tsukuru", "Satellaview_RPG_Tsukuru.sfc", "RPG Tsukūru 2 Rom");
FirmwareAndOption("A6AD0F89C3E75327D70AA0F0239C7B06F151E0A4", 1048576, "BSX", "Rom_SameGame", "Satellaview_SameGame.sfc", "SameGame Rom");
FirmwareAndOption("24AF9A5A78635EC493BBBC2540AB98BD161C5798", 3145728, "BSX", "Rom_DS96", "Satellaview_Derby_Stallion_96.sfc", "Derby Stallion 96 Rom");
FirmwareAndOption("337E0C4BDBF544787B543A1FB83AFBA7526191B9", 1048576, "BSX", "Rom_Ongaku_Tsukuru", "Satellaview_Ongaku_Tsukuru.sfc", "Ongaku Tsukūru: Kanadēru Rom");
FirmwareAndOption("A9B124948A19BB5A295EC208FCA8180476BDFEBB", 3145728, "BSX", "Rom_SoundNovel_Tsukuru", "Satellaview_SoundNovel_Tsukuru.sfc", "Sound-Novel Tsukūru Rom");
FirmwareAndOption("357AC4826297A6496035E3951CACDA55DCAE4B1B", 4194304, "BSX", "Rom_Tsuri", "Satellaview_Bass_Tsuri.sfc", "Itoi Shigesato no Bass Tsuri No. 1 Rom");
FirmwareAndOption("79F5FF55DD10187C7FD7B8DAAB0B3FFBD1F56A2C", 262144, "PCECD", "Bios", "PCECD_3.0-(J).pce", "Super CD Bios (J)");
FirmwareAndOption("014881A959E045E00F4DB8F52955200865D40280", 32768, "PCECD", "GE-Bios", "PCECD_gecard.pce", "Games Express CD Card (Japan)");

View File

@ -23,6 +23,7 @@ namespace BizHawk.Emulation.Common
[VSystemID.Raw.AmstradCPC] = "Amstrad CPC",
[VSystemID.Raw.AppleII] = "Apple II",
[VSystemID.Raw.Arcade] = "Arcade",
[VSystemID.Raw.BSX] = "Satellaview",
[VSystemID.Raw.C64] = "Commodore 64",
[VSystemID.Raw.ChannelF] = "Channel F",
[VSystemID.Raw.Coleco] = "ColecoVision",

View File

@ -4,6 +4,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
{
public partial class BsnesCore : ISettable<BsnesCore.SnesSettings, BsnesCore.SnesSyncSettings>
{
// names need to exactly match the firmware db names
public enum SATELLAVIEW_CARTRIDGE
{
Autodetect,
Rom_BSX,
Rom_Mahjong,
Rom_GNEXT,
Rom_RPG_Tsukuru,
Rom_SameGame,
Rom_DS96,
Rom_Ongaku_Tsukuru,
Rom_SoundNovel_Tsukuru,
Rom_Tsuri
}
public SnesSettings GetSettings()
{
return _settings with {};
@ -101,6 +116,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
public bool FastCoprocessors { get; set; } = true;
public bool UseSGB2 { get; set; } = true;
public SATELLAVIEW_CARTRIDGE SatellaviewCartridge { get; set; } = SATELLAVIEW_CARTRIDGE.Autodetect;
}
}
}

View File

@ -29,10 +29,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
_syncSettings = loadParameters.SyncSettings ?? new SnesSyncSettings();
SystemId = loadParameters.Game.System;
_isSGB = SystemId == VSystemID.Raw.SGB;
bool IsBSX = loadParameters.Game.System == VSystemID.Raw.BSX;
byte[] sgbRomData = null;
byte[] bsxRomData = null;
if (_isSGB)
{
if ((loadParameters.Roms[0].RomData[0x143] & 0xc0) == 0xc0)
@ -46,10 +44,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
loadParameters.Game.FirmwareHash = SHA1Checksum.ComputeDigestHex(sgbRomData);
}
else if (IsBSX)
{
bsxRomData = CoreComm.CoreFileProvider.GetFirmwareOrThrow(new FirmwareID("SNES", "Rom_BSX"), "BS-X rom is required for BS-X emulation");
}
BsnesApi.SnesCallbacks callbacks = new()
{
@ -92,16 +86,23 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
InitAudio();
ser.Register<ISoundProvider>(_soundProvider);
if (_isSGB)
if (SystemId == VSystemID.Raw.BSX)
{
SATELLAVIEW_CARTRIDGE slottedCartridge = _syncSettings.SatellaviewCartridge;
if (slottedCartridge == SATELLAVIEW_CARTRIDGE.Autodetect)
{
// TODO
slottedCartridge = SATELLAVIEW_CARTRIDGE.Rom_BSX;
}
byte[] cartridgeData = CoreComm.CoreFileProvider.GetFirmwareOrThrow(new FirmwareID("BSX", slottedCartridge.ToString()));
Api.core.snes_load_cartridge_bsmemory(cartridgeData, loadParameters.Roms[0].RomData,
cartridgeData.Length, loadParameters.Roms[0].RomData.Length);
}
else if (_isSGB)
{
Api.core.snes_load_cartridge_super_gameboy(sgbRomData, loadParameters.Roms[0].RomData,
sgbRomData!.Length, loadParameters.Roms[0].RomData.Length);
}
else if (IsBSX)
{
Api.core.snes_load_cartridge_bsmemory(bsxRomData, loadParameters.Roms[0].RomData,
bsxRomData!.Length, loadParameters.Roms[0].RomData.Length);
}
else
{
Api.core.snes_load_cartridge_normal(loadParameters.Roms[0].RomData, loadParameters.Roms[0].RomData.Length);