n65 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +340 -0
  5. data/README.md +126 -0
  6. data/Rakefile +2 -0
  7. data/bin/n65 +11 -0
  8. data/data/opcodes.yaml +1030 -0
  9. data/examples/beep.asm +24 -0
  10. data/examples/mario2.asm +260 -0
  11. data/examples/mario2.char +0 -0
  12. data/examples/music_driver.asm +202 -0
  13. data/examples/noise.asm +93 -0
  14. data/examples/pulse_chord.asm +213 -0
  15. data/images/assembler_demo.png +0 -0
  16. data/lib/n65.rb +243 -0
  17. data/lib/n65/directives/ascii.rb +42 -0
  18. data/lib/n65/directives/bytes.rb +102 -0
  19. data/lib/n65/directives/dw.rb +86 -0
  20. data/lib/n65/directives/enter_scope.rb +55 -0
  21. data/lib/n65/directives/exit_scope.rb +35 -0
  22. data/lib/n65/directives/inc.rb +67 -0
  23. data/lib/n65/directives/incbin.rb +51 -0
  24. data/lib/n65/directives/ines_header.rb +53 -0
  25. data/lib/n65/directives/label.rb +46 -0
  26. data/lib/n65/directives/org.rb +47 -0
  27. data/lib/n65/directives/segment.rb +45 -0
  28. data/lib/n65/directives/space.rb +46 -0
  29. data/lib/n65/front_end.rb +90 -0
  30. data/lib/n65/instruction.rb +308 -0
  31. data/lib/n65/instruction_base.rb +29 -0
  32. data/lib/n65/memory_space.rb +150 -0
  33. data/lib/n65/opcodes.rb +9 -0
  34. data/lib/n65/parser.rb +85 -0
  35. data/lib/n65/regexes.rb +33 -0
  36. data/lib/n65/symbol_table.rb +198 -0
  37. data/lib/n65/version.rb +3 -0
  38. data/n65.gemspec +23 -0
  39. data/nes_lib/nes.sym +105 -0
  40. data/test/test_memory_space.rb +82 -0
  41. data/test/test_symbol_table.rb +238 -0
  42. data/utils/midi/Makefile +3 -0
  43. data/utils/midi/c_scale.mid +0 -0
  44. data/utils/midi/convert +0 -0
  45. data/utils/midi/guitar.mid +0 -0
  46. data/utils/midi/include/event.h +93 -0
  47. data/utils/midi/include/file.h +57 -0
  48. data/utils/midi/include/helpers.h +14 -0
  49. data/utils/midi/include/track.h +45 -0
  50. data/utils/midi/lil_melody.mid +0 -0
  51. data/utils/midi/mi_feabhra.mid +0 -0
  52. data/utils/midi/midi_to_nes.rb +204 -0
  53. data/utils/midi/source/convert.cpp +16 -0
  54. data/utils/midi/source/event.cpp +96 -0
  55. data/utils/midi/source/file.cpp +37 -0
  56. data/utils/midi/source/helpers.cpp +46 -0
  57. data/utils/midi/source/track.cpp +37 -0
  58. data/utils/opcode_table_to_yaml.rb +91 -0
  59. metadata +133 -0
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/n65 ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ ###############################################################################
3
+ ## 6502 Assembler for the NES's 2A03
4
+ ##
5
+ ## Usage: ./n65 <infile.asm>
6
+ ##
7
+ ## This file runs the assembler though the commandline frontend.
8
+
9
+ require_relative '../lib/n65/front_end'
10
+
11
+ N65::FrontEnd.new(ARGV).run
@@ -0,0 +1,1030 @@
1
+ ---
2
+ :adc:
3
+ :description: "ADd with Carry"
4
+ :flags:
5
+ - :s
6
+ - :v
7
+ - :z
8
+ - :c
9
+ :immediate:
10
+ :hex: 0x69
11
+ :len: 2
12
+ :cycles: 2
13
+ :boundry_add: false
14
+ :zero_page:
15
+ :hex: 0x65
16
+ :len: 2
17
+ :cycles: 3
18
+ :boundry_add: false
19
+ :zero_page_x:
20
+ :hex: 0x75
21
+ :len: 2
22
+ :cycles: 4
23
+ :boundry_add: false
24
+ :absolute:
25
+ :hex: 0x6D
26
+ :len: 3
27
+ :cycles: 4
28
+ :boundry_add: false
29
+ :absolute_x:
30
+ :hex: 0x7D
31
+ :len: 3
32
+ :cycles: 4
33
+ :boundry_add: true
34
+ :absolute_y:
35
+ :hex: 0x79
36
+ :len: 3
37
+ :cycles: 4
38
+ :boundry_add: true
39
+ :indirect_x:
40
+ :hex: 0x61
41
+ :len: 2
42
+ :cycles: 6
43
+ :boundry_add: false
44
+ :indirect_y:
45
+ :hex: 0x71
46
+ :len: 2
47
+ :cycles: 5
48
+ :boundry_add: true
49
+
50
+ :and:
51
+ :description: "bitwise AND with accumulator"
52
+ :flags:
53
+ - :s
54
+ - :z
55
+ :immediate:
56
+ :hex: 0x29
57
+ :len: 2
58
+ :cycles: 2
59
+ :boundry_add: false
60
+ :zero_page:
61
+ :hex: 0x25
62
+ :len: 2
63
+ :cycles: 3
64
+ :boundry_add: false
65
+ :zero_page_x:
66
+ :hex: 0x35
67
+ :len: 2
68
+ :cycles: 4
69
+ :boundry_add: false
70
+ :absolute:
71
+ :hex: 0x2D
72
+ :len: 3
73
+ :cycles: 4
74
+ :boundry_add: false
75
+ :absolute_x:
76
+ :hex: 0x3D
77
+ :len: 3
78
+ :cycles: 4
79
+ :boundry_add: true
80
+ :absolute_y:
81
+ :hex: 0x39
82
+ :len: 3
83
+ :cycles: 4
84
+ :boundry_add: true
85
+ :indirect_x:
86
+ :hex: 0x21
87
+ :len: 2
88
+ :cycles: 6
89
+ :boundry_add: false
90
+ :indirect_y:
91
+ :hex: 0x31
92
+ :len: 2
93
+ :cycles: 5
94
+ :boundry_add: true
95
+
96
+ :asl:
97
+ :description: "Arithmetic Shift Left"
98
+ :flags:
99
+ - :s
100
+ - :z
101
+ - :c
102
+ :implied:
103
+ :hex: 0xA
104
+ :len: 1
105
+ :cycles: 2
106
+ :boundry_add: false
107
+ :zero_page:
108
+ :hex: 0x6
109
+ :len: 2
110
+ :cycles: 5
111
+ :boundry_add: false
112
+ :zero_page_x:
113
+ :hex: 0x16
114
+ :len: 2
115
+ :cycles: 6
116
+ :boundry_add: false
117
+ :absolute:
118
+ :hex: 0xE
119
+ :len: 3
120
+ :cycles: 6
121
+ :boundry_add: false
122
+ :absolute_x:
123
+ :hex: 0x1E
124
+ :len: 3
125
+ :cycles: 7
126
+ :boundry_add: false
127
+
128
+ :bit:
129
+ :description: "test BITs"
130
+ :flags:
131
+ - :n
132
+ - :v
133
+ - :z
134
+ :zero_page:
135
+ :hex: 0x24
136
+ :len: 2
137
+ :cycles: 3
138
+ :boundry_add: false
139
+ :absolute:
140
+ :hex: 0x2C
141
+ :len: 3
142
+ :cycles: 4
143
+ :boundry_add: false
144
+
145
+ :bpl:
146
+ :branch: true
147
+ :description: "Branch on PLus"
148
+ :flags: []
149
+ :relative:
150
+ :hex: 0x10
151
+ :len: 2
152
+ :bmi:
153
+ :branch: true
154
+ :description: "Branch on MInus"
155
+ :flags: []
156
+ :relative:
157
+ :hex: 0x30
158
+ :len: 2
159
+ :bvc:
160
+ :branch: true
161
+ :description: "Branch on oVerflow Clear"
162
+ :flags: []
163
+ :relative:
164
+ :hex: 0x50
165
+ :len: 2
166
+ :bvs:
167
+ :branch: true
168
+ :description: "Branch on oVerflow Set"
169
+ :flags: []
170
+ :relative:
171
+ :hex: 0x70
172
+ :len: 2
173
+ :bcc:
174
+ :branch: true
175
+ :description: "Branch on Carry Clear"
176
+ :flags: []
177
+ :relative:
178
+ :hex: 0x90
179
+ :len: 2
180
+ :bcs:
181
+ :branch: true
182
+ :description: "Branch on Carry Set"
183
+ :flags: []
184
+ :relative:
185
+ :hex: 0xB0
186
+ :len: 2
187
+ :bne:
188
+ :branch: true
189
+ :description: "Branch on Not Equal"
190
+ :flags: []
191
+ :relative:
192
+ :hex: 0xD0
193
+ :len: 2
194
+ :beq:
195
+ :branch: true
196
+ :description: "Branch on Equal"
197
+ :flags: []
198
+ :relative:
199
+ :hex: 0xF0
200
+ :len: 2
201
+
202
+
203
+ :brk:
204
+ :description: "BReaK"
205
+ :flags:
206
+ - :b
207
+ :implied:
208
+ :hex: 0x0
209
+ :len: 1
210
+ :cycles: 7
211
+ :boundry_add: false
212
+
213
+ :cmp:
214
+ :description: "CoMPare accumulator"
215
+ :flags:
216
+ - :s
217
+ - :c
218
+ - :z
219
+ :immediate:
220
+ :hex: 0xC9
221
+ :len: 2
222
+ :cycles: 2
223
+ :boundry_add: false
224
+ :zero_page:
225
+ :hex: 0xC5
226
+ :len: 2
227
+ :cycles: 3
228
+ :boundry_add: false
229
+ :zero_page_x:
230
+ :hex: 0xD5
231
+ :len: 2
232
+ :cycles: 4
233
+ :boundry_add: false
234
+ :absolute:
235
+ :hex: 0xCD
236
+ :len: 3
237
+ :cycles: 4
238
+ :boundry_add: false
239
+ :absolute_x:
240
+ :hex: 0xDD
241
+ :len: 3
242
+ :cycles: 4
243
+ :boundry_add: true
244
+ :absolute_y:
245
+ :hex: 0xD9
246
+ :len: 3
247
+ :cycles: 4
248
+ :boundry_add: true
249
+ :indirect_x:
250
+ :hex: 0xC1
251
+ :len: 2
252
+ :cycles: 6
253
+ :boundry_add: false
254
+ :indirect_y:
255
+ :hex: 0xD1
256
+ :len: 2
257
+ :cycles: 5
258
+ :boundry_add: true
259
+
260
+ :cpx:
261
+ :description: "ComPare X register"
262
+ :flags:
263
+ - :s
264
+ - :c
265
+ - :z
266
+ :immediate:
267
+ :hex: 0xE0
268
+ :len: 2
269
+ :cycles: 2
270
+ :boundry_add: false
271
+ :zero_page:
272
+ :hex: 0xE4
273
+ :len: 2
274
+ :cycles: 3
275
+ :boundry_add: false
276
+ :absolute:
277
+ :hex: 0xEC
278
+ :len: 3
279
+ :cycles: 4
280
+ :boundry_add: false
281
+
282
+ :cpy:
283
+ :description: "ComPare Y register"
284
+ :flags:
285
+ - :s
286
+ - :c
287
+ - :z
288
+ :immediate:
289
+ :hex: 0xC0
290
+ :len: 2
291
+ :cycles: 2
292
+ :boundry_add: false
293
+ :zero_page:
294
+ :hex: 0xC4
295
+ :len: 2
296
+ :cycles: 3
297
+ :boundry_add: false
298
+ :absolute:
299
+ :hex: 0xCC
300
+ :len: 3
301
+ :cycles: 4
302
+ :boundry_add: false
303
+
304
+ :dec:
305
+ description: "DECrement memory"
306
+ :flags:
307
+ - :s
308
+ - :z
309
+ :zero_page:
310
+ :hex: 0xC6
311
+ :len: 2
312
+ :cycles: 5
313
+ :boundry_add: false
314
+ :zero_page_x:
315
+ :hex: 0xD6
316
+ :len: 2
317
+ :cycles: 6
318
+ :boundry_add: false
319
+ :absolute:
320
+ :hex: 0xCE
321
+ :len: 3
322
+ :cycles: 6
323
+ :boundry_add: false
324
+ :absolute_x:
325
+ :hex: 0xDE
326
+ :len: 3
327
+ :cycles: 7
328
+ :boundry_add: false
329
+
330
+ :eor:
331
+ :description: "bitwise Exclusive OR"
332
+ :flags:
333
+ - :s
334
+ - :z
335
+ :immediate:
336
+ :hex: 0x49
337
+ :len: 2
338
+ :cycles: 2
339
+ :boundry_add: false
340
+ :zero_page:
341
+ :hex: 0x45
342
+ :len: 2
343
+ :cycles: 3
344
+ :boundry_add: false
345
+ :zero_page_x:
346
+ :hex: 0x55
347
+ :len: 2
348
+ :cycles: 4
349
+ :boundry_add: false
350
+ :absolute:
351
+ :hex: 0x4D
352
+ :len: 3
353
+ :cycles: 4
354
+ :boundry_add: false
355
+ :absolute_x:
356
+ :hex: 0x5D
357
+ :len: 3
358
+ :cycles: 4
359
+ :boundry_add: true
360
+ :absolute_y:
361
+ :hex: 0x59
362
+ :len: 3
363
+ :cycles: 4
364
+ :boundry_add: true
365
+ :indirect_x:
366
+ :hex: 0x41
367
+ :len: 2
368
+ :cycles: 6
369
+ :boundry_add: false
370
+ :indirect_y:
371
+ :hex: 0x51
372
+ :len: 2
373
+ :cycles: 5
374
+ :boundry_add: true
375
+
376
+ :clc:
377
+ :description: "CLear Carry"
378
+ :flags:
379
+ - :c
380
+ :implied:
381
+ :hex: 0x18
382
+ :len: 1
383
+ :cycles: 2
384
+ :sec:
385
+ :description: "SEt Carry"
386
+ :flags:
387
+ - :c
388
+ :implied:
389
+ :hex: 0x38
390
+ :len: 1
391
+ :cycles: 2
392
+ :cli:
393
+ :description: "CLear Interrupt"
394
+ :flags:
395
+ - :i
396
+ :implied:
397
+ :hex: 0x58
398
+ :len: 1
399
+ :cycles: 2
400
+ :sei:
401
+ :description: "SEt Interrupt"
402
+ :flags:
403
+ - :i
404
+ :implied:
405
+ :hex: 0x78
406
+ :len: 1
407
+ :cycles: 2
408
+ :clv:
409
+ :description: "CLear oVerflow"
410
+ :flags:
411
+ - :v
412
+ :implied:
413
+ :hex: 0xB8
414
+ :len: 1
415
+ :cycles: 2
416
+ :cld:
417
+ :description: "CLear Decimal"
418
+ :flags:
419
+ - :d
420
+ :implied:
421
+ :hex: 0xD8
422
+ :len: 1
423
+ :cycles: 2
424
+ :sed:
425
+ :description: "SEt Decimal"
426
+ :flags:
427
+ - :d
428
+ :implied:
429
+ :hex: 0xF8
430
+ :len: 1
431
+ :cycles: 2
432
+
433
+ :inc:
434
+ :description: "INCrement memory"
435
+ :flags:
436
+ - :s
437
+ - :z
438
+ :zero_page:
439
+ :hex: 0xE6
440
+ :len: 2
441
+ :cycles: 5
442
+ :boundry_add: false
443
+ :zero_page_x:
444
+ :hex: 0xF6
445
+ :len: 2
446
+ :cycles: 6
447
+ :boundry_add: false
448
+ :absolute:
449
+ :hex: 0xEE
450
+ :len: 3
451
+ :cycles: 6
452
+ :boundry_add: false
453
+ :absolute_x:
454
+ :hex: 0xFE
455
+ :len: 3
456
+ :cycles: 7
457
+ :boundry_add: false
458
+
459
+ :jmp:
460
+ :description: "JuMP"
461
+ :flags: []
462
+ :absolute:
463
+ :hex: 0x4C
464
+ :len: 3
465
+ :cycles: 3
466
+ :boundry_add: false
467
+ :indirect:
468
+ :hex: 0x6C
469
+ :len: 3
470
+ :cycles: 5
471
+ :boundry_add: false
472
+
473
+ :jsr:
474
+ :description: "Jump to SubRoutine"
475
+ :flags: []
476
+ :absolute:
477
+ :hex: 0x20
478
+ :len: 3
479
+ :cycles: 6
480
+ :boundry_add: false
481
+
482
+ :lda:
483
+ :description: "LoaD Accumulator"
484
+ :flags:
485
+ - :s
486
+ - :z
487
+ :immediate:
488
+ :hex: 0xA9
489
+ :len: 2
490
+ :cycles: 2
491
+ :boundry_add: false
492
+ :zero_page:
493
+ :hex: 0xA5
494
+ :len: 2
495
+ :cycles: 3
496
+ :boundry_add: false
497
+ :zero_page_x:
498
+ :hex: 0xB5
499
+ :len: 2
500
+ :cycles: 4
501
+ :boundry_add: false
502
+ :absolute:
503
+ :hex: 0xAD
504
+ :len: 3
505
+ :cycles: 4
506
+ :boundry_add: false
507
+ :absolute_x:
508
+ :hex: 0xBD
509
+ :len: 3
510
+ :cycles: 4
511
+ :boundry_add: true
512
+ :absolute_y:
513
+ :hex: 0xB9
514
+ :len: 3
515
+ :cycles: 4
516
+ :boundry_add: true
517
+ :indirect_x:
518
+ :hex: 0xA1
519
+ :len: 2
520
+ :cycles: 6
521
+ :boundry_add: false
522
+ :indirect_y:
523
+ :hex: 0xB1
524
+ :len: 2
525
+ :cycles: 5
526
+ :boundry_add: true
527
+
528
+ :ldx:
529
+ :description: "LoaD X register"
530
+ :flags:
531
+ - :s
532
+ - :z
533
+ :immediate:
534
+ :hex: 0xA2
535
+ :len: 2
536
+ :cycles: 2
537
+ :boundry_add: false
538
+ :zero_page:
539
+ :hex: 0xA6
540
+ :len: 2
541
+ :cycles: 3
542
+ :boundry_add: false
543
+ :zero_page_y:
544
+ :hex: 0xB6
545
+ :len: 2
546
+ :cycles: 4
547
+ :boundry_add: false
548
+ :absolute:
549
+ :hex: 0xAE
550
+ :len: 3
551
+ :cycles: 4
552
+ :boundry_add: false
553
+ :absolute_y:
554
+ :hex: 0xBE
555
+ :len: 3
556
+ :cycles: 4
557
+ :boundry_add: true
558
+
559
+ :ldy:
560
+ :description: "LoaD Y register"
561
+ :flags:
562
+ - :s
563
+ - :z
564
+ :immediate:
565
+ :hex: 0xA0
566
+ :len: 2
567
+ :cycles: 2
568
+ :boundry_add: false
569
+ :zero_page:
570
+ :hex: 0xA4
571
+ :len: 2
572
+ :cycles: 3
573
+ :boundry_add: false
574
+ :zero_page_x:
575
+ :hex: 0xB4
576
+ :len: 2
577
+ :cycles: 4
578
+ :boundry_add: false
579
+ :absolute:
580
+ :hex: 0xAC
581
+ :len: 3
582
+ :cycles: 4
583
+ :boundry_add: false
584
+ :absolute_x:
585
+ :hex: 0xBC
586
+ :len: 3
587
+ :cycles: 4
588
+ :boundry_add: true
589
+
590
+ :lsr:
591
+ :description: "Logical Shift Right"
592
+ :flags:
593
+ - :s
594
+ - :z
595
+ - :c
596
+ :implied:
597
+ :hex: 0x4A
598
+ :len: 1
599
+ :cycles: 2
600
+ :boundry_add: false
601
+ :zero_page:
602
+ :hex: 0x46
603
+ :len: 2
604
+ :cycles: 5
605
+ :boundry_add: false
606
+ :zero_page_x:
607
+ :hex: 0x56
608
+ :len: 2
609
+ :cycles: 6
610
+ :boundry_add: false
611
+ :absolute:
612
+ :hex: 0x4E
613
+ :len: 3
614
+ :cycles: 6
615
+ :boundry_add: false
616
+ :absolute_x:
617
+ :hex: 0x5E
618
+ :len: 3
619
+ :cycles: 7
620
+ :boundry_add: false
621
+
622
+ :nop:
623
+ :description: "No OPeration"
624
+ :flags: []
625
+ :implied:
626
+ :hex: 0xEA
627
+ :len: 1
628
+ :cycles: 2
629
+ :boundry_add: false
630
+
631
+ :ora:
632
+ :description: "bitwise OR with Accumulator"
633
+ :flags:
634
+ - :s
635
+ - :z
636
+ :immediate:
637
+ :hex: 0x9
638
+ :len: 2
639
+ :cycles: 2
640
+ :boundry_add: false
641
+ :zero_page:
642
+ :hex: 0x5
643
+ :len: 2
644
+ :cycles: 3
645
+ :boundry_add: false
646
+ :zero_page_x:
647
+ :hex: 0x15
648
+ :len: 2
649
+ :cycles: 4
650
+ :boundry_add: false
651
+ :absolute:
652
+ :hex: 0xD
653
+ :len: 3
654
+ :cycles: 4
655
+ :boundry_add: false
656
+ :absolute_x:
657
+ :hex: 0x1D
658
+ :len: 3
659
+ :cycles: 4
660
+ :boundry_add: true
661
+ :absolute_y:
662
+ :hex: 0x19
663
+ :len: 3
664
+ :cycles: 4
665
+ :boundry_add: true
666
+ :indirect_x:
667
+ :hex: 0x1
668
+ :len: 2
669
+ :cycles: 6
670
+ :boundry_add: false
671
+ :indirect_y:
672
+ :hex: 0x11
673
+ :len: 2
674
+ :cycles: 5
675
+ :boundry_add: true
676
+
677
+ :tax:
678
+ :description: "Transfer A to X"
679
+ :flags:
680
+ - :s
681
+ - :z
682
+ :implied:
683
+ :hex: 0xAA
684
+ :len: 1
685
+ :cycles: 2
686
+ :boundry_add: false
687
+ :txa:
688
+ :description: "Transfer X to A"
689
+ :flags:
690
+ - :s
691
+ - :z
692
+ :implied:
693
+ :hex: 0x8A
694
+ :len: 1
695
+ :cycles: 2
696
+ :boundry_add: false
697
+ :dex:
698
+ :description: "DEcrement X"
699
+ :flags:
700
+ - :s
701
+ - :z
702
+ :implied:
703
+ :hex: 0xCA
704
+ :len: 1
705
+ :cycles: 2
706
+ :boundry_add: false
707
+ :inx:
708
+ :description: "INcrement X"
709
+ :flags:
710
+ - :s
711
+ - :z
712
+ :implied:
713
+ :hex: 0xE8
714
+ :len: 1
715
+ :cycles: 2
716
+ :boundry_add: false
717
+ :tay:
718
+ :description: "Transfer A to Y"
719
+ :flags:
720
+ - :s
721
+ - :z
722
+ :implied:
723
+ :hex: 0xA8
724
+ :len: 1
725
+ :cycles: 2
726
+ :boundry_add: false
727
+ :tya:
728
+ :description: "Transfer Y to A"
729
+ :flags:
730
+ - :s
731
+ - :z
732
+ :implied:
733
+ :hex: 0x98
734
+ :len: 1
735
+ :cycles: 2
736
+ :boundry_add: false
737
+ :dey:
738
+ :description: "DEcrement Y"
739
+ :flags:
740
+ - :s
741
+ - :z
742
+ :implied:
743
+ :hex: 0x88
744
+ :len: 1
745
+ :cycles: 2
746
+ :boundry_add: false
747
+ :iny:
748
+ :description: "INcrement Y"
749
+ :flags:
750
+ - :s
751
+ - :z
752
+ :implied:
753
+ :hex: 0xC8
754
+ :len: 1
755
+ :cycles: 2
756
+ :boundry_add: false
757
+
758
+ :rol:
759
+ :description: "ROtate Left"
760
+ :flags:
761
+ - :s
762
+ - :z
763
+ - :c
764
+ :implied:
765
+ :hex: 0x2A
766
+ :len: 1
767
+ :cycles: 2
768
+ :boundry_add: false
769
+ :zero_page:
770
+ :hex: 0x26
771
+ :len: 2
772
+ :cycles: 5
773
+ :boundry_add: false
774
+ :zero_page_x:
775
+ :hex: 0x36
776
+ :len: 2
777
+ :cycles: 6
778
+ :boundry_add: false
779
+ :absolute:
780
+ :hex: 0x2E
781
+ :len: 3
782
+ :cycles: 6
783
+ :boundry_add: false
784
+ :absolute_x:
785
+ :hex: 0x3E
786
+ :len: 3
787
+ :cycles: 7
788
+ :boundry_add: false
789
+
790
+ :ror:
791
+ :description: "ROtate Right"
792
+ :flags:
793
+ - :s
794
+ - :z
795
+ - :c
796
+ :implied:
797
+ :hex: 0x6A
798
+ :len: 1
799
+ :cycles: 2
800
+ :boundry_add: false
801
+ :zero_page:
802
+ :hex: 0x66
803
+ :len: 2
804
+ :cycles: 5
805
+ :boundry_add: false
806
+ :zero_page_x:
807
+ :hex: 0x76
808
+ :len: 2
809
+ :cycles: 6
810
+ :boundry_add: false
811
+ :absolute:
812
+ :hex: 0x6E
813
+ :len: 3
814
+ :cycles: 6
815
+ :boundry_add: false
816
+ :absolute_x:
817
+ :hex: 0x7E
818
+ :len: 3
819
+ :cycles: 7
820
+ :boundry_add: false
821
+
822
+ :rti:
823
+ :description: "ReTurn from Interrupt, TODO: Flags could be wrong"
824
+ :flags:
825
+ - :n
826
+ - :v
827
+ - :u
828
+ - :b
829
+ - :d
830
+ - :i
831
+ - :z
832
+ - :c
833
+ :implied:
834
+ :hex: 0x40
835
+ :len: 1
836
+ :cycles: 6
837
+ :boundry_add: false
838
+
839
+ :rts:
840
+ :description: "ReTurn from Subroutine"
841
+ :flags: []
842
+ :implied:
843
+ :hex: 0x60
844
+ :len: 1
845
+ :cycles: 6
846
+ :boundry_add: false
847
+
848
+ :sbc:
849
+ :description: "SuBtract with Carry"
850
+ :flags:
851
+ - :s
852
+ - :v
853
+ - :z
854
+ - :c
855
+ :immediate:
856
+ :hex: 0xE9
857
+ :len: 2
858
+ :cycles: 2
859
+ :boundry_add: false
860
+ :zero_page:
861
+ :hex: 0xE5
862
+ :len: 2
863
+ :cycles: 3
864
+ :boundry_add: false
865
+ :zero_page_x:
866
+ :hex: 0xF5
867
+ :len: 2
868
+ :cycles: 4
869
+ :boundry_add: false
870
+ :absolute:
871
+ :hex: 0xED
872
+ :len: 3
873
+ :cycles: 4
874
+ :boundry_add: false
875
+ :absolute_x:
876
+ :hex: 0xFD
877
+ :len: 3
878
+ :cycles: 4
879
+ :boundry_add: true
880
+ :absolute_y:
881
+ :hex: 0xF9
882
+ :len: 3
883
+ :cycles: 4
884
+ :boundry_add: true
885
+ :indirect_x:
886
+ :hex: 0xE1
887
+ :len: 2
888
+ :cycles: 6
889
+ :boundry_add: false
890
+ :indirect_y:
891
+ :hex: 0xF1
892
+ :len: 2
893
+ :cycles: 5
894
+ :boundry_add: true
895
+
896
+ :sta:
897
+ :description: "STore Accumulator"
898
+ :flags: []
899
+ :zero_page:
900
+ :hex: 0x85
901
+ :len: 2
902
+ :cycles: 3
903
+ :boundry_add: false
904
+ :zero_page_x:
905
+ :hex: 0x95
906
+ :len: 2
907
+ :cycles: 4
908
+ :boundry_add: false
909
+ :absolute:
910
+ :hex: 0x8D
911
+ :len: 3
912
+ :cycles: 4
913
+ :boundry_add: false
914
+ :absolute_x:
915
+ :hex: 0x9D
916
+ :len: 3
917
+ :cycles: 5
918
+ :boundry_add: false
919
+ :absolute_y:
920
+ :hex: 0x99
921
+ :len: 3
922
+ :cycles: 5
923
+ :boundry_add: false
924
+ :indirect_x:
925
+ :hex: 0x81
926
+ :len: 2
927
+ :cycles: 6
928
+ :boundry_add: false
929
+ :indirect_y:
930
+ :hex: 0x91
931
+ :len: 2
932
+ :cycles: 6
933
+ :boundry_add: false
934
+
935
+ :txs:
936
+ :description: "Transfer X to Stack ptr"
937
+ :flags: []
938
+ :implied:
939
+ :hex: 0x9A
940
+ :len: 1
941
+ :cycles: 2
942
+ :boundry_add: false
943
+ :tsx:
944
+ :description: "Transfer Stack ptr to X"
945
+ :flags: []
946
+ :implied:
947
+ :hex: 0xBA
948
+ :len: 1
949
+ :cycles: 2
950
+ :boundry_add: false
951
+
952
+ :pha:
953
+ :description: "PusH Accumulator"
954
+ :flags: []
955
+ :implied:
956
+ :hex: 0x48
957
+ :len: 1
958
+ :cycles: 3
959
+ :boundry_add: false
960
+ :pla:
961
+ :description: "PuLl Accumulator"
962
+ :flags: []
963
+ :implied:
964
+ :hex: 0x68
965
+ :len: 1
966
+ :cycles: 4
967
+ :boundry_add: false
968
+
969
+ :php:
970
+ :description: "PusH Processor status"
971
+ :flags: []
972
+ :implied:
973
+ :hex: 0x08
974
+ :len: 1
975
+ :cycles: 3
976
+ :boundry_add: false
977
+ :plp:
978
+ :description: "PuLl Processor status"
979
+ :flags:
980
+ - :n
981
+ - :v
982
+ - :u
983
+ - :b
984
+ - :d
985
+ - :i
986
+ - :z
987
+ - :c
988
+ :implied:
989
+ :hex: 0x28
990
+ :len: 1
991
+ :cycles: 4
992
+ :boundry_add: false
993
+
994
+ :stx:
995
+ :description: "STore X register"
996
+ :flags: []
997
+ :zero_page:
998
+ :hex: 0x86
999
+ :len: 2
1000
+ :cycles: 3
1001
+ :boundry_add: false
1002
+ :zero_page_y:
1003
+ :hex: 0x96
1004
+ :len: 2
1005
+ :cycles: 4
1006
+ :boundry_add: false
1007
+ :absolute:
1008
+ :hex: 0x8E
1009
+ :len: 3
1010
+ :cycles: 4
1011
+ :boundry_add: false
1012
+
1013
+ :sty:
1014
+ :description: "STore Y register"
1015
+ :flags: []
1016
+ :zero_page:
1017
+ :hex: 0x84
1018
+ :len: 2
1019
+ :cycles: 3
1020
+ :boundry_add: false
1021
+ :zero_page_x:
1022
+ :hex: 0x94
1023
+ :len: 2
1024
+ :cycles: 4
1025
+ :boundry_add: false
1026
+ :absolute:
1027
+ :hex: 0x8C
1028
+ :len: 3
1029
+ :cycles: 4
1030
+ :boundry_add: false