]> git.sur5r.net Git - cc65/blob - asminc/opcodes.inc
Fixed _textcolor definition.
[cc65] / asminc / opcodes.inc
1 ; opcodes.inc
2 ; ca65 6502 - opcode definitions, mainly for self modifying code
3 ;
4 ; Christian Krüger, latest change: 18-Sep-2010
5 ;
6 ; This software is provided 'as-is', without any expressed or implied      
7 ; warranty.  In no event will the authors be held liable for any damages   
8 ; arising from the use of this software.                                   
9 ;                                                                          
10 ; Permission is granted to anyone to use this software for any purpose,    
11 ; including commercial applications, and to alter it and redistribute it   
12 ; freely, subject to the following restrictions:                           
13 ;                                                                          
14 ; 1. The origin of this software must not be misrepresented; you must not  
15 ;    claim that you wrote the original software. If you use this software  
16 ;    in a product, an acknowledgment in the product documentation would be 
17 ;    appreciated but is not required.                                      
18 ; 2. Altered source versions must be plainly marked as such, and must not  
19 ;    be misrepresented as being the original software.                     
20 ; 3. This notice may not be removed or altered from any source             
21 ;    distribution.                                                         
22 ;                                                                          
23
24 ; Opcode-Table
25 ; ------------
26 ; Post fix explanation:
27 ; imm = #$00
28 ; zp = $00
29 ; zpx = $00,X
30 ; zpy = $00,Y
31 ; izp = ($00)
32 ; izx = ($00,X)
33 ; izy = ($00),Y
34 ; abs = $0000
35 ; abx = $0000,X
36 ; aby = $0000,Y
37 ; ind = ($0000)
38 ; iax = ($0000,X)
39 ; rel = $0000 (PC-relative) (supressed here)
40
41 .macpack        cpu
42
43 OPC_BRK     = $00
44 OPC_ORA_izx = $01
45 OPC_ORA_zp  = $05
46 OPC_ASL_zp  = $06
47 OPC_PHP     = $08
48 OPC_ORA_imm = $09
49 OPC_ASL     = $0A
50 OPC_ORA_abs = $0D
51 OPC_ASL_abs = $0E
52
53 OPC_BPL     = $10
54 OPC_ORA_izy = $11
55 OPC_ORA_zpx = $15
56 OPC_ASL_zpx = $16
57 OPC_CLC     = $18
58 OPC_ORA_aby = $19
59 OPC_ORA_abx = $1D
60 OPC_ASL_abx = $1E
61
62 OPC_JSR_abs = $20
63 OPC_AND_izx = $21
64 OPC_BIT_zp  = $24
65 OPC_AND_zp  = $25
66 OPC_ROL_zp  = $26
67 OPC_PLP     = $28
68 OPC_AND_imm = $29
69 OPC_ROL     = $2A
70 OPC_BIT_abs = $2C
71 OPC_AND_abs = $2D
72 OPC_ROL_abs = $2E
73
74 OPC_BMI     = $30
75 OPC_AND_izy = $31
76 OPC_AND_zpx = $35
77 OPC_ROL_zpx = $36
78 OPC_SEC     = $38
79 OPC_AND_aby = $39
80 OPC_AND_abx = $3D
81 OPC_ROL_abx = $3E
82
83
84 OPC_RTI     = $40
85 OPC_EOR_izx = $41
86 OPC_EOR_zp  = $45
87 OPC_LSR_zp  = $46
88 OPC_PHA     = $48
89 OPC_EOR_imm = $49
90 OPC_LSR     = $4A
91 OPC_JMP_abs = $4C
92 OPC_EOR_abs = $4D
93 OPC_LSR_abs = $4E
94
95 OPC_BVC     = $50
96 OPC_EOR_izy = $51
97 OPC_EOR_zpx = $55
98 OPC_LSR_zpx = $56
99 OPC_CLI     = $58
100 OPC_EOR_aby = $59
101 OPC_EOR_abx = $5D
102 OPC_LSR_abx = $5E
103
104 OPC_RTS     = $60
105 OPC_ADC_izx = $61
106 OPC_ADC_zp  = $65
107 OPC_ROR_zp  = $66
108 OPC_PLA     = $68
109 OPC_ADC_imm = $69
110 OPC_ROR     = $6A
111 OPC_JMP_ind = $6C
112 OPC_ADC_abs = $6D
113 OPC_ROR_abs = $6E
114
115 OPC_BVS     = $70
116 OPC_ADC_izy = $71
117 OPC_ADC_zpx = $75
118 OPC_ROR_zpx = $76
119 OPC_SEI     = $78
120 OPC_ADC_aby = $79
121 OPC_ADC_abx = $7D
122 OPC_ROR_abx = $7E
123
124 OPC_STA_izx = $81
125 OPC_STY_zp  = $84
126 OPC_STA_zp  = $85
127 OPC_STX_zp  = $86
128 OPC_DEY     = $88
129 OPC_TXA     = $8A
130 OPC_STY_abs = $8C
131 OPC_STA_abs = $8D
132 OPC_STX_abs = $8E
133
134 OPC_BCC     = $90
135 OPC_STA_izy = $91
136 OPC_STY_zpx = $94
137 OPC_STA_zpx = $95
138 OPC_STX_zpy = $96
139 OPC_TYA     = $98
140 OPC_STA_aby = $99
141 OPC_TXS     = $9A
142 OPC_STA_abx = $9D
143
144 OPC_LDY_imm = $A0
145 OPC_LDA_izx = $A1
146 OPC_LDX_imm = $A2
147 OPC_LDY_zp  = $A4
148 OPC_LDA_zp  = $A5
149 OPC_LDX_zp  = $A6
150 OPC_TAY     = $A8
151 OPC_LDA_imm = $A9
152 OPC_TAX     = $AA
153 OPC_LDY_abs = $AC
154 OPC_LDA_abs = $AD
155 OPC_LDX_abs = $AE
156
157 OPC_BCS     = $B0
158 OPC_LDA_izy = $B1
159 OPC_LDY_zpx = $B4
160 OPC_LDA_zpx = $B5
161 OPC_LDX_zpy = $B6
162 OPC_CLV     = $B8
163 OPC_LDA_aby = $B9
164 OPC_TSX     = $BA
165 OPC_LDY_abx = $BC
166 OPC_LDA_abx = $BD
167 OPC_LDX_aby = $BE
168
169 OPC_CPY_imm = $C0
170 OPC_CMP_izx = $C1
171 OPC_CPY_zp  = $C4
172 OPC_CMP_zp  = $C5
173 OPC_DEC_zp  = $C6
174 OPC_INY     = $C8
175 OPC_CMP_imm = $C9
176 OPC_DEX     = $CA
177 OPC_CPY_abs = $CC
178 OPC_CMP_abs = $CD
179 OPC_DEC_abs = $CE
180
181 OPC_BNE     = $D0
182 OPC_CMP_izy = $D1
183 OPC_CMP_zpx = $D5
184 OPC_DEC_zpx = $D6
185 OPC_CLD     = $D8
186 OPC_CMP_aby = $D9
187 OPC_CMP_abx = $DD
188 OPC_DEC_abx = $DE
189
190 OPC_CPX_imm = $E0
191 OPC_SBC_izx = $E1
192 OPC_CPX_zp  = $E4
193 OPC_SBC_zp  = $E5
194 OPC_INC_zp  = $E6
195 OPC_INX     = $E8
196 OPC_SBC_imm = $E9
197 OPC_NOP     = $EA
198 OPC_CPX_abs = $EC
199 OPC_SBC_abs = $ED
200 OPC_INC_abs = $EE
201
202
203 OPC_BEQ     = $F0
204 OPC_SBC_izy = $F1
205 OPC_SBC_zpx = $F5
206 OPC_INC_zpx = $F6
207 OPC_SED     = $F8
208 OPC_SBC_aby = $F9
209 OPC_SBC_abx = $FD
210 OPC_INC_abx = $FE
211
212
213 .if (.cpu .bitand ::CPU_ISET_65SC02)
214
215 ; OPC_NOP   = $02               ; doublet
216 ; OPC_NOP   = $03               ; doublet
217 OPC_TSB_zp  = $04
218 ; OPC_NOP   = $0B               ; doublet
219 OPC_TSB_abs = $0C
220
221 OPC_ORA_izp = $12
222 ; OPC_NOP   = $13               ; doublet
223 OPC_TRB_zp  = $14
224 OPC_INC     = $1A
225 ; OPC_NOP   = $1B               ; doublet
226 OPC_TRB_abs = $1C
227
228 ; OPC_NOP   = $22               ; doublet
229 ; OPC_NOP   = $23               ; doublet
230 ; OPC_NOP   = $2B               ; doublet
231
232 OPC_AND_izp = $32
233 ; OPC_NOP   = $33               ; doublet
234 OPC_BIT_zpx = $34
235 OPC_DEC     = $3A
236 ; OPC_NOP   = $3B               ; doublet
237 OPC_BIT_abx = $3C
238
239 ; OPC_NOP   = $42               ; doublet
240 ; OPC_NOP   = $43               ; doublet
241 ; OPC_NOP   = $44               ; doublet
242 ; OPC_NOP   = $4B               ; doublet
243
244 OPC_EOR_izp = $52
245 ; OPC_NOP   = $53               ; doublet
246 ; OPC_NOP   = $54               ; doublet
247 ; OPC_NOP   = $5A               ; doublet
248 ; OPC_NOP   = $5B               ; doublet
249
250 ; OPC_NOP   = $62               ; doublet
251 ; OPC_NOP   = $63               ; doublet
252 OPC_STZ_zp  = $64
253 ; OPC_NOP   = $6B               ; doublet
254
255 OPC_ADC_izp = $72
256 ; OPC_NOP   = $73               ; doublet
257 OPC_STZ_zpx = $74
258 OPC_PLY     = $7A
259 ; OPC_NOP   = $7B               ; doublet
260 OPC_JMP_iax = $7C
261
262 OPC_BRA     = $80
263 ; OPC_NOP   = $82               ; doublet
264 ; OPC_NOP   = $83               ; doublet
265 OPC_BIT_imm = $89
266 ; OPC_NOP   = $8B               ; doublet
267
268 OPC_STA_izp = $92
269 ; OPC_NOP   = $93               ; doublet
270 ; OPC_NOP   = $9B               ; doublet
271 OPC_STZ_abs = $9C
272 OPC_STZ_abx = $9E
273
274 ; OPC_NOP   = $A3               ; doublet
275 ; OPC_NOP   = $AB               ; doublet
276
277 OPC_LDA_izp = $B2
278 ; OPC_NOP   = $B3               ; doublet
279 ; OPC_NOP   = $BB               ; doublet
280
281 ; OPC_NOP   = $C2               ; doublet
282 ; OPC_NOP   = $C3               ; doublet
283 ; OPC_NOP   = $CB               ; doublet
284
285 OPC_CMP_izp = $D2
286 ; OPC_NOP   = $D3               ; doublet
287 ; OPC_NOP   = $D4               ; doublet
288 OPC_PHX     = $DA
289 ; OPC_NOP   = $DB               ; doublet
290 ; OPC_NOP   = $DC               ; doublet
291
292 ; OPC_NOP   = $E2               ; doublet
293 ; OPC_NOP   = $E3               ; doublet
294 ; OPC_NOP   = $EB               ; doublet
295
296 OPC_SBC_izp = $F2
297 ; OPC_NOP   = $F3               ; doublet
298 ; OPC_NOP   = $F4               ; doublet
299 OPC_PLX     = $FA
300 ; OPC_NOP   = $FB               ; doublet
301 ; OPC_NOP   = $FC               ; doublet
302
303
304 .if (.cpu .bitand ::CPU_ISET_65C02)
305
306 ; bit instructions for 65C02
307
308 OPC_RMB0    = $07
309 OPC_RMB1    = $17
310 OPC_RMB2    = $27
311 OPC_RMB3    = $37
312 OPC_RMB4    = $47
313 OPC_RMB5    = $57
314 OPC_RMB6    = $67
315 OPC_RMB7    = $77
316
317 OPC_SMB0    = $87
318 OPC_SMB1    = $97
319 OPC_SMB2    = $A7
320 OPC_SMB3    = $B7
321 OPC_SMB4    = $C7
322 OPC_SMB5    = $D7
323 OPC_SMB6    = $E7
324 OPC_SMB7    = $F7
325
326 OPC_BBR0    = $0F
327 OPC_BBR1    = $1F
328 OPC_BBR2    = $2F
329 OPC_BBR3    = $3F
330 OPC_BBR4    = $4F
331 OPC_BBR5    = $5F
332 OPC_BBR6    = $6F
333 OPC_BBR7    = $7F
334
335 OPC_BBS0    = $8F
336 OPC_BBS1    = $9F
337 OPC_BBS2    = $AF
338 OPC_BBS3    = $BF
339 OPC_BBS4    = $CF
340 OPC_BBS5    = $DF
341 OPC_BBS6    = $EF
342 OPC_BBS7    = $FF
343
344 .else
345
346 ; no bit instructions for 65SC02
347
348 ; OPC_NOP   = $07               ; doublet
349 ; OPC_NOP   = $17               ; doublet
350 ; OPC_NOP   = $27               ; doublet
351 ; OPC_NOP   = $37               ; doublet
352 ; OPC_NOP   = $47               ; doublet
353 ; OPC_NOP   = $57               ; doublet
354 ; OPC_NOP   = $67               ; doublet
355 ; OPC_NOP   = $77               ; doublet
356 ; OPC_NOP   = $87               ; doublet
357 ; OPC_NOP   = $97               ; doublet
358 ; OPC_NOP   = $A7               ; doublet
359 ; OPC_NOP   = $B7               ; doublet
360 ; OPC_NOP   = $C7               ; doublet
361 ; OPC_NOP   = $D7               ; doublet
362 ; OPC_NOP   = $E7               ; doublet
363 ; OPC_NOP   = $F7               ; doublet
364 ; OPC_NOP   = $0F               ; doublet
365 ; OPC_NOP   = $1F               ; doublet
366 ; OPC_NOP   = $2F               ; doublet
367 ; OPC_NOP   = $3F               ; doublet
368 ; OPC_NOP   = $4F               ; doublet
369 ; OPC_NOP   = $5F               ; doublet
370 ; OPC_NOP   = $6F               ; doublet
371 ; OPC_NOP   = $7F               ; doublet
372 ; OPC_NOP   = $8F               ; doublet
373 ; OPC_NOP   = $9F               ; doublet
374 ; OPC_NOP   = $AF               ; doublet
375 ; OPC_NOP   = $BF               ; doublet
376 ; OPC_NOP   = $CF               ; doublet
377 ; OPC_NOP   = $DF               ; doublet
378 ; OPC_NOP   = $EF               ; doublet
379 ; OPC_NOP   = $FF               ; doublet
380
381 .endif
382
383 .elseif (.cpu .bitand ::CPU_ISET_6502X)
384
385 ; stable, undocumented opcodes
386
387 ; OPC_KIL   = $02               ; unstable
388 OPC_SLO_izx = $03
389 OPC_NOP_zp  = $04
390 OPC_SLO_zp  = $07
391 OPC_ANC_imm = $0B
392 OPC_NOP_abs = $0C
393 OPC_SLO_abs = $0F
394
395 ; OPC_KIL   = $12               ; unstable
396 OPC_SLO_izy = $13
397 OPC_NOP_zpx = $14
398 OPC_SLO_zpx = $17
399 ;OPC_NOP    = $1A
400 OPC_SLO_aby = $1B
401 OPC_NOP_abx = $1C
402 OPC_SLO_abx = $1F
403
404 ; OPC_KIL   = $22               ; unstable
405 OPC_RLA_izx = $23
406 OPC_RLA_zp  = $27
407 OPC_ANC_imm = $2B
408 OPC_RLA_abs = $2F
409
410 ; OPC_KIL   = $32               ; unstable
411 OPC_RLA_izy = $33
412 OPC_NOP_zpx = $34
413 OPC_RLA_zpx = $37
414 ; OPC_NOP   = $3A               ; doublet
415 OPC_RLA_aby = $3B
416 OPC_NOP_abx = $3C
417 OPC_RLA_abx = $3F
418
419 ; OPC_KIL   = $42               ; unstable
420 OPC_SRE_izx = $43
421 OPC_NOP_zp  = $44
422 OPC_SRE_zp  = $47
423 OPC_ALR_imm = $4B
424 OPC_SRE_abs = $4F
425
426 ; OPC_KIL   = $52               ; unstable
427 OPC_SRE_izy = $53
428 OPC_NOP_zpx = $54
429 OPC_SRE_zpx = $57
430 ; OPC_NOP   = $5A               ; doublet
431 OPC_SRE_aby = $5B
432 OPC_NOP_abx = $5C
433 OPC_SRE_abx = $5F
434
435 ; OPC_KIL   = $62
436 OPC_RRA_izx = $63
437 OPC_NOP_zp  = $64
438 OPC_RRA_zp  = $67
439 OPC_ARR_imm = $6B
440 OPC_RRA_abs = $6F
441
442 ; OPC_KIL   = $72
443 OPC_RRA_izy = $73
444 OPC_NOP_zpx = $74
445 OPC_RRA_zpx = $77
446 ; OPC_NOP   = $7A               ; doublet
447 OPC_RRA_aby = $7B
448 OPC_NOP_abx = $7C
449 OPC_RRA_abx = $7F
450
451 OPC_NOP_imm = $80
452 ; OPC_NOP_imm = $82             ; doublet
453 OPC_SAX_izx = $83
454 OPC_SAX_zp  = $87
455 ; OPC_NOP_imm = $89             ; doublet
456 ; OPC_XAA = $8B                 ; unstable
457 OPC_SAX_abs = $8F
458
459 ; OPC_KIL   = $92               ; unstable
460 ; OPC_AHX_izy = $93             ; unstable
461 OPC_SAX_zpy = $97
462 ; OPC_TAS_aby = $9B             ; unstable
463 ; OPC_SHY_abx = $9C             ; unstable
464 ; OPC_SHX_aby = $9E             ; unstable
465 ; OPC_AHX_aby = $9F             ; unstable
466
467 OPC_LAX_izx = $A3
468 OPC_LAX_zp  = $A7
469 ; OPC_LAX_imm = $AB             ; unstable
470 OPC_LAX_abs = $AF
471
472 ; OPC_KIL   = $B2               ; unstable
473 OPC_LAX_izy = $B3
474 OPC_LAX_zpy = $B7
475 OPC_LAS_aby = $BB
476 OPC_LAX_aby = $BF
477
478 ; OPC_NOP_imm = $C2             ; doublet
479 OPC_DCP_izx = $C3
480 OPC_DCP_zp  = $C7
481 OPC_AXS_imm = $CB
482 OPC_DCP_abs = $CF
483
484 ; OPC_KIL   = $D2               ; unstable
485 OPC_DCP_izy = $D3
486 OPC_NOP_zpx = $D4
487 OPC_DCP_zpx = $D7
488 OPC_NOP_DA  = $DA
489 OPC_DCP_aby = $DB
490 OPC_NOP_abx = $DC
491 OPC_DCP_abx = $DF
492
493 ; OPC_NOP_imm = $E2             ; doublet
494 OPC_ISC_izx = $E3
495 OPC_ISC_zp  = $E7
496 ; OPC_SBC_imm = $EB             ; doublet
497 OPC_ISC_abs = $EF
498
499 ; OPC_KIL   = $F2               ; unstable
500 OPC_ISC_izy = $F3
501 OPC_NOP_zpx = $F4
502 OPC_ISC_zpx = $F7
503 OPC_NOP_FA  = $FA
504 OPC_ISC_aby = $FB
505 OPC_NOP_abx = $FC
506 OPC_ISC_abx = $FF
507
508 .endif