histcomp:6502

MOS Technology 6502

The 6502 has only three general-purpose registers: A, X, and Y, all of which are 8 bits wide. It also has an eight-bit stack pointer (S) and an eight-bit status register (P). The stack is hardwired to page 1 (\$0100–\$01FF) and grows down. Addresses are always stored in little-endian format.

6502 instructions can often use multiple addressing modes. Examples include:

  • implied: TAX
  • immediate: ADC #\$01
  • zero page: STX \$A3
  • zero page indexed: LDX \$3A,Y
  • absolute: LDA \$2000
  • indirect: JMP (\$C1FF)
  • relative: BEQ -5
  • absolute indexed: EOR \$2000,X / AND \$2000,Y
  • indexed indirect: CMP (\$65,X)
  • indirect indexed: ORA (\$55),Y

Out of a possible 256, the NMOS 6502 had only 151 legal opcodes. Because the chip used a PLA instruction decoder, the illegal opcodes could have effects from combining existing valid instructions to completely locking up the processor [1].

Table 1: NMOS opcodes (illegal opcodes omitted) [2]
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x BRK ORA (a8,X) ORA a8 ASL a8 PHP ORA #d8 ASL A ORA a16 ASL a16
1x BPL r8 ORA (a8),Y ORA a8,X ASL a8,X CLC ORA a16,Y ORA a16,X ASL a16,X
2x JSR a16 AND (a8,X) BIT a8 AND a8 ROL a8 PLP AND #d8 ROL A BIT a16 AND a16 ROL a16
3x BMI r8 AND (a8),Y AND a8,X ROL a8,X SEC AND a16,Y AND a16,X ROL a16,X
4x RTI EOR (a8,X) EOR a8 LSR a8 PHA EOR #d8 LSR A JMP a16 EOR a16 LSR a16
5x BVC r8 EOR (a8),Y EOR a8,X LSR a8,X CLI EOR a16,Y EOR a16,X LSR a16,X
6x RTS ADC (a8,X) ADC a8 ROR a8 PLA ADC #d8 ROR A JMP (a16) ADC a16 ROR a16
7x BVS r8 ADC (a8),Y ADC a8,X ROR a8,X SEI ADC a16,Y ADC a16,X ROR a16,X
8x STA (a8,X) STY a8 STA a8 STX a8 DEY TXA STY a16 STA a16 STX a16
9x BCC r8 STA (a8),Y STY a8,X STA a8,X STX a8,Y TYA STA a16,Y TXS STA a16,X
Ax LDY #d8 LDA (a8,X) LDX #d8 LDY a8 LDA a8 LDX a8 TAY LDA #d8 TAX LDY a16 LDA a16 LDX a16
Bx BCS r8 LDA (a8),Y LDY a8,X LDA a8,X LDX a8,Y CLV LDA a16,Y TSX LDY a16,X LDA a16,X LDX a16,Y
Cx CPY #d8 CMP (a8,X) CPY a8 CMP a8 DEC a8 INY CMP #d8 DEX CPY a16 CMP a16 DEC a16
Dx BNE r8 CMP (a8),Y CMP a8,X DEC a8,X CLD CMP a16,y CMP a16,X DEC a16,X
Ex CPX #d8 SBC (a8,X) CPX a8 SBC a8 INC a8 INX SBC #d8 NOP CPX a16 SBC a16 INC a16
Fx BEQ r8 SBC (a8),Y SBC a8,X INC a8,X SED SBC a16,Y SBC a16,X INC a16,X
Table 2: CMOS opcodes
  • histcomp/6502.txt
  • Last modified: 2024-08-28 06:22
  • by asdf