From bdfb859480ba1a9d545a2af2e3408be05ba80d78 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Sat, 1 Jul 2017 09:06:04 -0400 Subject: [PATCH] pizza boy: add the required SPC file as an embedded resource because zeromus said to --- BizHawk.Common/Util.cs | 19 ++++++++++++++++++ .../Database/FirmwareDatabase.cs | 2 -- .../BizHawk.Emulation.Cores.csproj | 13 +++++++++++- .../Consoles/Nintendo/Gameboy/Pizza.cs | 9 ++++++--- .../Resources/sgb-cart-present.spc.gz | Bin 0 -> 45052 bytes BizHawk.Emulation.Cores/Waterbox/PeRunner.cs | 10 +-------- 6 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Resources/sgb-cart-present.spc.gz diff --git a/BizHawk.Common/Util.cs b/BizHawk.Common/Util.cs index 222080777e..9869e60e93 100644 --- a/BizHawk.Common/Util.cs +++ b/BizHawk.Common/Util.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Reflection; using System.Text; @@ -428,6 +429,24 @@ namespace BizHawk.Common return true; } + + public static byte[] DecompressGzipFile(Stream src) + { + var tmp = new byte[4]; + if (src.Read(tmp, 0, 2) != 2) + throw new InvalidOperationException("Unexpected end of stream"); + if (tmp[0] != 0x1f || tmp[1] != 0x8b) + throw new InvalidOperationException("GZIP header not present"); + src.Seek(-4, SeekOrigin.End); + src.Read(tmp, 0, 4); + int size = BitConverter.ToInt32(tmp, 0); + var data = new byte[size]; + var ms = new MemoryStream(data); + src.Seek(0, SeekOrigin.Begin); + using (var gs = new GZipStream(src, CompressionMode.Decompress, true)) + gs.CopyTo(ms); + return data; + } } public static class BitConverterLE diff --git a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs index af3d781483..4611f68db0 100644 --- a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs +++ b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs @@ -30,8 +30,6 @@ namespace BizHawk.Emulation.Common FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", 4096, "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios"); FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", 8192, "Coleco", "Bios", "ColecoBios.bin", "Bios"); - FirmwareAndOption("079a7ce93f3fd7d35e444b2fab16b1867c95e2c1", 66084, "SGB", "SPC", "sgb.spc", "Super Gameboy SPC"); - var gbaNormal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "gbabios.rom", "Bios (World)"); var gbaJDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "gbabios.rom", "Bios (J Debug)"); Firmware("GBA", "Bios", "Bios"); diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index dffc9c90ac..3a9b3d3aa4 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -1242,6 +1242,11 @@ + + True + True + Resources.resx + @@ -1313,7 +1318,12 @@ true - + + + ResXFileCodeGenerator + Resources.Designer.cs + + {866F8D13-0678-4FF9-80A4-A3993FD4D8A3} @@ -1335,6 +1345,7 @@ + diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs index 33791ad916..5d653a851f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs @@ -4,6 +4,7 @@ using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Waterbox; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,12 +20,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy [CoreConstructor("SGB")] public Pizza(byte[] rom, CoreComm comm) - :this(rom, comm, true) + : this(rom, comm, true) { } [CoreConstructor("GB")] public Pizza(CoreComm comm, byte[] rom) - :this(rom, comm, false) + : this(rom, comm, false) { } public Pizza(byte[] rom, CoreComm comm, bool sgb) @@ -54,7 +55,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy MmapHeapSizeKB = 0 }); - var spc = sgb ? comm.CoreFileProvider.GetFirmware("SGB", "SPC", true) : new byte[0]; + var spc = sgb + ? Util.DecompressGzipFile(new MemoryStream(Properties.Resources.SgbCartPresent_SPC)) + : new byte[0]; _sgb = sgb; if (!_pizza.Init(rom, rom.Length, _sgb, spc, spc.Length)) { diff --git a/BizHawk.Emulation.Cores/Resources/sgb-cart-present.spc.gz b/BizHawk.Emulation.Cores/Resources/sgb-cart-present.spc.gz new file mode 100644 index 0000000000000000000000000000000000000000..e166eb0fae8436ea4c42118362ea3dd2869aa294 GIT binary patch literal 45052 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�HTHLAy2+sC|PBScVD-}st+Wv_D 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 literal 0 HcmV?d00001 diff --git a/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs b/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs index 913312ccd3..de1683f159 100644 --- a/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs +++ b/BizHawk.Emulation.Cores/Waterbox/PeRunner.cs @@ -698,15 +698,7 @@ namespace BizHawk.Emulation.Cores.Waterbox { using (var fs = new FileStream(gzpath, FileMode.Open, FileAccess.Read)) { - var tmp = new byte[4]; - fs.Seek(-4, SeekOrigin.End); - fs.Read(tmp, 0, 4); - int size = BitConverter.ToInt32(tmp, 0); - data = new byte[size]; - var ms = new MemoryStream(data); - fs.Seek(0, SeekOrigin.Begin); - using (var gs = new GZipStream(fs, CompressionMode.Decompress)) - gs.CopyTo(ms); + data = Util.DecompressGzipFile(fs); } } else