From 909ec8c4cc0ea0683f7bdc0902d8562805b52d20 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 3 Nov 2022 14:55:46 -0700 Subject: [PATCH] Create separate files for internal skippers --- SabreTools.Skippers/SkipperFiles/Atari7800.cs | 65 ++ SabreTools.Skippers/SkipperFiles/AtariLynx.cs | 65 ++ .../SkipperFiles/CommodorePSID.cs | 125 ++++ .../SkipperFiles/NECPCEngine.cs | 45 ++ .../SkipperFiles/Nintendo64.cs | 85 +++ .../NintendoEntertainmentSystem.cs | 45 ++ .../SkipperFiles/NintendoFamicomDiskSystem.cs | 105 +++ .../SkipperFiles/SuperFamicomSPC.cs | 45 ++ .../SuperNintendoEntertainmentSystem.cs | 85 +++ SabreTools.Skippers/SkipperMatch.cs | 672 +----------------- 10 files changed, 674 insertions(+), 663 deletions(-) create mode 100644 SabreTools.Skippers/SkipperFiles/Atari7800.cs create mode 100644 SabreTools.Skippers/SkipperFiles/AtariLynx.cs create mode 100644 SabreTools.Skippers/SkipperFiles/CommodorePSID.cs create mode 100644 SabreTools.Skippers/SkipperFiles/NECPCEngine.cs create mode 100644 SabreTools.Skippers/SkipperFiles/Nintendo64.cs create mode 100644 SabreTools.Skippers/SkipperFiles/NintendoEntertainmentSystem.cs create mode 100644 SabreTools.Skippers/SkipperFiles/NintendoFamicomDiskSystem.cs create mode 100644 SabreTools.Skippers/SkipperFiles/SuperFamicomSPC.cs create mode 100644 SabreTools.Skippers/SkipperFiles/SuperNintendoEntertainmentSystem.cs diff --git a/SabreTools.Skippers/SkipperFiles/Atari7800.cs b/SabreTools.Skippers/SkipperFiles/Atari7800.cs new file mode 100644 index 00000000..bd3f4005 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/Atari7800.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Atari 7800 headers + /// + /// Originally from a7800.xml + internal class Atari7800 : SkipperFile + { + public Atari7800() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x01, + Value = new byte[] { 0x41, 0x54, 0x41, 0x52, 0x49, 0x37, 0x38, 0x30, 0x30 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x64, + Value = new byte[] { 0x41, 0x43, 0x54, 0x55, 0x41, 0x4C, 0x20, 0x43, 0x41, 0x52, 0x54, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x20, 0x48, 0x45, 0x52, 0x45 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x80, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x80, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule2Test1, + } + }; + + // Create file + Name = "Atari 7800"; + Author = "Roman Scherzer"; + Version = "1.0"; + SourceFile = "a7800"; + Rules = new List + { + rule1, + rule2, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/AtariLynx.cs b/SabreTools.Skippers/SkipperFiles/AtariLynx.cs new file mode 100644 index 00000000..44b424a3 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/AtariLynx.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Atari Lynx headers + /// + /// Originally from lynx.xml + internal class AtariLynx : SkipperFile + { + public AtariLynx() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x4C, 0x59, 0x4E, 0x58 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x06, + Value = new byte[] { 0x42, 0x53, 0x39 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x40, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x40, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule2Test1, + } + }; + + // Create file + Name = "Atari Lynx"; + Author = "Roman Scherzer"; + Version = "1.0"; + SourceFile = "lynx"; + Rules = new List + { + rule1, + rule2, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/CommodorePSID.cs b/SabreTools.Skippers/SkipperFiles/CommodorePSID.cs new file mode 100644 index 00000000..2ddf741d --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/CommodorePSID.cs @@ -0,0 +1,125 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Commodore PSID headers + /// + /// Originally from psid.xml + internal class CommodorePSID : SkipperFile + { + public CommodorePSID() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x01, 0x00, 0x76 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x03, 0x00, 0x7c }, + Result = true, + }; + + var rule3Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x02, 0x00, 0x7c }, + Result = true, + }; + + var rule4Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x01, 0x00, 0x7c }, + Result = true, + }; + + var rule5Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x52, 0x53, 0x49, 0x44, 0x00, 0x02, 0x00, 0x7c }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x76, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x76, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule2Test1, + } + }; + + var rule3 = new SkipperRule + { + StartOffset = 0x7c, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule3Test1, + } + }; + + var rule4 = new SkipperRule + { + StartOffset = 0x7c, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule4Test1, + } + }; + + var rule5 = new SkipperRule + { + StartOffset = 0x7c, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule5Test1, + } + }; + + // Create file + Name = "psid"; + Author = "Yori Yoshizuki"; + Version = "1.2"; + SourceFile = "psid"; + Rules = new List + { + rule1, + rule2, + rule3, + rule4, + rule5, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/NECPCEngine.cs b/SabreTools.Skippers/SkipperFiles/NECPCEngine.cs new file mode 100644 index 00000000..acfc72e4 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/NECPCEngine.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for NEC PC-Engine / TurboGrafx 16 headers + /// + /// Originally from pce.xml + internal class NECPCEngine : SkipperFile + { + public NECPCEngine() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xBB, 0x02 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x200, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + // Create file + Name = "NEC TurboGrafx-16/PC-Engine"; + Author = "Matt Nadareski (darksabre76)"; + Version = "1.0"; + SourceFile = "pce"; + Rules = new List + { + rule1, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/Nintendo64.cs b/SabreTools.Skippers/SkipperFiles/Nintendo64.cs new file mode 100644 index 00000000..2df5b23b --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/Nintendo64.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Nintendo 64 headers + /// + /// Originally from n64.xml + internal class Nintendo64 : SkipperFile + { + public Nintendo64() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x80, 0x37, 0x12, 0x40 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x37, 0x80, 0x40, 0x12 }, + Result = true, + }; + + var rule3Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x40, 0x12, 0x37, 0x80 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x00, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x00, + EndOffset = null, + Operation = HeaderSkipOperation.Byteswap, + Tests = new List + { + rule2Test1, + } + }; + + var rule3 = new SkipperRule + { + StartOffset = 0x00, + EndOffset = null, + Operation = HeaderSkipOperation.Wordswap, + Tests = new List + { + rule3Test1, + } + }; + + // Create file + Name = "Nintendo 64 - ABCD"; + Author = "CUE"; + Version = "1.1"; + SourceFile = "n64"; + Rules = new List + { + rule1, // V64 + rule2, // Z64 + rule3, // N64 + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/NintendoEntertainmentSystem.cs b/SabreTools.Skippers/SkipperFiles/NintendoEntertainmentSystem.cs new file mode 100644 index 00000000..edb024fb --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/NintendoEntertainmentSystem.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Nintendo Entertainment System headers + /// + /// Originally from nes.xml + internal class NintendoEntertainmentSystem : SkipperFile + { + public NintendoEntertainmentSystem() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x4E, 0x45, 0x53, 0x1A }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x10, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + // Create file + Name = "Nintendo Famicon/NES"; + Author = "Roman Scherzer"; + Version = "1.1"; + SourceFile = "nes"; + Rules = new List + { + rule1, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/NintendoFamicomDiskSystem.cs b/SabreTools.Skippers/SkipperFiles/NintendoFamicomDiskSystem.cs new file mode 100644 index 00000000..ce25cd98 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/NintendoFamicomDiskSystem.cs @@ -0,0 +1,105 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Nintendo Famicom Disk System headers + /// + /// Originally from fds.xml + internal class NintendoFamicomDiskSystem : SkipperFile + { + public NintendoFamicomDiskSystem() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + var rule3Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + var rule4Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x10, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x10, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule2Test1, + } + }; + + var rule3 = new SkipperRule + { + StartOffset = 0x10, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule3Test1, + } + }; + + var rule4 = new SkipperRule + { + StartOffset = 0x10, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule4Test1, + } + }; + + // Create file + Name = "fds"; + Author = "Yori Yoshizuki"; + Version = "1.0"; + SourceFile = "fds"; + Rules = new List + { + rule1, + rule2, + rule3, + rule4, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/SuperFamicomSPC.cs b/SabreTools.Skippers/SkipperFiles/SuperFamicomSPC.cs new file mode 100644 index 00000000..f693d0d8 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/SuperFamicomSPC.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Super Famicom SPC headers + /// + /// Originally from spc.xml + internal class SuperFamicomSPC : SkipperFile + { + public SuperFamicomSPC() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x00, + Value = new byte[] { 0x53, 0x4E, 0x45, 0x53, 0x2D, 0x53, 0x50, 0x43 }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x100, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + // Create file + Name = "Nintendo Super Famicon SPC"; + Author = "Yori Yoshizuki"; + Version = "1.0"; + SourceFile = "spc"; + Rules = new List + { + rule1, + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperFiles/SuperNintendoEntertainmentSystem.cs b/SabreTools.Skippers/SkipperFiles/SuperNintendoEntertainmentSystem.cs new file mode 100644 index 00000000..e28d54f3 --- /dev/null +++ b/SabreTools.Skippers/SkipperFiles/SuperNintendoEntertainmentSystem.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; + +namespace SabreTools.Skippers.SkipperFiles +{ + /// + /// SkipperFile for Super Nintendo Entertainment System headers + /// + /// Originally from snes.xml + internal class SuperNintendoEntertainmentSystem : SkipperFile + { + public SuperNintendoEntertainmentSystem() + { + // Create tests + var rule1Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x16, + Value = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + var rule2Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x16, + Value = new byte[] { 0xAA, 0xBB, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }, + Result = true, + }; + + var rule3Test1 = new SkipperTest + { + Type = HeaderSkipTest.Data, + Offset = 0x16, + Value = new byte[] { 0x53, 0x55, 0x50, 0x45, 0x52, 0x55, 0x46, 0x4F }, + Result = true, + }; + + // Create rules + var rule1 = new SkipperRule + { + StartOffset = 0x200, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule1Test1, + } + }; + + var rule2 = new SkipperRule + { + StartOffset = 0x200, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule2Test1, + } + }; + + var rule3 = new SkipperRule + { + StartOffset = 0x200, + EndOffset = null, + Operation = HeaderSkipOperation.None, + Tests = new List + { + rule3Test1, + } + }; + + // Create file + Name = "Nintendo Super Famicom/SNES"; + Author = "Matt Nadareski (darksabre76)"; + Version = "1.0"; + SourceFile = "snes"; + Rules = new List + { + rule1, // FIG + rule2, // SMC + rule3, // UFO + }; + } + } +} diff --git a/SabreTools.Skippers/SkipperMatch.cs b/SabreTools.Skippers/SkipperMatch.cs index d1d6a6b2..745c2df6 100644 --- a/SabreTools.Skippers/SkipperMatch.cs +++ b/SabreTools.Skippers/SkipperMatch.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.IO; - using SabreTools.IO; using SabreTools.Logging; @@ -95,15 +94,15 @@ namespace SabreTools.Skippers Skippers = new List(); // Get skippers for each known header type - Skippers.Add(GetAtari7800()); - Skippers.Add(GetAtariLynx()); - Skippers.Add(GetCommodorePSID()); - Skippers.Add(GetNECPCEngine()); - Skippers.Add(GetNintendo64()); - Skippers.Add(GetNintendoEntertainmentSystem()); - Skippers.Add(GetNintendoFamicomDiskSystem()); - Skippers.Add(GetSuperNintendoEntertainmentSystem()); - Skippers.Add(GetSuperFamicomSPC()); + Skippers.Add(new SkipperFiles.Atari7800()); + Skippers.Add(new SkipperFiles.AtariLynx()); + Skippers.Add(new SkipperFiles.CommodorePSID()); + Skippers.Add(new SkipperFiles.NECPCEngine()); + Skippers.Add(new SkipperFiles.Nintendo64()); + Skippers.Add(new SkipperFiles.NintendoEntertainmentSystem()); + Skippers.Add(new SkipperFiles.NintendoFamicomDiskSystem()); + Skippers.Add(new SkipperFiles.SuperNintendoEntertainmentSystem()); + Skippers.Add(new SkipperFiles.SuperFamicomSPC()); } /// @@ -169,658 +168,5 @@ namespace SabreTools.Skippers return skipperRule; } - - // These are hardcoded versions of the XML files that get parsed in - // TODO: Should these be in their own derived classes? - #region Skipper Generation - - /// - /// Generate a SkipperFile for Atari 7800 headers - /// - /// Originally from a7800.xml - private static SkipperFile GetAtari7800() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x01, - Value = new byte[] { 0x41, 0x54, 0x41, 0x52, 0x49, 0x37, 0x38, 0x30, 0x30 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x64, - Value = new byte[] { 0x41, 0x43, 0x54, 0x55, 0x41, 0x4C, 0x20, 0x43, 0x41, 0x52, 0x54, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x20, 0x48, 0x45, 0x52, 0x45 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x80, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x80, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule2Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Atari 7800", - Author = "Roman Scherzer", - Version = "1.0", - SourceFile = "a7800", - Rules = new List - { - rule1, - rule2, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Atari Lynx headers - /// - /// Originally from lynx.xml - private static SkipperFile GetAtariLynx() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x4C, 0x59, 0x4E, 0x58 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x06, - Value = new byte[] { 0x42, 0x53, 0x39 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x40, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x40, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule2Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Atari Lynx", - Author = "Roman Scherzer", - Version = "1.0", - SourceFile = "lynx", - Rules = new List - { - rule1, - rule2, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Commodore PSID headers - /// - /// Originally from psid.xml - private static SkipperFile GetCommodorePSID() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x01, 0x00, 0x76 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x03, 0x00, 0x7c }, - Result = true, - }; - - var rule3Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x02, 0x00, 0x7c }, - Result = true, - }; - - var rule4Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x50, 0x53, 0x49, 0x44, 0x00, 0x01, 0x00, 0x7c }, - Result = true, - }; - - var rule5Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x52, 0x53, 0x49, 0x44, 0x00, 0x02, 0x00, 0x7c }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x76, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x76, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule2Test1, - } - }; - - var rule3 = new SkipperRule - { - StartOffset = 0x7c, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule3Test1, - } - }; - - var rule4 = new SkipperRule - { - StartOffset = 0x7c, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule4Test1, - } - }; - - var rule5 = new SkipperRule - { - StartOffset = 0x7c, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule5Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "psid", - Author = "Yori Yoshizuki", - Version = "1.2", - SourceFile = "psid", - Rules = new List - { - rule1, - rule2, - rule3, - rule4, - rule5, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for NEC PC-Engine / TurboGrafx 16 headers - /// - /// Originally from pce.xml - private static SkipperFile GetNECPCEngine() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xBB, 0x02 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x200, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "NEC TurboGrafx-16/PC-Engine", - Author = "Matt Nadareski (darksabre76)", - Version = "1.0", - SourceFile = "pce", - Rules = new List - { - rule1, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Nintendo 64 headers - /// - /// Originally from n64.xml - private static SkipperFile GetNintendo64() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x80, 0x37, 0x12, 0x40 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x37, 0x80, 0x40, 0x12 }, - Result = true, - }; - - var rule3Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x40, 0x12, 0x37, 0x80 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x00, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x00, - EndOffset = null, - Operation = HeaderSkipOperation.Byteswap, - Tests = new List - { - rule2Test1, - } - }; - - var rule3 = new SkipperRule - { - StartOffset = 0x00, - EndOffset = null, - Operation = HeaderSkipOperation.Wordswap, - Tests = new List - { - rule3Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Nintendo 64 - ABCD", - Author = "CUE", - Version = "1.1", - SourceFile = "n64", - Rules = new List - { - rule1, // V64 - rule2, // Z64 - rule3, // N64 - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Nintendo Entertainment System headers - /// - /// Originally from nes.xml - private static SkipperFile GetNintendoEntertainmentSystem() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x4E, 0x45, 0x53, 0x1A }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x10, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Nintendo Famicon/NES", - Author = "Roman Scherzer", - Version = "1.1", - SourceFile = "nes", - Rules = new List - { - rule1, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Nintendo Famicom Disk System headers - /// - /// Originally from fds.xml - private static SkipperFile GetNintendoFamicomDiskSystem() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - var rule3Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - var rule4Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x46, 0x44, 0x53, 0x1A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x10, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x10, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule2Test1, - } - }; - - var rule3 = new SkipperRule - { - StartOffset = 0x10, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule3Test1, - } - }; - - var rule4 = new SkipperRule - { - StartOffset = 0x10, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule4Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "fds", - Author = "Yori Yoshizuki", - Version = "1.0", - SourceFile = "fds", - Rules = new List - { - rule1, - rule2, - rule3, - rule4, - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Super Nintendo Entertainment System headers - /// - /// Originally from snes.xml - private static SkipperFile GetSuperNintendoEntertainmentSystem() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x16, - Value = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - var rule2Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x16, - Value = new byte[] { 0xAA, 0xBB, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }, - Result = true, - }; - - var rule3Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x16, - Value = new byte[] { 0x53, 0x55, 0x50, 0x45, 0x52, 0x55, 0x46, 0x4F }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x200, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - var rule2 = new SkipperRule - { - StartOffset = 0x200, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule2Test1, - } - }; - - var rule3 = new SkipperRule - { - StartOffset = 0x200, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule3Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Nintendo Super Famicom/SNES", - Author = "Matt Nadareski (darksabre76)", - Version = "1.0", - SourceFile = "snes", - Rules = new List - { - rule1, // FIG - rule2, // SMC - rule3, // UFO - }, - }; - - return skipperFile; - } - - /// - /// Generate a SkipperFile for Super Famicom SPC headers - /// - /// Originally from spc.xml - private static SkipperFile GetSuperFamicomSPC() - { - // Create tests - var rule1Test1 = new SkipperTest - { - Type = HeaderSkipTest.Data, - Offset = 0x00, - Value = new byte[] { 0x53, 0x4E, 0x45, 0x53, 0x2D, 0x53, 0x50, 0x43 }, - Result = true, - }; - - // Create rules - var rule1 = new SkipperRule - { - StartOffset = 0x100, - EndOffset = null, - Operation = HeaderSkipOperation.None, - Tests = new List - { - rule1Test1, - } - }; - - // Create file - var skipperFile = new SkipperFile - { - Name = "Nintendo Super Famicon SPC", - Author = "Yori Yoshizuki", - Version = "1.0", - SourceFile = "spc", - Rules = new List - { - rule1, - }, - }; - - return skipperFile; - } - - #endregion } } \ No newline at end of file