# 6502 Instruction Reference

### Instructions:

- ADC
- AND
- ASL
- BCC
- BCS
- BEQ
- BIT
- BMI
- BNE
- BPL
- BRK
- BVC
- BVS
- CLC
- CLD
- CLI
- CLV
- CMP
- CPX
- CPY
- DEC
- DEX
- DEY
- EOR
- INC
- INX
- INY
- JMP
- JSR
- LDA
- LDX
- LDY
- LSR
- NOP
- ORA
- PHA
- PHP
- PLA
- PLP
- ROL
- SBC
- SEC
- SED
- SEI
- STA
- STX
- STY
- TAX
- TAY
- TSX
- TXA
- TXS
- TYA

### Processor Status Flags:

- C - Carry Flag
- Z - Zero Flag
- I - Interrupt Disable
- D - Decimal Mode Flag
- B - Break Command
- V - Overflow Flag
- N - Negative Flag

### Opcode Modes:

- Implied - No arguments are needed
- Accumulator - Operates directly on Accumulator (A)
- Immediate - Argument is literal value rather than an address
- Relative - Argument is a signed 8-bit integer
- Zero Page - Argument is an 8-bit memory address in memory address range $0000-$00FF
- Zero Page,X - Argument is an 8-bit memory address in range $0000-$00FF and the value of X is added to it
- Absolute - Argument is a full 16-bit memory address
- Absolute,X - Argument is a full 16-bit memory address and the value of X is added to it
- Absolute,Y - Argument is a full 16-bit memory address and the value of Y is added to it
- (Indirect) - Argument is a full 16-bit memory address. The value of at the memory address is the low byte of the real target of the instruction. The value of the byte after the memory address is the high byte of the real tartet of the instruction.
- (Indirect, X) - Argument is a full 16-bit memory address. X is added to that memory address and the value at the X modified memory address is the low byte of the real target of the instruction. The value at the byte after the X modified memory address is the high byte of the real tartet of the instruction.
- (Indirect), Y - Argument is a full 16-bit memory address. Y is added to that memory address and the value at the Y modified memory address is the low byte of the real target of the instruction. The value at the byte after the Y modified memory address is the high byte of the real tartet of the instruction.

## ADC - Add with Carry

Adds target memory value and Carry Flag (C) (1 if Carry flag is set [1] or 0 if Carry Flag is clear [0]) to A and stores the result into A

### Processor Status After Use:

- C: 1 if A overflowed
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: 1 if A overflowed, otherwise 0
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: ADC #$12

Opcode: $69

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: ADC $12

Opcode: $65

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: ADC $12,X

Opcode: $75

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: ADC $1234

Opcode: $6D

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: ADC $1234,X

Opcode: $7D

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: ADC $1234,Y

Opcode: $79

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: ADC ($12,X)

Opcode: $61

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: ADC ($12),Y

Opcode: $71

Bytes: 2

Cycles: 5 (+1 if page crossed)

## AND - Logical AND

Logical AND operation "A AND target memory" is performed and the result is stored into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: AND #$12

Opcode: $29

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: AND $12

Opcode: $25

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: AND $12,X

Opcode: $35

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: AND $1234

Opcode: $2D

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: AND $1234,X

Opcode: $3D

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: AND $1234,Y

Opcode: $39

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: AND ($12,X)

Opcode: $21

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: AND ($12),Y

Opcode: $31

Bytes: 2

Cycles: 5 (+1 if page crossed)

## ASL - Arithmetic Shift Left

Shifts all bits of target to the left by 1. 0 is shifted into bit 0 of the target and bit 7 of the target is shifted into Carry Flag (C).

### Processor Status After Use:

- C: 1 if old bit 7 of target == 1, otherwise 0
- Z: 1 if target == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of target == 1, otherwise 0

### Opcodes:

Mode: Accumulator

Syntax: ASL

Opcode: $0A

Bytes: 1

Cycles: 2

Mode: Zero Page

Syntax: ASL $12

