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