using System; using System.Linq; using System.Collections.Generic; namespace BizHawk.Emulation.Common { /// /// This service provides the means to generate disassembly by the core for a given CPU and memory domain /// Tools such the debugger use this, but also LUA scripting, and tools like trace logging and code data logging can make use of this tool /// If unavailable the debugger tool will still be available but disable the disassembly window but still be available if the service is available /// public interface IDisassemblable : IEmulatorService { /// /// Gets or sets the CPUS that will be used to disassemble /// Only values returned from will be supported when Set /// string Cpu { get; set; } /// /// Gets 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 address lasting for length, using the given domain /// string Disassemble(MemoryDomain m, uint addr, out int length); } /// /// does sanity checking on CPU parameters /// public abstract class VerifiedDisassembler : IDisassemblable { private 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); protected VerifiedDisassembler() { _cpu = AvailableCpus.First(); } } }