// This file is part of the Noddybox.Emulation C# suite. // // Noddybox.Emulation is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Noddybox.Emulation is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Noddybox.Emulation. If not, see . // // Copyright (c) 2012 Ian Cowburn // using System; namespace Noddybox.Emulation.EightBit { /// /// Defines a delegate that will be called after an instruction. /// /// The CPU being used. All state will be upto date prior to invoking /// the callback. /// True if the CPU should continue executing, or false if not. Users should simply /// return Clock.VBL if they need no other than clock control. public delegate bool CpuCallback(ICpu sender); /// /// Defines an 8-bit CPU. /// public interface ICpu { /// /// Initialise the CPU to give it access to memory and devices. /// /// The memory to access. /// The devices to access. /// The clock to use. void Initialise(IMemory memory, IDevice device, Clock clock); /// /// Resets the CPU to its initial state. /// void Reset(); /// /// Runs the next instruction. /// void Step(); /// /// Runs the CPU until the next frame flyback. /// void Run(); /// /// Runs the CPU until the callback tells it to stop. /// /// A delegate that is called after every completed instruction /// cycle and tells the CPU when to stop running. Note that at least one instruction /// is always executed as the callback is made after the cycle has completed. /// void Run(CpuCallback callback); /// /// Generates a maskable interrupt to the CPU. /// /// Optional value from an interrupting device. May be ignored depending on the CPU type. void MaskableInterrupt(byte value); /// /// Generates a non-maskable interrupt to the CPU. /// /// Optional value from an interrupting device. May be ignored depending on the CPU type. void NonMaskableInterrupt(byte value); } }