diff --git a/BizHawk.BizInvoke/BizExvoker.cs b/BizHawk.BizInvoke/BizExvoker.cs index ed9af81894..bf61a8c0df 100644 --- a/BizHawk.BizInvoke/BizExvoker.cs +++ b/BizHawk.BizInvoke/BizExvoker.cs @@ -122,23 +122,15 @@ namespace BizHawk.BizInvoke } } - /// - /// mark an instance method to be exported by BizExvoker - /// + /// Indicates that a method is to be exported by BizExvoker. [AttributeUsage(AttributeTargets.Method)] - public class BizExportAttribute : Attribute + public sealed class BizExportAttribute : Attribute { public CallingConvention CallingConvention { get; } - /// - /// Gets or sets the name of entry point; if not given, the method's name is used - /// + /// The annotated method's name is used iff . public string EntryPoint { get; set; } - /// - /// Initializes a new instance of the class. - /// - /// unmanaged calling convention public BizExportAttribute(CallingConvention c) { CallingConvention = c; diff --git a/BizHawk.BizInvoke/BizInvoker.cs b/BizHawk.BizInvoke/BizInvoker.cs index e79d8d2797..3177d7a147 100644 --- a/BizHawk.BizInvoke/BizInvoker.cs +++ b/BizHawk.BizInvoke/BizInvoker.cs @@ -537,28 +537,18 @@ namespace BizHawk.BizInvoke } } - /// - /// mark an abstract method to be proxied by BizInvoker - /// + /// Indicates that an abstract method is to be proxied by BizInvoker. [AttributeUsage(AttributeTargets.Method)] - public class BizImportAttribute : Attribute + public sealed class BizImportAttribute : Attribute { public CallingConvention CallingConvention { get; } - /// - /// Gets or sets the name of entry point; if not given, the method's name is used - /// + /// The annotated method's name is used iff . public string EntryPoint { get; set; } - /// - /// Gets or sets a value indicating whether or not to use a slower interop that supports more argument types - /// + /// iff a compatibility interop should be used, which is slower but supports more argument types. public bool Compatibility { get; set; } - /// - /// Initializes a new instance of the class. - /// - /// unmanaged calling convention public BizImportAttribute(CallingConvention c) { CallingConvention = c; diff --git a/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs b/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs index 811807659f..fc5fc9166f 100644 --- a/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs +++ b/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs @@ -68,12 +68,12 @@ namespace BizHawk.Client.ApiHawk } [AttributeUsage(AttributeTargets.Property)] - public class RequiredApiAttribute : Attribute + public sealed class RequiredApiAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property)] - public class OptionalApiAttribute : Attribute + public sealed class OptionalApiAttribute : Attribute { } } diff --git a/BizHawk.Client.Common/Api/ExternalToolAttributes.cs b/BizHawk.Client.Common/Api/ExternalToolAttributes.cs index 0c572fc564..d466c9f517 100644 --- a/BizHawk.Client.Common/Api/ExternalToolAttributes.cs +++ b/BizHawk.Client.Common/Api/ExternalToolAttributes.cs @@ -96,13 +96,12 @@ namespace BizHawk.Client.Common [AttributeUsage(AttributeTargets.Class)] public sealed class ExternalToolAttribute : Attribute { - public readonly string Description; + public string Description { get; set; } public readonly string Name; - public ExternalToolAttribute(string name, string description = null) + public ExternalToolAttribute(string name) { - Description = description; Name = string.IsNullOrWhiteSpace(name) ? Guid.NewGuid().ToString() : name; } diff --git a/BizHawk.Client.Common/BinarySaveStates.cs b/BizHawk.Client.Common/BinarySaveStates.cs index bbb944ac2b..7206daaa4a 100644 --- a/BizHawk.Client.Common/BinarySaveStates.cs +++ b/BizHawk.Client.Common/BinarySaveStates.cs @@ -69,7 +69,7 @@ namespace BizHawk.Client.Common public static BinaryStateLump BranchUserText { get; private set; } [AttributeUsage(AttributeTargets.Property)] - private class NameAttribute : Attribute + private sealed class NameAttribute : Attribute { public string Name { get; } public string Ext { get; } diff --git a/BizHawk.Client.Common/config/ConfigPersistAttribute.cs b/BizHawk.Client.Common/config/ConfigPersistAttribute.cs index 08d248ad71..7931c2f9a2 100644 --- a/BizHawk.Client.Common/config/ConfigPersistAttribute.cs +++ b/BizHawk.Client.Common/config/ConfigPersistAttribute.cs @@ -2,11 +2,9 @@ namespace BizHawk.Client.Common { - /// - /// Define if the property has to be persisted in config - /// + /// Indicates that a property is to be saved to config for persistence. [AttributeUsage(AttributeTargets.Property)] - public class ConfigPersistAttribute : Attribute + public sealed class ConfigPersistAttribute : Attribute { } } diff --git a/BizHawk.Client.Common/config/RestoreDefaultsAttribute.cs b/BizHawk.Client.Common/config/RestoreDefaultsAttribute.cs index eb8584cd6e..bdfcd53dda 100644 --- a/BizHawk.Client.Common/config/RestoreDefaultsAttribute.cs +++ b/BizHawk.Client.Common/config/RestoreDefaultsAttribute.cs @@ -2,11 +2,10 @@ namespace BizHawk.Client.Common { - /// - /// Defines a method to be called when a tool dialog's Restore Defaults method is called - /// + /// Indicates which method of an is to be called when the generated Restore Defaults menu item is clicked. + /// If not present on any instance method, the menu item will do nothing. If present on multiple, the first will be called. [AttributeUsage(AttributeTargets.Method)] - public class RestoreDefaultsAttribute : Attribute + public sealed class RestoreDefaultsAttribute : Attribute { } } diff --git a/BizHawk.Client.Common/lua/LuaAttributes.cs b/BizHawk.Client.Common/lua/LuaAttributes.cs index 5c012988bd..0f9300a62c 100644 --- a/BizHawk.Client.Common/lua/LuaAttributes.cs +++ b/BizHawk.Client.Common/lua/LuaAttributes.cs @@ -3,7 +3,7 @@ namespace BizHawk.Client.Common { [AttributeUsage(AttributeTargets.Method)] - public class LuaMethodAttribute : Attribute + public sealed class LuaMethodAttribute : Attribute { public LuaMethodAttribute(string name, string description) { @@ -16,7 +16,7 @@ namespace BizHawk.Client.Common } [AttributeUsage(AttributeTargets.Method)] - public class LuaMethodExampleAttribute : Attribute + public sealed class LuaMethodExampleAttribute : Attribute { public LuaMethodExampleAttribute(string example) { @@ -27,7 +27,7 @@ namespace BizHawk.Client.Common } [AttributeUsage(AttributeTargets.Class)] - public class LuaLibraryAttribute : Attribute + public sealed class LuaLibraryAttribute : Attribute { public LuaLibraryAttribute(bool released) { diff --git a/BizHawk.Client.Common/movie/import/IMovieImport.cs b/BizHawk.Client.Common/movie/import/IMovieImport.cs index 47a98b897f..49dfebbb88 100644 --- a/BizHawk.Client.Common/movie/import/IMovieImport.cs +++ b/BizHawk.Client.Common/movie/import/IMovieImport.cs @@ -101,7 +101,7 @@ namespace BizHawk.Client.Common } [AttributeUsage(AttributeTargets.Class)] - public class ImporterForAttribute : Attribute + public sealed class ImporterForAttribute : Attribute { public ImporterForAttribute(string emulator, string extension) { diff --git a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs index 2408564cb3..72a076f7bb 100644 --- a/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs +++ b/BizHawk.Client.EmuHawk/AVOut/IVideoWriter.cs @@ -99,7 +99,7 @@ namespace BizHawk.Client.EmuHawk } [AttributeUsage(AttributeTargets.Class)] - public class VideoWriterAttribute : Attribute + public sealed class VideoWriterAttribute : Attribute { public string ShortName { get; } public string Name { get; } @@ -114,7 +114,7 @@ namespace BizHawk.Client.EmuHawk } [AttributeUsage(AttributeTargets.Class)] - public class VideoWriterIgnoreAttribute : Attribute + public sealed class VideoWriterIgnoreAttribute : Attribute { } diff --git a/BizHawk.Client.EmuHawk/ToolAttribute.cs b/BizHawk.Client.EmuHawk/ToolAttribute.cs index 53a2f837da..1f22ffac89 100644 --- a/BizHawk.Client.EmuHawk/ToolAttribute.cs +++ b/BizHawk.Client.EmuHawk/ToolAttribute.cs @@ -5,15 +5,17 @@ using System.Linq; namespace BizHawk.Client.EmuHawk { [AttributeUsage(AttributeTargets.Class)] - public class ToolAttribute : Attribute + public sealed class ToolAttribute : Attribute { - public ToolAttribute(bool released, string[] supportedSystems, string[] unsupportedCores = null) + public ToolAttribute(bool released, string[] supportedSystems, string[] unsupportedCores) { Released = released; SupportedSystems = supportedSystems ?? Enumerable.Empty(); UnsupportedCores = unsupportedCores ?? Enumerable.Empty(); } + public ToolAttribute(bool released, string[] supportedSystems) : this(released, supportedSystems, null) {} + public bool Released { get; } public IEnumerable SupportedSystems { get; } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SchemaAttribute.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SchemaAttribute.cs index 779f4d03b6..d46e013a1c 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SchemaAttribute.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SchemaAttribute.cs @@ -3,11 +3,8 @@ namespace BizHawk.Client.EmuHawk { [AttributeUsage(AttributeTargets.Class)] - public class SchemaAttribute : Attribute + public sealed class SchemaAttribute : Attribute { - /// - /// Gets the system id associated with this schema - /// public string SystemId { get; } public SchemaAttribute(string systemId) diff --git a/BizHawk.Common/DeepEquality.cs b/BizHawk.Common/DeepEquality.cs index 9922bb3096..e02961c0e5 100644 --- a/BizHawk.Common/DeepEquality.cs +++ b/BizHawk.Common/DeepEquality.cs @@ -7,11 +7,9 @@ using System.Reflection; namespace BizHawk.Common { - /// - /// causes DeepEquality to ignore this field when determining equality - /// + /// Annotated fields will not be used by for comparison. [AttributeUsage(AttributeTargets.Field)] - public class DeepEqualsIgnoreAttribute : Attribute + public sealed class DeepEqualsIgnoreAttribute : Attribute { } diff --git a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs index 1e2bf7a617..2dc4e53db1 100644 --- a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs @@ -1,8 +1,21 @@ namespace BizHawk.Emulation.Common { [Core("NullHawk", "", false, true)] - [ServiceNotApplicable(typeof(IStatable), typeof(ISaveRam), typeof(IDriveLight), typeof(ICodeDataLogger), typeof(IMemoryDomains), typeof(ISettable<,>), - typeof(IDebuggable), typeof(IDisassemblable), typeof(IInputPollable), typeof(IRegionable), typeof(ITraceable), typeof(IBoardInfo), typeof(ISoundProvider))] + [ServiceNotApplicable(new[] { + typeof(IBoardInfo), + typeof(ICodeDataLogger), + typeof(IDebuggable), + typeof(IDisassemblable), + typeof(IDriveLight), + typeof(IInputPollable), + typeof(IMemoryDomains), + typeof(IRegionable), + typeof(ISaveRam), + typeof(ISettable<,>), + typeof(ISoundProvider), + typeof(IStatable), + typeof(ITraceable) + })] public class NullEmulator : IEmulator, IVideoProvider { private readonly int[] _frameBuffer = new int[NullVideo.DefaultWidth * NullVideo.DefaultHeight]; diff --git a/BizHawk.Emulation.Common/CoreAttribute.cs b/BizHawk.Emulation.Common/CoreAttribute.cs index d0b7012fb7..4f6f6a64ed 100644 --- a/BizHawk.Emulation.Common/CoreAttribute.cs +++ b/BizHawk.Emulation.Common/CoreAttribute.cs @@ -3,26 +3,22 @@ namespace BizHawk.Emulation.Common { [AttributeUsage(AttributeTargets.Class)] - public class CoreAttribute : Attribute + public sealed class CoreAttribute : Attribute { - public CoreAttribute( - string name, - string author, - bool isPorted = false, - bool isReleased = false, - string portedVersion = "", - string portedUrl = "", - bool singleInstance = false) + public CoreAttribute(string name, string author, bool isPorted, bool isReleased, string portedVersion, string portedUrl, bool singleInstance) { CoreName = name; Author = author; Ported = isPorted; Released = isReleased; - PortedVersion = portedVersion; - PortedUrl = portedUrl; + PortedVersion = portedVersion ?? string.Empty; + PortedUrl = portedUrl ?? string.Empty; SingleInstance = singleInstance; } + public CoreAttribute(string name, string author, bool isPorted, bool isReleased) + : this(name, author, isPorted, isReleased, null, null, false) {} + public string CoreName { get; } public string Author { get; } public bool Ported { get; } diff --git a/BizHawk.Emulation.Common/ServiceAttributes.cs b/BizHawk.Emulation.Common/ServiceAttributes.cs index 768539b0ae..a382e747d3 100644 --- a/BizHawk.Emulation.Common/ServiceAttributes.cs +++ b/BizHawk.Emulation.Common/ServiceAttributes.cs @@ -4,26 +4,27 @@ using System.Linq; namespace BizHawk.Emulation.Common { - /// - /// Should be added to any field of an IEmulatorService that is not implemented. - /// By Convention it should also throw a NotImplementedException - /// Any feature that does not have this attribute is assumed to be implemented - /// - public class FeatureNotImplementedAttribute : Attribute + /// Indicates that a method (or property getter/setter) inherited from a has yet to be implemented. + /// + /// By convention, calling a method with this attribute should throw a . + /// If this attribute is not present on an implementation, it is assumed that the method is implemented and working. + /// + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property)] + public sealed class FeatureNotImplementedAttribute : Attribute { } - /// - /// Should be added to any implementation of IEmulator to document any - /// IEmulatorService (that is not an ISpecializedEmulatorService) that - /// by design, will not be implemented by the core - /// Any service that is unimplemented and not marked with this attribute is - /// assumed to be a "TODO" that needs to be done but hasn't been done yet - /// + /// Indicates that a class intentionally does not inherit from the specified IEmulatorServices, and will never do so. + /// + /// ISpecializedEmulatorServices that a core doesn't implement should not be listed, as the semantic of only being applicable to some cores is already clear.
+ /// Any which isn't specified and is also not implemented is assumed to be a work-in-progress. + /// These should be implemented as soon as possible, simply throwing a on call, and should be annotated with . + ///
[AttributeUsage(AttributeTargets.Class)] - public class ServiceNotApplicableAttribute : Attribute + public sealed class ServiceNotApplicableAttribute : Attribute { - public ServiceNotApplicableAttribute(params Type[] types) + /// TODO neither array nor is the correct collection to be using here, try / instead + public ServiceNotApplicableAttribute(Type[] types) { NotApplicableTypes = types?.AsEnumerable() ?? Enumerable.Empty(); } diff --git a/BizHawk.Emulation.Common/ServiceInjector.cs b/BizHawk.Emulation.Common/ServiceInjector.cs index a80973a932..ca3c6cbedb 100644 --- a/BizHawk.Emulation.Common/ServiceInjector.cs +++ b/BizHawk.Emulation.Common/ServiceInjector.cs @@ -68,12 +68,12 @@ namespace BizHawk.Emulation.Common } [AttributeUsage(AttributeTargets.Property)] - public class RequiredServiceAttribute : Attribute + public sealed class RequiredServiceAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property)] - public class OptionalServiceAttribute : Attribute + public sealed class OptionalServiceAttribute : Attribute { } } diff --git a/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs b/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs index 4aeb168c1e..4dab9dc3be 100644 --- a/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs +++ b/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs @@ -15,6 +15,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME name: "MAME", author: "MAMEDev", isPorted: true, + isReleased: false, portedVersion: "0.217", portedUrl: "https://github.com/mamedev/mame.git", singleInstance: false)] diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.cs b/BizHawk.Emulation.Cores/Calculator/TI83.cs index 3a5e67c886..7058742f08 100644 --- a/BizHawk.Emulation.Cores/Calculator/TI83.cs +++ b/BizHawk.Emulation.Cores/Calculator/TI83.cs @@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Calculators "zeromus", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(ISoundProvider), typeof(ISaveRam), typeof(IRegionable), typeof(IDriveLight), typeof(IBoardInfo))] + [ServiceNotApplicable(new[] { typeof(IBoardInfo), typeof(IDriveLight), typeof(IRegionable), typeof(ISaveRam), typeof(ISoundProvider) })] public partial class TI83 : IEmulator, IVideoProvider, IDebuggable, IInputPollable, ISettable { [CoreConstructor("TI83")] diff --git a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs index 69e356a006..b5ed1872a8 100644 --- a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs +++ b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII "fool", isPorted: true, isReleased: true)] - [ServiceNotApplicable(typeof(ISaveRam), typeof(IRegionable), typeof(IBoardInfo))] + [ServiceNotApplicable(new[] { typeof(IBoardInfo), typeof(IRegionable), typeof(ISaveRam) })] public partial class AppleII : IEmulator, ISoundProvider, IVideoProvider, IStatable, IDriveLight { static AppleII() diff --git a/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs b/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs index 16dbe783bd..4aacc44881 100644 --- a/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs +++ b/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Computers.MSX "", isPorted: false, isReleased: false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class MSX : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IInputPollable, IRegionable, ISettable { [CoreConstructor("MSX")] diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs index 15a7941276..0e9a5f8d4e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 "Micro500, Alyosha, adelikat, natt", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(ISaveRam), typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(ISaveRam) })] public partial class Atari2600 : IEmulator, IDebuggable, IInputPollable, IBoardInfo, IRegionable, ICreateGameDBEntries, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs index fc18205437..4592226767 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs @@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(ISettable<,>), typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(ISettable<,>) })] public partial class A7800Hawk : IEmulator, ISaveRam, IDebuggable, IInputPollable, IRegionable, IBoardInfo, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs index 4cb018b774..663431e6f7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs @@ -6,8 +6,8 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Atari.Lynx { - [Core("Handy", "K. Wilkins, Mednafen Team", true, true, "mednafen 0-9-34-1", "http://mednafen.sourceforge.net/")] - [ServiceNotApplicable(typeof(ISettable<,>), typeof(IDriveLight), typeof(IRegionable))] + [Core("Handy", "K. Wilkins, Mednafen Team", true, true, "mednafen 0-9-34-1", "http://mednafen.sourceforge.net/", false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(IRegionable), typeof(ISettable<,>) })] public partial class Lynx : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IStatable, IInputPollable { [CoreConstructor("Lynx")] diff --git a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs index 23e38e53c1..adfd687de1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs +++ b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision "Vecna", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(ISaveRam), typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(ISaveRam) })] public sealed partial class ColecoVision : IEmulator, IDebuggable, IInputPollable, ISettable { [CoreConstructor("Coleco")] diff --git a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs index 640841c5b2..3710eb0ad8 100644 --- a/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs +++ b/BizHawk.Emulation.Cores/Consoles/Fairchild/ChannelF/ChannelF.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF "Asnivor", isPorted: false, isReleased: false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class ChannelF { public ChannelF(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings) diff --git a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs index f51e074e5b..778496181d 100644 --- a/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class VectrexHawk : IEmulator, ISaveRam, IDebuggable, IInputPollable, IRegionable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs index ddbab5f9eb..54daa229fe 100644 --- a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs +++ b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.cs @@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Intellivision "BrandonE, Alyosha", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(ISaveRam), typeof(IDriveLight), typeof(IRegionable))] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(IRegionable), typeof(ISaveRam) })] public sealed partial class Intellivision : IEmulator, IInputPollable, IDisassemblable, IBoardInfo, IDebuggable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs index c459533aac..411bdce87e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk "", isPorted: false, isReleased: false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class O2Hawk : IEmulator, ISaveRam, IDebuggable, IInputPollable, IRegionable, ISettable { // memory domains diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs index 84a24bf557..2bd1864ee0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs @@ -5,7 +5,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Nintendo.GBA { [Core("mGBA", "endrift", true, true, "0.8", "https://mgba.io/", false)] - [ServiceNotApplicable(typeof(IDriveLight), typeof(IRegionable))] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(IRegionable) })] public partial class MGBAHawk : IEmulator, IVideoProvider, ISoundProvider, IGBAGPUViewable, ISaveRam, IStatable, IInputPollable, ISettable, IDebuggable diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs index 3c0b797434..dff975142e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs @@ -7,8 +7,8 @@ using BizHawk.Emulation.Cores.Components.ARM; namespace BizHawk.Emulation.Cores.Nintendo.GBA { - [Core("VBA-Next", "many authors", true, true, "cd508312a29ed8c29dacac1b11c2dce56c338a54", "https://github.com/libretro/vba-next")] - [ServiceNotApplicable(typeof(IDriveLight), typeof(IRegionable))] + [Core("VBA-Next", "many authors", true, true, "cd508312a29ed8c29dacac1b11c2dce56c338a54", "https://github.com/libretro/vba-next", false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(IRegionable) })] public partial class VBANext : IEmulator, IVideoProvider, ISoundProvider, IInputPollable, IGBAGPUViewable, ISaveRam, IStatable, IDebuggable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index 1afb9f9d25..e56cdd796c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GBHawk : IEmulator, ISaveRam, IDebuggable, IInputPollable, IRegionable, IGameboyCommon, ISettable { @@ -84,7 +84,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk private static byte[] GBA_override = { 0xFF, 0x00, 0xCD, 0x03, 0x35, 0xAA, 0x31, 0x90, 0x94, 0x00, 0x00, 0x00, 0x00 }; - [CoreConstructor("GB", "GBC")] + [CoreConstructor(new[] { "GB", "GBC" })] public GBHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) { var ser = new BasicServiceProvider(this); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index b4fc80a4e5..c1571d2d7d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -7,7 +7,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GBHawkLink : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ILinkable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.cs index 2d15b5af95..a06f6e36a9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.cs @@ -7,7 +7,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink3x "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GBHawkLink3x : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.cs index 54fda07bc9..207d98f852 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.cs @@ -7,7 +7,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x "", isPorted: false, isReleased: false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GBHawkLink4x : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 0de16d0723..a80b2269db 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -15,13 +15,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy isPorted: true, isReleased: true, portedVersion: "SVN 344", - portedUrl: "http://gambatte.sourceforge.net/")] - [ServiceNotApplicable(typeof(IDriveLight), typeof(IDriveLight))] + portedUrl: "http://gambatte.sourceforge.net/", + singleInstance: false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class Gameboy : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IStatable, IInputPollable, ICodeDataLogger, IBoardInfo, IDebuggable, ISettable, IGameboyCommon, ICycleTiming, ILinkable { - [CoreConstructor("GB", "GBC")] + [CoreConstructor(new[] { "GB", "GBC" })] public Gameboy(CoreComm comm, GameInfo game, byte[] file, object settings, object syncSettings, bool deterministic) { var ser = new BasicServiceProvider(this); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs index c2d0b85935..0fd0248d08 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.cs @@ -7,7 +7,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy "sinamas/natt", isPorted: true, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GambatteLink : IEmulator, IVideoProvider, ISoundProvider, IInputPollable, ISaveRam, IStatable, ILinkable, IBoardInfo, IDebuggable, ISettable, ICodeDataLogger { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs index e9829e8738..2623d93ae3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 portedVersion: "2.0", portedUrl: "https://code.google.com/p/mupen64plus/", singleInstance: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class N64 : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IDisassemblable, IRegionable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.BoardSystem.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.BoardSystem.cs index 12bf768d44..7af7b11b12 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.BoardSystem.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.BoardSystem.cs @@ -341,14 +341,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //this will be used to track classes that implement boards [AttributeUsage(AttributeTargets.Class)] - public class INESBoardImplAttribute : Attribute { } + public sealed class INESBoardImplAttribute : Attribute { } //this tracks derived boards that shouldnt be used by the implementation scanner [AttributeUsage(AttributeTargets.Class)] - public class INESBoardImplCancelAttribute : Attribute { } + public sealed class INESBoardImplCancelAttribute : Attribute { } static List INESBoardImplementors = new List(); //flags it as being priority, i.e. in the top of the list [AttributeUsage(AttributeTargets.Class)] - public class INESBoardImplPriorityAttribute : Attribute { } + public sealed class INESBoardImplPriorityAttribute : Attribute { } static INESBoard CreateBoardInstance(Type boardType) { @@ -736,7 +736,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } [AttributeUsage(AttributeTargets.Field)] - public class MapperPropAttribute : Attribute + public sealed class MapperPropAttribute : Attribute { public string Name { get; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index 8a725ba887..2a9129567b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -16,8 +16,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES isPorted: true, isReleased: true, portedVersion: "0.7.0", - portedUrl: "https://github.com/kode54/QuickNES")] - [ServiceNotApplicable(typeof(IDriveLight))] + portedUrl: "https://github.com/kode54/QuickNES", + singleInstance: false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class QuickNES : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IInputPollable, IBoardInfo, IStatable, IDebuggable, ISettable, Cores.Nintendo.NES.INESPPUViewable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index b76b42954c..a82332af2b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -23,8 +23,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES isPorted: true, isReleased: true, portedVersion: "v87", - portedUrl: "http://byuu.org/")] - [ServiceNotApplicable(typeof(IDriveLight))] + portedUrl: "http://byuu.org/", + singleInstance: false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public unsafe partial class LibsnesCore : IEmulator, IVideoProvider, ISaveRam, IStatable, IInputPollable, IRegionable, ICodeDataLogger, IDebuggable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs index 5254036531..1b862a7399 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES9X/Snes9x.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES9X { [Core("Snes9x", "", true, true, "5e0319ab3ef9611250efb18255186d0dc0d7e125", "https://github.com/snes9xgit/snes9x", false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public class Snes9x : WaterboxCore, ISettable, IRegionable { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 037b2e85ac..47ad5c4b82 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk "", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class SubNESHawk : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, IBoardInfo, ISettable, INESPPUViewable { diff --git a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs index d113d7fa3c..3706817e7e 100644 --- a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs +++ b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.PCEngine public sealed partial class PCEngine : IEmulator, ISaveRam, IInputPollable, IDebuggable, ISettable, IDriveLight, ICodeDataLogger { - [CoreConstructor("PCE", "SGX")] + [CoreConstructor(new[] { "PCE", "SGX" })] public PCEngine(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings) { CoreComm = comm; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs index d1db1e6918..b39b515689 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink "", isPorted: false, isReleased: false)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class GGHawkLink : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ILinkable, ISettable { diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs index 96657240a8..1c3a448522 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.cs @@ -19,11 +19,11 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem "Vecna", isPorted: false, isReleased: true)] - [ServiceNotApplicable(typeof(IDriveLight))] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public partial class SMS : IEmulator, ISaveRam, IInputPollable, IRegionable, IDebuggable, ISettable, ICodeDataLogger { - [CoreConstructor("SMS", "SG", "GG")] + [CoreConstructor(new[] { "SMS", "SG", "GG" })] public SMS(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings) { ServiceProvider = new BasicServiceProvider(this); diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs index 9219ec02b4..4c636a5b68 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs @@ -10,6 +10,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSP "hrydgard", isPorted: true, isReleased: false, + portedVersion: null, + portedUrl: null, singleInstance: true)] public class PSP : IEmulator, IVideoProvider, ISoundProvider { diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index f73be1eb83..7980dc6f81 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -6,8 +6,8 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.WonderSwan { - [Core("Cygne/Mednafen", "Dox, Mednafen Team", true, true, "0.9.36.5", "http://mednafen.sourceforge.net/")] - [ServiceNotApplicable(typeof(IDriveLight), typeof(IRegionable))] + [Core("Cygne/Mednafen", "Dox, Mednafen Team", true, true, "0.9.36.5", "http://mednafen.sourceforge.net/", false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight), typeof(IRegionable) })] public partial class WonderSwan : IEmulator, IVideoProvider, ISoundProvider, IInputPollable, IDebuggable { diff --git a/BizHawk.Emulation.Cores/CoreInventory.cs b/BizHawk.Emulation.Cores/CoreInventory.cs index d356269e45..ac49603eac 100644 --- a/BizHawk.Emulation.Cores/CoreInventory.cs +++ b/BizHawk.Emulation.Cores/CoreInventory.cs @@ -177,15 +177,21 @@ namespace BizHawk.Emulation.Cores } [AttributeUsage(AttributeTargets.Constructor)] - public class CoreConstructorAttribute : Attribute + public sealed class CoreConstructorAttribute : Attribute { private readonly List _systems = new List(); - public CoreConstructorAttribute(params string[] systems) + /// TODO neither array nor is the correct collection to be using here, try / instead + public CoreConstructorAttribute(string[] systems) { _systems.AddRange(systems); } + public CoreConstructorAttribute(string system) + { + _systems.Add(system); + } + public IEnumerable Systems => _systems; } } diff --git a/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs b/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs index dbb764e66d..05d928d925 100644 --- a/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs +++ b/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs @@ -11,8 +11,8 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Libretro { - [Core("Libretro", "zeromus")] - [ServiceNotApplicable(typeof(IDriveLight))] + [Core("Libretro", "zeromus", isPorted: false, isReleased: false)] + [ServiceNotApplicable(new[] { typeof(IDriveLight) })] public unsafe partial class LibretroCore : IEmulator, ISettable, ISaveRam, IStatable, IVideoProvider, IInputPollable {