summaryrefslogtreecommitdiff
path: root/base-op-desc.ms
blob: 9110b25aea5f2f3ac0a3ff43588410972630204f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
.NH 3
.XN Descriptions for each instruction of the Sux Base ISA
.LP
.tl 'CPS''Clear Processor Status register.'
.tl 'Opcode''$00'
.LP
The CPS instruction clears all 64 bits of the processor status register.

.LP
.tl 'ADC''ADd with Carry.'
.tl 'Opcodes''#=$01 a=$03 zm=$05'
.tl 'Flags''N V      Z C'
.LP
The ADC instruction adds the operand with the accumulator, and then
stores it back into the accumulator. If the carry flag is set, then
it adds the carry flag along with the sum.

.LP
.tl 'AAB''Add Accumulator, and B with carry.'
.tl 'Opcode''$02'
.tl 'Flags''N V      Z C'
.LP
The AAB instruction is just like the ADC instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'PHB''PusH the B register.'
.tl 'Opcode''$06'
.LP
The PHB instruction pushes the number of bytes specified, from the B
register, onto the stack.

.LP
.tl 'PHP''PusH the Processor status register.'
.tl 'Opcode''$08'
.LP
The PHP instruction pushes the number of bytes specified, from the
processor status register, onto the stack.

.LP
.tl 'LDA''LoaD Accumulator.'
.tl 'Opcodes''#=$09 a=$19 zm=$39 zmx=$59 zmy=$79 ind=$99 inx=$B9 iny=$D9'
.tl 'Flags''N        Z  '
.LP
The LDA instruction loads the value from the operand, into the Accumulator.
It also sets the N, and Z flags.

.LP
.tl 'LDY''LoaD value into Y register.'
.tl 'Opcodes''#=$0A a=$1A zm=$3A zmx=$5A ind=$7A inx=$9A'
.tl 'Flags''N        Z  '
.LP
The LDY instruction loads the value from the operand, into the Y register.
It also sets the N, and Z flags.

.LP
.tl 'LDX''LoaD value into X register.'
.tl 'Opcodes''#=$0B a=$1B zm=$3B zmx=$5B ind=$7B inx=$9B'
.tl 'Flags''N        Z  '
.LP
The LDX instruction loads the value from the operand, into the X register.
It also sets the N, and Z flags.

.LP
.tl 'TAB''Transfer value from the Accumulator, to the B register.'
.tl 'Opcode''$0C'
.tl 'Flags''N        Z  '
.LP
The TAB instruction transfers the value that is in the Accumulator, to the
B register. It also sets the N, and Z flags.
.bp +1
.LP
.tl 'LDB''LoaD value into B register.'
.tl 'Opcodes''#=$0E a=$1E zm=$3E zmx=$5E zmy=$7E ind=$9E inx=$BE iny=$DE'
.tl 'Flags''N        Z  '
.LP
The LDB instruction loads the value from the operand, into the B register.
It also sets the N, and Z flags.

.LP
.tl 'JMP''JuMP to memory address.'
.tl 'Opcodes''a=$10 zm=$D0 ind=$04 inx=$14 iny=$24'
.LP
The JMP instruction sets the program counter to the address, specified by
the operand.

.LP
.tl 'SBC''SuBtract with Carry.'
.tl 'Opcodes''#=$11 a=$13 zm=$15'
.tl 'Flags''N V      Z C'
.LP
The SBC instruction subtracts the operand with the accumulator, and then
stores the result back into the accumulator. If the carry flag is set,
then it borrows from the carry flag along with the sum.

.LP
.tl 'SAB''Subtract Accumulator, and B with carry.'
.tl 'Opcode''$12'
.tl 'Flags''N V      Z C'
.LP
The SAB instruction is just like the SBC instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'PLB''PuLl value from the stack, into the B register.'
.tl 'Opcode''$16'
.LP
The PLB instruction pulls/pops the number of bytes specified, off the
stack, and into the B register.

.LP
.tl 'PLP''PuLl value from the stack, into the Processor status register.'
.tl 'Opcode''$18'
.LP
The PLB instruction pulls/pops the number of bytes specified, off the
stack, and into the Processor status register.