Opcode: $06

Bytes: 2

Cycles: 5

Mode: Zero Page,X

Syntax: ASL $12,X

Opcode: $16

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: ASL $1234

Opcode: $0E

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: ASL $1234,X

Opcode: $1E

Bytes: 3

Cycles: 7

## BCC - Branch if Carry Clear

If Carry Flag (C) is clear (0), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BCC $12

Opcode: $90

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BCS - Branch if Carry Set

If Carry Flag (C) is set (1), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BCS $12

Opcode: $B0

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BEQ - Branch if Equal

If Zero Flag (Z) is set (1), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BEQ $12

Opcode: $F0

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BIT - Bit Test

Logical AND operation "A AND target memory" is performed

### Processor Status After Use:

- C: -
- Z: 1 if result of AND == 0, otherwise 0
- I: -
- D: -
- B: -
- V: 1 if bit 6 of result of AND == 1, otherwise 0
- N: 1 if bit 7 of result of AND == 1, otherwise 0

### Opcodes:

Mode: Zero Page

Syntax: BIT $12

Opcode: $24

Bytes: 2

Cycles: 3

Mode: Absolute

Syntax: BIT $1234

Opcode: $2C

Bytes: 3

Cycles: 4

## BMI - Branch if Minus

If Negative Flag (N) is set (1), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BMI $12

Opcode: $30

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BNE - Branch if Not Equal

If Zero Flag (Z) is clear (0), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BNE $12

Opcode: $D0

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BPL - Branch if Positive

If Negative Flag (N) is clear (0), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BPL $12

Opcode: $10

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BRK - Force Interrupt

The Program Counter is pushed onto the stack and then Processor Status is pushed onto the stack. Stack Pointer is incremented by 3. Value at IRQ Interrupt Vector ($FFFE-$FFFF) is loaded into Program Counter and Break Command (B) is set (set to 1).

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: 1
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: BRK

Opcode: $00

Bytes: 1

Cycles: 7

## BVC - Branch if Overflow Clear

If Overflow Flag (V) is clear (0), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BVC $12

Opcode: $50

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## BVS - Branch if Overflow Set

If Overflow Flag (V) is set (0), add the argument value to Program Counter

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Relative

Syntax: BVS $12

Opcode: $70

Bytes: 2

Cycles: 2 (+1 if branch succeeds +2 if to a new page)

## CLC - Clear Carry Flag (C)

Clears Carry Flag (C) (sets to 0)

### Processor Status After Use:

- C: 0
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: CLC

Opcode: $18

Bytes: 1

Cycles: 2

## CLD - Clear Decimal Mode Flag (D)

Clears Decimal Mode Flag (D) (sets to 0). Decimal Mode Flag (D) value is uncertain at power-on.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: 0
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: CLD

Opcode: $D8

Bytes: 1

Cycles: 2

## CLI - Clear Interrupt Disable

Clears Interrupt Disable (I) (sets to 0)

### Processor Status After Use:

- C: -
- Z: -
- I: 0
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: CLI

Opcode: $58

Bytes: 1

Cycles: 2

## CLV - Clear Overflow Flag (V)

Clears Overflow Flag (V) (sets to 0)

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: 0
- N: -

### Opcodes:

Mode: Implied

Syntax: CLV

Opcode: $B8

Bytes: 1

Cycles: 2

## CMP - Compare

Compares A to target memory value

### Processor Status After Use:

- C: 1 if A >= target memory value, otherwise 0
- Z: 1 if A == target memory value, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of result == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: CMP #$12

Opcode: $C9

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: CMP $12

Opcode: $C5

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: CMP $12,X

Opcode: $D5

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: CMP $1234

Opcode: $CD

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: CMP $1234,X

Opcode: $DD

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: CMP $1234,Y

Opcode: $D9

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: CMP ($12,X)

Opcode: $C1

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: CMP ($12),Y

Opcode: $D1

Bytes: 2

Cycles: 5 (+1 if page crossed)

