-
Notifications
You must be signed in to change notification settings - Fork 0
/
opcodes.txt
882 lines (723 loc) · 42.3 KB
/
opcodes.txt
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
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
7. CPU ORGANIZATION.
A Sony SPC700 series is used in the CPU core of the SFX sound source.
it is possible to access and address space of 64K bytes in the SPC
series CPU. Address classification of the memory space is made
according to purpose: and addresses 0000 - 00ff are called page 0
and addresses 0100 - 01ff are called page 1.
In regard to the data in this region, when direct page designation
is carried out by direct page flag (P) within the program status
word, it is possible to carry out data processing in wide-ranging
addressing modes with a small number of cycles.
Within the CPU there are the universal registers A,X and Y, program
status word (PSW) of the various flags, program counter (PC), and
stack pointer (SP).
The A register is operable by the greatest number of commands,
and becomes and 8-bit operation accumulator. When 16-bit
operations are carried out, it becomes paired with Y register
and becomes the lower lever 8-bit register of the 16-bit
accumulator.
The X and Y registers, in addition to their function as universal
registers, are used in various operations, such as the function
as index register of various index addressing modes, the function
as dual-address command source, destination address register, etc.
In the command set there are single address commands which carry
out arithmetic and logical operations centered in the A register
and dual address commands which can designate random address
within the direct page as source address and destination addresses.
In regard to bit processing diversified by control purpose. Boolean
bit operation commands are applicable to the 8K byte range of
data of addresses 0000 - 1fff. Moreover, in regard to the bits
within the total space of the 64K bytes, commands of multiple bit
test and set, test and reset are provided for. For the purpose of
data which must be systematized or in order to carry out data
processing rapidly. It is possible to operate 16-bit data with a
single command. Addition, subtraction, comparison and transference
are possible between two byte of continuous 16-bit data within the
direct page and the paired Y register and A register. In addition
increment and decrement of continuous 16-bit data within the
direct page are possible.
There are multiplication and division commands for the purpose
of rapid data processing and processing of data ina variety of
forms. Multiplication is 8-bit x 8-bit with no sign and is
carried out with the multiplicand stored in the Y register and
the multiplier stored in the A register; the result is entered
into the Y, A 16-bit accumulator. Division is 16bits/8bits with
no sign and carried out with the dividend stored in the Y, A 16
bit accumulator and the divisor stored in the X register : the
resulting quotient is entered into the A register and the
remainder is entered intro the Y register.
In the processing of decimal data, there are decimal (addition,
subtraction) correcting commands in regard to the results of
both addition and subtraction.
In regard to branched commands, there are relative branched
commands according to the conditions of the various status
flags, branched commands according to the conditions of set
or reset of random bits with the direct page, etc. In addition,
in regard to looped branched commands, there are comparison
branched commands and subtraction branched commands, and for
these there are two types of addressing modes.
In regard to subroutine call commands, there are subroutine
address direct designation three-byte call commands within
the 64K bytes. two-byte call commands for calling subroutines
of specific areas, and 16 portion one-byte call commands using
call table: it is possible to improve byte efficiency through
proper usage in response to the frequency of subroutine use.
1. CPU REGISTERS
Withing the CPU are the registers necessary for the execution of
the various commands. These are an A register (note : functions
as an 8-bit accumulator). X register, Y register (8-bit universal
register which can also be used as index register). PSW ( program
status word). SP (stack pointer), etc. These are all 8-bit
registers but the PC (program counter) is made up of 16 bits.
------------------------------
P|C | Program Counter (16 bits)
------------------------------
----------------
| A | A Register (8 bits)
----------------
------------------------------
Y | A | (Y,A Paired 16-bit Accumulator)
------------------------------ (16 bits)
----------------
| X | X Register (8 bits)
----------------
----------------
| Y | Y Register (8 bits)
----------------
----------------
| SP | Stack Pointer (8 bits)
----------------
----------------
| PSW | Program Status Word (8 bits)
----------------
/ /
---------------
|N|V|P|-|H|-|Z|C|
---------------
N = Negative Flag
V = Overflow Flag
P = Direct Page Flag
H = Half Carry Flag
Z = Zero Flag
C = Carry Flag (Bit Accumulator)
(1) A REGISTER
This register is used as an 8-bit accumulator.
At times of 16-bit operation commands. it becomes a register for
retaining low byte data in the 16-bit accumulator made up of this
paired with the Y register. When operation commands are issued, it
becomes the multiplier register and low byte data of the product is
entered. When division commands are issued, paired with the Y register
it formulates the dividend and the resulting quotient is entered.
(2) X REGISTER
In addition to its role as a universal data register, it also
functions as an index register when index addressing is being
carried out. In addition, it is also used as a two-address command
destination address register and X register indirect address register.
In division commands, it becomes the divisor register.
(3) Y REGISTER
In addition to its role as a universal data register, it also functions
as an index register when index addressing is being carried out, In
addition, it is also used as a two-address command source address
register.
When carrying out 16-bit operation commands, it becomes the register
which retains the high byte data of the 16-bit accumulator which is
made up of the pairing of this with the A register. When
multiplication commands are being carried out, it becomes the dividend
register and the product high byte data is entered.
When carrying out division commands, paired with the A register it
formulates the dividend, and the resulting remained is entered.
(4) PROGRAM COUNTER (PC)
The program counter is made up of 16 bits and has an address region
of 64K bytes. The upper level 8 bits are called PCH and the lower
level 8 bits are referred to as PCL-
Normally, it would have the address to be executed next and would
be incremented only the number of bytes necessary fo the command
fetched.
When there is a branching command in the midst of the program the address
of the branch destination would be stored in the program counter. When
there is a reset (negative POR) input, reset vector which are in
addresses FFFF and FFFE enter respectively PCH and PCL and branching
takes place.
(5) STACK POINTER (SP)
The stack pointer is used to send data to RAM or to recover from
RAM when subroutine call, push (PUSH), pop (POP), or return (RET)
commands are being carried out. The address region indicated by
the stack pointer is within page 1 (addresses 0100-01ff)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
--------------------------------------
0 0 0 0 0 0 0 1| SP Values |
--------------------------------------
Fixed by Hardware Determined by the Program.
When sending data to RAM, the stack pointer decreases by one
after sending data (post decrement) and increases by one prior
to restoring data (pre-increment).
The diversified activities of the stack pointer are summarized below:
SUB-ROUTINE CALLS
--------------------------------------------------------
|Stack Address| Activity | SP Value after sending|
--------------------------------------------------------
| SP | sending to PCH | SP-1 |
| SP-1 | sending to PCL | SP-2 |
--------------------------------------------------------
RESTORING FROM SUB-ROUTINE
--------------------------------------------------------
|Stack Address| Activity | SP Value after sending|
--------------------------------------------------------
| SP+1 | sending to PCH | SP+1 |
| SP+1 | sending to PCL | SP+2 |
--------------------------------------------------------
To send to A register, X register, Y register, PSW to and from
the stack, the commands PUSH and POP can be used.
PUSH A (X,Y, PSW)
---------------------------------------------------------
|Stack Address| Activity | SP Value after sending|
---------------------------------------------------------
| SP |sending of A (X..)| SP-1 |
---------------------------------------------------------
POP A (X,Y, PSW)
---------------------------------------------------------
|Stack Address| Activity | SP Value after sending|
---------------------------------------------------------
| SP+1 |sending of A (X..)| SP+1 |
---------------------------------------------------------
(6) PROGRAM STATUS WORD (PSW)
The program status word is made up of the various flags which are
set and reset according to the results of the execution of 8-bit
register commands and the various flags which determine the
activities of the CPU. When reset it becomes "000-0-00".
7 6 5 4 3 2 1 0
-----------------------------------------------
| N V P - H - Z C |
----------------------------------------------
Carry Flag (C).
After operation execution, this is set when there has been a carry
from the uppermost bit of the arithmetic logic unit (ALU) or when
there has been no borrow. It is even altered with shift or rotate
commands. It also acts as an bit accumulator of Boolean bit operation
commands. It is set at the SETC commands and reset at the CLRC commands.
In addition, the carry flag inverts at the NOTC commands.
Zero Flag (Z)
Alter operation execution, this flag is set when the result is
zero and is reset whens the result is not zero. Even with 16-bit
operation commands, zero detection is carried out. It is possible
to carry out tests with conditional branching commands.
Half Carry Flag (H)
After operation execution, this flag is set when there has been
a carry from from bit 3 of the ALU to bit 4, or when there has
not been any borrow. There is no command to set, however, it is
reset by reset by means of the CLRV command. At his time, the
overflow flag is also set.
Direct Page Flag (P)
This is the flag which designates the direct page to which many
addressing mode are applicable, such as direct page addressing
etc. When 0, the direct page becomes the addresses of the
region 0000-00ff and when 1, it becomes the addresses of the
region 0100-01ff. It is set by the STEP command and reset by the
CLRP command.
Overflow Flag (V).
After arithmetic operation execution, this flag is set when
overflow or underflow has been produced. At this time, influence
is extended simultaneously to the H flag.
It is possible to carry out tests with conditional branching
commands.
Negative Flag (N)
After operation execution, this flag is set when the values of
the result of MSD is 1 and reset when that values is 0. It is
possible to carry out tests with conditional branching commands.
7.2. MEMORY SPACE.
It is possible for the Sound-CPU to address 64K bytes of memory.
Memory space is divide up according to purpose. From address
0000, 512 bytes are divided into two pages of 256-bytes units,
called zero page and page one. It is possible to access data
within these regions by means of numerous address modes, such
as direct page addressing, etc.
Page one is taken up by the stack.
7.2.1. Direct Pages (Zero Page, Page One)
By means of setting or resetting the direct page (P) flag
within the program status word. it is possible to designate
whether zero page or page one is to be made the direct page.
it is set up such that the data within this page can be treated
with fewer bytes, at higher speed and with more numerous types
of commands and addressing modes.
Stack Area
----------
The stack region is established in the RAM region within page
one. The uppermost byte of the stack address is fixed at 01.
The lowermost byte of the stack address must be given its
initial setting by the program.
7.2.2. Uppermost Page
Internal ROM Region
A mask ROM is installed within the Sound-CPU from FFC0H- FFFF. There
is a program in it which transmits data from the ROM cassette to the
256K bit RAM through the SCPU. This region is used by means of reset.
7.2.3. Area of Applicable Bit Operation Commands.
(i) The commands SET1 (set memory bit) and CLR1 (clear memory bit)
are applicable to one-bit data with the direct page.
(ii) The commands TSET1 (test and set bit) and TCLR1 ( test and
clear bit) are applicable to the total 64K byte region.
(iii) The Boolean operation commands (AND1, OR1, EOR1, MOV1, NOT1)
are applicable to the 8K byte region of 0000 - 1FFF.
Fig. 7.2.3. Region of Applicable Bit Operation Commands.
----------------------------------------------------------
0000 | | | | | | |
| | SET1, CLR1 | | AND1,OR1,EOR1, | | TSET1,TCLR1 |
| | applicable | | MOV1,NOT1 | | |
| | to direct | | | | |
00FF | | page. | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
01FF | ------------- | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
1FFF | ------------------ | |
| | |
| | |
| | |
| | |
| | |
| | |
7FFF | -------------
| | |
| | Unusable |
FFBF | | |
FFC0 | -------------
| | |
| | IPL-ROM |
| | |
FFFF | | |
----------------------------------------------------------
7.2.4. Direct Page Addressing
Since all of the addressing modes indicated in Table 7.2.4 are
applicable to the data of the direct page (P=0: addresses
0000-00FF P=1: address 0000 - 01FF) designated by the direct page
(P) flag. it is possible to manipulate the data in various ways.
In addition byte efficiency also improves due to the fact that
direct address designation is possible by one-byte data within
the command words. Moreover, since effective command cycles also
decrease data can be accessed more rapidly.
Table 7.2.4. Memory Access Addressing Effective Address
--------------------------------------------------------------------
#of Effective Addr. Region
Symbol | Addressing
Bytes 0000-01FF 1FFF >1FFF
--------------------------------------------------------------------
dp Direct Page 2 X X
dp+X X-Indexed Direct Page 2 X X
dp+Y Y-Indexed Direct Page 2 X X
(X) Indirect 1 X X
(X)+ Indirect Auto-increment 1 X X
dp,dp Direct Page to D.P. 3 X X
(X),(Y) Indirect Page to I.P. 1 X X
dp Inm Immediate Data to D.P. 3 X X
dp, bit Direct Page Bit 2 X X
dp,bit,rel Direct Page Bit Relative 3 X X
mem, bit Absolute Boolean Bit 3 X X
labs Absolute 3 X X X
labs+X X-indexed Absolute 3 X X X
labs+Y Y-indexed Absolute 3 X X X
(dp+X) X-indexed Indirect 2 X X X
(dp)+Y Indirect Y-indexed Indirect 2 X X X
--------------------------------------------------------------------
9. SUMMARY OF SPC700 COMMANDS.
An SPC700 series is used for the SFX sound source CPU. However,
standby and sleep modes can not be used.
The command set operand notation and explanation of command activity
are indicated in the table below. The upper portion of the table are
symbols necessary to operand description. These are symbols necessary
assembler description. In the lower portion of the table, the values
of the various operand are expressed as symbols. Assembler
descriptions are given as numerical values or labels.
Table 9.1. Command Operand Symbols and Meaning
Symbol
-----------------------------------------------
A A register
X X register
Y Y register
PSW Program status word
YA Y, A paired 16-bit register
PC Program counter
SP Stack pointer
( ) Indirect expression
( )+ Indirect auto-increment expression
# Immediate data
| Absolute address
/ Bit reversal
. Bit position indicator
( ) Indexed Indirect expression
H Hexadecimal notation
------------------------------------------------
inm 8-bit immediate data
dp Offset address within direct page
abs 16-bit absolute address
rel Relative offset complement value of 2
mem Boolean bit operation address
bit Bit location
MSB
X -----------------------
| | | | |0| |
-----------------------
\----X----/
MSB
Y -----------------------
| | | | |1| |
-----------------------
\----Y----/
upage Offset within U page
n Vector call number.
In giving an explanation of operations, in addition to the notations
and symbols above, the following symbols are also used.
Table 9.2. Symbols and Meaning of Operation Explanation
Symbol Meaning
---------------------------------------
N Negative flag
V Overflow flag
P Direct page flag
B Break flag
H Half carry flag
I Indirect master enable flag
Z Zero flag
C Carry flag
+ Addition
- Subtraction
: Comparison
AND Logic product
OR Logic sun
EOR Exclusive logic sun
* Multiplication
/ Division
Q Division quotient
R Division remainder
(d) Destination
(S) Source
--- Direction of data transmission
- - Data decrement
+ + Data increment
< < 1 bit shift left
> > 1 bit shift right
------------------------------
Note : The number of cycles of conditional branching commands are
appropriate to cases when there is no branching to the left side
and when there is branching to the right side.
Table 9.3. Explanation of Symbols in the Status Flag Column
-----------------------------------------------
Symbol Meaning
-----------------------------------------------
. No change
0 Cleared to 0
1 Set to 1
Flag name Set or cleared depending on result
-----------------------------------------------
1. 8-bit Data Transmission Commands. Group I
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
MOV A, #inm E8 2 2 A <- inm N......Z
MOV A, (X) E6 1 3 A <- (X) N......Z
MOV A, (X)+ BF 1 4 A <- (X) with auto inc N......Z
MOV A, dp E4 2 3 A <- (dp) N......Z
MOV A, dp+X F4 2 4 A <- (dp+X) N......Z
MOV A, labs E5 3 4 A <- (abs) N......Z
MOV A, labs+X F5 3 5 A <- (abs+X) N......Z
MOV A, labs+Y F6 3 5 A <- (abs+Y) N......Z
MOV A, (dp+X) E7 2 6 A <- ((dp+X+1)(dp+X)) N......Z
MOV A, (dp)+Y F7 2 6 A <- ((dp+1)(dp)+Y) N......Z
MOV X, #inm CD 2 2 X <- inm N......Z
MOV X, dp F8 2 3 X <- (dp) N......Z
MOV X, dp+Y F9 2 4 X <- (dp+Y) N......Z
MOV X, labs E9 3 4 X <- (abs) N......Z
MOV Y, #inm 8D 2 2 Y <- inm N......Z
MOV Y, dp EB 2 3 Y <- (dp) N......Z
MOV Y, dp+X FB 2 4 Y <- (dp+X) N......Z
MOV Y, labs EC 3 4 Y <- (abs) N......Z
------------------------------------------------------------------------
2. 8-BIT DATA TRANSMISSION COMMANDS. GROUP 2.
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
MOV (X),A C6 1 4 A -> (X) ........
MOV (X)+,A AF 1 4 A -> (X) with auto inc ........
MOV dp,A C4 2 4 A -> (dp) ........
MOV dp+X,A D4 2 5 A -> (dp+X) ........
MOV labs,A C5 3 5 A -> (abs) ........
MOV labs+X,A D5 3 6 A -> (abs+X) ........
MOV labs+Y,A D6 3 6 A -> (abs+Y) ........
MOV (dp+X),A C7 2 7 A -> ((dp+X+1)(dp+X)) ........
MOV (dp)+Y,A D7 2 7 A -> ((dp+1)(dp)+Y) ........
MOV dp,X D8 2 4 X -> (dp) ........
MOV dp+Y,X D9 2 5 X -> (dp+Y) ........
MOV labs,X C9 3 5 X -> (abs) ........
MOV dp,Y CB 2 4 X -> (dp) ........
MOV dp+X,Y DB 2 5 X -> (dp+X) ........
MOV labs,Y CC 3 5 X -> (abs) ........
------------------------------------------------------------------------
3. 8-BIT DATA TRANSMISSION COMMANDS, GROUP 3.
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
MOV A, X 7D 1 2 A <- X N......Z
MOV A, Y DD 1 2 A <- Y N......Z
MOV X, A 5D 1 2 X <- A N......Z
MOV Y, A FD 1 2 Y <- A N......Z
MOV X, SP 9D 1 2 X <- SP N......Z
MOV SP, X BD 1 2 SP <- X ........
MOV dp(d),dp(s) FA 3 5 (dp(d)) <- (dp(s)) ........
MOV dp,#inm 8F 3 5 (dp) <- inm ........
------------------------------------------------------------------------
4. 8-BIT ARITHMETIC OPERATION COMMANDS.
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
ADC A,#inm 88 2 2 A <- A+inm+C NV..H..ZC
ADC A,(X) 86 1 3 A <- A+(X)+C NV..H..ZC
ADC A,dp 84 2 3 A <- A+(dp)+C NV..H..ZC
ADC A,dp+X 94 2 4 A <- A+(dp+X)+C NV..H..ZC
ADC A,labs 85 3 4 A <- A+(abs)+C NV..H..ZC
ADC A,labs+X 95 3 5 A <- A+(abs+X)+C NV..H..ZC
ADC A,labs+Y 96 3 5 A <- A+(abs+Y)+C NV..H..ZC
ADC A,(dp+X) 87 2 6 A <- A+((dp+X+1)(dp+X)) NV..H..ZC
ADC A,(dp)+Y 97 2 6 A <- A+((dp+1)(dp)+Y) NV..H..ZC
ADC (X),(Y) 99 1 5 (X) <- (X)+(Y)+C NV..H..ZC
ADC dp(d),dp(s) 89 3 6 (dp(d))<-(dp(d))+(dp(s))+C NV..H..ZC
ADC dp,#inm 98 3 5 (dp) <- (dp)+inm+C NV..H..ZC
------------------------------------------------------------------------
SBC A,#inm A8 2 2 A <- A-inm-!C NV..H..ZC
SBC A,(X) A6 1 3 A <- A-(X)-!C NV..H..ZC
SBC A,dp A4 2 3 A <- A-(dp)-!C NV..H..ZC
SBC A,dp+X B4 2 4 A <- A-(dp+X)-!C NV..H..ZC
SBC A,labs A5 3 4 A <- A-(abs)-!C NV..H..ZC
SBC A,labs+X B5 3 5 A <- A-(abs+X)-!C NV..H..ZC
SBC A,labs+Y B6 3 5 A <- A-(abs+Y)-!C NV..H..ZC
SBC A,(dp+X) A7 2 6 A <- A-((dp+X+1)(dp+X))-!C NV..H..ZC
SBC A,(dp)+Y B7 2 6 A <- A-((dp+1)(dp)+Y)-!C NV..H..ZC
SBC (X),(Y) B9 1 5 (X) <- (X)-(Y)-!C NV..H..ZC
SBC dp(d),dp(s) A9 3 6 (dp(d))<-(dp(d))-(dp(s))-!C NV..H..ZC
SBC dp,#inm B8 3 5 (dp) <- (dp)-inm-!C NV..H..ZC
------------------------------------------------------------------------
CMP A,#inm 68 2 2 A-inm N......ZC
CMP A,(X) 66 1 3 A-(X) N......ZC
CMP A,dp 64 2 3 A-(dp) N......ZC
CMP A,dp+X 74 2 4 A-(dp+X) N......ZC
CMP A,labs 65 3 4 A-(abs) N......ZC
CMP A,labs+X 75 3 5 A-(abs+X) N......ZC
CMP A,labs+Y 76 3 5 A-(abs+Y) N......ZC
CMP A,(dp+X) 67 2 6 A-((dp+X+1)(dp+X)) N......ZC
CMP A,(dp)+Y 77 2 6 A-((dp+1)(dp)+Y) N......ZC
CMP (X),(Y) 79 1 5 (X)-(Y) N......ZC
CMP dp(d),dp(s) 69 3 6 (dp(d))-(dp(s)) N......ZC
CMP dp,#inm 78 3 5 (dp)-inm N......ZC
CMP X,#inm C8 2 2 X-inm N......ZC
CMP X,dp 3E 2 3 X-(dp) N......ZC
CMP X,labs 1E 3 4 X-(abs) N......ZC
CMP Y,#inm AD 2 2 Y-inm N......ZC
CMP Y,dp 7E 2 3 Y-(dp) N......ZC
CMP Y,labs 5E 3 4 Y-(abs) N......ZC
------------------------------------------------------------------------
5. 8-BIT LOGIC OPERATION COMMANDS.
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
AND A,#inm 28 2 2 A <- A AND inm N......Z.
AND A,(X) 26 1 3 A <- A AND (X) N......Z.
AND A,dp 24 2 3 A <- A AND (dp) N......Z.
AND A,dp+X 34 2 4 A <- A AND (dp+X) N......Z.
AND A,labs 25 3 4 A <- A AND (abs) N......Z.
AND A,labs+X 35 3 5 A <- A AND (abs+X) N......Z.
AND A,labs+Y 36 3 5 A <- A AND (abs+Y) N......Z.
AND A,(dp+X) 27 2 6 A <- A AND ((dp+X+1)(dp+X)) N......Z.
AND A,(dp)+Y 37 2 6 A <- A AND ((dp+1)(dp)+Y) N......Z.
AND (X),(Y) 39 1 5 (X) <- (X) AND (Y) N......Z.
AND dp(d),dp(s) 29 3 6 (dp(d))<-(dp(d)) AND (dp(s)) N......Z.
AND dp,#inm 38 3 5 (dp) <- (dp) AND inm N......Z.
------------------------------------------------------------------------
OR A,#inm 08 2 2 A <- A OR inm N......Z.
OR A,(X) 06 1 3 A <- A OR (X) N......Z.
OR A,dp 04 2 3 A <- A OR (dp) N......Z.
OR A,dp+X 14 2 4 A <- A OR (dp+X) N......Z.
OR A,labs 05 3 4 A <- A OR (abs) N......Z.
OR A,labs+X 15 3 5 A <- A OR (abs+X) N......Z.
OR A,labs+Y 16 3 5 A <- A OR (abs+Y) N......Z.
OR A,(dp+X) 07 2 6 A <- A OR ((dp+X+1)(dp+X)) N......Z.
OR A,(dp)+Y 17 2 6 A <- A OR ((dp+1)(dp)+Y) N......Z.
OR (X),(Y) 19 1 5 (X) <- (X) OR (Y) N......Z.
OR dp(d),dp(s) 09 3 6 (dp(d))<-(dp(d)) OR (dp(s)) N......Z.
OR dp,#inm 18 3 5 (dp) <- (dp) OR inm N......Z.
------------------------------------------------------------------------
EOR A,#inm 48 2 2 A <- A EOR inm N......Z.
EOR A,(X) 46 1 3 A <- A EOR (X) N......Z.
EOR A,dp 44 2 3 A <- A EOR (dp) N......Z.
EOR A,dp+X 54 2 4 A <- A EOR (dp+X) N......Z.
EOR A,labs 45 3 4 A <- A EOR (abs) N......Z.
EOR A,labs+X 55 3 5 A <- A EOR (abs+X) N......Z.
EOR A,labs+Y 56 3 5 A <- A EOR (abs+Y) N......Z.
EOR A,(dp+X) 47 2 6 A <- A EOR ((dp+X+1)(dp+X)) N......Z.
EOR A,(dp)+Y 57 2 6 A <- A EOR ((dp+1)(dp)+Y) N......Z.
EOR (X),(Y) 59 1 5 (X) <- (X) EOR (Y) N......Z.
EOR dp(d),dp(s) 49 3 6 (dp(d))<-(dp(d)) EOR (dp(s)) N......Z.
EOR dp,#inm 58 3 5 (dp) <- (dp) EOR inm N......Z.
------------------------------------------------------------------------
6. ADDITION & SUBTRACTION COMMANDS.
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
INC A BC 1 2 ++ A N......Z.
INC dp AB 2 4 ++ (dp) N......Z.
INC dp+X BB 2 5 ++ (dp+X) N......Z.
INC labs AC 3 5 ++ (abs) N......Z.
INC X 3D 1 2 ++ X N......Z.
INC Y FC 1 2 ++ Y N......Z.
-----------------------------------------------------------------------
DEC A 9C 1 2 -- A N......Z.
DEC dp 8B 2 4 -- (dp) N......Z.
DEC dp+X 9B 2 5 -- (dp+X) N......Z.
DEC labs 8C 3 5 -- (abs) N......Z.
DEC X 1D 1 2 -- X N......Z.
DEC Y DC 1 2 -- Y N......Z.
-----------------------------------------------------------------------
7. SHIFT, ROTATION COMMANDS
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
ASL A 1C 1 2 C << A <<0 N......ZC
ASL dp 0B 2 4 C << (dp) <<0 N......ZC
ASL dp+X 1B 2 5 C << (dp+X) <<0 N......ZC
ASL labs CC 3 5 C << (abs) <<0 N......ZC
-----------------------------------------------------------------------
LSR A 5C 1 2 0 >> A <<C N......ZC
LSR dp 4B 2 4 0 >> (dp) <<C N......ZC
LSR dp+X 5B 2 5 0 >> (dp+X) <<C N......ZC
LSR labs 4C 3 5 0 >> (abs) <<C N......ZC
-----------------------------------------------------------------------
ROL A 3C 1 2 C << A <<C N......ZC
ROL dp 2B 2 4 C << (dp) <<C N......ZC
ROL dp+X 3B 2 5 C << (dp+X) <<C N......ZC
ROL labs 2C 3 5 C << (abs) <<C N......ZC
-----------------------------------------------------------------------
ROR A 7C 1 2 C >> A <<C N......ZC
ROR dp 6B 2 4 C >> (dp) <<C N......ZC
ROR dp+X 7B 2 5 C >> (dp+X) <<C N......ZC
ROR labs 6C 3 5 C >> (abs) <<C N......ZC
-----------------------------------------------------------------------
XCN A 9F 1 5 A(7-1) <-> A(3-0) N......Z.
-----------------------------------------------------------------------
8. 16-BIT TRANSMISSION COMMANDS
------------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
------------------------------------------------------------------------
MOVW YA,dp BA 2 5 YA - (dp+1)(dp) N......Z.
MOVW dp,YA DA 2 4 (dp+1)(dp) - YA .........
-----------------------------------------------------------------------
9. 16-BIT OPERATION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
INCW dp 3A 2 6 Increment dp memory pair N......Z.
DECW dp 1A 2 6 Decrement dp memory pair N......Z.
ADDW YA,dp 7A 2 5 YA <- YA + (dp+1)(dp) NV..H..ZC
SUBW YA,dp 9A 2 5 YA <- YA - (dp+1)(dp) NV..H..ZC
CMPW YA,dp 5A 2 4 YA - (dp+1)(dp) N......Z.
-----------------------------------------------------------------------
10. MULTIPLICATION & DIVISION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
MUL YA CF 1 9 YA(16 bits) <- Y * A N......Z.
DIV YA,X 9E 1 12 Q:A B:Y <- YA / X NV..H..Z.
-----------------------------------------------------------------------
11. DECIMAL COMPENSATION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
DAA A DF 1 3 decimal adjust for add N......ZC
DAS A BE 1 3 decimal adjust for sub N......ZC
-----------------------------------------------------------------------
12. BRANCHING COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
BRA rel 2F 2 4 branch always ...
BEQ rel F0 2 2/4 branch on Z=1 ...
BNE rel D0 2 2/4 branch on Z=0 ...
BCS rel B0 2 2/4 branch on C=1 ...
BCC rel 90 2 2/4 branch on C=0 ...
BVS rel 70 2 2/4 branch on V=1 ...
BVC rel 50 2 2/4 branch on V=0 ...
BMI rel 30 2 2/4 branch on N=1 ...
BPL rel 10 2 2/4 branch on N=0 ...
BBS dp.bit,rel x3 3 5/7 branch on dp.bit=1 ...
BBC dp.bit,rel y3 3 5/7 branch on dp.bit=0 ...
CBNE dp,rel 2E 3 5/7 compare A with (dp) then BNE ...
CBNE dp+X,rel DE 3 6/8 compare A with (dp+X) then BNE ...
DBNZ dp,rel 6E 3 5/7 decrement memory (dp) then JNZ ...
DBNZ Y,rel FE 2 4/6 decrement Y then JNZ ...
JMP labs 5F 3 3 jump to new location ...
JMP (labs+X) 1F 3 6 PC <- (abs+X+1)(abs+X) ...
-----------------------------------------------------------------------
13. SUB-ROUTINE CALL RETURN COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation NVPBHIZC
-----------------------------------------------------------------------
CALL labs 3F 3 8 subroutine call ........
PCALL upage 4F 2 6 upage call ........
TCALL n n1 1 8 table call ........
BRK 0F 1 8 software interrupt ...1.0..
RET 6F 1 5 return from subroutine ........
RET1 7F 1 6 return from interrupt (Restored)
-----------------------------------------------------------------------
14. STACK OPERATION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
PUSH A 2D 1 4 push A to stack .........
PUSH X 4D 1 4 push X to stack .........
PUSH Y 6D 1 4 push Y to stack .........
PUSH PSW 0D 1 4 push PSW to stack .........
-----------------------------------------------------------------------
POP A AE 1 4 pop A from stack .........
POP X CE 1 4 pop X from stack .........
POP Y EE 1 4 pop Y from stack .........
POP PSW 8E 1 4 pop PSW from stack (Restored)
-----------------------------------------------------------------------
15. BIT OPERATION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
SET1 dip.bit x2 2 4 set direct page bit .........
CLR1 dip.bit y2 2 4 clear direct page bit .........
TSET1 labs 0E 3 6 test and set bits with A N......Z.
TCLR1 labs 4E 3 6 test and clear bits with A N......Z.
AND1 C,mem.bit 4A 3 4 C <- C AND (mem.bit) ........C
AND1 C,/mem.bit 6A 3 4 C <- C AND !(mem.bit) ........C
OR1 C,mem.bit 0A 3 5 C <- C OR (mem.bit) ........C
OR1 C,/mem.bit 2A 3 5 C <- C OR !(mem.bit) ........C
EOR1 C,mem.bit 8A 3 5 C <- C EOR (mem.bit) ........C
NOT1 mem.bit EA 3 5 complement (mem.bit) .........
MOV1 C,mem.bit AA 3 4 C <- (mem.bit) ........C
MOV1 mem.bit,C CA 3 6 C -> (mem.bit) .........
-----------------------------------------------------------------------
16. PROGRAM STATUS FLAG OPERATION COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation NVPBHIZC
-----------------------------------------------------------------------
CLRC 60 1 2 clear carry flag .......0
SETC 80 1 2 set carry flag .......1
NOTC ED 1 3 complement carry flag .......C
CLRV E0 1 2 clear V and H .0..0...
CLRP 20 1 2 clear direct page flag ..0.....
SETP 40 1 2 set direct page flag ..1..0..
EI A0 1 3 set interrupt enable flag .....1..
DI C0 1 3 clear interrupt enable flag .....0..
-----------------------------------------------------------------------
17. OTHER COMMANDS.
-----------------------------------------------------------------------
Mnemonic Operand Code Bytes Cycles Operation Flag
-----------------------------------------------------------------------
NOP 00 1 2 no operation .........
SLEEP EF 1 3 standby SLEEP mode .........
STOP FF 1 3 standby STOP mode .........
-----------------------------------------------------------------------