n65 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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