## CPX - Compare

Compares X to target memory value

### Processor Status After Use:

- C: 1 if X >= target memory value, otherwise 0
- Z: 1 if X == target memory value, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of result == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: CPX #$12

Opcode: $E0

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: CPX $12

Opcode: $E4

Bytes: 2

Cycles: 3

Mode: Absolute

Syntax: CPX $1234

Opcode: $EC

Bytes: 3

Cycles: 4

## CPY - Compare

Compares Y to target memory value

### Processor Status After Use:

- C: 1 if Y >= target memory value, otherwise 0
- Z: 1 if Y == target memory value, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of result == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: CPY #$12

Opcode: $C0

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: CPY $12

Opcode: $C4

Bytes: 2

Cycles: 3

Mode: Absolute

Syntax: CPY $1234

Opcode: $CC

Bytes: 3

Cycles: 4

## DEC - Decrement Memory

Subtracts 1 from target memory value and stores the result into target memory

### Processor Status After Use:

- C: -
- Z: 1 if result == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of result == 1, otherwise 0

### Opcodes:

Mode: Zero Page

Syntax: DEC $12

Opcode: $C6

Bytes: 2

Cycles: 5

Mode: Zero Page, X

Syntax: DEC $12,X

Opcode: $D6

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: DEC $1234

Opcode: $CE

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: DEC $1234,X

Opcode: $DE

Bytes: 3

Cycles: 7

## DEX - Decrement X Register

Subtracts 1 from X and stores the result into X

### Processor Status After Use:

- C: -
- Z: 1 if X == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of X == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: DEX

Opcode: $CA

Bytes: 1

Cycles: 2

## DEY - Decrement Y Register

Subtracts 1 from Y and stores the result into X

### Processor Status After Use:

- C: -
- Z: 1 if Y == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of Y == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: DEY

Opcode: $88

Bytes: 1

Cycles: 2

## EOR - Exclusive OR

Logical XOR operation "A XOR target memory" is performed and the result is stored into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: EOR #$12

Opcode: $49

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: EOR $12

Opcode: $45

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: EOR $12,X

Opcode: $55

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: EOR $1234

Opcode: $4D

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: EOR $1234,X

Opcode: $5D

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: EOR $1234,Y

Opcode: $59

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: EOR ($12,X)

Opcode: $41

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: EOR ($12),Y

Opcode: $51

Bytes: 2

Cycles: 5 (+1 if page crossed)

## INC - Increment Memory

Adds 1 to target memory value and stores the result into target memory

### Processor Status After Use:

- C: -
- Z: 1 if result == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of result == 1, otherwise 0

### Opcodes:

Mode: Zero Page

Syntax: INC $12

Opcode: $E6

Bytes: 2

Cycles: 5

Mode: Zero Page,X

Syntax: INC $12,X

Opcode: $F6

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: INC $1234

Opcode: $EE

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: INC $1234,X

Opcode: $FE

Bytes: 3

Cycles: 7

## INX - Increment X Register

Adds 1 to X and stores the result into X

### Processor Status After Use:

- C: -
- Z: 1 if X == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of X == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: INX

Opcode: $E8

Bytes: 1

Cycles: 2

## INY - Increment Y Register

Adds 1 to Y and stores the result into Y

### Processor Status After Use:

- C: -
- Z: 1 if Y == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of Y == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: INY

Opcode: $C8

Bytes: 1

Cycles: 2

## JMP - Jump

Sets Program Counter to address specified by argument. Original 6502 processors mishandle (Indirect) JMP instructions if the low byte of the argument is $FF and will not correctly increment the high byte of the argument by 1. For example, JMP ($10FF) sets the low byte of Program Counter to the value at memory address $10FF, but sets the high byte of Program Counter to the value at memory address $1000 instead of $1100.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Absolute

Syntax: JMP $1234

Opcode: $4C

Bytes: 3

Cycles: 3

Mode: (Indirect)

