Class: Rnes::Operation

Inherits:
Object
  • Object
show all
Defined in:
lib/rnes/operation.rb,
lib/rnes/operation/records.rb

Constant Summary collapse

RECORDS =
[
  {
    full_name: :BRK,
    name: :BRK,
    addressing_mode: :implied,
    cycle: 7,
  },
  {
    full_name: :ORA_INDX,
    name: :ORA,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SLO_INDX,
    name: :SLO,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :ORA_ZERO,
    name: :ORA,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :ASL_ZERO,
    name: :ASL,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :SLO_ZERO,
    name: :SLO,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :PHP,
    name: :PHP,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :ORA_IMM,
    name: :ORA,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :ASL,
    name: :ASL,
    addressing_mode: :accumulator,
    cycle: 2,
  },
  {},
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ORA_ABS,
    name: :ORA,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :ASL_ABS,
    name: :ASL,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :SLO_ABS,
    name: :SLO,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BPL,
    name: :BPL,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :ORA_INDY,
    name: :ORA,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SLO_INDY,
    name: :SLO,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ORA_ZEROX,
    name: :ORA,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :ASL_ZEROX,
    name: :ASL,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :SLO_ZEROX,
    name: :SLO,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :CLC,
    name: :CLC,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :ORA_ABSY,
    name: :ORA,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SLO_ABSY,
    name: :SLO,
    addressing_mode: :absolute_y,
    cycle: 7,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ORA_ABSX,
    name: :ORA,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :ASL_ABSX,
    name: :ASL,
    addressing_mode: :absolute_x,
    cycle: 6,
  },
  {
    full_name: :SLO_ABSX,
    name: :SLO,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :JSR_ABS,
    name: :JSR,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :AND_INDX,
    name: :AND,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RLA_INDX,
    name: :RLA,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :BIT_ZERO,
    name: :BIT,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :AND_ZERO,
    name: :AND,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :ROL_ZERO,
    name: :ROL,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :RLA_ZERO,
    name: :RLA,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :PLP,
    name: :PLP,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :AND_IMM,
    name: :AND,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :ROL,
    name: :ROL,
    addressing_mode: :accumulator,
    cycle: 2,
  },
  {},
  {
    full_name: :BIT_ABS,
    name: :BIT,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :AND_ABS,
    name: :AND,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :ROL_ABS,
    name: :ROL,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :RLA_ABS,
    name: :RLA,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BMI,
    name: :BMI,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :AND_INDY,
    name: :AND,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RLA_INDY,
    name: :RLA,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :AND_ZEROX,
    name: :AND,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :ROL_ZEROX,
    name: :ROL,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :RLA_ZEROX,
    name: :RLA,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :SEC,
    name: :SEC,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :AND_ABSY,
    name: :AND,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RLA_ABSY,
    name: :RLA,
    addressing_mode: :absolute_y,
    cycle: 7,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :AND_ABSX,
    name: :AND,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :ROL_ABSX,
    name: :ROL,
    addressing_mode: :absolute_x,
    cycle: 6,
  },
  {
    full_name: :RLA_ABSX,
    name: :RLA,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :RTI,
    name: :RTI,
    addressing_mode: :implied,
    cycle: 6,
  },
  {
    full_name: :EOR_INDX,
    name: :EOR,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SRE_INDX,
    name: :SRE,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :EOR_ZERO,
    name: :EOR,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :LSR_ZERO,
    name: :LSR,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :SRE_ZERO,
    name: :SRE,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :PHA,
    name: :PHA,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :EOR_IMM,
    name: :EOR,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :LSR,
    name: :LSR,
    addressing_mode: :accumulator,
    cycle: 2,
  },
  {},
  {
    full_name: :JMP_ABS,
    name: :JMP,
    addressing_mode: :absolute,
    cycle: 3,
  },
  {
    full_name: :EOR_ABS,
    name: :EOR,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :LSR_ABS,
    name: :LSR,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :SRE_ABS,
    name: :SRE,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BVC,
    name: :BVC,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :EOR_INDY,
    name: :EOR,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SRE_INDY,
    name: :SRE,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :EOR_ZEROX,
    name: :EOR,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :LSR_ZEROX,
    name: :LSR,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :SRE_ZEROX,
    name: :SRE,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :CLI,
    name: :CLI,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :EOR_ABSY,
    name: :EOR,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SRE_ABSY,
    name: :SRE,
    addressing_mode: :absolute_y,
    cycle: 7,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :EOR_ABSX,
    name: :EOR,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :LSR_ABSX,
    name: :LSR,
    addressing_mode: :absolute_x,
    cycle: 6,
  },
  {
    full_name: :SRE_ABSX,
    name: :SRE,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :RTS,
    name: :RTS,
    addressing_mode: :implied,
    cycle: 6,
  },
  {
    full_name: :ADC_INDX,
    name: :ADC,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RRA_INDX,
    name: :RRA,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :ADC_ZERO,
    name: :ADC,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :ROR_ZERO,
    name: :ROR,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :RRA_ZERO,
    name: :RRA,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :PLA,
    name: :PLA,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ADC_IMM,
    name: :ADC,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :ROR,
    name: :ROR,
    addressing_mode: :accumulator,
    cycle: 2,
  },
  {},
  {
    full_name: :JMP_INDABS,
    name: :JMP,
    addressing_mode: :indirect_absolute,
    cycle: 5,
  },
  {
    full_name: :ADC_ABS,
    name: :ADC,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :ROR_ABS,
    name: :ROR,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :RRA_ABS,
    name: :RRA,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BVS,
    name: :BVS,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :ADC_INDY,
    name: :ADC,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RRA_INDY,
    name: :RRA,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ADC_ZEROX,
    name: :ADC,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :ROR_ZEROX,
    name: :ROR,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :RRA_ZEROX,
    name: :RRA,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :SEI,
    name: :SEI,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :ADC_ABSY,
    name: :ADC,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :RRA_ABSY,
    name: :RRA,
    addressing_mode: :absolute_y,
    cycle: 7,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :ADC_ABSX,
    name: :ADC,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :ROR_ABSX,
    name: :ROR,
    addressing_mode: :absolute_x,
    cycle: 6,
  },
  {
    full_name: :RRA_ABSX,
    name: :RRA,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :STA_INDX,
    name: :STA,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SAX_INDX,
    name: :SAX,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :STY_ZERO,
    name: :STY,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :STA_ZERO,
    name: :STA,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :STX_ZERO,
    name: :STX,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :SAX_ZERO,
    name: :SAX,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :DEY,
    name: :DEY,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :TXA,
    name: :TXA,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {
    full_name: :STY_ABS,
    name: :STY,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :STA_ABS,
    name: :STA,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :STX_ABS,
    name: :STX,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :SAX_ABS,
    name: :SAX,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :BCC,
    name: :BCC,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :STA_INDY,
    name: :STA,
    addressing_mode: :post_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {
    full_name: :STY_ZEROX,
    name: :STY,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :STA_ZEROX,
    name: :STA,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :STX_ZEROY,
    name: :STX,
    addressing_mode: :zero_page_y,
    cycle: 4,
  },
  {
    full_name: :SAX_ZEROY,
    name: :SAX,
    addressing_mode: :zero_page_y,
    cycle: 4,
  },
  {
    full_name: :TYA,
    name: :TYA,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :STA_ABSY,
    name: :STA,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :TXS,
    name: :TXS,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {},
  {
    full_name: :STA_ABSX,
    name: :STA,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {},
  {},
  {
    full_name: :LDY_IMM,
    name: :LDY,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :LDA_INDX,
    name: :LDA,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :LDX_IMM,
    name: :LDX,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :LAX_INDX,
    name: :LAX,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :LDY_ZERO,
    name: :LDY,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :LDA_ZERO,
    name: :LDA,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :LDX_ZERO,
    name: :LDX,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :LAX_ZERO,
    name: :LAX,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :TAY,
    name: :TAY,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :LDA_IMM,
    name: :LDA,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :TAX,
    name: :TAX,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {
    full_name: :LDY_ABS,
    name: :LDY,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :LDA_ABS,
    name: :LDA,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :LDX_ABS,
    name: :LDX,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :LAX_ABS,
    name: :LAX,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :BCS,
    name: :BCS,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :LDA_INDY,
    name: :LDA,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :LAX_INDY,
    name: :LAX,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :LDY_ZEROX,
    name: :LDY,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :LDA_ZEROX,
    name: :LDA,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :LDX_ZEROY,
    name: :LDX,
    addressing_mode: :zero_page_y,
    cycle: 4,
  },
  {
    full_name: :LAX_ZEROY,
    name: :LAX,
    addressing_mode: :zero_page_y,
    cycle: 4,
  },
  {
    full_name: :CLV,
    name: :CLV,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :LDA_ABSY,
    name: :LDA,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :TSX,
    name: :TSX,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {
    full_name: :LDY_ABSX,
    name: :LDY,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :LDA_ABSX,
    name: :LDA,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :LDX_ABSY,
    name: :LDX,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :LAX_ABSY,
    name: :LAX,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :CPY_IMM,
    name: :CPY,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :CMP_INDX,
    name: :CMP,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :DCP_INDX,
    name: :DCP,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :CPY_ZERO,
    name: :CPY,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :CMP_ZERO,
    name: :CMP,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :DEC_ZERO,
    name: :DEC,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :DCP_ZERO,
    name: :DCP,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :INY,
    name: :INY,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :CMP_IMM,
    name: :CMP,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :DEX,
    name: :DEX,
    addressing_mode: :implied,
    cycle: 2,
  },
  {},
  {
    full_name: :CPY_ABS,
    name: :CPY,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :CMP_ABS,
    name: :CMP,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :DEC_ABS,
    name: :DEC,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :DCP_ABS,
    name: :DCP,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BNE,
    name: :BNE,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :CMP_INDY,
    name: :CMP,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :DCP_INDY,
    name: :DCP,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :CMP_ZEROX,
    name: :CMP,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :DEC_ZEROX,
    name: :DEC,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :DCP_ZEROX,
    name: :DCP,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :CLD,
    name: :CLD,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :CMP_ABSY,
    name: :CMP,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :DCP_ABSY,
    name: :DCP,
    addressing_mode: :absolute_y,
    cycle: 2,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :CMP_ABSX,
    name: :CMP,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :DEC_ABSX,
    name: :DEC,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :DCP_ABSX,
    name: :DCP,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :CPX_IMM,
    name: :CPX,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :SBC_INDX,
    name: :SBC,
    addressing_mode: :pre_indexed_indirect,
    cycle: 6,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 3,
  },
  {
    full_name: :ISB_INDX,
    name: :ISB,
    addressing_mode: :pre_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :CPX_ZERO,
    name: :CPX,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :SBC_ZERO,
    name: :SBC,
    addressing_mode: :zero_page,
    cycle: 3,
  },
  {
    full_name: :INC_ZERO,
    name: :INC,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :ISB_ZERO,
    name: :ISB,
    addressing_mode: :zero_page,
    cycle: 5,
  },
  {
    full_name: :INX,
    name: :INX,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SBC_IMM,
    name: :SBC,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SBC_IMM,
    name: :SBC,
    addressing_mode: :immediate,
    cycle: 2,
  },
  {
    full_name: :CPX_ABS,
    name: :CPX,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :SBC_ABS,
    name: :SBC,
    addressing_mode: :absolute,
    cycle: 4,
  },
  {
    full_name: :INC_ABS,
    name: :INC,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :ISB_ABS,
    name: :ISB,
    addressing_mode: :absolute,
    cycle: 6,
  },
  {
    full_name: :BEQ,
    name: :BEQ,
    addressing_mode: :relative,
    cycle: 2,
  },
  {
    full_name: :SBC_INDY,
    name: :SBC,
    addressing_mode: :post_indexed_indirect,
    cycle: 5,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :ISB_INDY,
    name: :ISB,
    addressing_mode: :post_indexed_indirect,
    cycle: 8,
  },
  {
    full_name: :NOPD,
    name: :NOPD,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :SBC_ZEROX,
    name: :SBC,
    addressing_mode: :zero_page_x,
    cycle: 4,
  },
  {
    full_name: :INC_ZEROX,
    name: :INC,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :ISB_ZEROX,
    name: :ISB,
    addressing_mode: :zero_page_x,
    cycle: 6,
  },
  {
    full_name: :SED,
    name: :SED,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :SBC_ABSY,
    name: :SBC,
    addressing_mode: :absolute_y,
    cycle: 4,
  },
  {
    full_name: :NOP,
    name: :NOP,
    addressing_mode: :implied,
    cycle: 2,
  },
  {
    full_name: :ISB_ABSY,
    name: :ISB,
    addressing_mode: :absolute_y,
    cycle: 2,
  },
  {
    full_name: :NOPI,
    name: :NOPI,
    addressing_mode: :implied,
    cycle: 4,
  },
  {
    full_name: :SBC_ABSX,
    name: :SBC,
    addressing_mode: :absolute_x,
    cycle: 4,
  },
  {
    full_name: :INC_ABSX,
    name: :INC,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
  {
    full_name: :ISB_ABSX,
    name: :ISB,
    addressing_mode: :absolute_x,
    cycle: 7,
  },
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(addressing_mode:, cycle:, full_name:, name:) ⇒ Operation

Returns a new instance of Operation.

Parameters:

  • addressing_mode (Symbol)
  • cycle (Integer)
  • full_name (Symbol)
  • name (Symbol)


35
36
37
38
39
40
# File 'lib/rnes/operation.rb', line 35

def initialize(addressing_mode:, cycle:, full_name:, name:)
  @addressing_mode = addressing_mode
  @cycle = cycle
  @full_name = full_name
  @name = name
end

Instance Attribute Details

#addressing_modeSymbol (readonly)

Returns:

  • (Symbol)


20
21
22
# File 'lib/rnes/operation.rb', line 20

def addressing_mode
  @addressing_mode
end

#cycleInteger (readonly)

Returns:

  • (Integer)


23
24
25
# File 'lib/rnes/operation.rb', line 23

def cycle
  @cycle
end

#full_nameSymbol (readonly)

Returns:

  • (Symbol)


26
27
28
# File 'lib/rnes/operation.rb', line 26

def full_name
  @full_name
end

#nameSymbol (readonly)

Returns:

  • (Symbol)


29
30
31
# File 'lib/rnes/operation.rb', line 29

def name
  @name
end

Class Method Details

.build(operation_code) ⇒ Rnes::Operation

Parameters:

  • operation_code (Integer)

Returns:



9
10
11
12
13
14
15
16
# File 'lib/rnes/operation.rb', line 9

def build(operation_code)
  record = ::Rnes::Operation::RECORDS[operation_code]
  if record
    new(record)
  else
    raise ::Rnes::InvalidOperationCodeError, "Invalid operation code: #{operation_code}"
  end
end

Instance Method Details

#to_hashHash

Returns:

  • (Hash)


43
44
45
46
47
48
49
50
# File 'lib/rnes/operation.rb', line 43

def to_hash
  {
    addressing_mode: addressing_mode,
    cycle: cycle,
    full_name: full_name,
    name: name,
  }
end