.LP
.tl 'TBA''Transfer value from the B register to the Accumulator.'
.tl 'Opcode''$1C'
.tl 'Flags''N        Z  '
.LP
The TBA instruction transfers the value that is in the B register, to the
Accumulator. It also sets the N, and Z flags.

.LP
.tl 'JSR''Jump to SubRoutine.'
.tl 'Opcodes''zm=$20 ind=$34 inx=$44 iny=$54'
.LP
The JSR instruction pushes the current value of the program counter, onto
the stack, and then sets the program counter to the address, specified by
the operand.

.LP
.tl 'AND''bitwise AND accumulator.'
.tl 'Opcodes''#=$21 a=$23 zm=$25'
.tl 'Flags''N        Z  '
.LP
The AND instruction takes an operand, and ANDs it with the accumulator,
then saves the results back into the accumulator.
.bp +1
.LP
.tl 'ABA''bitwise And Accumulator, with the B register.'
.tl 'Opcode''$22'
.tl 'Flags''N        Z  '
.LP
The ABA instruction is just like the AND instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'CPB''ComPare the B register, with an operand.'
.tl 'Opcodes''#=$26 a=$36 zm=$46 ind=$56 inx=$66 iny=$76'
.tl 'Flags''N V      Z C'
.LP
The CPB instruction compares the value in the B register, with an operand,
and sets the flags accordingly. It compares the two values by subtracting
them.

.LP
.tl 'STT''STart a Thread.'
.tl 'Opcode''$28'
.LP
The STT instruction, sets the current running threads register, and
then has the threads read their thread vector. The current running
threads register is an 8 bit register, that states which threads
are running currently, the first 7 bits of the register states
which of the 7 other threads are running, the remaining 16 bits
of the operand, if specified, are used to tell the instruction
which core to start, and are read bytewise, rather than bitwise.
This instruction will not be implemented, if the core
count, and thread count are both 1, otherwise, it will.

.LP
.tl 'STA''STore the Accumulator, into memory.'
.tl 'Opcodes''a=$29 zm=$49 zmx=$69 zmy=$89 ind=$A9 inx=$C9 iny=$E9'
.LP
The STA instruction writes the value of the Accumulator, into a memory
address.

.LP
.tl 'STY''STore the Y register, into memory.'
.tl 'Opcodes''a=$2A zm=$4A zmx=$6A ind=$8A inx=$AA'
.LP
The STY instruction writes the value of the Y register, into a memory
address.

.LP
.tl 'STX''STore the X register, into memory.'
.tl 'Opcodes''a=$2B zm=$4B zmx=$6B ind=$8B inx=$AB'
.LP
The STX instruction writes the value of the X register, into a memory
address.

.LP
.tl 'TAY''Transfer value from the Accumulator, to the Y register.'
.tl 'Opcode''$2C'
.tl 'Flags''N        Z  '
.LP
The TAY instruction transfers the value that is in the Accumulator, to the
Y register. It also sets the N, and Z flags.

.LP
.tl 'STB''STore the B register, into memory.'
.tl 'Opcodes''a=$2E zm=$4E zmx=$6E zmy=$8E ind=$AE inx=$CE iny=$EE'
.LP
The STB instruction writes the value of the B register, into a memory
address.

.LP
.tl 'BPO''Branch if POsitive.'
.tl 'Opcodes''a=$30 zm=$64'
.LP
The BPO instruction will branch, if the Negative flag is cleared.
.bp +1
.LP
.tl 'ORA''bitwise OR Accumulator.'
.tl 'Opcodes''#=$31 a=$33 zm=$35'
.tl 'Flags''N        Z  '
.LP
The ORA instruction takes an operand, and ORs it with the accumulator,
then saves the results back into the accumulator.

