summaryrefslogtreecommitdiff
path: root/src/Noddybox.Emulation.EightBit/ICpu.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Noddybox.Emulation.EightBit/ICpu.cs')
-rw-r--r--src/Noddybox.Emulation.EightBit/ICpu.cs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Noddybox.Emulation.EightBit/ICpu.cs b/src/Noddybox.Emulation.EightBit/ICpu.cs
index 9d1909c..1ee7781 100644
--- a/src/Noddybox.Emulation.EightBit/ICpu.cs
+++ b/src/Noddybox.Emulation.EightBit/ICpu.cs
@@ -20,6 +20,15 @@ using System;
namespace Noddybox.Emulation.EightBit
{
/// <summary>
+ /// Defines a delegate that will be called after an instruction.
+ /// </summary>
+ /// <param name="sender">The CPU being used. All state will be upto date prior to invoking
+ /// the callback.</param>
+ /// <returns>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.</returns>
+ public delegate bool CpuCallback(object sender);
+
+ /// <summary>
/// Defines an 8-bit CPU.
/// </summary>
public interface ICpu
@@ -48,6 +57,15 @@ namespace Noddybox.Emulation.EightBit
void Run();
/// <summary>
+ /// Runs the CPU until the callback tells it to stop.
+ /// </summary>
+ /// <param name="callback">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.
+ /// </param>
+ void Run(CpuCallback callback);
+
+ /// <summary>
/// Generates a maskable interrupt to the CPU.
/// </summary>
/// <param name="value">Optional value from an interrupting device. May be ignored depending on the CPU type.</param>