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