Interface CPU
-
- All Superinterfaces:
Plugin
- All Known Implementing Classes:
AbstractCPU
public interface CPU extends Plugin
CPU plugin root interface.Should be implemented by a plugin. There should exist just one implementation.
CPU can define one or more "CPU contexts" (usually just one), which can extend the runtime functionality accessible to plugins.
- See Also:
CPUContext
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
CPU.CPUListener
Interface for receiving CPU events.static class
CPU.RunState
The run state of the CPU.
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description void
addCPUListener(CPU.CPUListener listener)
Adds the specified CPU listener to receive CPU events from this CPU.void
execute()
Runs CPU emulation.Disassembler
getDisassembler()
Get disassembler.int
getInstructionLocation()
Get memory location of an instruction which will be emulated as next.javax.swing.JPanel
getStatusPanel()
Get CPU status panel.default boolean
isAutomationSupported()
Determines if this plugin supports emulation automationboolean
isBreakpointSet(int location)
Determine if a breakpoint is set at a memory location.boolean
isBreakpointSupported()
Determine whether breakpoints are supported by CPU.void
pause()
Pauses the CPU emulation.void
removeCPUListener(CPU.CPUListener listener)
Removes the specified CPU listener so that it no longer receives CPU events from this CPU.void
reset(int location)
Resets the CPU and sets instruction position to given program location.void
setBreakpoint(int location)
Set a breakpoint at a memory location.boolean
setInstructionLocation(int location)
Set memory location of an instruction which will be emulated as next.void
step()
Perform one step of CPU emulation.void
stop()
Stops the CPU emulation.void
unsetBreakpoint(int location)
Unset a breakpoint at a memory location.-
Methods inherited from interface net.emustudio.emulib.plugins.Plugin
destroy, getCopyright, getDescription, getTitle, getVersion, initialize, isShowSettingsSupported, reset, showSettings
-
-
-
-
Method Detail
-
addCPUListener
void addCPUListener(CPU.CPUListener listener)
Adds the specified CPU listener to receive CPU events from this CPU.CPU events occur when CPU changes its state, or run state. CPU state events don't occur if CPU is running, only happens with run state changes. If listener is
null
, no exception is thrown and no action is performed.- Parameters:
listener
- the CPU listener
-
removeCPUListener
void removeCPUListener(CPU.CPUListener listener)
Removes the specified CPU listener so that it no longer receives CPU events from this CPU.CPU events occur when CPU changes its state, or run state. CPU state events don't occur if CPU is running, only happens with run state changes. If listener is
null
, no exception is thrown and no action is performed.- Parameters:
listener
- the CPU listener to be removed
-
step
void step()
Perform one step of CPU emulation. It means that one instruction should be executed. CPU state changes to state "running", then it executes one instruction, and then it should return to state "breakpoint" or "stopped". Correct timing of executed instruction isn't so important.
-
execute
void execute()
Runs CPU emulation. Change state of CPU to "running" and start instruction fetch/decode/execute loop.The emuStudio creates separate thread for this purpose.
While CPU is running, the emuStudio will not allow to call method
step()
.A good CPU should performs right timing for instructions here. Debug window should not be updated after each instruction execution, in order to the execution loop would be faster.
-
pause
void pause()
Pauses the CPU emulation. If a thread was used for CPU execution and is running, then it should be stopped (destroyed) but the CPU state has to be saved for future run. CPU changes it state to "breakpoint".
-
stop
void stop()
Stops the CPU emulation. If a thread was used for CPU execution and is running, then it should be stopped (destroyed) but the CPU state can be saved. CPU changes its state to "stopped" and main module should now forbid execution any of methodsstep()
,pause()
,execute()
until user resets the CPU. Debug window in main module should be updated with saved CPU state.
-
getStatusPanel
javax.swing.JPanel getStatusPanel()
Get CPU status panel.Each CPU plugin must have a status panel that shows some important CPU status (e.g. registers, flags, run state, etc.) and allows to manage some settings (e.g. a runtime frequency, etc.).
This panel is located on the right side in the "emulation" panel of the main module.
CPU itself should take care about updating the panel when it is appropriate.
- Returns:
- CPU status panel
-
isBreakpointSupported
boolean isBreakpointSupported()
Determine whether breakpoints are supported by CPU.- Returns:
- true if breakpoints are supported, false otherwise
-
setBreakpoint
void setBreakpoint(int location)
Set a breakpoint at a memory location.Does nothing if breakpoints are not supported.
- Parameters:
location
- memory location where the breakpoint will be set- Throws:
java.lang.IndexOutOfBoundsException
- if the memLocation is out of bounds- See Also:
isBreakpointSupported()
-
unsetBreakpoint
void unsetBreakpoint(int location)
Unset a breakpoint at a memory location.Does nothing if breakpoints are not supported.
- Parameters:
location
- memory location from where the breakpoint will be unset- Throws:
java.lang.IndexOutOfBoundsException
- if the memLocation is out of bounds- See Also:
isBreakpointSupported()
-
isBreakpointSet
boolean isBreakpointSet(int location)
Determine if a breakpoint is set at a memory location.- Parameters:
location
- memory location, from where the breakpoint will be determined- Returns:
- true if breakpoint is set in the location, false otherwise or if breakpoints are not supported.
- Throws:
java.lang.IndexOutOfBoundsException
- if the memLocation is out of bounds- See Also:
isBreakpointSupported()
-
reset
void reset(int location)
Resets the CPU and sets instruction position to given program location.- Parameters:
location
- Program location in memory
-
getInstructionLocation
int getInstructionLocation()
Get memory location of an instruction which will be emulated as next.Instruction position is more "abstract" name for "program counter", which is mostly used in 8-bit architectures.
- Returns:
- memory location of an instruction which will be emulated as next
-
setInstructionLocation
boolean setInstructionLocation(int location)
Set memory location of an instruction which will be emulated as next.Instruction position is more "abstract" name for "program counter", which is mostly used in 8-bit architectures.
This method is called by emuStudio application when a user perform "jump to address" operation.
- Parameters:
location
- new address of actual instruction- Returns:
- true if operation was successful, false otherwise
-
getDisassembler
Disassembler getDisassembler()
Get disassembler.EmuStudio uses it for filling up the debugger table.
- Returns:
- disassembler of CPU instructions
-
isAutomationSupported
default boolean isAutomationSupported()
Description copied from interface:Plugin
Determines if this plugin supports emulation automation- Specified by:
isAutomationSupported
in interfacePlugin
- Returns:
- true if the plugin supports emulation automation; false otherwise
-
-