444824c854e262cc219de522c00a3933e8adfa97
[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         as6809 [-dqxgalosff] 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                 g       undefined symbols made global
1940                 a       all user symbols made global
1941
1942                 l       create list   output file1.lst
1943                 o       create object output file1.rel
1944                 s       create symbol output file1.sym
1945
1946                 p       disable listing pagination
1947                 w       wide listing format for symbol table
1948
1949                 z       enable case sensitivity for symbols
1950
1951                         relocatable reference flagging:
1952
1953                 f       by  `   in the listing file
1954                 ff      by mode in the listing file
1955
1956            The file name for the .lst, .rel, and .sym files is the first
1957         file name specified in the command line.  All output  files  are
1958         ascii  text  files which may be edited, copied, etc.  The output
1959         files are the concatenation of all the input files, if files are
1960         to  be  assembled  independently  invoke  the assembler for each
1961         file.
1962
1963            The  .rel  file contains a radix directive so that the linker
1964         will use the proper conversion for this file.  Linked files  may
1965         have different radices.
1966
1967 \f
1968
1969         THE ASSEMBLER                                          PAGE 1-28
1970         INVOKING ASXXXX
1971
1972
1973            If  the list (l) option is specified without the symbol table
1974         (s) option, the symbol table is placed at the end of the listing
1975         file.
1976
1977
1978         1.6  ERRORS
1979
1980
1981            The  ASxxxx assemblers provide limited diagnostic error codes
1982         during the assembly process, these errors will be noted  in  the
1983         listing file and printed on the stderr device.
1984
1985            The assembler reports the errors on the stderr device as
1986
1987                 ?ASxxxx-Error-&lt;*&gt; in line nnn of filename
1988
1989         where  * is the error code, nnn is the line number, and filename
1990         is the source/include file.
1991
1992            The errors are:
1993
1994               (.)   This  error  is caused by an absolute direct assign-
1995                     ment of the current location counter
1996                           . = expression (incorrect)
1997                     rather than the correct
1998                           . = . + expression
1999
2000               (a)   Indicates  a machine specific addressing or address-
2001                     ing mode error.
2002
2003               (b)   Indicates a direct page boundary error.
2004
2005               (d)   Indicates a direct page addressing error.
2006
2007               (i)   Caused  by  an  .include file error or an .if/.endif
2008                     mismatch.
2009
2010               (m)   Multiple  definitions  of  the  same label, multiple
2011                     .module directives, or multiple  conflicting  attri-
2012                     butes in an .area directive.
2013
2014               (o)   Directive  or  mnemonic error or the use of the .org
2015                     directive in a relocatable area.
2016
2017               (p)   Phase error:  label location changing between passes
2018                     2 and 3.  Normally caused by having  more  than  one
2019                     level of forward referencing.
2020
2021               (q)   Questionable syntax:  missing or improper operators,
2022                     terminators, or delimiters.
2023
2024               (r)   Relocation  error:   logic  operation attempted on a
2025 \f
2026
2027         THE ASSEMBLER                                          PAGE 1-29
2028         ERRORS
2029
2030
2031                     relocatable term, addition of two relocatable terms,
2032                     subtraction  of two relocatable terms not within the
2033                     same programming area or external symbols.
2034
2035               (u)   Undefined symbol encountered during assembly.
2036
2037
2038         1.7  LISTING FILE
2039
2040
2041            The  (-l) option produces an ascii output listing file.  Each
2042         page of output contains a four line header:
2043
2044
2045              1.  The ASxxxx program name and page number
2046
2047              2.  Title from a .title directive (if any)
2048
2049              3.  Subtitle from a .sbttl directive (if any)
2050
2051              4.  Blank line
2052
2053
2054
2055         Each succeeding line contains five fields:
2056
2057
2058              1.  Error field (first three characters of line)
2059
2060              2.  Current location counter
2061
2062              3.  Generated code in byte format
2063
2064              4.  Source text line number
2065
2066              5.  Source text
2067
2068
2069            The error field may contain upto 2 error flags indicating any
2070         errors encountered while assembling this line of source code.
2071
2072            The  current  location counter field displays the 16-bit pro-
2073         gram position.  This field will be in the selected radix.
2074
2075            The generated code follows the program location.  The listing
2076         radix determines the number of bytes that will be  displayed  in
2077         this field.  Hexidecimal listing allows six bytes of data within
2078         the field, decimal and octal allow four bytes within the  field.
2079         If more than one field of data is generated from the assembly of
2080         a single line of source code, then the data field is repeated on
2081         successive lines.
2082
2083 \f
2084
2085         THE ASSEMBLER                                          PAGE 1-30
2086         LISTING FILE
2087
2088
2089            The source text line number is printed in decimal and is fol-
2090         lowed by the source text.
2091
2092            Two  special  cases  will  disable  the  listing of a line of
2093         source text:
2094
2095              1.  Source line with a .page directive is never listed.
2096
2097              2.  Source  line  with  a  .include  file  directive is not
2098                  listed unless the .include file cannot be opened.
2099
2100
2101            Two  data  field  options  are  available to flag those bytes
2102         which will be relocated by the linker.   If  the  -f  option  is
2103         specified  then  each  byte to be relocated will be preceeded by
2104         the '`' character.  If the -ff option  is  specified  then  each
2105         byte  to  be relocated will be preceeded by one of the following
2106         characters:
2107
2108              1.  *   paged relocation
2109
2110              2.  u   low  byte of unsigned word or unsigned byte
2111
2112              3.  v   high byte of unsigned word
2113
2114              4.  p   PCR low  byte of word relocation or PCR byte
2115
2116              5.  q   PCR high byte of word relocation
2117
2118              6.  r   low  byte relocation or byte relocation
2119
2120              7.  s   high byte relocation
2121
2122
2123
2124         1.8  SYMBOL TABLE FILE
2125
2126
2127            The symbol table has two parts:
2128
2129              1.  The alphabetically sorted list of symbols and/or labels
2130                  defined or referenced in the source program.
2131
2132              2.  A  list of the program areas defined during assembly of
2133                  the source program.
2134
2135
2136            The sorted list of symbols and/or labels contains the follow-
2137         ing information:
2138
2139              1.  Program  area  number (none if absolute value or exter-
2140                  nal)
2141 \f
2142
2143         THE ASSEMBLER                                          PAGE 1-31
2144         SYMBOL TABLE FILE
2145
2146
2147              2.  The symbol or label
2148
2149              3.  Directly assigned symbol is denoted with an (=) sign
2150
2151              4.  The  value of a symbol, location of a label relative to
2152                  the program area base address (=0), or a ****  indicat-
2153                  ing the symbol or label is undefined.
2154
2155              5.  The  characters:   G - global, R - relocatable, and X -
2156                  external.
2157
2158
2159            The list of program areas provides the correspondence between
2160         the program area numbers and the defined program areas, the size
2161         of the program areas, and the area flags (attributes).
2162
2163
2164         1.9  OBJECT FILE
2165
2166
2167            The  object  file is an ascii file containing the information
2168         needed by the linker to bind multiple object modules into a com-
2169         plete  loadable  memory  image.   The object module contains the
2170         following designators:
2171
2172                 [XDQ][HL]
2173                         X       Hexidecimal radix
2174                         D       Decimal radix
2175                         Q       Octal radix
2176
2177                         H       Most significant byte first
2178                         L       Least significant byte first
2179
2180                 H       Header
2181                 M       Module
2182                 A       Area
2183                 S       Symbol
2184                 T       Object code
2185                 R       Relocation information
2186                 P       Paging information
2187
2188            Refer to the linker for a detailed description of each of the
2189         designators and the format of the information contained  in  the
2190         object file.
2191 \f
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205                                     CHAPTER 2
2206
2207                                    THE LINKER
2208
2209
2210
2211
2212
2213         2.1  ASLINK RELOCATING LINKER
2214
2215
2216            ASLINK is the companion linker for the ASxxxx assemblers.
2217
2218            The  program ASLINK is a general relocating linker performing
2219         the following functions:
2220
2221              1.  Bind multiple object modules into a single memory image
2222
2223              2.  Resolve inter-module symbol references
2224
2225              3.  Combine  code  belonging to the same area from multiple
2226                  object files into a single contiguous memory region
2227
2228              4.  Search and import object module libraries for undefined
2229                  global variables
2230
2231              5.  Perform   byte   and   word  program  counter  relative
2232                  (pc or pcr) addressing calculations
2233
2234              6.  Define absolute symbol values at link time
2235
2236              7.  Define absolute area base address values at link time
2237
2238              8.  Produce Intel Hex or Motorola S19 output file
2239
2240              9.  Produce a map of the linked memory image
2241
2242             10.  Produce  an updated listing file with the relocated ad-
2243                  dresses and data
2244
2245
2246
2247 \f
2248
2249         THE LINKER                                              PAGE 2-2
2250         INVOKING ASLINK
2251
2252
2253         2.2  INVOKING ASLINK
2254
2255
2256            The  linker  may run in the command line mode or command file
2257         modes.  The allowed startup linker commands are:
2258
2259         -c/-f           command line / command file modes
2260
2261         -p/-n           enable/disable echo file.lnk input to stdout
2262
2263            If  command  line  mode is selected, all linker commands come
2264         from stdin, if the command file mode is  selected  the  commands
2265         are input from the specified file (extension must be .lnk).
2266
2267            Most  sytems require the initial options to be entered on the
2268            command line:
2269
2270                 ASLINK -[cfpn]
2271
2272            Some  systems  may  request the arguments after the linker is
2273            started at a system specific prompt:
2274
2275                 ASLINK
2276                 argv:  -[cfpn]
2277
2278         After invoking the linker the valid options are:
2279
2280              1.  -i/-s   Intel Hex (file.ihx) or Motorola S19 (file.s19)
2281                  image output file.
2282
2283              2.  -z      Specifies that symbol names are case sensitive.
2284
2285              3.  -m      Generate a map file (file.map).  This file con-
2286                  tains a list of the symbols (by area) with absolute ad-
2287                  dresses,  sizes  of  linked  areas,  and  other linking
2288                  information.
2289
2290              4.  -w      Specifies  that  a  wide listing format be used
2291                  for the map file.
2292
2293              5.  -xdq    Specifies  the  number  radix  for the map file
2294                  (Hexidecimal, Decimal, or Octal).
2295
2296              6.  -u      Generate  an  updated  listing  file (file.rst)
2297                  derived from the relocated addresses and data from  the
2298                  linker
2299
2300              7.  fileN   Files  to  be linked.  Files may be on the same
2301                  line as the above options or on a separate line(s)  one
2302                  file  per line or multiple files separated by spaces or
2303                  tabs.
2304
2305 \f
2306
2307         THE LINKER                                              PAGE 2-3
2308         INVOKING ASLINK
2309
2310
2311              8.  -b  area = expression (one definition per line)
2312                  This  specifies  an area base address where the expres-
2313                  sion may contain constants and/or defined symbols  from
2314                  the linked files.
2315
2316              9.  -g  symbol = expression (one definition per line)
2317                  This  specifies  the value for the symbol where the ex-
2318                  pression may contain constants and/or  defined  symbols
2319                  from the linked files.
2320
2321             10.  -k  library directory path
2322                  (one  definition  per line) This specifies one possible
2323                  path to an object library.  More than one path  is  al-
2324                  lowed.
2325
2326             11.  -l  library file specification
2327                  (one  definition  per  line)  This specifies a possible
2328                  library file.  More than one file is allowed.
2329
2330             12.  -e      or null line, terminates input to the linker.
2331
2332
2333
2334         2.3  LIBRARY PATH(S) AND FILE(S)
2335
2336
2337            The process of resolving undefined symbols after scanning the
2338         input object  files  includes  the  scanning  of  object  module
2339         libraries.   The  linker will search through all combinations of
2340         the library path specifications (input by the -k option) and the
2341         library  file  specifications (input by the -l option) that lead
2342         to an existing library file.  Each library file contains a  list
2343         (one  file  per  line)  of  modules  included in this particular
2344         library.  Each existing object module is scanned for a match  to
2345         the undefined symbol.  The first module containing the symbol is
2346         then linked with the previous modules to resolve the symbol  de-
2347         finition.   The  library  object  modules are rescanned until no
2348         more symbols can be resolved.   The  scanning  algorithm  allows
2349         resolution  of  back references.  No errors are reported for non
2350         existant library files or object modules.
2351
2352            The  library  file  specification may be formed in one of two
2353         ways:
2354
2355              1.  If  the  library  file  contained an absolute path/file
2356                  specification  then  this  is   the   object   module's
2357                  path/file.
2358                  (i.e.  C:\...)
2359
2360              2.  If  the  library  file  contains  a  relative path/file
2361                  specification then the concatenation of  the  path  and
2362 \f
2363
2364         THE LINKER                                              PAGE 2-4
2365         LIBRARY PATH(S) AND FILE(S)
2366
2367
2368                  this  file  specification  becomes  the object module's
2369                  path/file.
2370                  (i.e.  \...)
2371
2372
2373            As  an example, assume there exists a library file termio.lib
2374         in the syslib directory specifying the following object modules:
2375
2376         \6809\io_disk        first object module
2377         d:\special\io_comm   second object module
2378
2379         and the following parameters were specified to the linker:
2380
2381         -k c:\iosystem\    the first path
2382         -k c:\syslib\      the second path
2383
2384         -l termio          the first library file
2385         -l io              the second library file (no such file)
2386
2387         The  linker  will attempt to use the following object modules to
2388         resolve any undefined symbols:
2389
2390         c:\syslib\6809\io_disk.rel     (concatenated path/file)
2391         d:\special\io_comm.rel         (absolute path/file)
2392
2393         all  other path(s)/file(s) don't exist.  (No errors are reported
2394         for non existant path(s)/file(s).)
2395
2396
2397         2.4  ASLINK PROCESSING
2398
2399
2400            The  linker  processes  the  files  in  the  order  they  are
2401         presented.  The first pass through the input files  is  used  to
2402         define  all  program  areas, the section area sizes, and symbols
2403         defined or referenced.  Undefined symbols will initiate a search
2404         of any specified library file(s) and the importing of the module
2405         containing the symbol definition.  After the first pass  the  -b
2406         (area  base  address) definitions, if any, are processed and the
2407         areas linked.
2408
2409            The  area  linking proceeds by first examining the area types
2410         ABS, CON, REL, OVR and PAG.  Absolute areas (ABS) from  separate
2411         object modules are always overlayed and have been assembled at a
2412         specific address, these are not normally relocated (if a -b com-
2413         mand  is  used  on an absolute area the area will be relocated).
2414         Relative areas (normally defined as REL|CON) have a base address
2415         of  0x0000  as read from the object files, the -b command speci-
2416         fies the beginning address of the area.  All subsequent relative
2417         areas  will  be  concatenated  with  proceeding  relative areas.
2418         Where specific ordering is desired, the first linker input  file
2419         should  have  the area definitions in the desired order.  At the
2420 \f
2421
2422         THE LINKER                                              PAGE 2-5
2423         ASLINK PROCESSING
2424
2425
2426         completion of the area linking all area  addresses  and  lengths
2427         have  been determined.  The areas of type PAG are verified to be
2428         on a 256 byte boundary and that the length does not  exceed  256
2429         bytes.  Any errors are noted on stderr and in the map file.
2430
2431            Next  the  global symbol definitions (-g option), if any, are
2432         processed.  The symbol definitions have been delayed until  this
2433         point because the absolute addresses of all internal symbols are
2434         known and can be used in the expression calculations.
2435
2436            Before  continuing  with the linking process the symbol table
2437         is scanned to determine if any symbols have been referenced  but
2438         not defined.  Undefined symbols are listed on the stderr device.
2439         if a .module directive was included in the  assembled  file  the
2440         module  making  the reference to this undefined variable will be
2441         printed.
2442
2443            Constants  defined  as global in more than one module will be
2444         flagged as multiple definitions if their values are not  identi-
2445         cal.
2446
2447            After  the  preceeding  processes are complete the linker may
2448         output a map file (-m option).  This file provides the following
2449         information:
2450
2451              1.  Global symbol values and label absolute addresses
2452
2453              2.  Defined areas and there lengths
2454
2455              3.  Remaining undefined symbols
2456
2457              4.  List of modules linked
2458
2459              5.  List of library modules linked
2460
2461              6.  List of -b and -g definitions
2462
2463
2464
2465
2466            The final step of the linking process is performed during the
2467         second pass of the input files.  As the xxx.rel files  are  read
2468         the code is relocated by substituting the physical addresses for
2469         the referenced symbols and areas and may be output in  Intel  or
2470         Motorola  formats.   The  number of files linked and symbols de-
2471         fined/referenced is limited by the processor space available  to
2472         build the area/symbol lists.  If the -u option is specified then
2473         the listing files  (file.lst)  associated  with  the  relocation
2474         files  (file.rel)  are  scanned  and  used  to create a new file
2475         (file.rst) which has all addresses and data relocated  to  their
2476         final values.
2477
2478 \f
2479
2480         THE LINKER                                              PAGE 2-6
2481         LINKER INPUT FORMAT
2482
2483
2484         2.5  LINKER INPUT FORMAT
2485
2486
2487            The  linkers'  input  object file is an ascii file containing
2488         the information needed by the linker  to  bind  multiple  object
2489         modules into a complete loadable memory image.
2490
2491         The object module contains the following designators:
2492
2493                 [XDQ][HL]
2494                         X       Hexidecimal radix
2495                         D       Decimal radix
2496                         Q       Octal radix
2497
2498                         H       Most significant byte first
2499                         L       Least significant byte first
2500
2501                 H       Header
2502                 M       Module
2503                 A       Area
2504                 S       Symbol
2505                 T       Object code
2506                 R       Relocation information
2507                 P       Paging information
2508
2509
2510         2.5.1  Object Module Format
2511
2512
2513            The  first  line  of  an object module contains the [XDQ][HL]
2514         format specifier (i.e.  XH indicates  a  hexidecimal  file  with
2515         most significant byte first) for the following designators.
2516
2517
2518         2.5.2  Header Line
2519
2520                 H aa areas gg global symbols
2521
2522            The  header  line  specifies  the number of areas(aa) and the
2523         number of global symbols(gg) defined or referenced in  this  ob-
2524         ject module segment.
2525
2526
2527 \f
2528
2529         THE LINKER                                              PAGE 2-7
2530         LINKER INPUT FORMAT
2531
2532
2533         2.5.3  Module Line
2534
2535                 M name
2536
2537            The  module  line  specifies  the module name from which this
2538         header segment was assembled.  The module line will  not  appear
2539         if the .module directive was not used in the source program.
2540
2541
2542         2.5.4  Symbol Line
2543
2544                 S string Defnnnn
2545
2546                         or
2547
2548                 S string Refnnnn
2549
2550            The  symbol line defines (Def) or references (Ref) the symbol
2551         'string' with the value nnnn.  The defined value is relative  to
2552         the  current area base address.  References to constants and ex-
2553         ternal global symbols will always appear before the  first  area
2554         definition.  References to external symbols will have a value of
2555         zero.
2556
2557
2558         2.5.5  Area Line
2559
2560                 A label size ss flags ff
2561
2562            The  area  line  defines the area label, the size (ss) of the
2563         area in bytes, and the area flags (ff).  The area flags  specify
2564         the ABS, REL, CON, OVR, and PAG parameters:
2565
2566                 OVR/CON  (0x04/0x00 i.e.  bit position 2)
2567
2568                 ABS/REL  (0x08/0x00 i.e.  bit position 3)
2569
2570                 PAG      (0x10 i.e.  bit position 4)
2571
2572
2573         2.5.6  T Line
2574
2575                 T xx xx nn nn nn nn nn ...
2576
2577            The  T  line contains the assembled code output by the assem-
2578         bler with xx xx being the offset address from the  current  area
2579         base address and nn being the assembled instructions and data in
2580         byte format.
2581
2582
2583 \f
2584
2585         THE LINKER                                              PAGE 2-8
2586         LINKER INPUT FORMAT
2587
2588
2589         2.5.7  R Line
2590
2591                 R 0 0 nn nn n1 n2 xx xx ...
2592
2593            The R line provides the relocation information to the linker.
2594         The nn nn value is the current area index, i.e.  which area  the
2595         current  values  were  assembled.  Relocation information is en-
2596         coded in groups of 4 bytes:
2597
2598              1.  n1  is  the  relocation mode and object format, for the
2599                  adhoc extension modes refer to asxxxx.h or aslink.h
2600                  1.  bit 0  word(0x00)/byte(0x01)
2601                  2.  bit 1  relocatable area(0x00)/symbol(0x02)
2602                  3.  bit 2  normal(0x00)/PC relative(0x04) relocation
2603                  4.  bit 3  1-byte(0x00)/2-byte(0x08)  object format for
2604                      byte data
2605                  5.  bit 4  signed(0x00)/unsigned(0x10) byte data
2606                  6.  bit 5  normal(0x00)/page '0'(0x20) reference
2607                  7.  bit 6  normal(0x00)/page 'nnn'(0x40) reference
2608                  8.  bit 7  LSB  byte(0x00)/MSB  byte(0x80)  with 2-byte
2609                      mode
2610
2611              2.  n2  is  a byte index into the corresponding (i.e.  pre-
2612                  ceeding) T line data (i.e.  a pointer to the data to be
2613                  updated  by  the  relocation).   The T line data may be
2614                  1-byte or  2-byte  byte  data  format  or  2-byte  word
2615                  format.
2616
2617              3.  xx xx  is the area/symbol index for the area/symbol be-
2618                  ing referenced.  the corresponding area/symbol is found
2619                  in the header area/symbol lists.
2620
2621
2622         The groups of 4 bytes are repeated for each item requiring relo-
2623         cation in the preceeding T line.
2624
2625
2626         2.5.8  P Line
2627
2628                 P 0 0 nn nn n1 n2 xx xx
2629
2630            The  P  line provides the paging information to the linker as
2631         specified by a .setdp directive.  The format of  the  relocation
2632         information is identical to that of the R line.  The correspond-
2633         ing T line has the following information:
2634                 T xx xx aa aa bb bb
2635
2636            Where  aa aa is the area reference number which specifies the
2637         selected page area and bb bb is the base address  of  the  page.
2638         bb bb will require relocation processing if the 'n1 n2 xx xx' is
2639         specified in the P line.  The linker will verify that  the  base
2640 \f
2641
2642         THE LINKER                                              PAGE 2-9
2643         LINKER INPUT FORMAT
2644
2645
2646         address is on a 256 byte boundary and that the page length of an
2647         area defined with the PAG type is not larger than 256 bytes.
2648
2649            The  linker  defaults any direct page references to the first
2650         area defined in the input REL file.  All ASxxxx assemblers  will
2651         specify the _CODE area first, making this the default page area.
2652
2653
2654         2.6  LINKER ERROR MESSAGES
2655
2656
2657            The linker provides detailed error messages allowing the pro-
2658         grammer to quickly find the errant code.   As  the  linker  com-
2659         pletes  pass 1  over  the  input  file(s)  it  reports  any page
2660         boundary or page length errors as follows:
2661
2662         ?ASlink-Warning-Paged Area PAGE0 Boundary Error
2663
2664         and/or
2665
2666         ?ASlink-Warning-Paged Area PAGE0 Length Error
2667
2668         where PAGE0 is the paged area.
2669
2670            During  Pass  two the linker reads the T, R, and P lines per-
2671         forming the necessary relocations and  outputting  the  absolute
2672         code.  Various errors may be reported during this process
2673         The P line processing can produce only one possible error:
2674
2675         ?ASlink-Warning-Page Definition Boundary Error
2676                  file        module      pgarea      pgoffset
2677           PgDef  t6809l      t6809l      PAGE0       0001
2678
2679         The error message specifies the file and module where the .setdp
2680         direct was issued and indicates  the  page  area  and  the  page
2681         offset value determined after relocation.
2682
2683
2684         The R line processing produces various errors:
2685
2686         ?ASlink-Warning-Byte PCR relocation error for symbol  bra2
2687                  file        module      area        offset
2688           Refby  t6809l      t6809l      TEST        00FE
2689           Defin  tconst      tconst      .  .ABS.    0080
2690
2691         ?ASlink-Warning-Unsigned Byte error for symbol  two56
2692                  file        module      area        offset
2693           Refby  t6800l      t6800l      DIRECT      0015
2694           Defin  tconst      tconst      .  .ABS.    0100
2695 \f
2696
2697         THE LINKER                                             PAGE 2-10
2698         LINKER ERROR MESSAGES
2699
2700
2701         ?ASlink-Warning-Page0 relocation error for symbol  ltwo56
2702                  file        module      area        offset
2703           Refby  t6800l      t6800l      DIRECT      000D
2704           Defin  tconst      tconst      DIRECT      0100
2705
2706         ?ASlink-Warning-Page Mode relocation error for symbol  two56
2707                  file        module      area        offset
2708           Refby  t6809l      t6809l      DIRECT      0005
2709           Defin  tconst      tconst      .  .ABS.    0100
2710
2711         ?ASlink-Warning-Page Mode relocation error
2712                  file        module      area        offset
2713           Refby  t           Pagetest    PROGRAM     0006
2714           Defin  t           Pagetest    DIRECT      0100
2715
2716         These  error messages specify the file, module, area, and offset
2717         within the area of the code  referencing  (Refby)  and  defining
2718         (Defin) the symbol.  If the symbol is defined in the same module
2719         as the reference the linker is unable to report the symbol name.
2720         The  assembler  listing file(s) should be examined at the offset
2721         from the specified area to located the offending code.
2722
2723            The errors are:
2724
2725              1.  The  byte PCR error is caused by exceeding the pc rela-
2726                  tive byte branch range.
2727
2728              2.  The Unsigned byte error indicates an indexing value was
2729                  negative or larger than 255.
2730
2731              3.  The  Page0  error is generated if the direct page vari-
2732                  able is not in the page0 range of 0 to 255.
2733
2734              4.  The page mode error is generated if the direct variable
2735                  is not within the current direct page (6809).
2736
2737 \f
2738
2739         THE LINKER                                             Page 2-11
2740         INTEL HEX OUTPUT FORMAT
2741
2742
2743         2.7  INTEL HEX OUTPUT FORMAT
2744
2745         Record Mark Field    -  This  field  signifies  the  start  of a
2746                                 record, and consists of an  ascii  colon
2747                                 (:).
2748
2749         Record Length Field  -  This   field   consists   of  two  ascii
2750                                 characters which indicate the number  of
2751                                 data   bytes   in   this   record.   The
2752                                 characters are the result of  converting
2753                                 the  number  of  bytes  in binary to two
2754                                 ascii characters, high digit first.   An
2755                                 End  of  File  record contains two ascii
2756                                 zeros in this field.
2757
2758         Load Address Field   -  This  field  consists  of the four ascii
2759                                 characters which result from  converting
2760                                 the  the  binary value of the address in
2761                                 which to begin loading this record.  The
2762                                 order is as follows:
2763
2764                                     High digit of high byte of address.
2765                                     Low digit of high byte of address.
2766                                     High digit of low byte of address.
2767                                     Low digit of low byte of address.
2768
2769                                 In an End of File record this field con-
2770                                 sists of either four ascii zeros or  the
2771                                 program  entry  address.   Currently the
2772                                 entry address option is not supported.
2773
2774         Record Type Field    -  This  field  identifies the record type,
2775                                 which is either 0 for data records or  1
2776                                 for  an End of File record.  It consists
2777                                 of two ascii characters, with  the  high
2778                                 digit of the record type first, followed
2779                                 by the low digit of the record type.
2780
2781         Data Field           -  This  field consists of the actual data,
2782                                 converted to two ascii characters,  high
2783                                 digit first.  There are no data bytes in
2784                                 the End of File record.
2785
2786         Checksum Field       -  The  checksum  field is the 8 bit binary
2787                                 sum of the record length field, the load
2788                                 address  field,  the  record type field,
2789                                 and the data field.  This  sum  is  then
2790                                 negated  (2's  complement) and converted
2791                                 to  two  ascii  characters,  high  digit
2792                                 first.
2793 \f
2794
2795         THE LINKER                                             Page 2-12
2796         MOTOROLA S1-S9 OUTPUT FORMAT
2797
2798
2799         2.8  MOTORLA S1-S9 OUTPUT FORMAT
2800
2801         Record Type Field    -  This  field  signifies  the  start  of a
2802                                 record and  identifies  the  the  record
2803                                 type as follows:
2804
2805                                     Ascii S1 - Data Record
2806                                     Ascii S9 - End of File Record
2807
2808         Record Length Field  -  This  field  specifies the record length
2809                                 which includes the  address,  data,  and
2810                                 checksum   fields.   The  8  bit  record
2811                                 length value is converted to  two  ascii
2812                                 characters, high digit first.
2813
2814         Load Address Field   -  This  field  consists  of the four ascii
2815                                 characters which result from  converting
2816                                 the  the  binary value of the address in
2817                                 which to begin loading this record.  The
2818                                 order is as follows:
2819
2820                                     High digit of high byte of address.
2821                                     Low digit of high byte of address.
2822                                     High digit of low byte of address.
2823                                     Low digit of low byte of address.
2824
2825                                 In an End of File record this field con-
2826                                 sists of either four ascii zeros or  the
2827                                 program  entry  address.   Currently the
2828                                 entry address option is not supported.
2829
2830         Data Field           -  This  field consists of the actual data,
2831                                 converted to two ascii characters,  high
2832                                 digit first.  There are no data bytes in
2833                                 the End of File record.
2834
2835         Checksum Field       -  The  checksum  field is the 8 bit binary
2836                                 sum of the record length field, the load
2837                                 address field, and the data field.  This
2838                                 sum is then  complemented  (1's  comple-
2839                                 ment)   and   converted   to  two  ascii
2840                                 characters, high digit first.
2841 \f
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855                                     CHAPTER 3
2856
2857                            BUILDING ASXXXX AND ASLINK
2858
2859
2860
2861
2862            The assemblers and linker have been successfully compiled us-
2863         ing  the  DECUS C  (PDP-11)  compiler  (patch  level   9)   with
2864         RT-11/TSX+,  Eyring  Research  Institute,  Inc.   PDOS (680x0) C
2865         V5.4b compiler, and Symantec C/C++ V6.1/V7.2.
2866
2867            The  device  specific  header  file  (i.e.  m6800.h, m6801.h,
2868         etc.) contains the DECUS C 'BUILD' directives for  generating  a
2869         command  file to compile, assemble, and link the necessary files
2870         to prepare an executable image for a particular assembler.
2871
2872
2873         3.1  BUILDING AN ASSEMBLER
2874
2875
2876            The  building  of  a typical assembler (6809 for example) re-
2877         quires the following files:
2878
2879              1.  M6809.H
2880              2.  M09EXT.C
2881              3.  M09MCH.C
2882              4.  M09ADR.C
2883              5.  M09PST.C
2884              6.  ASXXXX.H
2885              7.  ASMAIN.C
2886              8.  ASLEX.C
2887              9.  ASSYM.C
2888             10.  ASSUBR.C
2889             11.  ASEXPR.C
2890             12.  ASDATA.C
2891             13.  ASLIST.C
2892             14.  ASOUT.C
2893
2894
2895            The  first  five  files are the 6809 processor dependent sec-
2896         tions which contain the following:
2897
2898
2899 \f
2900
2901         BUILDING ASXXXX AND ASLINK                              PAGE 3-2
2902         BUILDING AN ASSEMBLER
2903
2904
2905              1.  m6809.h -  header  file containing the machine specific
2906                  definitions of constants,  variables,  structures,  and
2907                  types
2908
2909              2.  m09ext -  device  description, byte order, and file ex-
2910                  tension information
2911
2912              3.  m09pst -  a  table of the assembler general directives,
2913                  special device directives, and assembler mnemonics with
2914                  associated operation codes
2915
2916              4.  m09mch / m09adr -  machine specific code for processing
2917                  the device mnemonics,  addressing  modes,  and  special
2918                  directives
2919
2920
2921            The  remaining nine files provide the device independent sec-
2922         tions which handle the  details  of  file  input/output,  symbol
2923         table  generation,  program/data areas, expression analysis, and
2924         assembler directive processing.
2925
2926
2927         3.2  BUILDING ASLINK
2928
2929
2930            The building of the linker requires the following files:
2931
2932              1.  ASLINK.H
2933              2.  LKMAIN.C
2934              3.  LKLEX.C
2935              4.  LKAREA.C
2936              5.  LKHEAD.C
2937              6.  LKSYM.C
2938              7.  LKEVAL.C
2939              8.  LKDATA.C
2940              9.  LKLIST.C
2941             10.  LKRLOC.C
2942             11.  LKLIBR.C
2943             12.  LKS19.C
2944             13.  LKIHX.C
2945
2946 \f
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960                                    APPENDIX A
2961
2962                                 AS6800 ASSEMBLER
2963
2964
2965
2966
2967
2968         A.1  6800 REGISTER SET
2969
2970         The following is a list of the 6800 registers used by AS6800:
2971
2972                 a,b     -       8-bit accumulators
2973                 x       -       index register
2974
2975
2976         A.2  6800 INSTRUCTION SET
2977
2978
2979            The following tables list all 6800/6802/6808 mnemonics recog-
2980         nized by the AS6800 assembler.  The designation [] refers  to  a
2981         required addressing mode argument.  The following list specifies
2982         the format for each addressing mode supported by AS6800:
2983
2984                 #data           immediate data
2985                                 byte or word data
2986
2987                 *dir            direct page addressing
2988                                 (see .setdp directive)
2989                                 0 &lt;= dir &lt;= 255
2990
2991                 ,x              register indirect addressing
2992                                 zero offset
2993
2994                 offset,x        register indirect addressing
2995                                 0 &lt;= offset &lt;= 255
2996
2997                 ext             extended addressing
2998
2999                 label           branch label
3000
3001         The  terms  data, dir, offset, ext, and label may all be expres-
3002         sions.
3003
3004 \f
3005
3006         AS6800 ASSEMBLER                                        PAGE A-2
3007         6800 INSTRUCTION SET
3008
3009
3010            Note  that  not all addressing modes are valid with every in-
3011         struction, refer to the 6800 technical data for valid modes.
3012
3013
3014         A.2.1  Inherent Instructions
3015
3016                 aba                     cba
3017                 clc                     cli
3018                 clv                     daa
3019                 des                     dex
3020                 ins                     inx
3021                 nop                     rti
3022                 rts                     sba
3023                 sec                     sei
3024                 sev                     swi
3025                 tab                     tap
3026                 tba                     tpa
3027                 tsx                     txs
3028                 wai
3029
3030                 psha                    pshb
3031                 psh a                   psh b
3032                 pula                    pulb
3033                 pul a                   pul b
3034
3035
3036         A.2.2  Branch Instructions
3037
3038                 bra     label           bhi     label
3039                 bls     label           bcc     label
3040                 bhs     label           bcs     label
3041                 blo     label           bne     label
3042                 beq     label           bvc     label
3043                 bvs     label           bpl     label
3044                 bmi     label           bge     label
3045                 blt     label           bgt     label
3046                 ble     label           bsr     label
3047 \f
3048
3049         AS6800 ASSEMBLER                                        PAGE A-3
3050         6800 INSTRUCTION SET
3051
3052
3053         A.2.3  Single Operand Instructions
3054
3055                 asla                    aslb
3056                 asl a                   asl b
3057                 asl     []
3058
3059                 asra                    asrb
3060                 asr a                   asr b
3061                 asr     []
3062
3063                 clra                    clrb
3064                 clr a                   clr b
3065                 clr     []
3066
3067                 coma                    comb
3068                 com a                   com b
3069                 com     []
3070
3071                 deca                    decb
3072                 dec a                   dec b
3073                 dec     []
3074
3075                 inca                    incb
3076                 inc a                   inc b
3077                 inc     []
3078
3079                 lsla                    lslb
3080                 lsl a                   lsl b
3081                 lsl     []
3082
3083                 lsra                    lsrb
3084                 lsr a                   lsr b
3085                 lsr     []
3086
3087                 nega                    negb
3088                 neg a                   neg b
3089                 neg     []
3090
3091                 rola                    rolb
3092                 rol a                   rol b
3093                 rol     []
3094
3095                 rora                    rorb
3096                 ror a                   ror b
3097                 ror     []
3098
3099                 tsta                    tstb
3100                 tst a                   tst b
3101                 tst     []
3102 \f
3103
3104         AS6800 ASSEMBLER                                        PAGE A-4
3105         6800 INSTRUCTION SET
3106
3107
3108         A.2.4  Double Operand Instructions
3109
3110                 adca    []              adcb    []
3111                 adc a   []              adc b   []
3112
3113                 adda    []              addb    []
3114                 add a   []              add b   []
3115
3116                 anda    []              andb    []
3117                 and a   []              and b   []
3118
3119                 bita    []              bitb    []
3120                 bit a   []              bit b   []
3121
3122                 cmpa    []              cmpb    []
3123                 cmp a   []              cmp b   []
3124
3125                 eora    []              eorb    []
3126                 eor a   []              eor b   []
3127
3128                 ldaa    []              ldab    []
3129                 lda a   []              lda b   []
3130
3131                 oraa    []              orab    []
3132                 ora a   []              ora b   []
3133
3134                 sbca    []              sbcb    []
3135                 sbc a   []              sbc b   []
3136
3137                 staa    []              stab    []
3138                 sta a   []              sta b   []
3139
3140                 suba    []              subb    []
3141                 sub a   []              sub b   []
3142
3143
3144         A.2.5  Jump and Jump to Subroutine Instructions
3145
3146                 jmp     []              jsr     []
3147
3148
3149 \f
3150
3151         AS6800 ASSEMBLER                                        PAGE A-5
3152         6800 INSTRUCTION SET
3153
3154
3155         A.2.6  Long Register Instructions
3156
3157                 cpx     []
3158                 lds     []              sts     []
3159                 ldx     []              stx     []
3160 \f
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174                                    APPENDIX B
3175
3176                                 AS6801 ASSEMBLER
3177
3178
3179
3180
3181
3182         B.1  .hd6303 DIRECTIVE
3183
3184         Format:
3185
3186                 .hd6303
3187
3188         The  .hd6303 directive enables processing of the HD6303 specific
3189         mnemonics not included in  the  6801  instruction  set.   HD6303
3190         mnemonics  encountered  without  the  .hd6303  directive will be
3191         flagged with an 'o' error.
3192
3193
3194         B.2  6801 REGISTER SET
3195
3196         The following is a list of the 6801 registers used by AS6801:
3197
3198                 a,b     -       8-bit accumulators
3199                 d       -       16-bit accumulator &lt;a:b&gt;
3200                 x       -       index register
3201
3202
3203         B.3  6801 INSTRUCTION SET
3204
3205
3206            The  following tables list all 6801/6303 mnemonics recognized
3207         by the AS6801 assembler.  The designation []  refers  to  a  re-
3208         quired  addressing  mode argument.  The following list specifies
3209         the format for each addressing mode supported by AS6801:
3210
3211                 #data           immediate data
3212                                 byte or word data
3213
3214                 *dir            direct page addressing
3215                                 (see .setdp directive)
3216                                 0 &lt;= dir &lt;= 255
3217
3218 \f
3219
3220         AS6801 ASSEMBLER                                        PAGE B-2
3221         6801 INSTRUCTION SET
3222
3223
3224                 ,x              register indirect addressing
3225                                 zero offset
3226
3227                 offset,x        register indirect addressing
3228                                 0 &lt;= offset &lt;= 255
3229
3230                 ext             extended addressing
3231
3232                 label           branch label
3233
3234         The  terms  data, dir, offset, ext, and label may all be expres-
3235         sions.
3236
3237            Note  that  not all addressing modes are valid with every in-
3238         struction, refer to  the  6801/6303  technical  data  for  valid
3239         modes.
3240
3241
3242         B.3.1  Inherent Instructions
3243
3244                 aba             abx
3245                 cba             clc
3246                 cli             clv
3247                 daa             des
3248                 dex             ins
3249                 inx             mul
3250                 nop             rti
3251                 rts             sba
3252                 sec             sei
3253                 sev             swi
3254                 tab             tap
3255                 tba             tpa
3256                 tsx             txs
3257                 wai
3258
3259
3260         B.3.2  Branch Instructions
3261
3262                 bra     label           brn     label
3263                 bhi     label           bls     label
3264                 bcc     label           bhs     label
3265                 bcs     label           blo     label
3266                 bne     label           beq     label
3267                 bvc     label           bvs     label
3268                 bpl     label           bmi     label
3269                 bge     label           blt     label
3270                 bgt     label           ble     label
3271                 bsr     label
3272 \f
3273
3274         AS6801 ASSEMBLER                                        PAGE B-3
3275         6801 INSTRUCTION SET
3276
3277
3278         B.3.3  Single Operand Instructions
3279
3280                 asla            aslb            asld
3281                 asl a           asl b           asl d
3282                 asl     []
3283
3284                 asra            asrb
3285                 asr a           asr b
3286                 asr     []
3287
3288                 clra            clrb
3289                 clr a           clr b
3290                 clr     []
3291
3292                 coma            comb
3293                 com a           com b
3294                 com     []
3295
3296                 deca            decb
3297                 dec a           dec b
3298                 dec     []
3299
3300                 eora            eorb
3301                 eor a           eor b
3302                 eor     []
3303
3304                 inca            incb
3305                 inc a           inc b
3306                 inc     []
3307
3308                 lsla            lslb            lsld
3309                 lsl a           lsl b           lsl d
3310                 lsl     []
3311
3312                 lsra            lsrb            lsrd
3313                 lsr a           lsr b           lsr d
3314                 lsr     []
3315
3316                 nega            negb
3317                 neg a           neg b
3318                 neg     []
3319
3320                 psha            pshb            pshx
3321                 psh a           psh b           psh x
3322
3323                 pula            pulb            pulx
3324                 pul a           pul b           pul x
3325
3326                 rola            rolb
3327                 rol a           rol b
3328                 rol     []
3329
3330 \f
3331
3332         AS6801 ASSEMBLER                                        PAGE B-4
3333         6801 INSTRUCTION SET
3334
3335
3336                 rora            rorb
3337                 ror a           ror b
3338                 ror     []
3339
3340                 tsta            tstb
3341                 tst a           tst b
3342                 tst     []
3343
3344
3345         B.3.4  Double Operand Instructions
3346
3347                 adca    []      adcb    []
3348                 adc a   []      adc b   []
3349
3350                 adda    []      addb    []      addd    []
3351                 add a   []      add b   []      add d   []
3352
3353                 anda    []      andb    []
3354                 and a   []      and b   []
3355
3356                 bita    []      bitb    []
3357                 bit a   []      bit b   []
3358
3359                 cmpa    []      cmpb    []
3360                 cmp a   []      cmp b   []
3361
3362                 ldaa    []      ldab    []
3363                 lda a   []      lda b   []
3364
3365                 oraa    []      orab    []
3366                 ora a   []      ora b   []
3367
3368                 sbca    []      sbcb    []
3369                 sbc a   []      sbc b   []
3370
3371                 staa    []      stab    []
3372                 sta a   []      sta b   []
3373
3374                 suba    []      subb    []      subd    []
3375                 sub a   []      sub b   []      sub d   []
3376
3377
3378 \f
3379
3380         AS6801 ASSEMBLER                                        PAGE B-5
3381         6801 INSTRUCTION SET
3382
3383
3384         B.3.5  Jump and Jump to Subroutine Instructions
3385
3386                 jmp     []      jsr     []
3387
3388
3389         B.3.6  Long Register Instructions
3390
3391                 cpx     []      ldd     []
3392                 lds     []      ldx     []
3393                 std     []      sts     []
3394                 stx     []
3395
3396
3397         B.3.7  6303 Specific Instructions
3398
3399                 aim     #data, []       eim     #data, []
3400                 oim     #data, []       tim     #data, []
3401
3402                 xgdx            slp
3403 \f
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417                                    APPENDIX C
3418
3419                                 AS6804 ASSEMBLER
3420
3421
3422
3423
3424            Requires the .setdp directive to specify the ram area.
3425
3426
3427         C.1  6804 REGISTER SET
3428
3429         The following is a list of the 6804 registers used by AS6804:
3430
3431                 x,y     -       index registers
3432
3433
3434         C.2  6804 INSTRUCTION SET
3435
3436
3437            The  following  tables  list all 6804 mnemonics recognized by
3438         the AS6804 assembler.  The designation [] refers to  a  required
3439         addressing  mode  argument.   The  following  list specifies the
3440         format for each addressing mode supported by AS6804:
3441
3442                 #data           immediate data
3443                                 byte or word data
3444
3445                 ,x              register indirect addressing
3446
3447                 dir             direct addressing
3448                                 (see .setdp directive)
3449                                 0 &lt;= dir &lt;= 255
3450
3451                 ext             extended addressing
3452
3453                 label           branch label
3454
3455         The  terms data, dir, and ext may be expressions.  The label for
3456         the short branchs beq, bne, bcc, and bcs must not be external.
3457
3458            Note  that  not all addressing modes are valid with every in-
3459         struction, refer to the 6804 technical data for valid modes.
3460 \f
3461
3462         AS6804 ASSEMBLER                                        PAGE C-2
3463         6804 INSTRUCTION SET
3464
3465
3466         C.2.1  Inherent Instructions
3467
3468                 coma            decx
3469                 decy            incx
3470                 incy            rola
3471                 rti             rts
3472                 stop            tax
3473                 tay             txa
3474                 tya             wait
3475
3476
3477         C.2.2  Branch Instructions
3478
3479                 bne     label           beq     label
3480                 bcc     label           bcs     label
3481
3482
3483         C.2.3  Single Operand Instructions
3484
3485                 add     []
3486                 and     []
3487                 cmp     []
3488                 dec     []
3489                 inc     []
3490                 lda     []
3491                 sta     []
3492                 sub     []
3493
3494
3495         C.2.4  Jump and Jump to Subroutine Instructions
3496
3497                 jsr     []
3498                 jmp     []
3499
3500
3501         C.2.5  Bit Test Instructions
3502
3503                 brclr   #data,[],label
3504                 brset   #data,[],label
3505
3506                 bclr    #label,[]
3507                 bset    #label,[]
3508
3509
3510 \f
3511
3512         AS6804 ASSEMBLER                                        PAGE C-3
3513         6804 INSTRUCTION SET
3514
3515
3516         C.2.6  Load Immediate data Instruction
3517
3518                 mvi     [],#data
3519
3520
3521         C.2.7  6804 Derived Instructions
3522
3523                 asla
3524                 bam     label
3525                 bap     label
3526                 bxmi    label
3527                 bxpl    label
3528                 bymi    label
3529                 bypl    label
3530                 clra
3531                 clrx
3532                 clry
3533                 deca
3534                 decx
3535                 decy
3536                 inca
3537                 incx
3538                 incy
3539                 ldxi    #data
3540                 ldyi    #data
3541                 nop
3542                 tax
3543                 tay
3544                 txa
3545                 tya
3546 \f
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560                                    APPENDIX D
3561
3562                                 AS6805 ASSEMBLER
3563
3564
3565
3566
3567
3568         D.1  6805 REGISTER SET
3569
3570         The following is a list of the 6805 registers used by AS6805:
3571
3572                 a       -       8-bit accumulator
3573                 x       -       index register
3574
3575
3576         D.2  6805 INSTRUCTION SET
3577
3578
3579            The  following  tables  list all 6805 mnemonics recognized by
3580         the AS6805 assembler.  The designation [] refers to  a  required
3581         addressing  mode  argument.   The  following  list specifies the
3582         format for each addressing mode supported by AS6805:
3583
3584                 #data           immediate data
3585                                 byte or word data
3586
3587                 *dir            direct page addressing
3588                                 (see .setdp directive)
3589                                 0 &lt;= dir &lt;= 255
3590
3591                 ,x              register indirect addressing
3592                                 zero offset
3593
3594                 offset,x        register indirect addressing
3595                                   0 &lt;= offset &lt;= 255   --- byte mode
3596                                 256 &lt;= offset &lt;= 65535 --- word mode
3597                                 (an externally defined offset uses the
3598                                  word mode)
3599
3600                 ext             extended addressing
3601
3602                 label           branch label
3603
3604 \f
3605
3606         AS6805 ASSEMBLER                                        PAGE D-2
3607         6805 INSTRUCTION SET
3608
3609
3610         The terms data, dir, offset, and ext may all be expressions.
3611
3612            Note  that  not all addressing modes are valid with every in-
3613         struction, refer to the 6805 technical data for valid modes.
3614
3615
3616         D.2.1  Control Instructions
3617
3618                 clc             cli
3619                 nop             rsp
3620                 rti             rts
3621                 sec             sei
3622                 stop            swi
3623                 tax             txa
3624                 wait
3625
3626
3627         D.2.2  Bit Manipulation Instructions
3628
3629                 brset   #data,*dir,label
3630                 brclr   #data,*dir,label
3631
3632                 bset    #data,*dir
3633                 bclr    #data,*dir
3634
3635
3636         D.2.3  Branch Instructions
3637
3638                 bra     label           brn     label
3639                 bhi     label           bls     label
3640                 bcc     label           bcs     label
3641                 bne     label           beq     label
3642                 bhcc    label           bhcs    label
3643                 bpl     label           bmi     label
3644                 bmc     label           bms     label
3645                 bil     label           bih     label
3646                 bsr     label
3647 \f
3648
3649         AS6805 ASSEMBLER                                        PAGE D-3
3650         6805 INSTRUCTION SET
3651
3652
3653         D.2.4  Read-Modify-Write Instructions
3654
3655                 nega            negx
3656                 neg     []
3657
3658                 coma            comx
3659                 com     []
3660
3661                 lsra            lsrx
3662                 lsr     []
3663
3664                 rora            rorx
3665                 ror     []
3666
3667                 asra            asrx
3668                 asr     []
3669
3670                 lsla            lslx
3671                 lsl     []
3672
3673                 rola            rolx
3674                 rol     []
3675
3676                 deca            decx
3677                 dec     []
3678
3679                 inca            incx
3680                 inc     []
3681
3682                 tsta            tstx
3683                 tst     []
3684
3685                 clra            clrx
3686                 clr     []
3687
3688
3689         D.2.5  Register\Memory Instructions
3690
3691                 sub     []              cmp     []
3692                 sbc     []              cpx     []
3693                 and     []              bit     []
3694                 lda     []              sta     []
3695                 eor     []              adc     []
3696                 ora     []              add     []
3697                 ldx     []              stx     []
3698 \f
3699
3700         AS6805 ASSEMBLER                                        PAGE D-4
3701         6805 INSTRUCTION SET
3702
3703
3704         D.2.6  Jump and Jump to Subroutine Instructions
3705
3706                 jmp     []              jsr     []
3707 \f
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721                                    APPENDIX E
3722
3723                                 AS6808 ASSEMBLER
3724
3725
3726
3727
3728
3729         E.1  68HC08 REGISTER SET
3730
3731         The  following  is  a  list  of  the  68HC08  registers  used by
3732         AS68HC08:
3733
3734                 a       -       8-bit accumulator
3735                 x       -       index register  &lt;H:X&gt;
3736                 s       -       stack pointer
3737
3738
3739         E.2  68HC08 INSTRUCTION SET
3740
3741
3742            The  following tables list all 68HC08 mnemonics recognized by
3743         the AS6808 assembler.  The designation [] refers to  a  required
3744         addressing  mode  argument.   The  following  list specifies the
3745         format for each addressing mode supported by AS6808:
3746
3747                 #data           immediate data
3748                                 byte or word data
3749
3750                 *dir            direct page addressing
3751                                 (see .setdp directive)
3752                                 0 &lt;= dir &lt;= 255
3753
3754                 ,x              register indexed addressing
3755                                 zero offset
3756
3757                 offset,x        register indexed addressing
3758                                   0 &lt;= offset &lt;= 255   --- byte mode
3759                                 256 &lt;= offset &lt;= 65535 --- word mode
3760                                 (an externally defined offset uses the
3761                                  word mode)
3762
3763                 ,x+             register indexed addressing
3764                                 zero offset with post increment
3765 \f
3766
3767         AS6808 ASSEMBLER                                        PAGE E-2
3768         68HC08 INSTRUCTION SET
3769
3770
3771
3772                 offset,x+       register indexed addressing
3773                                 unsigned byte offset with post increment
3774
3775                 offset,s        stack pointer indexed addressing
3776                                   0 &lt;= offset &lt;= 255   --- byte mode
3777                                 256 &lt;= offset &lt;= 65535 --- word mode
3778                                 (an externally defined offset uses the
3779                                  word mode)
3780
3781                 ext             extended addressing
3782
3783                 label           branch label
3784
3785         The terms data, dir, offset, and ext may all be expressions.
3786
3787            Note  that  not all addressing modes are valid with every in-
3788         struction, refer to the 68HC08 technical data for valid modes.
3789
3790
3791         E.2.1  Control Instructions
3792
3793                 clc             cli             daa             div
3794                 mul             nop             nsa             psha
3795                 pshh            pshx            pula            pulh
3796                 pulx            rsp             rti             rts
3797                 sec             sei             stop            swi
3798                 tap             tax             tpa             tsx
3799                 txa             txs             wait
3800
3801
3802         E.2.2  Bit Manipulation Instructions
3803
3804                 brset   #data,*dir,label
3805                 brclr   #data,*dir,label
3806
3807                 bset    #data,*dir
3808                 bclr    #data,*dir
3809 \f
3810
3811         AS6808 ASSEMBLER                                        PAGE E-3
3812         68HC08 INSTRUCTION SET
3813
3814
3815         E.2.3  Branch Instructions
3816
3817                 bra     label           brn     label
3818                 bhi     label           bls     label
3819                 bcc     label           bcs     label
3820                 bne     label           beq     label
3821                 bhcc    label           bhcs    label
3822                 bpl     label           bmi     label
3823                 bmc     label           bms     label
3824                 bil     label           bih     label
3825                 bsr     label           bge     label
3826                 blt     label           bgt     label
3827                 ble     label
3828
3829
3830         E.2.4  Complex Branch Instructions
3831
3832                 cbeqa   [],label
3833                 cbeqx   [],label
3834                 cbeq    [],label
3835                 dbnza   label
3836                 dbnzx   label
3837                 dbnz    [],label
3838 \f
3839
3840         AS6808 ASSEMBLER                                        PAGE E-4
3841         68HC08 INSTRUCTION SET
3842
3843
3844         E.2.5  Read-Modify-Write Instructions
3845
3846                 nega                    negx
3847                 neg     []
3848
3849                 coma                    comx
3850                 com     []
3851
3852                 lsra                    lsrx
3853                 lsr     []
3854
3855                 rora                    rorx
3856                 ror     []
3857
3858                 asra                    asrx
3859                 asr     []
3860
3861                 asla                    aslx
3862                 asl     []
3863
3864                 lsla                    lslx
3865                 lsl     []
3866
3867                 rola                    rolx
3868                 rol     []
3869
3870                 deca                    decx
3871                 dec     []
3872
3873                 inca                    incx
3874                 inc     []
3875
3876                 tsta                    tstx
3877                 tst     []
3878
3879                 clra                    clrx
3880                 clr     []              clrh
3881
3882                 aix     #data
3883
3884                 ais     #data
3885 \f
3886
3887         AS6808 ASSEMBLER                                        PAGE E-5
3888         68HC08 INSTRUCTION SET
3889
3890
3891         E.2.6  Register\Memory Instructions
3892
3893                 sub     []              cmp     []
3894                 sbc     []              cpx     []
3895                 and     []              bit     []
3896                 lda     []              sta     []
3897                 eor     []              adc     []
3898                 ora     []              add     []
3899                 ldx     []              stx     []
3900
3901
3902         E.2.7  Double Operand Move Instruction
3903
3904                 mov     [],[]
3905
3906
3907         E.2.8  16-Bit &lt;H:X&gt; Index Register Instructions
3908
3909                 cphx    []
3910                 ldhx    []
3911                 sthx    []
3912
3913
3914         E.2.9  Jump and Jump to Subroutine Instructions
3915
3916                 jmp     []              jsr     []
3917 \f
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931                                    APPENDIX F
3932
3933                                 AS6809 ASSEMBLER
3934
3935
3936
3937
3938
3939         F.1  6809 REGISTER SET
3940
3941         The following is a list of the 6809 registers used by AS6809:
3942
3943                 a,b     -       8-bit accumulators
3944                 d       -       16-bit accumulator &lt;a:b&gt;
3945                 x,y     -       index registers
3946                 s,u     -       stack pointers
3947                 pc      -       program counter
3948                 cc      -       condition code
3949                 dp      -       direct page
3950
3951
3952         F.2  6809 INSTRUCTION SET
3953
3954
3955            The  following  tables  list all 6809 mnemonics recognized by
3956         the AS6809 assembler.  The designation [] refers to  a  required
3957         addressing  mode  argument.   The  following  list specifies the
3958         format for each addressing mode supported by AS6809:
3959
3960                 #data           immediate data
3961                                 byte or word data
3962
3963                 *dir            direct page addressing
3964                                 (see .setdp directive)
3965                                 0 &lt;= dir &lt;= 255
3966
3967                 label           branch label
3968
3969                 r,r1,r2         registers
3970                                 cc,a,b,d,dp,x,y,s,u,pc
3971
3972                 ,-x     ,--x    register indexed
3973                                 autodecrement
3974
3975 \f
3976
3977         AS6809 ASSEMBLER                                        PAGE F-2
3978         6809 INSTRUCTION SET
3979
3980
3981                 ,x+     ,x++    register indexed
3982                                 autoincrement
3983
3984                 ,x              register indexed addressing
3985                                 zero offset
3986
3987                 offset,x        register indexed addressing
3988                                    -16 &lt;= offset &lt;= 15    ---  5-bit
3989                                   -128 &lt;= offset &lt;= -17   ---  8-bit
3990                                     16 &lt;= offset &lt;= 127   ---  8-bit
3991                                 -32768 &lt;= offset &lt;= -129  --- 16-bit
3992                                    128 &lt;= offset &lt;= 32767 --- 16-bit
3993                                 (external definition of offset
3994                                  uses 16-bit mode)
3995
3996                 a,x             accumulator offset indexed addressing
3997
3998                 ext             extended addressing
3999
4000                 ext,pc          pc addressing ( pc &lt;- pc + ext )
4001
4002                 ext,pcr         pc relative addressing
4003
4004                 [,--x]          register indexed indirect
4005                                 autodecrement
4006
4007                 [,x++]          register indexed indirect
4008                                 autoincrement
4009
4010                 [,x]            register indexed indirect addressing
4011                                 zero offset
4012
4013                 [offset,x]      register indexed indirect addressing
4014                                   -128 &lt;= offset &lt;= 127   ---  8-bit
4015                                 -32768 &lt;= offset &lt;= -129  --- 16-bit
4016                                    128 &lt;= offset &lt;= 32767 --- 16-bit
4017                                 (external definition of offset
4018                                  uses 16-bit mode)
4019
4020                 [a,x]           accumulator offset indexed
4021                                 indirect addressing
4022
4023                 [ext]           extended indirect addressing
4024
4025                 [ext,pc]        pc indirect addressing
4026                                 ( [pc &lt;- pc + ext] )
4027
4028                 [ext,pcr]       pc relative indirect addressing
4029
4030         The  terms  data, dir, label, offset, and ext may all be expres-
4031         sions.
4032
4033 \f
4034
4035         AS6809 ASSEMBLER                                        PAGE F-3
4036         6809 INSTRUCTION SET
4037
4038
4039            Note  that  not all addressing modes are valid with every in-
4040         struction, refer to the 6809 technical data for valid modes.
4041
4042
4043         F.2.1  Inherent Instructions
4044
4045                 abx             daa
4046                 mul             nop
4047                 rti             rts
4048                 sex             swi
4049                 swi1            swi2
4050                 swi3            sync
4051
4052
4053         F.2.2  Short Branch Instructions
4054
4055                 bcc     label           bcs     label
4056                 beq     label           bge     label
4057                 bgt     label           bhi     label
4058                 bhis    label           bhs     label
4059                 ble     label           blo     label
4060                 blos    label           bls     label
4061                 blt     label           bmi     label
4062                 bne     label           bpl     label
4063                 bra     label           brn     label
4064                 bvc     label           bvs     label
4065                 bsr     label
4066
4067
4068         F.2.3  Long Branch Instructions
4069
4070                 lbcc    label           lbcs    label
4071                 lbeq    label           lbge    label
4072                 lbgt    label           lbhi    label
4073                 lbhis   label           lbhs    label
4074                 lble    label           lblo    label
4075                 lblos   label           lbls    label
4076                 lblt    label           lbmi    label
4077                 lbne    label           lbpl    label
4078                 lbra    label           lbrn    label
4079                 lbvc    label           lbvs    label
4080                 lbsr    label
4081 \f
4082
4083         AS6809 ASSEMBLER                                        PAGE F-4
4084         6809 INSTRUCTION SET
4085
4086
4087         F.2.4  Single Operand Instructions
4088
4089                 asla            aslb
4090                 asl     []
4091
4092                 asra            asrb
4093                 asr     []
4094
4095                 clra            clrb
4096                 clr     []
4097
4098                 coma            comb
4099                 com     []
4100
4101                 deca            decb
4102                 dec     []
4103
4104                 inca            incb
4105                 inc     []
4106
4107                 lsla            lslb
4108                 lsl     []
4109
4110                 lsra            lsrb
4111                 lsr     []
4112
4113                 nega            negb
4114                 neg     []
4115
4116                 rola            rolb
4117                 rol     []
4118
4119                 rora            rorb
4120                 ror     []
4121
4122                 tsta            tstb
4123                 tst     []
4124 \f
4125
4126         AS6809 ASSEMBLER                                        PAGE F-5
4127         6809 INSTRUCTION SET
4128
4129
4130         F.2.5  Double Operand Instructions
4131
4132                 adca    []              adcb    []
4133
4134                 adda    []              addb    []
4135
4136                 anda    []              andb    []
4137
4138                 bita    []              bitb    []
4139
4140                 cmpa    []              cmpb    []
4141
4142                 eora    []              eorb    []
4143
4144                 lda     []              ldb     []
4145
4146                 ora     []              orb     []
4147
4148                 sbca    []              sbcb    []
4149
4150                 sta     []              stb     []
4151
4152                 suba    []              subb    []
4153
4154
4155         F.2.6  D-register Instructions
4156
4157                 addd    []              subd    []
4158                 cmpd    []              ldd     []
4159                 std     []
4160
4161
4162         F.2.7  Index/Stack Register Instructions
4163
4164                 cmps    []              cmpu    []
4165                 cmpx    []              cmpy    []
4166
4167                 lds     []              ldu     []
4168                 ldx     []              ldy     []
4169
4170                 leas    []              leau    []
4171                 leax    []              leay    []
4172
4173                 sts     []              stu     []
4174                 stx     []              sty     []
4175
4176                 pshs    r               pshu    r
4177                 puls    r               pulu    r
4178 \f
4179
4180         AS6809 ASSEMBLER                                        PAGE F-6
4181         6809 INSTRUCTION SET
4182
4183
4184         F.2.8  Jump and Jump to Subroutine Instructions
4185
4186                 jmp     []              jsr     []
4187
4188
4189         F.2.9  Register - Register Instructions
4190
4191                 exg     r1,r2           tfr     r1,r2
4192
4193
4194         F.2.10  Condition Code Register Instructions
4195
4196                 andcc   #data           orcc    #data
4197                 cwai    #data
4198
4199
4200         F.2.11  6800 Compatibility Instructions
4201
4202                 aba             cba
4203                 clc             cli
4204                 clv             des
4205                 dex             ins
4206                 inx
4207                 ldaa    []      ldab    []
4208                 oraa    []      orab    []
4209                 psha            pshb
4210                 pula            pulb
4211                 sba             sec
4212                 sei             sev
4213                 staa    []      stab    []
4214                 tab             tap
4215                 tba             tpa
4216                 tsx             txs
4217                 wai
4218 \f
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232                                    APPENDIX G
4233
4234                                 AS6811 ASSEMBLER
4235
4236
4237
4238
4239
4240         G.1  68HC11 REGISTER SET
4241
4242         The following is a list of the 68HC11 registers used by AS6811:
4243
4244                 a,b     -       8-bit accumulators
4245                 d       -       16-bit accumulator &lt;a:b&gt;
4246                 x,y     -       index registers
4247
4248
4249         G.2  68HC11 INSTRUCTION SET
4250
4251
4252            The  following tables list all 68HC11 mnemonics recognized by
4253         the AS6811 assembler.  The designation [] refers to  a  required
4254         addressing  mode  argument.   The  following  list specifies the
4255         format for each addressing mode supported by AS6811:
4256
4257                 #data           immediate data
4258                                 byte or word data
4259
4260                 *dir            direct page addressing
4261                                 (see .setdp directive)
4262                                 0 &lt;= dir &lt;= 255
4263
4264                 ,x              register indirect addressing
4265                                 zero offset
4266
4267                 offset,x        register indirect addressing
4268                                 0 &lt;= offset &lt;= 255
4269
4270                 ext             extended addressing
4271
4272                 label           branch label
4273
4274         The terms data, dir, offset, and ext may all be expressions.
4275
4276 \f
4277
4278         AS6811 ASSEMBLER                                        PAGE G-2
4279         68HC11 INSTRUCTION SET
4280
4281
4282            Note  that  not all addressing modes are valid with every in-
4283         struction, refer to the 68HC11 technical data for valid modes.
4284
4285
4286         G.2.1  Inherent Instructions
4287
4288                 aba             abx
4289                 aby             cba
4290                 clc             cli
4291                 clv             daa
4292                 des             dex
4293                 dey             fdiv
4294                 idiv            ins
4295                 inx             iny
4296                 mul             nop
4297                 rti             rts
4298                 sba             sec
4299                 sei             sev
4300                 stop            swi
4301                 tab             tap
4302                 tba             tpa
4303                 tsx             txs
4304                 wai             xgdx
4305                 xgdy
4306
4307                 psha            pshb
4308                 psh a           psh b
4309                 pshx            pshy
4310                 psh x           psh y
4311
4312                 pula            pulb
4313                 pul a           pul b
4314                 pulx            puly
4315                 pul x           pul y
4316
4317
4318         G.2.2  Branch Instructions
4319
4320                 bra     label           brn     label
4321                 bhi     label           bls     label
4322                 bcc     label           bhs     label
4323                 bcs     label           blo     label
4324                 bne     label           beq     label
4325                 bvc     label           bvs     label
4326                 bpl     label           bmi     label
4327                 bge     label           blt     label
4328                 bgt     label           ble     label
4329                 bsr     label
4330 \f
4331
4332         AS6811 ASSEMBLER                                        PAGE G-3
4333         68HC11 INSTRUCTION SET
4334
4335
4336         G.2.3  Single Operand Instructions
4337
4338                 asla            aslb            asld
4339                 asl a           asl b           asl d
4340                 asl     []
4341
4342                 asra            asrb
4343                 asr a           asr b
4344                 asr     []
4345
4346                 clra            clrb
4347                 clr a           clr b
4348                 clr     label
4349
4350                 coma            comb
4351                 com a           com b
4352                 com     []
4353
4354                 deca            decb
4355                 dec a           dec b
4356                 dec     []
4357
4358                 inca            incb
4359                 inc a           inc b
4360                 inc     []
4361
4362                 lsla            lslb            lsld
4363                 lsl a           lsl b           lsl d
4364                 lsl     []
4365
4366                 lsra            lsrb            lsrd
4367                 lsr a           lsr b           lsr d
4368                 lsr     []
4369
4370                 nega            negb
4371                 neg a           neg b
4372                 neg     []
4373
4374                 rola            rolb
4375                 rol a           rol b
4376                 rol     []
4377
4378                 rora            rorb
4379                 ror a           ror b
4380                 ror     []
4381
4382                 tsta            tstb
4383                 tst a           tst b
4384                 tst     []
4385 \f
4386
4387         AS6811 ASSEMBLER                                        PAGE G-4
4388         68HC11 INSTRUCTION SET
4389
4390
4391         G.2.4  Double Operand Instructions
4392
4393                 adca    []              adcb    []
4394                 adc a   []              adc b   []
4395
4396                 adda    []      addb    []      addd    []
4397                 add a   []      add b   []      add d   []
4398
4399                 anda    []              andb    []
4400                 and a   []              and b   []
4401
4402                 bita    []              bitb    []
4403                 bit a   []              bit b   []
4404
4405                 cmpa    []              cmpb    []
4406                 cmp a   []              cmp b   []
4407
4408                 eora    []              eorb    []
4409                 eor a   []              eor b   []
4410
4411                 ldaa    []              ldab    []
4412                 lda a   []              lda b   []
4413
4414                 oraa    []              orab    []
4415                 ora a   []              ora b   []
4416
4417                 sbca    []              sbcb    []
4418                 sbc a   []              sbc b   []
4419
4420                 staa    []              stab    []
4421                 sta a   []              sta b   []
4422
4423                 suba    []      subb    []      subd    []
4424                 sub a   []      sub b   []      sub d   []
4425
4426
4427         G.2.5  Bit Manupulation Instructions
4428
4429                 bclr    [],#data
4430                 bset    [],#data
4431
4432                 brclr   [],#data,label
4433                 brset   [],#data,label
4434
4435
4436 \f
4437
4438         AS6811 ASSEMBLER                                        PAGE G-5
4439         68HC11 INSTRUCTION SET
4440
4441
4442         G.2.6  Jump and Jump to Subroutine Instructions
4443
4444                 jmp     []              jsr     []
4445
4446
4447         G.2.7  Long Register Instructions
4448
4449                 cpx     []              cpy     []
4450
4451                 ldd     []              lds     []
4452                 ldx     []              ldy     []
4453
4454                 std     []              sts     []
4455                 stx     []              sty     []
4456 \f
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470                                    APPENDIX H
4471
4472                                 AS6812 ASSEMBLER
4473
4474
4475
4476
4477
4478         H.1  68HC12 REGISTER SET
4479
4480         The following is a list of the 68HC12 registers used by AS6812:
4481
4482                 a,b     -       8-bit accumulators
4483                 d       -       16-bit accumulator &lt;a:b&gt;
4484                 x,y     -       index registers
4485                 sp,s    -       stack pointer
4486                 pc      -       program counter
4487                 ccr,cc  -       condition code register
4488
4489
4490         H.2  68HC12 INSTRUCTION SET
4491
4492
4493            The  following tables list all 68HC12 mnemonics recognized by
4494         the AS6812 assembler.  The designation [] refers to  a  required
4495         addressing  mode  argument.   The  following  list specifies the
4496         format for each addressing mode supported by AS6812:
4497
4498                 #data           immediate data
4499                                 byte or word data
4500
4501                 ext             extended addressing
4502
4503                 pg              memory page number
4504
4505                 *dir            direct page addressing
4506                                 (see .setdp directive)
4507                                 0 &lt;= dir &lt;= 255
4508
4509                 label           branch label
4510
4511                 r,r1,r2         registers
4512                                 ccr,a,b,d,x,y,sp,pc
4513
4514 \f
4515
4516         AS6812 ASSEMBLER                                        PAGE H-2
4517         68HC12 INSTRUCTION SET
4518
4519
4520                 -x      x-      register indexed, pre or
4521                 ,-x     ,x-     post autodecrement by 1
4522
4523                 n,-x    n,x-    register indexed, pre or
4524                                 post autodecrement by 1 - 8
4525
4526                 +x      x+      register indexed, pre or
4527                 ,+x     ,x+     post autoincrement by 1
4528
4529                 n,+x    n,x+    register indexed, pre or
4530                                 post autoincrement by 1 - 8
4531
4532                 offset,x        register indexed addressing
4533                                    -16 &lt;= offset &lt;= 15    ---  5-bit
4534                                   -256 &lt;= offset &lt;= -17   ---  9-bit
4535                                     16 &lt;= offset &lt;= 255   ---  9-bit
4536                                 -32768 &lt;= offset &lt;= -257  --- 16-bit
4537                                    256 &lt;= offset &lt;= 32767 --- 16-bit
4538                                 (external definition of offset
4539                                  uses 16-bit mode)
4540
4541                 [offset,x]      register indexed indirect addressing
4542                                 -32768 &lt;= offset &lt;= 32767 --- 16-bit
4543
4544                 [,x]            register indexed indirect addressing
4545                                 zero offset
4546
4547                 a,x             accumulator offset indexed addressing
4548
4549                 [d,x]           d accumulator offset indexed
4550                                 indirect addressing
4551
4552         The  terms  data, dir, label, offset, and ext may all be expres-
4553         sions.
4554
4555            Note  that  not all addressing modes are valid with every in-
4556         struction, refer to the 68HC12 technical data for valid modes.
4557 \f
4558
4559         AS6812 ASSEMBLER                                        PAGE H-3
4560         68HC12 INSTRUCTION SET
4561
4562
4563         H.2.1  Inherent Instructions
4564
4565                 aba             bgnd            cba
4566                 daa             dex             dey
4567                 ediv            edivs           emul
4568                 emuls           fdiv            idiv
4569                 idivs           inx             iny
4570                 mem             mul             nop
4571                 psha            pshb            pshc
4572                 pshd            pshx            pshy
4573                 pula            pulb            pulc
4574                 puld            pulx            puly
4575                 rev             revw            rtc
4576                 rti             rts             sba
4577                 stop            swi             tab
4578                 tba             wai             wav
4579                 wavr
4580
4581
4582         H.2.2  Short Branch Instructions
4583
4584                 bcc     label           bcs     label
4585                 beq     label           bge     label
4586                 bgt     label           bhi     label
4587                 bhis    label           bhs     label
4588                 ble     label           blo     label
4589                 blos    label           bls     label
4590                 blt     label           bmi     label
4591                 bne     label           bpl     label
4592                 bra     label           brn     label
4593                 bvc     label           bvs     label
4594                 bsr     label
4595
4596
4597         H.2.3  Long Branch Instructions
4598
4599                 lbcc    label           lbcs    label
4600                 lbeq    label           lbge    label
4601                 lbgt    label           lbhi    label
4602                 lbhis   label           lbhs    label
4603                 lble    label           lblo    label
4604                 lblos   label           lbls    label
4605                 lblt    label           lbmi    label
4606                 lbne    label           lbpl    label
4607                 lbra    label           lbrn    label
4608                 lbvc    label           lbvs    label
4609 \f
4610
4611         AS6812 ASSEMBLER                                        PAGE H-4
4612         68HC12 INSTRUCTION SET
4613
4614
4615         H.2.4  Branch on Decrement, Test, or Increment
4616
4617                 dbeq    r,label         dbne    r,label
4618                 ibeq    r,label         ibne    r,label
4619                 tbeq    r,label         tbne    r,label
4620
4621
4622         H.2.5  Bit Clear and Set Instructions
4623
4624                 bclr    [],#data
4625                 bset    [],#data
4626
4627
4628         H.2.6  Branch on Bit Clear or Set
4629
4630                 brclr   [],#data,label
4631                 brset   [],#data,label
4632 \f
4633
4634         AS6812 ASSEMBLER                                        PAGE H-5
4635         68HC12 INSTRUCTION SET
4636
4637
4638         H.2.7  Single Operand Instructions
4639
4640                 asla            aslb
4641                 asl     []
4642
4643                 asra            asrb
4644                 asr     []
4645
4646                 clra            clrb
4647                 clr     []
4648
4649                 coma            comb
4650                 com     []
4651
4652                 deca            decb
4653                 dec     []
4654
4655                 inca            incb
4656                 inc     []
4657
4658                 lsla            lslb
4659                 lsl     []
4660
4661                 lsra            lsrb
4662                 lsr     []
4663
4664                 nega            negb
4665                 neg     []
4666
4667                 rola            rolb
4668                 rol     []
4669
4670                 rora            rorb
4671                 ror     []
4672
4673                 tsta            tstb
4674                 tst     []
4675 \f
4676
4677         AS6812 ASSEMBLER                                        PAGE H-6
4678         68HC12 INSTRUCTION SET
4679
4680
4681         H.2.8  Double Operand Instructions
4682
4683                 adca    []              adcb    []
4684
4685                 adda    []              addb    []
4686
4687                 anda    []              andb    []
4688
4689                 bita    []              bitb    []
4690
4691                 cmpa    []              cmpb    []
4692
4693                 eora    []              eorb    []
4694
4695                 ldaa    []      &lt;=&gt;     lda     []
4696
4697                 ldab    []      &lt;=&gt;     ldb     []
4698
4699                 oraa    []      &lt;=&gt;     ora     []
4700
4701                 orab    []      &lt;=&gt;     orb     []
4702
4703                 sbca    []              sbcb    []
4704
4705                 staa    []      &lt;=&gt;     sta     []
4706
4707                 stab    []      &lt;=&gt;     stb     []
4708
4709                 suba    []              subb    []
4710
4711
4712         H.2.9  Move Instructions
4713
4714                 movb    [],[]           movw    [],[]
4715
4716
4717         H.2.10  D-register Instructions
4718
4719                 addd    []              subd    []
4720                 cpd     []      &lt;=&gt;     cmpd    []
4721                 ldd     []              std     []
4722 \f
4723
4724         AS6812 ASSEMBLER                                        PAGE H-7
4725         68HC12 INSTRUCTION SET
4726
4727
4728         H.2.11  Index/Stack Register Instructions
4729
4730                 cps     []      &lt;=&gt;     cmps    []
4731                 cpx     []      &lt;=&gt;     cmpx    []
4732                 cpy     []      &lt;=&gt;     cmpy    []
4733
4734                 lds     []
4735                 ldx     []              ldy     []
4736
4737                 leas    []
4738                 leax    []              leay    []
4739
4740                 sts     []
4741                 stx     []              sty     []
4742
4743
4744         H.2.12  Jump and Jump/Call to Subroutine Instructions
4745
4746                 call    [],pg
4747                 jmp     []              jsr     []
4748
4749
4750         H.2.13  Other Special Instructions
4751
4752                 emacs   []
4753                 emaxd   []              emaxm   []
4754                 emind   []              eminm   []
4755                 etbl    []
4756                 maxa    []              maxm    []
4757                 mina    []              minm    []
4758                 tbl     []              trap    #data
4759
4760
4761         H.2.14  Register - Register Instructions
4762
4763                 exg     r1,r2           sex     r1,r2
4764                 tfr     r1,r2
4765
4766
4767         H.2.15  Condition Code Register Instructions
4768
4769                 andcc   #data           orcc    #data
4770 \f
4771
4772         AS6812 ASSEMBLER                                        PAGE H-8
4773         68HC12 INSTRUCTION SET
4774
4775
4776         H.2.16  M68HC11 Compatibility Mode Instructions
4777
4778                 abx             aby             clc
4779                 cli             clv             des
4780                 ins             sec             sei
4781                 sev             tap             tpa
4782                 tsx             tsy             txs
4783                 tys             xgdx            xgdy
4784 \f
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798                                    APPENDIX I
4799
4800                                 AS6816 ASSEMBLER
4801
4802
4803
4804
4805
4806         I.1  68HC16 REGISTER SET
4807
4808         The following is a list of the 68HC16 registers used by AS6816:
4809
4810                 a,b     -       8-bit accumulators
4811                 d       -       16-bit accumulator &lt;a:b&gt;
4812                 e       -       16-bit accumulator
4813                 x,y,z   -       index registers
4814                 k       -       address extension register
4815                 s       -       stack pointer
4816                 ccr     -       condition code
4817
4818
4819         I.2  68HC16 INSTRUCTION SET
4820
4821
4822            The  following tables list all 68HC16 mnemonics recognized by
4823         the AS6816 assembler.  The designation [] refers to  a  required
4824         addressing  mode  argument.   The  following  list specifies the
4825         format for each addressing mode supported by AS6816:
4826
4827                 #data           immediate data
4828                                 byte or word data
4829
4830                 #xo,#yo         local immediate data (mac / rmac)
4831
4832                 label           branch label
4833
4834                 r               register
4835                                 ccr,a,b,d,e,x,y,z,s
4836
4837                 ,x              zero offset register indexed addressing
4838                 ,x8
4839                 ,x16
4840
4841                 offset,x        register indexed addressing
4842 \f
4843
4844         AS6816 ASSEMBLER                                        PAGE I-2
4845         68HC16 INSTRUCTION SET
4846
4847
4848                                      0 &lt;= offset &lt;= 255   ---  8-bit
4849                                 -32768 &lt;= offset &lt;= -1    --- 16-bit
4850                                    256 &lt;= offset &lt;= 32767 --- 16-bit
4851                                 (external definition of offset
4852                                  uses 16-bit mode)
4853
4854                 offset,x8       unsigned 8-bit offset indexed addressing
4855                 offset,x16      signed 16-bit offset indexed addressing
4856
4857                 e,x             accumulator offset indexed addressing
4858
4859                 ext             extended addressing
4860
4861                 bank            64K bank number (jmp / jsr)
4862
4863         The  terms data, label, offset, bank, and ext may all be expres-
4864         sions.
4865
4866            Note  that  not all addressing modes are valid with every in-
4867         struction, refer to the 6816 technical data for valid modes.
4868
4869
4870         I.2.1  Inherent Instructions
4871
4872                 aba             abx             aby             abz
4873                 ace             aced            ade             adx
4874                 ady             adz             aex             aey
4875                 aez             bgnd            cba             daa
4876                 ediv            edivs           emul            emuls
4877                 fdiv            fmuls           idiv            ldhi
4878                 lpstop          mul             nop             psha
4879                 pshb            pshmac          pula            pulb
4880                 pulmac          rtr             rts             sba
4881                 sde             sted            swi             sxt
4882                 tab             tap             tba             tbek
4883                 tbsk            tbxk            tbyk            tbzk
4884                 tde             tdmsk           tdp             ted
4885                 tedm            tekb            tem             tmer
4886                 tmet            tmxed           tpa             tpd
4887                 tskb            tsx             tsy             tsz
4888                 txkb            txs             txy             txz
4889                 tykb            tys             tyx             tyz
4890                 tzkb            tzs             tzx             tzy
4891                 wai             xgab            xgde            xgdx
4892                 xgdy            xgdz            xgex            xgey
4893                 xgez
4894 \f
4895
4896         AS6816 ASSEMBLER                                        PAGE I-3
4897         68HC16 INSTRUCTION SET
4898
4899
4900         I.2.2  Push/Pull Multiple Register Instructions
4901
4902                 pshm    r,...           pulm    r,...
4903
4904
4905         I.2.3  Short Branch Instructions
4906
4907                 bcc     label           bcs     label
4908                 beq     label           bge     label
4909                 bgt     label           bhi     label
4910                 bhis    label           bhs     label
4911                 ble     label           blo     label
4912                 blos    label           bls     label
4913                 blt     label           bmi     label
4914                 bne     label           bpl     label
4915                 bra     label           brn     label
4916                 bvc     label           bvs     label
4917                 bsr     label
4918
4919
4920         I.2.4  Long Branch Instructions
4921
4922                 lbcc    label           lbcs    label
4923                 lbeq    label           lbge    label
4924                 lbgt    label           lbhi    label
4925                 lbhis   label           lbhs    label
4926                 lble    label           lblo    label
4927                 lblos   label           lbls    label
4928                 lblt    label           lbmi    label
4929                 lbne    label           lbpl    label
4930                 lbra    label           lbrn    label
4931                 lbvc    label           lbvs    label
4932                 lbsr    label
4933
4934
4935         I.2.5  Bit Manipulation Instructions
4936
4937                 bclr    [],#data
4938                 bset    [],#data
4939
4940                 brclr   [],#data,label
4941                 brset   [],#data,label
4942 \f
4943
4944         AS6816 ASSEMBLER                                        PAGE I-4
4945         68HC16 INSTRUCTION SET
4946
4947
4948         I.2.6  Single Operand Instructions
4949
4950                 asla                    aslb
4951                 asld                    asle
4952                 aslm
4953                 asl     []              aslw    []
4954
4955                 asra                    asrb
4956                 asrd                    asre
4957                 asrm
4958                 asr     []              asrw    []
4959
4960                 clra                    clrb
4961                 clrd                    clre
4962                                         clrm
4963                 clr     []              clrw    []
4964
4965                 coma                    comb
4966                 comd                    come
4967                 com     []              comw    []
4968
4969                 deca                    decb
4970                 dec     []              decw    []
4971
4972                 inca                    incb
4973                 inc     []              incw    []
4974
4975                 lsla                    lslb
4976                 lsld                    lsle
4977                 lslm
4978                 lsl     []              lslw    []
4979
4980                 lsra                    lsrb
4981                 lsrd                    lsre
4982                 lsr     []              lsrw    []
4983
4984                 nega                    negb
4985                 negd                    nege
4986                 neg     []              negw    []
4987
4988                 rola                    rolb
4989                 rold                    role
4990                 rol     []              rolw    []
4991
4992                 rora                    rorb
4993                 rord                    rore
4994                 ror     []              rorw    []
4995
4996                 tsta                    tstb
4997                 tsta                    tste
4998                 tst     []              tstw    []
4999 \f
5000
5001         AS6816 ASSEMBLER                                        PAGE I-5
5002         68HC16 INSTRUCTION SET
5003
5004
5005         I.2.7  Double Operand Instructions
5006
5007                 adca    []              adcb    []
5008                 adcd    []              adce    []
5009
5010                 adda    []              addb    []
5011                 addd    []              adde    []
5012
5013                 anda    []              andb    []
5014                 andd    []              ande    []
5015
5016                 bita    []              bitb    []
5017
5018                 cmpa    []              cmpb    []
5019                 cpd     []              cpe     []
5020
5021                 eora    []              eorb    []
5022                 eord    []              eore    []
5023
5024                 ldaa    []              ldab    []
5025                 ldd     []              lde     []
5026
5027                 oraa    []              orab    []
5028                 ord     []              ore     []
5029
5030                 sbca    []              sbcb    []
5031                 sbcd    []              sbce    []
5032
5033                 staa    []              stab    []
5034                 std     []              ste     []
5035
5036                 suba    []              subb    []
5037                 subd    []              sube    []
5038
5039
5040         I.2.8  Index/Stack Register Instructions
5041
5042                 cps     []              cpx     []
5043                 cpy     []              cpz     []
5044
5045                 lds     []              ldx     []
5046                 ldy     []              ldz     []
5047
5048                 sts     []              stx     []
5049                 sty     []              stz     []
5050 \f
5051
5052         AS6816 ASSEMBLER                                        PAGE I-6
5053         68HC16 INSTRUCTION SET
5054
5055
5056         I.2.9  Jump and Jump to Subroutine Instructions
5057
5058                 jmp     bank,[]         jsr     bank,[]
5059
5060
5061         I.2.10  Condition Code Register Instructions
5062
5063                 andp    #data           orp     #data
5064
5065
5066         I.2.11  Multiply and Accumulate Instructions
5067
5068                 mac     #data           rmac    #data
5069                 mac     #xo,#yo         rmac    #xo,#yo
5070 \f
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084                                    APPENDIX J
5085
5086                                  ASH8 ASSEMBLER
5087
5088
5089
5090
5091
5092         J.1  H8/3XX REGISTER SET
5093
5094         The following is a list of the H8 registers used by ASH8:
5095
5096                 r0  -  r7,sp            16-bit accumulators
5097                 r0L -  r7L,spL          8-bit accumulators
5098                 r0H -  r7H,spH          8-bit accumulators
5099                 spL,spH,sp              stack pointers
5100                 ccr                     condition code
5101
5102
5103         J.2  H8/3XX INSTRUCTION SET
5104
5105
5106            The  following tables list all H8/3xx mnemonics recognized by
5107         the ASH8 assembler.  The designation [] refers to a required ad-
5108         dressing mode argument.  The following list specifies the format
5109         for each addressing mode supported by ASH8:
5110
5111                 #xx:3           immediate data (3  bit)
5112                 #xx:8           immediate data (8  bit)
5113                 #xx:16          immediate data (16 bit)
5114
5115                 *dir            direct page addressing
5116                                 (see .setdp directive)
5117                                 0xFF00 &lt;= dir &lt;= 0xFFFF
5118
5119                 label           branch label
5120
5121
5122                 rn              registers (16 bit)
5123                                 r0-r7,sp
5124
5125                 rnB             registers (8 bit)
5126                                 r0H-r7H,r0L-r7L,spH,spL
5127
5128 \f
5129
5130         ASH8 ASSEMBLER                                          PAGE J-2
5131         H8/3XX INSTRUCTION SET
5132
5133
5134                 ccr             condition code register
5135
5136                 @rn             register indirect
5137
5138                 @-rn            register indirect (auto pre-decrement)
5139
5140                 @rn+            register indirect (auto post-increment)
5141
5142                 @[offset,rn]    register indirect, 16-bit displacement
5143
5144                 @@offset        memory indirect, (8-bit address)
5145
5146                 ext             extended addressing (16-bit)
5147
5148         The  terms  data, dir, label, offset, and ext may all be expres-
5149         sions.
5150
5151            Note  that  not all addressing modes are valid with every in-
5152         struction, refer to the H8/3xx technical data for valid modes.
5153
5154
5155         J.2.1  Inherent Instructions
5156
5157                 eepmov
5158                 nop
5159                 sleep
5160                 rte
5161                 rts
5162
5163
5164         J.2.2  Branch Instructions
5165
5166                 bcc     label                   bcs     label
5167                 beq     label                   bf      label
5168                 bge     label                   bgt     label
5169                 bhi     label                   bhis    label
5170                 bhs     label                   ble     label
5171                 blo     label                   blos    label
5172                 bls     label                   blt     label
5173                 bmi     label                   bne     label
5174                 bpl     label                   bra     label
5175                 brn     label                   bt      label
5176                 bvc     label                   bvs     label
5177                 bsr     label
5178 \f
5179
5180         ASH8 ASSEMBLER                                          PAGE J-3
5181         H8/3XX INSTRUCTION SET
5182
5183
5184         J.2.3  Single Operand Instructions
5185
5186                 Free Form
5187
5188                 daa     rnB                     das     rnB
5189
5190                 dec     rnB                     inc     rnB
5191
5192                 neg     rnB                     not     rnB
5193
5194                 rotxl   rnB                     rotxr   rnB
5195
5196                 rotl    rnB                     rotr    rnB
5197
5198                 shal    rnB                     shar    rnB
5199
5200                 shll    rnB                     shlr    rnB
5201
5202                 push    rn                      pop     rn
5203
5204
5205                 Byte / Word Form
5206
5207                 daa.b   rnB                     das.b   rnB
5208
5209                 dec.b   rnB                     inc.b   rnB
5210
5211                 neg.b   rnB                     not.b   rnB
5212
5213                 rotxl.b rnB                     rotxr.b rnB
5214
5215                 rotl.b  rnB                     rotr.b  rnB
5216
5217                 shal.b  rnB                     shar.b  rnB
5218
5219                 shll.b  rnB                     shlr.b  rnB
5220
5221                 push.w  rn                      pop.w   rn
5222 \f
5223
5224         ASH8 ASSEMBLER                                          PAGE J-4
5225         H8/3XX INSTRUCTION SET
5226
5227
5228         J.2.4  Double Operand Instructions
5229
5230                 Free Form
5231
5232                 add     rnB,rnB                 add     #xx:8,rnB
5233                 add     rn,rn
5234                 adds    #1,rn                   adds    #2,rn
5235                 addx    rnB,rnB                 addx    #xx:8,rnB
5236
5237                 cmp     rnB,rnB                 cmp     #xx:8,rnB
5238                 cmp     rn,rn
5239
5240                 sub     rnB,rnB
5241                 sub     rn,rn
5242                 subs    #1,rn                   subs    #2,rn
5243                 subx    rnB,rnB                 subx    #xx:8,rnB
5244
5245                 and     rnB,rnB                 and     #xx:8,rnB
5246                                                 and     #xx:8,ccr
5247
5248                 or      rnB,rnB                 or      #xx:8,rnB
5249                                                 or      #xx:8,ccr
5250
5251                 xor     rnB,rnB                 xor     #xx:8,rnB
5252                                                 xor     #xx:8,ccr
5253
5254
5255                 Byte / Word Form
5256
5257                 add.b   rnB,rnB                 add.b   #xx:8,rnB
5258                 add.w   rn,rn
5259
5260                 cmp.b   rnB,rnB                 cmp.b   #xx:8,rnB
5261                 cmp.w   rn,rn
5262
5263                 sub.b   rnB,rnB
5264                 sub.w   rn,rn
5265
5266                 addx.b  rnB,rnB                 addx.b  #xx:8,rnB
5267
5268                 and.b   rnB,rnB                 and.b   #xx:8,rnB
5269                                                 and.b   #xx:8,ccr
5270
5271                 or.b    rnB,rnB                 or.b    #xx:8,rnB
5272                                                 or.b    #xx:8,ccr
5273
5274                 subx.b  rnB,rnB                 subx.b  #xx:8,rnB
5275
5276                 xor.b   rnB,rnB                 xor.b   #xx:8,rnB
5277                                                 xor.b   #xx:8,ccr
5278 \f
5279
5280         ASH8 ASSEMBLER                                          PAGE J-5
5281         H8/3XX INSTRUCTION SET
5282
5283
5284         J.2.5  Mov Instructions
5285
5286                 Free Form
5287
5288                 mov     rnB,rnB                 mov     rn,rn
5289                 mov     #xx:8,rnB               mov     #xx:16,rn
5290                 mov     @rn,rnB                 mov     @rn,rn
5291                 mov     @[offset,rn],rnB        mov     @[offset,rn],rn
5292                 mov     @rn+,rnB                mov     @rn+,rn
5293                 mov     @dir,rnB
5294                 mov     dir,rnB
5295                 mov     *@dir,rnB
5296                 mov     *dir,rnB
5297                 mov     @label,rnB              mov     @label,rn
5298                 mov     label,rnB               mov     label,rn
5299                 mov     rnB,@rn                 mov     rn,@rn
5300                 mov     rnB,@[offset,rn]        mov     rn,@[offset,rn]
5301                 mov     rnB,@-rn                mov     rn,@-rn
5302                 mov     rnB,@dir
5303                 mov     rnB,dir
5304                 mov     rnB,*@dir
5305                 mov     rnB,*dir
5306                 mov     rnB,@label              mov     rn,@label
5307                 mov     rnB,label               mov     rn,label
5308
5309
5310                 Byte / Word Form
5311
5312                 mov.b   rnB,rnB                 mov.w   rn,rn
5313                 mov.b   #xx:8,rnB               mov.w   #xx:16,rn
5314                 mov.b   @rn,rnB                 mov.w   @rn,rn
5315                 mov.b   @[offset,rn],rnB        mov.w   @[offset,rn],rn
5316                 mov.b   @rn+,rnB                mov.w   @rn+,rn
5317                 mov.b   @dir,rnB
5318                 mov.b   dir,rnB
5319                 mov.b   *@dir,rnB
5320                 mov.b   *dir,rnB
5321                 mov.b   @label,rnB              mov.w   @label,rn
5322                 mov.b   label,rnB               mov.w   label,rn
5323                 mov.b   rnB,@rn                 mov.w   rn,@rn
5324                 mov.b   rnB,@[offset,rn]        mov.w   rn,@[offset,rn]
5325                 mov.b   rnB,@-rn                mov.w   rn,@-rn
5326                 mov.b   rnB,@dir
5327                 mov.b   rnB,dir
5328                 mov.b   rnB,*@dir
5329                 mov.b   rnB,*dir
5330                 mov.b   rnB,@label              mov.w   rn,@label
5331                 mov.b   rnB,label               mov.w   rn,label
5332 \f
5333
5334         ASH8 ASSEMBLER                                          PAGE J-6
5335         H8/3XX INSTRUCTION SET
5336
5337
5338         J.2.6  Bit Manipulation Instructions
5339
5340                 bld     #xx:3,rnB               bld     #xx:3,@rn
5341                 bld     #xx:3,@dir              bld     #xx:3,dir
5342                 bld     #xx:3,*@dir             bld     #xx:3,*dir
5343
5344                 bild    #xx:3,rnB               bild    #xx:3,@rn
5345                 bild    #xx:3,@dir              bild    #xx:3,dir
5346                 bild    #xx:3,*@dir             bild    #xx:3,*dir
5347
5348                 bst     #xx:3,rnB               bst     #xx:3,@rn
5349                 bst     #xx:3,@dir              bst     #xx:3,dir
5350                 bst     #xx:3,*@dir             bst     #xx:3,*dir
5351
5352                 bist    #xx:3,rnB               bist    #xx:3,@rn
5353                 bist    #xx:3,@dir              bist    #xx:3,dir
5354                 bist    #xx:3,*@dir             bist    #xx:3,*dir
5355
5356                 band    #xx:3,rnB               band    #xx:3,@rn
5357                 band    #xx:3,@dir              band    #xx:3,dir
5358                 band    #xx:3,*@dir             band    #xx:3,*dir
5359
5360                 biand   #xx:3,rnB               biand   #xx:3,@rn
5361                 biand   #xx:3,@dir              biand   #xx:3,dir
5362                 biand   #xx:3,*@dir             biand   #xx:3,*dir
5363
5364                 bor     #xx:3,rnB               bor     #xx:3,@rn
5365                 bor     #xx:3,@dir              bor     #xx:3,dir
5366                 bor     #xx:3,*@dir             bor     #xx:3,*dir
5367
5368                 bior    #xx:3,rnB               bior    #xx:3,@rn
5369                 bior    #xx:3,@dir              bior    #xx:3,dir
5370                 bior    #xx:3,*@dir             bior    #xx:3,*dir
5371
5372                 bxor    #xx:3,rnB               bxor    #xx:3,@rn
5373                 bxor    #xx:3,@dir              bxor    #xx:3,dir
5374                 bxor    #xx:3,*@dir             bxor    #xx:3,*dir
5375
5376                 bixor   #xx:3,rnB               bixor   #xx:3,@rn
5377                 bixor   #xx:3,@dir              bixor   #xx:3,dir
5378                 bixor   #xx:3,*@dir             bixor   #xx:3,*dir
5379 \f
5380
5381         ASH8 ASSEMBLER                                          PAGE J-7
5382         H8/3XX INSTRUCTION SET
5383
5384
5385         J.2.7  Extended Bit Manipulation Instructions
5386
5387                 bset    #xx:3,rnB               bset    #xx:3,@rn
5388                 bset    #xx:3,@dir              bset    #xx:3,dir
5389                 bset    #xx:3,*@dir             bset    #xx:3,*dir
5390                 bset    rnB,rnB                 bset    rnB,@rn
5391                 bset    rnB,@dir                bset    rnB,dir
5392                 bset    rnB,*@dir               bset    rnB,*dir
5393
5394                 bclr    #xx:3,rnB               bclr    #xx:3,@rn
5395                 bclr    #xx:3,@dir              bclr    #xx:3,dir
5396                 bclr    #xx:3,*@dir             bclr    #xx:3,*dir
5397                 bclr    rnB,rnB                 bclr    rnB,@rn
5398                 bclr    rnB,@dir                bclr    rnB,dir
5399                 bclr    rnB,*@dir               bclr    rnB,*dir
5400
5401                 bnot    #xx:3,rnB               bnot    #xx:3,@rn
5402                 bnot    #xx:3,@dir              bnot    #xx:3,dir
5403                 bnot    #xx:3,*@dir             bnot    #xx:3,*dir
5404                 bnot    rnB,rnB                 bnot    rnB,@rn
5405                 bnot    rnB,@dir                bnot    rnB,dir
5406                 bnot    rnB,*@dir               bnot    rnB,*dir
5407
5408                 btst    #xx:3,rnB               btst    #xx:3,@rn
5409                 btst    #xx:3,@dir              btst    #xx:3,dir
5410                 btst    #xx:3,*@dir             btst    #xx:3,*dir
5411                 btst    rnB,rnB                 btst    rnB,@rn
5412                 btst    rnB,@dir                btst    rnB,dir
5413                 btst    rnB,*@dir               btst    rnB,*dir
5414
5415
5416         J.2.8  Condition Code Instructions
5417
5418                 andc    #xx:8,ccr               andc    #xx:8
5419                 and     #xx:8,ccr               and.b   #xx:8,ccr
5420
5421                 ldc     #xx:8,ccr               ldc     #xx:8
5422                 ldc     rnB,ccr                 ldc     rnB
5423
5424                 orc     #xx:8,ccr               orc     #xx:8
5425                 or      #xx:8,ccr               or.b    #xx:8,ccr
5426
5427                 xorc    #xx:8,ccr               xorc    #xx:8
5428                 xor     #xx:8,ccr               xor.b   #xx:8,ccr
5429
5430                 stc     ccr,rnB                 stc     rnB
5431 \f
5432
5433         ASH8 ASSEMBLER                                          PAGE J-8
5434         H8/3XX INSTRUCTION SET
5435
5436
5437         J.2.9  Other Instructions
5438
5439                 divxu   rnB,rn                  divxu.b rnB,rn
5440
5441                 mulxu   rnB,rn                  mulxu.b rnB,rn
5442
5443                 movfpe  @label,rnB              movfpe  label,rnB
5444                 movfpe.b  @label,rnB            movfpe.b  label,rnB
5445
5446                 movtpe  @label,rnB              movtpe  label,rnB
5447                 movtpe.b  @label,rnB            movtpe.b  label,rnB
5448
5449
5450         J.2.10  Jump and Jump to Subroutine Instructions
5451
5452                 jmp     @rn                     jmp     @@dir
5453                 jmp     @label                  jmp     label
5454
5455                 jsr     @rn                     jsr     @@dir
5456                 jsr     @label                  jsr     label
5457 \f
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471                                    APPENDIX K
5472
5473                                 AS8051 ASSEMBLER
5474
5475
5476
5477
5478
5479         K.1  ACKNOWLEDGMENT
5480
5481
5482            Thanks  to  John  Hartman  for his contribution of the AS8051
5483         cross assembler.
5484
5485                 John L. Hartman
5486                 jhartman@compuserve.com
5487
5488
5489         K.2  8051 REGISTER SET
5490
5491         The following is a list of the 8051 registers used by AS8051:
5492
5493                 a,b             -       8-bit accumulators
5494                 r0,r1,r2,r3     -       8-bit registers
5495                 r4,r5,r6,r7
5496                 dptr            -       data pointer
5497                 sp              -       stack pointer
5498                 pc              -       program counter
5499                 psw             -       status word
5500                 c               -       carry (bit in status word)
5501 \f
5502
5503         AS8051 ASSEMBLER                                        PAGE K-2
5504         8051 REGISTER SET
5505
5506
5507         K.3  8051 INSTRUCTION SET
5508
5509
5510            The  following  tables  list all 8051 mnemonics recognized by
5511         the AS8051 assembler.  The following list specifies  the  format
5512         for each addressing mode supported by AS8051:
5513
5514                 #data           immediate data
5515                                 byte or word data
5516
5517                 r,r1,r2         register r0,r1,r2,r3,r4,r5,r6, or r7
5518
5519                 @r              indirect on register r0 or r1
5520                 @dptr           indirect on data pointer
5521                 @a+dptr         indirect on accumulator
5522                                 plus data pointer
5523                 @a+pc           indirect on accumulator
5524                                 plus program counter
5525
5526                 addr            direct memory address
5527
5528                 bitaddr         bit address
5529
5530                 label           call or jump label
5531
5532         The terms data, addr, bitaddr, and label may all be expressions.
5533
5534            Note  that  not all addressing modes are valid with every in-
5535         struction.  Refer to the 8051 technical data for valid modes.
5536
5537
5538         K.3.1  Inherent Instructions
5539
5540                 nop
5541 \f
5542
5543         AS8051 ASSEMBLER                                        PAGE K-3
5544         8051 INSTRUCTION SET
5545
5546
5547         K.3.2  Move Instructions
5548
5549                 mov     a,#data         mov     a,addr
5550                 mov     a,r             mov     a,@r
5551
5552                 mov     r,#data         mov     r,addr
5553                 mov     r,a
5554
5555                 mov     addr,a          mov     addr,#data
5556                 mov     addr,r          mov     addr,@r
5557                 mov     addr1,addr2     mov     bitaddr,c
5558
5559                 mov     @r,#data        mov     @r,addr
5560                 mov     @r,a
5561
5562                 mov     c,bitaddr
5563                 mov     dptr,#data
5564
5565                 movc    a,@a+dptr       movc    a,@a+pc
5566                 movx    a,@dptr         movx    a,@r
5567                 movx    @dptr,a         movx    @r,a
5568
5569
5570         K.3.3  Single Operand Instructions
5571
5572                 clr     a               clr     c
5573                 clr     bitaddr
5574                 cpl     a               cpl     c
5575                 cpl     bitaddr
5576                 setb    c               setb    bitaddr
5577
5578                 da      a
5579                 rr      a               rrc     a
5580                 rl      a               rlc     a
5581                 swap    a
5582
5583                 dec     a               dec     r
5584                 dec     @r
5585                 inc     a               inc     r
5586                 inc     dptr            inc     @r
5587
5588                 div     ab              mul     ab
5589
5590                 pop     addr            push    addr
5591 \f
5592
5593         AS8051 ASSEMBLER                                        PAGE K-4
5594         8051 INSTRUCTION SET
5595
5596
5597         K.3.4  Two Operand Instructions
5598
5599                 add     a,#data         add     a,addr
5600                 add     a,r             add     a,@r
5601                 addc    a,#data         addc    a,addr
5602                 addc    a,r             addc    a,@r
5603                 subb    a,#data         subb    a,addr
5604                 subb    a,r             subb    a,@r
5605                 orl     a,#data         orl     a,addr
5606                 orl     a,r             orl     a,@r
5607                 orl     addr,a          orl     addr,#data
5608                 orl     c,bitaddr       orl     c,/bitaddr
5609                 anl     a,#data         anl     a,addr
5610                 anl     a,r             anl     a,@r
5611                 anl     addr,a          anl     addr,#data
5612                 anl     c,bitaddr       anl     c,/bitaddr
5613                 xrl     a,#data         xrl     a,addr
5614                 xrl     a,r             xrl     a,@r
5615                 xrl     addr,a          xrl     addr,#data
5616                 xrl     c,bitaddr       xrl     c,/bitaddr
5617                 xch     a,addr          xch     a,r
5618                 xch     a,@r            xchd    a,@r
5619
5620
5621         K.3.5  Call and Return Instructions
5622
5623                 acall   label           lcall   label
5624                 ret                     reti
5625                 in      data
5626                 out     data
5627                 rst     data
5628
5629
5630         K.3.6  Jump Instructions
5631
5632                 ajmp    label
5633                 cjne    a,#data,label   cjne    a,addr,label
5634                 cjne    r,#data,label   cjne    @r,#data,label
5635                 djnz    r,label         djnz    addr,label
5636                 jbc     bitadr,label
5637                 jb      bitadr,label    jnb     bitadr,label
5638                 jc      label           jnc     label
5639                 jz      label           jnz     label
5640                 jmp     @a+dptr
5641                 ljmp    label           sjmp    label
5642 \f
5643
5644         AS8051 ASSEMBLER                                        PAGE K-5
5645         8051 INSTRUCTION SET
5646
5647
5648         K.3.7  Predefined Symbols:  SFR Map
5649
5650                         --------- 4 Bytes ----------
5651                         ----    ----    ----    ----
5652                 FC                                          FF
5653                 F8                                          FB
5654                 F4                                          F7
5655                 F0      B                                   F3
5656                 EC                                          EF
5657                 E8                                          EB
5658                 E4                                          E7
5659                 E0      ACC                                 E3
5660                 DC                                          DF
5661                 D8                                          DB
5662                 D4                                          D7
5663                 D0      PSW                                 D3
5664                 CC   [  TL2     TH2                     ]   CF
5665                 C8   [  T2CON           RCAP2L  RCAP2H  ]   CB
5666                 C4                                          C7
5667                 C0                                          C3
5668                 BC                                          BF
5669                 B8      IP                                  BB
5670                 B4                                          B7
5671                 B0      P3                                  B3
5672                 AC                                          AF
5673                 A8      IE                                  AB
5674                 A4                                          A7
5675                 A0      P2                                  A3
5676                 9C                                          9F
5677                 98      SCON    SBUF                        9B
5678                 94                                          97
5679                 90      P1                                  93
5680                 8C      TH0     TH1                         8F
5681                 88      TCON    TMOD    TL0     TL1         8B
5682                 84                              PCON        87
5683                 80      P0      SP      DPL     DPH         83
5684
5685                 [...] Indicates Resident in 8052, not 8051
5686 \f
5687
5688         AS8051 ASSEMBLER                                        PAGE K-6
5689         8051 INSTRUCTION SET
5690
5691
5692         K.3.8  Predefined Symbols:  SFR Bit Addresses
5693
5694                         ---------- 4 BITS ----------
5695                         ----    ----    ----    ----
5696                 FC                                          FF
5697                 F8                                          FB
5698                 F4      B.4     B.5     B.6     B.7         F7
5699                 F0      B.0     B.1     B.2     B.3         F3
5700                 EC                                          EF
5701                 E8                                          EB
5702                 E4      ACC.4   ACC.5   ACC.6   ACC.7       E7
5703                 E0      ACC.0   ACC.1   ACC.2   ACC.3       E3
5704                 DC                                          DF
5705                 D8                                          DB
5706                 D4      PSW.4   PSW.5   PSW.6   PSW.7       D7
5707                 D0      PSW.0   PSW.1   PSW.2   PSW.3       D3
5708                 CC   [  T2CON.4 T2CON.5 T2CON.6 T2CON.7 ]   CF
5709                 C8   [  T2CON.0 T2CON.1 T2CON.2 T2CON.3 ]   CB
5710                 C4                                          C7
5711                 C0                                          C3
5712                 BC      IP.4    IP.5    IP.6    IP.7        BF
5713                 B8      IP.0    IP.1    IP.2    IP.3        BB
5714                 B4      P3.4    P3.5    P3.6    P3.7        B7
5715                 B0      P3.0    P3.1    P3.2    P3.3        B3
5716                 AC      IE.4    IE.5    EI.6    IE.7        AF
5717                 A8      IE.0    IE.1    IE.2    IE.3        AB
5718                 A4      P2.4    P2.5    P2.6    P2.7        A7
5719                 A0      P2.0    P2.1    P2.2    P2.3        A3
5720                 9C      SCON.4  SCON.5  SCON.6  SCON.7      9F
5721                 98      SCON.0  SCON.1  SCON.2  SCON.3      9B
5722                 94      P1.4    P1.5    P1.6    P1.7        97
5723                 90      P1.0    P1.1    P1.2    P1.3        93
5724                 8C      TCON.4  TCON.5  TCON.6  TCON.7      8F
5725                 88      TCON.0  TCON.1  TCON.2  TCON.3      8B
5726                 84      P0.4    P0.5    P0.6    P0.7        87
5727                 80      P0.0    P0.1    P0.2    P0.3        83
5728
5729                 [...] Indicates Resident in 8052, not 8051
5730 \f
5731
5732         AS8051 ASSEMBLER                                        PAGE K-7
5733         8051 INSTRUCTION SET
5734
5735
5736         K.3.9  Predefined Symbols:  Control Bits
5737
5738                         ---------- 4 BITS ----------
5739                         ----    ----    ----    ----
5740                 FC                                          FF
5741                 F8                                          FB
5742                 F4                                          F7
5743                 F0                                          F3
5744                 EC                                          EF
5745                 E8                                          EB
5746                 E4                                          E7
5747                 E0                                          E3
5748                 DC                                          DF
5749                 D8                                          DB
5750                 D4      RS1     F0      AC      CY          D7
5751                 D0      P               OV      RS0         D3
5752                 CC   [  TLCK    RCLK    EXF2    TF2     ]   CF
5753                 C8   [  CPRL2   CT2     TR2     EXEN2   ]   CB
5754                 C4                                          C7
5755                 C0                                          C3
5756                 BC      PS      PT2                         BF
5757                 B8      PX0     PT0     PX1     PT1         BB
5758                 B4                                          B7
5759                 B0      RXD     TXD     INT0    INT1        B3
5760                 AC      ES      ET2             EA          AF
5761                 A8      EX0     ET0     EX1     ET1         AB
5762                 A4                                          A7
5763                 A0                                          A3
5764                 9C      REN     SM2     SM1     SM0         9F
5765                 98      RI      TI      RB8     TB8         9B
5766                 94                                          97
5767                 90                                          93
5768                 8C      TR0     TF0     TR1     TF1         8F
5769                 88      IT0     IE0     IT1     IE1         8B
5770                 84                                          87
5771                 80                                          83
5772
5773                 [...] Indicates Resident in 8052, not 8051
5774 \f
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788                                    APPENDIX L
5789
5790                                 AS8085 ASSEMBLER
5791
5792
5793
5794
5795
5796         L.1  8085 REGISTER SET
5797
5798         The  following  is  a  list  of  the 8080/8085 registers used by
5799         AS8085:
5800
5801                 a,b,c,d,e,h,l   -       8-bit accumulators
5802                 m               -       memory through (hl)
5803                 sp              -       stack pointer
5804                 psw             -       status word
5805
5806
5807         L.2  8085 INSTRUCTION SET
5808
5809
5810            The  following tables list all 8080/8085 mnemonics recognized
5811         by the AS8085  assembler.   The  following  list  specifies  the
5812         format for each addressing mode supported by AS8085:
5813
5814                 #data           immediate data
5815                                 byte or word data
5816
5817                 r,r1,r2         register or register pair
5818                                 psw,a,b,c,d,e,h,l
5819                                 bc,de,hl,sp,pc
5820
5821                 m               memory address using (hl)
5822
5823                 addr            direct memory addressing
5824
5825                 label           call or jump label
5826
5827         The terms data, m, addr, and label may be expressions.
5828
5829            Note  that  not all addressing modes are valid with every in-
5830         struction, refer to  the  8080/8085  technical  data  for  valid
5831         modes.
5832 \f
5833
5834         AS8085 ASSEMBLER                                        PAGE L-2
5835         8085 INSTRUCTION SET
5836
5837
5838         L.2.1  Inherent Instructions
5839
5840                 cma             cmc
5841                 daa             di
5842                 ei              hlt
5843                 nop             pchl
5844                 ral             rar
5845                 ret             rim
5846                 rrc             rlc
5847                 sim             sphl
5848                 stc             xchg
5849                 xthl
5850
5851
5852         L.2.2  Register/Memory/Immediate Instructions
5853
5854                 adc     r       adc     m       aci     #data
5855                 add     r       add     m       adi     #data
5856                 ana     r       ana     m       ani     #data
5857                 cmp     r       cmp     m       cpi     #data
5858                 ora     r       ora     m       ori     #data
5859                 sbb     r       sbb     m       sbi     #data
5860                 sub     r       sub     m       sui     #data
5861                 xra     r       xra     m       xri     #data
5862
5863
5864         L.2.3  Call and Return Instructions
5865
5866                 cc      label           rc
5867                 cm      label           rm
5868                 cnc     label           rnc
5869                 cnz     label           rnz
5870                 cp      label           rp
5871                 cpe     label           rpe
5872                 cpo     label           rpo
5873                 cz      label           rz
5874                 call    label
5875
5876
5877         L.2.4  Jump Instructions
5878
5879                 jc      label
5880                 jm      label
5881                 jnc     label
5882                 jnz     label
5883                 jp      label
5884                 jpe     label
5885                 jpo     label
5886                 jz      label
5887                 jmp     label
5888 \f
5889
5890         AS8085 ASSEMBLER                                        PAGE L-3
5891         8085 INSTRUCTION SET
5892
5893
5894         L.2.5  Input/Output/Reset Instructions
5895
5896                 in      data
5897                 out     data
5898                 rst     data
5899
5900
5901         L.2.6  Move Instructions
5902
5903                 mov     r1,r2
5904                 mov     r,m
5905                 mov     m,r
5906
5907                 mvi     r,#data
5908                 mvi     m,#data
5909
5910
5911         L.2.7  Other Instructions
5912
5913                 dcr     r               dcr     m
5914                 inr     r               inr     m
5915
5916                 dad     r               dcx     r
5917                 inx     r               ldax    r
5918                 pop     r               push    r
5919                 stax    r
5920
5921                 lda     addr            lhld    addr
5922                 shld    addr            sta     addr
5923
5924                 lxi     r,#data
5925 \f
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939                                    APPENDIX M
5940
5941                                  ASZ80 ASSEMBLER
5942
5943
5944
5945
5946
5947         M.1  .hd64 DIRECTIVE
5948
5949         Format:
5950
5951                 .hd64
5952
5953         The  .hd64  directive enables processing of the HD64180 specific
5954         mnemonics not included in  the  Z80  instruction  set.   HD64180
5955         mnemonics  encountered  without  the  .hd64  directive  will  be
5956         flagged with an 'o' error.
5957
5958
5959         M.2  Z80 REGISTER SET AND CONDITIONS
5960
5961
5962            The following is a complete list of register designations and
5963         condition mnemonics:
5964
5965                 byte registers  -       a,b,c,d,e,h,l,i,r
5966                 register pairs  -       af,af',bc,de,hl
5967                 word registers  -       pc,sp,ix,iy
5968
5969                 C -     carry bit set
5970                 M -     sign bit set
5971                 NC -    carry bit clear
5972                 NZ -    zero bit clear
5973                 P -     sign bit clear
5974                 PE -    parity even
5975                 PO -    parity odd
5976                 Z -     zero bit set
5977
5978
5979 \f
5980
5981         ASZ80 ASSEMBLER                                         PAGE M-2
5982         Z80 INSTRUCTION SET
5983
5984
5985         M.3  Z80 INSTRUCTION SET
5986
5987
5988            The  following  tables  list all Z80/HD64180 mnemonics recog-
5989         nized by the ASZ80 assembler.  The designation []  refers  to  a
5990         required addressing mode argument.  The following list specifies
5991         the format for each addressing mode supported by ASZ80:
5992
5993                 #data           immediate data
5994                                 byte or word data
5995
5996                 n               byte value
5997
5998                 rg              a byte register
5999                                 a,b,c,d,e,h,l
6000
6001                 rp              a register pair
6002                                 bc,de,hl
6003
6004                 (hl)            implied addressing or
6005                                 register indirect addressing
6006
6007                 (label)         direct addressing
6008
6009                 offset(ix)      indexed addressing with
6010                                 an offset
6011
6012                 label           call/jmp/jr label
6013
6014         The  terms  data,  dir,  offset, and ext may all be expressions.
6015         The terms dir and offset are not allowed to be  external  refer-
6016         ences.
6017
6018            Note  that  not all addressing modes are valid with every in-
6019         struction, refer to the Z80/HD64180  technical  data  for  valid
6020         modes.
6021 \f
6022
6023         ASZ80 ASSEMBLER                                         PAGE M-3
6024         Z80 INSTRUCTION SET
6025
6026
6027         M.3.1  Inherent Instructions
6028
6029                 ccf             cpd
6030                 cpdr            cpi
6031                 cpir            cpl
6032                 daa             di
6033                 ei              exx
6034                 halt            neg
6035                 nop             reti
6036                 retn            rla
6037                 rlca            rld
6038                 rra             rrca
6039                 rrd             scf
6040
6041
6042         M.3.2  Implicit Operand Instructions
6043
6044                 adc     a,[]            adc     []
6045                 add     a,[]            add     []
6046                 and     a,[]            and     []
6047                 cp      a,[]            cp      []
6048                 dec     a,[]            dec     []
6049                 inc     a,[]            inc     []
6050                 or      a,[]            or      []
6051                 rl      a,[]            rl      []
6052                 rlc     a,[]            rlc     []
6053                 rr      a,[]            rr      []
6054                 rrc     a,[]            rrc     []
6055                 sbc     a,[]            sbc     []
6056                 sla     a,[]            sla     []
6057                 sra     a,[]            sra     []
6058                 srl     a,[]            srl     []
6059                 sub     a,[]            sub     []
6060                 xor     a,[]            xor     []
6061 \f
6062
6063         ASZ80 ASSEMBLER                                         PAGE M-4
6064         Z80 INSTRUCTION SET
6065
6066
6067         M.3.3  Load Instruction
6068
6069                 ld      rg,[]           ld      [],rg
6070                 ld      (bc),a          ld      a,(bc)
6071                 ld      (de),a          ld      a,(de)
6072                 ld      (label),a       ld      a,(label)
6073                 ld      (label),rp      ld      rp,(label)
6074                 ld      i,a             ld      r,a
6075                 ld      a,i             ld      a,r
6076                 ld      sp,hl           ld      sp,ix
6077                 ld      sp,iy           ld      rp,#data
6078
6079                 ldd                     lddr
6080                 ldi                     ldir
6081
6082
6083         M.3.4  Call/Return Instructions
6084
6085                 call    C,label         ret     C
6086                 call    M,label         ret     M
6087                 call    NC,label        ret     NC
6088                 call    NZ,label        ret     NZ
6089                 call    P,label         ret     P
6090                 call    PE,label        ret     PE
6091                 call    PO,label        ret     PO
6092                 call    Z,label         ret     Z
6093                 call    label           ret
6094
6095
6096         M.3.5  Jump and Jump to Subroutine Instructions
6097
6098                 jp      C,label         jp      M,label
6099                 jp      NC,label        jp      NZ,label
6100                 jp      P,label         jp      PE,label
6101                 jp      PO,label        jp      Z,label
6102
6103                 jp      (hl)            jp      (ix)
6104                 jp      (iy)            jp      label
6105
6106                 djnz    label
6107
6108                 jr      C,label         jr      NC,label
6109                 jr      NZ,label        jr      Z,label
6110                 jr      label
6111 \f
6112
6113         ASZ80 ASSEMBLER                                         PAGE M-5
6114         Z80 INSTRUCTION SET
6115
6116
6117         M.3.6  Bit Manipulation Instructions
6118
6119                 bit     n,[]
6120                 res     n,[]
6121                 set     n,[]
6122
6123
6124         M.3.7  Interrupt Mode and Reset Instructions
6125
6126                 im      n
6127                 im      n
6128                 im      n
6129                 rst     n
6130
6131
6132         M.3.8  Input and Output Instructions
6133
6134                 in      a,(n)           in      rg,(c)
6135                 ind                     indr
6136                 ini                     inir
6137
6138                 out     (n),a           out     (c),rg
6139                 outd                    otdr
6140                 outi                    otir
6141
6142
6143         M.3.9  Register Pair Instructions
6144
6145                 add     hl,rp           add     ix,rp
6146                 add     iy,rp
6147
6148                 adc     hl,rp           sbc     hl,rp
6149
6150                 ex      (sp),hl         ex      (sp),ix
6151                 ex      (sp),iy
6152                 ex      de,hl
6153                 ex      af,af'
6154
6155                 push    rp              pop     rp
6156 \f
6157
6158         ASZ80 ASSEMBLER                                         PAGE M-6
6159         Z80 INSTRUCTION SET
6160
6161
6162         M.3.10  HD64180 Specific Instructions
6163
6164                 in0     rg,(n)
6165                 out0    (n),rg
6166
6167                 otdm                    otdmr
6168                 otim                    otimr
6169
6170                 mlt     bc              mlt     de
6171                 mlt     hl              mlt     sp
6172
6173                 slp
6174
6175                 tst     a
6176                 tstio   #data
6177 \f
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191                                    APPENDIX N
6192
6193                                 AS6500 ASSEMBLER
6194
6195
6196
6197
6198
6199         N.1  ACKNOWLEDGMENT
6200
6201
6202            Thanks  to  Marko  Makela  for his contribution of the AS6500
6203         cross assembler.
6204
6205                 Marko Makela
6206                 Sillitie 10 A
6207                 01480 Vantaa
6208                 Finland
6209                 Internet: Marko.Makela@Helsinki.Fi
6210                 EARN/BitNet: msmakela@finuh
6211
6212            Several  additions and modifications were made to his code to
6213         support the following families of 6500 processors:
6214
6215                 (1)     650X and 651X processor family
6216                 (2)     65F11 and 65F12 processor family
6217                 (3)     65C00/21 and 65C29 processor family
6218                 (4)     65C02, 65C102, and 65C112 processor family
6219
6220            The  instruction  syntax of this cross assembler contains two
6221         peculiarities:  (1) the addressing indirection is denoted by the
6222         square  brackets  []  and (2) the `bbrx' and `bbsx' instructions
6223         are written `bbr0 memory,label'.
6224
6225
6226 \f
6227
6228         AS6500 ASSEMBLER                                        PAGE N-2
6229         6500 REGISTER SET
6230
6231
6232         N.2  6500 REGISTER SET
6233
6234         The following is a list of the 6500 registers used by AS6500:
6235
6236                 a       -       8-bit accumulator
6237                 x,y     -       index registers
6238
6239
6240         N.3  6500 INSTRUCTION SET
6241
6242
6243            The  following  tables  list all 6500 family mnemonics recog-
6244         nized by the AS6500 assembler.  The designation [] refers  to  a
6245         required addressing mode argument.  The following list specifies
6246         the format for each addressing mode supported by AS6500:
6247
6248                 #data           immediate data
6249                                 byte or word data
6250
6251                 *dir            direct page addressing
6252                                 (see .setdp directive)
6253                                 0 &lt;= dir &lt;= 255
6254
6255                 offset,x        indexed addressing
6256                 offset,y        indexed addressing
6257                                 address = (offset + (x or y))
6258
6259                 [offset,x]      pre-indexed indirect addressing
6260                                 0 &lt;= offset &lt;= 255
6261                                 address = contents of location
6262                                     (offset + (x or y)) mod 256
6263
6264                 [offset],y      post-indexed indirect addressing
6265                                 address = contents of location at offset
6266                                     plus the value of the y register
6267
6268                 [address]       indirect addressing
6269
6270                 ext             extended addressing
6271
6272                 label           branch label
6273
6274                 address,label   direct page memory location
6275                                 branch label
6276                                 bbrx and bbsx instruction addressing
6277
6278         The  terms data, dir, offset, address, ext, and label may all be
6279         expressions.
6280
6281            Note  that  not all addressing modes are valid with every in-
6282         struction, refer to the 65xx technical data for valid modes.
6283 \f
6284
6285         AS6500 ASSEMBLER                                        PAGE N-3
6286         6500 INSTRUCTION SET
6287
6288
6289         N.3.1  Processor Specific Directives
6290
6291
6292            The  AS6500  cross  assembler has four (4) processor specific
6293         assembler directives which  define  the  target  65xx  processor
6294         family:
6295
6296                 .r6500          Core 650X and 651X family (default)
6297                 .r65f11         Core plus 65F11 and 65F12
6298                 .r65c00         Core plus 65C00/21 and 65C29
6299                 .r65c02         Core plus 65C02, 65C102, and 65C112
6300
6301
6302         N.3.2  65xx Core Inherent Instructions
6303
6304                 brk                     clc
6305                 cld                     cli
6306                 clv                     dex
6307                 dey                     inx
6308                 iny                     nop
6309                 pha                     php
6310                 pla                     plp
6311                 rti                     rts
6312                 sec                     sed
6313                 sei                     tax
6314                 tay                     tsx
6315                 txa                     txs
6316                 tya
6317
6318
6319         N.3.3  65xx Core Branch Instructions
6320
6321                 bcc     label           bhs     label
6322                 bcs     label           blo     label
6323                 beq     label           bmi     label
6324                 bne     label           bpl     label
6325                 bvc     label           bvs     label
6326
6327
6328         N.3.4  65xx Core Single Operand Instructions
6329
6330                 asl     []
6331                 dec     []
6332                 inc     []
6333                 lsr     []
6334                 rol     []
6335                 ror     []
6336 \f
6337
6338         AS6500 ASSEMBLER                                        PAGE N-4
6339         6500 INSTRUCTION SET
6340
6341
6342         N.3.5  65xx Core Double Operand Instructions
6343
6344                 adc     []
6345                 and     []
6346                 bit     []
6347                 cmp     []
6348                 eor     []
6349                 lda     []
6350                 ora     []
6351                 sbc     []
6352                 sta     []
6353
6354
6355         N.3.6  65xx Core Jump and Jump to Subroutine Instructions
6356
6357                 jmp     []              jsr     []
6358
6359
6360         N.3.7  65xx Core Miscellaneous X and Y Register Instructions
6361
6362                 cpx     []
6363                 cpy     []
6364                 ldx     []
6365                 stx     []
6366                 ldy     []
6367                 sty     []
6368 \f
6369
6370         AS6500 ASSEMBLER                                        PAGE N-5
6371         6500 INSTRUCTION SET
6372
6373
6374         N.3.8  65F11 and 65F12 Specific Instructions
6375
6376                 bbr0    [],label                bbr1    [],label
6377                 bbr2    [],label                bbr3    [],label
6378                 bbr4    [],label                bbr5    [],label
6379                 bbr6    [],label                bbr7    [],label
6380
6381                 bbs0    [],label                bbs1    [],label
6382                 bbs2    [],label                bbs3    [],label
6383                 bbs4    [],label                bbs5    [],label
6384                 bbs6    [],label                bbs7    [],label
6385
6386                 rmb0    []                      rmb1    []
6387                 rmb2    []                      rmb3    []
6388                 rmb4    []                      rmb5    []
6389                 rmb6    []                      rmb7    []
6390
6391                 smb0    []                      smb1    []
6392                 smb2    []                      smb3    []
6393                 smb4    []                      smb5    []
6394                 smb6    []                      smb7    []
6395
6396
6397         N.3.9  65C00/21 and 65C29 Specific Instructions
6398
6399                 bbr0    [],label                bbr1    [],label
6400                 bbr2    [],label                bbr3    [],label
6401                 bbr4    [],label                bbr5    [],label
6402                 bbr6    [],label                bbr7    [],label
6403
6404                 bbs0    [],label                bbs1    [],label
6405                 bbs2    [],label                bbs3    [],label
6406                 bbs4    [],label                bbs5    [],label
6407                 bbs6    [],label                bbs7    [],label
6408
6409                 bra     label
6410
6411                 phx                             phy
6412                 plx                             ply
6413
6414                 rmb0    []                      rmb1    []
6415                 rmb2    []                      rmb3    []
6416                 rmb4    []                      rmb5    []
6417                 rmb6    []                      rmb7    []
6418
6419                 smb0    []                      smb1    []
6420                 smb2    []                      smb3    []
6421                 smb4    []                      smb5    []
6422                 smb6    []                      smb7    []
6423 \f
6424
6425         AS6500 ASSEMBLER                                        PAGE N-6
6426         6500 INSTRUCTION SET
6427
6428
6429         N.3.10  65C02, 65C102, and 65C112 Specific Instructions
6430
6431                 bbr0    [],label                bbr1    [],label
6432                 bbr2    [],label                bbr3    [],label
6433                 bbr4    [],label                bbr5    [],label
6434                 bbr6    [],label                bbr7    [],label
6435
6436                 bbs0    [],label                bbs1    [],label
6437                 bbs2    [],label                bbs3    [],label
6438                 bbs4    [],label                bbs5    [],label
6439                 bbs6    [],label                bbs7    [],label
6440
6441                 bra     label
6442
6443                 phx                             phy
6444                 plx                             ply
6445
6446                 rmb0    []                      rmb1    []
6447                 rmb2    []                      rmb3    []
6448                 rmb4    []                      rmb5    []
6449                 rmb6    []                      rmb7    []
6450
6451                 smb0    []                      smb1    []
6452                 smb2    []                      smb3    []
6453                 smb4    []                      smb5    []
6454                 smb6    []                      smb7    []
6455
6456                 stz     []
6457                 trb     []
6458                 tsb     []
6459
6460            Additional  addressing  modes for the following core instruc-
6461         tions are also available with the 65C02, 65C102, and 65C112 pro-
6462         cessors.
6463
6464                 adc     []                      and     []
6465                 cmp     []                      eor     []
6466                 lda     []                      ora     []
6467                 sbc     []                      sta     []
6468
6469                 bit     []                      jmp     []
6470
6471                 dec                             inc
6472 </PRE></B>
6473
6474 <IMG width=576 height=5 border=0 SRC="rnbow.gif">
6475
6476 <P><a href="../home.htm">
6477 <IMG width=32 height=32 border=0 SRC="spcshp.gif" ALIGN=BOTTOM></a>
6478 <B>...  Home Page</B></P>
6479 </BODY>
6480 </HTML>