.LP
.tl 'OAB''bitwise Or Accumulator, with the B register.'
.tl 'Opcode''$32'
.tl 'Flags''N        Z  '
.LP
The OAB instruction is just like the ORA instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'SEI''SEt the Interrupt flag.'
.tl 'Opcode''$38'
.tl 'Flags''        I    '
.LP
The SEI instruction, sets the Interrupt flag, and thus disabling
maskable interrupts.

.LP
.tl 'TYA''Transfer value from the Y register to the Accumulator.'
.tl 'Opcode''$3C'
.tl 'Flags''N        Z  '
.LP
The TYA instruction transfers the value that is in the Y register, to the
Accumulator. It also sets the N, and Z flags.

.LP
.tl 'BNG''Branch if NeGative.'
.tl 'Opcodes''a=$40 zm=$74'
.LP
The BNG instruction will branch, if the Negative flag is set.

.LP
.tl 'XOR''bitwise XOR accumulator.'
.tl 'Opcodes''#=$41 a=$43 zm=$45'
.tl 'Flags''N        Z  '
.LP
The XOR instruction takes an operand, and XORs it with the accumulator,
then saves the results back into the accumulator.

.LP
.tl 'XAB''bitwise Xor Accumulator, with the B register.'
.tl 'Opcode''$42'
.tl 'Flags''N        Z  '
.LP
The XAB instruction is just like the XOR instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'CLI''CLear the Interrupt flag.'
.tl 'Opcode''$48'
.tl 'Flags''        I    '
.LP
The CLI instruction, clears the Interrupt flag, and thus enabling
maskable interrupts.

.LP
.tl 'TAX''Transfer value from the Accumulator to the X register.'
.tl 'Opcode''$4C'
.tl 'Flags''N        Z  '
.LP
The TAX instruction transfers the value that is in the Accumulator, to the
X register. It also sets the N, and Z flags.

.LP
.tl 'BCS''Branch if Carry Set.'
.tl 'Opcodes''a=$50 zm=$84'
.LP
The BCS instruction will branch, if the Carry flag is set.

.LP
.tl 'LSL''Logical Shift Left accumulator.'
.tl 'Opcodes''#=$51 a=$53 zm=$55'
.tl 'Flags''N        Z C'
.LP
The LSL instruction takes an operand, and shifts the accumulator left by
the number of bits from the operand, then saves the results back into the
accumulator. The Carry flag is set whenever a one is shifted out of the
accumulator.

.LP
.tl 'LLB''Logical shift Left accumulator, with the B register.'
.tl 'Opcode''$52'
.tl 'Flags''N        Z C'
.LP
The LLB instruction is just like the LSL instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'SEC''SEt the Carry flag.'
.tl 'Opcode''$58'
.tl 'Flags''            C'
.LP
The SEC instruction, sets the Carry flag.

.LP
.tl 'TXA''Transfer value from the X register to the Accumulator.'
.tl 'Opcode''$5C'
.tl 'Flags''N        Z  '
.LP
The TXA instruction transfers the value that is in the X register, to the
Accumulator. It also sets the N, and Z flags.

.LP
.tl 'BCC''Branch if Carry Clear.'
.tl 'Opcodes''a=$60 zm=$94'
.LP
The BCC instruction will branch, if the Carry flag is cleared.

.LP
.tl 'LSR''Logical Shift Right accumulator.'
.tl 'Opcodes''#=$61 a=$63 zm=$65'
.tl 'Flags''N        Z C'
.LP
The LSR instruction takes an operand, and shifts the accumulator right by
the number of bits from the operand, then saves the results back into the
accumulator. The Carry flag is set whenever a one is shifted out of the
accumulator.

.LP
.tl 'LRB''Logical shift Right accumulator, with the B register.'
.tl 'Opcode''$62'
.tl 'Flags''N        Z C'
.LP
The LRB instruction is just like the LSR instruction, except that
it uses the B register as an operand, rather than memory.
.bp +1
.LP
.tl 'CLC''CLear the Carry flag.'
.tl 'Opcode''$68'
.tl 'Flags''            C'
.LP
The CLC instruction, clears the Carry flag.

