using System; using System.Linq; using System.Collections.Generic; namespace BizHawk.Emulation.Common { public interface IDisassemblable : IEmulatorService { /// /// Gets or sets the Cpu that will be used to disassemble /// Only values returned from AvailableCpus will be supported when Set /// string Cpu { get; set; } /// /// Returns the name of the Program Counter Register for the current Cpu /// string PCRegisterName { get; } /// /// Gets a list of Cpus that can be used when setting the Cpu property /// IEnumerable AvailableCpus { get; } /// /// returns a disassembly starting at addr lasting for length, using the given domain /// string Disassemble(MemoryDomain m, uint addr, out int length); } /// /// does santiy checking on Cpu parameters /// public abstract class VerifiedDisassembler : IDisassemblable { protected string _cpu; public virtual string Cpu { get { return _cpu; } set { if (!AvailableCpus.Contains(value)) throw new ArgumentException(); _cpu = value; } } public abstract IEnumerable AvailableCpus { get; } public abstract string PCRegisterName { get; } public abstract string Disassemble(MemoryDomain m, uint addr, out int length); public VerifiedDisassembler() { _cpu = AvailableCpus.First(); } } }