784d57b750bed75b556cb3ce35571664672756d6
[fw/sdcc] / as / doc / asxhtm.html
1 <HTML>
2 <HEAD>
3 <TITLE>ASxxxx Cross Assembler Documentation</TITLE>
4 </HEAD>
5 <BODY BGCOLOR="#C0C0C0">
6
7 <a href="../home.htm">
8 <IMG width=343 heigth=58 border = 0 SRC="welcom.gif"></a>
9
10 <H2>ASxxxx Cross Assembler Documentation</H2>
11
12 <IMG width=576 height=5 border=0 SRC="rnbow.gif">
13
14 <B><PRE>
15
16                                 ASxxxx Assemblers
17
18
19                                        and
20
21
22                             ASLINK Relocating Linker
23
24
25
26
27                                   Version   2.0
28                                    August 1998
29 \f
30
31                                                                   Page 2
32
33
34
35
36                                   P R E F A C E
37
38
39
40
41
42            The  ASxxxx  assemblers  were  written following the style of
43         several cross assemblers found in the Digital Equipment Corpora-
44         tion  Users  Society  (DECUS)  distribution of the C programming
45         language.  The DECUS code was provided with no documentation  as
46         to  the  input  syntax  or the output format.  Study of the code
47         revealed that the unknown author of the code  had  attempted  to
48         formulate  an assembler with attributes similiar to those of the
49         PDP-11 MACRO assembler (without macro's).  The  incomplete  code
50         from  the  DECUS C distribution has been largely rewritten, only
51         the program structure, and C source  file  organization  remains
52         relatively  unchanged.   However, I wish to thank the author for
53         his contribution to this set of assemblers.
54
55            The  ASLINK  program was written as a companion to the ASxxxx
56         assemblers, its design and implementation was not  derived  from
57         any other work.
58
59            The  ASxxxx  assemblers  and the ASLINK relocating linker are
60         placed in the Public Domain.   Publication  or  distribution  of
61         these programs for non-commercial use is hereby granted with the
62         stipulation that the  copyright  notice  be  included  with  all
63         copies.
64
65            I  would  greatly  appreciate  receiving  the  details of any
66         changes, additions, or errors pertaining to these  programs  and
67         will  attempt  to  incorporate  any  fixes  or  generally useful
68         changes in a future update to these programs.
69
70
71
72                 Alan R.  Baldwin
73                 Kent State University
74                 Physics Department
75                 Kent, Ohio 44242
76                 U.S.A.
77
78
79                 http://shop-pdp.kent.edu/ashtml/asxxxx.htm
80
81                 baldwin@shop-pdp.kent.edu
82                 tel:  (330) 672 2531
83                 fax:  (330) 672 2959
84 \f
85
86                                                                   Page 3
87
88
89
90
91
92
93
94
95                              C O N T R I B U T O R S
96
97
98
99
100            Thanks  to  Marko  Makela  for his contribution of the AS6500
101         cross assembler.
102
103                 Marko Makela
104                 Sillitie 10 A
105                 01480 Vantaa
106                 Finland
107                 Internet: Marko.Makela@Helsinki.Fi
108                 EARN/BitNet: msmakela@finuh
109
110
111
112
113
114            Thanks  to  John  Hartman  for his contribution of the AS8051
115         cross assembler and updates to the ASxxxx and ASLINK internals.
116
117                 John L. Hartman
118                 jhartman@compuserve.com
119                 http://ourworld.compuserve.com/homepages/jhartman/
120
121
122
123
124
125            Thanks  to  G.   Osborn  for his contributions to LKS19.C and
126         LKIHX.C.
127
128                 G. Osborn
129                 gary@s-4.com
130 \f
131
132                                                                   Page 4
133
134
135
136         ASxxxx Cross Assemblers, Version 2.00, August 1998
137
138         Submitted by Alan R.  Baldwin,
139         Kent State University, Kent, Ohio
140
141         Operating System:  TSX+, RT-11, MS/DOS, PDOS
142         or other supporting K&amp;R C.
143
144         Source Langauge:  C
145
146         Abstract:
147
148            The  ASxxxx  assemblers are a series of microprocessor assem-
149         blers written in the C programming  language.   This  collection
150         contains cross assemblers for the 6800(6802/6808), 6801(hd6303),
151         6804,  6805,  68HC08,  6809,  68HC11,  68HC12,   68HC16,   8051,
152         8085(8080),  z80(hd64180),  H8/3xx, and 6500 series microproces-
153         sors.  Each  assembler  has  a  device  specific  section  which
154         includes:   (1)  device description, byte order, and file exten-
155         sion information, (2) a table of assembler  general  directives,
156         special directives, assembler mnemonics and associated operation
157         codes, (3) machine  specific  code  for  processing  the  device
158         mnemonics, addressing modes, and special directives.
159
160            The assemblers have a common device independent section which
161         handles the details of file input/output, symbol  table  genera-
162         tion,  program/data  areas,  expression  analysis, and assembler
163         directive processing.
164
165            The  assemblers  provide  the following features:  (1) alpha-
166         betized, formatted symbol table listings, (2) relocatable object
167         modules, (3) global symbols for linking object modules, (4) con-
168         ditional assembly directives, (5) reusable  local  symbols,  and
169         (6) include-file processing.
170
171            The  companion program ASLINK is a relocating linker perform-
172         ing the following functions:  (1) bind multiple  object  modules
173         into  a  single  memory  image,  (2) resolve inter-module symbol
174         references,  (3)  resolve  undefined  symbols   from   specified
175         librarys of object modules, (4) process absolute, relative, con-
176         catenated, and overlay attributes in data and program  sections,
177         (5)  perform  byte and word program-counter relative (pc or pcr)
178         addressing calculations, (6) define absolute  symbol  values  at
179         link  time, (7) define absolute area base address values at link
180         time, (8) produce Intel Hex or Motorola  S19  output  file,  (9)
181         produce  a  map  of the linked memory image, and (10) update the
182         ASxxxx assembler listing files  with  the  absolute  linked  ad-
183         dresses and data.
184
185            The  assemblers  and  linker  have  been tested using DECUS C
186         under TSX+ and RT-11, PDOS C V5.4b, and Symantec C/C++ V6.1/V7.2
187         under  DOS/Windows  3.x/95.  Complete source code and documenta-
188         tion for the assemblers and linker is included with the  distri-
189         bution.   Additionally, test code for each assembler and several
190         microprocessor monitors ( ASSIST05  for  the  6805,  MONDEB  and
191         ASSIST09  for  the  6809,  and BUFFALO 2.5 for the 6811) are in-
192         cluded as working examples of use of these assemblers.
193 \f
194
195         CHAPTER 1  THE ASSEMBLER                                     1-1
196           1.1     THE ASXXXX ASSEMBLERS                              1-1
197           1.1.1     Assembly Pass 1                                  1-2
198           1.1.2     Assembly Pass 2                                  1-2
199           1.1.3     Assembly Pass 3                                  1-2
200           1.2     SOURCE PROGRAM FORMAT                              1-3
201           1.2.1     Statement Format                                 1-3
202           1.2.1.1     Label Field                                    1-3
203           1.2.1.2     Operator Field                                 1-5
204           1.2.1.3     Operand Field                                  1-5
205           1.2.1.4     Comment Field                                  1-6
206           1.3     SYMBOLS AND EXPRESSIONS                            1-6
207           1.3.1     Character Set                                    1-6
208           1.3.2     User-Defined Symbols                            1-10
209           1.3.3     Local Symbols                                   1-11
210           1.3.4     Current Location Counter                        1-12
211           1.3.5     Numbers                                         1-14
212           1.3.6     Terms                                           1-14
213           1.3.7     Expressions                                     1-15
214           1.4     GENERAL ASSEMBLER DIRECTIVES                      1-16
215           1.4.1     .module Directive                               1-16
216           1.4.2     .title Directive                                1-17
217           1.4.3     .sbttl Directive                                1-17
218           1.4.4     .page Directive                                 1-17
219           1.4.5     .byte and .db Directives                        1-17
220           1.4.6     .word and .dw Directives                        1-18
221           1.4.7     .blkb, .blkw, and .ds Directives                1-18
222           1.4.8     .ascii Directive                                1-18
223           1.4.9     .ascis Directive                                1-19
224           1.4.10    .asciz Directive                                1-19
225           1.4.11    .radix Directive                                1-20
226           1.4.12    .even Directive                                 1-20
227           1.4.13    .odd Directive                                  1-20
228           1.4.14    .area Directive                                 1-21
229           1.4.15    .org Directive                                  1-22
230           1.4.16    .globl Directive                                1-23
231           1.4.17    .if, .else, and .endif Directives               1-23
232           1.4.18    .include Directive                              1-24
233           1.4.19    .setdp Directive                                1-25
234           1.5     INVOKING ASXXXX                                   1-27
235           1.6     ERRORS                                            1-28
236           1.7     LISTING FILE                                      1-29
237           1.8     SYMBOL TABLE FILE                                 1-30
238           1.9     OBJECT FILE                                       1-31
239
240         CHAPTER 2  THE LINKER                                        2-1
241           2.1     ASLINK RELOCATING LINKER                           2-1
242           2.2     INVOKING ASLINK                                    2-2
243           2.3     LIBRARY PATH(S) AND FILE(S)                        2-3
244           2.4     ASLINK PROCESSING                                  2-4
245           2.5     LINKER INPUT FORMAT                                2-6
246           2.5.1     Object Module Format                             2-6
247           2.5.2     Header Line                                      2-6
248           2.5.3     Module Line                                      2-7
249           2.5.4     Symbol Line                                      2-7
250           2.5.5     Area Line                                        2-7
251 \f
252
253                                                                  Page ii
254
255
256
257           2.5.6     T Line                                           2-7
258           2.5.7     R Line                                           2-8
259           2.5.8     P Line                                           2-8
260           2.6     LINKER ERROR MESSAGES                              2-9
261           2.7     INTEL HEX OUTPUT FORMAT                           2-11
262           2.8     MOTORLA S1-S9 OUTPUT FORMAT                       2-12
263
264         CHAPTER 3  BUILDING ASXXXX AND ASLINK                        3-1
265           3.1     BUILDING AN ASSEMBLER                              3-1
266           3.2     BUILDING ASLINK                                    3-2
267
268         APPENDIX A  AS6800 ASSEMBLER                                 A-1
269           A.1     6800 REGISTER SET                                  A-1
270           A.2     6800 INSTRUCTION SET                               A-1
271           A.2.1     Inherent Instructions                            A-2
272           A.2.2     Branch Instructions                              A-2
273           A.2.3     Single Operand Instructions                      A-3
274           A.2.4     Double Operand Instructions                      A-4
275           A.2.5     Jump and Jump to Subroutine Instructions         A-4
276           A.2.6     Long Register Instructions                       A-5
277
278         APPENDIX B  AS6801 ASSEMBLER                                 B-1
279           B.1     .hd6303 DIRECTIVE                                  B-1
280           B.2     6801 REGISTER SET                                  B-1
281           B.3     6801 INSTRUCTION SET                               B-1
282           B.3.1     Inherent Instructions                            B-2
283           B.3.2     Branch Instructions                              B-2
284           B.3.3     Single Operand Instructions                      B-3
285           B.3.4     Double Operand Instructions                      B-4
286           B.3.5     Jump and Jump to Subroutine Instructions         B-5
287           B.3.6     Long Register Instructions                       B-5
288           B.3.7     6303 Specific Instructions                       B-5
289
290         APPENDIX C  AS6804 ASSEMBLER                                 C-1
291           C.1     6804 REGISTER SET                                  C-1
292           C.2     6804 INSTRUCTION SET                               C-1
293           C.2.1     Inherent Instructions                            C-2
294           C.2.2     Branch Instructions                              C-2
295           C.2.3     Single Operand Instructions                      C-2
296           C.2.4     Jump and Jump to Subroutine Instructions         C-2
297           C.2.5     Bit Test Instructions                            C-2
298           C.2.6     Load Immediate data Instruction                  C-3
299           C.2.7     6804 Derived Instructions                        C-3
300
301         APPENDIX D  AS6805 ASSEMBLER                                 D-1
302           D.1     6805 REGISTER SET                                  D-1
303           D.2     6805 INSTRUCTION SET                               D-1
304           D.2.1     Control Instructions                             D-2
305           D.2.2     Bit Manipulation Instructions                    D-2
306           D.2.3     Branch Instructions                              D-2
307           D.2.4     Read-Modify-Write Instructions                   D-3
308           D.2.5     Register\Memory Instructions                     D-3
309 \f
310
311                                                                 Page iii
312
313
314
315           D.2.6     Jump and Jump to Subroutine Instructions         D-4
316
317         APPENDIX E  AS6808 ASSEMBLER                                 E-1
318           E.1     68HC08 REGISTER SET                                E-1
319           E.2     68HC08 INSTRUCTION SET                             E-1
320           E.2.1     Control Instructions                             E-2
321           E.2.2     Bit Manipulation Instructions                    E-2
322           E.2.3     Branch Instructions                              E-3
323           E.2.4     Complex Branch Instructions                      E-3
324           E.2.5     Read-Modify-Write Instructions                   E-4
325           E.2.6     Register\Memory Instructions                     E-5
326           E.2.7     Double Operand Move Instruction                  E-5
327           E.2.8     16-Bit &lt;H:X&gt; Index Register Instructions         E-5
328           E.2.9     Jump and Jump to Subroutine Instructions         E-5
329
330         APPENDIX F  AS6809 ASSEMBLER                                 F-1
331           F.1     6809 REGISTER SET                                  F-1
332           F.2     6809 INSTRUCTION SET                               F-1
333           F.2.1     Inherent Instructions                            F-3
334           F.2.2     Short Branch Instructions                        F-3
335           F.2.3     Long Branch Instructions                         F-3
336           F.2.4     Single Operand Instructions                      F-4
337           F.2.5     Double Operand Instructions                      F-5
338           F.2.6     D-register Instructions                          F-5
339           F.2.7     Index/Stack Register Instructions                F-5
340           F.2.8     Jump and Jump to Subroutine Instructions         F-6
341           F.2.9     Register - Register Instructions                 F-6
342           F.2.10    Condition Code Register Instructions             F-6
343           F.2.11    6800 Compatibility Instructions                  F-6
344
345         APPENDIX G  AS6811 ASSEMBLER                                 G-1
346           G.1     68HC11 REGISTER SET                                G-1
347           G.2     68HC11 INSTRUCTION SET                             G-1
348           G.2.1     Inherent Instructions                            G-2
349           G.2.2     Branch Instructions                              G-2
350           G.2.3     Single Operand Instructions                      G-3
351           G.2.4     Double Operand Instructions                      G-4
352           G.2.5     Bit Manupulation Instructions                    G-4
353           G.2.6     Jump and Jump to Subroutine Instructions         G-5
354           G.2.7     Long Register Instructions                       G-5
355
356         APPENDIX H  AS6812 ASSEMBLER                                 H-1
357           H.1     68HC12 REGISTER SET                                H-1
358           H.2     68HC12 INSTRUCTION SET                             H-1
359           H.2.1     Inherent Instructions                            H-3
360           H.2.2     Short Branch Instructions                        H-3
361           H.2.3     Long Branch Instructions                         H-3
362           H.2.4     Branch on Decrement, Test, or Increment          H-4
363           H.2.5     Bit Clear and Set Instructions                   H-4
364           H.2.6     Branch on Bit Clear or Set                       H-4
365           H.2.7     Single Operand Instructions                      H-5
366           H.2.8     Double Operand Instructions                      H-6
367 \f
368
369                                                                  Page iv
370
371
372
373           H.2.9     Move Instructions                                H-6
374           H.2.10    D-register Instructions                          H-6
375           H.2.11    Index/Stack Register Instructions                H-7
376           H.2.12    Jump and Jump/Call to Subroutine
377                     Instructions                                     H-7
378           H.2.13    Other Special Instructions                       H-7
379           H.2.14    Register - Register Instructions                 H-7
380           H.2.15    Condition Code Register Instructions             H-7
381           H.2.16    M68HC11 Compatibility Mode Instructions          H-8
382
383         APPENDIX I  AS6816 ASSEMBLER                                 I-1
384           I.1     68HC16 REGISTER SET                                I-1
385           I.2     68HC16 INSTRUCTION SET                             I-1
386           I.2.1     Inherent Instructions                            I-2
387           I.2.2     Push/Pull Multiple Register Instructions         I-3
388           I.2.3     Short Branch Instructions                        I-3
389           I.2.4     Long Branch Instructions                         I-3
390           I.2.5     Bit Manipulation Instructions                    I-3
391           I.2.6     Single Operand Instructions                      I-4
392           I.2.7     Double Operand Instructions                      I-5
393           I.2.8     Index/Stack Register Instructions                I-5
394           I.2.9     Jump and Jump to Subroutine Instructions         I-6
395           I.2.10    Condition Code Register Instructions             I-6
396           I.2.11    Multiply and Accumulate Instructions             I-6
397
398         APPENDIX J  ASH8 ASSEMBLER                                   J-1
399           J.1     H8/3XX REGISTER SET                                J-1
400           J.2     H8/3XX INSTRUCTION SET                             J-1
401           J.2.1     Inherent Instructions                            J-2
402           J.2.2     Branch Instructions                              J-2
403           J.2.3     Single Operand Instructions                      J-3
404           J.2.4     Double Operand Instructions                      J-4
405           J.2.5     Mov Instructions                                 J-5
406           J.2.6     Bit Manipulation Instructions                    J-6
407           J.2.7     Extended Bit Manipulation Instructions           J-7
408           J.2.8     Condition Code Instructions                      J-7
409           J.2.9     Other Instructions                               J-8
410           J.2.10    Jump and Jump to Subroutine Instructions         J-8
411
412         APPENDIX K  AS8051 ASSEMBLER                                 K-1
413           K.1     ACKNOWLEDGMENT                                     K-1
414           K.2     8051 REGISTER SET                                  K-1
415           K.3     8051 INSTRUCTION SET                               K-2
416           K.3.1     Inherent Instructions                            K-2
417           K.3.2     Move Instructions                                K-3
418           K.3.3     Single Operand Instructions                      K-3
419           K.3.4     Two Operand Instructions                         K-4
420           K.3.5     Call and Return Instructions                     K-4
421           K.3.6     Jump Instructions                                K-4
422           K.3.7     Predefined Symbols:  SFR Map                     K-5
423           K.3.8     Predefined Symbols:  SFR Bit Addresses           K-6
424           K.3.9     Predefined Symbols:  Control Bits                K-7
425 \f
426
427                                                                   Page v
428
429
430
431         APPENDIX L  AS8085 ASSEMBLER                                 L-1
432           L.1     8085 REGISTER SET                                  L-1
433           L.2     8085 INSTRUCTION SET                               L-1
434           L.2.1     Inherent Instructions                            L-2
435           L.2.2     Register/Memory/Immediate Instructions           L-2
436           L.2.3     Call and Return Instructions                     L-2
437           L.2.4     Jump Instructions                                L-2
438           L.2.5     Input/Output/Reset Instructions                  L-3
439           L.2.6     Move Instructions                                L-3
440           L.2.7     Other Instructions                               L-3
441
442         APPENDIX M  ASZ80 ASSEMBLER                                  M-1
443           M.1     .hd64 DIRECTIVE                                    M-1
444           M.2     Z80 REGISTER SET AND CONDITIONS                    M-1
445           M.3     Z80 INSTRUCTION SET                                M-2
446           M.3.1     Inherent Instructions                            M-3
447           M.3.2     Implicit Operand Instructions                    M-3
448           M.3.3     Load Instruction                                 M-4
449           M.3.4     Call/Return Instructions                         M-4
450           M.3.5     Jump and Jump to Subroutine Instructions         M-4
451           M.3.6     Bit Manipulation Instructions                    M-5
452           M.3.7     Interrupt Mode and Reset Instructions            M-5
453           M.3.8     Input and Output Instructions                    M-5
454           M.3.9     Register Pair Instructions                       M-5
455           M.3.10    HD64180 Specific Instructions                    M-6
456
457         APPENDIX N  AS6500 ASSEMBLER                                 N-1
458           N.1     ACKNOWLEDGMENT                                     N-1
459           N.2     6500 REGISTER SET                                  N-2
460           N.3     6500 INSTRUCTION SET                               N-2
461           N.3.1     Processor Specific Directives                    N-3
462           N.3.2     65xx Core Inherent Instructions                  N-3
463           N.3.3     65xx Core Branch Instructions                    N-3
464           N.3.4     65xx Core Single Operand Instructions            N-3
465           N.3.5     65xx Core Double Operand Instructions            N-4
466           N.3.6     65xx Core Jump and Jump to Subroutine
467                     Instructions                                     N-4
468           N.3.7     65xx Core Miscellaneous X and Y Register
469                     Instructions                                     N-4
470           N.3.8     65F11 and 65F12 Specific Instructions            N-5
471           N.3.9     65C00/21 and 65C29 Specific Instructions         N-5
472           N.3.10    65C02, 65C102, and 65C112 Specific
473                     Instructions                                     N-6
474 \f
475
476
477
478
479
480
481
482
483
484
485
486
487
488                                     CHAPTER 1
489
490                                   THE ASSEMBLER
491
492
493
494
495
496         1.1  THE ASXXXX ASSEMBLERS
497
498
499            The  ASxxxx  assemblers are a series of microprocessor assem-
500         blers written in the C programming language.  Each assembler has
501         a device specific section which includes:
502
503              1.  device  description, byte order, and file extension in-
504                  formation
505
506              2.  a  table  of  the assembler general directives, special
507                  device directives, assembler mnemonics  and  associated
508                  operation codes
509
510              3.  machine specific code for processing the device mnemon-
511                  ics, addressing modes, and special directives
512
513         The device specific information is detailed in the appendices.
514
515            The assemblers have a common device independent section which
516         handles the details of file input/output, symbol  table  genera-
517         tion,  program/data  areas,  expression  analysis, and assembler
518         directive processing.
519
520         The assemblers provide the following features:
521
522              1.  Command string control of assembly functions
523
524              2.  Alphabetized, formatted symbol table listing
525
526              3.  Relocatable object modules
527
528              4.  Global symbols for linking object modules
529
530              5.  Conditional assembly directives
531
532 \f
533
534         THE ASSEMBLER                                           PAGE 1-2
535         THE ASXXXX ASSEMBLERS
536
537
538              6.  Program sectioning directives
539
540
541            ASxxxx assembles one or more source files into a single relo-
542         catable ascii object file.  The output of the ASxxxx  assemblers
543         consists of an ascii relocatable object file(*.rel), an assembly
544         listing file(*.lst), and a symbol file(*.sym).
545
546
547         1.1.1  Assembly Pass 1
548
549
550            During  pass  1, ASxxxx opens all source files and performs a
551         rudimenatry assembly of each source statement.  During this pro-
552         cess  all symbol tables are built, program sections defined, and
553         number of bytes for each assembled source line is estimated.
554
555            At the end of pass 1 all undefined symbols may be made global
556         (external) using the ASxxxx switch -g, otherwise undefined  sym-
557         bols will be flagged as errors during succeeding passes.
558
559
560         1.1.2  Assembly Pass 2
561
562
563            During  pass  2  the ASxxxx assembler resolves forward refer-
564         ences and determines the number  of  bytes  for  each  assembled
565         line.   The  number  of bytes used by a particular assembler in-
566         struction may depend upon the addressing mode, whether  the  in-
567         struction allows multiple forms based upon the relative distance
568         to the addressed location, or other factors.   Pass  2  resolves
569         these cases and determines the address of all symbols.
570
571
572         1.1.3  Assembly Pass 3
573
574
575            Pass 3 by the assembler generates the listing file, the relo-
576         catable output file, and the symbol tables.  Also during pass  3
577         the errors will be reported.
578
579            The  relocatable object file is an ascii file containing sym-
580         bol references and definitions, program  area  definitions,  and
581         the  relocatable assembled code, the linker ASLINK will use this
582         information to generate an absolute load file (Motorola or Intel
583         formats).
584
585
586 \f
587
588         THE ASSEMBLER                                           PAGE 1-3
589         SOURCE PROGRAM FORMAT
590
591
592         1.2  SOURCE PROGRAM FORMAT
593
594
595
596         1.2.1  Statement Format
597
598
599            A source program is composed of assembly-language statements.
600         Each statement must be completed on one line.  A line  may  con-
601         tain a maximum of 128 characters, longer lines are truncated and
602         lost.
603
604            An  ASxxxx  assembler  statement  may  have  as  many as four
605         fields.  These fields are identified by their order  within  the
606         statement  and/or  by separating characters between fields.  The
607         general format of the ASxxxx statement is:
608
609               [label:]  Operator        Operand         [;Comment(s)]
610
611            The  label and comment fields are optional.  The operator and
612         operand fields are interdependent.  The operator field may be an
613         assembler  directive or an assembly mnemonic.  The operand field
614         may be optional or required as defined in  the  context  of  the
615         operator.
616
617            ASxxxx  interprets  and  processes source statements one at a
618         time.  Each statement causes a particular operation to  be  per-
619         formed.
620
621
622         1.2.1.1  Label Field  -
623
624            A  label is a user-defined symbol which is assigned the value
625         of the current location counter and entered into  the  user  de-
626         fined  symbol  table.   The  current location counter is used by
627         ASxxxx to assign memory addresses to the source  program  state-
628         ments as they are encountered during the assembly process.  Thus
629         a label is a means  of  symbolically  referring  to  a  specific
630         statement.
631
632            When  a program section is absolute, the value of the current
633         location counter is absolute;  its value references an  absolute
634         memory  address.   Similarly, when a program section is relocat-
635         able, the value of the current location counter is  relocatable.
636         A  relocation  bias  calculated at link time is added to the ap-
637         parent value of the current location counter  to  establish  its
638         effective  absolute  address  at  execution time.  (The user can
639         also force the linker to relocate sections defined as  absolute.
640         This may be required under special circumstances.)
641
642            If  present,  a  label  must  be  the first field in a source
643         statement and must be terminated by a colon (:).   For  example,
644 \f
645
646         THE ASSEMBLER                                           PAGE 1-4
647         SOURCE PROGRAM FORMAT
648
649
650         if  the  value  of  the  current  location  counter  is absolute
651         01F0(H), the statement:
652
653               abcd:     nop
654
655         assigns  the  value  01F0(H) to the label abcd.  If the location
656         counter value were relocatable, the final value of abcd would be
657         01F0(H)+K, where K represents the relocation bias of the program
658         section, as calculated by the linker at link time.
659
660            More  than  one label may appear within a single label field.
661         Each label so specified is assigned the same address value.  For
662         example,  if  the  value  of  the  current  location  counter is
663         1FF0(H), the multiple labels in the following statement are each
664         assigned the value 1FF0(H):
665
666               abcd:     aq:     $abc:   nop
667
668            Multiple labels may also appear on successive lines.  For ex-
669         ample, the statements
670
671               abcd:
672               aq:
673               $abc:     nop
674
675         likewise  cause  the  same value to be assigned to all three la-
676         bels.
677
678            A  double  colon  (::)  defines the label as a global symbol.
679         For example, the statement
680
681               abcd::    nop
682
683         establishes the label abcd as a global symbol.  The distinguish-
684         ing attribute of a global symbol is that it  can  be  referenced
685         from  within an object module other than the module in which the
686         symbol is defined.  References to this label  in  other  modules
687         are  resolved when the modules are linked as a composite execut-
688         able image.
689
690         The legal characters for defining labels are:
691
692                 A through Z
693                 a through z
694                 0 through 9
695                 . (Period)
696                 $ (Dollar sign)
697                 _ (underscore)
698
699            A  label  may  be  any  length,  however  only  the  first 79
700         characters are significant and, therefore must be  unique  among
701         all   labels  in  the  source  program  (not  necessarily  among
702 \f
703
704         THE ASSEMBLER                                           PAGE 1-5
705         SOURCE PROGRAM FORMAT
706
707
708         separately compiled modules).  An error code(s) (m or p) will be
709         generated  in the assembly listing if the first 79 characters in
710         two or more labels are the same.  The m code is  caused  by  the
711         redeclaration  of  the symbol or its reference by another state-
712         ment.  The p code is generated because the symbols  location  is
713         changing on each pass through the source file.
714
715            The  label  must  not  start with the characters 0-9, as this
716         designates a local symbol with special attributes described in a
717         later section.
718
719            The  label  must  not  start  with  the  sequence $$, as this
720         represents the temporary radix 16 for constants.
721
722
723         1.2.1.2  Operator Field  -
724
725            The  operator field specifies the action to be performed.  It
726         may consist of an instruction mnemonic (op code) or an assembler
727         directive.
728
729            When  the  operator is an instruction mnemonic, a machine in-
730         struction is generated and the assembler evaluates the addresses
731         of  the operands which follow.  When the operator is a directive
732         ASxxxx performs certain control actions or processing operations
733         during assembly of the source program.
734
735            Leading  and  trailing  spaces  or tabs in the operator field
736         have no significance;  such characters serve  only  to  separate
737         the operator field from the preceeding and following fields.
738
739            An operator is terminated by a space, tab or end of line.
740
741
742         1.2.1.3  Operand Field  -
743
744            When  the  operator is an instruction mnemonic (op code), the
745         operand  field  contains  program  variables  that  are  to   be
746         evaluated/manipulated by the operator.
747
748            Operands  may  be  expressions  or  symbols, depending on the
749         operator.  Multiple expressions used in the operand  fields  may
750         be  separated  by a comma.  An operand should be preceeded by an
751         operator field;  if it is not, the statement will give an  error
752         (q  or  o).   All  operands  following instruction mnemonics are
753         treated as expressions.
754
755            The operand field is terminated by a semicolon when the field
756         is followed  by  a  comment.   For  example,  in  the  following
757         statement:
758
759               label:    lda     abcd,x          ;Comment field
760 \f
761
762         THE ASSEMBLER                                           PAGE 1-6
763         SOURCE PROGRAM FORMAT
764
765
766
767         the  tab  between lda and abcd terminates the operator field and
768         defines the beginning of the operand field;  a  comma  separates
769         the operands abcd and x;  and a semicolon terminates the operand
770         field and defines the beginning of the comment field.   When  no
771         comment  field  follows,  the operand field is terminated by the
772         end of the source line.
773
774
775         1.2.1.4  Comment Field  -
776
777            The comment field begins with a semicolon and extends through
778         the end of the line.  This field is optional and may contain any
779         7-bit ascii character except null.
780
781            Comments  do not affect assembly processing or program execu-
782         tion.
783
784
785         1.3  SYMBOLS AND EXPRESSIONS
786
787
788            This  section  describes the generic components of the ASxxxx
789         assemblers:  the character set, the conventions observed in con-
790         structing  symbols,  and  the use of numbers, operators, and ex-
791         pressions.
792
793
794         1.3.1  Character Set
795
796
797            The following characters are legal in ASxxxx source programs:
798
799              1.  The  letters  A  through Z.  Both upper- and lower-case
800                  letters are acceptable.  The  assemblers,  by  default,
801                  are  not  case  sensitive,  i.e.  ABCD and abcd are the
802                  same symbols.  (The assemblers can be made case  sensi-
803                  tive by using the -z command line option.)
804
805              2.  The digits 0 through 9
806
807              3.  The  characters . (period), $ (dollar sign), and _ (un-
808                  derscore).
809
810              4.  The special characters listed in Tables 1 through 6.
811
812
813            Tables  1  through  6  describe  the various ASxxxx label and
814         field terminators, assignment operators, operand separators, as-
815         sembly, unary, binary, and radix operators.
816 \f
817
818         THE ASSEMBLER                                           PAGE 1-7
819         SYMBOLS AND EXPRESSIONS
820
821
822         Table 1         Label Terminators and Assignment Operators
823         ----------------------------------------------------------------
824
825                 :   Colon               Label terminator.
826
827                 ::  Double colon        Label  Terminator;   defines the
828                                         label as a global label.
829
830                 =   Equal sign          Direct assignment operator.
831
832                 ==  Double equal        Direct assignment operator;
833                     sign                defines  the  symbol as a global
834                                         symbol.
835
836         ----------------------------------------------------------------
837
838
839
840
841
842         Table 2         Field Terminators and Operand Separators
843         ----------------------------------------------------------------
844
845                     Tab                 Item or field terminator.
846
847                     Space               Item or field terminator.
848
849                 ,   Comma               Operand field separator.
850
851                 ;   Semicolon           Comment field indicator.
852
853         ----------------------------------------------------------------
854
855
856
857
858
859         Table 3         Assembler Operators
860         ----------------------------------------------------------------
861
862                 #   Number sign         Immediate expression indicator.
863
864                 .   Period              Current location counter.
865
866                 (   Left parenthesis    Expression delimiter.
867
868                 )   Right parenthesis   Expression delimeter.
869
870         ----------------------------------------------------------------
871 \f
872
873         THE ASSEMBLER                                           PAGE 1-8
874         SYMBOLS AND EXPRESSIONS
875
876
877
878
879
880
881
882         Table 4         Unary Operators
883         ----------------------------------------------------------------
884
885                 &lt;   Left bracket        &lt;FEDC   Produces  the lower byte
886                                                 value of the expression.
887                                                 (DC)
888
889                 &gt;   Right bracket       &gt;FEDC   Produces  the upper byte
890                                                 value of the expression.
891                                                 (FE)
892
893                 +   Plus sign           +A      Positive value of A
894
895                 -   Minus sign          -A      Produces   the  negative
896                                                 (2's complement) of A.
897
898                 ~   Tilde               ~A      Produces the 1's comple-
899                                                 ment of A.
900
901                 '   Single quote        'D      Produces  the  value  of
902                                                 the character D.
903
904                 "   Double quote        "AB     Produces the double byte
905                                                 value for AB.
906
907                 \   Backslash           '\n     Unix style characters
908                                                 \b, \f, \n, \r, \t
909                                      or '\001   or octal byte values.
910
911         ----------------------------------------------------------------
912
913
914
915
916
917 \f
918
919         THE ASSEMBLER                                           PAGE 1-9
920         SYMBOLS AND EXPRESSIONS
921
922
923         Table 5         Binary Operators
924         ----------------------------------------------------------------
925
926                 &lt;&lt;  Double          0800 &lt;&lt; 4   Produces the 4 bit
927                     Left bracket                left-shifted   value  of
928                                                 0800.  (8000)
929
930                 &gt;&gt;  Double          0800 &gt;&gt; 4   Produces the 4 bit
931                     Right bracket               right-shifted  value  of
932                                                 0800.  (0080)
933
934                 +   Plus sign       A + B       Arithmetic      Addition
935                                                 operator.
936
937                 -   Minus sign      A - B       Arithmetic   Subtraction
938                                                 operator.
939
940                 *   Asterisk        A * B       Arithmetic   Multiplica-
941                                                 tion operator.   (signed
942                                                 16-bit)
943
944                 /   Slash           A / B       Arithmetic      Division
945                                                 operator.        (signed
946                                                 16-bit quotient)
947
948                 &amp;   Ampersand       A &amp; B       Logical AND operator.
949
950                 |   Bar             A | B       Logical OR operator.
951
952                 %   Percent sign    A % B       Modulus operator.
953                                                 (16-bit value)
954
955                 ^   Up arrow or     A ^ B       EXCLUSIVE OR operator.
956                     circumflex
957
958         ----------------------------------------------------------------
959
960
961
962
963
964 \f
965
966         THE ASSEMBLER                                          PAGE 1-10
967         SYMBOLS AND EXPRESSIONS
968
969
970         Table 6         Temporary Radix Operators
971         ----------------------------------------------------------------
972
973                 $%,   0b, 0B            Binary radix operator.
974
975                 $&amp;,   0o, 0O, 0q, 0Q    Octal radix operator.
976
977                 $#,   0d, 0D            Decimal radix operator.
978
979                 $$,   0h, 0H, 0x, 0X    Hexidecimal radix operator.
980
981
982                 Potential  ambiguities arising from the use of 0b and 0d
983                 as temporary radix operators may be circumvented by pre-
984                 ceding  all  non-prefixed  hexidecimal  numbers with 00.
985                 Leading 0's are required in any  case  where  the  first
986                 hexidecimal  digit is abcdef as the assembler will treat
987                 the letter sequence as a label.
988
989         ----------------------------------------------------------------
990
991
992
993
994
995
996
997         1.3.2  User-Defined Symbols
998
999
1000            User-defined  symbols are those symbols that are equated to a
1001         specific value through a direct assignment statement  or  appear
1002         as  labels.  These symbols are added to the User Symbol Table as
1003         they are encountered during assembly.
1004
1005         The following rules govern the creation of user-defined symbols:
1006
1007              1.  Symbols  can  be  composed  of alphanumeric characters,
1008                  dollar signs ($),  periods  (.),  and  underscores  (_)
1009                  only.
1010
1011              2.  The  first  character  of a symbol must not be a number
1012                  (except in the case of local symbols).
1013
1014              3.  The  first 79 characters of a symbol must be unique.  A
1015                  symbol  can  be  written  with  more  than   79   legal
1016                  characters,  but the 80th and subsequent characters are
1017                  ignored.
1018
1019              4.  Spaces and Tabs must not be embedded within a symbol.
1020
1021
1022 \f
1023
1024         THE ASSEMBLER                                          PAGE 1-11
1025         SYMBOLS AND EXPRESSIONS
1026
1027
1028         1.3.3  Local Symbols
1029
1030
1031            Local  symbols are specially formatted symbols used as labels
1032         within a block of coding that has been delimited as a local sym-
1033         bol  block.   Local  symbols  are  of  the form n$, where n is a
1034         decimal integer from 0 to 255,  inclusive.   Examples  of  local
1035         symbols are:
1036
1037               1$
1038               27$
1039               138$
1040               244$
1041
1042            The  range  of  a local symbol block consists of those state-
1043         ments between two normally constructed  symbolic  labels.   Note
1044         that a statement of the form:
1045
1046               ALPHA = EXPRESSION
1047
1048         is a direct assignment statement but does not create a label and
1049         thus does not delimit the range of a local symbol block.
1050
1051            Note that the range of a local symbol block may extend across
1052         program areas.
1053
1054            Local symbols provide a convenient means of generating labels
1055         for branch instructions and other such references  within  local
1056         symbol  blocks.   Using local symbols reduces the possibility of
1057         symbols with multiple definitions appearing within a  user  pro-
1058         gram.   In  addition,  the  use  of local symbols differentiates
1059         entry-point labels from local labels, since local labels  cannot
1060         be referenced from outside their respective local symbol blocks.
1061         Thus, local symbols of the same name can appear in  other  local
1062         symbol blocks without conflict.  Local symbols require less sym-
1063         bol table space than normal symbols.  Their use is recommended.
1064
1065            The  use of the same local symbol within a local symbol block
1066         will generate one or both of the m or p errors.
1067 \f
1068
1069         THE ASSEMBLER                                          PAGE 1-12
1070         SYMBOLS AND EXPRESSIONS
1071
1072
1073         Example of local symbols:
1074
1075                 a:      ldx     #atable ;get table address
1076                         lda     #0d48   ;table length
1077                 1$:     clr     ,x+     ;clear
1078                         deca
1079                         bne     1$
1080
1081                 b:      ldx     #btable ;get table address
1082                         lda     #0d48   ;table length
1083                 1$:     clr     ,x+     ;clear
1084                         deca
1085                         bne     1$
1086
1087
1088         1.3.4  Current Location Counter
1089
1090
1091            The  period  (.) is the symbol for the current location coun-
1092         ter.  When used in the operand  field  of  an  instruction,  the
1093         period   represents  the  address  of  the  first  byte  of  the
1094         instruction:
1095
1096                 AS:     ldx     #.      ;The period (.) refers to
1097                                         ;the address of the ldx
1098                                         ;instruction.
1099
1100            When  used  in  the  operand field of an ASxxxx directive, it
1101         represents the address of the current byte or word:
1102
1103                 QK = 0
1104
1105                 .word   0xFFFE,.+4,QK   ;The operand .+4 in the .word
1106                                         ;directive represents a value
1107                                         ;stored in the second of the
1108                                         ;three words during assembly.
1109
1110            If  we  assume  the  current  value of the program counter is
1111         0H0200, then during assembly, ASxxxx  reserves  three  words  of
1112         storage  starting  at  location 0H0200.  The first value, a hex-
1113         idecimal constant FFFE, will be stored at location 0H0200.   The
1114         second  value  represented  by  .+4  will  be stored at location
1115         0H0202, its value will be 0H0206 ( = 0H0202  +  4).   The  third
1116         value  defined  by  the  symbol  QK  will  be placed at location
1117         0H0204.
1118
1119            At the beginning of each assembly pass, ASxxxx resets the lo-
1120         cation counter.  Normally, consecutive memory locations are  as-
1121         signed  to  each  byte  of  object code generated.  However, the
1122         value of the location counter can be changed  through  a  direct
1123         assignment statement of the following form:
1124
1125 \f
1126
1127         THE ASSEMBLER                                          PAGE 1-13
1128         SYMBOLS AND EXPRESSIONS
1129
1130
1131               . = . + expression
1132
1133
1134            The  new  location  counter can only be specified relative to
1135         the current location counter.  Neglecting to specify the current
1136         program  counter  along with the expression on the right side of
1137         the assignment operator will generate the (.) error.   (Absolute
1138         program areas may use the .org directive to specify the absolute
1139         location of the current program counter.)
1140
1141         The following coding illustrates the use of the current location
1142         counter:
1143
1144                 .area   CODE1   (ABS)   ;program area CODE1
1145                                         ;is ABSOLUTE
1146
1147                 .org    0H100           ;set location to
1148                                         ;0H100 absolute
1149
1150         num1:   ldx     #.+0H10         ;The label num1 has
1151                                         ;the value 0H100.
1152                                         ;X is loaded with
1153                                         ;0H100 + 0H10
1154
1155                 .org    0H130           ;location counter
1156                                         ;set to 0H130
1157
1158         num2:   ldy     #.              ;The label num2 has
1159                                         ;the value 0H130.
1160                                         ;Y is loaded with
1161                                         ;value 0H130.
1162
1163
1164                 .area   CODE2   (REL)   ;program area CODE2
1165                                         ;is RELOCATABLE
1166
1167                 . = . + 0H20            ;Set location counter
1168                                         ;to relocatable 0H20 of
1169                                         ;the program section.
1170
1171         num3:   .word   0               ;The label num3 has
1172                                         ;the value
1173                                         ;of relocatable 0H20.
1174
1175                 . = . + 0H40            ;will reserve 0H40
1176                                         ;bytes of storage as will
1177                 .blkb   0H40            ;or
1178                 .blkw   0H20
1179
1180            The  .blkb  and .blkw directives are the preferred methods of
1181         allocating space.
1182
1183 \f
1184
1185         THE ASSEMBLER                                          PAGE 1-14
1186         SYMBOLS AND EXPRESSIONS
1187
1188
1189         1.3.5  Numbers
1190
1191
1192            ASxxxx  assumes that all numbers in the source program are to
1193         be interpreted in decimal radix unless otherwise specified.  The
1194         .radix  directive  may  be used to specify the default as octal,
1195         decimal, or hexidecimal.  Individual numbers can  be  designated
1196         as  binary, octal, decimal, or hexidecimal through the temporary
1197         radix prefixes shown in table 6.
1198
1199            Negative  numbers  must be preceeded by a minus sign;  ASxxxx
1200         translates such numbers into two's  complement  form.   Positive
1201         numbers may (but need not) be preceeded by a plus sign.
1202
1203            Numbers are always considered to be absolute values, therefor
1204         they are never relocatable.
1205
1206
1207         1.3.6  Terms
1208
1209
1210            A  term is a component of an expression and may be one of the
1211         following:
1212
1213
1214              1.  A number.
1215
1216              2.  A symbol:
1217                  1.  A  period (.) specified in an expression causes the
1218                      current location counter to be used.
1219                  2.  A User-defined symbol.
1220                  3.  An undefined symbol is assigned a value of zero and
1221                      inserted in the User-Defined symbol table as an un-
1222                      defined symbol.
1223
1224              3.  A single quote followed by a single ascii character, or
1225                  a double quote followed by two ascii characters.
1226
1227              4.  An  expression enclosed in parenthesis.  Any expression
1228                  so enclosed is evaluated and reduced to a  single  term
1229                  before  the remainder of the expression in which it ap-
1230                  pears is evaluated.  Parenthesis, for example,  may  be
1231                  used  to  alter the left-to-right evaluation of expres-
1232                  sions, (as in A*B+C versus A*(B+C)), or to apply a  un-
1233                  ary operator to an entire expression (as in -(A+B)).
1234
1235              5.  A unary operator followed by a symbol or number.
1236
1237
1238
1239 \f
1240
1241         THE ASSEMBLER                                          PAGE 1-15
1242         SYMBOLS AND EXPRESSIONS
1243
1244
1245         1.3.7  Expressions
1246
1247
1248            Expressions  are  combinations  of  terms  joined together by
1249         binary operators.  Expressions reduce to a  16-bit  value.   The
1250         evaluation  of  an  expression includes the determination of its
1251         attributes.  A resultant expression value may be  one  of  three
1252         types  (as  described  later in this section):  relocatable, ab-
1253         solute, and external.
1254
1255         Expressions are evaluate with an operand hierarchy as follows:
1256
1257                 *       /       %       multiplication,
1258                                         division, and
1259                                         modulus first.
1260
1261                 +       -               addition and
1262                                         subtraction second.
1263
1264                 &lt;&lt;      &gt;&gt;              left shift and
1265                                         right shift third.
1266
1267                 ^                       exclusive or fourth.
1268
1269                 &amp;                       logical and fifth.
1270
1271                 |                       logical or last
1272
1273                 except that unary operators take precedence over binary
1274                 operators.
1275
1276
1277            A  missing  or  illegal  operator  terminates  the expression
1278         analysis, causing error codes (o) and/or  (q)  to  be  generated
1279         depending upon the context of the expression itself.
1280
1281            At assembly time the value of an external (global) expression
1282         is equal to the value of the absolute part of  that  expression.
1283         For  example,  the expression external+4, where 'external' is an
1284         external symbol, has the value of 4.  This expression,  however,
1285         when  evaluated  at link time takes on the resolved value of the
1286         symbol 'external', plus 4.
1287
1288            Expressions,  when  evaluated  by  ASxxxx,  are  one of three
1289         types:  relocatable, absolute, or external.  The following  dis-
1290         tinctions are important:
1291
1292              1.  An  expression is relocatable if its value is fixed re-
1293                  lative to the base address of the program area in which
1294                  it appears;  it will have an offset value added at link
1295                  time.  Terms that contain labels defined in relocatable
1296                  program   areas   will   have   a   relocatable  value;
1297 \f
1298
1299         THE ASSEMBLER                                          PAGE 1-16
1300         SYMBOLS AND EXPRESSIONS
1301
1302
1303                  similarly, a period (.) in a relocatable program  area,
1304                  representing  the value of the current program location
1305                  counter, will also have a relocatable value.
1306
1307              2.  An  expression  is  absolute if its value is fixed.  An
1308                  expression whose terms are numbers and ascii characters
1309                  will  reduce  to  an absolute value.  A relocatable ex-
1310                  pression or term minus a relocatable term,  where  both
1311                  elements  being  evaluated  belong  to the same program
1312                  area, is an absolute expression.  This is because every
1313                  term  in  a  program area has the same relocation bias.
1314                  When one term is subtracted from the other the  reloca-
1315                  tion bias is zero.
1316
1317              3.  An  expression is external (or global) if it contains a
1318                  single global reference (plus or minus an absolute  ex-
1319                  pression  value) that is not defined within the current
1320                  program.  Thus, an external  expression  is  only  par-
1321                  tially  defined following assembly and must be resolved
1322                  at link time.
1323
1324
1325
1326         1.4  GENERAL ASSEMBLER DIRECTIVES
1327
1328
1329            An  ASxxxx  directive  is placed in the operator field of the
1330         source line.  Only one directive is  allowed  per  source  line.
1331         Each  directive  may  have  a blank operand field or one or more
1332         operands.  Legal operands differ with each directive.
1333
1334
1335         1.4.1  .module Directive
1336
1337         Format:
1338
1339                 .module string
1340
1341            The .module directive causes the string to be included in the
1342         assemblers output file as an identifier for this particular  ob-
1343         ject  module.   The  string  may  be  from 1 to 79 characters in
1344         length.  Only one identifier is allowed  per  assembled  module.
1345         The  main use of this directive is to allow the linker to report
1346         a modules' use of undefined symbols.  At link time all undefined
1347         symbols  are  reported  and  the  modules  referencing  them are
1348         listed.
1349
1350
1351 \f
1352
1353         THE ASSEMBLER                                          PAGE 1-17
1354         GENERAL ASSEMBLER DIRECTIVES
1355
1356
1357         1.4.2  .title Directive
1358
1359         Format:
1360
1361                 .title  string
1362
1363            The .title directive provides a character string to be placed
1364         on the second line of each page during listing.
1365
1366
1367         1.4.3  .sbttl Directive
1368
1369         Format:
1370
1371                 .sbttl  string
1372
1373            The .sbttl directive provides a character string to be placed
1374         on the third line of each page during listing.
1375
1376
1377         1.4.4  .page Directive
1378
1379         Format:
1380
1381                 .page
1382
1383            The .page directive causes a page ejection with a new heading
1384         to be printed.  The new page occurs after the next line  of  the
1385         source  program is processed, this allows an immediately follow-
1386         ing .sbttl directive to appear  on  the  new  page.   The  .page
1387         source  line will not appear in the file listing.  Paging may be
1388         disabled by invoking the -p directive.
1389
1390
1391         1.4.5  .byte and .db Directives
1392
1393         Format:
1394
1395                 .byte   exp             ;Stores the binary value
1396                 .db     exp             ;of the expression in the
1397                                         ;next byte.
1398
1399                 .byte   exp1,exp2,expn  ;Stores the binary values
1400                 .db     exp1,exp2,expn  ;of the list of expressions
1401                                         ;in successive bytes.
1402
1403         where:  exp,    represent expressions that will be
1404                 exp1,   truncated to 8-bits of data.
1405                 .       Each expression will be calculated
1406                 .       as a 16-bit word expression,
1407                 .       the high-order byte will be truncated.
1408                 .       Multiple expressions must be
1409 \f
1410
1411         THE ASSEMBLER                                          PAGE 1-18
1412         GENERAL ASSEMBLER DIRECTIVES
1413
1414
1415                 expn    separated by commas.
1416
1417            The  .byte  or .db directives are used to generate successive
1418         bytes of binary data in the object module.
1419
1420
1421         1.4.6  .word and .dw Directives
1422
1423         Format:
1424
1425                 .word   exp             ;Stores the binary value
1426                 .dw     exp             ;of the expression in
1427                                         ;the next word.
1428
1429                 .word   exp1,exp2,expn  ;Stores the binary values
1430                 .dw     exp1,exp2,expn  ;of the list of expressions
1431                                         ;in successive words.
1432
1433         where:  exp,    represent expressions that will occupy two
1434                 exp1,   bytes of data. Each expression will be
1435                 .       calculated as a 16-bit word expression.
1436                 .       Multiple expressions must be
1437                 expn    separated by commas.
1438
1439            The  .word  or .dw directives are used to generate successive
1440         words of binary data in the object module.
1441
1442
1443         1.4.7  .blkb, .blkw, and .ds Directives
1444
1445         Format:
1446
1447                 .blkb   N       ;reserve N bytes of space
1448                 .blkw   N       ;reserve N words of space
1449                 .ds     N       ;reserve N bytes of space
1450
1451            The  .blkb  and .ds directives reserve byte blocks in the ob-
1452         ject module;  the .blkw directive reserves word blocks.
1453
1454
1455         1.4.8  .ascii Directive
1456
1457         Format:
1458
1459                 .ascii  /string/
1460
1461         where:  string  is a string of printable ascii characters.
1462
1463                 /  /    represent   the  delimiting  characters.   These
1464                         delimiters   may   be   any   paired    printing
1465                         characters,  as  long  as the characters are not
1466                         contained within  the  string  itself.   If  the
1467 \f
1468
1469         THE ASSEMBLER                                          PAGE 1-19
1470         GENERAL ASSEMBLER DIRECTIVES
1471
1472
1473                         delimiting  characters  do not match, the .ascii
1474                         directive will give the (q) error.
1475
1476         The  .ascii  directive  places  one binary byte of data for each
1477         character in the string into the object module.
1478
1479
1480         1.4.9  .ascis Directive
1481
1482         Format:
1483
1484                 .ascis  /string/
1485
1486         where:  string  is a string of printable ascii characters.
1487
1488                 /  /    represent   the  delimiting  characters.   These
1489                         delimiters   may   be   any   paired    printing
1490                         characters,  as  long  as the characters are not
1491                         contained within  the  string  itself.   If  the
1492                         delimiting  characters  do not match, the .ascis
1493                         directive will give the (q) error.
1494
1495         The  .ascis  directive  places  one binary byte of data for each
1496         character in the  string  into  the  object  module.   The  last
1497         character in the string will have the high order bit set.
1498
1499
1500         1.4.10  .asciz Directive
1501
1502         Format:
1503
1504                 .asciz  /string/
1505
1506         where:  string  is a string of printable ascii characters.
1507
1508                 /  /    represent   the  delimiting  characters.   These
1509                         delimiters   may   be   any   paired    printing
1510                         characters,  as  long  as the characters are not
1511                         contained within  the  string  itself.   If  the
1512                         delimiting  characters  do not match, the .asciz
1513                         directive will give the (q) error.
1514
1515         The  .asciz  directive  places  one binary byte of data for each
1516         character in the string into the object module.   Following  all
1517         the  character  data  a  zero  byte is inserted to terminate the
1518         character string.
1519
1520
1521 \f
1522
1523         THE ASSEMBLER                                          PAGE 1-20
1524         GENERAL ASSEMBLER DIRECTIVES
1525
1526
1527         1.4.11  .radix Directive
1528
1529         Format:
1530
1531                 .radix  character
1532
1533         where:  character  represents  a single character specifying the
1534                         default radix to be used for succeeding numbers.
1535                         The character may be any one of the following:
1536
1537                         B,b     Binary
1538
1539                         O,o     Octal
1540                         Q,q
1541
1542                         D,d     Decimal
1543                         'blank'
1544
1545                         H,h     Hexidecimal
1546                         X,x
1547
1548
1549         1.4.12  .even Directive
1550
1551         Format:
1552
1553                 .even
1554
1555            The .even directive ensures that the current location counter
1556         contains an even boundary value by adding 1 if the current loca-
1557         tion is odd.
1558
1559
1560         1.4.13  .odd Directive
1561
1562         Format:
1563
1564                 .odd
1565
1566            The  .odd directive ensures that the current location counter
1567         contains an odd boundary value by adding one if the current  lo-
1568         cation is even.
1569
1570
1571 \f
1572
1573         THE ASSEMBLER                                          PAGE 1-21
1574         GENERAL ASSEMBLER DIRECTIVES
1575
1576
1577         1.4.14  .area Directive
1578
1579         Format:
1580
1581                 .area   name    [(options)]
1582
1583         where:  name    represents the symbolic name of the program sec-
1584                         tion.   This  name  may  be  the  same  as   any
1585                         user-defined  symbol  as  the area names are in-
1586                         dependent of all symbols and labels.
1587
1588                 options specify the type of program or data area:
1589                         ABS     absolute
1590                         REL     relocatable
1591                         OVR     overlay
1592                         CON     concatenate
1593                         PAG     paged area
1594
1595
1596            The .area directive provides a means of defining and separat-
1597         ing multiple programming and data sections.   The  name  is  the
1598         area  label used by the assembler and the linker to collect code
1599         from various separately assembled modules into one section.  The
1600         name may be from 1 to 79 characters in length.
1601
1602            The options are specified within parenthesis and separated by
1603         commas as shown in the following example:
1604
1605                 .area  TEST  (REL,CON)  ;This section is relocatable
1606                                         ;and concatenated with other
1607                                         ;sections of this program area.
1608
1609                 .area  DATA  (REL,OVR)  ;This section is relocatable
1610                                         ;and overlays other sections
1611                                         ;of this program area.
1612
1613                 .area  SYS   (ABS,OVR)  ;This section is defined as
1614                                         ;absolute and overlays other
1615                                         ;sections of this program area.
1616
1617                 .area  PAGE  (PAG)      ;This is a paged section. The
1618                                         ;section must be on a 256 byte
1619                                         ;boundary and its length is
1620                                         ;checked by the linker to be
1621                                         ;no larger than 256 bytes.
1622                                         ;This is useful for direct page
1623                                         ;areas.
1624
1625 \f
1626
1627         THE ASSEMBLER                                          PAGE 1-22
1628         GENERAL ASSEMBLER DIRECTIVES
1629
1630
1631            The  default  area type is REL|CON;  i.e.  a relocatable sec-
1632         tion which is concatenated with other sections of code with  the
1633         same area name.  The ABS option indicates an absolute area.  The
1634         OVR and CON options indicate if program  sections  of  the  same
1635         name  will overlay each other (start at the same location) or be
1636         concatenated with each other (appended to each other).
1637
1638            Warning: ABS used to automatically invoke OVR and CON was not
1639         allowed  with ABS.  This  behaviour  has been changed.  Absolute
1640         sections  need an explicit  OVR flag to be overlayed  with other
1641         sections of this program area.  Overlapping  absolute areas will
1642         generate a warning unless OVR is specified.
1643
1644            Multiple  invocations  of  the  .area directive with the same
1645         name must specify the same options or leave  the  options  field
1646         blank,  this  defaults  to  the previously specified options for
1647         this program area.
1648
1649         The   ASxxxx   assemblers   automatically  provide  two  program
1650         sections:
1651
1652                 '.  .ABS.'      This dummy section contains all absolute
1653                                 symbols and their values.
1654
1655                 '_CODE'         This  is  the default program/data area.
1656                                 This program area is of type (REL,CON).
1657
1658         The  ASxxxx  assemblers  also automatically generate two symbols
1659         for each program area:
1660
1661                 's_&lt;area&gt;'      This is the starting address of the pro-
1662                                 gram area.
1663
1664                                 indent  -16  'l_&lt;area&gt;'      This is the
1665                                 length of the program area.
1666
1667         The .area names and options are never case sensitive.
1668
1669
1670         1.4.15  .org Directive
1671
1672         Format:
1673
1674                 .org    exp
1675
1676         where:  exp     is  an absolute expression that becomes the cur-
1677                         rent location counter.
1678
1679         The  .org directive is valid only in an absolute program section
1680         and will give a (q) error if used in a relocatable program area.
1681         The  .org  directive specifies that the current location counter
1682         is to become the specified absolute value.
1683
1684
1685 \f
1686
1687         THE ASSEMBLER                                          PAGE 1-23
1688         GENERAL ASSEMBLER DIRECTIVES
1689
1690
1691         1.4.16  .globl Directive
1692
1693         Format:
1694
1695                 .globl  sym1,sym2,...,symn
1696
1697         where:  sym1,           represent legal symbolic names. When
1698                 sym2,...        When multiple symbols are specified,
1699                 symn            they are separated by commas.
1700
1701            A  .globl directive may also have a label field and/or a com-
1702         ment field.
1703
1704            The  .globl directive is provided to define (and thus provide
1705         linkage to) symbols not  otherwise  defined  as  global  symbols
1706         within  a  module.   In  defining  global  symbols the directive
1707         .globl J is similar to:
1708
1709               J == expression or J::
1710
1711            Because  object  modules  are linked by global symbols, these
1712         symbols are vital to a program.  All internal symbols  appearing
1713         within  a  given program must be defined at the end of pass 1 or
1714         they will be considered undefined.  The assembly directive  (-g)
1715         can  be  be  invoked to make all undefined symbols global at the
1716         end of pass 1.
1717
1718
1719         1.4.17  .if, .else, and .endif Directives
1720
1721         Format:
1722
1723                 .if     expr
1724                 .                       ;}
1725                 .                       ;} range of true condition
1726                 .                       ;}
1727                 .else
1728                 .                       ;}
1729                 .                       ;} range of false condition
1730                 .                       ;}
1731                 .endif
1732
1733            The  conditional  assembly directives allow you to include or
1734         exclude blocks of source code during the assembly process, based
1735         on the evaluation of the condition test.
1736
1737            The  range of true condition will be processed if the expres-
1738         sion 'expr' is not zero (i.e.  true) and the range of false con-
1739         dition  will  be processed if the expression 'expr' is zero (i.e
1740         false).  The range of true condition is optional as is the .else
1741         directive  and  the range of false condition.  The following are
1742         all valid .if/.else/.endif constructions:
1743 \f
1744
1745         THE ASSEMBLER                                          PAGE 1-24
1746         GENERAL ASSEMBLER DIRECTIVES
1747
1748
1749
1750                 .if     A-4             ;evaluate A-4
1751                 .byte   1,2             ;insert bytes if A-4 is
1752                 .endif                  ;not zero
1753
1754                 .if     K+3             ;evaluate K+3
1755                 .else
1756                 .byte   3,4             ;insert bytes if K+3
1757                 .endif                  ;is zero
1758
1759                 .if     J&amp;3             ;evaluate J masked by 3
1760                 .byte   12              ;insert this byte if J&amp;3
1761                 .else                   ;is not zero
1762                 .byte   13              ;insert this byte if J&amp;3
1763                 .endif                  ;is zero
1764
1765
1766         The .if/.else/.endif directives may be nested upto 10 levels.
1767
1768            The  .page  directive  is  processed within a false condition
1769         range to allow extended textual information to  be  incorporated
1770         in  the  source  program  with  out  the need to use the comment
1771         delimiter (;):
1772
1773                 .if     0
1774
1775                 .page
1776                 This text will be bypassed during assembly
1777                 but appear in the listing file.
1778                 .
1779                 .
1780                 .
1781
1782                 .endif
1783
1784
1785         1.4.18  .include Directive
1786
1787         Format:
1788
1789                 .include        string
1790
1791         where:  string  represents  a  delimited string that is the file
1792                         specification of an ASxxxx source file.
1793
1794            The .include directive is used to insert a source file within
1795         the source file currently being assembled.  When this  directive
1796         is encountered, an implicit .page directive is issued.  When the
1797         end of the specified source file is reached, an  implicit  .page
1798         directive is issued and input continues from the previous source
1799         file.  The maximum nesting level of source files specified by  a
1800         .include directive is five.
1801 \f
1802
1803         THE ASSEMBLER                                          PAGE 1-25
1804         GENERAL ASSEMBLER DIRECTIVES
1805
1806
1807            The  total  number  of separately specified .include files is
1808         unlimited as each .include file is opened and then closed during
1809         each pass made by the assembler.
1810
1811
1812         1.4.19  .setdp Directive
1813
1814         Format:
1815
1816                 .setdp [base [,area]]
1817
1818         The  set  direct  page  directive has a common format in all the
1819         AS68xx assemblers.  The .setdp directive is used to  inform  the
1820         assembler  of  the current direct page region and the offset ad-
1821         dress within the selected area.  The normal  invocation  methods
1822         are:
1823
1824                 .area   DIRECT  (PAG)
1825                 .setdp
1826
1827                 or
1828
1829                 .setdp  0,DIRECT
1830
1831         for  all  the  68xx microprocessors (the 6804 has only the paged
1832         ram area).  The commands specify that the direct page is in area
1833         DIRECT and its offset address is 0 (the only valid value for all
1834         but the 6809 microprocessor).  Be sure to place the DIRECT  area
1835         at address 0 during linking.  When the base address and area are
1836         not specified, then zero and the current area are the  defaults.
1837         If  a  .setdp directive is not issued the assembler defaults the
1838         direct page to the area "_CODE" at offset 0.
1839
1840            The  assembler  verifies  that  any  local variable used in a
1841         direct variable reference is located in this area.  Local  vari-
1842         able  and  constant value direct access addresses are checked to
1843         be within the address range from 0 to 255.
1844
1845            External direct references are assumed by the assembler to be
1846         in the correct area and have valid  offsets.   The  linker  will
1847         check all direct page relocations to verify that they are within
1848         the correct area.
1849
1850            The  6809  microprocessor  allows the selection of the direct
1851         page to be on any 256 byte boundary by loading  the  appropriate
1852         value  into the dp register.  Typically one would like to select
1853         the page boundary at link time, one method follows:
1854 \f
1855
1856         THE ASSEMBLER                                          PAGE 1-26
1857         GENERAL ASSEMBLER DIRECTIVES
1858
1859
1860                 .area   DIRECT  (PAG)   ; define the direct page
1861                 .setdp
1862                 .
1863                 .
1864                 .
1865                 .area   PROGRAM
1866                 .
1867                 ldd     #DIRECT         ; load the direct page register
1868                 tfr     a,dp            ; for access to the direct page
1869
1870         At  link  time specify the base and global equates to locate the
1871         direct page:
1872
1873                 -b DIRECT = 0x1000
1874                 -g DIRECT = 0x1000
1875
1876         Both  the  area address and offset value must be specified (area
1877         and variable names are independent).   The  linker  will  verify
1878         that  the  relocated  direct page accesses are within the direct
1879         page.
1880         The  preceeding  sequence  could  be repeated for multiple paged
1881         areas, however an alternate method is to define a non-paged area
1882         and use the .setdp directive to specify the offset value:
1883
1884                 .area   DIRECT          ; define non-paged area
1885                 .
1886                 .
1887                 .
1888                 .area   PROGRAM
1889                 .
1890                 .setdp  0,DIRECT        ; direct page area
1891                 ldd     #DIRECT         ; load the direct page register
1892                 tfr     a,dp            ; for access to the direct page
1893                 .
1894                 .
1895                 .setdp  0x100,DIRECT    ; direct page area
1896                 ldd     #DIRECT+0x100   ; load the direct page register
1897                 tfr     a,dp            ; for access to the direct page
1898
1899         The  linker  will  verify that subsequent direct page references
1900         are in the specified area and offset address range.  It  is  the
1901         programmers responsibility to load the dp register with the cor-
1902         rect page segment  corresponding  to  the  .setdp  base  address
1903         specified.
1904
1905            For  those  cases  where a single piece of code must access a
1906         defined data structure within a direct page and there  are  many
1907         pages,  define  a  dumby  direct page linked at address 0.  This
1908         dumby page is used only to define  the  variable  labels.   Then
1909         load  the dp register with the real base address but donot use a
1910         .setdp  directive.   This  method  is  equivalent   to   indexed
1911 \f
1912
1913         THE ASSEMBLER                                          PAGE 1-27
1914         GENERAL ASSEMBLER DIRECTIVES
1915
1916
1917         addressing,  where the dp register is the index register and the
1918         direct addressing is the offset.
1919
1920
1921         1.5  INVOKING ASXXXX
1922
1923
1924            The  ASxxxx assemblers are command line oriented.  The PC as-
1925         semblers are started with the appropriate option(s) and  file(s)
1926         to assemble following the assembler name:
1927
1928         as-z80 [-dqxjgaloscpff] file1 [file2 file3 ...  file6]
1929
1930         The options are:
1931
1932                 d       decimal listing
1933                 q       octal   listing
1934                 x       hex     listing (default)
1935
1936                         The listing radix affects the
1937                         .lst, .rel, and .sym files.
1938
1939                 j       add line number and debug information to file
1940                 g       undefined symbols made global
1941                 a       all user symbols made global
1942
1943                 l       create list   output file1.lst
1944                 o       create object output file1.rel
1945                 s       create symbol output file1.sym
1946
1947                 c       generate sdcdb debug information
1948
1949                 p       disable listing pagination
1950
1951                         relocatable reference flagging:
1952
1953                 f       by  `   in the listing file
1954                 ff      by mode in the listing file
1955
1956         asx8051 specific command line option:
1957                 -I<dir>  Add the named directory to the include file
1958                         search path.  This option may be used more than once.
1959                         Directories are searched in the order given.
1960
1961            The file name for the .lst, .rel, and .sym files is the first
1962         file name specified in the command line.  All output  files  are
1963         ascii  text  files which may be edited, copied, etc.  The output
1964         files are the concatenation of all the input files, if files are
1965         to  be  assembled  independently  invoke  the assembler for each
1966         file.
1967
1968            The  .rel  file contains a radix directive so that the linker
1969         will use the proper conversion for this file.  Linked files  may
1970         have different radices.
1971
1972         ASXXXX assembles supported by and distributed with SDCC are:
1973                 asx8051         (Intel 8051)
1974                 as-z80          (Zilog Z80 / Hitachi HD64180)
1975                 as-gbz80        (GameBoy Z80-like CPU)
1976                 as-hc08         (Motorola 68HC08)
1977 \f
1978
1979         THE ASSEMBLER                                          PAGE 1-28
1980         INVOKING ASXXXX
1981
1982
1983            If  the list (l) option is specified without the symbol table
1984         (s) option, the symbol table is placed at the end of the listing
1985         file.
1986
1987
1988         1.6  ERRORS
1989
1990
1991            The  ASxxxx assemblers provide limited diagnostic error codes
1992         during the assembly process, these errors will be noted  in  the
1993         listing file and printed on the stderr device.
1994
1995            The assembler reports the errors on the stderr device as
1996
1997                 ?ASxxxx-Error-&lt;*&gt; in line nnn of filename
1998
1999         where  * is the error code, nnn is the line number, and filename
2000         is the source/include file.
2001
2002            The errors are:
2003
2004               (.)   This  error  is caused by an absolute direct assign-
2005                     ment of the current location counter
2006                           . = expression (incorrect)
2007                     rather than the correct
2008                           . = . + expression
2009
2010               (a)   Indicates  a machine specific addressing or address-
2011                     ing mode error.
2012
2013               (b)   Indicates a direct page boundary error.
2014
2015               (d)   Indicates a direct page addressing error.
2016
2017               (i)   Caused  by  an  .include file error or an .if/.endif
2018                     mismatch.
2019
2020               (m)   Multiple  definitions  of  the  same label, multiple
2021                     .module directives, or multiple  conflicting  attri-
2022                     butes in an .area directive.
2023
2024               (o)   Directive  or  mnemonic error or the use of the .org
2025                     directive in a relocatable area.
2026
2027               (p)   Phase error:  label location changing between passes
2028                     2 and 3.  Normally caused by having  more  than  one
2029                     level of forward referencing.
2030
2031               (q)   Questionable syntax:  missing or improper operators,
2032                     terminators, or delimiters.
2033
2034               (r)   Relocation  error:   logic  operation attempted on a
2035 \f
2036
2037         THE ASSEMBLER                                          PAGE 1-29
2038         ERRORS
2039
2040
2041                     relocatable term, addition of two relocatable terms,
2042                     subtraction  of two relocatable terms not within the
2043                     same programming area or external symbols.
2044
2045               (u)   Undefined symbol encountered during assembly.
2046
2047
2048         1.7  LISTING FILE
2049
2050
2051            The  (-l) option produces an ascii output listing file.  Each
2052         page of output contains a four line header:
2053
2054
2055              1.  The ASxxxx program name and page number
2056
2057              2.  Title from a .title directive (if any)
2058
2059              3.  Subtitle from a .sbttl directive (if any)
2060
2061              4.  Blank line
2062
2063
2064
2065         Each succeeding line contains five fields:
2066
2067
2068              1.  Error field (first three characters of line)
2069
2070              2.  Current location counter
2071
2072              3.  Generated code in byte format
2073
2074              4.  Source text line number
2075
2076              5.  Source text
2077
2078
2079            The error field may contain upto 2 error flags indicating any
2080         errors encountered while assembling this line of source code.
2081
2082            The  current  location counter field displays the 16-bit pro-
2083         gram position.  This field will be in the selected radix.
2084
2085            The generated code follows the program location.  The listing
2086         radix determines the number of bytes that will be  displayed  in
2087         this field.  Hexidecimal listing allows six bytes of data within
2088         the field, decimal and octal allow four bytes within the  field.
2089         If more than one field of data is generated from the assembly of
2090         a single line of source code, then the data field is repeated on
2091         successive lines.
2092
2093 \f
2094
2095         THE ASSEMBLER                                          PAGE 1-30
2096         LISTING FILE
2097
2098
2099            The source text line number is printed in decimal and is fol-
2100         lowed by the source text.
2101
2102            Two  special  cases  will  disable  the  listing of a line of
2103         source text:
2104
2105              1.  Source line with a .page directive is never listed.
2106
2107              2.  Source  line  with  a  .include  file  directive is not
2108                  listed unless the .include file cannot be opened.
2109
2110
2111            Two  data  field  options  are  available to flag those bytes
2112         which will be relocated by the linker.   If  the  -f  option  is
2113         specified  then  each  byte to be relocated will be preceeded by
2114         the '`' character.  If the -ff option  is  specified  then  each
2115         byte  to  be relocated will be preceeded by one of the following
2116         characters:
2117
2118              1.  *   paged relocation
2119
2120              2.  u   low  byte of unsigned word or unsigned byte
2121
2122              3.  v   high byte of unsigned word
2123
2124              4.  p   PCR low  byte of word relocation or PCR byte
2125
2126              5.  q   PCR high byte of word relocation
2127
2128              6.  r   low  byte relocation or byte relocation
2129
2130              7.  s   high byte relocation
2131
2132
2133
2134         1.8  SYMBOL TABLE FILE
2135
2136
2137            The symbol table has two parts:
2138
2139              1.  The alphabetically sorted list of symbols and/or labels
2140                  defined or referenced in the source program.
2141
2142              2.  A  list of the program areas defined during assembly of
2143                  the source program.
2144
2145
2146            The sorted list of symbols and/or labels contains the follow-
2147         ing information:
2148
2149              1.  Program  area  number (none if absolute value or exter-
2150                  nal)
2151 \f
2152
2153         THE ASSEMBLER                                          PAGE 1-31
2154         SYMBOL TABLE FILE
2155
2156
2157              2.  The symbol or label
2158
2159              3.  Directly assigned symbol is denoted with an (=) sign
2160
2161              4.  The  value of a symbol, location of a label relative to
2162                  the program area base address (=0), or a ****  indicat-
2163                  ing the symbol or label is undefined.
2164
2165              5.  The  characters:   G - global, R - relocatable, and X -
2166                  external.
2167
2168
2169            The list of program areas provides the correspondence between
2170         the program area numbers and the defined program areas, the size
2171         of the program areas, and the area flags (attributes).
2172
2173
2174         1.9  OBJECT FILE
2175
2176
2177            The  object  file is an ascii file containing the information
2178         needed by the linker to bind multiple object modules into a com-
2179         plete  loadable  memory  image.   The object module contains the
2180         following designators:
2181
2182                 [XDQ][HL]
2183                         X       Hexidecimal radix
2184                         D       Decimal radix
2185                         Q       Octal radix
2186
2187                         H       Most significant byte first
2188                         L       Least significant byte first
2189
2190                 H       Header
2191                 M       Module
2192                 A       Area
2193                 S       Symbol
2194                 T       Object code
2195                 R       Relocation information
2196                 P       Paging information
2197
2198            Refer to the linker for a detailed description of each of the
2199         designators and the format of the information contained  in  the
2200         object file.
2201 \f
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215                                     CHAPTER 2
2216
2217                                    THE LINKER
2218
2219
2220
2221
2222
2223         2.1  ASLINK RELOCATING LINKER
2224
2225
2226            ASLINK is the companion linker for the ASxxxx assemblers.
2227
2228            The  program ASLINK is a general relocating linker performing
2229         the following functions:
2230
2231              1.  Bind multiple object modules into a single memory image
2232
2233              2.  Resolve inter-module symbol references
2234
2235              3.  Combine  code  belonging to the same area from multiple
2236                  object files into a single contiguous memory region
2237
2238              4.  Search and import object module libraries for undefined
2239                  global variables
2240
2241              5.  Perform   byte   and   word  program  counter  relative
2242                  (pc or pcr) addressing calculations
2243
2244              6.  Define absolute symbol values at link time
2245
2246              7.  Define absolute area base address values at link time
2247
2248              8.  Produce Intel Hex or Motorola S19 output file
2249
2250              9.  Produce a map of the linked memory image
2251
2252             10.  Produce  an updated listing file with the relocated ad-
2253                  dresses and data
2254
2255
2256
2257 \f
2258
2259         THE LINKER                                              PAGE 2-2
2260         INVOKING ASLINK
2261
2262
2263         2.2  INVOKING ASLINK
2264
2265
2266            The  linker  may run in the command line mode or command file
2267         modes.  The allowed startup linker commands are:
2268
2269         -c/-f           command line / command file modes
2270
2271         -p/-n           enable/disable echo file.lnk input to stdout
2272
2273            If  command  line  mode is selected, all linker commands come
2274         from stdin, if the command file mode is  selected  the  commands
2275         are input from the specified file (extension must be .lnk).
2276
2277            Most  sytems require the initial options to be entered on the
2278            command line:
2279
2280                 ASLINK -[cfpn]
2281
2282            Some  systems  may  request the arguments after the linker is
2283            started at a system specific prompt:
2284
2285                 ASLINK
2286                 argv:  -[cfpn]
2287
2288         After invoking the linker the valid options are:
2289
2290              1.  -i/-s   Intel Hex (file.ihx) or Motorola S19 (file.s19)
2291                  image output file.
2292
2293              2.  -z      Specifies that symbol names are case sensitive.
2294
2295              3.  -m      Generate a map file (file.map).  This file con-
2296                  tains a list of the symbols (by area) with absolute ad-
2297                  dresses,  sizes  of  linked  areas,  and  other linking
2298                  information.
2299
2300              4.  -w      Specifies  that  a  wide listing format be used
2301                  for the map file.
2302
2303              5.  -xdq    Specifies  the  number  radix  for the map file
2304                  (Hexidecimal, Decimal, or Octal).
2305
2306              6.  -u      Generate  an  updated  listing  file (file.rst)
2307                  derived from the relocated addresses and data from  the
2308                  linker
2309
2310              7.  fileN   Files  to  be linked.  Files may be on the same
2311                  line as the above options or on a separate line(s)  one
2312                  file  per line or multiple files separated by spaces or
2313                  tabs.
2314
2315 \f
2316
2317         THE LINKER                                              PAGE 2-3
2318         INVOKING ASLINK
2319
2320
2321              8.  -b  area = expression (one definition per line)
2322                  This  specifies  an area base address where the expres-
2323                  sion may contain constants and/or defined symbols  from
2324                  the linked files.
2325
2326              9.  -g  symbol = expression (one definition per line)
2327                  This  specifies  the value for the symbol where the ex-
2328                  pression may contain constants and/or  defined  symbols
2329                  from the linked files.
2330
2331             10.  -k  library directory path
2332                  (one  definition  per line) This specifies one possible
2333                  path to an object library.  More than one path  is  al-
2334                  lowed.
2335
2336             11.  -l  library file specification
2337                  (one  definition  per  line)  This specifies a possible
2338                  library file.  More than one file is allowed.
2339
2340             12.  -e      or null line, terminates input to the linker.
2341
2342
2343
2344         2.3  LIBRARY PATH(S) AND FILE(S)
2345
2346
2347            The process of resolving undefined symbols after scanning the
2348         input object  files  includes  the  scanning  of  object  module
2349         libraries.   The  linker will search through all combinations of
2350         the library path specifications (input by the -k option) and the
2351         library  file  specifications (input by the -l option) that lead
2352         to an existing library file.  Each library file contains a  list
2353         (one  file  per  line)  of  modules  included in this particular
2354         library.  Each existing object module is scanned for a match  to
2355         the undefined symbol.  The first module containing the symbol is
2356         then linked with the previous modules to resolve the symbol  de-
2357         finition.   The  library  object  modules are rescanned until no
2358         more symbols can be resolved.   The  scanning  algorithm  allows
2359         resolution  of  back references.  No errors are reported for non
2360         existant library files or object modules.
2361
2362            The  library  file  specification may be formed in one of two
2363         ways:
2364
2365              1.  If  the  library  file  contained an absolute path/file
2366                  specification  then  this  is   the   object   module's
2367                  path/file.
2368                  (i.e.  C:\...)
2369
2370              2.  If  the  library  file  contains  a  relative path/file
2371                  specification then the concatenation of  the  path  and
2372 \f
2373
2374         THE LINKER                                              PAGE 2-4
2375         LIBRARY PATH(S) AND FILE(S)
2376
2377
2378                  this  file  specification  becomes  the object module's
2379                  path/file.
2380                  (i.e.  \...)
2381
2382
2383            As  an example, assume there exists a library file termio.lib
2384         in the syslib directory specifying the following object modules:
2385
2386         \6809\io_disk        first object module
2387         d:\special\io_comm   second object module
2388
2389         and the following parameters were specified to the linker:
2390
2391         -k c:\iosystem\    the first path
2392         -k c:\syslib\      the second path
2393
2394         -l termio          the first library file
2395         -l io              the second library file (no such file)
2396
2397         The  linker  will attempt to use the following object modules to
2398         resolve any undefined symbols:
2399
2400         c:\syslib\6809\io_disk.rel     (concatenated path/file)
2401         d:\special\io_comm.rel         (absolute path/file)
2402
2403         all  other path(s)/file(s) don't exist.  (No errors are reported
2404         for non existant path(s)/file(s).)
2405
2406
2407         2.4  ASLINK PROCESSING
2408
2409
2410            The  linker  processes  the  files  in  the  order  they  are
2411         presented.  The first pass through the input files  is  used  to
2412         define  all  program  areas, the section area sizes, and symbols
2413         defined or referenced.  Undefined symbols will initiate a search
2414         of any specified library file(s) and the importing of the module
2415         containing the symbol definition.  After the first pass  the  -b
2416         (area  base  address) definitions, if any, are processed and the
2417         areas linked.
2418
2419            The  area  linking proceeds by first examining the area types
2420         ABS, CON, REL, OVR and PAG.  Absolute areas (ABS) from  separate
2421         object modules are always overlayed and have been assembled at a
2422         specific address, these are not normally relocated (if a -b com-
2423         mand  is  used  on an absolute area the area will be relocated).
2424         Relative areas (normally defined as REL|CON) have a base address
2425         of  0x0000  as read from the object files, the -b command speci-
2426         fies the beginning address of the area.  All subsequent relative
2427         areas  will  be  concatenated  with  proceeding  relative areas.
2428         Where specific ordering is desired, the first linker input  file
2429         should  have  the area definitions in the desired order.  At the
2430 \f
2431
2432         THE LINKER                                              PAGE 2-5
2433         ASLINK PROCESSING
2434
2435
2436         completion of the area linking all area  addresses  and  lengths
2437         have  been determined.  The areas of type PAG are verified to be
2438         on a 256 byte boundary and that the length does not  exceed  256
2439         bytes.  Any errors are noted on stderr and in the map file.
2440
2441            Next  the  global symbol definitions (-g option), if any, are
2442         processed.  The symbol definitions have been delayed until  this
2443         point because the absolute addresses of all internal symbols are
2444         known and can be used in the expression calculations.
2445
2446            Before  continuing  with the linking process the symbol table
2447         is scanned to determine if any symbols have been referenced  but
2448         not defined.  Undefined symbols are listed on the stderr device.
2449         if a .module directive was included in the  assembled  file  the
2450         module  making  the reference to this undefined variable will be
2451         printed.
2452
2453            Constants  defined  as global in more than one module will be
2454         flagged as multiple definitions if their values are not  identi-
2455         cal.
2456
2457            After  the  preceeding  processes are complete the linker may
2458         output a map file (-m option).  This file provides the following
2459         information:
2460
2461              1.  Global symbol values and label absolute addresses
2462
2463              2.  Defined areas and there lengths
2464
2465              3.  Remaining undefined symbols
2466
2467              4.  List of modules linked
2468
2469              5.  List of library modules linked
2470
2471              6.  List of -b and -g definitions
2472
2473
2474
2475
2476            The final step of the linking process is performed during the
2477         second pass of the input files.  As the xxx.rel files  are  read
2478         the code is relocated by substituting the physical addresses for
2479         the referenced symbols and areas and may be output in  Intel  or
2480         Motorola  formats.   The  number of files linked and symbols de-
2481         fined/referenced is limited by the processor space available  to
2482         build the area/symbol lists.  If the -u option is specified then
2483         the listing files  (file.lst)  associated  with  the  relocation
2484         files  (file.rel)  are  scanned  and  used  to create a new file
2485         (file.rst) which has all addresses and data relocated  to  their
2486         final values.
2487
2488 \f
2489
2490         THE LINKER                                              PAGE 2-6
2491         LINKER INPUT FORMAT
2492
2493
2494         2.5  LINKER INPUT FORMAT
2495
2496
2497            The  linkers'  input  object file is an ascii file containing
2498         the information needed by the linker  to  bind  multiple  object
2499         modules into a complete loadable memory image.
2500
2501         The object module contains the following designators:
2502
2503                 [XDQ][HL]
2504                         X       Hexidecimal radix
2505                         D       Decimal radix
2506                         Q       Octal radix
2507
2508                         H       Most significant byte first
2509                         L       Least significant byte first
2510
2511                 H       Header
2512                 M       Module
2513                 A       Area
2514                 S       Symbol
2515                 T       Object code
2516                 R       Relocation information
2517                 P       Paging information
2518
2519
2520         2.5.1  Object Module Format
2521
2522
2523            The  first  line  of  an object module contains the [XDQ][HL]
2524         format specifier (i.e.  XH indicates  a  hexidecimal  file  with
2525         most significant byte first) for the following designators.
2526
2527
2528         2.5.2  Header Line
2529
2530                 H aa areas gg global symbols
2531
2532            The  header  line  specifies  the number of areas(aa) and the
2533         number of global symbols(gg) defined or referenced in  this  ob-
2534         ject module segment.
2535
2536
2537 \f
2538
2539         THE LINKER                                              PAGE 2-7
2540         LINKER INPUT FORMAT
2541
2542
2543         2.5.3  Module Line
2544
2545                 M name
2546
2547            The  module  line  specifies  the module name from which this
2548         header segment was assembled.  The module line will  not  appear
2549         if the .module directive was not used in the source program.
2550
2551
2552         2.5.4  Symbol Line
2553
2554                 S string Defnnnn
2555
2556                         or
2557
2558                 S string Refnnnn
2559
2560            The  symbol line defines (Def) or references (Ref) the symbol
2561         'string' with the value nnnn.  The defined value is relative  to
2562         the  current area base address.  References to constants and ex-
2563         ternal global symbols will always appear before the  first  area
2564         definition.  References to external symbols will have a value of
2565         zero.
2566
2567
2568         2.5.5  Area Line
2569
2570                 A label size ss flags ff
2571
2572            The  area  line  defines the area label, the size (ss) of the
2573         area in bytes, and the area flags (ff).  The area flags  specify
2574         the ABS, REL, CON, OVR, and PAG parameters:
2575
2576                 OVR/CON  (0x04/0x00 i.e.  bit position 2)
2577
2578                 ABS/REL  (0x08/0x00 i.e.  bit position 3)
2579
2580                 PAG      (0x10 i.e.  bit position 4)
2581
2582
2583         2.5.6  T Line
2584
2585                 T xx xx nn nn nn nn nn ...
2586
2587            The  T  line contains the assembled code output by the assem-
2588         bler with xx xx being the offset address from the  current  area
2589         base address and nn being the assembled instructions and data in
2590         byte format.
2591
2592
2593 \f
2594
2595         THE LINKER                                              PAGE 2-8
2596         LINKER INPUT FORMAT
2597
2598
2599         2.5.7  R Line
2600
2601                 R 0 0 nn nn n1 n2 xx xx ...
2602
2603            The R line provides the relocation information to the linker.
2604         The nn nn value is the current area index, i.e.  which area  the
2605         current  values  were  assembled.  Relocation information is en-
2606         coded in groups of 4 bytes:
2607
2608              1.  n1  is  the  relocation mode and object format, for the
2609                  adhoc extension modes refer to asxxxx.h or aslink.h
2610                  1.  bit 0  word(0x00)/byte(0x01)
2611                  2.  bit 1  relocatable area(0x00)/symbol(0x02)
2612                  3.  bit 2  normal(0x00)/PC relative(0x04) relocation
2613                  4.  bit 3  1-byte(0x00)/2-byte(0x08)  object format for
2614                      byte data
2615                  5.  bit 4  signed(0x00)/unsigned(0x10) byte data
2616                  6.  bit 5  normal(0x00)/page '0'(0x20) reference
2617                  7.  bit 6  normal(0x00)/page 'nnn'(0x40) reference
2618                  8.  bit 7  LSB  byte(0x00)/MSB  byte(0x80)  with 2-byte
2619                      mode
2620
2621              2.  n2  is  a byte index into the corresponding (i.e.  pre-
2622                  ceeding) T line data (i.e.  a pointer to the data to be
2623                  updated  by  the  relocation).   The T line data may be
2624                  1-byte or  2-byte  byte  data  format  or  2-byte  word
2625                  format.
2626
2627              3.  xx xx  is the area/symbol index for the area/symbol be-
2628                  ing referenced.  the corresponding area/symbol is found
2629                  in the header area/symbol lists.
2630
2631
2632         The groups of 4 bytes are repeated for each item requiring relo-
2633         cation in the preceeding T line.
2634
2635
2636         2.5.8  P Line
2637
2638                 P 0 0 nn nn n1 n2 xx xx
2639
2640            The  P  line provides the paging information to the linker as
2641         specified by a .setdp directive.  The format of  the  relocation
2642         information is identical to that of the R line.  The correspond-
2643         ing T line has the following information:
2644                 T xx xx aa aa bb bb
2645
2646            Where  aa aa is the area reference number which specifies the
2647         selected page area and bb bb is the base address  of  the  page.
2648         bb bb will require relocation processing if the 'n1 n2 xx xx' is
2649         specified in the P line.  The linker will verify that  the  base
2650 \f
2651
2652         THE LINKER                                              PAGE 2-9
2653         LINKER INPUT FORMAT
2654
2655
2656         address is on a 256 byte boundary and that the page length of an
2657         area defined with the PAG type is not larger than 256 bytes.
2658
2659            The  linker  defaults any direct page references to the first
2660         area defined in the input REL file.  All ASxxxx assemblers  will
2661         specify the _CODE area first, making this the default page area.
2662
2663
2664         2.6  LINKER ERROR MESSAGES
2665
2666
2667            The linker provides detailed error messages allowing the pro-
2668         grammer to quickly find the errant code.   As  the  linker  com-
2669         pletes  pass 1  over  the  input  file(s)  it  reports  any page
2670         boundary or page length errors as follows:
2671
2672         ?ASlink-Warning-Paged Area PAGE0 Boundary Error
2673
2674         and/or
2675
2676         ?ASlink-Warning-Paged Area PAGE0 Length Error
2677
2678         where PAGE0 is the paged area.
2679
2680            During  Pass  two the linker reads the T, R, and P lines per-
2681         forming the necessary relocations and  outputting  the  absolute
2682         code.  Various errors may be reported during this process
2683         The P line processing can produce only one possible error:
2684
2685         ?ASlink-Warning-Page Definition Boundary Error
2686                  file        module      pgarea      pgoffset
2687           PgDef  t6809l      t6809l      PAGE0       0001
2688
2689         The error message specifies the file and module where the .setdp
2690         direct was issued and indicates  the  page  area  and  the  page
2691         offset value determined after relocation.
2692
2693
2694         The R line processing produces various errors:
2695
2696         ?ASlink-Warning-Byte PCR relocation error for symbol  bra2
2697                  file        module      area        offset
2698           Refby  t6809l      t6809l      TEST        00FE
2699           Defin  tconst      tconst      .  .ABS.    0080
2700
2701         ?ASlink-Warning-Unsigned Byte error for symbol  two56
2702                  file        module      area        offset
2703           Refby  t6800l      t6800l      DIRECT      0015
2704           Defin  tconst      tconst      .  .ABS.    0100
2705 \f
2706
2707         THE LINKER                                             PAGE 2-10
2708         LINKER ERROR MESSAGES
2709
2710
2711         ?ASlink-Warning-Page0 relocation error for symbol  ltwo56
2712                  file        module      area        offset
2713           Refby  t6800l      t6800l      DIRECT      000D
2714           Defin  tconst      tconst      DIRECT      0100
2715
2716         ?ASlink-Warning-Page Mode relocation error for symbol  two56
2717                  file        module      area        offset
2718           Refby  t6809l      t6809l      DIRECT      0005
2719           Defin  tconst      tconst      .  .ABS.    0100
2720
2721         ?ASlink-Warning-Page Mode relocation error
2722                  file        module      area        offset
2723           Refby  t           Pagetest    PROGRAM     0006
2724           Defin  t           Pagetest    DIRECT      0100
2725
2726         These  error messages specify the file, module, area, and offset
2727         within the area of the code  referencing  (Refby)  and  defining
2728         (Defin) the symbol.  If the symbol is defined in the same module
2729         as the reference the linker is unable to report the symbol name.
2730         The  assembler  listing file(s) should be examined at the offset
2731         from the specified area to located the offending code.
2732
2733            The errors are:
2734
2735              1.  The  byte PCR error is caused by exceeding the pc rela-
2736                  tive byte branch range.
2737
2738              2.  The Unsigned byte error indicates an indexing value was
2739                  negative or larger than 255.
2740
2741              3.  The  Page0  error is generated if the direct page vari-
2742                  able is not in the page0 range of 0 to 255.
2743
2744              4.  The page mode error is generated if the direct variable
2745                  is not within the current direct page (6809).
2746
2747 \f
2748
2749         THE LINKER                                             Page 2-11
2750         INTEL HEX OUTPUT FORMAT
2751
2752
2753         2.7  INTEL HEX OUTPUT FORMAT
2754
2755         Record Mark Field    -  This  field  signifies  the  start  of a
2756                                 record, and consists of an  ascii  colon
2757                                 (:).
2758
2759         Record Length Field  -  This   field   consists   of  two  ascii
2760                                 characters which indicate the number  of
2761                                 data   bytes   in   this   record.   The
2762                                 characters are the result of  converting
2763                                 the  number  of  bytes  in binary to two
2764                                 ascii characters, high digit first.   An
2765                                 End  of  File  record contains two ascii
2766                                 zeros in this field.
2767
2768         Load Address Field   -  This  field  consists  of the four ascii
2769                                 characters which result from  converting
2770                                 the  the  binary value of the address in
2771                                 which to begin loading this record.  The
2772                                 order is as follows:
2773
2774                                     High digit of high byte of address.
2775                                     Low digit of high byte of address.
2776                                     High digit of low byte of address.
2777                                     Low digit of low byte of address.
2778
2779                                 In an End of File record this field con-
2780                                 sists of either four ascii zeros or  the
2781                                 program  entry  address.   Currently the
2782                                 entry address option is not supported.
2783
2784         Record Type Field    -  This  field  identifies the record type,
2785                                 which is either 0 for data records or  1
2786                                 for  an End of File record.  It consists
2787                                 of two ascii characters, with  the  high
2788                                 digit of the record type first, followed
2789                                 by the low digit of the record type.
2790
2791         Data Field           -  This  field consists of the actual data,
2792                                 converted to two ascii characters,  high
2793                                 digit first.  There are no data bytes in
2794                                 the End of File record.
2795
2796         Checksum Field       -  The  checksum  field is the 8 bit binary
2797                                 sum of the record length field, the load
2798                                 address  field,  the  record type field,
2799                                 and the data field.  This  sum  is  then
2800                                 negated  (2's  complement) and converted
2801                                 to  two  ascii  characters,  high  digit
2802                                 first.
2803 \f
2804
2805         THE LINKER                                             Page 2-12
2806         MOTOROLA S1-S9 OUTPUT FORMAT
2807
2808
2809         2.8  MOTORLA S1-S9 OUTPUT FORMAT
2810
2811         Record Type Field    -  This  field  signifies  the  start  of a
2812                                 record and  identifies  the  the  record
2813                                 type as follows:
2814
2815                                     Ascii S1 - Data Record
2816                                     Ascii S9 - End of File Record
2817
2818         Record Length Field  -  This  field  specifies the record length
2819                                 which includes the  address,  data,  and
2820                                 checksum   fields.   The  8  bit  record
2821                                 length value is converted to  two  ascii
2822                                 characters, high digit first.
2823
2824         Load Address Field   -  This  field  consists  of the four ascii
2825                                 characters which result from  converting
2826                                 the  the  binary value of the address in
2827                                 which to begin loading this record.  The
2828                                 order is as follows:
2829
2830                                     High digit of high byte of address.
2831                                     Low digit of high byte of address.
2832                                     High digit of low byte of address.
2833                                     Low digit of low byte of address.
2834
2835                                 In an End of File record this field con-
2836                                 sists of either four ascii zeros or  the
2837                                 program  entry  address.   Currently the
2838                                 entry address option is not supported.
2839
2840         Data Field           -  This  field consists of the actual data,
2841                                 converted to two ascii characters,  high
2842                                 digit first.  There are no data bytes in
2843                                 the End of File record.
2844
2845         Checksum Field       -  The  checksum  field is the 8 bit binary
2846                                 sum of the record length field, the load
2847                                 address field, and the data field.  This
2848                                 sum is then  complemented  (1's  comple-
2849                                 ment)   and   converted   to  two  ascii
2850                                 characters, high digit first.
2851 \f
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865                                     CHAPTER 3
2866
2867                            BUILDING ASXXXX AND ASLINK
2868
2869
2870
2871
2872            The assemblers and linker have been successfully compiled us-
2873         ing  the  DECUS C  (PDP-11)  compiler  (patch  level   9)   with
2874         RT-11/TSX+,  Eyring  Research  Institute,  Inc.   PDOS (680x0) C
2875         V5.4b compiler, and Symantec C/C++ V6.1/V7.2.
2876
2877            The  device  specific  header  file  (i.e.  m6800.h, m6801.h,
2878         etc.) contains the DECUS C 'BUILD' directives for  generating  a
2879         command  file to compile, assemble, and link the necessary files
2880         to prepare an executable image for a particular assembler.
2881
2882
2883         3.1  BUILDING AN ASSEMBLER
2884
2885
2886            The  building  of  a typical assembler (6809 for example) re-
2887         quires the following files:
2888
2889              1.  M6809.H
2890              2.  M09EXT.C
2891              3.  M09MCH.C
2892              4.  M09ADR.C
2893              5.  M09PST.C
2894              6.  ASXXXX.H
2895              7.  ASMAIN.C
2896              8.  ASLEX.C
2897              9.  ASSYM.C
2898             10.  ASSUBR.C
2899             11.  ASEXPR.C
2900             12.  ASDATA.C
2901             13.  ASLIST.C
2902             14.  ASOUT.C
2903
2904
2905            The  first  five  files are the 6809 processor dependent sec-
2906         tions which contain the following:
2907
2908
2909 \f
2910
2911         BUILDING ASXXXX AND ASLINK                              PAGE 3-2
2912         BUILDING AN ASSEMBLER
2913
2914
2915              1.  m6809.h -  header  file containing the machine specific
2916                  definitions of constants,  variables,  structures,  and
2917                  types
2918
2919              2.  m09ext -  device  description, byte order, and file ex-
2920                  tension information
2921
2922              3.  m09pst -  a  table of the assembler general directives,
2923                  special device directives, and assembler mnemonics with
2924                  associated operation codes
2925
2926              4.  m09mch / m09adr -  machine specific code for processing
2927                  the device mnemonics,  addressing  modes,  and  special
2928                  directives
2929
2930
2931            The  remaining nine files provide the device independent sec-
2932         tions which handle the  details  of  file  input/output,  symbol
2933         table  generation,  program/data areas, expression analysis, and
2934         assembler directive processing.
2935
2936
2937         3.2  BUILDING ASLINK
2938
2939
2940            The building of the linker requires the following files:
2941
2942              1.  ASLINK.H
2943              2.  LKMAIN.C
2944              3.  LKLEX.C
2945              4.  LKAREA.C
2946              5.  LKHEAD.C
2947              6.  LKSYM.C
2948              7.  LKEVAL.C
2949              8.  LKDATA.C
2950              9.  LKLIST.C
2951             10.  LKRLOC.C
2952             11.  LKLIBR.C
2953             12.  LKS19.C
2954             13.  LKIHX.C
2955
2956 \f
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970                                    APPENDIX A
2971
2972                                 AS6800 ASSEMBLER
2973
2974
2975
2976
2977
2978         A.1  6800 REGISTER SET
2979
2980         The following is a list of the 6800 registers used by AS6800:
2981
2982                 a,b     -       8-bit accumulators
2983                 x       -       index register
2984
2985
2986         A.2  6800 INSTRUCTION SET
2987
2988
2989            The following tables list all 6800/6802/6808 mnemonics recog-
2990         nized by the AS6800 assembler.  The designation [] refers  to  a
2991         required addressing mode argument.  The following list specifies
2992         the format for each addressing mode supported by AS6800:
2993
2994                 #data           immediate data
2995                                 byte or word data
2996
2997                 *dir            direct page addressing
2998                                 (see .setdp directive)
2999                                 0 &lt;= dir &lt;= 255
3000
3001                 ,x              register indirect addressing
3002                                 zero offset
3003
3004                 offset,x        register indirect addressing
3005                                 0 &lt;= offset &lt;= 255
3006
3007                 ext             extended addressing
3008
3009                 label           branch label
3010
3011         The  terms  data, dir, offset, ext, and label may all be expres-
3012         sions.
3013
3014 \f
3015
3016         AS6800 ASSEMBLER                                        PAGE A-2
3017         6800 INSTRUCTION SET
3018
3019
3020            Note  that  not all addressing modes are valid with every in-
3021         struction, refer to the 6800 technical data for valid modes.
3022
3023
3024         A.2.1  Inherent Instructions
3025
3026                 aba                     cba
3027                 clc                     cli
3028                 clv                     daa
3029                 des                     dex
3030                 ins                     inx
3031                 nop                     rti
3032                 rts                     sba
3033                 sec                     sei
3034                 sev                     swi
3035                 tab                     tap
3036                 tba                     tpa
3037                 tsx                     txs
3038                 wai
3039
3040                 psha                    pshb
3041                 psh a                   psh b
3042                 pula                    pulb
3043                 pul a                   pul b
3044
3045
3046         A.2.2  Branch Instructions
3047
3048                 bra     label           bhi     label
3049                 bls     label           bcc     label
3050                 bhs     label           bcs     label
3051                 blo     label           bne     label
3052                 beq     label           bvc     label
3053                 bvs     label           bpl     label
3054                 bmi     label           bge     label
3055                 blt     label           bgt     label
3056                 ble     label           bsr     label
3057 \f
3058
3059         AS6800 ASSEMBLER                                        PAGE A-3
3060         6800 INSTRUCTION SET
3061
3062
3063         A.2.3  Single Operand Instructions
3064
3065                 asla                    aslb
3066                 asl a                   asl b
3067                 asl     []
3068
3069                 asra                    asrb
3070                 asr a                   asr b
3071                 asr     []
3072
3073                 clra                    clrb
3074                 clr a                   clr b
3075                 clr     []
3076
3077                 coma                    comb
3078                 com a                   com b
3079                 com     []
3080
3081                 deca                    decb
3082                 dec a                   dec b
3083                 dec     []
3084
3085                 inca                    incb
3086                 inc a                   inc b
3087                 inc     []
3088
3089                 lsla                    lslb
3090                 lsl a                   lsl b
3091                 lsl     []
3092
3093                 lsra                    lsrb
3094                 lsr a                   lsr b
3095                 lsr     []
3096
3097                 nega                    negb
3098                 neg a                   neg b
3099                 neg     []
3100
3101                 rola                    rolb
3102                 rol a                   rol b
3103                 rol     []
3104
3105                 rora                    rorb
3106                 ror a                   ror b
3107                 ror     []
3108
3109                 tsta                    tstb
3110                 tst a                   tst b
3111                 tst     []
3112 \f
3113
3114         AS6800 ASSEMBLER                                        PAGE A-4
3115         6800 INSTRUCTION SET
3116
3117
3118         A.2.4  Double Operand Instructions
3119
3120                 adca    []              adcb    []
3121                 adc a   []              adc b   []
3122
3123                 adda    []              addb    []
3124                 add a   []              add b   []
3125
3126                 anda    []              andb    []
3127                 and a   []              and b   []
3128
3129                 bita    []              bitb    []
3130                 bit a   []              bit b   []
3131
3132                 cmpa    []              cmpb    []
3133                 cmp a   []              cmp b   []
3134
3135                 eora    []              eorb    []
3136                 eor a   []              eor b   []
3137
3138                 ldaa    []              ldab    []
3139                 lda a   []              lda b   []
3140
3141                 oraa    []              orab    []
3142                 ora a   []              ora b   []
3143
3144                 sbca    []              sbcb    []
3145                 sbc a   []              sbc b   []
3146
3147                 staa    []              stab    []
3148                 sta a   []              sta b   []
3149
3150                 suba    []              subb    []
3151                 sub a   []              sub b   []
3152
3153
3154         A.2.5  Jump and Jump to Subroutine Instructions
3155
3156                 jmp     []              jsr     []
3157
3158
3159 \f
3160
3161         AS6800 ASSEMBLER                                        PAGE A-5
3162         6800 INSTRUCTION SET
3163
3164
3165         A.2.6  Long Register Instructions
3166
3167                 cpx     []
3168                 lds     []              sts     []
3169                 ldx     []              stx     []
3170 \f
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184                                    APPENDIX B
3185
3186                                 AS6801 ASSEMBLER
3187
3188
3189
3190
3191
3192         B.1  .hd6303 DIRECTIVE
3193
3194         Format:
3195
3196                 .hd6303
3197
3198         The  .hd6303 directive enables processing of the HD6303 specific
3199         mnemonics not included in  the  6801  instruction  set.   HD6303
3200         mnemonics  encountered  without  the  .hd6303  directive will be
3201         flagged with an 'o' error.
3202
3203
3204         B.2  6801 REGISTER SET
3205
3206         The following is a list of the 6801 registers used by AS6801:
3207
3208                 a,b     -       8-bit accumulators
3209                 d       -       16-bit accumulator &lt;a:b&gt;
3210                 x       -       index register
3211
3212
3213         B.3  6801 INSTRUCTION SET
3214
3215
3216            The  following tables list all 6801/6303 mnemonics recognized
3217         by the AS6801 assembler.  The designation []  refers  to  a  re-
3218         quired  addressing  mode argument.  The following list specifies
3219         the format for each addressing mode supported by AS6801:
3220
3221                 #data           immediate data
3222                                 byte or word data
3223
3224                 *dir            direct page addressing
3225                                 (see .setdp directive)
3226                                 0 &lt;= dir &lt;= 255
3227
3228 \f
3229
3230         AS6801 ASSEMBLER                                        PAGE B-2
3231         6801 INSTRUCTION SET
3232
3233
3234                 ,x              register indirect addressing
3235                                 zero offset
3236
3237                 offset,x        register indirect addressing
3238                                 0 &lt;= offset &lt;= 255
3239
3240                 ext             extended addressing
3241
3242                 label           branch label
3243
3244         The  terms  data, dir, offset, ext, and label may all be expres-
3245         sions.
3246
3247            Note  that  not all addressing modes are valid with every in-
3248         struction, refer to  the  6801/6303  technical  data  for  valid
3249         modes.
3250
3251
3252         B.3.1  Inherent Instructions
3253
3254                 aba             abx
3255                 cba             clc
3256                 cli             clv
3257                 daa             des
3258                 dex             ins
3259                 inx             mul
3260                 nop             rti
3261                 rts             sba
3262                 sec             sei
3263                 sev             swi
3264                 tab             tap
3265                 tba             tpa
3266                 tsx             txs
3267                 wai
3268
3269
3270         B.3.2  Branch Instructions
3271
3272                 bra     label           brn     label
3273                 bhi     label           bls     label
3274                 bcc     label           bhs     label
3275                 bcs     label           blo     label
3276                 bne     label           beq     label
3277                 bvc     label           bvs     label
3278                 bpl     label           bmi     label
3279                 bge     label           blt     label
3280                 bgt     label           ble     label
3281                 bsr     label
3282 \f
3283
3284         AS6801 ASSEMBLER                                        PAGE B-3
3285         6801 INSTRUCTION SET
3286
3287
3288         B.3.3  Single Operand Instructions
3289
3290                 asla            aslb            asld
3291                 asl a           asl b           asl d
3292                 asl     []
3293
3294                 asra            asrb
3295                 asr a           asr b
3296                 asr     []
3297
3298                 clra            clrb
3299                 clr a           clr b
3300                 clr     []
3301
3302                 coma            comb
3303                 com a           com b
3304                 com     []
3305
3306                 deca            decb
3307                 dec a           dec b
3308                 dec     []
3309
3310                 eora            eorb
3311                 eor a           eor b
3312                 eor     []
3313
3314                 inca            incb
3315                 inc a           inc b
3316                 inc     []
3317
3318                 lsla            lslb            lsld
3319                 lsl a           lsl b           lsl d
3320                 lsl     []
3321
3322                 lsra            lsrb            lsrd
3323                 lsr a           lsr b           lsr d
3324                 lsr     []
3325
3326                 nega            negb
3327                 neg a           neg b
3328                 neg     []
3329
3330                 psha            pshb            pshx
3331                 psh a           psh b           psh x
3332
3333                 pula            pulb            pulx
3334                 pul a           pul b           pul x
3335
3336                 rola            rolb
3337                 rol a           rol b
3338                 rol     []
3339
3340 \f
3341
3342         AS6801 ASSEMBLER                                        PAGE B-4
3343         6801 INSTRUCTION SET
3344
3345
3346                 rora            rorb
3347                 ror a           ror b
3348                 ror     []
3349
3350                 tsta            tstb
3351                 tst a           tst b
3352                 tst     []
3353
3354
3355         B.3.4  Double Operand Instructions
3356
3357                 adca    []      adcb    []
3358                 adc a   []      adc b   []
3359
3360                 adda    []      addb    []      addd    []
3361                 add a   []      add b   []      add d   []
3362
3363                 anda    []      andb    []
3364                 and a   []      and b   []
3365
3366                 bita    []      bitb    []
3367                 bit a   []      bit b   []
3368
3369                 cmpa    []      cmpb    []
3370                 cmp a   []      cmp b   []
3371
3372                 ldaa    []      ldab    []
3373                 lda a   []      lda b   []
3374
3375                 oraa    []      orab    []
3376                 ora a   []      ora b   []
3377
3378                 sbca    []      sbcb    []
3379                 sbc a   []      sbc b   []
3380
3381                 staa    []      stab    []
3382                 sta a   []      sta b   []
3383
3384                 suba    []      subb    []      subd    []
3385                 sub a   []      sub b   []      sub d   []
3386
3387
3388 \f
3389
3390         AS6801 ASSEMBLER                                        PAGE B-5
3391         6801 INSTRUCTION SET
3392
3393
3394         B.3.5  Jump and Jump to Subroutine Instructions
3395
3396                 jmp     []      jsr     []
3397
3398
3399         B.3.6  Long Register Instructions
3400
3401                 cpx     []      ldd     []
3402                 lds     []      ldx     []
3403                 std     []      sts     []
3404                 stx     []
3405
3406
3407         B.3.7  6303 Specific Instructions
3408
3409                 aim     #data, []       eim     #data, []
3410                 oim     #data, []       tim     #data, []
3411
3412                 xgdx            slp
3413 \f
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427                                    APPENDIX C
3428
3429                                 AS6804 ASSEMBLER
3430
3431
3432
3433
3434            Requires the .setdp directive to specify the ram area.
3435
3436
3437         C.1  6804 REGISTER SET
3438
3439         The following is a list of the 6804 registers used by AS6804:
3440
3441                 x,y     -       index registers
3442
3443
3444         C.2  6804 INSTRUCTION SET
3445
3446
3447            The  following  tables  list all 6804 mnemonics recognized by
3448         the AS6804 assembler.  The designation [] refers to  a  required
3449         addressing  mode  argument.   The  following  list specifies the
3450         format for each addressing mode supported by AS6804:
3451
3452                 #data           immediate data
3453                                 byte or word data
3454
3455                 ,x              register indirect addressing
3456
3457                 dir             direct addressing
3458                                 (see .setdp directive)
3459                                 0 &lt;= dir &lt;= 255
3460
3461                 ext             extended addressing
3462
3463                 label           branch label
3464
3465         The  terms data, dir, and ext may be expressions.  The label for
3466         the short branchs beq, bne, bcc, and bcs must not be external.
3467
3468            Note  that  not all addressing modes are valid with every in-
3469         struction, refer to the 6804 technical data for valid modes.
3470 \f
3471
3472         AS6804 ASSEMBLER                                        PAGE C-2
3473         6804 INSTRUCTION SET
3474
3475
3476         C.2.1  Inherent Instructions
3477
3478                 coma            decx
3479                 decy            incx
3480                 incy            rola
3481                 rti             rts
3482                 stop            tax
3483                 tay             txa
3484                 tya             wait
3485
3486
3487         C.2.2  Branch Instructions
3488
3489                 bne     label           beq     label
3490                 bcc     label           bcs     label
3491
3492
3493         C.2.3  Single Operand Instructions
3494
3495                 add     []
3496                 and     []
3497                 cmp     []
3498                 dec     []
3499                 inc     []
3500                 lda     []
3501                 sta     []
3502                 sub     []
3503
3504
3505         C.2.4  Jump and Jump to Subroutine Instructions
3506
3507                 jsr     []
3508                 jmp     []
3509
3510
3511         C.2.5  Bit Test Instructions
3512
3513                 brclr   #data,[],label
3514                 brset   #data,[],label
3515
3516                 bclr    #label,[]
3517                 bset    #label,[]
3518
3519
3520 \f
3521
3522         AS6804 ASSEMBLER                                        PAGE C-3
3523         6804 INSTRUCTION SET
3524
3525
3526         C.2.6  Load Immediate data Instruction
3527
3528                 mvi     [],#data
3529
3530
3531         C.2.7  6804 Derived Instructions
3532
3533                 asla
3534                 bam     label
3535                 bap     label
3536                 bxmi    label
3537                 bxpl    label
3538                 bymi    label
3539                 bypl    label
3540                 clra
3541                 clrx
3542                 clry
3543                 deca
3544                 decx
3545                 decy
3546                 inca
3547                 incx
3548                 incy
3549                 ldxi    #data
3550                 ldyi    #data
3551                 nop
3552                 tax
3553                 tay
3554                 txa
3555                 tya
3556 \f
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570                                    APPENDIX D
3571
3572                                 AS6805 ASSEMBLER
3573
3574
3575
3576
3577
3578         D.1  6805 REGISTER SET
3579
3580         The following is a list of the 6805 registers used by AS6805:
3581
3582                 a       -       8-bit accumulator
3583                 x       -       index register
3584
3585
3586         D.2  6805 INSTRUCTION SET
3587
3588
3589            The  following  tables  list all 6805 mnemonics recognized by
3590         the AS6805 assembler.  The designation [] refers to  a  required
3591         addressing  mode  argument.   The  following  list specifies the
3592         format for each addressing mode supported by AS6805:
3593
3594                 #data           immediate data
3595                                 byte or word data
3596
3597                 *dir            direct page addressing
3598                                 (see .setdp directive)
3599                                 0 &lt;= dir &lt;= 255
3600
3601                 ,x              register indirect addressing
3602                                 zero offset
3603
3604                 offset,x        register indirect addressing
3605                                   0 &lt;= offset &lt;= 255   --- byte mode
3606                                 256 &lt;= offset &lt;= 65535 --- word mode
3607                                 (an externally defined offset uses the
3608                                  word mode)
3609
3610                 ext             extended addressing
3611
3612                 label           branch label
3613
3614 \f
3615
3616         AS6805 ASSEMBLER                                        PAGE D-2
3617         6805 INSTRUCTION SET
3618
3619
3620         The terms data, dir, offset, and ext may all be expressions.
3621
3622            Note  that  not all addressing modes are valid with every in-
3623         struction, refer to the 6805 technical data for valid modes.
3624
3625
3626         D.2.1  Control Instructions
3627
3628                 clc             cli
3629                 nop             rsp
3630                 rti             rts
3631                 sec             sei
3632                 stop            swi
3633                 tax             txa
3634                 wait
3635
3636
3637         D.2.2  Bit Manipulation Instructions
3638
3639                 brset   #data,*dir,label
3640                 brclr   #data,*dir,label
3641
3642                 bset    #data,*dir
3643                 bclr    #data,*dir
3644
3645
3646         D.2.3  Branch Instructions
3647
3648                 bra     label           brn     label
3649                 bhi     label           bls     label
3650                 bcc     label           bcs     label
3651                 bne     label           beq     label
3652                 bhcc    label           bhcs    label
3653                 bpl     label           bmi     label
3654                 bmc     label           bms     label
3655                 bil     label           bih     label
3656                 bsr     label
3657 \f
3658
3659         AS6805 ASSEMBLER                                        PAGE D-3
3660         6805 INSTRUCTION SET
3661
3662
3663         D.2.4  Read-Modify-Write Instructions
3664
3665                 nega            negx
3666                 neg     []
3667
3668                 coma            comx
3669                 com     []
3670
3671                 lsra            lsrx
3672                 lsr     []
3673
3674                 rora            rorx
3675                 ror     []
3676
3677                 asra            asrx
3678                 asr     []
3679
3680                 lsla            lslx
3681                 lsl     []
3682
3683                 rola            rolx
3684                 rol     []
3685
3686                 deca            decx
3687                 dec     []
3688
3689                 inca            incx
3690                 inc     []
3691
3692                 tsta            tstx
3693                 tst     []
3694
3695                 clra            clrx
3696                 clr     []
3697
3698
3699         D.2.5  Register\Memory Instructions
3700
3701                 sub     []              cmp     []
3702                 sbc     []              cpx     []
3703                 and     []              bit     []
3704                 lda     []              sta     []
3705                 eor     []              adc     []
3706                 ora     []              add     []
3707                 ldx     []              stx     []
3708 \f
3709
3710         AS6805 ASSEMBLER                                        PAGE D-4
3711         6805 INSTRUCTION SET
3712
3713
3714         D.2.6  Jump and Jump to Subroutine Instructions
3715
3716                 jmp     []              jsr     []
3717 \f
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731                                    APPENDIX E
3732
3733                                 AS6808 ASSEMBLER
3734
3735
3736
3737
3738
3739         E.1  68HC08 REGISTER SET
3740
3741         The  following  is  a  list  of  the  68HC08  registers  used by
3742         AS68HC08:
3743
3744                 a       -       8-bit accumulator
3745                 x       -       index register  &lt;H:X&gt;
3746                 s       -       stack pointer
3747
3748
3749         E.2  68HC08 INSTRUCTION SET
3750
3751
3752            The  following tables list all 68HC08 mnemonics recognized by
3753         the AS6808 assembler.  The designation [] refers to  a  required
3754         addressing  mode  argument.   The  following  list specifies the
3755         format for each addressing mode supported by AS6808:
3756
3757                 #data           immediate data
3758                                 byte or word data
3759
3760                 *dir            direct page addressing
3761                                 (see .setdp directive)
3762                                 0 &lt;= dir &lt;= 255
3763
3764                 ,x              register indexed addressing
3765                                 zero offset
3766
3767                 offset,x        register indexed addressing
3768                                   0 &lt;= offset &lt;= 255   --- byte mode
3769                                 256 &lt;= offset &lt;= 65535 --- word mode
3770                                 (an externally defined offset uses the
3771                                  word mode)
3772
3773                 ,x+             register indexed addressing
3774                                 zero offset with post increment
3775 \f
3776
3777         AS6808 ASSEMBLER                                        PAGE E-2
3778         68HC08 INSTRUCTION SET
3779
3780
3781
3782                 offset,x+       register indexed addressing
3783                                 unsigned byte offset with post increment
3784
3785                 offset,s        stack pointer indexed addressing
3786                                   0 &lt;= offset &lt;= 255   --- byte mode
3787                                 256 &lt;= offset &lt;= 65535 --- word mode
3788                                 (an externally defined offset uses the
3789                                  word mode)
3790
3791                 ext             extended addressing
3792
3793                 label           branch label
3794
3795         The terms data, dir, offset, and ext may all be expressions.
3796
3797            Note  that  not all addressing modes are valid with every in-
3798         struction, refer to the 68HC08 technical data for valid modes.
3799
3800
3801         E.2.1  Control Instructions
3802
3803                 clc             cli             daa             div
3804                 mul             nop             nsa             psha
3805                 pshh            pshx            pula            pulh
3806                 pulx            rsp             rti             rts
3807                 sec             sei             stop            swi
3808                 tap             tax             tpa             tsx
3809                 txa             txs             wait
3810
3811
3812         E.2.2  Bit Manipulation Instructions
3813
3814                 brset   #data,*dir,label
3815                 brclr   #data,*dir,label
3816
3817                 bset    #data,*dir
3818                 bclr    #data,*dir
3819 \f
3820
3821         AS6808 ASSEMBLER                                        PAGE E-3
3822         68HC08 INSTRUCTION SET
3823
3824
3825         E.2.3  Branch Instructions
3826
3827                 bra     label           brn     label
3828                 bhi     label           bls     label
3829                 bcc     label           bcs     label
3830                 bne     label           beq     label
3831                 bhcc    label           bhcs    label
3832                 bpl     label           bmi     label
3833                 bmc     label           bms     label
3834                 bil     label           bih     label
3835                 bsr     label           bge     label
3836                 blt     label           bgt     label
3837                 ble     label
3838
3839
3840         E.2.4  Complex Branch Instructions
3841
3842                 cbeqa   [],label
3843                 cbeqx   [],label
3844                 cbeq    [],label
3845                 dbnza   label
3846                 dbnzx   label
3847                 dbnz    [],label
3848 \f
3849
3850         AS6808 ASSEMBLER                                        PAGE E-4
3851         68HC08 INSTRUCTION SET
3852
3853
3854         E.2.5  Read-Modify-Write Instructions
3855
3856                 nega                    negx
3857                 neg     []
3858
3859                 coma                    comx
3860                 com     []
3861
3862                 lsra                    lsrx
3863                 lsr     []
3864
3865                 rora                    rorx
3866                 ror     []
3867
3868                 asra                    asrx
3869                 asr     []
3870
3871                 asla                    aslx
3872                 asl     []
3873
3874                 lsla                    lslx
3875                 lsl     []
3876
3877                 rola                    rolx
3878                 rol     []
3879
3880                 deca                    decx
3881                 dec     []
3882
3883                 inca                    incx
3884                 inc     []
3885
3886                 tsta                    tstx
3887                 tst     []
3888
3889                 clra                    clrx
3890                 clr     []              clrh
3891
3892                 aix     #data
3893
3894                 ais     #data
3895 \f
3896
3897         AS6808 ASSEMBLER                                        PAGE E-5
3898         68HC08 INSTRUCTION SET
3899
3900
3901         E.2.6  Register\Memory Instructions
3902
3903                 sub     []              cmp     []
3904                 sbc     []              cpx     []
3905                 and     []              bit     []
3906                 lda     []              sta     []
3907                 eor     []              adc     []
3908                 ora     []              add     []
3909                 ldx     []              stx     []
3910
3911
3912         E.2.7  Double Operand Move Instruction
3913
3914                 mov     [],[]
3915
3916
3917         E.2.8  16-Bit &lt;H:X&gt; Index Register Instructions
3918
3919                 cphx    []
3920                 ldhx    []
3921                 sthx    []
3922
3923
3924         E.2.9  Jump and Jump to Subroutine Instructions
3925
3926                 jmp     []              jsr     []
3927 \f
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941                                    APPENDIX F
3942
3943                                 AS6809 ASSEMBLER
3944
3945
3946
3947
3948
3949         F.1  6809 REGISTER SET
3950
3951         The following is a list of the 6809 registers used by AS6809:
3952
3953                 a,b     -       8-bit accumulators
3954                 d       -       16-bit accumulator &lt;a:b&gt;
3955                 x,y     -       index registers
3956                 s,u     -       stack pointers
3957                 pc      -       program counter
3958                 cc      -       condition code
3959                 dp      -       direct page
3960
3961
3962         F.2  6809 INSTRUCTION SET
3963
3964
3965            The  following  tables  list all 6809 mnemonics recognized by
3966         the AS6809 assembler.  The designation [] refers to  a  required
3967         addressing  mode  argument.   The  following  list specifies the
3968         format for each addressing mode supported by AS6809:
3969
3970                 #data           immediate data
3971                                 byte or word data
3972
3973                 *dir            direct page addressing
3974                                 (see .setdp directive)
3975                                 0 &lt;= dir &lt;= 255
3976
3977                 label           branch label
3978
3979                 r,r1,r2         registers
3980                                 cc,a,b,d,dp,x,y,s,u,pc
3981
3982                 ,-x     ,--x    register indexed
3983                                 autodecrement
3984
3985 \f
3986
3987         AS6809 ASSEMBLER                                        PAGE F-2
3988         6809 INSTRUCTION SET
3989
3990
3991                 ,x+     ,x++    register indexed
3992                                 autoincrement
3993
3994                 ,x              register indexed addressing
3995                                 zero offset
3996
3997                 offset,x        register indexed addressing
3998                                    -16 &lt;= offset &lt;= 15    ---  5-bit
3999                                   -128 &lt;= offset &lt;= -17   ---  8-bit
4000                                     16 &lt;= offset &lt;= 127   ---  8-bit
4001                                 -32768 &lt;= offset &lt;= -129  --- 16-bit
4002                                    128 &lt;= offset &lt;= 32767 --- 16-bit
4003                                 (external definition of offset
4004                                  uses 16-bit mode)
4005
4006                 a,x             accumulator offset indexed addressing
4007
4008                 ext             extended addressing
4009
4010                 ext,pc          pc addressing ( pc &lt;- pc + ext )
4011
4012                 ext,pcr         pc relative addressing
4013
4014                 [,--x]          register indexed indirect
4015                                 autodecrement
4016
4017                 [,x++]          register indexed indirect
4018                                 autoincrement
4019
4020                 [,x]            register indexed indirect addressing
4021                                 zero offset
4022
4023                 [offset,x]      register indexed indirect addressing
4024                                   -128 &lt;= offset &lt;= 127   ---  8-bit
4025                                 -32768 &lt;= offset &lt;= -129  --- 16-bit
4026                                    128 &lt;= offset &lt;= 32767 --- 16-bit
4027                                 (external definition of offset
4028                                  uses 16-bit mode)
4029
4030                 [a,x]           accumulator offset indexed
4031                                 indirect addressing
4032
4033                 [ext]           extended indirect addressing
4034
4035                 [ext,pc]        pc indirect addressing
4036                                 ( [pc &lt;- pc + ext] )
4037
4038                 [ext,pcr]       pc relative indirect addressing
4039
4040         The  terms  data, dir, label, offset, and ext may all be expres-
4041         sions.
4042
4043 \f
4044
4045         AS6809 ASSEMBLER                                        PAGE F-3
4046         6809 INSTRUCTION SET
4047
4048
4049            Note  that  not all addressing modes are valid with every in-
4050         struction, refer to the 6809 technical data for valid modes.
4051
4052
4053         F.2.1  Inherent Instructions
4054
4055                 abx             daa
4056                 mul             nop
4057                 rti             rts
4058                 sex             swi
4059                 swi1            swi2
4060                 swi3            sync
4061
4062
4063         F.2.2  Short Branch Instructions
4064
4065                 bcc     label           bcs     label
4066                 beq     label           bge     label
4067                 bgt     label           bhi     label
4068                 bhis    label           bhs     label
4069                 ble     label           blo     label
4070                 blos    label           bls     label
4071                 blt     label           bmi     label
4072                 bne     label           bpl     label
4073                 bra     label           brn     label
4074                 bvc     label           bvs     label
4075                 bsr     label
4076
4077
4078         F.2.3  Long Branch Instructions
4079
4080                 lbcc    label           lbcs    label
4081                 lbeq    label           lbge    label
4082                 lbgt    label           lbhi    label
4083                 lbhis   label           lbhs    label
4084                 lble    label           lblo    label
4085                 lblos   label           lbls    label
4086                 lblt    label           lbmi    label
4087                 lbne    label           lbpl    label
4088                 lbra    label           lbrn    label
4089                 lbvc    label           lbvs    label
4090                 lbsr    label
4091 \f
4092
4093         AS6809 ASSEMBLER                                        PAGE F-4
4094         6809 INSTRUCTION SET
4095
4096
4097         F.2.4  Single Operand Instructions
4098
4099                 asla            aslb
4100                 asl     []
4101
4102                 asra            asrb
4103                 asr     []
4104
4105                 clra            clrb
4106                 clr     []
4107
4108                 coma            comb
4109                 com     []
4110
4111                 deca            decb
4112                 dec     []
4113
4114                 inca            incb
4115                 inc     []
4116
4117                 lsla            lslb
4118                 lsl     []
4119
4120                 lsra            lsrb
4121                 lsr     []
4122
4123                 nega            negb
4124                 neg     []
4125
4126                 rola            rolb
4127                 rol     []
4128
4129                 rora            rorb
4130                 ror     []
4131
4132                 tsta            tstb
4133                 tst     []
4134 \f
4135
4136         AS6809 ASSEMBLER                                        PAGE F-5
4137         6809 INSTRUCTION SET
4138
4139
4140         F.2.5  Double Operand Instructions
4141
4142                 adca    []              adcb    []
4143
4144                 adda    []              addb    []
4145
4146                 anda    []              andb    []
4147
4148                 bita    []              bitb    []
4149
4150                 cmpa    []              cmpb    []
4151
4152                 eora    []              eorb    []
4153
4154                 lda     []              ldb     []
4155
4156                 ora     []              orb     []
4157
4158                 sbca    []              sbcb    []
4159
4160                 sta     []              stb     []
4161
4162                 suba    []              subb    []
4163
4164
4165         F.2.6  D-register Instructions
4166
4167                 addd    []              subd    []
4168                 cmpd    []              ldd     []
4169                 std     []
4170
4171
4172         F.2.7  Index/Stack Register Instructions
4173
4174                 cmps    []              cmpu    []
4175                 cmpx    []              cmpy    []
4176
4177                 lds     []              ldu     []
4178                 ldx     []              ldy     []
4179
4180                 leas    []              leau    []
4181                 leax    []              leay    []
4182
4183                 sts     []              stu     []
4184                 stx     []              sty     []
4185
4186                 pshs    r               pshu    r
4187                 puls    r               pulu    r
4188 \f
4189
4190         AS6809 ASSEMBLER                                        PAGE F-6
4191         6809 INSTRUCTION SET
4192
4193
4194         F.2.8  Jump and Jump to Subroutine Instructions
4195
4196                 jmp     []              jsr     []
4197
4198
4199         F.2.9  Register - Register Instructions
4200
4201                 exg     r1,r2           tfr     r1,r2
4202
4203
4204         F.2.10  Condition Code Register Instructions
4205
4206                 andcc   #data           orcc    #data
4207                 cwai    #data
4208
4209
4210         F.2.11  6800 Compatibility Instructions
4211
4212                 aba             cba
4213                 clc             cli
4214                 clv             des
4215                 dex             ins
4216                 inx
4217                 ldaa    []      ldab    []
4218                 oraa    []      orab    []
4219                 psha            pshb
4220                 pula            pulb
4221                 sba             sec
4222                 sei             sev
4223                 staa    []      stab    []
4224                 tab             tap
4225                 tba             tpa
4226                 tsx             txs
4227                 wai
4228 \f
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242                                    APPENDIX G
4243
4244                                 AS6811 ASSEMBLER
4245
4246
4247
4248
4249
4250         G.1  68HC11 REGISTER SET
4251
4252         The following is a list of the 68HC11 registers used by AS6811:
4253
4254                 a,b     -       8-bit accumulators
4255                 d       -       16-bit accumulator &lt;a:b&gt;
4256                 x,y     -       index registers
4257
4258
4259         G.2  68HC11 INSTRUCTION SET
4260
4261
4262            The  following tables list all 68HC11 mnemonics recognized by
4263         the AS6811 assembler.  The designation [] refers to  a  required
4264         addressing  mode  argument.   The  following  list specifies the
4265         format for each addressing mode supported by AS6811:
4266
4267                 #data           immediate data
4268                                 byte or word data
4269
4270                 *dir            direct page addressing
4271                                 (see .setdp directive)
4272                                 0 &lt;= dir &lt;= 255
4273
4274                 ,x              register indirect addressing
4275                                 zero offset
4276
4277                 offset,x        register indirect addressing
4278                                 0 &lt;= offset &lt;= 255
4279
4280                 ext             extended addressing
4281
4282                 label           branch label
4283
4284         The terms data, dir, offset, and ext may all be expressions.
4285
4286 \f
4287
4288         AS6811 ASSEMBLER                                        PAGE G-2
4289         68HC11 INSTRUCTION SET
4290
4291
4292            Note  that  not all addressing modes are valid with every in-
4293         struction, refer to the 68HC11 technical data for valid modes.
4294
4295
4296         G.2.1  Inherent Instructions
4297
4298                 aba             abx
4299                 aby             cba
4300                 clc             cli
4301                 clv             daa
4302                 des             dex
4303                 dey             fdiv
4304                 idiv            ins
4305                 inx             iny
4306                 mul             nop
4307                 rti             rts
4308                 sba             sec
4309                 sei             sev
4310                 stop            swi
4311                 tab             tap
4312                 tba             tpa
4313                 tsx             txs
4314                 wai             xgdx
4315                 xgdy
4316
4317                 psha            pshb
4318                 psh a           psh b
4319                 pshx            pshy
4320                 psh x           psh y
4321
4322                 pula            pulb
4323                 pul a           pul b
4324                 pulx            puly
4325                 pul x           pul y
4326
4327
4328         G.2.2  Branch Instructions
4329
4330                 bra     label           brn     label
4331                 bhi     label           bls     label
4332                 bcc     label           bhs     label
4333                 bcs     label           blo     label
4334                 bne     label           beq     label
4335                 bvc     label           bvs     label
4336                 bpl     label           bmi     label
4337                 bge     label           blt     label
4338                 bgt     label           ble     label
4339                 bsr     label
4340 \f
4341
4342         AS6811 ASSEMBLER                                        PAGE G-3
4343         68HC11 INSTRUCTION SET
4344
4345
4346         G.2.3  Single Operand Instructions
4347
4348                 asla            aslb            asld
4349                 asl a           asl b           asl d
4350                 asl     []
4351
4352                 asra            asrb
4353                 asr a           asr b
4354                 asr     []
4355
4356                 clra            clrb
4357                 clr a           clr b
4358                 clr     label
4359
4360                 coma            comb
4361                 com a           com b
4362                 com     []
4363
4364                 deca            decb
4365                 dec a           dec b
4366                 dec     []
4367
4368                 inca            incb
4369                 inc a           inc b
4370                 inc     []
4371
4372                 lsla            lslb            lsld
4373                 lsl a           lsl b           lsl d
4374                 lsl     []
4375
4376                 lsra            lsrb            lsrd
4377                 lsr a           lsr b           lsr d
4378                 lsr     []
4379
4380                 nega            negb
4381                 neg a           neg b
4382                 neg     []
4383
4384                 rola            rolb
4385                 rol a           rol b
4386                 rol     []
4387
4388                 rora            rorb
4389                 ror a           ror b
4390                 ror     []
4391
4392                 tsta            tstb
4393                 tst a           tst b
4394                 tst     []
4395 \f
4396
4397         AS6811 ASSEMBLER                                        PAGE G-4
4398         68HC11 INSTRUCTION SET
4399
4400
4401         G.2.4  Double Operand Instructions
4402
4403                 adca    []              adcb    []
4404                 adc a   []              adc b   []
4405
4406                 adda    []      addb    []      addd    []
4407                 add a   []      add b   []      add d   []
4408
4409                 anda    []              andb    []
4410                 and a   []              and b   []
4411
4412                 bita    []              bitb    []
4413                 bit a   []              bit b   []
4414
4415                 cmpa    []              cmpb    []
4416                 cmp a   []              cmp b   []
4417
4418                 eora    []              eorb    []
4419                 eor a   []              eor b   []
4420
4421                 ldaa    []              ldab    []
4422                 lda a   []              lda b   []
4423
4424                 oraa    []              orab    []
4425                 ora a   []              ora b   []
4426
4427                 sbca    []              sbcb    []
4428                 sbc a   []              sbc b   []
4429
4430                 staa    []              stab    []
4431                 sta a   []              sta b   []
4432
4433                 suba    []      subb    []      subd    []
4434                 sub a   []      sub b   []      sub d   []
4435
4436
4437         G.2.5  Bit Manupulation Instructions
4438
4439                 bclr    [],#data
4440                 bset    [],#data
4441
4442                 brclr   [],#data,label
4443                 brset   [],#data,label
4444
4445
4446 \f
4447
4448         AS6811 ASSEMBLER                                        PAGE G-5
4449         68HC11 INSTRUCTION SET
4450
4451
4452         G.2.6  Jump and Jump to Subroutine Instructions
4453
4454                 jmp     []              jsr     []
4455
4456
4457         G.2.7  Long Register Instructions
4458
4459                 cpx     []              cpy     []
4460
4461                 ldd     []              lds     []
4462                 ldx     []              ldy     []
4463
4464                 std     []              sts     []
4465                 stx     []              sty     []
4466 \f
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480                                    APPENDIX H
4481
4482                                 AS6812 ASSEMBLER
4483
4484
4485
4486
4487
4488         H.1  68HC12 REGISTER SET
4489
4490         The following is a list of the 68HC12 registers used by AS6812:
4491
4492                 a,b     -       8-bit accumulators
4493                 d       -       16-bit accumulator &lt;a:b&gt;
4494                 x,y     -       index registers
4495                 sp,s    -       stack pointer
4496                 pc      -       program counter
4497                 ccr,cc  -       condition code register
4498
4499
4500         H.2  68HC12 INSTRUCTION SET
4501
4502
4503            The  following tables list all 68HC12 mnemonics recognized by
4504         the AS6812 assembler.  The designation [] refers to  a  required
4505         addressing  mode  argument.   The  following  list specifies the
4506         format for each addressing mode supported by AS6812:
4507
4508                 #data           immediate data
4509                                 byte or word data
4510
4511                 ext             extended addressing
4512
4513                 pg              memory page number
4514
4515                 *dir            direct page addressing
4516                                 (see .setdp directive)
4517                                 0 &lt;= dir &lt;= 255
4518
4519                 label           branch label
4520
4521                 r,r1,r2         registers
4522                                 ccr,a,b,d,x,y,sp,pc
4523
4524 \f
4525
4526         AS6812 ASSEMBLER                                        PAGE H-2
4527         68HC12 INSTRUCTION SET
4528
4529
4530                 -x      x-      register indexed, pre or
4531                 ,-x     ,x-     post autodecrement by 1
4532
4533                 n,-x    n,x-    register indexed, pre or
4534                                 post autodecrement by 1 - 8
4535
4536                 +x      x+      register indexed, pre or
4537                 ,+x     ,x+     post autoincrement by 1
4538
4539                 n,+x    n,x+    register indexed, pre or
4540                                 post autoincrement by 1 - 8
4541
4542                 offset,x        register indexed addressing
4543                                    -16 &lt;= offset &lt;= 15    ---  5-bit
4544                                   -256 &lt;= offset &lt;= -17   ---  9-bit
4545                                     16 &lt;= offset &lt;= 255   ---  9-bit
4546                                 -32768 &lt;= offset &lt;= -257  --- 16-bit
4547                                    256 &lt;= offset &lt;= 32767 --- 16-bit
4548                                 (external definition of offset
4549                                  uses 16-bit mode)
4550
4551                 [offset,x]      register indexed indirect addressing
4552                                 -32768 &lt;= offset &lt;= 32767 --- 16-bit
4553
4554                 [,x]            register indexed indirect addressing
4555                                 zero offset
4556
4557                 a,x             accumulator offset indexed addressing
4558
4559                 [d,x]           d accumulator offset indexed
4560                                 indirect addressing
4561
4562         The  terms  data, dir, label, offset, and ext may all be expres-
4563         sions.
4564
4565            Note  that  not all addressing modes are valid with every in-
4566         struction, refer to the 68HC12 technical data for valid modes.
4567 \f
4568
4569         AS6812 ASSEMBLER                                        PAGE H-3
4570         68HC12 INSTRUCTION SET
4571
4572
4573         H.2.1  Inherent Instructions
4574
4575                 aba             bgnd            cba
4576                 daa             dex             dey
4577                 ediv            edivs           emul
4578                 emuls           fdiv            idiv
4579                 idivs           inx             iny
4580                 mem             mul             nop
4581                 psha            pshb            pshc
4582                 pshd            pshx            pshy
4583                 pula            pulb            pulc
4584                 puld            pulx            puly
4585                 rev             revw            rtc
4586                 rti             rts             sba
4587                 stop            swi             tab
4588                 tba             wai             wav
4589                 wavr
4590
4591
4592         H.2.2  Short Branch Instructions
4593
4594                 bcc     label           bcs     label
4595                 beq     label           bge     label
4596                 bgt     label           bhi     label
4597                 bhis    label           bhs     label
4598                 ble     label           blo     label
4599                 blos    label           bls     label
4600                 blt     label           bmi     label
4601                 bne     label           bpl     label
4602                 bra     label           brn     label
4603                 bvc     label           bvs     label
4604                 bsr     label
4605
4606
4607         H.2.3  Long Branch Instructions
4608
4609                 lbcc    label           lbcs    label
4610                 lbeq    label           lbge    label
4611                 lbgt    label           lbhi    label
4612                 lbhis   label           lbhs    label
4613                 lble    label           lblo    label
4614                 lblos   label           lbls    label
4615                 lblt    label           lbmi    label
4616                 lbne    label           lbpl    label
4617                 lbra    label           lbrn    label
4618                 lbvc    label           lbvs    label
4619 \f
4620
4621         AS6812 ASSEMBLER                                        PAGE H-4
4622         68HC12 INSTRUCTION SET
4623
4624
4625         H.2.4  Branch on Decrement, Test, or Increment
4626
4627                 dbeq    r,label         dbne    r,label
4628                 ibeq    r,label         ibne    r,label
4629                 tbeq    r,label         tbne    r,label
4630
4631
4632         H.2.5  Bit Clear and Set Instructions
4633
4634                 bclr    [],#data
4635                 bset    [],#data
4636
4637
4638         H.2.6  Branch on Bit Clear or Set
4639
4640                 brclr   [],#data,label
4641                 brset   [],#data,label
4642 \f
4643
4644         AS6812 ASSEMBLER                                        PAGE H-5
4645         68HC12 INSTRUCTION SET
4646
4647
4648         H.2.7  Single Operand Instructions
4649
4650                 asla            aslb
4651                 asl     []
4652
4653                 asra            asrb
4654                 asr     []
4655
4656                 clra            clrb
4657                 clr     []
4658
4659                 coma            comb
4660                 com     []
4661
4662                 deca            decb
4663                 dec     []
4664
4665                 inca            incb
4666                 inc     []
4667
4668                 lsla            lslb
4669                 lsl     []
4670
4671                 lsra            lsrb
4672                 lsr     []
4673
4674                 nega            negb
4675                 neg     []
4676
4677                 rola            rolb
4678                 rol     []
4679
4680                 rora            rorb
4681                 ror     []
4682
4683                 tsta            tstb
4684                 tst     []
4685 \f
4686
4687         AS6812 ASSEMBLER                                        PAGE H-6
4688         68HC12 INSTRUCTION SET
4689
4690
4691         H.2.8  Double Operand Instructions
4692
4693                 adca    []              adcb    []
4694
4695                 adda    []              addb    []
4696
4697                 anda    []              andb    []
4698
4699                 bita    []              bitb    []
4700
4701                 cmpa    []              cmpb    []
4702
4703                 eora    []              eorb    []
4704
4705                 ldaa    []      &lt;=&gt;     lda     []
4706
4707                 ldab    []      &lt;=&gt;     ldb     []
4708
4709                 oraa    []      &lt;=&gt;     ora     []
4710
4711                 orab    []      &lt;=&gt;     orb     []
4712
4713                 sbca    []              sbcb    []
4714
4715                 staa    []      &lt;=&gt;     sta     []
4716
4717                 stab    []      &lt;=&gt;     stb     []
4718
4719                 suba    []              subb    []
4720
4721
4722         H.2.9  Move Instructions
4723
4724                 movb    [],[]           movw    [],[]
4725
4726
4727         H.2.10  D-register Instructions
4728
4729                 addd    []              subd    []
4730                 cpd     []      &lt;=&gt;     cmpd    []
4731                 ldd     []              std     []
4732 \f
4733
4734         AS6812 ASSEMBLER                                        PAGE H-7
4735         68HC12 INSTRUCTION SET
4736
4737
4738         H.2.11  Index/Stack Register Instructions
4739
4740                 cps     []      &lt;=&gt;     cmps    []
4741                 cpx     []      &lt;=&gt;     cmpx    []
4742                 cpy     []      &lt;=&gt;     cmpy    []
4743
4744                 lds     []
4745                 ldx     []              ldy     []
4746
4747                 leas    []
4748                 leax    []              leay    []
4749
4750                 sts     []
4751                 stx     []              sty     []
4752
4753
4754         H.2.12  Jump and Jump/Call to Subroutine Instructions
4755
4756                 call    [],pg
4757                 jmp     []              jsr     []
4758
4759
4760         H.2.13  Other Special Instructions
4761
4762                 emacs   []
4763                 emaxd   []              emaxm   []
4764                 emind   []              eminm   []
4765                 etbl    []
4766                 maxa    []              maxm    []
4767                 mina    []              minm    []
4768                 tbl     []              trap    #data
4769
4770
4771         H.2.14  Register - Register Instructions
4772
4773                 exg     r1,r2           sex     r1,r2
4774                 tfr     r1,r2
4775
4776
4777         H.2.15  Condition Code Register Instructions
4778
4779                 andcc   #data           orcc    #data
4780 \f
4781
4782         AS6812 ASSEMBLER                                        PAGE H-8
4783         68HC12 INSTRUCTION SET
4784
4785
4786         H.2.16  M68HC11 Compatibility Mode Instructions
4787
4788                 abx             aby             clc
4789                 cli             clv             des
4790                 ins             sec             sei
4791                 sev             tap             tpa
4792                 tsx             tsy             txs
4793                 tys             xgdx            xgdy
4794 \f
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808                                    APPENDIX I
4809
4810                                 AS6816 ASSEMBLER
4811
4812
4813
4814
4815
4816         I.1  68HC16 REGISTER SET
4817
4818         The following is a list of the 68HC16 registers used by AS6816:
4819
4820                 a,b     -       8-bit accumulators
4821                 d       -       16-bit accumulator &lt;a:b&gt;
4822                 e       -       16-bit accumulator
4823                 x,y,z   -       index registers
4824                 k       -       address extension register
4825                 s       -       stack pointer
4826                 ccr     -       condition code
4827
4828
4829         I.2  68HC16 INSTRUCTION SET
4830
4831
4832            The  following tables list all 68HC16 mnemonics recognized by
4833         the AS6816 assembler.  The designation [] refers to  a  required
4834         addressing  mode  argument.   The  following  list specifies the
4835         format for each addressing mode supported by AS6816:
4836
4837                 #data           immediate data
4838                                 byte or word data
4839
4840                 #xo,#yo         local immediate data (mac / rmac)
4841
4842                 label           branch label
4843
4844                 r               register
4845                                 ccr,a,b,d,e,x,y,z,s
4846
4847                 ,x              zero offset register indexed addressing
4848                 ,x8
4849                 ,x16
4850
4851                 offset,x        register indexed addressing
4852 \f
4853
4854         AS6816 ASSEMBLER                                        PAGE I-2
4855         68HC16 INSTRUCTION SET
4856
4857
4858                                      0 &lt;= offset &lt;= 255   ---  8-bit
4859                                 -32768 &lt;= offset &lt;= -1    --- 16-bit
4860                                    256 &lt;= offset &lt;= 32767 --- 16-bit
4861                                 (external definition of offset
4862                                  uses 16-bit mode)
4863
4864                 offset,x8       unsigned 8-bit offset indexed addressing
4865                 offset,x16      signed 16-bit offset indexed addressing
4866
4867                 e,x             accumulator offset indexed addressing
4868
4869                 ext             extended addressing
4870
4871                 bank            64K bank number (jmp / jsr)
4872
4873         The  terms data, label, offset, bank, and ext may all be expres-
4874         sions.
4875
4876            Note  that  not all addressing modes are valid with every in-
4877         struction, refer to the 6816 technical data for valid modes.
4878
4879
4880         I.2.1  Inherent Instructions
4881
4882                 aba             abx             aby             abz
4883                 ace             aced            ade             adx
4884                 ady             adz             aex             aey
4885                 aez             bgnd            cba             daa
4886                 ediv            edivs           emul            emuls
4887                 fdiv            fmuls           idiv            ldhi
4888                 lpstop          mul             nop             psha
4889                 pshb            pshmac          pula            pulb
4890                 pulmac          rtr             rts             sba
4891                 sde             sted            swi             sxt
4892                 tab             tap             tba             tbek
4893                 tbsk            tbxk            tbyk            tbzk
4894                 tde             tdmsk           tdp             ted
4895                 tedm            tekb            tem             tmer
4896                 tmet            tmxed           tpa             tpd
4897                 tskb            tsx             tsy             tsz
4898                 txkb            txs             txy             txz
4899                 tykb            tys             tyx             tyz
4900                 tzkb            tzs             tzx             tzy
4901                 wai             xgab            xgde            xgdx
4902                 xgdy            xgdz            xgex            xgey
4903                 xgez
4904 \f
4905
4906         AS6816 ASSEMBLER                                        PAGE I-3
4907         68HC16 INSTRUCTION SET
4908
4909
4910         I.2.2  Push/Pull Multiple Register Instructions
4911
4912                 pshm    r,...           pulm    r,...
4913
4914
4915         I.2.3  Short Branch Instructions
4916
4917                 bcc     label           bcs     label
4918                 beq     label           bge     label
4919                 bgt     label           bhi     label
4920                 bhis    label           bhs     label
4921                 ble     label           blo     label
4922                 blos    label           bls     label
4923                 blt     label           bmi     label
4924                 bne     label           bpl     label
4925                 bra     label           brn     label
4926                 bvc     label           bvs     label
4927                 bsr     label
4928
4929
4930         I.2.4  Long Branch Instructions
4931
4932                 lbcc    label           lbcs    label
4933                 lbeq    label           lbge    label
4934                 lbgt    label           lbhi    label
4935                 lbhis   label           lbhs    label
4936                 lble    label           lblo    label
4937                 lblos   label           lbls    label
4938                 lblt    label           lbmi    label
4939                 lbne    label           lbpl    label
4940                 lbra    label           lbrn    label
4941                 lbvc    label           lbvs    label
4942                 lbsr    label
4943
4944
4945         I.2.5  Bit Manipulation Instructions
4946
4947                 bclr    [],#data
4948                 bset    [],#data
4949
4950                 brclr   [],#data,label
4951                 brset   [],#data,label
4952 \f
4953
4954         AS6816 ASSEMBLER                                        PAGE I-4
4955         68HC16 INSTRUCTION SET
4956
4957
4958         I.2.6  Single Operand Instructions
4959
4960                 asla                    aslb
4961                 asld                    asle
4962                 aslm
4963                 asl     []              aslw    []
4964
4965                 asra                    asrb
4966                 asrd                    asre
4967                 asrm
4968                 asr     []              asrw    []
4969
4970                 clra                    clrb
4971                 clrd                    clre
4972                                         clrm
4973                 clr     []              clrw    []
4974
4975                 coma                    comb
4976                 comd                    come
4977                 com     []              comw    []
4978
4979                 deca                    decb
4980                 dec     []              decw    []
4981
4982                 inca                    incb
4983                 inc     []              incw    []
4984
4985                 lsla                    lslb
4986                 lsld                    lsle
4987                 lslm
4988                 lsl     []              lslw    []
4989
4990                 lsra                    lsrb
4991                 lsrd                    lsre
4992                 lsr     []              lsrw    []
4993
4994                 nega                    negb
4995                 negd                    nege
4996                 neg     []              negw    []
4997
4998                 rola                    rolb
4999                 rold                    role
5000                 rol     []              rolw    []
5001
5002                 rora                    rorb
5003                 rord                    rore
5004                 ror     []              rorw    []
5005
5006                 tsta                    tstb
5007                 tsta                    tste
5008                 tst     []              tstw    []
5009 \f
5010
5011         AS6816 ASSEMBLER                                        PAGE I-5
5012         68HC16 INSTRUCTION SET
5013
5014
5015         I.2.7  Double Operand Instructions
5016
5017                 adca    []              adcb    []
5018                 adcd    []              adce    []
5019
5020                 adda    []              addb    []
5021                 addd    []              adde    []
5022
5023                 anda    []              andb    []
5024                 andd    []              ande    []
5025
5026                 bita    []              bitb    []
5027
5028                 cmpa    []              cmpb    []
5029                 cpd     []              cpe     []
5030
5031                 eora    []              eorb    []
5032                 eord    []              eore    []
5033
5034                 ldaa    []              ldab    []
5035                 ldd     []              lde     []
5036
5037                 oraa    []              orab    []
5038                 ord     []              ore     []
5039
5040                 sbca    []              sbcb    []
5041                 sbcd    []              sbce    []
5042
5043                 staa    []              stab    []
5044                 std     []              ste     []
5045
5046                 suba    []              subb    []
5047                 subd    []              sube    []
5048
5049
5050         I.2.8  Index/Stack Register Instructions
5051
5052                 cps     []              cpx     []
5053                 cpy     []              cpz     []
5054
5055                 lds     []              ldx     []
5056                 ldy     []              ldz     []
5057
5058                 sts     []              stx     []
5059                 sty     []              stz     []
5060 \f
5061
5062         AS6816 ASSEMBLER                                        PAGE I-6
5063         68HC16 INSTRUCTION SET
5064
5065
5066         I.2.9  Jump and Jump to Subroutine Instructions
5067
5068                 jmp     bank,[]         jsr     bank,[]
5069
5070
5071         I.2.10  Condition Code Register Instructions
5072
5073                 andp    #data           orp     #data
5074
5075
5076         I.2.11  Multiply and Accumulate Instructions
5077
5078                 mac     #data           rmac    #data
5079                 mac     #xo,#yo         rmac    #xo,#yo
5080 \f
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094                                    APPENDIX J
5095
5096                                  ASH8 ASSEMBLER
5097
5098
5099
5100
5101
5102         J.1  H8/3XX REGISTER SET
5103
5104         The following is a list of the H8 registers used by ASH8:
5105
5106                 r0  -  r7,sp            16-bit accumulators
5107                 r0L -  r7L,spL          8-bit accumulators
5108                 r0H -  r7H,spH          8-bit accumulators
5109                 spL,spH,sp              stack pointers
5110                 ccr                     condition code
5111
5112
5113         J.2  H8/3XX INSTRUCTION SET
5114
5115
5116            The  following tables list all H8/3xx mnemonics recognized by
5117         the ASH8 assembler.  The designation [] refers to a required ad-
5118         dressing mode argument.  The following list specifies the format
5119         for each addressing mode supported by ASH8:
5120
5121                 #xx:3           immediate data (3  bit)
5122                 #xx:8           immediate data (8  bit)
5123                 #xx:16          immediate data (16 bit)
5124
5125                 *dir            direct page addressing
5126                                 (see .setdp directive)
5127                                 0xFF00 &lt;= dir &lt;= 0xFFFF
5128
5129                 label           branch label
5130
5131
5132                 rn              registers (16 bit)
5133                                 r0-r7,sp
5134
5135                 rnB             registers (8 bit)
5136                                 r0H-r7H,r0L-r7L,spH,spL
5137
5138 \f
5139
5140         ASH8 ASSEMBLER                                          PAGE J-2
5141         H8/3XX INSTRUCTION SET
5142
5143
5144                 ccr             condition code register
5145
5146                 @rn             register indirect
5147
5148                 @-rn            register indirect (auto pre-decrement)
5149
5150                 @rn+            register indirect (auto post-increment)
5151
5152                 @[offset,rn]    register indirect, 16-bit displacement
5153
5154                 @@offset        memory indirect, (8-bit address)
5155
5156                 ext             extended addressing (16-bit)
5157
5158         The  terms  data, dir, label, offset, and ext may all be expres-
5159         sions.
5160
5161            Note  that  not all addressing modes are valid with every in-
5162         struction, refer to the H8/3xx technical data for valid modes.
5163
5164
5165         J.2.1  Inherent Instructions
5166
5167                 eepmov
5168                 nop
5169                 sleep
5170                 rte
5171                 rts
5172
5173
5174         J.2.2  Branch Instructions
5175
5176                 bcc     label                   bcs     label
5177                 beq     label                   bf      label
5178                 bge     label                   bgt     label
5179                 bhi     label                   bhis    label
5180                 bhs     label                   ble     label
5181                 blo     label                   blos    label
5182                 bls     label                   blt     label
5183                 bmi     label                   bne     label
5184                 bpl     label                   bra     label
5185                 brn     label                   bt      label
5186                 bvc     label                   bvs     label
5187                 bsr     label
5188 \f
5189
5190         ASH8 ASSEMBLER                                          PAGE J-3
5191         H8/3XX INSTRUCTION SET
5192
5193
5194         J.2.3  Single Operand Instructions
5195
5196                 Free Form
5197
5198                 daa     rnB                     das     rnB
5199
5200                 dec     rnB                     inc     rnB
5201
5202                 neg     rnB                     not     rnB
5203
5204                 rotxl   rnB                     rotxr   rnB
5205
5206                 rotl    rnB                     rotr    rnB
5207
5208                 shal    rnB                     shar    rnB
5209
5210                 shll    rnB                     shlr    rnB
5211
5212                 push    rn                      pop     rn
5213
5214
5215                 Byte / Word Form
5216
5217                 daa.b   rnB                     das.b   rnB
5218
5219                 dec.b   rnB                     inc.b   rnB
5220
5221                 neg.b   rnB                     not.b   rnB
5222
5223                 rotxl.b rnB                     rotxr.b rnB
5224
5225                 rotl.b  rnB                     rotr.b  rnB
5226
5227                 shal.b  rnB                     shar.b  rnB
5228
5229                 shll.b  rnB                     shlr.b  rnB
5230
5231                 push.w  rn                      pop.w   rn
5232 \f
5233
5234         ASH8 ASSEMBLER                                          PAGE J-4
5235         H8/3XX INSTRUCTION SET
5236
5237
5238         J.2.4  Double Operand Instructions
5239
5240                 Free Form
5241
5242                 add     rnB,rnB                 add     #xx:8,rnB
5243                 add     rn,rn
5244                 adds    #1,rn                   adds    #2,rn
5245                 addx    rnB,rnB                 addx    #xx:8,rnB
5246
5247                 cmp     rnB,rnB                 cmp     #xx:8,rnB
5248                 cmp     rn,rn
5249
5250                 sub     rnB,rnB
5251                 sub     rn,rn
5252                 subs    #1,rn                   subs    #2,rn
5253                 subx    rnB,rnB                 subx    #xx:8,rnB
5254
5255                 and     rnB,rnB                 and     #xx:8,rnB
5256                                                 and     #xx:8,ccr
5257
5258                 or      rnB,rnB                 or      #xx:8,rnB
5259                                                 or      #xx:8,ccr
5260
5261                 xor     rnB,rnB                 xor     #xx:8,rnB
5262                                                 xor     #xx:8,ccr
5263
5264
5265                 Byte / Word Form
5266
5267                 add.b   rnB,rnB                 add.b   #xx:8,rnB
5268                 add.w   rn,rn
5269
5270                 cmp.b   rnB,rnB                 cmp.b   #xx:8,rnB
5271                 cmp.w   rn,rn
5272
5273                 sub.b   rnB,rnB
5274                 sub.w   rn,rn
5275
5276                 addx.b  rnB,rnB                 addx.b  #xx:8,rnB
5277
5278                 and.b   rnB,rnB                 and.b   #xx:8,rnB
5279                                                 and.b   #xx:8,ccr
5280
5281                 or.b    rnB,rnB                 or.b    #xx:8,rnB
5282                                                 or.b    #xx:8,ccr
5283
5284                 subx.b  rnB,rnB                 subx.b  #xx:8,rnB
5285
5286                 xor.b   rnB,rnB                 xor.b   #xx:8,rnB
5287                                                 xor.b   #xx:8,ccr
5288 \f
5289
5290         ASH8 ASSEMBLER                                          PAGE J-5
5291         H8/3XX INSTRUCTION SET
5292
5293
5294         J.2.5  Mov Instructions
5295
5296                 Free Form
5297
5298                 mov     rnB,rnB                 mov     rn,rn
5299                 mov     #xx:8,rnB               mov     #xx:16,rn
5300                 mov     @rn,rnB                 mov     @rn,rn
5301                 mov     @[offset,rn],rnB        mov     @[offset,rn],rn
5302                 mov     @rn+,rnB                mov     @rn+,rn
5303                 mov     @dir,rnB
5304                 mov     dir,rnB
5305                 mov     *@dir,rnB
5306                 mov     *dir,rnB
5307                 mov     @label,rnB              mov     @label,rn
5308                 mov     label,rnB               mov     label,rn
5309                 mov     rnB,@rn                 mov     rn,@rn
5310                 mov     rnB,@[offset,rn]        mov     rn,@[offset,rn]
5311                 mov     rnB,@-rn                mov     rn,@-rn
5312                 mov     rnB,@dir
5313                 mov     rnB,dir
5314                 mov     rnB,*@dir
5315                 mov     rnB,*dir
5316                 mov     rnB,@label              mov     rn,@label
5317                 mov     rnB,label               mov     rn,label
5318
5319
5320                 Byte / Word Form
5321
5322                 mov.b   rnB,rnB                 mov.w   rn,rn
5323                 mov.b   #xx:8,rnB               mov.w   #xx:16,rn
5324                 mov.b   @rn,rnB                 mov.w   @rn,rn
5325                 mov.b   @[offset,rn],rnB        mov.w   @[offset,rn],rn
5326                 mov.b   @rn+,rnB                mov.w   @rn+,rn
5327                 mov.b   @dir,rnB
5328                 mov.b   dir,rnB
5329                 mov.b   *@dir,rnB
5330                 mov.b   *dir,rnB
5331                 mov.b   @label,rnB              mov.w   @label,rn
5332                 mov.b   label,rnB               mov.w   label,rn
5333                 mov.b   rnB,@rn                 mov.w   rn,@rn
5334                 mov.b   rnB,@[offset,rn]        mov.w   rn,@[offset,rn]
5335                 mov.b   rnB,@-rn                mov.w   rn,@-rn
5336                 mov.b   rnB,@dir
5337                 mov.b   rnB,dir
5338                 mov.b   rnB,*@dir
5339                 mov.b   rnB,*dir
5340                 mov.b   rnB,@label              mov.w   rn,@label
5341                 mov.b   rnB,label               mov.w   rn,label
5342 \f
5343
5344         ASH8 ASSEMBLER                                          PAGE J-6
5345         H8/3XX INSTRUCTION SET
5346
5347
5348         J.2.6  Bit Manipulation Instructions
5349
5350                 bld     #xx:3,rnB               bld     #xx:3,@rn
5351                 bld     #xx:3,@dir              bld     #xx:3,dir
5352                 bld     #xx:3,*@dir             bld     #xx:3,*dir
5353
5354                 bild    #xx:3,rnB               bild    #xx:3,@rn
5355                 bild    #xx:3,@dir              bild    #xx:3,dir
5356                 bild    #xx:3,*@dir             bild    #xx:3,*dir
5357
5358                 bst     #xx:3,rnB               bst     #xx:3,@rn
5359                 bst     #xx:3,@dir              bst     #xx:3,dir
5360                 bst     #xx:3,*@dir             bst     #xx:3,*dir
5361
5362                 bist    #xx:3,rnB               bist    #xx:3,@rn
5363                 bist    #xx:3,@dir              bist    #xx:3,dir
5364                 bist    #xx:3,*@dir             bist    #xx:3,*dir
5365
5366                 band    #xx:3,rnB               band    #xx:3,@rn
5367                 band    #xx:3,@dir              band    #xx:3,dir
5368                 band    #xx:3,*@dir             band    #xx:3,*dir
5369
5370                 biand   #xx:3,rnB               biand   #xx:3,@rn
5371                 biand   #xx:3,@dir              biand   #xx:3,dir
5372                 biand   #xx:3,*@dir             biand   #xx:3,*dir
5373
5374                 bor     #xx:3,rnB               bor     #xx:3,@rn
5375                 bor     #xx:3,@dir              bor     #xx:3,dir
5376                 bor     #xx:3,*@dir             bor     #xx:3,*dir
5377
5378                 bior    #xx:3,rnB               bior    #xx:3,@rn
5379                 bior    #xx:3,@dir              bior    #xx:3,dir
5380                 bior    #xx:3,*@dir             bior    #xx:3,*dir
5381
5382                 bxor    #xx:3,rnB               bxor    #xx:3,@rn
5383                 bxor    #xx:3,@dir              bxor    #xx:3,dir
5384                 bxor    #xx:3,*@dir             bxor    #xx:3,*dir
5385
5386                 bixor   #xx:3,rnB               bixor   #xx:3,@rn
5387                 bixor   #xx:3,@dir              bixor   #xx:3,dir
5388                 bixor   #xx:3,*@dir             bixor   #xx:3,*dir
5389 \f
5390
5391         ASH8 ASSEMBLER                                          PAGE J-7
5392         H8/3XX INSTRUCTION SET
5393
5394
5395         J.2.7  Extended Bit Manipulation Instructions
5396
5397                 bset    #xx:3,rnB               bset    #xx:3,@rn
5398                 bset    #xx:3,@dir              bset    #xx:3,dir
5399                 bset    #xx:3,*@dir             bset    #xx:3,*dir
5400                 bset    rnB,rnB                 bset    rnB,@rn
5401                 bset    rnB,@dir                bset    rnB,dir
5402                 bset    rnB,*@dir               bset    rnB,*dir
5403
5404                 bclr    #xx:3,rnB               bclr    #xx:3,@rn
5405                 bclr    #xx:3,@dir              bclr    #xx:3,dir
5406                 bclr    #xx:3,*@dir             bclr    #xx:3,*dir
5407                 bclr    rnB,rnB                 bclr    rnB,@rn
5408                 bclr    rnB,@dir                bclr    rnB,dir
5409                 bclr    rnB,*@dir               bclr    rnB,*dir
5410
5411                 bnot    #xx:3,rnB               bnot    #xx:3,@rn
5412                 bnot    #xx:3,@dir              bnot    #xx:3,dir
5413                 bnot    #xx:3,*@dir             bnot    #xx:3,*dir
5414                 bnot    rnB,rnB                 bnot    rnB,@rn
5415                 bnot    rnB,@dir                bnot    rnB,dir
5416                 bnot    rnB,*@dir               bnot    rnB,*dir
5417
5418                 btst    #xx:3,rnB               btst    #xx:3,@rn
5419                 btst    #xx:3,@dir              btst    #xx:3,dir
5420                 btst    #xx:3,*@dir             btst    #xx:3,*dir
5421                 btst    rnB,rnB                 btst    rnB,@rn
5422                 btst    rnB,@dir                btst    rnB,dir
5423                 btst    rnB,*@dir               btst    rnB,*dir
5424
5425
5426         J.2.8  Condition Code Instructions
5427
5428                 andc    #xx:8,ccr               andc    #xx:8
5429                 and     #xx:8,ccr               and.b   #xx:8,ccr
5430
5431                 ldc     #xx:8,ccr               ldc     #xx:8
5432                 ldc     rnB,ccr                 ldc     rnB
5433
5434                 orc     #xx:8,ccr               orc     #xx:8
5435                 or      #xx:8,ccr               or.b    #xx:8,ccr
5436
5437                 xorc    #xx:8,ccr               xorc    #xx:8
5438                 xor     #xx:8,ccr               xor.b   #xx:8,ccr
5439
5440                 stc     ccr,rnB                 stc     rnB
5441 \f
5442
5443         ASH8 ASSEMBLER                                          PAGE J-8
5444         H8/3XX INSTRUCTION SET
5445
5446
5447         J.2.9  Other Instructions
5448
5449                 divxu   rnB,rn                  divxu.b rnB,rn
5450
5451                 mulxu   rnB,rn                  mulxu.b rnB,rn
5452
5453                 movfpe  @label,rnB              movfpe  label,rnB
5454                 movfpe.b  @label,rnB            movfpe.b  label,rnB
5455
5456                 movtpe  @label,rnB              movtpe  label,rnB
5457                 movtpe.b  @label,rnB            movtpe.b  label,rnB
5458
5459
5460         J.2.10  Jump and Jump to Subroutine Instructions
5461
5462                 jmp     @rn                     jmp     @@dir
5463                 jmp     @label                  jmp     label
5464
5465                 jsr     @rn                     jsr     @@dir
5466                 jsr     @label                  jsr     label
5467 \f
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481                                    APPENDIX K
5482
5483                                 AS8051 ASSEMBLER
5484
5485
5486
5487
5488
5489         K.1  ACKNOWLEDGMENT
5490
5491
5492            Thanks  to  John  Hartman  for his contribution of the AS8051
5493         cross assembler.
5494
5495                 John L. Hartman
5496                 jhartman@compuserve.com
5497
5498
5499         K.2  8051 REGISTER SET
5500
5501         The following is a list of the 8051 registers used by AS8051:
5502
5503                 a,b             -       8-bit accumulators
5504                 r0,r1,r2,r3     -       8-bit registers
5505                 r4,r5,r6,r7
5506                 dptr            -       data pointer
5507                 sp              -       stack pointer
5508                 pc              -       program counter
5509                 psw             -       status word
5510                 c               -       carry (bit in status word)
5511 \f
5512
5513         AS8051 ASSEMBLER                                        PAGE K-2
5514         8051 REGISTER SET
5515
5516
5517         K.3  8051 INSTRUCTION SET
5518
5519
5520            The  following  tables  list all 8051 mnemonics recognized by
5521         the AS8051 assembler.  The following list specifies  the  format
5522         for each addressing mode supported by AS8051:
5523
5524                 #data           immediate data
5525                                 byte or word data
5526
5527                 r,r1,r2         register r0,r1,r2,r3,r4,r5,r6, or r7
5528
5529                 @r              indirect on register r0 or r1
5530                 @dptr           indirect on data pointer
5531                 @a+dptr         indirect on accumulator
5532                                 plus data pointer
5533                 @a+pc           indirect on accumulator
5534                                 plus program counter
5535
5536                 addr            direct memory address
5537
5538                 bitaddr         bit address
5539
5540                 label           call or jump label
5541
5542         The terms data, addr, bitaddr, and label may all be expressions.
5543
5544            Note  that  not all addressing modes are valid with every in-
5545         struction.  Refer to the 8051 technical data for valid modes.
5546
5547
5548         K.3.1  Inherent Instructions
5549
5550                 nop
5551 \f
5552
5553         AS8051 ASSEMBLER                                        PAGE K-3
5554         8051 INSTRUCTION SET
5555
5556
5557         K.3.2  Move Instructions
5558
5559                 mov     a,#data         mov     a,addr
5560                 mov     a,r             mov     a,@r
5561
5562                 mov     r,#data         mov     r,addr
5563                 mov     r,a
5564
5565                 mov     addr,a          mov     addr,#data
5566                 mov     addr,r          mov     addr,@r
5567                 mov     addr1,addr2     mov     bitaddr,c
5568
5569                 mov     @r,#data        mov     @r,addr
5570                 mov     @r,a
5571
5572                 mov     c,bitaddr
5573                 mov     dptr,#data
5574
5575                 movc    a,@a+dptr       movc    a,@a+pc
5576                 movx    a,@dptr         movx    a,@r
5577                 movx    @dptr,a         movx    @r,a
5578
5579
5580         K.3.3  Single Operand Instructions
5581
5582                 clr     a               clr     c
5583                 clr     bitaddr
5584                 cpl     a               cpl     c
5585                 cpl     bitaddr
5586                 setb    c               setb    bitaddr
5587
5588                 da      a
5589                 rr      a               rrc     a
5590                 rl      a               rlc     a
5591                 swap    a
5592
5593                 dec     a               dec     r
5594                 dec     @r
5595                 inc     a               inc     r
5596                 inc     dptr            inc     @r
5597
5598                 div     ab              mul     ab
5599
5600                 pop     addr            push    addr
5601 \f
5602
5603         AS8051 ASSEMBLER                                        PAGE K-4
5604         8051 INSTRUCTION SET
5605
5606
5607         K.3.4  Two Operand Instructions
5608
5609                 add     a,#data         add     a,addr
5610                 add     a,r             add     a,@r
5611                 addc    a,#data         addc    a,addr
5612                 addc    a,r             addc    a,@r
5613                 subb    a,#data         subb    a,addr
5614                 subb    a,r             subb    a,@r
5615                 orl     a,#data         orl     a,addr
5616                 orl     a,r             orl     a,@r
5617                 orl     addr,a          orl     addr,#data
5618                 orl     c,bitaddr       orl     c,/bitaddr
5619                 anl     a,#data         anl     a,addr
5620                 anl     a,r             anl     a,@r
5621                 anl     addr,a          anl     addr,#data
5622                 anl     c,bitaddr       anl     c,/bitaddr
5623                 xrl     a,#data         xrl     a,addr
5624                 xrl     a,r             xrl     a,@r
5625                 xrl     addr,a          xrl     addr,#data
5626                 xrl     c,bitaddr       xrl     c,/bitaddr
5627                 xch     a,addr          xch     a,r
5628                 xch     a,@r            xchd    a,@r
5629
5630
5631         K.3.5  Call and Return Instructions
5632
5633                 acall   label           lcall   label
5634                 ret                     reti
5635                 in      data
5636                 out     data
5637                 rst     data
5638
5639
5640         K.3.6  Jump Instructions
5641
5642                 ajmp    label
5643                 cjne    a,#data,label   cjne    a,addr,label
5644                 cjne    r,#data,label   cjne    @r,#data,label
5645                 djnz    r,label         djnz    addr,label
5646                 jbc     bitadr,label
5647                 jb      bitadr,label    jnb     bitadr,label
5648                 jc      label           jnc     label
5649                 jz      label           jnz     label
5650                 jmp     @a+dptr
5651                 ljmp    label           sjmp    label
5652 \f
5653
5654         AS8051 ASSEMBLER                                        PAGE K-5
5655         8051 INSTRUCTION SET
5656
5657
5658         K.3.7  Predefined Symbols:  SFR Map
5659
5660                         --------- 4 Bytes ----------
5661                         ----    ----    ----    ----
5662                 FC                                          FF
5663                 F8                                          FB
5664                 F4                                          F7
5665                 F0      B                                   F3
5666                 EC                                          EF
5667                 E8                                          EB
5668                 E4                                          E7
5669                 E0      ACC                                 E3
5670                 DC                                          DF
5671                 D8                                          DB
5672                 D4                                          D7
5673                 D0      PSW                                 D3
5674                 CC   [  TL2     TH2                     ]   CF
5675                 C8   [  T2CON           RCAP2L  RCAP2H  ]   CB
5676                 C4                                          C7
5677                 C0                                          C3
5678                 BC                                          BF
5679                 B8      IP                                  BB
5680                 B4                                          B7
5681                 B0      P3                                  B3
5682                 AC                                          AF
5683                 A8      IE                                  AB
5684                 A4                                          A7
5685                 A0      P2                                  A3
5686                 9C                                          9F
5687                 98      SCON    SBUF                        9B
5688                 94                                          97
5689                 90      P1                                  93
5690                 8C      TH0     TH1                         8F
5691                 88      TCON    TMOD    TL0     TL1         8B
5692                 84                              PCON        87
5693                 80      P0      SP      DPL     DPH         83
5694
5695                 [...] Indicates Resident in 8052, not 8051
5696 \f
5697
5698         AS8051 ASSEMBLER                                        PAGE K-6
5699         8051 INSTRUCTION SET
5700
5701
5702         K.3.8  Predefined Symbols:  SFR Bit Addresses
5703
5704                         ---------- 4 BITS ----------
5705                         ----    ----    ----    ----
5706                 FC                                          FF
5707                 F8                                          FB
5708                 F4      B.4     B.5     B.6     B.7         F7
5709                 F0      B.0     B.1     B.2     B.3         F3
5710                 EC                                          EF
5711                 E8                                          EB
5712                 E4      ACC.4   ACC.5   ACC.6   ACC.7       E7
5713                 E0      ACC.0   ACC.1   ACC.2   ACC.3       E3
5714                 DC                                          DF
5715                 D8                                          DB
5716                 D4      PSW.4   PSW.5   PSW.6   PSW.7       D7
5717                 D0      PSW.0   PSW.1   PSW.2   PSW.3       D3
5718                 CC   [  T2CON.4 T2CON.5 T2CON.6 T2CON.7 ]   CF
5719                 C8   [  T2CON.0 T2CON.1 T2CON.2 T2CON.3 ]   CB
5720                 C4                                          C7
5721                 C0                                          C3
5722                 BC      IP.4    IP.5    IP.6    IP.7        BF
5723                 B8      IP.0    IP.1    IP.2    IP.3        BB
5724                 B4      P3.4    P3.5    P3.6    P3.7        B7
5725                 B0      P3.0    P3.1    P3.2    P3.3        B3
5726                 AC      IE.4    IE.5    EI.6    IE.7        AF
5727                 A8      IE.0    IE.1    IE.2    IE.3        AB
5728                 A4      P2.4    P2.5    P2.6    P2.7        A7
5729                 A0      P2.0    P2.1    P2.2    P2.3        A3
5730                 9C      SCON.4  SCON.5  SCON.6  SCON.7      9F
5731                 98      SCON.0  SCON.1  SCON.2  SCON.3      9B
5732                 94      P1.4    P1.5    P1.6    P1.7        97
5733                 90      P1.0    P1.1    P1.2    P1.3        93
5734                 8C      TCON.4  TCON.5  TCON.6  TCON.7      8F
5735                 88      TCON.0  TCON.1  TCON.2  TCON.3      8B
5736                 84      P0.4    P0.5    P0.6    P0.7        87
5737                 80      P0.0    P0.1    P0.2    P0.3        83
5738
5739                 [...] Indicates Resident in 8052, not 8051
5740 \f
5741
5742         AS8051 ASSEMBLER                                        PAGE K-7
5743         8051 INSTRUCTION SET
5744
5745
5746         K.3.9  Predefined Symbols:  Control Bits
5747
5748                         ---------- 4 BITS ----------
5749                         ----    ----    ----    ----
5750                 FC                                          FF
5751                 F8                                          FB
5752                 F4                                          F7
5753                 F0                                          F3
5754                 EC                                          EF
5755                 E8                                          EB
5756                 E4                                          E7
5757                 E0                                          E3
5758                 DC                                          DF
5759                 D8                                          DB
5760                 D4      RS1     F0      AC      CY          D7
5761                 D0      P               OV      RS0         D3
5762                 CC   [  TLCK    RCLK    EXF2    TF2     ]   CF
5763                 C8   [  CPRL2   CT2     TR2     EXEN2   ]   CB
5764                 C4                                          C7
5765                 C0                                          C3
5766                 BC      PS      PT2                         BF
5767                 B8      PX0     PT0     PX1     PT1         BB
5768                 B4                                          B7
5769                 B0      RXD     TXD     INT0    INT1        B3
5770                 AC      ES      ET2             EA          AF
5771                 A8      EX0     ET0     EX1     ET1         AB
5772                 A4                                          A7
5773                 A0                                          A3
5774                 9C      REN     SM2     SM1     SM0         9F
5775                 98      RI      TI      RB8     TB8         9B
5776                 94                                          97
5777                 90                                          93
5778                 8C      TR0     TF0     TR1     TF1         8F
5779                 88      IT0     IE0     IT1     IE1         8B
5780                 84                                          87
5781                 80                                          83
5782
5783                 [...] Indicates Resident in 8052, not 8051
5784 \f
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798                                    APPENDIX L
5799
5800                                 AS8085 ASSEMBLER
5801
5802
5803
5804
5805
5806         L.1  8085 REGISTER SET
5807
5808         The  following  is  a  list  of  the 8080/8085 registers used by
5809         AS8085:
5810
5811                 a,b,c,d,e,h,l   -       8-bit accumulators
5812                 m               -       memory through (hl)
5813                 sp              -       stack pointer
5814                 psw             -       status word
5815
5816
5817         L.2  8085 INSTRUCTION SET
5818
5819
5820            The  following tables list all 8080/8085 mnemonics recognized
5821         by the AS8085  assembler.   The  following  list  specifies  the
5822         format for each addressing mode supported by AS8085:
5823
5824                 #data           immediate data
5825                                 byte or word data
5826
5827                 r,r1,r2         register or register pair
5828                                 psw,a,b,c,d,e,h,l
5829                                 bc,de,hl,sp,pc
5830
5831                 m               memory address using (hl)
5832
5833                 addr            direct memory addressing
5834
5835                 label           call or jump label
5836
5837         The terms data, m, addr, and label may be expressions.
5838
5839            Note  that  not all addressing modes are valid with every in-
5840         struction, refer to  the  8080/8085  technical  data  for  valid
5841         modes.
5842 \f
5843
5844         AS8085 ASSEMBLER                                        PAGE L-2
5845         8085 INSTRUCTION SET
5846
5847
5848         L.2.1  Inherent Instructions
5849
5850                 cma             cmc
5851                 daa             di
5852                 ei              hlt
5853                 nop             pchl
5854                 ral             rar
5855                 ret             rim
5856                 rrc             rlc
5857                 sim             sphl
5858                 stc             xchg
5859                 xthl
5860
5861
5862         L.2.2  Register/Memory/Immediate Instructions
5863
5864                 adc     r       adc     m       aci     #data
5865                 add     r       add     m       adi     #data
5866                 ana     r       ana     m       ani     #data
5867                 cmp     r       cmp     m       cpi     #data
5868                 ora     r       ora     m       ori     #data
5869                 sbb     r       sbb     m       sbi     #data
5870                 sub     r       sub     m       sui     #data
5871                 xra     r       xra     m       xri     #data
5872
5873
5874         L.2.3  Call and Return Instructions
5875
5876                 cc      label           rc
5877                 cm      label           rm
5878                 cnc     label           rnc
5879                 cnz     label           rnz
5880                 cp      label           rp
5881                 cpe     label           rpe
5882                 cpo     label           rpo
5883                 cz      label           rz
5884                 call    label
5885
5886
5887         L.2.4  Jump Instructions
5888
5889                 jc      label
5890                 jm      label
5891                 jnc     label
5892                 jnz     label
5893                 jp      label
5894                 jpe     label
5895                 jpo     label
5896                 jz      label
5897                 jmp     label
5898 \f
5899
5900         AS8085 ASSEMBLER                                        PAGE L-3
5901         8085 INSTRUCTION SET
5902
5903
5904         L.2.5  Input/Output/Reset Instructions
5905
5906                 in      data
5907                 out     data
5908                 rst     data
5909
5910
5911         L.2.6  Move Instructions
5912
5913                 mov     r1,r2
5914                 mov     r,m
5915                 mov     m,r
5916
5917                 mvi     r,#data
5918                 mvi     m,#data
5919
5920
5921         L.2.7  Other Instructions
5922
5923                 dcr     r               dcr     m
5924                 inr     r               inr     m
5925
5926                 dad     r               dcx     r
5927                 inx     r               ldax    r
5928                 pop     r               push    r
5929                 stax    r
5930
5931                 lda     addr            lhld    addr
5932                 shld    addr            sta     addr
5933
5934                 lxi     r,#data
5935 \f
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949                                    APPENDIX M
5950
5951                                  ASZ80 ASSEMBLER
5952
5953
5954
5955
5956
5957         M.1  .hd64 DIRECTIVE
5958
5959         Format:
5960
5961                 .hd64
5962
5963         The  .hd64  directive enables processing of the HD64180 specific
5964         mnemonics not included in  the  Z80  instruction  set.   HD64180
5965         mnemonics  encountered  without  the  .hd64  directive  will  be
5966         flagged with an 'o' error.
5967
5968
5969         M.2  Z80 REGISTER SET AND CONDITIONS
5970
5971
5972            The following is a complete list of register designations and
5973         condition mnemonics:
5974
5975                 byte registers  -       a,b,c,d,e,h,l,i,r
5976                 register pairs  -       af,af',bc,de,hl
5977                 word registers  -       pc,sp,ix,iy
5978
5979                 C -     carry bit set
5980                 M -     sign bit set
5981                 NC -    carry bit clear
5982                 NZ -    zero bit clear
5983                 P -     sign bit clear
5984                 PE -    parity even
5985                 PO -    parity odd
5986                 Z -     zero bit set
5987
5988
5989 \f
5990
5991         ASZ80 ASSEMBLER                                         PAGE M-2
5992         Z80 INSTRUCTION SET
5993
5994
5995         M.3  Z80 INSTRUCTION SET
5996
5997
5998            The  following  tables  list all Z80/HD64180 mnemonics recog-
5999         nized by the ASZ80 assembler.  The designation []  refers  to  a
6000         required addressing mode argument.  The following list specifies
6001         the format for each addressing mode supported by ASZ80:
6002
6003                 #data           immediate data
6004                                 byte or word data
6005
6006                 n               byte value
6007
6008                 rg              a byte register
6009                                 a,b,c,d,e,h,l
6010
6011                 rp              a register pair
6012                                 bc,de,hl
6013
6014                 (hl)            implied addressing or
6015                                 register indirect addressing
6016
6017                 (label)         direct addressing
6018
6019                 offset(ix)      indexed addressing with
6020                                 an offset
6021
6022                 label           call/jmp/jr label
6023
6024         The  terms  data,  dir,  offset, and ext may all be expressions.
6025         The terms dir and offset are not allowed to be  external  refer-
6026         ences.
6027
6028            Note  that  not all addressing modes are valid with every in-
6029         struction, refer to the Z80/HD64180  technical  data  for  valid
6030         modes.
6031 \f
6032
6033         ASZ80 ASSEMBLER                                         PAGE M-3
6034         Z80 INSTRUCTION SET
6035
6036
6037         M.3.1  Inherent Instructions
6038
6039                 ccf             cpd
6040                 cpdr            cpi
6041                 cpir            cpl
6042                 daa             di
6043                 ei              exx
6044                 halt            neg
6045                 nop             reti
6046                 retn            rla
6047                 rlca            rld
6048                 rra             rrca
6049                 rrd             scf
6050
6051
6052         M.3.2  Implicit Operand Instructions
6053
6054                 adc     a,[]            adc     []
6055                 add     a,[]            add     []
6056                 and     a,[]            and     []
6057                 cp      a,[]            cp      []
6058                 dec     a,[]            dec     []
6059                 inc     a,[]            inc     []
6060                 or      a,[]            or      []
6061                 rl      a,[]            rl      []
6062                 rlc     a,[]            rlc     []
6063                 rr      a,[]            rr      []
6064                 rrc     a,[]            rrc     []
6065                 sbc     a,[]            sbc     []
6066                 sla     a,[]            sla     []
6067                 sra     a,[]            sra     []
6068                 srl     a,[]            srl     []
6069                 sub     a,[]            sub     []
6070                 xor     a,[]            xor     []
6071 \f
6072
6073         ASZ80 ASSEMBLER                                         PAGE M-4
6074         Z80 INSTRUCTION SET
6075
6076
6077         M.3.3  Load Instruction
6078
6079                 ld      rg,[]           ld      [],rg
6080                 ld      (bc),a          ld      a,(bc)
6081                 ld      (de),a          ld      a,(de)
6082                 ld      (label),a       ld      a,(label)
6083                 ld      (label),rp      ld      rp,(label)
6084                 ld      i,a             ld      r,a
6085                 ld      a,i             ld      a,r
6086                 ld      sp,hl           ld      sp,ix
6087                 ld      sp,iy           ld      rp,#data
6088
6089                 ldd                     lddr
6090                 ldi                     ldir
6091
6092
6093         M.3.4  Call/Return Instructions
6094
6095                 call    C,label         ret     C
6096                 call    M,label         ret     M
6097                 call    NC,label        ret     NC
6098                 call    NZ,label        ret     NZ
6099                 call    P,label         ret     P
6100                 call    PE,label        ret     PE
6101                 call    PO,label        ret     PO
6102                 call    Z,label         ret     Z
6103                 call    label           ret
6104
6105
6106         M.3.5  Jump and Jump to Subroutine Instructions
6107
6108                 jp      C,label         jp      M,label
6109                 jp      NC,label        jp      NZ,label
6110                 jp      P,label         jp      PE,label
6111                 jp      PO,label        jp      Z,label
6112
6113                 jp      (hl)            jp      (ix)
6114                 jp      (iy)            jp      label
6115
6116                 djnz    label
6117
6118                 jr      C,label         jr      NC,label
6119                 jr      NZ,label        jr      Z,label
6120                 jr      label
6121 \f
6122
6123         ASZ80 ASSEMBLER                                         PAGE M-5
6124         Z80 INSTRUCTION SET
6125
6126
6127         M.3.6  Bit Manipulation Instructions
6128
6129                 bit     n,[]
6130                 res     n,[]
6131                 set     n,[]
6132
6133
6134         M.3.7  Interrupt Mode and Reset Instructions
6135
6136                 im      n
6137                 im      n
6138                 im      n
6139                 rst     n
6140
6141
6142         M.3.8  Input and Output Instructions
6143
6144                 in      a,(n)           in      rg,(c)
6145                 ind                     indr
6146                 ini                     inir
6147
6148                 out     (n),a           out     (c),rg
6149                 outd                    otdr
6150                 outi                    otir
6151
6152
6153         M.3.9  Register Pair Instructions
6154
6155                 add     hl,rp           add     ix,rp
6156                 add     iy,rp
6157
6158                 adc     hl,rp           sbc     hl,rp
6159
6160                 ex      (sp),hl         ex      (sp),ix
6161                 ex      (sp),iy
6162                 ex      de,hl
6163                 ex      af,af'
6164
6165                 push    rp              pop     rp
6166 \f
6167
6168         ASZ80 ASSEMBLER                                         PAGE M-6
6169         Z80 INSTRUCTION SET
6170
6171
6172         M.3.10  HD64180 Specific Instructions
6173
6174                 in0     rg,(n)
6175                 out0    (n),rg
6176
6177                 otdm                    otdmr
6178                 otim                    otimr
6179
6180                 mlt     bc              mlt     de
6181                 mlt     hl              mlt     sp
6182
6183                 slp
6184
6185                 tst     a
6186                 tstio   #data
6187 \f
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201                                    APPENDIX N
6202
6203                                 AS6500 ASSEMBLER
6204
6205
6206
6207
6208
6209         N.1  ACKNOWLEDGMENT
6210
6211
6212            Thanks  to  Marko  Makela  for his contribution of the AS6500
6213         cross assembler.
6214
6215                 Marko Makela
6216                 Sillitie 10 A
6217                 01480 Vantaa
6218                 Finland
6219                 Internet: Marko.Makela@Helsinki.Fi
6220                 EARN/BitNet: msmakela@finuh
6221
6222            Several  additions and modifications were made to his code to
6223         support the following families of 6500 processors:
6224
6225                 (1)     650X and 651X processor family
6226                 (2)     65F11 and 65F12 processor family
6227                 (3)     65C00/21 and 65C29 processor family
6228                 (4)     65C02, 65C102, and 65C112 processor family
6229
6230            The  instruction  syntax of this cross assembler contains two
6231         peculiarities:  (1) the addressing indirection is denoted by the
6232         square  brackets  []  and (2) the `bbrx' and `bbsx' instructions
6233         are written `bbr0 memory,label'.
6234
6235
6236 \f
6237
6238         AS6500 ASSEMBLER                                        PAGE N-2
6239         6500 REGISTER SET
6240
6241
6242         N.2  6500 REGISTER SET
6243
6244         The following is a list of the 6500 registers used by AS6500:
6245
6246                 a       -       8-bit accumulator
6247                 x,y     -       index registers
6248
6249
6250         N.3  6500 INSTRUCTION SET
6251
6252
6253            The  following  tables  list all 6500 family mnemonics recog-
6254         nized by the AS6500 assembler.  The designation [] refers  to  a
6255         required addressing mode argument.  The following list specifies
6256         the format for each addressing mode supported by AS6500:
6257
6258                 #data           immediate data
6259                                 byte or word data
6260
6261                 *dir            direct page addressing
6262                                 (see .setdp directive)
6263                                 0 &lt;= dir &lt;= 255
6264
6265                 offset,x        indexed addressing
6266                 offset,y        indexed addressing
6267                                 address = (offset + (x or y))
6268
6269                 [offset,x]      pre-indexed indirect addressing
6270                                 0 &lt;= offset &lt;= 255
6271                                 address = contents of location
6272                                     (offset + (x or y)) mod 256
6273
6274                 [offset],y      post-indexed indirect addressing
6275                                 address = contents of location at offset
6276                                     plus the value of the y register
6277
6278                 [address]       indirect addressing
6279
6280                 ext             extended addressing
6281
6282                 label           branch label
6283
6284                 address,label   direct page memory location
6285                                 branch label
6286                                 bbrx and bbsx instruction addressing
6287
6288         The  terms data, dir, offset, address, ext, and label may all be
6289         expressions.
6290
6291            Note  that  not all addressing modes are valid with every in-
6292         struction, refer to the 65xx technical data for valid modes.
6293 \f
6294
6295         AS6500 ASSEMBLER                                        PAGE N-3
6296         6500 INSTRUCTION SET
6297
6298
6299         N.3.1  Processor Specific Directives
6300
6301
6302            The  AS6500  cross  assembler has four (4) processor specific
6303         assembler directives which  define  the  target  65xx  processor
6304         family:
6305
6306                 .r6500          Core 650X and 651X family (default)
6307                 .r65f11         Core plus 65F11 and 65F12
6308                 .r65c00         Core plus 65C00/21 and 65C29
6309                 .r65c02         Core plus 65C02, 65C102, and 65C112
6310
6311
6312         N.3.2  65xx Core Inherent Instructions
6313
6314                 brk                     clc
6315                 cld                     cli
6316                 clv                     dex
6317                 dey                     inx
6318                 iny                     nop
6319                 pha                     php
6320                 pla                     plp
6321                 rti                     rts
6322                 sec                     sed
6323                 sei                     tax
6324                 tay                     tsx
6325                 txa                     txs
6326                 tya
6327
6328
6329         N.3.3  65xx Core Branch Instructions
6330
6331                 bcc     label           bhs     label
6332                 bcs     label           blo     label
6333                 beq     label           bmi     label
6334                 bne     label           bpl     label
6335                 bvc     label           bvs     label
6336
6337
6338         N.3.4  65xx Core Single Operand Instructions
6339
6340                 asl     []
6341                 dec     []
6342                 inc     []
6343                 lsr     []
6344                 rol     []
6345                 ror     []
6346 \f
6347
6348         AS6500 ASSEMBLER                                        PAGE N-4
6349         6500 INSTRUCTION SET
6350
6351
6352         N.3.5  65xx Core Double Operand Instructions
6353
6354                 adc     []
6355                 and     []
6356                 bit     []
6357                 cmp     []
6358                 eor     []
6359                 lda     []
6360                 ora     []
6361                 sbc     []
6362                 sta     []
6363
6364
6365         N.3.6  65xx Core Jump and Jump to Subroutine Instructions
6366
6367                 jmp     []              jsr     []
6368
6369
6370         N.3.7  65xx Core Miscellaneous X and Y Register Instructions
6371
6372                 cpx     []
6373                 cpy     []
6374                 ldx     []
6375                 stx     []
6376                 ldy     []
6377                 sty     []
6378 \f
6379
6380         AS6500 ASSEMBLER                                        PAGE N-5
6381         6500 INSTRUCTION SET
6382
6383
6384         N.3.8  65F11 and 65F12 Specific Instructions
6385
6386                 bbr0    [],label                bbr1    [],label
6387                 bbr2    [],label                bbr3    [],label
6388                 bbr4    [],label                bbr5    [],label
6389                 bbr6    [],label                bbr7    [],label
6390
6391                 bbs0    [],label                bbs1    [],label
6392                 bbs2    [],label                bbs3    [],label
6393                 bbs4    [],label                bbs5    [],label
6394                 bbs6    [],label                bbs7    [],label
6395
6396                 rmb0    []                      rmb1    []
6397                 rmb2    []                      rmb3    []
6398                 rmb4    []                      rmb5    []
6399                 rmb6    []                      rmb7    []
6400
6401                 smb0    []                      smb1    []
6402                 smb2    []                      smb3    []
6403                 smb4    []                      smb5    []
6404                 smb6    []                      smb7    []
6405
6406
6407         N.3.9  65C00/21 and 65C29 Specific Instructions
6408
6409                 bbr0    [],label                bbr1    [],label
6410                 bbr2    [],label                bbr3    [],label
6411                 bbr4    [],label                bbr5    [],label
6412                 bbr6    [],label                bbr7    [],label
6413
6414                 bbs0    [],label                bbs1    [],label
6415                 bbs2    [],label                bbs3    [],label
6416                 bbs4    [],label                bbs5    [],label
6417                 bbs6    [],label                bbs7    [],label
6418
6419                 bra     label
6420
6421                 phx                             phy
6422                 plx                             ply
6423
6424                 rmb0    []                      rmb1    []
6425                 rmb2    []                      rmb3    []
6426                 rmb4    []                      rmb5    []
6427                 rmb6    []                      rmb7    []
6428
6429                 smb0    []                      smb1    []
6430                 smb2    []                      smb3    []
6431                 smb4    []                      smb5    []
6432                 smb6    []                      smb7    []
6433 \f
6434
6435         AS6500 ASSEMBLER                                        PAGE N-6
6436         6500 INSTRUCTION SET
6437
6438
6439         N.3.10  65C02, 65C102, and 65C112 Specific Instructions
6440
6441                 bbr0    [],label                bbr1    [],label
6442                 bbr2    [],label                bbr3    [],label
6443                 bbr4    [],label                bbr5    [],label
6444                 bbr6    [],label                bbr7    [],label
6445
6446                 bbs0    [],label                bbs1    [],label
6447                 bbs2    [],label                bbs3    [],label
6448                 bbs4    [],label                bbs5    [],label
6449                 bbs6    [],label                bbs7    [],label
6450
6451                 bra     label
6452
6453                 phx                             phy
6454                 plx                             ply
6455
6456                 rmb0    []                      rmb1    []
6457                 rmb2    []                      rmb3    []
6458                 rmb4    []                      rmb5    []
6459                 rmb6    []                      rmb7    []
6460
6461                 smb0    []                      smb1    []
6462                 smb2    []                      smb3    []
6463                 smb4    []                      smb5    []
6464                 smb6    []                      smb7    []
6465
6466                 stz     []
6467                 trb     []
6468                 tsb     []
6469
6470            Additional  addressing  modes for the following core instruc-
6471         tions are also available with the 65C02, 65C102, and 65C112 pro-
6472         cessors.
6473
6474                 adc     []                      and     []
6475                 cmp     []                      eor     []
6476                 lda     []                      ora     []
6477                 sbc     []                      sta     []
6478
6479                 bit     []                      jmp     []
6480
6481                 dec                             inc
6482 </PRE></B>
6483
6484 <IMG width=576 height=5 border=0 SRC="rnbow.gif">
6485
6486 <P><a href="../home.htm">
6487 <IMG width=32 height=32 border=0 SRC="spcshp.gif" ALIGN=BOTTOM></a>
6488 <B>...  Home Page</B></P>
6489 </BODY>
6490 </HTML>