Syntax: JMP ($1234)

Opcode: $6C

Bytes: 3

Cycles: 5

## JSR - Jump to Subroutine

Pushes the Program Counter minus 1 onto the stack. Program Counter is then set to the argument value. Stack Pointer is incremented by 2.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Absolute

Syntax: JSR $1234

Opcode: $20

Bytes: 3

Cycles: 6

## LDA - Load Accumulator

Loads value of target memory into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: LDA #$12

Opcode: $A9

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: LDA $12

Opcode: $A5

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: LDA $12,X

Opcode: $B5

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: LDA $1234

Opcode: $AD

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: LDA $1234,X

Opcode: $BD

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: LDA $1234,Y

Opcode: $B9

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: LDA ($12,X)

Opcode: $A1

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: LDA ($12),Y

Opcode: $B1

Bytes: 2

Cycles: 5 (+1 if page crossed)

## LDX - Load X Register

Loads value of target memory into X

### Processor Status After Use:

- C: -
- Z: 1 if X == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of X == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: LDX #$12

Opcode: $A2

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: LDX $12

Opcode: $A6

Bytes: 2

Cycles: 3

Mode: Zero Page,Y

Syntax: LDX $12,Y

Opcode: $B6

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: LDX $1234

Opcode: $AE

Bytes: 3

Cycles: 4

Mode: Absolute,Y

Syntax: LDX $1234,Y

Opcode: $BE

Bytes: 3

Cycles: 4 (+1 if page crossed)

## LDY - Load Y Register

Loads value of target memory into Y

### Processor Status After Use:

- C: -
- Z: 1 if Y == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of Y == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: LDY #$12

Opcode: $A0

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: LDY $12

Opcode: $A4

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: LDY $12,X

Opcode: $B4

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: LDY $1234

Opcode: $AC

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: LDY $1234,X

Opcode: $BC

Bytes: 3

Cycles: 4 (+1 if page crossed)

## LSR - Logical Shift Right

Shifts all bits of target to the right by 1. 0 is shifted into bit 7 of the target and bit 0 of the target is shifted into Carry Flag (C).

### Processor Status After Use:

- C: 1 if old bit 0 of target == 1, otherwise 0
- Z: 1 if target == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of target == 1, otherwise 0

### Opcodes:

Mode: Accumulator

Syntax: LSR

Opcode: $4A

Bytes: 1

Cycles: 2

Mode: Zero Page

Syntax: LSR $12

Opcode: $46

Bytes: 2

Cycles: 5

Mode: Zero Page,X

Syntax: LSR $12, X

Opcode: $56

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: LSR $1234

Opcode: $4E

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: LSR $1234,X

Opcode: $5E

Bytes: 3

Cycles: 7

## NOP - No Operation

No changes happen to the processor besides the normal incrementing of Program Counter to the next instruction.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: NOP

Opcode: $EA

Bytes: 1

Cycles: 2

## ORA - Logical Inclusive OR

Logical OR operation "A OR target memory" is performed and the result is stored into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: ORA #$12

Opcode: $09

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: ORA $12

Opcode: $05

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: ORA $12,X

Opcode: $15

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: ORA $1234

Opcode: $0D

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: ORA $1234,X

Opcode: $1D

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: ORA $1234,Y

Opcode: $19

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: ORA ($12,X)

Opcode: $01

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: ORA ($12),Y

Opcode: $11

Bytes: 2

Cycles: 5 (+1 if page crossed)

## PHA - Push Accumulator

Pushes copy of the A onto the stack. Stack Pointer is incremented by 1.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: PHA

Opcode: $48

Bytes: 1

Cycles: 3

## PHP - Push Processor Status

Pushes copy of Processor Status onto stack. Stack Pointer is incremented by 1.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: PHP

Opcode: $08

Bytes: 1

Cycles: 3

## PLA - Pull Accumulator

Pops 1 byte from the stack and stores it into A. Stack pointer is decremented by 1.

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: PHP

