InstructionType

Enum InstructionType 

Source
pub enum InstructionType {
Show 15 variants Read, Write, ReadModifyWrite, Implied, Accumulator, Branch, JumpAbsolute, JumpIndirect, JumpSubroutine, ReturnSubroutine, ReturnInterrupt, Push, Pull, Break, Jam,
}
Expand description

Instruction execution pattern classification.

Different instruction types follow different state sequences:

  • Read: Fetch operand, read from effective address
  • Write: Fetch operand, write to effective address
  • ReadModifyWrite: Read, dummy write old, write new
  • etc.

Variants§

§

Read

Read instructions (LDA, LDX, LDY, AND, ORA, EOR, CMP, ADC, SBC, BIT, LAX, etc.)

§

Write

Write instructions (STA, STX, STY, SAX, SHA, SHX, SHY, TAS)

§

ReadModifyWrite

Read-Modify-Write (ASL, LSR, ROL, ROR, INC, DEC, SLO, RLA, SRE, RRA, DCP, ISC)

§

Implied

Implied/Register operations (TAX, INX, CLC, NOP, etc.) Single-byte instructions with internal operation

§

Accumulator

Accumulator operations (ASL A, LSR A, ROL A, ROR A) Two-cycle, single-byte

§

Branch

Branch instructions (BEQ, BNE, BCC, BCS, BPL, BMI, BVC, BVS) 2/3/4 cycles depending on condition and page crossing

§

JumpAbsolute

Jump Absolute (JMP $NNNN) 3 cycles

§

JumpIndirect

Jump Indirect (JMP ($NNNN)) 5 cycles

§

JumpSubroutine

Jump to Subroutine (JSR $NNNN) 6 cycles

§

ReturnSubroutine

Return from Subroutine (RTS) 6 cycles

§

ReturnInterrupt

Return from Interrupt (RTI) 6 cycles

§

Push

Push to Stack (PHA, PHP) 3 cycles

§

Pull

Pull from Stack (PLA, PLP) 4 cycles

§

Break

Software Interrupt (BRK) 7 cycles

§

Jam

JAM/KIL - Halt CPU

Implementations§

Source§

impl InstructionType

Source

pub const fn base_cycles(&self) -> u8

Returns the base number of cycles for this instruction type. This does not include addressing mode cycles or penalties.

Source

pub const fn has_page_cross_penalty(&self) -> bool

Returns true if this instruction type can have page crossing penalty.

Source

pub const fn is_rmw(&self) -> bool

Returns true if this is a read-modify-write instruction.

Source

pub const fn from_opcode(opcode: u8) -> Self

Classify an opcode into its instruction type.

This function maps all 256 opcodes (official and unofficial) to their execution pattern type, enabling proper cycle-by-cycle state machine dispatch.

Trait Implementations§

Source§

impl Clone for InstructionType

Source§

fn clone(&self) -> InstructionType

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 InstructionType

Source§

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

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

impl Default for InstructionType

Source§

fn default() -> InstructionType

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

impl PartialEq for InstructionType

Source§

fn eq(&self, other: &InstructionType) -> 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 InstructionType

Source§

impl Eq for InstructionType

Source§

impl StructuralPartialEq for InstructionType

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.