6502 Instruction Summary RTK, last update: 23-Jul-97 Summary format: -------------- mnemonic - instruction name operation processor status flags affected assembler format opcode -------------------------------------------------------------------------------- ADC - Add to Accumulator with Carry ===================================== A+M+C -> A,C N, Z, C, V ADC #aa 69 ADC aa 65 ADC aa,X 75 ADC aaaa 6D ADC aaaa,X 7D -------------------------------------------------------------------------------- AND - AND Memory with Accumulator =================================== A and M -> A N, Z AND #aa 29 AND aa 25 AND aa,X 35 AND aaaa 2D AND aaaa,X 3D AND aaaa,Y 39 AND (aa,X) 21 AND (aa),Y 31 -------------------------------------------------------------------------------- ASL - Accumulator Shift Left (also memory) ============================================= +-+-+-+-+-+-+-+-+ C <- |7|6|5|4|3|2|1|0| <- 0 N, Z, C +-+-+-+-+-+-+-+-+ ASL A 0A ASL aa 06 ASL aa,X 16 ASL aaaa 0E ASL aaaa,X 1E -------------------------------------------------------------------------------- BCC - Branch on Carry Clear ============================= branch on C=0 no flags BCC aa 90 -------------------------------------------------------------------------------- BCS - Branch on Carry Set =========================== branch on C=1 no flags BCS aa B0 -------------------------------------------------------------------------------- BEQ - Branch Zero Set ======================= branch on Z=1 no flags BEQ aa F0 -------------------------------------------------------------------------------- BIT - Test Bits in Memory with Accumulator ============================================ A and M, M7 -> N, M6 -> V N=M7, V=M6, Z=1 if A and M = 0 neither A nor M are altered BIT aa 24 BIT aaaa 2C -------------------------------------------------------------------------------- BMI - Branch on Result Minus ============================== branch on N=1 no flags BMI aa 30 -------------------------------------------------------------------------------- BNE - Branch on Z reset ============================= branch on Z=0 no flags BNE aa D0 -------------------------------------------------------------------------------- BPL - Branch on Result Plus ============================= branch on N=0 no flags BPL aa 10 -------------------------------------------------------------------------------- BRK - Force a Break ============================= forced interrupt B=1, I=1 BRK 00 -------------------------------------------------------------------------------- BVC - Branch on Overflow Clear ================================ branch on V=0 no flags BVC aa 50 -------------------------------------------------------------------------------- BVS - Branch on Overflow Set ============================== branch on V=1 no flags BVS aa 70 -------------------------------------------------------------------------------- CLC - Clear Carry Flag ======================== 0 -> C C=0 CLC 18 -------------------------------------------------------------------------------- CLD - Clear Decimal Mode ========================== 0 -> D D=0 CLD D8 CLI - Clear Interrupt Disable =============================== 0 -> I I=0 CLI 58 -------------------------------------------------------------------------------- CLV - Clear Overflow Flag =========================== 0 -> V V=0 CLV B8 -------------------------------------------------------------------------------- N.B. CMP, CPX, and CPY all set flags according to: A, X, or Y < Memory ---> N=1, Z=0, C=0 A, X, or Y = Memory ---> N=0, Z=1, C=1 A, X, or Y > Memory ---> N=0, Z=0, C=1 CMP - Compare Memory and Accumulator ====================================== A compared with M N, Z, C CMP #aa C9 CMP aa C5 CMP aa,X D5 CMP aaaa CD CMP aaaa,X DD CMP aaaa,Y D9 CMP (aa,X) C1 CMP (aa),Y D1 CPX - Compare Memory and X register ===================================== X compared with M N, Z, C CPX #aa E0 CPX aa E4 CPX aaaa EC CPY - Compare Memory and Y register ===================================== Y compare with M N, Z, C CPY #aa C0 CPY aa C4 CPY aaaa CC -------------------------------------------------------------------------------- DEC - Decrement Memory by One =============================== M - 1 -> M N, Z DEC aa C6 DEC aa,X D6 DEC aaaa CE DEC aaaa,X DE -------------------------------------------------------------------------------- DEX - Decrement X =================== X - 1 -> X N, Z DEX CA -------------------------------------------------------------------------------- DEY - Decrement Y =================== Y - 1 -> Y N, Z DEY 88 -------------------------------------------------------------------------------- EOR - Exclusive-OR Memory with Accumulator ============================================ A xor M -> A N, Z EOR #aa 49 EOR $aa 45 EOR $aa,X 55 EOR $aaaa 4D EOR $aaaa,X 5D EOR $aaaa,Y 59 EOR ($aa,X) 41 EOR ($aa),Y 51 -------------------------------------------------------------------------------- INC - Increment Memory by one =============================== M + 1 -> M N, Z INC $aa E6 INC $aa,X F6 INC $aaaa EE INC $aaaa,X FE -------------------------------------------------------------------------------- INX - Increment X by one ========================== X + 1 -> X N, Z INX E8 -------------------------------------------------------------------------------- INY - Increment Y by one ========================== Y + 1 -> Y N, Z INY C8 -------------------------------------------------------------------------------- JMP - Jump ============ JMP $aaaa 4C JMP ($aaaa) 6C -------------------------------------------------------------------------------- JSR - Jump to subroutine ========================== JSR $aaaa 20 -------------------------------------------------------------------------------- LDA - Load Accumulator with memory ==================================== M -> A N, Z LDA #aa A9 LDA $aa A5 LDA $aa,X B5 LDA $aaaa AD LDA $aaaa,X BD LDA $aaaa,Y B9 LDA ($aa,X) A1 LDA ($aa),Y B1 -------------------------------------------------------------------------------- LDX - Load X with Memory ========================== M -> X N, Z LDX #aa A2 LDX $aa A6 LDX $aa,Y B6 LDX $aaaa AE LDX $aaaa,Y BE -------------------------------------------------------------------------------- LDY - Load Y with Memory ========================== M -> Y N, Z LDY #aa A0 LDY $aa A4 LDY $aa,X B4 LDY $aaaa AC LDY $aaaa,X BC -------------------------------------------------------------------------------- LSR - Logical Shift Right =========================== +-+-+-+-+-+-+-+-+ 0 -> |7|6|5|4|3|2|1|0| -> C N, Z, C +-+-+-+-+-+-+-+-+ LSR A 4A LSR $aa 46 LSR $aa,X 56 LSR $aaaa 4E LSR $aaaa,X 5E -------------------------------------------------------------------------------- NOP - No Operation ==================== NOP EA -------------------------------------------------------------------------------- ORA - OR Memory with Accumulator ================================== A or M -> A N, Z ORA #aa 09 ORA $aa 05 ORA $aa,X 15 ORA $aaaa 0D ORA $aaaa,X 1D ORA $aaaa,Y 19 ORA ($aa,X) 01 ORA ($aa),Y 11 -------------------------------------------------------------------------------- PHA - Push Accumulator on Stack ================================= A -> Stack PHA 48 -------------------------------------------------------------------------------- PHP - Push Processor Status on Stack ====================================== P -> Stack PHP 08 -------------------------------------------------------------------------------- PLA - Pull Accumulator from Stack =================================== Stack -> A N, Z PLA 68 -------------------------------------------------------------------------------- PLP - Pull Processor Status from Stack ======================================== Stack -> P from stack PLP 28 -------------------------------------------------------------------------------- ROL - Rotate Left =================== +-+-+-+-+-+-+-+-+ C <- |7|6|5|4|3|2|1|0| <- C N, Z, C +-+-+-+-+-+-+-+-+ ROL A 2A ROL $aa 26 ROL $aa,X 36 ROL $aaaa 2E ROL $aaaa,X 3E -------------------------------------------------------------------------------- ROR - Rotate Right ==================== +-+-+-+-+-+-+-+-+ C -> |7|6|5|4|3|2|1|0| -> C N, Z, C +-+-+-+-+-+-+-+-+ ROR A 6A ROR $aa 66 ROR $aa,X 76 ROR $aaaa 6E ROR $aaaa,X 7E -------------------------------------------------------------------------------- RTI - Return from Interrupt ============================= RTI 40 -------------------------------------------------------------------------------- RTS - Return from Subroutine ============================== RTS 60 -------------------------------------------------------------------------------- SBC - Subtract from Accumulator with Carry ============================================ A - M - ~C -> A (~C is NOT C) N, Z, C, V SBC #aa E9 SBC $aa E5 SBC $aa,X F5 SBC $aaaa ED SBC $aaaa,X FD SBC $aaaa,Y F9 SBC ($aa,X) E1 SBC ($aa),Y F1 -------------------------------------------------------------------------------- SEC - Set Carry Flag ====================== SEC 38 -------------------------------------------------------------------------------- SED - Set Decimal Mode ======================== SED F8 -------------------------------------------------------------------------------- SEI - Set Interrupt Disable ============================= SEI 78 -------------------------------------------------------------------------------- STA - Store Accumulator in Memory =================================== STA $aa 85 STA $aa,X 95 STA $aaaa 8D STA $aaaa,X 9D STA $aaaa,Y 99 STA ($aa,X) 81 STA ($aa),Y 91 -------------------------------------------------------------------------------- STX - Store X in Memory ========================= STX $aa 86 STX $aa,Y 96 STX $aaaa 8E -------------------------------------------------------------------------------- STY - Store Y in Memory ========================= STY $aa 84 STY $aa,X 94 STY $aaaa 8C -------------------------------------------------------------------------------- TAX - Transfer Accumulator to X ================================= A -> X N, Z TAX AA -------------------------------------------------------------------------------- TAY - Transfer Accumulator to Y ================================= A -> Y N, Z TAY A8 -------------------------------------------------------------------------------- TSX - Transfer Stack to X =========================== S -> X N, Z TSX BA -------------------------------------------------------------------------------- TXA - Transfer X to Accumulator ================================= X -> A N, Z TXA 8A -------------------------------------------------------------------------------- TXS - Transfer X to Stack =========================== X -> S N, Z TXS 9A -------------------------------------------------------------------------------- TYA - Transfer Y to Accumulator ================================= Y -> A N, Z TYA 98 Back to the Incredible 6502