Opcode: $68

Bytes: 1

Cycles: 4

## PLP - Pull Processor Status

Pops 1 byte from the stack and Processor Status is set to that 1 byte. Stack pointer is decremented by 1.

### Processor Status After Use:

- C: Set from stack
- Z: Set from stack
- I: Set from stack
- D: Set from stack
- B: Set from stack
- V: Set from stack
- N: Set from stack

### Opcodes:

Mode: Implied

Syntax: PLP

Opcode: $28

Bytes: 1

Cycles: 4

## ROL - Rotate Left

Shifts all bits of target to the left by 1. Carry Flag (C) value is shifted into bit 0 of the target and bit 7 of the target is shifted into Carry Flag (C).

### Processor Status After Use:

- C: 1 if old bit 7 of target == 1, otherwise 0
- Z: 1 if target == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of target = 1, otherwise 0

### Opcodes:

Mode: Accumulator

Syntax: ROL

Opcode: $2A

Bytes: 1

Cycles: 2

Mode: Zero Page

Syntax: ROL $12

Opcode: $26

Bytes: 2

Cycles: 5

Mode: Zero Page,X

Syntax: ROL $12,X

Opcode: $36

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: ROL $1234

Opcode: $2E

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: ROL $1234,X

Opcode: $3E

Bytes: 3

Cycles: 7

## ROR - Rotate Right

Shifts all bits of target to the right by 1. Carry Flag (C) value is shifted into bit 7 of the target and bit 0 of the target is shifted into Carry Flag (C).

### Processor Status After Use:

- C: 1 if old bit 0 of target == 1, otherwise 0
- Z: 1 if target == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of target == 1, otherwise 0

### Opcodes:

Mode: Accumulator

Syntax: ROR

Opcode: $6A

Bytes: 1

Cycles: 2

Mode: Zero Page

Syntax: ROR $12

Opcode: $66

Bytes: 2

Cycles: 5

Mode: Zero Page,X

Syntax: ROR $12,X

Opcode: $76

Bytes: 2

Cycles: 6

Mode: Absolute

Syntax: ROR $1234

Opcode: $6E

Bytes: 3

Cycles: 6

Mode: Absolute,X

Syntax: ROR $1234,X

Opcode: $7E

Bytes: 3

Cycles: 7

## RTI - Return from Interrupt

Pops 1 byte from the stack and sets Processor Status to that byte, then pops 2 more bytes from the stack and sets Program Counter to those 2 bytes. Stack pointer is decremented by 3.

### Processor Status After Use:

- C: Set from stack
- Z: Set from stack
- I: Set from stack
- D: Set from stack
- B: Set from stack
- V: Set from stack
- N: Set from stack

### Opcodes:

Mode: Implied

Syntax: RTI

Opcode: $40

Bytes: 1

Cycles: 6

## RTS - Return from Subroutine

Pops 2 bytes from the stack and sets Program Counter to those 2 bytes. Program Counter is then incremented by 1. Stack Pointer is decremented by 2.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: RTS

Opcode: $60

Bytes: 1

Cycles: 6

## SBC - Subtract with Carry

Subtracts target memory value and the NOT of Carry Flag (C) (1 if Carry flag is clear [0] or 0 if Carry Flag is set [1]) from A and stores the result into A

### Processor Status After Use:

- C: 0 if A underflowed
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: 1 if A underflowed, otherwise 0
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Immediate

Syntax: SBC #$12

Opcode: $E9

Bytes: 2

Cycles: 2

Mode: Zero Page

Syntax: SBC $12

Opcode: $E5

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: SBC $12,X

Opcode: $F5

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: SBC $1234

Opcode: $ED

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: SBC $1234,X

Opcode: $FD

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: Absolute,Y

Syntax: SBC $1234,Y

Opcode: $F9

Bytes: 3

Cycles: 4 (+1 if page crossed)

Mode: (Indirect,X)

Syntax: SBC ($12,X)

Opcode: $E1

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: SBC ($12),Y

