c64_assembler_6502/
instruction.rs

1use crate::opcodes::OpCode;
2
3/// Instruction definition.
4///
5/// Contains the instruction (as str) and the op-codes per addressing mode.
6#[derive(Debug)]
7pub struct InstructionDef {
8    /// Instruction as lowercase str (lda, sta, ...)
9    pub instruction: &'static str,
10    /// OpCode for implied addressing mode.
11    ///
12    /// Contains [crate::opcodes::NO_IMPLIED] when no op-code exist.
13    pub implied: OpCode,
14    /// OpCode for immediate addressing mode.
15    ///
16    /// Contains [crate::opcodes::NO_IMMEDIATE] when no op-code exists.
17    pub immediate: OpCode,
18    /// OpCode for accumualtor addressing mode.
19    ///
20    /// Contains [crate::opcodes::NO_ACCUMULATOR] when no op-code exists.
21    pub accumulator: OpCode,
22    /// OpCode for absolute addressing mode.
23    ///
24    /// Contains [crate::opcodes::NO_ABSOLUTE] when no op-code exists.
25    pub absolute: OpCode,
26    /// OpCode for absolute-x addressing mode.
27    ///
28    /// Contains [crate::opcodes::NO_ABSOLUTE_X] when no op-code exists.
29    pub absolute_x: OpCode,
30    /// OpCode for absolute-y addressing mode.
31    ///
32    /// Contains [crate::opcodes::NO_ABSOLUTE_Y] when no op-code exists.
33    pub absolute_y: OpCode,
34    /// OpCode for zeropage addressing mode.
35    ///
36    /// Contains [crate::opcodes::NO_ZEROPAGE] when no op-code exists.
37    pub zeropage: OpCode,
38    /// OpCode for zeropage-x addressing mode.
39    ///
40    /// Contains [crate::opcodes::NO_ZEROPAGE_X] when no op-code exists.
41    pub zeropage_x: OpCode,
42    /// OpCode for zeropage-y addressing mode.
43    ///
44    /// Contains [crate::opcodes::NO_ZEROPAGE_Y] when no op-code exists.
45    pub zeropage_y: OpCode,
46    /// OpCode for relative addressing mode.
47    ///
48    /// Contains [crate::opcodes::NO_RELATIVE] when no op-code exists.
49    pub relative: OpCode,
50    /// OpCode for indirect addressing mode.
51    ///
52    /// Contains [crate::opcodes::NO_INDIRECT] when no op-code exists.
53    pub indirect: OpCode,
54    /// OpCode for indexed indirect addressing mode.
55    ///
56    /// Contains [crate::opcodes::NO_INDEXED_INDIRECT] when no op-code exists.
57    pub indexed_indirect: OpCode,
58    /// OpCode for indirect indexed addressing mode.
59    ///
60    /// Contains [crate::opcodes::NO_INDIRECT_INDEXED] when no op-code exists.
61    pub indirect_indexed: OpCode,
62}
63
64pub use gen::*;
65
66mod gen {
67    use crate::opcodes::*;
68
69    use super::InstructionDef;
70
71    /// Instruction definition for adc
72    ///
73    /// Includes the instruction name and its [OpCode] for a address mode.
74    pub const OPCODES_ADC: InstructionDef = InstructionDef {
75        instruction: "adc",
76        implied: NO_IMPLIED,
77        immediate: ADC_IMMEDIATE,
78        accumulator: NO_ACCUMULATOR,
79        absolute: ADC_ABSOLUTE,
80        absolute_x: ADC_ABSOLUTE_X,
81        absolute_y: ADC_ABSOLUTE_Y,
82        zeropage: ADC_ZEROPAGE,
83        zeropage_x: ADC_ZEROPAGE_X,
84        zeropage_y: NO_ZEROPAGE_Y,
85        relative: NO_RELATIVE,
86        indirect: NO_INDIRECT,
87        indexed_indirect: ADC_INDEXED_INDIRECT,
88        indirect_indexed: ADC_INDIRECT_INDEXED,
89    };
90
91    /// Instruction definition for and
92    ///
93    /// Includes the instruction name and its [OpCode] for a address mode.
94    pub const OPCODES_AND: InstructionDef = InstructionDef {
95        instruction: "and",
96        implied: NO_IMPLIED,
97        immediate: AND_IMMEDIATE,
98        accumulator: NO_ACCUMULATOR,
99        absolute: AND_ABSOLUTE,
100        absolute_x: AND_ABSOLUTE_X,
101        absolute_y: AND_ABSOLUTE_Y,
102        zeropage: AND_ZEROPAGE,
103        zeropage_x: AND_ZEROPAGE_X,
104        zeropage_y: NO_ZEROPAGE_Y,
105        relative: NO_RELATIVE,
106        indirect: NO_INDIRECT,
107        indexed_indirect: AND_INDEXED_INDIRECT,
108        indirect_indexed: AND_INDIRECT_INDEXED,
109    };
110
111    /// Instruction definition for asl
112    ///
113    /// Includes the instruction name and its [OpCode] for a address mode.
114    pub const OPCODES_ASL: InstructionDef = InstructionDef {
115        instruction: "asl",
116        implied: NO_IMPLIED,
117        immediate: NO_IMMEDIATE,
118        accumulator: ASL_ACCUMULATOR,
119        absolute: ASL_ABSOLUTE,
120        absolute_x: ASL_ABSOLUTE_X,
121        absolute_y: NO_ABSOLUTE_Y,
122        zeropage: ASL_ZEROPAGE,
123        zeropage_x: ASL_ZEROPAGE_X,
124        zeropage_y: NO_ZEROPAGE_Y,
125        relative: NO_RELATIVE,
126        indirect: NO_INDIRECT,
127        indexed_indirect: NO_INDEXED_INDIRECT,
128        indirect_indexed: NO_INDIRECT_INDEXED,
129    };
130
131    /// Instruction definition for bcc
132    ///
133    /// Includes the instruction name and its [OpCode] for a address mode.
134    pub const OPCODES_BCC: InstructionDef = InstructionDef {
135        instruction: "bcc",
136        implied: NO_IMPLIED,
137        immediate: NO_IMMEDIATE,
138        accumulator: NO_ACCUMULATOR,
139        absolute: NO_ABSOLUTE,
140        absolute_x: NO_ABSOLUTE_X,
141        absolute_y: NO_ABSOLUTE_Y,
142        zeropage: NO_ZEROPAGE,
143        zeropage_x: NO_ZEROPAGE_X,
144        zeropage_y: NO_ZEROPAGE_Y,
145        relative: BCC_RELATIVE,
146        indirect: NO_INDIRECT,
147        indexed_indirect: NO_INDEXED_INDIRECT,
148        indirect_indexed: NO_INDIRECT_INDEXED,
149    };
150
151    /// Instruction definition for bcs
152    ///
153    /// Includes the instruction name and its [OpCode] for a address mode.
154    pub const OPCODES_BCS: InstructionDef = InstructionDef {
155        instruction: "bcs",
156        implied: NO_IMPLIED,
157        immediate: NO_IMMEDIATE,
158        accumulator: NO_ACCUMULATOR,
159        absolute: NO_ABSOLUTE,
160        absolute_x: NO_ABSOLUTE_X,
161        absolute_y: NO_ABSOLUTE_Y,
162        zeropage: NO_ZEROPAGE,
163        zeropage_x: NO_ZEROPAGE_X,
164        zeropage_y: NO_ZEROPAGE_Y,
165        relative: BCS_RELATIVE,
166        indirect: NO_INDIRECT,
167        indexed_indirect: NO_INDEXED_INDIRECT,
168        indirect_indexed: NO_INDIRECT_INDEXED,
169    };
170
171    /// Instruction definition for beq
172    ///
173    /// Includes the instruction name and its [OpCode] for a address mode.
174    pub const OPCODES_BEQ: InstructionDef = InstructionDef {
175        instruction: "beq",
176        implied: NO_IMPLIED,
177        immediate: NO_IMMEDIATE,
178        accumulator: NO_ACCUMULATOR,
179        absolute: NO_ABSOLUTE,
180        absolute_x: NO_ABSOLUTE_X,
181        absolute_y: NO_ABSOLUTE_Y,
182        zeropage: NO_ZEROPAGE,
183        zeropage_x: NO_ZEROPAGE_X,
184        zeropage_y: NO_ZEROPAGE_Y,
185        relative: BEQ_RELATIVE,
186        indirect: NO_INDIRECT,
187        indexed_indirect: NO_INDEXED_INDIRECT,
188        indirect_indexed: NO_INDIRECT_INDEXED,
189    };
190
191    /// Instruction definition for bit
192    ///
193    /// Includes the instruction name and its [OpCode] for a address mode.
194    pub const OPCODES_BIT: InstructionDef = InstructionDef {
195        instruction: "bit",
196        implied: NO_IMPLIED,
197        immediate: NO_IMMEDIATE,
198        accumulator: NO_ACCUMULATOR,
199        absolute: BIT_ABSOLUTE,
200        absolute_x: NO_ABSOLUTE_X,
201        absolute_y: NO_ABSOLUTE_Y,
202        zeropage: BIT_ZEROPAGE,
203        zeropage_x: NO_ZEROPAGE_X,
204        zeropage_y: NO_ZEROPAGE_Y,
205        relative: NO_RELATIVE,
206        indirect: NO_INDIRECT,
207        indexed_indirect: NO_INDEXED_INDIRECT,
208        indirect_indexed: NO_INDIRECT_INDEXED,
209    };
210
211    /// Instruction definition for bmi
212    ///
213    /// Includes the instruction name and its [OpCode] for a address mode.
214    pub const OPCODES_BMI: InstructionDef = InstructionDef {
215        instruction: "bmi",
216        implied: NO_IMPLIED,
217        immediate: NO_IMMEDIATE,
218        accumulator: NO_ACCUMULATOR,
219        absolute: NO_ABSOLUTE,
220        absolute_x: NO_ABSOLUTE_X,
221        absolute_y: NO_ABSOLUTE_Y,
222        zeropage: NO_ZEROPAGE,
223        zeropage_x: NO_ZEROPAGE_X,
224        zeropage_y: NO_ZEROPAGE_Y,
225        relative: BMI_RELATIVE,
226        indirect: NO_INDIRECT,
227        indexed_indirect: NO_INDEXED_INDIRECT,
228        indirect_indexed: NO_INDIRECT_INDEXED,
229    };
230
231    /// Instruction definition for bne
232    ///
233    /// Includes the instruction name and its [OpCode] for a address mode.
234    pub const OPCODES_BNE: InstructionDef = InstructionDef {
235        instruction: "bne",
236        implied: NO_IMPLIED,
237        immediate: NO_IMMEDIATE,
238        accumulator: NO_ACCUMULATOR,
239        absolute: NO_ABSOLUTE,
240        absolute_x: NO_ABSOLUTE_X,
241        absolute_y: NO_ABSOLUTE_Y,
242        zeropage: NO_ZEROPAGE,
243        zeropage_x: NO_ZEROPAGE_X,
244        zeropage_y: NO_ZEROPAGE_Y,
245        relative: BNE_RELATIVE,
246        indirect: NO_INDIRECT,
247        indexed_indirect: NO_INDEXED_INDIRECT,
248        indirect_indexed: NO_INDIRECT_INDEXED,
249    };
250
251    /// Instruction definition for bpl
252    ///
253    /// Includes the instruction name and its [OpCode] for a address mode.
254    pub const OPCODES_BPL: InstructionDef = InstructionDef {
255        instruction: "bpl",
256        implied: NO_IMPLIED,
257        immediate: NO_IMMEDIATE,
258        accumulator: NO_ACCUMULATOR,
259        absolute: NO_ABSOLUTE,
260        absolute_x: NO_ABSOLUTE_X,
261        absolute_y: NO_ABSOLUTE_Y,
262        zeropage: NO_ZEROPAGE,
263        zeropage_x: NO_ZEROPAGE_X,
264        zeropage_y: NO_ZEROPAGE_Y,
265        relative: BPL_RELATIVE,
266        indirect: NO_INDIRECT,
267        indexed_indirect: NO_INDEXED_INDIRECT,
268        indirect_indexed: NO_INDIRECT_INDEXED,
269    };
270
271    /// Instruction definition for brk
272    ///
273    /// Includes the instruction name and its [OpCode] for a address mode.
274    pub const OPCODES_BRK: InstructionDef = InstructionDef {
275        instruction: "brk",
276        implied: BRK_IMPLIED,
277        immediate: NO_IMMEDIATE,
278        accumulator: NO_ACCUMULATOR,
279        absolute: NO_ABSOLUTE,
280        absolute_x: NO_ABSOLUTE_X,
281        absolute_y: NO_ABSOLUTE_Y,
282        zeropage: NO_ZEROPAGE,
283        zeropage_x: NO_ZEROPAGE_X,
284        zeropage_y: NO_ZEROPAGE_Y,
285        relative: NO_RELATIVE,
286        indirect: NO_INDIRECT,
287        indexed_indirect: NO_INDEXED_INDIRECT,
288        indirect_indexed: NO_INDIRECT_INDEXED,
289    };
290
291    /// Instruction definition for bvc
292    ///
293    /// Includes the instruction name and its [OpCode] for a address mode.
294    pub const OPCODES_BVC: InstructionDef = InstructionDef {
295        instruction: "bvc",
296        implied: NO_IMPLIED,
297        immediate: NO_IMMEDIATE,
298        accumulator: NO_ACCUMULATOR,
299        absolute: NO_ABSOLUTE,
300        absolute_x: NO_ABSOLUTE_X,
301        absolute_y: NO_ABSOLUTE_Y,
302        zeropage: NO_ZEROPAGE,
303        zeropage_x: NO_ZEROPAGE_X,
304        zeropage_y: NO_ZEROPAGE_Y,
305        relative: BVC_RELATIVE,
306        indirect: NO_INDIRECT,
307        indexed_indirect: NO_INDEXED_INDIRECT,
308        indirect_indexed: NO_INDIRECT_INDEXED,
309    };
310
311    /// Instruction definition for bvs
312    ///
313    /// Includes the instruction name and its [OpCode] for a address mode.
314    pub const OPCODES_BVS: InstructionDef = InstructionDef {
315        instruction: "bvs",
316        implied: NO_IMPLIED,
317        immediate: NO_IMMEDIATE,
318        accumulator: NO_ACCUMULATOR,
319        absolute: NO_ABSOLUTE,
320        absolute_x: NO_ABSOLUTE_X,
321        absolute_y: NO_ABSOLUTE_Y,
322        zeropage: NO_ZEROPAGE,
323        zeropage_x: NO_ZEROPAGE_X,
324        zeropage_y: NO_ZEROPAGE_Y,
325        relative: BVS_RELATIVE,
326        indirect: NO_INDIRECT,
327        indexed_indirect: NO_INDEXED_INDIRECT,
328        indirect_indexed: NO_INDIRECT_INDEXED,
329    };
330
331    /// Instruction definition for cld
332    ///
333    /// Includes the instruction name and its [OpCode] for a address mode.
334    pub const OPCODES_CLD: InstructionDef = InstructionDef {
335        instruction: "cld",
336        implied: CLD_IMPLIED,
337        immediate: NO_IMMEDIATE,
338        accumulator: NO_ACCUMULATOR,
339        absolute: NO_ABSOLUTE,
340        absolute_x: NO_ABSOLUTE_X,
341        absolute_y: NO_ABSOLUTE_Y,
342        zeropage: NO_ZEROPAGE,
343        zeropage_x: NO_ZEROPAGE_X,
344        zeropage_y: NO_ZEROPAGE_Y,
345        relative: NO_RELATIVE,
346        indirect: NO_INDIRECT,
347        indexed_indirect: NO_INDEXED_INDIRECT,
348        indirect_indexed: NO_INDIRECT_INDEXED,
349    };
350
351    /// Instruction definition for cli
352    ///
353    /// Includes the instruction name and its [OpCode] for a address mode.
354    pub const OPCODES_CLI: InstructionDef = InstructionDef {
355        instruction: "cli",
356        implied: CLI_IMPLIED,
357        immediate: NO_IMMEDIATE,
358        accumulator: NO_ACCUMULATOR,
359        absolute: NO_ABSOLUTE,
360        absolute_x: NO_ABSOLUTE_X,
361        absolute_y: NO_ABSOLUTE_Y,
362        zeropage: NO_ZEROPAGE,
363        zeropage_x: NO_ZEROPAGE_X,
364        zeropage_y: NO_ZEROPAGE_Y,
365        relative: NO_RELATIVE,
366        indirect: NO_INDIRECT,
367        indexed_indirect: NO_INDEXED_INDIRECT,
368        indirect_indexed: NO_INDIRECT_INDEXED,
369    };
370
371    /// Instruction definition for clv
372    ///
373    /// Includes the instruction name and its [OpCode] for a address mode.
374    pub const OPCODES_CLV: InstructionDef = InstructionDef {
375        instruction: "clv",
376        implied: CLV_IMPLIED,
377        immediate: NO_IMMEDIATE,
378        accumulator: NO_ACCUMULATOR,
379        absolute: NO_ABSOLUTE,
380        absolute_x: NO_ABSOLUTE_X,
381        absolute_y: NO_ABSOLUTE_Y,
382        zeropage: NO_ZEROPAGE,
383        zeropage_x: NO_ZEROPAGE_X,
384        zeropage_y: NO_ZEROPAGE_Y,
385        relative: NO_RELATIVE,
386        indirect: NO_INDIRECT,
387        indexed_indirect: NO_INDEXED_INDIRECT,
388        indirect_indexed: NO_INDIRECT_INDEXED,
389    };
390
391    /// Instruction definition for cmp
392    ///
393    /// Includes the instruction name and its [OpCode] for a address mode.
394    pub const OPCODES_CMP: InstructionDef = InstructionDef {
395        instruction: "cmp",
396        implied: NO_IMPLIED,
397        immediate: CMP_IMMEDIATE,
398        accumulator: NO_ACCUMULATOR,
399        absolute: CMP_ABSOLUTE,
400        absolute_x: CMP_ABSOLUTE_X,
401        absolute_y: CMP_ABSOLUTE_Y,
402        zeropage: CMP_ZEROPAGE,
403        zeropage_x: CMP_ZEROPAGE_X,
404        zeropage_y: NO_ZEROPAGE_Y,
405        relative: NO_RELATIVE,
406        indirect: NO_INDIRECT,
407        indexed_indirect: CMP_INDEXED_INDIRECT,
408        indirect_indexed: CMP_INDIRECT_INDEXED,
409    };
410
411    /// Instruction definition for cpx
412    ///
413    /// Includes the instruction name and its [OpCode] for a address mode.
414    pub const OPCODES_CPX: InstructionDef = InstructionDef {
415        instruction: "cpx",
416        implied: NO_IMPLIED,
417        immediate: CPX_IMMEDIATE,
418        accumulator: NO_ACCUMULATOR,
419        absolute: CPX_ABSOLUTE,
420        absolute_x: NO_ABSOLUTE_X,
421        absolute_y: NO_ABSOLUTE_Y,
422        zeropage: CPX_ZEROPAGE,
423        zeropage_x: NO_ZEROPAGE_X,
424        zeropage_y: NO_ZEROPAGE_Y,
425        relative: NO_RELATIVE,
426        indirect: NO_INDIRECT,
427        indexed_indirect: NO_INDEXED_INDIRECT,
428        indirect_indexed: NO_INDIRECT_INDEXED,
429    };
430
431    /// Instruction definition for cpy
432    ///
433    /// Includes the instruction name and its [OpCode] for a address mode.
434    pub const OPCODES_CPY: InstructionDef = InstructionDef {
435        instruction: "cpy",
436        implied: NO_IMPLIED,
437        immediate: CPY_IMMEDIATE,
438        accumulator: NO_ACCUMULATOR,
439        absolute: CPY_ABSOLUTE,
440        absolute_x: NO_ABSOLUTE_X,
441        absolute_y: NO_ABSOLUTE_Y,
442        zeropage: CPY_ZEROPAGE,
443        zeropage_x: NO_ZEROPAGE_X,
444        zeropage_y: NO_ZEROPAGE_Y,
445        relative: NO_RELATIVE,
446        indirect: NO_INDIRECT,
447        indexed_indirect: NO_INDEXED_INDIRECT,
448        indirect_indexed: NO_INDIRECT_INDEXED,
449    };
450
451    /// Instruction definition for dec
452    ///
453    /// Includes the instruction name and its [OpCode] for a address mode.
454    pub const OPCODES_DEC: InstructionDef = InstructionDef {
455        instruction: "dec",
456        implied: NO_IMPLIED,
457        immediate: NO_IMMEDIATE,
458        accumulator: NO_ACCUMULATOR,
459        absolute: DEC_ABSOLUTE,
460        absolute_x: DEC_ABSOLUTE_X,
461        absolute_y: NO_ABSOLUTE_Y,
462        zeropage: DEC_ZEROPAGE,
463        zeropage_x: DEC_ZEROPAGE_X,
464        zeropage_y: NO_ZEROPAGE_Y,
465        relative: NO_RELATIVE,
466        indirect: NO_INDIRECT,
467        indexed_indirect: NO_INDEXED_INDIRECT,
468        indirect_indexed: NO_INDIRECT_INDEXED,
469    };
470
471    /// Instruction definition for dex
472    ///
473    /// Includes the instruction name and its [OpCode] for a address mode.
474    pub const OPCODES_DEX: InstructionDef = InstructionDef {
475        instruction: "dex",
476        implied: DEX_IMPLIED,
477        immediate: NO_IMMEDIATE,
478        accumulator: NO_ACCUMULATOR,
479        absolute: NO_ABSOLUTE,
480        absolute_x: NO_ABSOLUTE_X,
481        absolute_y: NO_ABSOLUTE_Y,
482        zeropage: NO_ZEROPAGE,
483        zeropage_x: NO_ZEROPAGE_X,
484        zeropage_y: NO_ZEROPAGE_Y,
485        relative: NO_RELATIVE,
486        indirect: NO_INDIRECT,
487        indexed_indirect: NO_INDEXED_INDIRECT,
488        indirect_indexed: NO_INDIRECT_INDEXED,
489    };
490
491    /// Instruction definition for dey
492    ///
493    /// Includes the instruction name and its [OpCode] for a address mode.
494    pub const OPCODES_DEY: InstructionDef = InstructionDef {
495        instruction: "dey",
496        implied: DEY_IMPLIED,
497        immediate: NO_IMMEDIATE,
498        accumulator: NO_ACCUMULATOR,
499        absolute: NO_ABSOLUTE,
500        absolute_x: NO_ABSOLUTE_X,
501        absolute_y: NO_ABSOLUTE_Y,
502        zeropage: NO_ZEROPAGE,
503        zeropage_x: NO_ZEROPAGE_X,
504        zeropage_y: NO_ZEROPAGE_Y,
505        relative: NO_RELATIVE,
506        indirect: NO_INDIRECT,
507        indexed_indirect: NO_INDEXED_INDIRECT,
508        indirect_indexed: NO_INDIRECT_INDEXED,
509    };
510
511    /// Instruction definition for eor
512    ///
513    /// Includes the instruction name and its [OpCode] for a address mode.
514    pub const OPCODES_EOR: InstructionDef = InstructionDef {
515        instruction: "eor",
516        implied: NO_IMPLIED,
517        immediate: EOR_IMMEDIATE,
518        accumulator: NO_ACCUMULATOR,
519        absolute: EOR_ABSOLUTE,
520        absolute_x: EOR_ABSOLUTE_X,
521        absolute_y: EOR_ABSOLUTE_Y,
522        zeropage: EOR_ZEROPAGE,
523        zeropage_x: EOR_ZEROPAGE_X,
524        zeropage_y: NO_ZEROPAGE_Y,
525        relative: NO_RELATIVE,
526        indirect: NO_INDIRECT,
527        indexed_indirect: EOR_INDEXED_INDIRECT,
528        indirect_indexed: EOR_INDIRECT_INDEXED,
529    };
530
531    /// Instruction definition for inc
532    ///
533    /// Includes the instruction name and its [OpCode] for a address mode.
534    pub const OPCODES_INC: InstructionDef = InstructionDef {
535        instruction: "inc",
536        implied: NO_IMPLIED,
537        immediate: NO_IMMEDIATE,
538        accumulator: NO_ACCUMULATOR,
539        absolute: INC_ABSOLUTE,
540        absolute_x: INC_ABSOLUTE_X,
541        absolute_y: NO_ABSOLUTE_Y,
542        zeropage: INC_ZEROPAGE,
543        zeropage_x: INC_ZEROPAGE_X,
544        zeropage_y: NO_ZEROPAGE_Y,
545        relative: NO_RELATIVE,
546        indirect: NO_INDIRECT,
547        indexed_indirect: NO_INDEXED_INDIRECT,
548        indirect_indexed: NO_INDIRECT_INDEXED,
549    };
550
551    /// Instruction definition for inx
552    ///
553    /// Includes the instruction name and its [OpCode] for a address mode.
554    pub const OPCODES_INX: InstructionDef = InstructionDef {
555        instruction: "inx",
556        implied: INX_IMPLIED,
557        immediate: NO_IMMEDIATE,
558        accumulator: NO_ACCUMULATOR,
559        absolute: NO_ABSOLUTE,
560        absolute_x: NO_ABSOLUTE_X,
561        absolute_y: NO_ABSOLUTE_Y,
562        zeropage: NO_ZEROPAGE,
563        zeropage_x: NO_ZEROPAGE_X,
564        zeropage_y: NO_ZEROPAGE_Y,
565        relative: NO_RELATIVE,
566        indirect: NO_INDIRECT,
567        indexed_indirect: NO_INDEXED_INDIRECT,
568        indirect_indexed: NO_INDIRECT_INDEXED,
569    };
570
571    /// Instruction definition for iny
572    ///
573    /// Includes the instruction name and its [OpCode] for a address mode.
574    pub const OPCODES_INY: InstructionDef = InstructionDef {
575        instruction: "iny",
576        implied: INY_IMPLIED,
577        immediate: NO_IMMEDIATE,
578        accumulator: NO_ACCUMULATOR,
579        absolute: NO_ABSOLUTE,
580        absolute_x: NO_ABSOLUTE_X,
581        absolute_y: NO_ABSOLUTE_Y,
582        zeropage: NO_ZEROPAGE,
583        zeropage_x: NO_ZEROPAGE_X,
584        zeropage_y: NO_ZEROPAGE_Y,
585        relative: NO_RELATIVE,
586        indirect: NO_INDIRECT,
587        indexed_indirect: NO_INDEXED_INDIRECT,
588        indirect_indexed: NO_INDIRECT_INDEXED,
589    };
590
591    /// Instruction definition for ldx
592    ///
593    /// Includes the instruction name and its [OpCode] for a address mode.
594    pub const OPCODES_LDX: InstructionDef = InstructionDef {
595        instruction: "ldx",
596        implied: NO_IMPLIED,
597        immediate: LDX_IMMEDIATE,
598        accumulator: NO_ACCUMULATOR,
599        absolute: LDX_ABSOLUTE,
600        absolute_x: NO_ABSOLUTE_X,
601        absolute_y: LDX_ABSOLUTE_Y,
602        zeropage: LDX_ZEROPAGE,
603        zeropage_x: NO_ZEROPAGE_X,
604        zeropage_y: LDX_ZEROPAGE_Y,
605        relative: NO_RELATIVE,
606        indirect: NO_INDIRECT,
607        indexed_indirect: NO_INDEXED_INDIRECT,
608        indirect_indexed: NO_INDIRECT_INDEXED,
609    };
610
611    /// Instruction definition for lsr
612    ///
613    /// Includes the instruction name and its [OpCode] for a address mode.
614    pub const OPCODES_LSR: InstructionDef = InstructionDef {
615        instruction: "lsr",
616        implied: NO_IMPLIED,
617        immediate: NO_IMMEDIATE,
618        accumulator: LSR_ACCUMULATOR,
619        absolute: LSR_ABSOLUTE,
620        absolute_x: LSR_ABSOLUTE_X,
621        absolute_y: NO_ABSOLUTE_Y,
622        zeropage: LSR_ZEROPAGE,
623        zeropage_x: LSR_ZEROPAGE_X,
624        zeropage_y: NO_ZEROPAGE_Y,
625        relative: NO_RELATIVE,
626        indirect: NO_INDIRECT,
627        indexed_indirect: NO_INDEXED_INDIRECT,
628        indirect_indexed: NO_INDIRECT_INDEXED,
629    };
630
631    /// Instruction definition for nop
632    ///
633    /// Includes the instruction name and its [OpCode] for a address mode.
634    pub const OPCODES_NOP: InstructionDef = InstructionDef {
635        instruction: "nop",
636        implied: NOP_IMPLIED,
637        immediate: NO_IMMEDIATE,
638        accumulator: NO_ACCUMULATOR,
639        absolute: NO_ABSOLUTE,
640        absolute_x: NO_ABSOLUTE_X,
641        absolute_y: NO_ABSOLUTE_Y,
642        zeropage: NO_ZEROPAGE,
643        zeropage_x: NO_ZEROPAGE_X,
644        zeropage_y: NO_ZEROPAGE_Y,
645        relative: NO_RELATIVE,
646        indirect: NO_INDIRECT,
647        indexed_indirect: NO_INDEXED_INDIRECT,
648        indirect_indexed: NO_INDIRECT_INDEXED,
649    };
650
651    /// Instruction definition for ora
652    ///
653    /// Includes the instruction name and its [OpCode] for a address mode.
654    pub const OPCODES_ORA: InstructionDef = InstructionDef {
655        instruction: "ora",
656        implied: NO_IMPLIED,
657        immediate: ORA_IMMEDIATE,
658        accumulator: NO_ACCUMULATOR,
659        absolute: ORA_ABSOLUTE,
660        absolute_x: ORA_ABSOLUTE_X,
661        absolute_y: ORA_ABSOLUTE_Y,
662        zeropage: ORA_ZEROPAGE,
663        zeropage_x: ORA_ZEROPAGE_X,
664        zeropage_y: NO_ZEROPAGE_Y,
665        relative: NO_RELATIVE,
666        indirect: NO_INDIRECT,
667        indexed_indirect: ORA_INDEXED_INDIRECT,
668        indirect_indexed: ORA_INDIRECT_INDEXED,
669    };
670
671    /// Instruction definition for pha
672    ///
673    /// Includes the instruction name and its [OpCode] for a address mode.
674    pub const OPCODES_PHA: InstructionDef = InstructionDef {
675        instruction: "pha",
676        implied: PHA_IMPLIED,
677        immediate: NO_IMMEDIATE,
678        accumulator: NO_ACCUMULATOR,
679        absolute: NO_ABSOLUTE,
680        absolute_x: NO_ABSOLUTE_X,
681        absolute_y: NO_ABSOLUTE_Y,
682        zeropage: NO_ZEROPAGE,
683        zeropage_x: NO_ZEROPAGE_X,
684        zeropage_y: NO_ZEROPAGE_Y,
685        relative: NO_RELATIVE,
686        indirect: NO_INDIRECT,
687        indexed_indirect: NO_INDEXED_INDIRECT,
688        indirect_indexed: NO_INDIRECT_INDEXED,
689    };
690
691    /// Instruction definition for php
692    ///
693    /// Includes the instruction name and its [OpCode] for a address mode.
694    pub const OPCODES_PHP: InstructionDef = InstructionDef {
695        instruction: "php",
696        implied: PHP_IMPLIED,
697        immediate: NO_IMMEDIATE,
698        accumulator: NO_ACCUMULATOR,
699        absolute: NO_ABSOLUTE,
700        absolute_x: NO_ABSOLUTE_X,
701        absolute_y: NO_ABSOLUTE_Y,
702        zeropage: NO_ZEROPAGE,
703        zeropage_x: NO_ZEROPAGE_X,
704        zeropage_y: NO_ZEROPAGE_Y,
705        relative: NO_RELATIVE,
706        indirect: NO_INDIRECT,
707        indexed_indirect: NO_INDEXED_INDIRECT,
708        indirect_indexed: NO_INDIRECT_INDEXED,
709    };
710
711    /// Instruction definition for pla
712    ///
713    /// Includes the instruction name and its [OpCode] for a address mode.
714    pub const OPCODES_PLA: InstructionDef = InstructionDef {
715        instruction: "pla",
716        implied: PLA_IMPLIED,
717        immediate: NO_IMMEDIATE,
718        accumulator: NO_ACCUMULATOR,
719        absolute: NO_ABSOLUTE,
720        absolute_x: NO_ABSOLUTE_X,
721        absolute_y: NO_ABSOLUTE_Y,
722        zeropage: NO_ZEROPAGE,
723        zeropage_x: NO_ZEROPAGE_X,
724        zeropage_y: NO_ZEROPAGE_Y,
725        relative: NO_RELATIVE,
726        indirect: NO_INDIRECT,
727        indexed_indirect: NO_INDEXED_INDIRECT,
728        indirect_indexed: NO_INDIRECT_INDEXED,
729    };
730
731    /// Instruction definition for plp
732    ///
733    /// Includes the instruction name and its [OpCode] for a address mode.
734    pub const OPCODES_PLP: InstructionDef = InstructionDef {
735        instruction: "plp",
736        implied: PLP_IMPLIED,
737        immediate: NO_IMMEDIATE,
738        accumulator: NO_ACCUMULATOR,
739        absolute: NO_ABSOLUTE,
740        absolute_x: NO_ABSOLUTE_X,
741        absolute_y: NO_ABSOLUTE_Y,
742        zeropage: NO_ZEROPAGE,
743        zeropage_x: NO_ZEROPAGE_X,
744        zeropage_y: NO_ZEROPAGE_Y,
745        relative: NO_RELATIVE,
746        indirect: NO_INDIRECT,
747        indexed_indirect: NO_INDEXED_INDIRECT,
748        indirect_indexed: NO_INDIRECT_INDEXED,
749    };
750
751    /// Instruction definition for rol
752    ///
753    /// Includes the instruction name and its [OpCode] for a address mode.
754    pub const OPCODES_ROL: InstructionDef = InstructionDef {
755        instruction: "rol",
756        implied: NO_IMPLIED,
757        immediate: NO_IMMEDIATE,
758        accumulator: ROL_ACCUMULATOR,
759        absolute: ROL_ABSOLUTE,
760        absolute_x: ROL_ABSOLUTE_X,
761        absolute_y: NO_ABSOLUTE_Y,
762        zeropage: ROL_ZEROPAGE,
763        zeropage_x: ROL_ZEROPAGE_X,
764        zeropage_y: NO_ZEROPAGE_Y,
765        relative: NO_RELATIVE,
766        indirect: NO_INDIRECT,
767        indexed_indirect: NO_INDEXED_INDIRECT,
768        indirect_indexed: NO_INDIRECT_INDEXED,
769    };
770
771    /// Instruction definition for ror
772    ///
773    /// Includes the instruction name and its [OpCode] for a address mode.
774    pub const OPCODES_ROR: InstructionDef = InstructionDef {
775        instruction: "ror",
776        implied: NO_IMPLIED,
777        immediate: NO_IMMEDIATE,
778        accumulator: ROR_ACCUMULATOR,
779        absolute: ROR_ABSOLUTE,
780        absolute_x: ROR_ABSOLUTE_X,
781        absolute_y: NO_ABSOLUTE_Y,
782        zeropage: ROR_ZEROPAGE,
783        zeropage_x: ROR_ZEROPAGE_X,
784        zeropage_y: NO_ZEROPAGE_Y,
785        relative: NO_RELATIVE,
786        indirect: NO_INDIRECT,
787        indexed_indirect: NO_INDEXED_INDIRECT,
788        indirect_indexed: NO_INDIRECT_INDEXED,
789    };
790
791    /// Instruction definition for rti
792    ///
793    /// Includes the instruction name and its [OpCode] for a address mode.
794    pub const OPCODES_RTI: InstructionDef = InstructionDef {
795        instruction: "rti",
796        implied: RTI_IMPLIED,
797        immediate: NO_IMMEDIATE,
798        accumulator: NO_ACCUMULATOR,
799        absolute: NO_ABSOLUTE,
800        absolute_x: NO_ABSOLUTE_X,
801        absolute_y: NO_ABSOLUTE_Y,
802        zeropage: NO_ZEROPAGE,
803        zeropage_x: NO_ZEROPAGE_X,
804        zeropage_y: NO_ZEROPAGE_Y,
805        relative: NO_RELATIVE,
806        indirect: NO_INDIRECT,
807        indexed_indirect: NO_INDEXED_INDIRECT,
808        indirect_indexed: NO_INDIRECT_INDEXED,
809    };
810
811    /// Instruction definition for sbc
812    ///
813    /// Includes the instruction name and its [OpCode] for a address mode.
814    pub const OPCODES_SBC: InstructionDef = InstructionDef {
815        instruction: "sbc",
816        implied: NO_IMPLIED,
817        immediate: SBC_IMMEDIATE,
818        accumulator: NO_ACCUMULATOR,
819        absolute: SBC_ABSOLUTE,
820        absolute_x: SBC_ABSOLUTE_X,
821        absolute_y: SBC_ABSOLUTE_Y,
822        zeropage: SBC_ZEROPAGE,
823        zeropage_x: SBC_ZEROPAGE_X,
824        zeropage_y: NO_ZEROPAGE_Y,
825        relative: NO_RELATIVE,
826        indirect: NO_INDIRECT,
827        indexed_indirect: SBC_INDEXED_INDIRECT,
828        indirect_indexed: SBC_INDIRECT_INDEXED,
829    };
830
831    /// Instruction definition for sed
832    ///
833    /// Includes the instruction name and its [OpCode] for a address mode.
834    pub const OPCODES_SED: InstructionDef = InstructionDef {
835        instruction: "sed",
836        implied: SED_IMPLIED,
837        immediate: NO_IMMEDIATE,
838        accumulator: NO_ACCUMULATOR,
839        absolute: NO_ABSOLUTE,
840        absolute_x: NO_ABSOLUTE_X,
841        absolute_y: NO_ABSOLUTE_Y,
842        zeropage: NO_ZEROPAGE,
843        zeropage_x: NO_ZEROPAGE_X,
844        zeropage_y: NO_ZEROPAGE_Y,
845        relative: NO_RELATIVE,
846        indirect: NO_INDIRECT,
847        indexed_indirect: NO_INDEXED_INDIRECT,
848        indirect_indexed: NO_INDIRECT_INDEXED,
849    };
850
851    /// Instruction definition for sei
852    ///
853    /// Includes the instruction name and its [OpCode] for a address mode.
854    pub const OPCODES_SEI: InstructionDef = InstructionDef {
855        instruction: "sei",
856        implied: SEI_IMPLIED,
857        immediate: NO_IMMEDIATE,
858        accumulator: NO_ACCUMULATOR,
859        absolute: NO_ABSOLUTE,
860        absolute_x: NO_ABSOLUTE_X,
861        absolute_y: NO_ABSOLUTE_Y,
862        zeropage: NO_ZEROPAGE,
863        zeropage_x: NO_ZEROPAGE_X,
864        zeropage_y: NO_ZEROPAGE_Y,
865        relative: NO_RELATIVE,
866        indirect: NO_INDIRECT,
867        indexed_indirect: NO_INDEXED_INDIRECT,
868        indirect_indexed: NO_INDIRECT_INDEXED,
869    };
870
871    /// Instruction definition for stx
872    ///
873    /// Includes the instruction name and its [OpCode] for a address mode.
874    pub const OPCODES_STX: InstructionDef = InstructionDef {
875        instruction: "stx",
876        implied: NO_IMPLIED,
877        immediate: NO_IMMEDIATE,
878        accumulator: NO_ACCUMULATOR,
879        absolute: STX_ABSOLUTE,
880        absolute_x: NO_ABSOLUTE_X,
881        absolute_y: NO_ABSOLUTE_Y,
882        zeropage: STX_ZEROPAGE,
883        zeropage_x: NO_ZEROPAGE_X,
884        zeropage_y: STX_ZEROPAGE_Y,
885        relative: NO_RELATIVE,
886        indirect: NO_INDIRECT,
887        indexed_indirect: NO_INDEXED_INDIRECT,
888        indirect_indexed: NO_INDIRECT_INDEXED,
889    };
890
891    /// Instruction definition for sty
892    ///
893    /// Includes the instruction name and its [OpCode] for a address mode.
894    pub const OPCODES_STY: InstructionDef = InstructionDef {
895        instruction: "sty",
896        implied: NO_IMPLIED,
897        immediate: NO_IMMEDIATE,
898        accumulator: NO_ACCUMULATOR,
899        absolute: STY_ABSOLUTE,
900        absolute_x: NO_ABSOLUTE_X,
901        absolute_y: NO_ABSOLUTE_Y,
902        zeropage: STY_ZEROPAGE,
903        zeropage_x: STY_ZEROPAGE_X,
904        zeropage_y: NO_ZEROPAGE_Y,
905        relative: NO_RELATIVE,
906        indirect: NO_INDIRECT,
907        indexed_indirect: NO_INDEXED_INDIRECT,
908        indirect_indexed: NO_INDIRECT_INDEXED,
909    };
910
911    /// Instruction definition for tax
912    ///
913    /// Includes the instruction name and its [OpCode] for a address mode.
914    pub const OPCODES_TAX: InstructionDef = InstructionDef {
915        instruction: "tax",
916        implied: TAX_IMPLIED,
917        immediate: NO_IMMEDIATE,
918        accumulator: NO_ACCUMULATOR,
919        absolute: NO_ABSOLUTE,
920        absolute_x: NO_ABSOLUTE_X,
921        absolute_y: NO_ABSOLUTE_Y,
922        zeropage: NO_ZEROPAGE,
923        zeropage_x: NO_ZEROPAGE_X,
924        zeropage_y: NO_ZEROPAGE_Y,
925        relative: NO_RELATIVE,
926        indirect: NO_INDIRECT,
927        indexed_indirect: NO_INDEXED_INDIRECT,
928        indirect_indexed: NO_INDIRECT_INDEXED,
929    };
930
931    /// Instruction definition for tay
932    ///
933    /// Includes the instruction name and its [OpCode] for a address mode.
934    pub const OPCODES_TAY: InstructionDef = InstructionDef {
935        instruction: "tay",
936        implied: TAY_IMPLIED,
937        immediate: NO_IMMEDIATE,
938        accumulator: NO_ACCUMULATOR,
939        absolute: NO_ABSOLUTE,
940        absolute_x: NO_ABSOLUTE_X,
941        absolute_y: NO_ABSOLUTE_Y,
942        zeropage: NO_ZEROPAGE,
943        zeropage_x: NO_ZEROPAGE_X,
944        zeropage_y: NO_ZEROPAGE_Y,
945        relative: NO_RELATIVE,
946        indirect: NO_INDIRECT,
947        indexed_indirect: NO_INDEXED_INDIRECT,
948        indirect_indexed: NO_INDIRECT_INDEXED,
949    };
950
951    /// Instruction definition for tsx
952    ///
953    /// Includes the instruction name and its [OpCode] for a address mode.
954    pub const OPCODES_TSX: InstructionDef = InstructionDef {
955        instruction: "tsx",
956        implied: TSX_IMPLIED,
957        immediate: NO_IMMEDIATE,
958        accumulator: NO_ACCUMULATOR,
959        absolute: NO_ABSOLUTE,
960        absolute_x: NO_ABSOLUTE_X,
961        absolute_y: NO_ABSOLUTE_Y,
962        zeropage: NO_ZEROPAGE,
963        zeropage_x: NO_ZEROPAGE_X,
964        zeropage_y: NO_ZEROPAGE_Y,
965        relative: NO_RELATIVE,
966        indirect: NO_INDIRECT,
967        indexed_indirect: NO_INDEXED_INDIRECT,
968        indirect_indexed: NO_INDIRECT_INDEXED,
969    };
970
971    /// Instruction definition for txa
972    ///
973    /// Includes the instruction name and its [OpCode] for a address mode.
974    pub const OPCODES_TXA: InstructionDef = InstructionDef {
975        instruction: "txa",
976        implied: TXA_IMPLIED,
977        immediate: NO_IMMEDIATE,
978        accumulator: NO_ACCUMULATOR,
979        absolute: NO_ABSOLUTE,
980        absolute_x: NO_ABSOLUTE_X,
981        absolute_y: NO_ABSOLUTE_Y,
982        zeropage: NO_ZEROPAGE,
983        zeropage_x: NO_ZEROPAGE_X,
984        zeropage_y: NO_ZEROPAGE_Y,
985        relative: NO_RELATIVE,
986        indirect: NO_INDIRECT,
987        indexed_indirect: NO_INDEXED_INDIRECT,
988        indirect_indexed: NO_INDIRECT_INDEXED,
989    };
990
991    /// Instruction definition for txs
992    ///
993    /// Includes the instruction name and its [OpCode] for a address mode.
994    pub const OPCODES_TXS: InstructionDef = InstructionDef {
995        instruction: "txs",
996        implied: TXS_IMPLIED,
997        immediate: NO_IMMEDIATE,
998        accumulator: NO_ACCUMULATOR,
999        absolute: NO_ABSOLUTE,
1000        absolute_x: NO_ABSOLUTE_X,
1001        absolute_y: NO_ABSOLUTE_Y,
1002        zeropage: NO_ZEROPAGE,
1003        zeropage_x: NO_ZEROPAGE_X,
1004        zeropage_y: NO_ZEROPAGE_Y,
1005        relative: NO_RELATIVE,
1006        indirect: NO_INDIRECT,
1007        indexed_indirect: NO_INDEXED_INDIRECT,
1008        indirect_indexed: NO_INDIRECT_INDEXED,
1009    };
1010
1011    /// Instruction definition for tya
1012    ///
1013    /// Includes the instruction name and its [OpCode] for a address mode.
1014    pub const OPCODES_TYA: InstructionDef = InstructionDef {
1015        instruction: "tya",
1016        implied: TYA_IMPLIED,
1017        immediate: NO_IMMEDIATE,
1018        accumulator: NO_ACCUMULATOR,
1019        absolute: NO_ABSOLUTE,
1020        absolute_x: NO_ABSOLUTE_X,
1021        absolute_y: NO_ABSOLUTE_Y,
1022        zeropage: NO_ZEROPAGE,
1023        zeropage_x: NO_ZEROPAGE_X,
1024        zeropage_y: NO_ZEROPAGE_Y,
1025        relative: NO_RELATIVE,
1026        indirect: NO_INDIRECT,
1027        indexed_indirect: NO_INDEXED_INDIRECT,
1028        indirect_indexed: NO_INDIRECT_INDEXED,
1029    };
1030
1031    /// Instruction definition for lda
1032    ///
1033    /// Includes the instruction name and its [OpCode] for a address mode.
1034    pub const OPCODES_LDA: InstructionDef = InstructionDef {
1035        instruction: "lda",
1036        implied: NO_IMPLIED,
1037        immediate: LDA_IMMEDIATE,
1038        accumulator: NO_ACCUMULATOR,
1039        absolute: LDA_ABSOLUTE,
1040        absolute_x: LDA_ABSOLUTE_X,
1041        absolute_y: LDA_ABSOLUTE_Y,
1042        zeropage: LDA_ZEROPAGE,
1043        zeropage_x: LDA_ZEROPAGE_X,
1044        zeropage_y: NO_ZEROPAGE_Y,
1045        relative: NO_RELATIVE,
1046        indirect: NO_INDIRECT,
1047        indexed_indirect: LDA_INDEXED_INDIRECT,
1048        indirect_indexed: LDA_INDIRECT_INDEXED,
1049    };
1050
1051    /// Instruction definition for ldy
1052    ///
1053    /// Includes the instruction name and its [OpCode] for a address mode.
1054    pub const OPCODES_LDY: InstructionDef = InstructionDef {
1055        instruction: "ldy",
1056        implied: NO_IMPLIED,
1057        immediate: LDY_IMMEDIATE,
1058        accumulator: NO_ACCUMULATOR,
1059        absolute: LDY_ABSOLUTE,
1060        absolute_x: LDY_ABSOLUTE_X,
1061        absolute_y: NO_ABSOLUTE_Y,
1062        zeropage: LDY_ZEROPAGE,
1063        zeropage_x: LDY_ZEROPAGE_X,
1064        zeropage_y: NO_ZEROPAGE_Y,
1065        relative: NO_RELATIVE,
1066        indirect: NO_INDIRECT,
1067        indexed_indirect: NO_INDEXED_INDIRECT,
1068        indirect_indexed: NO_INDIRECT_INDEXED,
1069    };
1070
1071    /// Instruction definition for sta
1072    ///
1073    /// Includes the instruction name and its [OpCode] for a address mode.
1074    pub const OPCODES_STA: InstructionDef = InstructionDef {
1075        instruction: "sta",
1076        implied: NO_IMPLIED,
1077        immediate: NO_IMMEDIATE,
1078        accumulator: NO_ACCUMULATOR,
1079        absolute: STA_ABSOLUTE,
1080        absolute_x: STA_ABSOLUTE_X,
1081        absolute_y: STA_ABSOLUTE_Y,
1082        zeropage: STA_ZEROPAGE,
1083        zeropage_x: STA_ZEROPAGE_X,
1084        zeropage_y: NO_ZEROPAGE_Y,
1085        relative: NO_RELATIVE,
1086        indirect: NO_INDIRECT,
1087        indexed_indirect: STA_INDEXED_INDIRECT,
1088        indirect_indexed: STA_INDIRECT_INDEXED,
1089    };
1090
1091    /// Instruction definition for jmp
1092    ///
1093    /// Includes the instruction name and its [OpCode] for a address mode.
1094    pub const OPCODES_JMP: InstructionDef = InstructionDef {
1095        instruction: "jmp",
1096        implied: NO_IMPLIED,
1097        immediate: NO_IMMEDIATE,
1098        accumulator: NO_ACCUMULATOR,
1099        absolute: JMP_ABSOLUTE,
1100        absolute_x: NO_ABSOLUTE_X,
1101        absolute_y: NO_ABSOLUTE_Y,
1102        zeropage: NO_ZEROPAGE,
1103        zeropage_x: NO_ZEROPAGE_X,
1104        zeropage_y: NO_ZEROPAGE_Y,
1105        relative: NO_RELATIVE,
1106        indirect: JMP_INDIRECT,
1107        indexed_indirect: NO_INDEXED_INDIRECT,
1108        indirect_indexed: NO_INDIRECT_INDEXED,
1109    };
1110
1111    /// Instruction definition for jsr
1112    ///
1113    /// Includes the instruction name and its [OpCode] for a address mode.
1114    pub const OPCODES_JSR: InstructionDef = InstructionDef {
1115        instruction: "jsr",
1116        implied: NO_IMPLIED,
1117        immediate: NO_IMMEDIATE,
1118        accumulator: NO_ACCUMULATOR,
1119        absolute: JSR_ABSOLUTE,
1120        absolute_x: NO_ABSOLUTE_X,
1121        absolute_y: NO_ABSOLUTE_Y,
1122        zeropage: NO_ZEROPAGE,
1123        zeropage_x: NO_ZEROPAGE_X,
1124        zeropage_y: NO_ZEROPAGE_Y,
1125        relative: NO_RELATIVE,
1126        indirect: NO_INDIRECT,
1127        indexed_indirect: NO_INDEXED_INDIRECT,
1128        indirect_indexed: NO_INDIRECT_INDEXED,
1129    };
1130
1131    /// Instruction definition for sec
1132    ///
1133    /// Includes the instruction name and its [OpCode] for a address mode.
1134    pub const OPCODES_SEC: InstructionDef = InstructionDef {
1135        instruction: "sec",
1136        implied: SEC_IMPLIED,
1137        immediate: NO_IMMEDIATE,
1138        accumulator: NO_ACCUMULATOR,
1139        absolute: NO_ABSOLUTE,
1140        absolute_x: NO_ABSOLUTE_X,
1141        absolute_y: NO_ABSOLUTE_Y,
1142        zeropage: NO_ZEROPAGE,
1143        zeropage_x: NO_ZEROPAGE_X,
1144        zeropage_y: NO_ZEROPAGE_Y,
1145        relative: NO_RELATIVE,
1146        indirect: NO_INDIRECT,
1147        indexed_indirect: NO_INDEXED_INDIRECT,
1148        indirect_indexed: NO_INDIRECT_INDEXED,
1149    };
1150
1151    /// Instruction definition for clc
1152    ///
1153    /// Includes the instruction name and its [OpCode] for a address mode.
1154    pub const OPCODES_CLC: InstructionDef = InstructionDef {
1155        instruction: "clc",
1156        implied: CLC_IMPLIED,
1157        immediate: NO_IMMEDIATE,
1158        accumulator: NO_ACCUMULATOR,
1159        absolute: NO_ABSOLUTE,
1160        absolute_x: NO_ABSOLUTE_X,
1161        absolute_y: NO_ABSOLUTE_Y,
1162        zeropage: NO_ZEROPAGE,
1163        zeropage_x: NO_ZEROPAGE_X,
1164        zeropage_y: NO_ZEROPAGE_Y,
1165        relative: NO_RELATIVE,
1166        indirect: NO_INDIRECT,
1167        indexed_indirect: NO_INDEXED_INDIRECT,
1168        indirect_indexed: NO_INDIRECT_INDEXED,
1169    };
1170
1171    /// Instruction definition for rts
1172    ///
1173    /// Includes the instruction name and its [OpCode] for a address mode.
1174    pub const OPCODES_RTS: InstructionDef = InstructionDef {
1175        instruction: "rts",
1176        implied: RTS_IMPLIED,
1177        immediate: NO_IMMEDIATE,
1178        accumulator: NO_ACCUMULATOR,
1179        absolute: NO_ABSOLUTE,
1180        absolute_x: NO_ABSOLUTE_X,
1181        absolute_y: NO_ABSOLUTE_Y,
1182        zeropage: NO_ZEROPAGE,
1183        zeropage_x: NO_ZEROPAGE_X,
1184        zeropage_y: NO_ZEROPAGE_Y,
1185        relative: NO_RELATIVE,
1186        indirect: NO_INDIRECT,
1187        indexed_indirect: NO_INDEXED_INDIRECT,
1188        indirect_indexed: NO_INDIRECT_INDEXED,
1189    };
1190}