.LP
.tl 'TYX''Transfer value from the Y register to the X register.'
.tl 'Opcode''$6C'
.tl 'Flags''N        Z  '
.LP
The TYX instruction transfers the value that is in the Y register, to the
X register. It also sets the N, and Z flags.

.LP
.tl 'BEQ''Branch if EQual.'
.tl 'Opcodes''a=$70 zm=$A4'
.LP
The BEQ instruction will branch, if the Zero flag is set.

.LP
.tl 'ROL''ROtate Left accumulator.'
.tl 'Opcodes''#=$71 a=$73 zm=$75'
.tl 'Flags''N        Z C'
.LP
The ROL instruction takes an operand, and rotates the accumulator left by
the number of bits from the operand, then saves the results back into the
accumulator. The Carry flag is set whenever a one is shifted out of the
accumulator.

.LP
.tl 'RLB''Rotate Left accumulator, with the B register.'
.tl 'Opcode''$72'
.tl 'Flags''N        Z C'
.LP
The RLB instruction is just like the ROL instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'SSP''Set the Stack Protection flag.'
.tl 'Opcode''$78'
.tl 'Flags''      S      '
.LP
The SSP instruction, sets the Stack protection flag.

.LP
.tl 'TXY''Transfer value from the X register to the Y register.'
.tl 'Opcode''$7C'
.tl 'Flags''N        Z  '
.LP
The TXY instruction transfers the value that is in the X register, to the
Y register. It also sets the N, and Z flags.
.bp +1
.LP
.tl 'BNE''Branch if Not Equal.'
.tl 'Opcodes''a=$80 zm=$B4'
.LP
The BNE instruction will branch, if the Zero flag is cleared.

.LP
.tl 'ROR''ROtate Right accumulator.'
.tl 'Opcodes''#=$81 a=$83 zm=$85'
.tl 'Flags''N        Z C'
.LP
The ROR instruction takes an operand, and rotates the accumulator right by
the number of bits from the operand, then saves the results back into the
accumulator. The Carry flag is set whenever a one is shifted out of the
accumulator.

.LP
.tl 'RRB''Rotate Right accumulator, with the B register.'
.tl 'Opcode''$82'
.tl 'Flags''N        Z C'
.LP
The RRB instruction is just like the ROR instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'INY''INcrement the Y register.'
.tl 'Opcode''$86'
.tl 'Flags''N        Z  '
.LP
The INY instruction increments the Y register.

.LP
.tl 'CSP''Clear the Stack Protection flag.'
.tl 'Opcode''$88'
.tl 'Flags''      S      '
.LP
The CSP instruction, clears the Stack protection flag.

.LP
.tl 'TSX''Transfer value from the Stack pointer to the X register.'
.tl 'Opcode''$8C'
.tl 'Flags''N        Z  '
.LP
The TSX instruction transfers the value that is in the Stack pointer, to the
X register. It also sets the N, and Z flags.

.LP
.tl 'BVS''Branch if oVerflow Set.'
.tl 'Opcodes''a=$90 zm=$C4'
.LP
The BVS instruction will branch, if the Overflow flag is set.

.LP
.tl 'MUL''MULtiply accumulator, by operand.'
.tl 'Opcodes''#=$91 a=$93 zm=$95'
.tl 'Flags''N V      Z C'
.LP
The MUL instruction takes an operand, and multiplys the accumulator by the
operand, then saves the results back into the accumulator. If the Carry flag
is set, then it will add one to the result.

.LP
.tl 'MAB''Multiply Accumulator, with the B register.'
.tl 'Opcode''$92'
.tl 'Flags''N V      Z C'
.LP
The MAB instruction is just like the MUL instruction, except that
it uses the B register as an operand, rather than memory.
.bp +1
.LP
.tl 'DEY''DEcrement the Y register.'
.tl 'Opcode''$96'
.tl 'Flags''N        Z  '
.LP
The DEY instruction decrements the Y register.