Opcode: $F1

Bytes: 2

Cycles: 5 (+1 if page crossed)

## SEC - Set Carry Flag (C)

Sets Carry Flag (C) (sets to 1)

### Processor Status After Use:

- C: 1
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: SEC

Opcode: $38

Bytes: 1

Cycles: 2

## SED - Set Decimal Mode Flag (D)

Sets Decimal Mode Flag (D) (sets to 1). Decimal Mode Flag (D) value is uncertain at power-on.

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: 1
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: SED

Opcode: $F8

Bytes: 1

Cycles: 2

## SEI - Set Interrupt Disable

Sets Interrupt Disable (I) (sets to 1)

### Processor Status After Use:

- C: -
- Z: -
- I: 1
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: SEI

Opcode: $78

Bytes: 1

Cycles: 2

## STA - Store Accumulator

Stores value of A into target memory

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Zero Page

Syntax: STA $12

Opcode: $85

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: STA $12,X

Opcode: $95

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: STA $1234

Opcode: $8D

Bytes: 3

Cycles: 4

Mode: Absolute,X

Syntax: STA $1234,X

Opcode: $9D

Bytes: 3

Cycles: 5

Mode: Absolute,Y

Syntax: STA $1234,Y

Opcode: $99

Bytes: 3

Cycles: 5

Mode: (Indirect,X)

Syntax: STA ($12,X)

Opcode: $81

Bytes: 2

Cycles: 6

Mode: (Indirect),Y

Syntax: STA ($12),Y

Opcode: $91

Bytes: 2

Cycles: 6

## STX - Store X Register

Stores value of X into target memory

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Zero Page

Syntax: STX $12

Opcode: $86

Bytes: 2

Cycles: 3

Mode: Zero Page,Y

Syntax: STA $12,Y

Opcode: $96

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: STA $1234

Opcode: $8E

Bytes: 3

Cycles: 4

## STY - Store Y Register

Stores content of Y into target memory

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Zero Page

Syntax: STX $12

Opcode: $84

Bytes: 2

Cycles: 3

Mode: Zero Page,X

Syntax: STA $12,X

Opcode: $94

Bytes: 2

Cycles: 4

Mode: Absolute

Syntax: STA $1234

Opcode: $8C

Bytes: 3

Cycles: 4

## TAX - Transfer Accumulator to X

Copies value of A and stores it into X

### Processor Status After Use:

- C: -
- Z: 1 if X == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of X == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: TAX $12

Opcode: $AA

Bytes: 1

Cycles: 2

## TAY - Transfer Accumulator to Y

Copies value of A and stores it into Y

### Processor Status After Use:

- C: -
- Z: 1 if Y == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of Y == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: TAY $12

Opcode: $A8

Bytes: 1

Cycles: 2

## TSX - Transfer Stack Pointer to X

Copies value of Stack Pointer and stores it into X

### Processor Status After Use:

- C: -
- Z: 1 if X == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of X == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: TSX $12

Opcode: $BA

Bytes: 1

Cycles: 2

## TXA - Transfer X to Accumulator

Copies value of X and stores it into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: TXA $12

Opcode: $8A

Bytes: 1

Cycles: 2

## TXS - Transfer X to Stack Pointer

Copies value of X and stores it into Stack Pointer

### Processor Status After Use:

- C: -
- Z: -
- I: -
- D: -
- B: -
- V: -
- N: -

### Opcodes:

Mode: Implied

Syntax: TXS $12

Opcode: $9A

Bytes: 1

Cycles: 2

## TYA - Transfer Y to Accumulator

Copies value of Y and stores it into A

### Processor Status After Use:

- C: -
- Z: 1 if A == 0, otherwise 0
- I: -
- D: -
- B: -
- V: -
- N: 1 if bit 7 of A == 1, otherwise 0

### Opcodes:

Mode: Implied

Syntax: TYA $12

Opcode: $98

Bytes: 1

Cycles: 2