; opcodes.inc ; ca65 6502 - opcode definitions, mainly for self modifying code ; ; Christian Krüger, latest change: 18-Sep-2010 ; ; This software is provided 'as-is', without any expressed or implied ; warranty. In no event will the authors be held liable for any damages ; arising from the use of this software. ; ; Permission is granted to anyone to use this software for any purpose, ; including commercial applications, and to alter it and redistribute it ; freely, subject to the following restrictions: ; ; 1. The origin of this software must not be misrepresented; you must not ; claim that you wrote the original software. If you use this software ; in a product, an acknowledgment in the product documentation would be ; appreciated but is not required. ; 2. Altered source versions must be plainly marked as such, and must not ; be misrepresented as being the original software. ; 3. This notice may not be removed or altered from any source ; distribution. ; ; Opcode-Table ; ------------ ; Post fix explanation: ; imm = #$00 ; zp = $00 ; zpx = $00,X ; zpy = $00,Y ; izp = ($00) ; izx = ($00,X) ; izy = ($00),Y ; abs = $0000 ; abx = $0000,X ; aby = $0000,Y ; ind = ($0000) ; iax = ($0000,X) ; rel = $0000 (PC-relative) (supressed here) .macpack cpu OPC_BRK = $00 OPC_ORA_izx = $01 OPC_ORA_zp = $05 OPC_ASL_zp = $06 OPC_PHP = $08 OPC_ORA_imm = $09 OPC_ASL = $0A OPC_ORA_abs = $0D OPC_ASL_abs = $0E OPC_BPL = $10 OPC_ORA_izy = $11 OPC_ORA_zpx = $15 OPC_ASL_zpx = $16 OPC_CLC = $18 OPC_ORA_aby = $19 OPC_ORA_abx = $1D OPC_ASL_abx = $1E OPC_JSR_abs = $20 OPC_AND_izx = $21 OPC_BIT_zp = $24 OPC_AND_zp = $25 OPC_ROL_zp = $26 OPC_PLP = $28 OPC_AND_imm = $29 OPC_ROL = $2A OPC_BIT_abs = $2C OPC_AND_abs = $2D OPC_ROL_abs = $2E OPC_BMI = $30 OPC_AND_izy = $31 OPC_AND_zpx = $35 OPC_ROL_zpx = $36 OPC_SEC = $38 OPC_AND_aby = $39 OPC_AND_abx = $3D OPC_ROL_abx = $3E OPC_RTI = $40 OPC_EOR_izx = $41 OPC_EOR_zp = $45 OPC_LSR_zp = $46 OPC_PHA = $48 OPC_EOR_imm = $49 OPC_LSR = $4A OPC_JMP_abs = $4C OPC_EOR_abs = $4D OPC_LSR_abs = $4E OPC_BVC = $50 OPC_EOR_izy = $51 OPC_EOR_zpx = $55 OPC_LSR_zpx = $56 OPC_CLI = $58 OPC_EOR_aby = $59 OPC_EOR_abx = $5D OPC_LSR_abx = $5E OPC_RTS = $60 OPC_ADC_izx = $61 OPC_ADC_zp = $65 OPC_ROR_zp = $66 OPC_PLA = $68 OPC_ADC_imm = $69 OPC_ROR = $6A OPC_JMP_ind = $6C OPC_ADC_abs = $6D OPC_ROR_abs = $6E OPC_BVS = $70 OPC_ADC_izy = $71 OPC_ADC_zpx = $75 OPC_ROR_zpx = $76 OPC_SEI = $78 OPC_ADC_aby = $79 OPC_ADC_abx = $7D OPC_ROR_abx = $7E OPC_STA_izx = $81 OPC_STY_zp = $84 OPC_STA_zp = $85 OPC_STX_zp = $86 OPC_DEY = $88 OPC_TXA = $8A OPC_STY_abs = $8C OPC_STA_abs = $8D OPC_STX_abs = $8E OPC_BCC = $90 OPC_STA_izy = $91 OPC_STY_zpx = $94 OPC_STA_zpx = $95 OPC_STX_zpy = $96 OPC_TYA = $98 OPC_STA_aby = $99 OPC_TXS = $9A OPC_STA_abx = $9D OPC_LDY_imm = $A0 OPC_LDA_izx = $A1 OPC_LDX_imm = $A2 OPC_LDY_zp = $A4 OPC_LDA_zp = $A5 OPC_LDX_zp = $A6 OPC_TAY = $A8 OPC_LDA_imm = $A9 OPC_TAX = $AA OPC_LDY_abs = $AC OPC_LDA_abs = $AD OPC_LDX_abs = $AE OPC_BCS = $B0 OPC_LDA_izy = $B1 OPC_LDY_zpx = $B4 OPC_LDA_zpx = $B5 OPC_LDX_zpy = $B6 OPC_CLV = $B8 OPC_LDA_aby = $B9 OPC_TSX = $BA OPC_LDY_abx = $BC OPC_LDA_abx = $BD OPC_LDX_aby = $BE OPC_CPY_imm = $C0 OPC_CMP_izx = $C1 OPC_CPY_zp = $C4 OPC_CMP_zp = $C5 OPC_DEC_zp = $C6 OPC_INY = $C8 OPC_CMP_imm = $C9 OPC_DEX = $CA OPC_CPY_abs = $CC OPC_CMP_abs = $CD OPC_DEC_abs = $CE OPC_BNE = $D0 OPC_CMP_izy = $D1 OPC_CMP_zpx = $D5 OPC_DEC_zpx = $D6 OPC_CLD = $D8 OPC_CMP_aby = $D9 OPC_CMP_abx = $DD OPC_DEC_abx = $DE OPC_CPX_imm = $E0 OPC_SBC_izx = $E1 OPC_CPX_zp = $E4 OPC_SBC_zp = $E5 OPC_INC_zp = $E6 OPC_INX = $E8 OPC_SBC_imm = $E9 OPC_NOP = $EA OPC_CPX_abs = $EC OPC_SBC_abs = $ED OPC_INC_abs = $EE OPC_BEQ = $F0 OPC_SBC_izy = $F1 OPC_SBC_zpx = $F5 OPC_INC_zpx = $F6 OPC_SED = $F8 OPC_SBC_aby = $F9 OPC_SBC_abx = $FD OPC_INC_abx = $FE .if (.cpu .bitand ::CPU_ISET_65SC02) ; OPC_NOP = $02 ; doublet ; OPC_NOP = $03 ; doublet OPC_TSB_zp = $04 ; OPC_NOP = $0B ; doublet OPC_TSB_abs = $0C OPC_ORA_izp = $12 ; OPC_NOP = $13 ; doublet OPC_TRB_zp = $14 OPC_INC = $1A ; OPC_NOP = $1B ; doublet OPC_TRB_abs = $1C ; OPC_NOP = $22 ; doublet ; OPC_NOP = $23 ; doublet ; OPC_NOP = $2B ; doublet OPC_AND_izp = $32 ; OPC_NOP = $33 ; doublet OPC_BIT_zpx = $34 OPC_DEC = $3A ; OPC_NOP = $3B ; doublet OPC_BIT_abx = $3C ; OPC_NOP = $42 ; doublet ; OPC_NOP = $43 ; doublet ; OPC_NOP = $44 ; doublet ; OPC_NOP = $4B ; doublet OPC_EOR_izp = $52 ; OPC_NOP = $53 ; doublet ; OPC_NOP = $54 ; doublet ; OPC_NOP = $5A ; doublet ; OPC_NOP = $5B ; doublet ; OPC_NOP = $62 ; doublet ; OPC_NOP = $63 ; doublet OPC_STZ_zp = $64 ; OPC_NOP = $6B ; doublet OPC_ADC_izp = $72 ; OPC_NOP = $73 ; doublet OPC_STZ_zpx = $74 OPC_PLY = $7A ; OPC_NOP = $7B ; doublet OPC_JMP_iax = $7C OPC_BRA = $80 ; OPC_NOP = $82 ; doublet ; OPC_NOP = $83 ; doublet OPC_BIT_imm = $89 ; OPC_NOP = $8B ; doublet OPC_STA_izp = $92 ; OPC_NOP = $93 ; doublet ; OPC_NOP = $9B ; doublet OPC_STZ_abs = $9C OPC_STZ_abx = $9E ; OPC_NOP = $A3 ; doublet ; OPC_NOP = $AB ; doublet OPC_LDA_izp = $B2 ; OPC_NOP = $B3 ; doublet ; OPC_NOP = $BB ; doublet ; OPC_NOP = $C2 ; doublet ; OPC_NOP = $C3 ; doublet ; OPC_NOP = $CB ; doublet OPC_CMP_izp = $D2 ; OPC_NOP = $D3 ; doublet ; OPC_NOP = $D4 ; doublet OPC_PHX = $DA ; OPC_NOP = $DB ; doublet ; OPC_NOP = $DC ; doublet ; OPC_NOP = $E2 ; doublet ; OPC_NOP = $E3 ; doublet ; OPC_NOP = $EB ; doublet OPC_SBC_izp = $F2 ; OPC_NOP = $F3 ; doublet ; OPC_NOP = $F4 ; doublet OPC_PLX = $FA ; OPC_NOP = $FB ; doublet ; OPC_NOP = $FC ; doublet .if (.cpu .bitand ::CPU_ISET_65C02) ; bit instructions for 65C02 OPC_RMB0 = $07 OPC_RMB1 = $17 OPC_RMB2 = $27 OPC_RMB3 = $37 OPC_RMB4 = $47 OPC_RMB5 = $57 OPC_RMB6 = $67 OPC_RMB7 = $77 OPC_SMB0 = $87 OPC_SMB1 = $97 OPC_SMB2 = $A7 OPC_SMB3 = $B7 OPC_SMB4 = $C7 OPC_SMB5 = $D7 OPC_SMB6 = $E7 OPC_SMB7 = $F7 OPC_BBR0 = $0F OPC_BBR1 = $1F OPC_BBR2 = $2F OPC_BBR3 = $3F OPC_BBR4 = $4F OPC_BBR5 = $5F OPC_BBR6 = $6F OPC_BBR7 = $7F OPC_BBS0 = $8F OPC_BBS1 = $9F OPC_BBS2 = $AF OPC_BBS3 = $BF OPC_BBS4 = $CF OPC_BBS5 = $DF OPC_BBS6 = $EF OPC_BBS7 = $FF .else ; no bit instructions for 65SC02 ; OPC_NOP = $07 ; doublet ; OPC_NOP = $17 ; doublet ; OPC_NOP = $27 ; doublet ; OPC_NOP = $37 ; doublet ; OPC_NOP = $47 ; doublet ; OPC_NOP = $57 ; doublet ; OPC_NOP = $67 ; doublet ; OPC_NOP = $77 ; doublet ; OPC_NOP = $87 ; doublet ; OPC_NOP = $97 ; doublet ; OPC_NOP = $A7 ; doublet ; OPC_NOP = $B7 ; doublet ; OPC_NOP = $C7 ; doublet ; OPC_NOP = $D7 ; doublet ; OPC_NOP = $E7 ; doublet ; OPC_NOP = $F7 ; doublet ; OPC_NOP = $0F ; doublet ; OPC_NOP = $1F ; doublet ; OPC_NOP = $2F ; doublet ; OPC_NOP = $3F ; doublet ; OPC_NOP = $4F ; doublet ; OPC_NOP = $5F ; doublet ; OPC_NOP = $6F ; doublet ; OPC_NOP = $7F ; doublet ; OPC_NOP = $8F ; doublet ; OPC_NOP = $9F ; doublet ; OPC_NOP = $AF ; doublet ; OPC_NOP = $BF ; doublet ; OPC_NOP = $CF ; doublet ; OPC_NOP = $DF ; doublet ; OPC_NOP = $EF ; doublet ; OPC_NOP = $FF ; doublet .endif .elseif (.cpu .bitand ::CPU_ISET_6502X) ; stable, undocumented opcodes ; OPC_KIL = $02 ; unstable OPC_SLO_izx = $03 OPC_NOP_zp = $04 OPC_SLO_zp = $07 OPC_ANC_imm = $0B OPC_NOP_abs = $0C OPC_SLO_abs = $0F ; OPC_KIL = $12 ; unstable OPC_SLO_izy = $13 OPC_NOP_zpx = $14 OPC_SLO_zpx = $17 ;OPC_NOP = $1A OPC_SLO_aby = $1B OPC_NOP_abx = $1C OPC_SLO_abx = $1F ; OPC_KIL = $22 ; unstable OPC_RLA_izx = $23 OPC_RLA_zp = $27 OPC_ANC_imm = $2B OPC_RLA_abs = $2F ; OPC_KIL = $32 ; unstable OPC_RLA_izy = $33 OPC_NOP_zpx = $34 OPC_RLA_zpx = $37 ; OPC_NOP = $3A ; doublet OPC_RLA_aby = $3B OPC_NOP_abx = $3C OPC_RLA_abx = $3F ; OPC_KIL = $42 ; unstable OPC_SRE_izx = $43 OPC_NOP_zp = $44 OPC_SRE_zp = $47 OPC_ALR_imm = $4B OPC_SRE_abs = $4F ; OPC_KIL = $52 ; unstable OPC_SRE_izy = $53 OPC_NOP_zpx = $54 OPC_SRE_zpx = $57 ; OPC_NOP = $5A ; doublet OPC_SRE_aby = $5B OPC_NOP_abx = $5C OPC_SRE_abx = $5F ; OPC_KIL = $62 OPC_RRA_izx = $63 OPC_NOP_zp = $64 OPC_RRA_zp = $67 OPC_ARR_imm = $6B OPC_RRA_abs = $6F ; OPC_KIL = $72 OPC_RRA_izy = $73 OPC_NOP_zpx = $74 OPC_RRA_zpx = $77 ; OPC_NOP = $7A ; doublet OPC_RRA_aby = $7B OPC_NOP_abx = $7C OPC_RRA_abx = $7F OPC_NOP_imm = $80 ; OPC_NOP_imm = $82 ; doublet OPC_SAX_izx = $83 OPC_SAX_zp = $87 ; OPC_NOP_imm = $89 ; doublet ; OPC_XAA = $8B ; unstable OPC_SAX_abs = $8F ; OPC_KIL = $92 ; unstable ; OPC_AHX_izy = $93 ; unstable OPC_SAX_zpy = $97 ; OPC_TAS_aby = $9B ; unstable ; OPC_SHY_abx = $9C ; unstable ; OPC_SHX_aby = $9E ; unstable ; OPC_AHX_aby = $9F ; unstable OPC_LAX_izx = $A3 OPC_LAX_zp = $A7 ; OPC_LAX_imm = $AB ; unstable OPC_LAX_abs = $AF ; OPC_KIL = $B2 ; unstable OPC_LAX_izy = $B3 OPC_LAX_zpy = $B7 OPC_LAS_aby = $BB OPC_LAX_aby = $BF ; OPC_NOP_imm = $C2 ; doublet OPC_DCP_izx = $C3 OPC_DCP_zp = $C7 OPC_AXS_imm = $CB OPC_DCP_abs = $CF ; OPC_KIL = $D2 ; unstable OPC_DCP_izy = $D3 OPC_NOP_zpx = $D4 OPC_DCP_zpx = $D7 OPC_NOP_DA = $DA OPC_DCP_aby = $DB OPC_NOP_abx = $DC OPC_DCP_abx = $DF ; OPC_NOP_imm = $E2 ; doublet OPC_ISC_izx = $E3 OPC_ISC_zp = $E7 ; OPC_SBC_imm = $EB ; doublet OPC_ISC_abs = $EF ; OPC_KIL = $F2 ; unstable OPC_ISC_izy = $F3 OPC_NOP_zpx = $F4 OPC_ISC_zpx = $F7 OPC_NOP_FA = $FA OPC_ISC_aby = $FB OPC_NOP_abx = $FC OPC_ISC_abx = $FF .endif