.LP
.tl 'SEV''SEt the oVerflow flag.'
.tl 'Opcode''$98'
.tl 'Flags''  V          '
.LP
The SEV instruction, sets the Overflow flag.
.LP
.tl 'TXS''Transfer value from the X register to the Stack pointer.'
.tl 'Opcode''$9C'
.tl 'Flags''N        Z  '
.LP
The TXS instruction transfers the value that is in the X register, to the
Stack pointer, if the prefix byte has a high nibble of $1, then it will turn
into an immediate data instruction, and the operand will set the Stack Bank
Register, the SBR is a 16 bit register that states where the starting address
of the Stack pointer is. It also sets the N, and Z flags.

.LP
.tl 'BVC''Branch if oVerflow Clear.'
.tl 'Opcodes''a=$A0 zm=$D4'
.LP
The BVC instruction will branch, if the Overflow flag is cleared.

.LP
.tl 'DIV''DIVide accumulator, by operand.'
.tl 'Opcodes''#=$A1 a=$A3 zm=$A5'
.tl 'Flags''N V      Z  '
.LP
The DIV instruction takes an operand, and divides the accumulator by the
operand, then saves the results back into the accumulator.

.LP
.tl 'DAB''Divide Accumulator, with the B register.'
.tl 'Opcode''$A2'
.tl 'Flags''N V      Z  '
.LP
The DAB instruction is just like the DIV instruction, except that
it uses the B register as an operand, rather than memory. It also
let's you dab on all those lesser ISAs.

.LP
.tl 'INX''INcrement the X register.'
.tl 'Opcode''$A6'
.tl 'Flags''N        Z  '
.LP
The INX instruction increments the X register.

.LP
.tl 'CLV''CLear the oVerflow flag.'
.tl 'Opcode''$A8'
.tl 'Flags''  V          '
.LP
The CLV instruction, clears the Overflow flag.

.LP
.tl 'PHY''PusH the Y register.'
.tl 'Opcode''$AC'
.LP
The PHY instruction pushes the number of bytes specified, from the Y
register, onto the stack.

.LP
.tl 'RTS''ReTurn from Subroutine.'
.tl 'Opcodes''$B0'
.LP
The RTS instruction is the opposite of the JSR instruction,
in that it pulls from the stack, the address that JSR had pushed,
and places it in the program counter.

.LP
.tl 'CMP''CoMPare accumulator, with operand.'
.tl 'Opcodes''#=$B1 a=$B3 zm=$B5 ind=$F1 inx=$F3 iny=$F5'
.tl 'Flags''N V      Z C'
.LP
The CMP instruction compares the value in the B register, with an operand,
and sets the flags accordingly. It compares the two values by subtracting
them.

.LP
.tl 'CAB''Compare Accumulator, with the B register.'
.tl 'Opcode''$B2'
.tl 'Flags''N V      Z C'
.LP
The CAB instruction is just like the CMP instruction, except that
it uses the B register as an operand, rather than memory.

.LP
.tl 'DEX''DEcrement the X register.'
.tl 'Opcode''$B6'
.tl 'Flags''N        Z  '
.LP
The DEX instruction decrements the X register.

.LP
.tl 'ENT''ENd a Thread.'
.tl 'Opcode''$B8'
.LP
The ENT instruction, clears the bits in the Current Running Threads register,
specified by the operand.

.LP
.tl 'CPY''ComPare the B register, with an operand.'
.tl 'Opcodes''#=$BA a=$CA zm=$DA ind=$EA inx=$FA'
.tl 'Flags''N V      Z C'
.LP
The CPY instruction compares the value in the Y register, with an operand,
and sets the flags accordingly. It compares the two values by subtracting
them.

.LP
.tl 'CPX''ComPare the X register, with an operand.'
.tl 'Opcodes''#=$BB a=$CB zm=$DB ind=$EB inx=$FB'
.tl 'Flags''N V      Z C'
.LP
The CPX instruction compares the value in the X register, with an operand,
and sets the flags accordingly. It compares the two values by subtracting
them.

.LP
.tl 'PLY''PuLl value from the stack, into the Y register.'
.tl 'Opcode''$BC'
.LP
The PLY instruction pulls/pops the number of bytes specified, off the
stack, and into the Y register.

