CpuState

Enum CpuState 

Source
pub enum CpuState {
Show 27 variants FetchOpcode, FetchOperandLo, FetchOperandHi, ResolveAddress, ReadData, WriteData, RmwRead, RmwDummyWrite, RmwWrite, Execute, FetchIndirectLo, FetchIndirectHi, AddIndex, PushHi, PushLo, PushStatus, PopLo, PopHi, PopStatus, InternalCycle, BranchTaken, BranchPageCross, InterruptPushPcHi, InterruptPushPcLo, InterruptPushStatus, InterruptFetchVectorLo, InterruptFetchVectorHi,
}
Expand description

CPU execution state for cycle-by-cycle execution.

Each state represents one CPU cycle with one bus access. The state machine transitions through these states to execute instructions with perfect cycle accuracy.

Variants§

§

FetchOpcode

Fetch opcode from PC (cycle 1 of every instruction)

§

FetchOperandLo

Fetch low byte of operand

§

FetchOperandHi

Fetch high byte of operand

§

ResolveAddress

Resolve effective address (internal operation or dummy read) Used for indexed addressing modes with page crossing

§

ReadData

Read data from effective address

§

WriteData

Write data to effective address

§

RmwRead

Read-Modify-Write: Read phase

§

RmwDummyWrite

Read-Modify-Write: Dummy write old value (hardware behavior)

§

RmwWrite

Read-Modify-Write: Write new value

§

Execute

Execute internal operation (no bus access, register-only)

§

FetchIndirectLo

Fetch indirect address low byte (for indirect addressing)

§

FetchIndirectHi

Fetch indirect address high byte (for indirect addressing)

§

AddIndex

Add index to indirect address (indexed indirect)

§

PushHi

Push high byte to stack

§

PushLo

Push low byte to stack

§

PushStatus

Push status to stack

§

PopLo

Pop low byte from stack (with internal cycle)

§

PopHi

Pop high byte from stack

§

PopStatus

Pop status from stack

§

InternalCycle

Internal cycle (dummy stack read)

§

BranchTaken

Branch taken - calculate new PC

§

BranchPageCross

Branch page cross - extra cycle for crossing page

§

InterruptPushPcHi

Interrupt: Push PC high

§

InterruptPushPcLo

Interrupt: Push PC low

§

InterruptPushStatus

Interrupt: Push status

§

InterruptFetchVectorLo

Interrupt: Fetch vector low

§

InterruptFetchVectorHi

Interrupt: Fetch vector high

Implementations§

Source§

impl CpuState

Source

pub const fn is_read(&self) -> bool

Returns true if this state requires a bus read.

Source

pub const fn is_write(&self) -> bool

Returns true if this state requires a bus write.

Source

pub const fn is_internal(&self) -> bool

Returns true if this is an internal operation (no bus access visible).

Trait Implementations§

Source§

impl Clone for CpuState

Source§

fn clone(&self) -> CpuState

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CpuState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CpuState

Source§

fn default() -> CpuState

Returns the “default value” for a type. Read more
Source§

impl PartialEq for CpuState

Source§

fn eq(&self, other: &CpuState) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CpuState

Source§

impl Eq for CpuState

Source§

impl StructuralPartialEq for CpuState

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.