.LP
.tl 'RTI''ReTurn from Interrupt.'
.tl 'Opcodes''$C0'
.LP
The RTI instruction is like the RTS instruction, in that it pulls from the stack,
the previous value of the processor status register, and the previous address that
had been pushed from an interrupt, and places them into, the processor status register,
and the program counter, respectivly.
.bp +1
.LP
.tl 'INC''INCrement accumulator, or memory address.'
.tl 'Opcodes''A=$C1 a=$C3 zm=$C5'
.tl 'Flags''N        Z  '
.LP
The INC instruction increments either the accumulator, or the contents of a
memory address.

.LP
.tl 'IAB''Increment Accumulator, with the B register.'
.tl 'Opcode''$C2'
.tl 'Flags''N        Z  '
.LP
The IAB instruction increments both the accumulator, and the B register.

.LP
.tl 'WAI''WAIt for an interrupt.'
.tl 'Opcode''$C8'
.LP
The WAI instruction, puts the CPU into a sleep mode, where it is only
awake enough to be able to respond to an interrupt, and as such, not only
uses less power, but also allows for very fast interrupt response times.

.LP
.tl 'PHX''PusH the X register.'
.tl 'Opcode''$CC'
.LP
The PHX instruction pushes the number of bytes specified, from the X
register, onto the stack.

.LP
.tl 'DEC''DECrement accumulator, or memory address.'
.tl 'Opcodes''A=$D1 a=$D3 zm=$D5'
.tl 'Flags''N        Z  '
.LP
The DEC instruction decrements either the accumulator, or the contents of a
memory address.

.LP
.tl 'DBA''Dncrement Accumulator, with the B register.'
.tl 'Opcode''$D2'
.tl 'Flags''N        Z  '
.LP
The DBA instruction decrements both the accumulator, and the B register.

.LP
.tl 'PLX''PuLl value from the stack, into the X register.'
.tl 'Opcode''$DC'
.LP
The PLX instruction pulls/pops the number of bytes specified, off the
stack, and into the X register.

.LP
.tl 'JSL''Jump to Subroutine, Long addressing.'
.tl 'Opcode''a=$E0'
.LP
The JSL instruction, is just like the JSR instruction, except that it pushes
a 64 bit address onto the stack.

.LP
.tl 'ASR''Arithmetic Shift Right accumulator.'
.tl 'Opcodes''#=$E1 a=$E3 zm=$E5'
.tl 'Flags''N        Z C'
.LP
The ASR instruction takes an operand, and shifts the accumulator right by
the number of bits from the operand, then saves the results back into the
accumulator. But unlike LSR, ASR shifts in the sign bit into the accumulator.
The Carry flag is set whenever a one is shifted out of the accumulator.

.LP
.tl 'ARB''Arithmetic shift Right accumulator, with the B register.'
.tl 'Opcode''$E2'
.tl 'Flags''N        Z C'
.LP
The ARB instruction is just like the ASR instruction, except that
it uses the B register as an operand, rather than memory.
.bp +1
.LP
.tl 'NOP''No OPeration.'
.tl 'Opcode''$E8'
.LP
The NOP instruction does what you think it does, it does nothing at all.

.LP
.tl 'PHA''PusH the Accumulator.'
.tl 'Opcode''$EC'
.LP
The PHA instruction pushes the number of bytes specified, from the
Accumulator, onto the stack.

.LP
.tl 'RTL''ReTurn from subroutine, Long addressing.'
.tl 'Opcodes''$F0'
.LP
The RTL instruction, is just like the RTS instruction, except that it pulls
a 64 bit address from the stack.

.LP
.tl 'BRK''BReaKpoint.'
.tl 'Opcode''$F8'
.LP
The BRK instruction triggers a software interrupt, which pushes the value
in the processor status register, and the address in the program counter,
onto the stack, then reads the BRK vector, and then jumps to the address
located there.

.LP
.tl 'PLA''PuLl value from the stack, into the Accumulator.'
.tl 'Opcode''$FC'
.LP
The PLA instruction pulls/pops the number of bytes specified, off the
stack, and into the accumulator.