diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /sdas/doc | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'sdas/doc')
| -rw-r--r-- | sdas/doc/README | 460 | ||||
| -rw-r--r-- | sdas/doc/abstra.txt | 60 | ||||
| -rw-r--r-- | sdas/doc/appendk.txt | 158 | ||||
| -rw-r--r-- | sdas/doc/asmlnk.txt | 9711 | ||||
| -rw-r--r-- | sdas/doc/format.txt | 142 |
5 files changed, 10531 insertions, 0 deletions
diff --git a/sdas/doc/README b/sdas/doc/README new file mode 100644 index 0000000..7b8effa --- /dev/null +++ b/sdas/doc/README @@ -0,0 +1,460 @@ +(README 2-Apr-1998 by John Hartman. jhartman@compuserve.com) + +I have made several modifications to the CUG292 assemblers and +linker, beginning with version 1.7 (the most recent I know of). + +The original assembler was written by + * Alan R. Baldwin + * 721 Berkeley St. + * Kent, Ohio 44240 + +To conserve space on my web site, this ZIP file does not include all +of the files in the original CUG292 release. In particular, the +assembler test files and ASSIST monitors have been removed. All source +files and documents are included. The original is widely available +on the net. + +Your comments and bug reports are solicited. + +The changes are of three types +1) bug fixes and small changes +2) an 8051 version of the assembler +3) generation of line and symbol information for NoICE + +======================================================================== +MISCELLANEOUS CHANGES + +* There is a bug in LKMAIN: it tests S_DEF flag in "s_flag". + No one else uses s_flag in the linker - S_DEF is defined in s_type + instead. Presumably LKMAIN should use s_type as well? Changed. + +* There is a portability problem in aslex: the test + while (ctype[c=get()] & ~(SPACE | ILL)) + causes an infinite loop with my (old Zortech) compiler: + ILL = 0x80, SPACE=0. When I read a null at the end of a line, + ctype[] returns "ILL". My compiler sign extends this 0x80 to int 0xFF80. + Sign extend on ~ILL makes 0x7F into 0xFF7F. The result of the AND is + true and we spin. I changed this to + while (ctype[c=get()] & (0xFF - (SPACE|ILL))) + +* I made changes to mlookup() so that mnemonics and pseudo-ops are always + case insensitive, regardless of the CASE_SENSITIVE flag. This simplifies + using the assembler on existing code. + +* The scheme described below for debug information can make for very long + symbol names. Thus, I have modified the assembler and linker to allow + names up to 80 characters, moving the name strings out of the sym struct. + This will save significant heap space over simply increasing NCPS to 80. + +* I have added one module, ASNOICE.C, to each assembler; and one module, + LKNOICE.C, to the linker. My make files are named XSnnnn.MAK for the + asseblers, and XSLINK.MAK for the linker. I have not modified any + of the original make or project files, since I have no means to test + them. + +======================================================================== +8051 ASSEMBLER + +I was somewhat surprised that there was no AS8051 - so I wrote one. +It is comprised of the modules: + i8051.h + i51pst.c + i51mch.c + i51adr.c + i51ext.c + appendk.txt "Appendix K" about the 8051 for the documentation + +I added four attributes to the .area directive to support +the 8051's multiple address spaces: + CODE for codespace + DATA for internal data + BIT for internal bit-addressable + XDATA for external data. + +These will typically be used as follows (names are examples): + .area IDATA (DATA) + .area IBIT (BIT) + .area MYXDATA (REL,CON,XDATA) + .area MYCODE (REL,CON,CODE) + +The default segment, _CODE, should not be used for the 8051. For +compatibility reasons, _CODE is allocated in "DATA" space. You +should always define an area in the CODE space. + +DETAILS: + +i51mch.c is not especially pretty - it includes some brute-force switch +statements which could, I suspect, be trimmed down by application of +a few appropriate functions. + +The 8051 includes two instructions, AJMP and ACALL, which have eleven +bit destination addresses. The upper three address bits are encoded +into the top three bits of the op-code. In order to achieve this, I +was forced to make changes to several ASxxx and LKxxx modules: + asm.h line 179 equate for R_J11, 583 outr11 prototype + asout.c lines 1087-1132 function outr11: output 11 bit dest + aslink.h line 131 equate for R_J11 + lkrloc.c lines 354-377 link/locate 11 bit destination + +The definition of R_J11 is as (R_WORD | R_BYT2) +A comment in lkrloc says + * R_WORD with the R_BYT2 mode is flagged + * as an 'r' error by the assembler, + * but it is processed here anyway. +This is no longer true, so the code in question is #defined out +in the linker only. I suspect that this would cause problems +if a module with R_WORD | R_BYT1 by other cause were to be processed. + +I am not entirely happy with outr11 in the case where the destination +is an absolute value. The ideal would be to pass the value thru to the +linker, and resolve at link time whether or not the address is within +2K of the instruction location. Unfortunately, I couldn't figure out +how to pass an absolute value to the linker, as it has no area. Thus, +I interpreted absolute values as being relative to the beginning of the +current area, as is done in the other assemblers for relative branch +instructions. I am less happy with this solution here, as a 2K range +is far larger than the +-128 for a branch instruction. I can envision +code such as + reset = 123 + ... + ajmp reset + +If the ajmp is in a relocatable area, the effect will be not at all what +is desired. If you can offer any other solution, I would appreciate it. + +======================================================================== +SOURCE-LEVEL DEBUG OF ASSEMBLY CODE WITH NoICE + +1) The switch "-j" has been added to the assembler. This causes + assembly lines to generate line number information in the object + file. You may also wish to use the "-a" switch to make all symbols + global. Non-global symbols are not passed to the object file. + +2) The assemblers will pass any line beginning with the characters + ";!" (semi-colon, exclamation point) intact to the object file. + You can use such comments in your assembly modules to embed NoICE + commands in your source code. + +3) The switch "-j" has been added to the linker. This causes a + NoICE debug file, with extension ".NOI" to be created. All symbol + and line number information in the object files, as well as any + ";!" comments will be included. Specifying the -j switch will force + a map file to be produced as well. + +4) The linker will process any line beginning with the characters + ";!" (semi-colon, exclamation point) by removing the ";!" and + passing the remainder of the line to the .NOI file (if any). + This allows NoICE commands to be placed as ";!" comments in + the assembly file, and passed through the assember and linker + to the .NOI file. + +5) If the linker is requested to produce a hex output file (-i or -s + switches), a LOAD command for the hex file will be placed in the + .NOI file (if any). + +6) The linker will output the ";!" lines after all symbols have been + output. Thus, such lines can contain NoICE commands which refer to + symbols by name. + +======================================================================== +SOURCE-LEVEL DEBUG OF C CODE FOR NoICE + +This section is primarily of interest to compiler writers. + +Compilers which produce assembly code can pass debug information +through the assembler and linker to the NoICE command file. In +addition, the linker will provide special processing of symbols +with certain formats described below. + +1) The switch "-j" should NOT be used on assembly files which + represent compiler output. Instead, the compiler should generate + line number symbols for each code-producing source line as + described below. if your project contains a mixture of C and assembly + source files, you may wish to use "-j" on the assembly modules. + +2) The assemblers will pass any line beginning with the characters + ";!" (semi-colon, exclamation point) intact to the .REL file. + The compiler can make use of this fact to pass datatype information + and stack offsets for automatic symbols through the assembler and + linker to NoICE. This is described in detail below. + +3) The switch "-j" has been added to the linker. This causes a + NoICE debug file, with extension ".NOI" to be created. Contents + will be as described below. Specifying the -j switch will force + a map file to be produced as well. + +4) The linker will process any line beginning with the characters + ";!" (semi-colon, exclamation point) by removing the ";!" and + passing the remainder of the line to the .NOI file (if any). + +5) If the linker is requested to produce a hex output file (-i or -s + switches), a LOAD command for the hex file will be placed in the + .NOI file (if any). + +6) The linker will process symbols with names of the form + text + + into NoICE DEFINE (global symbol) commands in the .NOI output file + DEF name symbolvalue + +7) The linker will process symbols with names of the form + text.integer + + into NoICE FILE and LINE (line number) commands in the .NOI output file. + It will assume that "text" is the file name without path or extension, + that "integer" is the decimal line number within the file, and that + the value of the symbol is equal to the address of the first instruction + produced by the line. + +8) The linker will process symbols with names of the form + text.name + + into NoICE FILE and DEFINESCOPED commands in the .NOI file + (if any), to define file-scope variables: + FILE text + DEFS name symbolvalue + +9) The linker will process symbols with names of the form + text.name.name2 + + into NoICE FILE, FUNCTION, and DEFINESCOPED commands in the + .NOI file (if any), to define function-scope variables: + FILE text + FUNC name + DEFS name2 symbolvalue + +10) The linker will process symbols with names of the form + text.name.name2.integer + + into NoICE FILE, FUNCTION, and DEFINESCOPED commands in the + .NOI file (if any), to define function-scope variables, to allow + multiple scopes within a single C function. "Integer" is a scope + number, and should be zero for the first scope, and increment + for each new scope within the function. Since NoICE cannot currently + cope with scope finer than function, it will produce symbols of + the form: + FILE text + FUNC name + DEFS name2_integer symbolvalue + + The trailing "_integer" will be omitted for integer == 0 (function). + +11) The linker will process symbols with names of the form + text.name..FN + + into NoICE FILE, DEFINE, and FUNCTION commands in the .NOI + file (if any), to define the start of a global function: + FILE text + DEF name symbolvalue %code + FUNC name symbolvalue + +12) The linker will process symbols with names of the form + text.name..SFN + + into NoICE FILE, DEFINESCOPED, and SFUNCTION commands in the .NOI + file (if any), to define the start of a file-scope (static) + function: + FILE text + DEFS name symbolvalue %code + SFUNC name symbolvalue + +13) The linker will process symbols with names of the form + text.name..EFN + + into NoICE ENDFUNCTION commands in the .NOI file (if any) to + define the end of a global or file-scope function: + ENDF name symbolvalue + +14) The linker will output the symbols in each "area" or memory + section in order of increasing address. + +15) The linker will output the ";!" lines after all symbols + have been output. + +The features listed above may be used to add full source-level +debug information to assembly files produced by a compiler. The +example file ctest1.c, and the hypothetical ctest1.s produced by +compiling it illustrate this. The comments in the file describe +the information, but would not be present in an actual implementation. + +1) Begin each file with a ";!FILE" specifying the file name and its + original extension (usually ".c"), and with the path if the file is + not in the current directory. + ;!FILE ctest1.c + +2) Define any basic data types: char defaults to S08. Redefine as U08 or + ASCII if you desire. "int" defaults to S16. Redefine if necessary. + ;!DEFT 0 char %ASCII + +3) Define any data structures, typedefs, enums, etc. (C generally + does this per source file. Types will remain in scope unless + redefined). For example, the C structure + + typedef struct { + char c; + int i; + int ai[ 10 ]; + int *pi; + } STR; + + would generate the commands: + ;!STRUCT 0. STR + ;!DEFT 0. c %char + ;!DEFT 1. i %int + ;!DEFT 3. ai %int[10.] + ;!DEFT 23. pi %*int + ;!ENDS 25. + + Since the user can change input radix at will, it is generally + recommended to specify radix explicitly in the ;! commands: by + a trailing "." for decimal, or leading "0x" for hex. + +4) Use ;!FUNC, (or ;!SFUNC), ;!DEFS, and ;!ENDF to define any + function arguments and local variables. The function + void main( void ) + { + /* declare some local variables */ + char lc, *plc; + int *pli; + int *lnpi; + int *lfpi; + ... + + would generate stack-based symbol definitions with their datatypes. + (Note that the stack offsets are not passed to the assembler by + name, as they need not be relocated. Thus, it is the compiler's + duty to generate these. Note that the 68HC11 TSX instruction + increments the value of SP by one. Thus, "SP+nn" should use + "nn" values one greater than for use as offsets from X. + ;!FUNC main + ;!DEFS lfpi SP+6. %*int + ;!DEFS lnpi SP+8. %*int + ;!DEFS pli SP+10. %*int + ;!DEFS plc SP+12. %*char + ;!DEFS lc SP+14. %char + + When all local variables and parameters have been defined, the + function scope must be closed: + ;!ENDF + +5) In general, it is desirable to generate two symbols for each + function: one with an underbar, at the first byte of the + function, so that the disassembler will show it as the destination + of the JSR; and a second without an underbar at the address of + the first source line after stack frame is set up. The latter + will be a common breakpoint location. + + CUG292 can generate global symbols by using a "::" + _main:: + tsx + xgdx + subd #44 + xgdx + txs + +6) Once the stack frame is set up, declare the beginning of the + function body. The value of this symbol is the lowest address + which NoICE will consider to be within the function for scoping + purposes. + ctest1.main..FN:: + +7) Each C source line which produces code should emit a symbol + consisting of the file name without path or extension, followed + by the line number (in decimal) in the C source file. + ctest1.56:: + ldd #6 + std _gestr + +8) Declare the end of the function body. The value of this symbol + is the highest address which NoICE will consider to be within the + function for scoping purposes. The address must be on or before + the RTS, so that it does not overlap the following function. + Normally, the address will be the last C source line in the + function before stack frame is destroyed. + ctest1.main..EFN:: + xgdx + addd #44 + xgdx + txs + rts + +9) Global variables defined in the file, and their datatypes, may be + defined at any time. Debugging is most convenient if the + traditional C leading underbar is omitted. The global declarations + int gi; + STR *pgstr; + + would generate: + ;!DEF gi %*int + gi:: + .blkb 2 + + ;!DEF pgstr %*STR + pgstr:: + .blkb 2 + + Here, the ";!" command defines the datatype, which is unknown to + the assembler, while the "::" defintion defines the value, which + is unknown until link time. + +10) File-scope static variables, and their datatypes, must be defined + between the ;!FILE and the ;!ENDFILE in order to set proper scope. + Debugging is most convenient if the traditional C leading underbar + is omitted. The static declarations + static int si; + static STR sstr; + + would generate: + ;!DEFS si %*int + ctest1.si:: + .blkb 2 + + ;!DEFS sstr %STR + ctest1.sstr:: + .blkb 25 + + We note that while the ;!DEFS must be between ;!FILE and ;!ENDFILE, + the "::" definitions may be elsewhere in the file if it is + convenient, as the symbol name carries the scoping information. + +11) Function-scope static variables, and their datatypes, must be + defined between the ;!FUNC (or ;!SFUNC) and the corresponding + ;!ENDF in order to set proper scope. Debugging is most convenient + if the traditional C leading underbar is omitted. The static + declarations + void main( void ) + { + static int si; + static STR sstr; + + would generate: + ;!FUNC main + + at some point, and then + ;!DEFS si %*int + ctest1.main.si:: + .blkb 2 + + ;!DEFS sstr %STR + ctest1.main.sstr:: + .blkb 25 + + We note that while the ;!DEFS must be between ;!FUNC and ;!ENDF, + the "::" definitions may be elsewhere in the file if it is + convenient, as the symbol name carries the scoping information. + +12) After all code, data, and ;! defintions, declare end of file. + This is necessary to prevent mangled scope when several modules + are linked together. + ;!ENDFILE + + CTEST1.C - sample C source code + CTEST1.S - output from ImageCraft compiler, hand-doctored + to add additional debug information + CTEST2.C - second C module + CTEST2.S - output from ImageCraft compiler, undoctored + CTEST.BAT - assemble and link CTEST1+CTEST2 + +Run CTEST.BAT to produce CTEST1.NOI, a NoICE command file. + +end README diff --git a/sdas/doc/abstra.txt b/sdas/doc/abstra.txt new file mode 100644 index 0000000..e684232 --- /dev/null +++ b/sdas/doc/abstra.txt @@ -0,0 +1,60 @@ + + + ASxxxx Cross Assemblers, Version 1.7, November 1995 + + Submitted by Alan R. Baldwin, + Kent State University, Kent, Ohio + + Operating System: TSX+, RT-11, MS/DOS, PDOS + or other supporting K&R C. + + Source Langauge: C + + Abstract: + + The ASxxxx assemblers are a series of microprocessor assem- + blers written in the C programming language. This collection + contains cross assemblers for the 6800(6802/6808), 6801(hd6303), + 6804, 6805, 68HC08, 6809, 6811, 68HC16, 8085(8080), + z80(hd64180), H8/3xx, and 6500 series microprocessors. Each as- + sembler has a device specific section which includes: (1) + device description, byte order, and file extension information, + (2) a table of assembler general directives, special directives, + assembler mnemonics and associated operation codes, (3) machine + specific code for processing the device mnemonics, addressing + modes, and special directives. + + The assemblers have a common device independent section which + handles the details of file input/output, symbol table genera- + tion, program/data areas, expression analysis, and assembler + directive processing. + + The assemblers provide the following features: (1) alpha- + betized, formatted symbol table listings, (2) relocatable object + modules, (3) global symbols for linking object modules, (4) con- + ditional assembly directives, (5) reusable local symbols, and + (6) include-file processing. + + The companion program ASLINK is a relocating linker perform- + ing the following functions: (1) bind multiple object modules + into a single memory image, (2) resolve inter-module symbol + references, (3) resolve undefined symbols from specified + librarys of object modules, (4) process absolute, relative, con- + catenated, and overlay attributes in data and program sections, + (5) perform byte and word program-counter relative (pc or pcr) + addressing calculations, (6) define absolute symbol values at + link time, (7) define absolute area base address values at link + time, (8) produce Intel Hex or Motorola S19 output file, (9) + produce a map of the linked memory image, and (10) update the + ASxxxx assembler listing files with the absolute linked ad- + dresses and data. + + The assemblers and linker have been tested using DECUS C + under TSX+ and RT-11, PDOS C V5.4b, and Symantec C/C++ V6.1/V7.0 + under DOS/Windows 3.x. Complete source code and documentation + for the assemblers and linker is included with the distribution. + Additionally, test code for each assembler and several micropro- + cessor monitors ( ASSIST05 for the 6805, MONDEB and ASSIST09 for + the 6809, and BUFFALO 2.5 for the 6811) are included as working + examples of use of these assemblers. +
\ No newline at end of file diff --git a/sdas/doc/appendk.txt b/sdas/doc/appendk.txt new file mode 100644 index 0000000..ec23296 --- /dev/null +++ b/sdas/doc/appendk.txt @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + APPENDIX K + + AS8051 ASSEMBLER + + + + + + K.1 8051 REGISTER SET + + The following is a list of the 8051 registers used by AS8051: + + a,b - 8-bit accumulators + r0,r1,r2,r3 - 8-bit registers + r4,r5,r6,r7 + dptr - data pointer + sp - stack pointer + pc - program counter + psw - status word + c - carry (bit in status word) + + + K.2 8051 INSTRUCTION SET + + + The following tables list all 8051 mnemonics recognized + by the AS8051 assembler. The following list specifies the + format for each addressing mode supported by AS8051: + + #data immediate data + byte or word data + + r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7 + + @r indirect on register r0 or r1 + @dptr indirect on data pointer + @a+dptr indirect on accumulator plus data pointer + @a+pc indirect on accumulator plus program counter + + addr direct memory address + + bitaddr bit address + + label call or jump label + + The terms data, addr, bitaddr, and label may all be expressions. + + Note that not all addressing modes are valid with every in- + struction. Refer to the 8051 technical data for valid + modes. + + + K.2.1 Inherent Instructions + + nop + + + K.2.6 Move Instructions + + mov a,#data mov a,addr + mov a,r mov a,@r + + mov r,#data mov r,addr + mov r,a + + mov addr,a mov addr,#data + mov addr,r mov addr,@r + mov addr1,addr2 mov bitaddr,c + + mov @r,#data mov @r,addr + mov @r,a + + mov c,bitaddr + mov dptr,#data + + movc a,@a+dptr movc a,@a+pc + movx a,@dptr movx a,@r + movx @dptr,a movx @r,a + + + K.2.8 Single Operand Instructions + + clr a clr c + clr bitaddr + cpl a cpl c + cpl bitaddr + setb c setb bitaddr + + da a + rr a rrc a + rl a rlc a + swap a + + dec a dec r + dec @r + inc a inc r + inc dptr inc @r + + div ab mul ab + + pop addr push addr + + + K.2.8 Two Operand Instructions + + add a,#data add a,addr + add a,r add a,@r + addc a,#data addc a,addr + addc a,r addc a,@r + subb a,#data subb a,addr + subb a,r subb a,@r + orl a,#data orl a,addr + orl a,r orl a,@r + orl addr,a orl addr,#data + orl c,bitaddr orl c,/bitaddr + anl a,#data anl a,addr + anl a,r anl a,@r + anl addr,a anl addr,#data + anl c,bitaddr anl c,/bitaddr + xrl a,#data xrl a,addr + xrl a,r xrl a,@r + xrl addr,a xrl addr,#data + xrl c,bitaddr xrl c,/bitaddr + xch a,addr xch a,r + xch a,@r xchd a,@r + + + K.2.3 Call and Return Instructions + + acall label lcall label + ret reti + + K.2.4 Jump Instructions + + ajmp label + cjne a,#data,label cjne a,addr,label + cjne r,#data,label cjne @r,#data,label + djnz r,label djnz addr,label + jbc bitadr,label + jb bitadr,label jnb bitadr,label + jc label jnc label + jz label jnz label + jmp @a+dptr + ljmp label sjmp label diff --git a/sdas/doc/asmlnk.txt b/sdas/doc/asmlnk.txt new file mode 100644 index 0000000..95ba073 --- /dev/null +++ b/sdas/doc/asmlnk.txt @@ -0,0 +1,9711 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + SDCC ASxxxx Assemblers + + + and + + + SDCC ASLINK Relocating Linker + + + CHAPTER 1 THE ASSEMBLER 1-1 + 1.1 THE ASXXXX ASSEMBLERS 1-1 + 1.1.1 Assembly Pass 1 1-2 + 1.1.2 Assembly Pass 2 1-2 + 1.1.3 Assembly Pass 3 1-2 + 1.2 SOURCE PROGRAM FORMAT 1-3 + 1.2.1 Statement Format 1-3 + 1.2.1.1 Label Field 1-3 + 1.2.1.2 Operator Field 1-5 + 1.2.1.3 Operand Field 1-5 + 1.2.1.4 Comment Field 1-6 + 1.3 SYMBOLS AND EXPRESSIONS 1-6 + 1.3.1 Character Set 1-6 + 1.3.2 User-Defined Symbols 1-10 + 1.3.3 Reusable Symbols 1-10 + 1.3.4 Current Location Counter 1-12 + 1.3.5 Numbers 1-13 + 1.3.6 Terms 1-14 + 1.3.7 Expressions 1-14 + 1.4 GENERAL ASSEMBLER DIRECTIVES 1-16 + 1.4.1 .module Directive 1-16 + 1.4.2 .title Directive 1-16 + 1.4.3 .sbttl Directive 1-17 + 1.4.4 .list and .nlist Directives 1-17 + 1.4.5 .page Directive 1-18 + 1.4.8 .byte, .db, and .fcb Directives 1-20 + 1.4.9 .word, .dw, and .fdb Directives 1-21 + 1.4.10 .3byte and .triple Directives 1-21 + 1.4.11 .4byte and .quad Directive 1-22 + 1.4.12 .blkb, .ds, .rmb, and .rs Directives 1-22 + 1.4.13 .blkw, .blk3, and .blk4 Directives 1-22 + 1.4.14 .ascii, .str, and .fcc Directives 1-23 + 1.4.15 .ascis and .strs Directives 1-23 + 1.4.16 .asciz and .strz Directives 1-24 + 1.4.18 .radix Directive 1-25 + 1.4.19 .even Directive 1-25 + 1.4.20 .odd Directive 1-25 + 1.4.21 .bndry Directive 1-26 + 1.4.22 .area Directive 1-27 + 1.4.24 .org Directive 1-30 + 1.4.25 .globl Directive 1-31 + 1.4.26 .local Directive 1-31 + 1.4.27 .equ, .gblequ, and .lclequ Directives 1-32 + 1.4.28 .if, .else, and .endif Directives 1-33 + 1.4.29 .iff, .ift, and .iftf Directives 1-34 + 1.4.30 .ifxx Directives 1-35 + 1.4.31 .ifdef Directive 1-36 + 1.4.32 .ifndef Directive 1-37 + 1.4.33 .ifb Directive 1-38 + 1.4.34 .ifnb Directive 1-39 + 1.4.35 .ifidn Directive 1-40 + 1.4.36 .ifdif Directive 1-41 + + + Page ii + + + + 1.4.37 Alternate .if Directive Forms 1-42 + 1.4.38 Immediate Conditional Assembly Directives 1-43 + 1.4.39 .include Directive 1-44 + 1.4.40 .define and .undefine Directives 1-45 + 1.4.41 .setdp Directive 1-46 + 1.4.42 .16bit, .24bit, and .32bit Directives 1-48 + 1.4.45 .end Directive 1-49 + 1.5 INVOKING ASXXXX 1-50 + 1.6 ERRORS 1-52 + 1.7 LISTING FILE 1-54 + 1.8 SYMBOL TABLE FILE 1-56 + 1.9 OBJECT FILE 1-57 + + CHAPTER 2 THE MACRO PROCESSOR 2-1 + 2.1 DEFINING MACROS 2-1 + 2.1.1 .macro Directive 2-2 + 2.1.2 .endm Directive 2-3 + 2.1.3 .mexit Directive 2-3 + 2.2 CALLING MACROS 2-4 + 2.3 ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS 2-5 + 2.3.1 Macro Nesting 2-6 + 2.3.2 Special Characters in Macro Arguments 2-7 + 2.3.3 Passing Numerical Arguments as Symbols 2-7 + 2.3.4 Number of Arguments in Macro Calls 2-9 + 2.3.5 Creating Local Symbols Automatically 2-9 + 2.3.6 Concatenation of Macro Arguments 2-10 + 2.4 MACRO ATTRIBUTE DIRECTIVES 2-11 + 2.4.1 .narg Directive 2-12 + 2.4.2 .nchr Directive 2-13 + 2.4.3 .ntyp Directive 2-14 + 2.4.4 .nval Directive 2-14 + 2.5 INDEFINITE REPEAT BLOCK DIRECTIVES 2-15 + 2.5.1 .irp Directive 2-16 + 2.5.2 .irpc Directive 2-17 + 2.6 REPEAT BLOCK DIRECTIVE 2-18 + 2.6.1 .rept 2-18 + 2.7 MACRO DELETION DIRECTIVE 2-19 + 2.7.1 .mdelete 2-19 + 2.8 MACRO INVOCATION DETAILS 2-19 + 2.9 BUILDING A MACRO LIBRARY 2-20 + 2.9.1 .mlib Macro Directive 2-21 + 2.9.2 .mcall Macro Directive 2-22 + 2.10 EXAMPLE MACRO CROSS ASSEMBLERS 2-24 + + CHAPTER 3 THE LINKER 3-1 + 3.1 ASLINK RELOCATING LINKER 3-1 + 3.2 INVOKING ASLINK 3-2 + 3.3 LIBRARY PATH(S) AND FILE(S) 3-5 + 3.4 ASLINK PROCESSING 3-6 + + + Page iii + + + + 3.6 ASXXXX VERSION 3.XX LINKING 3-15 + 3.6.1 Object Module Format 3-15 + 3.6.2 Header Line 3-15 + 3.6.3 Module Line 3-16 + 3.6.4 Area Line 3-16 + 3.6.5 Symbol Line 3-16 + 3.6.6 T Line 3-16 + 3.6.7 R Line 3-17 + 3.6.8 P Line 3-17 + 3.6.9 24-Bit and 32-Bit Addressing 3-18 + 3.6.10 ASlink V3.xx Error Messages 3-18 + 3.7 INTEL IHX OUTPUT FORMAT (16-BIT) 3-21 + 3.8 INTEL I86 OUTPUT FORMAT (24 OR 32-BIT) 3-22 + 3.9 MOTORLA S1-S9 OUTPUT FORMAT (16-BIT) 3-23 + + CHAPTER 4 BUILDING ASXXXX AND ASLINK 4-1 + 4.1 BUILDING ASXXXX AND ASLINK WITH LINUX 4-2 + 4.2 BUILDING ASXXXX AND ASLINK UNDER CYGWIN 4-2 + 4.3 BUILDING ASXXXX AND ASLINK WITH DJGPP 4-3 + 4.4 BUILDING ASXXXX AND ASLINK WITH BORLAND'S + TURBO C++ 3.0 4-3 + 4.4.1 Graphical User Interface 4-3 + 4.4.2 Command Line Interface 4-4 + 4.5 BUILDING ASXXXX AND ASLINK WITH + MS VISUAL C++ 6.0 4-5 + 4.5.1 Graphical User Interface 4-5 + 4.5.2 Command Line Interface 4-5 + 4.6 BUILDING ASXXXX AND ASLINK WITH + MS VISUAL STUDIO 2005 4-6 + 4.6.1 Graphical User Interface 4-6 + 4.6.2 Command Line Interface 4-6 + 4.7 BUILDING ASXXXX AND ASLINK WITH + MS VISUAL STUDIO 2010 4-7 + 4.7.1 Graphical User Interface 4-7 + 4.7.2 Command Line Interface 4-7 + 4.8 BUILDING ASXXXX AND ASLINK WITH + OPEN WATCOM V1.9 4-8 + + + Page iv + + + + 4.8.1 Graphical User Interface 4-8 + 4.8.2 Command Line Interface 4-8 + 4.9 BUILDING ASXXXX AND ASLINK WITH + SYMANTEC C/C++ V7.2 4-9 + 4.9.1 Graphical User Interface 4-9 + 4.9.2 Command Line Interface 4-9 + 4.10 THE _CLEAN.BAT AND _PREP.BAT FILES 4-10 + + + APPENDIX AK AS68(HC[S])08 ASSEMBLER AK-1 + AK.1 PROCESSOR SPECIFIC DIRECTIVES AK-1 + AK.1.1 .hc08 Directive AK-1 + AK.1.2 .hcs08 Directive AK-1 + AK.1.3 .6805 Directive AK-2 + AK.1.4 .hc05 Directive AK-2 + AK.1.5 The .__.CPU. Variable AK-2 + AK.2 68HC(S)08 REGISTER SET AK-3 + AK.3 68HC(S)08 INSTRUCTION SET AK-3 + AK.3.1 Control Instructions AK-4 + AK.3.2 Bit Manipulation Instructions AK-4 + AK.3.3 Branch Instructions AK-4 + AK.3.4 Complex Branch Instructions AK-5 + AK.3.5 Read-Modify-Write Instructions AK-5 + AK.3.6 Register\Memory Instructions AK-6 + AK.3.7 Double Operand Move Instruction AK-6 + AK.3.8 16-Bit <H:X> Index Register Instructions AK-6 + AK.3.9 Jump and Jump to Subroutine Instructions AK-6 + + + + Page ix + + + + APPENDIX AR AS8051 ASSEMBLER AR-1 + AR.1 ACKNOWLEDGMENT AR-1 + AR.2 8051 REGISTER SET AR-1 + AR.3 8051 INSTRUCTION SET AR-2 + AR.3.1 Inherent Instructions AR-2 + AR.3.2 Move Instructions AR-3 + AR.3.3 Single Operand Instructions AR-3 + AR.3.4 Two Operand Instructions AR-4 + AR.3.5 Call and Return Instructions AR-4 + AR.3.6 Jump Instructions AR-4 + AR.3.7 Predefined Symbols: SFR Map AR-5 + AR.3.8 Predefined Symbols: SFR Bit Addresses AR-6 + AR.3.9 Predefined Symbols: Control Bits AR-7 + + + Page x + + + + APPENDIX AT AS8XCXXX ASSEMBLER AT-1 + AT.1 ACKNOWLEDGMENTS AT-1 + AT.2 AS8XCXXX ASSEMBLER DIRECTIVES AT-1 + AT.2.1 Processor Selection Directives AT-1 + AT.2.2 .cpu Directive AT-2 + AT.2.3 Processor Addressing Range Directives AT-3 + AT.2.4 The .__.CPU. Variable AT-3 + AT.2.5 DS80C390 Addressing Mode Directive AT-4 + AT.2.6 The .msb Directive AT-4 + AT.3 DS8XCXXX REGISTER SET AT-6 + AT.4 DS8XCXXX INSTRUCTION SET AT-6 + AT.4.1 Inherent Instructions AT-7 + AT.4.2 Move Instructions AT-7 + AT.4.3 Single Operand Instructions AT-7 + AT.4.4 Two Operand Instructions AT-8 + AT.4.5 Call and Return Instructions AT-8 + AT.4.6 Jump Instructions AT-8 + AT.5 DS8XCXXX SPECIAL FUNCTION REGISTERS AT-9 + AT.5.1 SFR Map AT-9 + AT.5.2 Bit Addressable Registers: Generic AT-10 + AT.5.3 Bit Addressable Registers: Specific AT-11 + AT.5.4 Optional Symbols: Control Bits AT-12 + AT.6 DS80C310 SPECIAL FUNCTION REGISTERS AT-13 + AT.6.1 SFR Map AT-13 + AT.6.2 Bit Addressable Registers: Generic AT-14 + AT.6.3 Bit Addressable Registers: Specific AT-15 + AT.6.4 Optional Symbols: Control Bits AT-16 + AT.7 DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS AT-17 + AT.7.1 SFR Map AT-17 + AT.7.2 Bit Addressable Registers: Generic AT-18 + AT.7.3 Bit Addressable Registers: Specific AT-19 + AT.7.4 Optional Symbols: Control Bits AT-20 + AT.8 DS80C390 SPECIAL FUNCTION REGISTERS AT-21 + AT.8.1 SFR Map AT-21 + AT.8.2 Bit Addressable Registers: Generic AT-22 + AT.8.3 Bit Addressable Registers: Specific AT-23 + AT.8.4 Optional Symbols: Control Bits AT-24 + AT.9 DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS AT-26 + AT.9.1 SFR Map AT-26 + AT.9.2 Bit Addressable Registers: Generic AT-27 + AT.9.3 Bit Addressable Registers: Specific AT-28 + AT.9.4 Optional Symbols: Control Bits AT-29 + AT.10 DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS AT-30 + AT.10.1 SFR Map AT-30 + AT.10.2 Bit Addressable Registers: Generic AT-31 + AT.10.3 Bit Addressable Registers: Specific AT-32 + AT.10.4 Optional Symbols: Control Bits AT-33 + AT.11 DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS AT-34 + AT.11.1 SFR Map AT-34 + AT.11.2 Bit Addressable Registers: Generic AT-36 + AT.11.3 Bit Addressable Registers: Specific AT-37 + AT.11.4 Optional Symbols: Control Bits AT-39 + + + Page xi + + + + APPENDIX AY ASGB ASSEMBLER AY-1 + AY.1 ACKNOWLEDGEMENT AY-1 + AY.2 INTRODUCTION AY-1 + AY.3 GAMEBOY REGISTER SET AND CONDITIONS AY-1 + AY.4 GAMEBOY INSTRUCTION SET AY-2 + AY.4.1 .tile Directive AY-2 + AY.4.2 Potentially Controversial Mnemonic Selection AY-4 + AY.4.2.1 Auto-Indexing Loads AY-4 + AY.4.2.2 Input and Output Operations AY-4 + AY.4.2.3 The 'stop' Instruction AY-5 + AY.4.3 Inherent Instructions AY-5 + AY.4.4 Implicit Operand Instructions AY-5 + AY.4.5 Load Instructions AY-6 + AY.4.6 Call/Return Instructions AY-6 + AY.4.7 Jump Instructions AY-6 + AY.4.8 Bit Manipulation Instructions AY-6 + AY.4.9 Input and Output Instructions AY-7 + AY.4.10 Register Pair Instructions AY-7 + + APPENDIX BC ASRAB ASSEMBLER BC-1 + BC.1 ACKNOWLEDGMENT BC-1 + BC.2 PROCESSOR SPECIFIC DIRECTIVES BC-1 + BC.2.1 .r2k Directive BC-2 + BC.2.2 .hd64 Directive BC-2 + BC.2.3 .z80 Directive BC-2 + BC.2.4 The .__.CPU. Variable BC-3 + BC.3 RABBIT 2000/3000 ADDRESSING AND INSTRUCTIONS BC-4 + BC.3.1 Instruction Symbols BC-4 + BC.3.2 Rabbit Instructions BC-6 + BC.4 Z80/HD64180 ADDRESSING AND INSTRUCTIONS BC-8 + BC.4.1 Inherent Instructions BC-9 + BC.4.2 Implicit Operand Instructions BC-9 + BC.4.3 Load Instruction BC-10 + BC.4.4 Call/Return Instructions BC-10 + BC.4.5 Jump and Jump to Subroutine Instructions BC-10 + BC.4.6 Bit Manipulation Instructions BC-11 + BC.4.7 Interrupt Mode and Reset Instructions BC-11 + BC.4.8 Input and Output Instructions BC-11 + BC.4.9 Register Pair Instructions BC-11 + BC.4.10 HD64180 Specific Instructions BC-12 + + + Page xiii + + + + APPENDIX BI ASZ80 ASSEMBLER BI-1 + BI.1 .z80 DIRECTIVE BI-1 + BI.2 .hd64 DIRECTIVE BI-1 + BI.3 THE .__.CPU. VARIABLE BI-2 + BI.4 Z80 REGISTER SET AND CONDITIONS BI-2 + BI.5 Z80 INSTRUCTION SET BI-3 + BI.5.1 Inherent Instructions BI-4 + BI.5.2 Implicit Operand Instructions BI-4 + BI.5.3 Load Instruction BI-5 + BI.5.4 Call/Return Instructions BI-5 + BI.5.5 Jump and Jump to Subroutine Instructions BI-5 + BI.5.6 Bit Manipulation Instructions BI-6 + BI.5.7 Interrupt Mode and Reset Instructions BI-6 + BI.5.8 Input and Output Instructions BI-6 + BI.5.9 Register Pair Instructions BI-6 + BI.5.10 HD64180/Z180 Specific Instructions BI-7 + + + Page 2 + + + + + P R E F A C E + + + + + + The ASxxxx assemblers were written following the style of + several unfinished cross assemblers found in the Digital Equip- + ment Corporation Users Society (DECUS) distribution of the C + programming language. The incomplete DECUS code was provided + with no documentation as to the input syntax or the output + format. I wish to thank the author for inspiring me to begin + the development of this set of assemblers. + + The ASLINK program was written as a companion to the ASxxxx + assemblers, its design and implementation was not derived from + any other work. + + I would greatly appreciate receiving the details of any + changes, additions, or errors pertaining to these programs and + will attempt to incorporate any fixes or generally useful + changes in a future update to these programs. + + + + Alan R. Baldwin + Kent State University + Physics Department + Kent, Ohio 44242 + U.S.A. + + + http://shop-pdp.net + http://shop-pdp.kent.edu/ + + baldwin@shop-pdp.net + baldwin@shop-pdp.kent.edu + + baldwin@kent.edu + tel: (330) 672 2531 + fax: (330) 672 2959 + + + Page 3 + + + + + E N D U S E R L I C E N S E A G R E E M E N T + + + + + + Copyright (C) 1989-2012 Alan R. Baldwin + + This program is free software: you can redistribute it + and/or modify it under the terms of the GNU General Public + License as published by the Free Software Foundation, either + version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be use- + ful, but WITHOUT ANY WARRANTY; without even the implied war- + ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/>. + + + Page 4 + + + + + + + + + C O N T R I B U T O R S + + + + Thanks to Marko Makela for his contribution of the AS6500 cross + assembler. + + Marko Makela + Sillitie 10 A + 01480 Vantaa + Finland + Internet: Marko dot Makela at Helsinki dot Fi + EARN/BitNet: msmakela at finuh + + + + + Thanks to John Hartman for his contribution of the AS8051 cross + assembler and updates to the ASxxxx and ASLINK internals. + + John L. Hartman + jhartman at compuserve dot com + noice at noicedebugger dot com + + + + + Thanks to G. Osborn for his contributions to LKS19.C and + LKIHX.C. + + G. Osborn + gary at s-4 dot com + + + + + Thanks to Ken Hornstein for his contribution of object libraries + contained in LKLIBR.C. + + Ken Hornstein + kenh at cmf dot nrl dot navy dot mil + + + + + + + Page 5 + + + + Thanks to Bill McKinnon for his contributions to the AS8XCXXX + cross assembler for the DS8XCXXX series of microprocessors. + + Bill McKinnon + w_mckinnon at conknet dot com + + + + + Thanks to Roger Ivie for his contribution of the ASGB cross as- + sembler for the GameBoy. + + Roger Ivie + ivie at cc dot usu dot edu + + + + + Thanks to Uwe Steller for his contribution of the AS740 cross + assembler. + + Uwe Stellar + Uwe dot Steller at t-online dot de + + + + + Thanks to Shujen Chen for his contribution of the AS1802 cross + assembler. + + Shugen Chen + DeVry University + Tinley Park IL + schen at tp dot devry dot edu + + + + + Thanks to Edgar Puehringer for his contribution of the AS61860 + cross assembler. + + Edgar Puehringer + edgar_pue at yahoo dot com + + + + + + + Page 6 + + + + Thanks to Ulrich Raich and Razaq Ijoduola for their contribution + of the ASRAB cross assembler. + + Ulrich Raich and Razaq Ijoduola + PS Division + CERN + CH-1211 Geneva-23 + Ulrich dot Raich at cern dot ch + + + + + Thanks to Patrick Head for his contribution of the ASEZ80 cross + assembler. + + Patrick Head + patrick at phead dot net + + + + + Thanks to Boisy G. Pitre for contributing the .ifeq, .ifne, + .ifgt, .iflt, .ifle, and .ifge conditional directives and the + Tandy Color Computer Disk Basic binary output for ASLINK. + + Boisy G. Pitre + boisy at boisypitre dot com + + + + + Thanks to Mike McCarty for his contributions to the processor + cycle count option of the ASxxxx Assemblers. + + Mike McCarty + mike dot mccarty at sbcglobal dot net + + + + + Thanks to Mengjin Su for his contribution of the PIC18Fxxx Ex- + tended Instructions. + + Mengjin Su + msu at micron dot com + + + + + + + Page 7 + + + + Thanks to Carl Rash for his contribution of the Visual Studio + 2010 project files. + + Carl Rash + crash at triad dot rr dot com + + + Page 8 + + + + ASxxxx Cross Assemblers, Version 5.05, August 2012 + + Submitted by Alan R. Baldwin, + Kent State University, Kent, Ohio + + Operating System: Linux, Windows, MS-DOS + or other supporting ANSI C. + + Source Langauge: C + + Abstract: + + The ASxxxx assemblers are a series of microprocessor assem- + blers written in the C programming language. This collection + contains cross assemblers for the 1802, S2650, SC/MP, MPS430, + 61860, 6500, 6800(6802/6808), 6801(6803/HD6303), 6804, 6805, + 68HC(S)08, 6809, 68HC11, 68HC(S)12, 68HC16, 740, + 8048(8041/8022/8021) 8051, 8085(8080), DS8xCxxx, AVR, EZ80, + F2MC8L/FX, F8/3870, GameBoy(Z80), H8/3xx, Cypress PSoC(M8C), + PIC, Rabbit 2000/3000, asst6, asst7, asst8, Z8, and Z80(HD64180) + series microprocessors. Each assembler has a device specific + section which includes: (1) device description, byte order, and + file extension information, (2) a table of assembler general + directives, special directives, assembler mnemonics and asso- + ciated operation codes, (3) machine specific code for processing + the device mnemonics, addressing modes, and special directives. + + The assemblers have a common device independent section which + handles the details of file input/output, symbol table genera- + tion, program/data areas, expression analysis, and assembler + directive processing. + + The assemblers provide the following features: (1) alpha- + betized, formatted symbol table listings, (2) relocatable object + modules, (3) global symbols for linking object modules, (4) con- + ditional assembly directives, (5) reusable local symbols, (6) + include-file processing, and (7) a general macro processing + facility. + + The companion program ASLINK is a relocating linker perform- + ing the following functions: (1) bind multiple object modules + into a single memory image, (2) resolve inter-module symbol + references, (3) resolve undefined symbols from specified + librarys of object modules, (4) process absolute, relative, con- + catenated, and overlay attributes in data and program sections, + (5) perform byte and word program-counter relative (pc or pcr) + addressing calculations, (6) define absolute symbol values at + link time, (7) define absolute area base address values at link + time, (8) produce an Intel Hex record, Motorola S record or + Tandy CoCo Disk Basic output file, (9) produce a map of the + linked memory image, and (10) update the ASxxxx assembler + listing files with the absolute linked addresses and data. + + + Page 9 + + + + The assemblers and linker have been tested using Linux and + DJGPP, Cygwin, Symantec C/C++ V7.2, Borland Turbo C++ 3.0, Open + Watcom V1.9, VC6, Visual Studio 2005, and Visual Studio 2010. + Complete source code and documentation for the assemblers and + linker is included with the distribution. Additionally, test + code for each assembler and several microprocessor monitors ( + ASSIST05 for the 6805, MONDEB and ASSIST09 for the 6809, and + BUFFALO 2.5 for the 6811) are included as working examples of + use of these assemblers. + + + + + + + + + + + + + + + CHAPTER 1 + + THE ASSEMBLER + + + + + + 1.1 THE ASXXXX ASSEMBLERS + + + The ASxxxx assemblers are a series of microprocessor assem- + blers written in the C programming language. Each assembler has + a device specific section which includes: + + 1. device description, byte order, and file extension in- + formation + + 2. a table of the assembler general directives, special + device directives, assembler mnemonics and associated + operation codes + + 3. machine specific code for processing the device mnemon- + ics, addressing modes, and special directives + + The device specific information is detailed in the appendices. + + The assemblers have a common device independent section which + handles the details of file input/output, symbol table genera- + tion, program/data areas, expression analysis, and assembler + directive processing. + + The assemblers provide the following features: + + 1. Command string control of assembly functions + + 2. Alphabetized, formatted symbol table listing + + 3. Relocatable object modules + + 4. Global symbols for linking object modules + + 5. Conditional assembly directives + + + + THE ASSEMBLER PAGE 1-2 + THE ASXXXX ASSEMBLERS + + + 6. Program sectioning directives + + + ASxxxx assembles one or more source files into a single relo- + catable ascii object file. The output of the ASxxxx assemblers + consists of an ascii relocatable object file(*.rel), an assembly + listing file(*.lst), and a symbol file(*.sym). + + + 1.1.1 Assembly Pass 1 + + + During pass 1, ASxxxx opens all source files and performs a + rudimentary assembly of each source statement. During this pro- + cess all symbol tables are built, program sections defined, and + number of bytes for each assembled source line is estimated. + + At the end of pass 1 all undefined symbols may be made global + (external) using the ASxxxx switch -g, otherwise undefined sym- + bols will be flagged as errors during succeeding passes. + + + 1.1.2 Assembly Pass 2 + + + During pass 2 the ASxxxx assembler resolves forward refer- + ences and determines the number of bytes for each assembled + line. The number of bytes used by a particular assembler in- + struction may depend upon the addressing mode, whether the in- + struction allows multiple forms based upon the relative distance + to the addressed location, or other factors. Pass 2 resolves + these cases and determines the address of all symbols. + + + 1.1.3 Assembly Pass 3 + + + Pass 3 by the assembler generates the listing file, the relo- + catable output file, and the symbol tables. Also during pass 3 + the errors will be reported. + + The relocatable object file is an ascii file containing sym- + bol references and definitions, program area definitions, and + the relocatable assembled code, the linker ASLINK will use this + information to generate an absolute load file (Intel or Motorola + formats). + + + + + THE ASSEMBLER PAGE 1-3 + SOURCE PROGRAM FORMAT + + + 1.2 SOURCE PROGRAM FORMAT + + + + 1.2.1 Statement Format + + + A source program is composed of assembly-language statements. + Each statement must be completed on one line. A line may con- + tain a maximum of 128 characters, longer lines are truncated and + lost. + + An ASxxxx assembler statement may have as many as four + fields. These fields are identified by their order within the + statement and/or by separating characters between fields. The + general format of the ASxxxx statement is: + + [label:] Operator Operand [;Comment(s)] + + The label and comment fields are optional. The operator and + operand fields are interdependent. The operator field may be an + assembler directive or an assembly mnemonic. The operand field + may be optional or required as defined in the context of the + operator. + + ASxxxx interprets and processes source statements one at a + time. Each statement causes a particular operation to be per- + formed. + + + 1.2.1.1 Label Field - + + A label is a user-defined symbol which is assigned the value + of the current location counter and entered into the user de- + fined symbol table. The current location counter is used by + ASxxxx to assign memory addresses to the source program state- + ments as they are encountered during the assembly process. Thus + a label is a means of symbolically referring to a specific + statement. + + When a program section is absolute, the value of the current + location counter is absolute; its value references an absolute + memory address. Similarly, when a program section is relocat- + able, the value of the current location counter is relocatable. + A relocation bias calculated at link time is added to the ap- + parent value of the current location counter to establish its + effective absolute address at execution time. (The user can + also force the linker to relocate sections defined as absolute. + This may be required under special circumstances.) + + If present, a label must be the first field in a source + statement and must be terminated by a colon (:). For example, + + + THE ASSEMBLER PAGE 1-4 + SOURCE PROGRAM FORMAT + + + if the value of the current location counter is absolute + 01F0(H), the statement: + + abcd: nop + + assigns the value 01F0(H) to the label abcd. If the location + counter value were relocatable, the final value of abcd would be + 01F0(H)+K, where K represents the relocation bias of the program + section, as calculated by the linker at link time. + + More than one label may appear within a single label field. + Each label so specified is assigned the same address value. For + example, if the value of the current location counter is + 1FF0(H), the multiple labels in the following statement are each + assigned the value 1FF0(H): + + abcd: aq: $abc: nop + + Multiple labels may also appear on successive lines. For ex- + ample, the statements + + abcd: + aq: + $abc: nop + + likewise cause the same value to be assigned to all three la- + bels. + + A double colon (::) defines the label as a global symbol. + For example, the statement + + abcd:: nop + + establishes the label abcd as a global symbol. The distinguish- + ing attribute of a global symbol is that it can be referenced + from within an object module other than the module in which the + symbol is defined. References to this label in other modules + are resolved when the modules are linked as a composite execut- + able image. + + The legal characters for defining labels are: + + A through Z + a through z + 0 through 9 + . (Period) + $ (Dollar sign) + _ (underscore) + + A label may be any length, however only the first 79 + characters are significant and, therefore must be unique among + all labels in the source program (not necessarily among + + + THE ASSEMBLER PAGE 1-5 + SOURCE PROGRAM FORMAT + + + separately compiled modules). An error code(s) (m or p) will be + generated in the assembly listing if the first 79 characters in + two or more labels are the same. The m code is caused by the + redeclaration of the symbol or its reference by another state- + ment. The p code is generated because the symbols location is + changing on each pass through the source file. + + The label must not start with the characters 0-9, as this + designates a reusable symbol with special attributes described + in a later section. + + The label must not start with the sequence $$, as this + represents the temporary radix 16 for constants. + + + 1.2.1.2 Operator Field - + + The operator field specifies the action to be performed. It + may consist of an instruction mnemonic (op code) or an assembler + directive. + + When the operator is an instruction mnemonic, a machine in- + struction is generated and the assembler evaluates the addresses + of the operands which follow. When the operator is a directive + ASxxxx performs certain control actions or processing operations + during assembly of the source program. + + Leading and trailing spaces or tabs in the operator field + have no significance; such characters serve only to separate + the operator field from the preceeding and following fields. + + An operator is terminated by a space, tab or end of line. + + + 1.2.1.3 Operand Field - + + When the operator is an instruction mnemonic (op code), the + operand field contains program variables that are to be + evaluated/manipulated by the operator. + + Operands may be expressions or symbols, depending on the + operator. Multiple expressions used in the operand fields may + be separated by a comma. An operand should be preceeded by an + operator field; if it is not, the statement will give an error + (q or o). All operands following instruction mnemonics are + treated as expressions. + + The operand field is terminated by a semicolon when the field + is followed by a comment. For example, in the following + statement: + + label: lda abcd,x ;Comment field + + + THE ASSEMBLER PAGE 1-6 + SOURCE PROGRAM FORMAT + + + + the tab between lda and abcd terminates the operator field and + defines the beginning of the operand field; a comma separates + the operands abcd and x; and a semicolon terminates the operand + field and defines the beginning of the comment field. When no + comment field follows, the operand field is terminated by the + end of the source line. + + + 1.2.1.4 Comment Field - + + The comment field begins with a semicolon and extends through + the end of the line. This field is optional and may contain any + 7-bit ascii character except null. + + Comments do not affect assembly processing or program execu- + tion. + + + 1.3 SYMBOLS AND EXPRESSIONS + + + This section describes the generic components of the ASxxxx + assemblers: the character set, the conventions observed in con- + structing symbols, and the use of numbers, operators, and ex- + pressions. + + + 1.3.1 Character Set + + + The following characters are legal in ASxxxx source programs: + + 1. The letters A through Z. Both upper- and lower-case + letters are acceptable. The assemblers, by default, + are case sensitive, i.e. ABCD and abcd are not the + same symbols. (The assemblers can be made case insen- + sitive by using the -z command line option.) + + 2. The digits 0 through 9 + + 3. The characters . (period), $ (dollar sign), and _ (un- + derscore). + + 4. The special characters listed in Tables 1 through 6. + + + Tables 1 through 6 describe the various ASxxxx label and + field terminators, assignment operators, operand separators, as- + sembly, unary, binary, and radix operators. + + + THE ASSEMBLER PAGE 1-7 + SYMBOLS AND EXPRESSIONS + + + Table 1 Label Terminators and Assignment Operators + ---------------------------------------------------------------- + + : Colon Label terminator. + + :: Double colon Label Terminator; defines the + label as a global label. + + = Equal sign Direct assignment operator. + + == Global equal Direct assignment operator; de- + fines the symbol as a global + symbol. + + =: Local equal Direct assignment operator; de- + fines the symbol as a local sym- + bol. + + ---------------------------------------------------------------- + + + + + + Table 2 Field Terminators and Operand Separators + ---------------------------------------------------------------- + + Tab Item or field terminator. + + Space Item or field terminator. + + , Comma Operand field separator. + + ; Semicolon Comment field indicator. + + ---------------------------------------------------------------- + + + + + + + + THE ASSEMBLER PAGE 1-8 + SYMBOLS AND EXPRESSIONS + + + Table 3 Assembler Operators + ---------------------------------------------------------------- + + # Number sign Immediate expression indicator. + + . Period Current location counter. + + ( Left parenthesis Expression delimiter. + + ) Right parenthesis Expression delimeter. + + ---------------------------------------------------------------- + + + + + + Table 4 Unary Operators + ---------------------------------------------------------------- + + < Left bracket <FEDC Produces the lower byte + value of the expression. + (DC) + + > Right bracket >FEDC Produces the upper byte + value of the expression. + (FE) + + + Plus sign +A Positive value of A + + - Minus sign -A Produces the negative + (2's complement) of A. + + ~ Tilde ~A Produces the 1's comple- + ment of A. + + ' Single quote 'D Produces the value of + the character D. + + " Double quote "AB Produces the double byte + value for AB. + + \ Backslash '\n Unix style characters + \b, \f, \n, \r, \t + or '\001 or octal byte values. + + ---------------------------------------------------------------- + + + + + + + + THE ASSEMBLER PAGE 1-9 + SYMBOLS AND EXPRESSIONS + + + Table 5 Binary Operators + ---------------------------------------------------------------- + + << Double 0800 << 4 Produces the 4 bit + Left bracket left-shifted value of + 0800. (8000) + + >> Double 0800 >> 4 Produces the 4 bit + Right bracket right-shifted value of + 0800. (0080) + + + Plus sign A + B Arithmetic Addition + operator. + + - Minus sign A - B Arithmetic Subtraction + operator. + + * Asterisk A * B Arithmetic Multiplica- + tion operator. + + / Slash A / B Arithmetic Division + operator. + + & Ampersand A & B Logical AND operator. + + | Bar A | B Logical OR operator. + + % Percent sign A % B Modulus operator. + + ^ Up arrow or A ^ B EXCLUSIVE OR operator. + circumflex + + ---------------------------------------------------------------- + + + + + + Table 6 Temporary Radix Operators + ---------------------------------------------------------------- + + $%, 0b, 0B Binary radix operator. + + $&, 0o, 0O, 0q, 0Q Octal radix operator. + + $#, 0d, 0D Decimal radix operator. + + $$, 0h, 0H, 0x, 0X Hexadecimal radix operator. + + + Potential ambiguities arising from the use of 0b and 0d + as temporary radix operators may be circumvented by + + + THE ASSEMBLER PAGE 1-10 + SYMBOLS AND EXPRESSIONS + + + preceding all non-prefixed hexadecimal numbers with 00. + Leading 0's are required in any case where the first + hexadecimal digit is abcdef as the assembler will treat + the letter sequence as a label. + + ---------------------------------------------------------------- + + + + + + + + 1.3.2 User-Defined Symbols + + + User-defined symbols are those symbols that are equated to a + specific value through a direct assignment statement or appear + as labels. These symbols are added to the User Symbol Table as + they are encountered during assembly. + + The following rules govern the creation of user-defined symbols: + + 1. Symbols can be composed of alphanumeric characters, + dollar signs ($), periods (.), and underscores (_) + only. + + 2. The first character of a symbol must not be a number + (except in the case of reusable symbols). + + 3. The first 79 characters of a symbol must be unique. A + symbol can be written with more than 79 legal + characters, but the 80th and subsequent characters are + ignored. + + 4. Spaces and Tabs must not be embedded within a symbol. + + + + 1.3.3 Reusable Symbols + + + Reusable symbols are specially formatted symbols used as la- + bels within a block of coding that has been delimited as a reus- + able symbol block. Reusable symbols are of the form n$, where n + is a decimal integer from 0 to 65535, inclusive. Examples of + reusable symbols are: + + 1$ + 27$ + 138$ + 244$ + + + THE ASSEMBLER PAGE 1-11 + SYMBOLS AND EXPRESSIONS + + + The range of a reusable symbol block consists of those state- + ments between two normally constructed symbolic labels. Note + that a statement of the form: + + ALPHA = EXPRESSION + + is a direct assignment statement but does not create a label and + thus does not delimit the range of a reusable symbol block. + + Note that the range of a reusable symbol block may extend + across program areas. + + Reusable symbols provide a convenient means of generating la- + bels for branch instructions and other such references within + reusable symbol blocks. Using reusable symbols reduces the pos- + sibility of symbols with multiple definitions appearing within a + user program. In addition, the use of reusable symbols dif- + ferentiates entry-point labels from other labels, since reusable + labels cannot be referenced from outside their respective symbol + blocks. Thus, reusable symbols of the same name can appear in + other symbol blocks without conflict. Reusable symbols require + less symbol table space than normal symbols. Their use is + recommended. + + The use of the same reusable symbol within a symbol block + will generate one or both of the m or p errors. + + Example of reusable symbols: + + a: ldx #atable ;get table address + lda #0d48 ;table length + 1$: clr ,x+ ;clear + deca + bne 1$ + + b: ldx #btable ;get table address + lda #0d48 ;table length + 1$: clr ,x+ ;clear + deca + bne 1$ + + + + + THE ASSEMBLER PAGE 1-12 + SYMBOLS AND EXPRESSIONS + + + 1.3.4 Current Location Counter + + + The period (.) is the symbol for the current location coun- + ter. When used in the operand field of an instruction, the + period represents the address of the first byte of the + instruction: + + AS: ldx #. ;The period (.) refers to + ;the address of the ldx + ;instruction. + + When used in the operand field of an ASxxxx directive, it + represents the address of the current byte or word: + + QK = 0 + + .word 0xFFFE,.+4,QK ;The operand .+4 in the .word + ;directive represents a value + ;stored in the second of the + ;three words during assembly. + + If we assume the current value of the program counter is + 0H0200, then during assembly, ASxxxx reserves three words of + storage starting at location 0H0200. The first value, a hex- + idecimal constant FFFE, will be stored at location 0H0200. The + second value represented by .+4 will be stored at location + 0H0202, its value will be 0H0206 ( = 0H0202 + 4). The third + value defined by the symbol QK will be placed at location + 0H0204. + + At the beginning of each assembly pass, ASxxxx resets the lo- + cation counter. Normally, consecutive memory locations are as- + signed to each byte of object code generated. However, the + value of the location counter can be changed through a direct + assignment statement of the following form: + + . = . + expression + + + The new location counter can only be specified relative to + the current location counter. Neglecting to specify the current + program counter along with the expression on the right side of + the assignment operator will generate the (.) error. (Absolute + program areas may use the .org directive to specify the absolute + location of the current program counter.) + + The following coding illustrates the use of the current location + counter: + + .area CODE1 (ABS) ;program area CODE1 + ;is ABSOLUTE + + + THE ASSEMBLER PAGE 1-13 + SYMBOLS AND EXPRESSIONS + + + + .org 0H100 ;set location to + ;0H100 absolute + + num1: ldx #.+0H10 ;The label num1 has + ;the value 0H100. + ;X is loaded with + ;0H100 + 0H10 + + .org 0H130 ;location counter + ;set to 0H130 + + num2: ldy #. ;The label num2 has + ;the value 0H130. + ;Y is loaded with + ;value 0H130. + + + .area CODE2 (REL) ;program area CODE2 + ;is RELOCATABLE + + . = . + 0H20 ;Set location counter + ;to relocatable 0H20 of + ;the program section. + + num3: .word 0 ;The label num3 has + ;the value + ;of relocatable 0H20. + + . = . + 0H40 ;will reserve 0H40 + ;bytes of storage as will + .blkb 0H40 ;or + .blkw 0H20 + + The .blkb and .blkw directives are the preferred methods of + allocating space. + + + 1.3.5 Numbers + + + ASxxxx assumes that all numbers in the source program are to + be interpreted in decimal radix unless otherwise specified. The + .radix directive may be used to specify the default as octal, + decimal, or hexadecimal. Individual numbers can be designated + as binary, octal, decimal, or hexadecimal through the temporary + radix prefixes shown in table 6. + + Negative numbers must be preceeded by a minus sign; ASxxxx + translates such numbers into two's complement form. Positive + numbers may (but need not) be preceeded by a plus sign. + + + + THE ASSEMBLER PAGE 1-14 + SYMBOLS AND EXPRESSIONS + + + Numbers are always considered to be absolute values, therefor + they are never relocatable. + + + 1.3.6 Terms + + + A term is a component of an expression and may be one of the + following: + + + 1. A number. + + 2. A symbol: + 1. A period (.) specified in an expression causes the + current location counter to be used. + 2. A User-defined symbol. + 3. An undefined symbol is assigned a value of zero and + inserted in the User-Defined symbol table as an un- + defined symbol. + + 3. A single quote followed by a single ascii character, or + a double quote followed by two ascii characters. + + 4. An expression enclosed in parenthesis. Any expression + so enclosed is evaluated and reduced to a single term + before the remainder of the expression in which it ap- + pears is evaluated. Parenthesis, for example, may be + used to alter the left-to-right evaluation of expres- + sions, (as in A*B+C versus A*(B+C)), or to apply a un- + ary operator to an entire expression (as in -(A+B)). + + 5. A unary operator followed by a symbol or number. + + + + 1.3.7 Expressions + + + Expressions are combinations of terms joined together by + binary operators. Expressions reduce to a value. The evalua- + tion of an expression includes the determination of its attri- + butes. A resultant expression value may be one of three types + (as described later in this section): relocatable, absolute, + and external. + + + + THE ASSEMBLER PAGE 1-15 + SYMBOLS AND EXPRESSIONS + + + Expressions are evaluate with an operand hierarchy as follows: + + * / % multiplication, + division, and + modulus first. + + + - addition and + subtraction second. + + << >> left shift and + right shift third. + + ^ exclusive or fourth. + + & logical and fifth. + + | logical or last + + except that unary operators take precedence over binary + operators. + + + A missing or illegal operator terminates the expression + analysis, causing error codes (o) and/or (q) to be generated + depending upon the context of the expression itself. + + At assembly time the value of an external (global) expression + is equal to the value of the absolute part of that expression. + For example, the expression external+4, where 'external' is an + external symbol, has the value of 4. This expression, however, + when evaluated at link time takes on the resolved value of the + symbol 'external', plus 4. + + Expressions, when evaluated by ASxxxx, are one of three + types: relocatable, absolute, or external. The following dis- + tinctions are important: + + 1. An expression is relocatable if its value is fixed re- + lative to the base address of the program area in which + it appears; it will have an offset value added at link + time. Terms that contain labels defined in relocatable + program areas will have a relocatable value; simi- + larly, a period (.) in a relocatable program area, + representing the value of the current program location + counter, will also have a relocatable value. + + 2. An expression is absolute if its value is fixed. An + expression whose terms are numbers and ascii characters + will reduce to an absolute value. A relocatable ex- + pression or term minus a relocatable term, where both + elements being evaluated belong to the same program + area, is an absolute expression. This is because every + + + THE ASSEMBLER PAGE 1-16 + SYMBOLS AND EXPRESSIONS + + + term in a program area has the same relocation bias. + When one term is subtracted from the other the reloca- + tion bias is zero. + + 3. An expression is external (or global) if it contains a + single global reference (plus or minus an absolute ex- + pression value) that is not defined within the current + program. Thus, an external expression is only par- + tially defined following assembly and must be resolved + at link time. + + + + 1.4 GENERAL ASSEMBLER DIRECTIVES + + + An ASxxxx directive is placed in the operator field of the + source line. Only one directive is allowed per source line. + Each directive may have a blank operand field or one or more + operands. Legal operands differ with each directive. + + + 1.4.1 .module Directive + + Format: + + .module name + + The .module directive causes the name to be included in the + assemblers output file as an identifier for this particular ob- + ject module. The name may be from 1 to 79 characters in length. + The name may not have any embedded white space (spaces or tabs). + Only one identifier is allowed per assembled module. The main + use of this directive is to allow the linker to report a + modules' use of undefined symbols. At link time all undefined + symbols are reported and the modules referencing them are + listed. + + + 1.4.2 .title Directive + + Format: + + .title string + + The .title directive provides a character string to be placed + on the second line of each page during listing. The string be- + gins with the first non white space character (after any space + or tab) and ends with the end of the line. + + + + + THE ASSEMBLER PAGE 1-17 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.3 .sbttl Directive + + Format: + + .sbttl string + + The .sbttl directive provides a character string to be placed + on the third line of each page during listing. The string be- + gins with the first non white space character (after any space + or tab) and ends with the end of the line. + + + 1.4.4 .list and .nlist Directives + + Format: + + .list ;Basic .list + + .list expr ;with expression + + .list (arg1,arg2,...,argn) ;with sublist options + + .nlist ;Basic .nlist + + .nlist expr ;with expression + + .nlist (arg1,arg2,...,argn) ;with sublist options + + + The .list and .nlist directives control the listing output to + the .lst file. The directives have the following sublist + options: + + err - errors + loc - program location + bin - binary output + eqt - symbol or .if evaluation + cyc - opcode cycle count + lin - source line number + src - source line text + pag - pagination + lst - .list/.nlist line listing + md - macro definition listing + me - macro expansion listing + meb - macro expansion binary listing + + ! - sets the listing mode to + !(.list) or !(.nlist) before + applying the sublist options + + + The 'normal' listing mode .list is the combination of err, loc, + + + THE ASSEMBLER PAGE 1-18 + GENERAL ASSEMBLER DIRECTIVES + + + bin, eqt, cyc, lin, src, pag, lst, and md enabled with me and + meb disabled. The 'normal' listing mode .nlist has all sublist + items disabled. When specifying sublist options the option list + must be enclosed within parenthesis and multiple options + seperated by commas. + + The NOT option, !, is used to set the listing mode to the op- + posite of the .list or .nlist directive before applying the sub- + list options. For example: + + .nlist (!) is equivalent to .list and + .list (!) is equivalent to .nlist + any additional options will + be applied normally + + + Normal .list/.nlist processing is disabled within false con- + ditional blocks. However, the .list/.nlist with an expression + can override this behavior if the expression has a non zero + value. + + Examples of listing options: + + .list (meb) ; lists macro generated binary + + .list (me) ; lists macro expansions + + .nlist (src) ; .nlist src lines not listed + + .nlist (!,lst) ; list all except .nlist + + .nlist ; combination lists only + .list (src) ; the source line + + .list (!,src) ; list only the source line + + .list 1 ; enable listing even within + ; a FALSE conditional block + + + 1.4.5 .page Directive + + Format: + + .page + + The .page directive causes a page ejection with a new heading + to be printed. The new page occurs after the next line of the + source program is processed, this allows an immediately follow- + ing .sbttl directive to appear on the new page. The .page + source line will not appear in the file listing. Paging may be + disabled by invoking the -p directive or by using the directive: + + + THE ASSEMBLER PAGE 1-19 + GENERAL ASSEMBLER DIRECTIVES + + + + .nlist (pag) + + + If the .page directive is followed by a non zero constant or + an expression that evaluates to a non zero value then pagination + will be enabled within a false condition range to allow extended + textual information to be incorporated in the source program + with out the need to use the comment delimiter (;): + + .if 0 + + .page 1 ;Enable pagination within 'if' block. + This text will be bypassed during assembly + but appear in the listing file. + . + . + . + + .endif + + + + + + 1.4.8 .byte, .db, and .fcb Directives + + Format: + + .byte exp ;Stores the binary value + .db exp ;of the expression in the + .fcb exp ;next byte. + + .byte exp1,exp2,expn ;Stores the binary values + .db exp1,exp2,expn ;of the list of expressions + .fcb exp1,exp2,expn ;in successive bytes. + + where: exp, represent expressions that will be + exp1, truncated to 8-bits of data. + . Each expression will be calculated, + . the high-order byte will be truncated. + . Multiple expressions must be + expn separated by commas. + + The .byte, .db, or .fcb directives are used to generate suc- + cessive bytes of binary data in the object module. + + + + + THE ASSEMBLER PAGE 1-21 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.9 .word, .dw, and .fdb Directives + + Format: + + .word exp ;Stores the binary value + .dw exp ;of the expression in + .fdb exp ;the next word. + + .word exp1,exp2,expn ;Stores the binary values + .dw exp1,exp2,expn ;of the list of expressions + .fdb exp1,exp2,expn ;in successive words. + + where: exp, represent expressions that will occupy two + exp1, bytes of data. Each expression will be + . calculated as a 16-bit word expression. + . Multiple expressions must be + expn separated by commas. + + The .word, .dw, or .fdb directives are used to generate suc- + cessive words of binary data in the object module. + + + + THE ASSEMBLER PAGE 1-22 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.12 .blkb, .ds, .rmb, and .rs Directives + + Format: + + .blkb N ;reserve N bytes of space + .ds N ;reserve N bytes of space + .rmb N ;reserve N bytes of space + .rs N ;reserve N bytes of space + + The .blkb, .ds, .rmb, and .rs directives reserve byte blocks + in the object module; + + + 1.4.13 .blkw, .blk3, and .blk4 Directives + + Format: + + .blkw N ;reserve N words of space + .blk3 N ;reserve N triples of space + .blk4 N ;reserve N quads of space + + The .blkw directive reserves word blocks; the .blk3 reserves + 3 byte blocks(available in assemblers supporting 24-bit + addressing); the .blk4 reserves 4 byte blocks (available in as- + semblers supporting 32-bit addressing). + + + + + THE ASSEMBLER PAGE 1-23 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.14 .ascii, .str, and .fcc Directives + + Format: + + .ascii /string/ or + + .ascii ^/string/ + + .fcc /string/ or + + .fcc ^/string/ + + .str /string/ or + + .str ^/string/ + + + where: string is a string of printable ascii characters. + + / / represent the delimiting characters. These + delimiters may be any paired printing + characters, as long as the characters are not + contained within the string itself. If the + delimiting characters do not match, the .ascii + directive will give the (q) error. + + The .ascii, .fcc, and .str directives place one binary byte of + data for each character in the string into the object module. + + + 1.4.15 .ascis and .strs Directives + + Format: + + .ascis /string/ or + + .ascis ^/string/ + + .strs /string/ or + + .strs ^/string/ + + + where: string is a string of printable ascii characters. + + / / represent the delimiting characters. These + delimiters may be any paired printing + characters, as long as the characters are not + contained within the string itself. If the + delimiting characters do not match, the .ascis + and .strs directives will give the (q) error. + + + + THE ASSEMBLER PAGE 1-24 + GENERAL ASSEMBLER DIRECTIVES + + + The .ascis and .strs directives place one binary byte of data + for each character in the string into the object module. The + last character in the string will have the high order bit set. + + + 1.4.16 .asciz and .strz Directives + + Format: + + .asciz /string/ or + + .asciz ^/string/ + + .strz /string/ or + + .strz ^/string/ + + + where: string is a string of printable ascii characters. + + / / represent the delimiting characters. These + delimiters may be any paired printing + characters, as long as the characters are not + contained within the string itself. If the + delimiting characters do not match, the .asciz + and .strz directive will give the (q) error. + + + The .asciz and .strz directives place one binary byte of data + for each character in the string into the object module. Fol- + lowing all the character data a zero byte is inserted to ter- + minate the character string. + + + THE ASSEMBLER PAGE 1-25 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.18 .radix Directive + + Format: + + .radix character + + where: character represents a single character specifying the + default radix to be used for succeeding numbers. The + character may be any one of the following: + + B,b Binary + + O,o Octal + Q,q + + D,d Decimal + 'blank' + + H,h Hexadecimal + X,x + + + 1.4.19 .even Directive + + Format: + + .even + + The .even directive ensures that the current location counter + contains an even boundary value by adding 1 if the current loca- + tion is odd. + + + 1.4.20 .odd Directive + + Format: + + .odd + + The .odd directive ensures that the current location counter + contains an odd boundary value by adding one if the current lo- + cation is even. + + + + + THE ASSEMBLER PAGE 1-26 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.21 .bndry Directive + + Format: + + .bndry n + + If the current location is not an integer multiple of n then + the location counter is increased to the next integer multiple + of n. + + As an example: + + .bndry 4 + + changes the current location to be at a multiple of 4, a 4-byte + boundary. + + The relocation and/or concatenation of an area containing + .bndry directives to place code at specific boundaries will NOT + maintain the specified boundaries. When relocating such code + areas you must specify the base addresses to the linker manually + and/or you must pad the allocated space of an area to match the + boundary conditions. + + As an example suppose you wish to link multiple assembled + code sections, each of which has code for the same area and re- + quires a 4 byte boundary. The starting address of the area must + be specified to the linker on a 4 byte boundary and each as- + sembled code section must be padded to fill out the area in each + of the individually assembled files. The following code will + provide the necessary area padding to allow a succesful linking + of files and maintain the boundary requirements: + + .$.end = . ; end of area address + .bndry 4 ; set boundary + .if ne,. - .$.end ; is . the same ? + . = . - 1 ; no: backup 1 byte + .byte 0 ; place padding byte + .endif + + + If all files are assembled simultaneously then only the + .bndry directive is required at the beginning of the area in + each file and the initial area address must be specified to the + linker. + + + + + THE ASSEMBLER PAGE 1-27 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.22 .area Directive + + Format: + + .area name [(options)] + + where: name represents the symbolic name of the program sec- + tion. This name may be the same as any + user-defined symbol as the area names + are independent of all symbols and labels. + + options specify the type of program or data area: + ABS absolute (automatically invokes OVR) + REL relocatable + OVR overlay + CON concatenate + NOPAG non-paged area + PAG paged area + + + The .area directive provides a means of defining and separat- + ing multiple programming and data sections. The name is the + area label used by the assembler and the linker to collect code + from various separately assembled modules into one section. The + name may be from 1 to 79 characters in length. + + The options are specified within parenthesis and separated by + commas as shown in the following example: + + .area TEST (REL,CON) ;This section is relocatable + ;and concatenated with other + ;sections of this program area. + + .area DATA (REL,OVR) ;This section is relocatable + ;and overlays other sections + ;of this program area. + + .area SYS (ABS,OVR) ;(CON not allowed with ABS) + ;This section is defined as + ;absolute. Absolute sections + ;are always overlayed with + ;other sections of this program + ;area. + + + + THE ASSEMBLER PAGE 1-28 + GENERAL ASSEMBLER DIRECTIVES + + + .area PAGE (PAG) ;This is a paged section. The + ;section must be on a 256 byte + ;boundary and its length is + ;checked by the linker to be + ;no larger than 256 bytes. + ;This is useful for direct page + ;areas. + + The default area type is REL|CON; i.e. a relocatable sec- + tion which is concatenated with other sections of code with the + same area name. The ABS option indicates an absolute area. The + OVR and CON options indicate if program sections of the same + name will overlay each other (start at the same location) or be + concatenated with each other (appended to each other). + + Multiple invocations of the .area directive with the same + name must specify the same options or leave the options field + blank, this defaults to the previously specified options for + this program area. + + + + THE ASSEMBLER PAGE 1-29 + GENERAL ASSEMBLER DIRECTIVES + + + The ASxxxx assemblers automatically provide two program + sections: + + + '_CODE' This is the default code/data area. + This program area is of type (REL,CON). + The ASxxxx assemblers also automatically generate two symbols + for each program area: + + 's_<area>' This is the starting address of the pro- + gram area. + + 'l_<area>' This is the length of the program area. + + The .area names and options are never case sensitive. + + + 1.4.24 .org Directive + + Format: + + .org exp + + where: exp is an absolute expression that becomes the cur- + rent location counter. + + The .org directive is valid only in an absolute program section + and will give a (q) error if used in a relocatable program area. + The .org directive specifies that the current location counter + is to become the specified absolute value. + + + + + THE ASSEMBLER PAGE 1-31 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.25 .globl Directive + + Format: + + .globl sym1,sym2,...,symn + + where: sym1, represent legal symbolic names. + sym2,... When multiple symbols are specified, + symn they are separated by commas. + + A .globl directive may also have a label field and/or a com- + ment field. + + The .globl directive is provided to export (and thus provide + linkage to) symbols not otherwise defined as global symbols + within a module. In exporting global symbols the directive + .globl J is similar to: + + J == expression or J:: + + Because object modules are linked by global symbols, these + symbols are vital to a program. All internal symbols appearing + within a given program must be defined at the end of pass 1 or + they will be considered undefined. The assembly directive (-g) + can be invoked to make all undefined symbols global at the end + of pass 1. + + The .globl directive and == construct can be overridden by a + following .local directive. + + + NOTE + + The ASxxxx assemblers use the last occurring symbol + specification in the source file(s) as the type shown + in the symbol table and output to the .rel file. + + + + + 1.4.26 .local Directive + + Format: + + .local sym1,sym2,...,symn + + where: sym1, represent legal symbolic names. + sym2,... When multiple symbols are specified, + symn they are separated by commas. + + A .local directive may also have a label field and/or a com- + ment field. + + + THE ASSEMBLER PAGE 1-32 + GENERAL ASSEMBLER DIRECTIVES + + + The .local directive is provided to define symbols that are + local to the current assembly process. Local symbols are not + effected by the assembler option -a (make all symbols global). + In defining local symbols the directive .local J is similar to: + + J =: expression + + The .local directive and the =: construct are useful in de- + fining symbols and constants within a header or definition file + that contains many symbols specific to the current assembly pro- + cess that should not be exported into the .rel output file. A + typical usage is in the definition of SFRs (Special Function + Registers) for a microprocessor. + + The .local directive and =: construct can be overridden by a + following .globl directive. + + + NOTE + + The ASxxxx assemblers use the last occurring symbol + specification in the source file(s) as the type shown + in the symbol table and output to the .rel file. + + + + + 1.4.27 .equ, .gblequ, and .lclequ Directives + + Format: + + sym1 .equ expr ; equivalent to sym1 = expr + sym2 .gblequ expr ; equivalent to sym2 == expr + sym3 .lclequ expr ; equivalent to sym3 =: expr + + or + + .equ sym1, expr ; equivalent to sym1 = expr + .gblequ sym2, expr ; equivalent to sym2 == expr + .lclequ sym3, expr ; equivalent to sym3 =: expr + + These alternate forms of equivalence are provided for user + convenience. + + + + + THE ASSEMBLER PAGE 1-33 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.28 .if, .else, and .endif Directives + + Format: + + .if expr + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The range of true condition will be processed if the expres- + sion 'expr' is not zero (i.e. true) and the range of false con- + dition will be processed if the expression 'expr' is zero (i.e + false). The range of true condition is optional as is the .else + directive and the range of false condition. The following are + all valid .if/.else/.endif constructions: + + .if A-4 ;evaluate A-4 + .byte 1,2 ;insert bytes if A-4 is + .endif ;not zero + + .if K+3 ;evaluate K+3 + .else + .byte 3,4 ;insert bytes if K+3 + .endif ;is zero + + .if J&3 ;evaluate J masked by 3 + .byte 12 ;insert this byte if J&3 + .else ;is not zero + .byte 13 ;insert this byte if J&3 + .endif ;is zero + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + + + THE ASSEMBLER PAGE 1-34 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.29 .iff, .ift, and .iftf Directives + + Format: + + .if expr ;'if' range Condition is + ;TRUE when expr is not zero + .ift ;} + . ;} range of true condition ;} + .iff ;} if + . ;} range of false condition ;} block + .iftf ;} + . ;} unconditional range ;} + .else ;'else' range Condition is + ;TRUE when expr is zero + .ift ;} + . ;} range of true condition ;} + .iff ;} else + . ;} range of false condition ;} block + .iftf ;} + . ;} unconditional range ;} + .endif + + The subconditional assembly directives may be placed within + conditional assembly blocks to indicate: + + 1. The assembly of an alternate body of code when + the condition of the block tests false. + + 2. The assembly of non-contiguous body of code + within the conditional assembly block, + depending upon the result of the conditional + test in entering the block. + + 3. The unconditional assembly of a body of code + within a conditional assembly block. + + + The use of the .iff, .ift, and .iftf directives makes the use of + the .else directive redundant. + + Note that the implementation of the .else directive causes + the .if tested condition to be complemented. The TRUE and FALSE + conditions are determined by the .if/.else conditional state. + + All .if/.else/.endif directives are limited to a maximum + nesting of 10 levels. + + The use of the .iff, .ift, or .iftf directives outside of a + conditional block results in a (i) error code. + + + + THE ASSEMBLER PAGE 1-35 + GENERAL ASSEMBLER DIRECTIVES + + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.30 .ifxx Directives + + + Additional conditional directives are available to test the + value of an evaluated expression: + + .ifne expr ; true if expr != 0 + .ifeq expr ; true if expr == 0 + .ifgt expr ; true if expr > 0 + .iflt expr ; true if expr < 0 + .ifge expr ; true if expr >= 0 + .ifle expr ; true if expr <= 0 + + Format: + + .ifxx expr + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The range of true condition will be processed if the expres- + sion 'expr' is not zero (i.e. true) and the range of false con- + dition will be processed if the expression 'expr' is zero (i.e + false). The range of true condition is optional as is the .else + directive and the range of false condition. The following are + all valid .ifxx/.else/.endif constructions: + + .ifne A-4 ;evaluate A-4 + .byte 1,2 ;insert bytes if A-4 is + .endif ;not zero + + .ifeq K+3 ;evaluate K+3 + .byte 3,4 ;insert bytes if K+3 + .endif ;is zero + + .ifne J&3 ;evaluate J masked by 3 + .byte 12 ;insert this byte if J&3 + .else ;is not zero + + + THE ASSEMBLER PAGE 1-36 + GENERAL ASSEMBLER DIRECTIVES + + + .byte 13 ;insert this byte if J&3 + .endif ;is zero + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.31 .ifdef Directive + + Format: + + .ifdef sym + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The range of true condition will be processed if the symbol + 'sym' has been defined with a .define directive or 'sym' is a + variable with an assigned value else the false range will be + processed. The range of true condition is optional as is the + .else directive and the range of false condition. The following + are all valid .ifdef/.else/.endif constructions: + + .ifdef sym$1 ;lookup symbol sym$1 + .byte 1,2 ;insert bytes if sym$1 + .endif ;is defined or + ;assigned a value + + .ifdef sym$2 ;lookup symbol sym$2 + .else + .byte 3,4 ;insert bytes if sym$1 + .endif ;is not defined and + ;not assigned a value + + .ifdef sym$3 ;lookup symbol sym$3 + .byte 12 ;insert this byte if sym$3 + .else ;is defined/valued + .byte 13 ;insert this byte if sym$3 + + + THE ASSEMBLER PAGE 1-37 + GENERAL ASSEMBLER DIRECTIVES + + + .endif ;is not defined/valued + + + Note that the default assembler configuration of case sensitive + means the testing for a defined symbol is also case sensitive. + + All .if/.else/.endif directives are limited to a maximum + nesting of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.32 .ifndef Directive + + Format: + + .ifndef sym + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the condition test. + + The range of true condition will be processed if the symbol + 'sym' is not defined by a .define directive and a variable 'sym' + has not been assigned a value else the range of false condition + will be processed. The range of true condition is optional as + is the .else directive and the range of false condition. The + following are all valid .ifndef/.else/.endif constructions: + + .ifndef sym$1 ;lookup symbol sym$1 + .byte 1,2 ;insert bytes if sym$1 is + .endif ;not defined and + ;not assigned a value + + .ifndef sym$2 ;lookup symbol sym$2 + .else + .byte 3,4 ;insert bytes if sym$1 + .endif ;is defined or + ;is assigned a value + + .ifndef sym$3 ;lookup symbol sym$3 + .byte 12 ;insert this byte if sym$3 + + + THE ASSEMBLER PAGE 1-38 + GENERAL ASSEMBLER DIRECTIVES + + + .else ;is not defined/valued + .byte 13 ;insert this byte if sym$3 + .endif ;is defined/valued + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.33 .ifb Directive + + Format: + + .ifb sym + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The conditional .ifb is most useful when used in macro de- + finitions to determine if the argument is blank. The range of + true condition will be processed if the symbol 'sym' is blank. + The range of true condition is optional as is the .else direc- + tive and the range of false condition. The following are all + valid .ifb/.else/.endif constructions: + + .ifb sym$1 ;argument is not blank + .byte 1,2 ;insert bytes if argument + .endif ;is blank + + .ifb sym$2 ;argument is not blank + .else + .byte 3,4 ;insert bytes if argument + .endif ;is not blank + + .ifb ;argument is blank + .byte 12 ;insert this byte if + .else ;argument is blank + .byte 13 ;insert this byte if + .endif ;argument not blank + + + THE ASSEMBLER PAGE 1-39 + GENERAL ASSEMBLER DIRECTIVES + + + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.34 .ifnb Directive + + Format: + + .ifnb sym + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The conditional .ifnb is most useful when used in macro de- + finitions to determine if the argument is not blank. The range + of true condition will be processed if the symbol 'sym' is not + blank. The range of true condition is optional as is the .else + directive and the range of false condition. The following are + all valid .ifnb/.else/.endif constructions: + + .ifnb sym$1 ;argument is not blank + .byte 1,2 ;insert bytes if argument + .endif ;is not blank + + .ifnb sym$2 ;argument is not blank + .else + .byte 3,4 ;insert bytes if argument + .endif ;is blank + + .ifnb ;argument is blank + .byte 12 ;insert this byte if + .else ;argument is not blank + .byte 13 ;insert this byte if + .endif ;argument is blank + + + All .if/.else/.endif directives are limited to a maximum nesting + + + THE ASSEMBLER PAGE 1-40 + GENERAL ASSEMBLER DIRECTIVES + + + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.35 .ifidn Directive + + Format: + + .ifidn sym$1,sym$2 + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The conditional .ifidn is most useful when used in macro de- + finitions to determine if the arguments are identical. The + range of true condition will be processed if the symbol 'sym$1' + is idendical to 'sym$2' (i.e. the character strings for sym$1 + and sym$2 are the same consistent with the case sensitivity + flag). When this if statement occurs inside a macro where an + argument substitution may be blank then an argument should be + delimited with the form /symbol/ for each symbol. The range of + true condition is optional as is the .else directive and the + range of false condition. The following are all valid + .ifidn/.else/.endif constructions: + + .ifidn sym$1,sym$1 ;arguments are the same + .byte 1,2 ;insert bytes if arguments + .endif ;are the sane + + .ifidn sym$1,sym$2 ;arguments are not the same + .else + .byte 3,4 ;insert bytes if arguments + .endif ;are not the same + + .ifidn sym$3,sym$3 ;arguments are the same + .byte 12 ;insert this byte if + .else ;arguments are the same + .byte 13 ;insert this byte if + .endif ;arguments are not the same + + + THE ASSEMBLER PAGE 1-41 + GENERAL ASSEMBLER DIRECTIVES + + + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.36 .ifdif Directive + + Format: + + .ifdif sym$1,sym$2 + . ;} + . ;} range of true condition + . ;} + .else + . ;} + . ;} range of false condition + . ;} + .endif + + The conditional assembly directives allow you to include or + exclude blocks of source code during the assembly process, based + on the evaluation of the test condition. + + The conditional .ifdif is most useful when used in macro de- + finitions to determine if the arguments are different. The + range of true condition will be processed if the symbol 'sym$1' + is different from 'sym$2' (i.e. the character strings for sym$1 + and sym$2 are the not the same consistent with the case sensi- + tivity flag). When this if statement occurs inside a macro + where an argument substitution may be blank then an argument + should be delimited with the form /symbol/ for each symbol. The + range of true condition is optional as is the .else directive + and the range of false condition. The following are all valid + .ifdif/.else/.endif constructions: + + .ifdif sym$1,sym$2 ;arguments are different + .byte 1,2 ;insert bytes if arguments + .endif ;are different + + .ifdif sym$1,sym$1 ;arguments are identical + .else + .byte 3,4 ;insert bytes if arguments + .endif ;are different + + .ifdif sym$1,sym$3 ;arguments are different + .byte 12 ;insert this byte if + .else ;arguments are different + + + THE ASSEMBLER PAGE 1-42 + GENERAL ASSEMBLER DIRECTIVES + + + .byte 13 ;insert this byte if + .endif ;arguments are identical + + + All .if/.else/.endif directives are limited to a maximum nesting + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.37 Alternate .if Directive Forms + + + Format: + + .if cnd(,) arg1(, arg2) + + where the cnd (followed by an optional comma) may be any of + the following: + + ------------------------------------------------------- + condition Assemble + (complement) Args Block if: + ------------------------------------------------------- + eq ( ne ) expr equal to zero + (not equal to zero) + + gt ( le ) expr greater than zero + (less than or equal to zero) + + lt ( ge ) expr less than zero + (greater than or equal to zero) + + def ( ndef ) symbol .define'd or user set + (not .define'd or user set) + + b ( nb ) macro argument present + symbol (argument not present) + + idn ( dif ) macro arguments identical + symbol (arguments not identical) + + f ( t ) ----- only within a .if/.else/.endif + conditional block + + tf ----- only within a .if/.else/.endif + conditional block + + + All .if/.else/.endif directives are limited to a maximum nesting + + + THE ASSEMBLER PAGE 1-43 + GENERAL ASSEMBLER DIRECTIVES + + + of 10 levels. + + The use of a .else directive outside a .if/.endif block will + generate an (i) error. Assemblies having unequal .if and .endif + counts will cause an (i) error. + + + 1.4.38 Immediate Conditional Assembly Directives + + + The immediate conditional assembly directives allow a single + line of code to be assembled without using a .if/.else/.endif + construct. All of the previously described conditionals have + immediate equivalents. + + Format: + + .iif arg(,) line_to_assemble + .iifeq arg(,) line_to_assemble + .iifne arg(,) line_to_assemble + .iifgt arg(,) line_to_assemble + .iifle arg(,) line_to_assemble + .iifge arg(,) line_to_assemble + .iiflt arg(,) line_to_assemble + .iifdef arg(,) line_to_assemble + .iifndef arg(,) line_to_assemble + + .iifb (,)arg(,) line_to_assemble + .iifnb (,)arg(,) line_to_assemble + .iifidn (,)arg1,arg2(,) line_to_assemble + .iifdif (,)arg1,arg2(,) line_to_assemble + + .iiff line_to_assemble + .iift line_to_assemble + .iiftf line_to_assemble + + + Alternate Format: + + .iif arg(,) line_to_assemble + .iif eq arg(,) line_to_assemble + .iif ne arg(,) line_to_assemble + .iif gt arg(,) line_to_assemble + .iif le arg(,) line_to_assemble + .iif ge arg(,) line_to_assemble + .iif lt arg(,) line_to_assemble + .iif def arg(,) line_to_assemble + .iif ndef arg(,) line_to_assemble + + .iif b (,)arg(,) line_to_assemble + .iif nb (,)arg(,) line_to_assemble + .iif idn (,)arg1,arg2(,) line_to_assemble + + + THE ASSEMBLER PAGE 1-44 + GENERAL ASSEMBLER DIRECTIVES + + + .iif dif (,)arg1,arg2(,) line_to_assemble + + .iiff line_to_assemble + .iift line_to_assemble + .iiftf line_to_assemble + + + The (,) indicates an optional comma. + + The .iif types b, n, idn, and dif require the commas if the + argument(s) may be blank. These commas may be removed if the + arguments are delimited with the form ^/symbol/ for each symbol. + + The immediate conditional directives donot change the + .if/.else/.endif nesting level. + + + 1.4.39 .include Directive + + Format: + + .include /string/ or + + .include ^/string/ + + + where: string represents a string that is the file specifica- + tion of an ASxxxx source file. + + / / represent the delimiting characters. These + delimiters may be any paired printing + characters, as long as the characters are not + contained within the string itself. If the + delimiting characters do not match, the .include + directive will give the (q) error. + + The .include directive is used to insert a source file within + the source file currently being assembled. When this directive + is encountered, an implicit .page directive is issued. When the + end of the specified source file is reached, an implicit .page + directive is issued and input continues from the previous source + file. The maximum nesting level of source files specified by a + .include directive is five. + + The total number of separately specified .include files is + unlimited as each .include file is opened and then closed during + each pass made by the assembler. + + The default directory path, if none is specified, for any + .include file is the directory path of the current file. For + example: if the current source file, D:\proj\file1.asm, + + + THE ASSEMBLER PAGE 1-45 + GENERAL ASSEMBLER DIRECTIVES + + + includes a file specified as "include1" then the file + D:\proj\include1.asm is opened. + + + + + THE ASSEMBLER PAGE 1-46 + GENERAL ASSEMBLER DIRECTIVES + + + 1.4.41 .setdp Directive + + Format: + + .setdp [base [,area]] + + The set direct page directive has a common format in all the as- + semblers supporting a paged mode. The .setdp directive is used + to inform the assembler of the current direct page region and + the offset address within the selected area. The normal invoca- + tion methods are: + + .area DIRECT (PAG) + .setdp + + or + + .setdp 0,DIRECT + + for all the 68xx microprocessors (the 6804 has only the paged + ram area). The commands specify that the direct page is in area + DIRECT and its offset address is 0 (the only valid value for all + but the 6809 microprocessor). Be sure to place the DIRECT area + at address 0 during linking. When the base address and area are + not specified, then zero and the current area are the defaults. + If a .setdp directive is not issued the assembler defaults the + direct page to the area "_CODE" at offset 0. + + The assembler verifies that any local variable used in a + direct variable reference is located in this area. Local vari- + able and constant value direct access addresses are checked to + be within the address range from 0 to 255. + + External direct references are assumed by the assembler to be + in the correct area and have valid offsets. The linker will + check all direct page relocations to verify that they are within + the correct area. + + The 6809 microprocessor allows the selection of the direct + page to be on any 256 byte boundary by loading the appropriate + value into the dp register. Typically one would like to select + the page boundary at link time, one method follows: + + + THE ASSEMBLER PAGE 1-47 + GENERAL ASSEMBLER DIRECTIVES + + + .area DIRECT (PAG) ; define the direct page + .setdp + . + . + . + .area PROGRAM + . + ldd #DIRECT ; load the direct page register + tfr a,dp ; for access to the direct page + + At link time specify the base and global equates to locate the + direct page: + + -b DIRECT = 0x1000 + -g DIRECT = 0x1000 + + Both the area address and offset value must be specified (area + and variable names are independent). The linker will verify + that the relocated direct page accesses are within the direct + page. + + The preceeding sequence could be repeated for multiple paged + areas, however an alternate method is to define a non-paged area + and use the .setdp directive to specify the offset value: + + .area DIRECT ; define non-paged area + . + . + . + .area PROGRAM + . + .setdp 0,DIRECT ; direct page area + ldd #DIRECT ; load the direct page register + tfr a,dp ; for access to the direct page + . + . + .setdp 0x100,DIRECT ; direct page area + ldd #DIRECT+0x100 ; load the direct page register + tfr a,dp ; for access to the direct page + + The linker will verify that subsequent direct page references + are in the specified area and offset address range. It is the + programmers responsibility to load the dp register with the cor- + rect page segment corresponding to the .setdp base address + specified. + + For those cases where a single piece of code must access a + defined data structure within a direct page and there are many + pages, define a dumby direct page linked at address 0. This + dumby page is used only to define the variable labels. Then + load the dp register with the real base address but donot use a + .setdp directive. This method is equivalent to indexed + + + THE ASSEMBLER PAGE 1-48 + GENERAL ASSEMBLER DIRECTIVES + + + addressing, where the dp register is the index register and the + direct addressing is the offset. + + + 1.4.42 .16bit, .24bit, and .32bit Directives + + Format: + + .16bit ;specify 16-bit addressing + .24bit ;specify 24-bit addressing + .32bit ;specify 32-bit addressing + + + The .16bit, .24bit, and .32bit directives are special direc- + tives for assembler configuration when default values are not + used. + + + 1.5 INVOKING ASXXXX + + + Starting an ASxxxx assembler without any arguments provides + the following option list and then exits: + + Usage: [-Options] file + Usage: [-Options] outfile file1 [file2 file3 ...] + -d Decimal listing + -q Octal listing + -x Hex listing (default) + -g Undefined symbols made global + -a All user symbols made global + -b Display .define substitutions in listing + -bb and display without .define substitutions + -c Disable instruction cycle count in listing + -j Enable NoICE Debug Symbols + -y Enable SDCC Debug Symbols + -l Create list output (out)file[.lst] + -o Create object output (out)file[.rel] + -s Create symbol output (out)file[.sym] + -p Disable listing pagination + -u Disable .list/.nlist processing + -w Wide listing format for symbol table + -z Disable case sensitivity for symbols + -f Flag relocatable references by ` in listing file + -ff Flag relocatable references by mode in listing file + + + + The ASxxxx assemblers are command line oriented. Most sytems + require the option(s) and file(s) arguments to follow the ASxxxx + assembler name: + + as6809 -[Options] file + + as6809 [-Options] outfile file1 [file2 ...] + + + Some systems may request the arguments after the assembler is + started at a system specific prompt: + + as6809 + argv: -[Options] file + + as6809 + argv: [-Options] outfile file1 [file2 ...] + + + The ASxxxx options in some more detail: + + -d decimal listing + + + THE ASSEMBLER PAGE 1-51 + INVOKING ASXXXX + + + -q octal listing + -x hex listing (default) + + The listing radix affects the + .lst, .rel, and .sym files. + + -g undefined symbols made global + + Unresolved (external) variables + and symbols are flagged as global. + + -a all user symbols made global + + All defined (not local or external) + variables and symbols are flagged + as global. + + -b display .define substitutions in listing + + If a .define substitution has been applied + to an assembler source line the source + line is printed with the substitution. + + -bb and display without .define substitutions + + If a .define substitution has been applied + to an assembler source line the source + line is first printed without substitution + followed by the line with the substitution. + + -c Disable instruction cycle count in listing + + This option overrides the listing option + 'cyc' in the .list and .nlist directives. + Instruction cycle counts cannot be enabled + if the -c option is specified. + + -j enable NOICE debug symbols + -y enable SDCC debug symbols + + -l create list output (out)file.lst + + If -s (symbol table output) is not + specified the symbol table is included + at the end of the listing file. + + -o create object output (out)file.rel + -s create symbol output (out)file.sym + + -p disable listing pagination + + This option inhibits the generation + + + THE ASSEMBLER PAGE 1-52 + INVOKING ASXXXX + + + of a form-feed character and its + associated page header in the + assembler listing. + + -u disable .list/.nlist processing + + This option disables all .list and + .nlist directives. The listing mode + is .list with the options err, loc, + bin, eqt, cyc, lin, src, pag, lst, + and md. The options cyc and pag are + overridden by the -c and -p command + line options. + + -w wide listing format for symbol table + + -z disable case sensitivity for symbols + + -f by ` in the listing file + -ff by mode in the listing file + + Relocatable modess are flagged by byte + position (LSB, Byte 2, Byte 3, MSB) + *nMN paged, + uvUV unsigned, + rsRS signed, + pqPQ program counter relative. + + asx8051 specific command line option: + -I<dir> Add the named directory to the include file + search path. This option may be used more than once. + Directories are searched in the order given. + + The file name for the .lst, .rel, and .sym files is the first + file name specified in the command line. All output files are + ascii text files which may be edited, copied, etc. The output + files are the concatenation of all the input files, if files are + to be assembled independently invoke the assembler for each + file. + + The .rel file contains a radix directive so that the linker + will use the proper conversion for this file. Linked files may + have different radices. + + ASXXXX assemblers supported by and distributed with SDCC are: + sdas390 (Dallas 80390) + sdas6808 (Motorola 68HC08) + sdas8051 (Intel 8051) + sdasgb (GameBoy Z80-like CPU) + sdasrab (Rabbit Z80-like CPU) + sdasz80 (Zilog Z80 / Hitachi HD64180) + + + 1.6 ERRORS + + + The ASxxxx assemblers provide limited diagnostic error codes + during the assembly process, these errors will be noted in the + listing file and printed on the stderr device. + + The assembler reports the errors on the stderr device as + + ?ASxxxx-Error-<*> in line nnn of filename + + where * is the error code, nnn is the line number, and filename + + + THE ASSEMBLER PAGE 1-53 + ERRORS + + + is the source/include file. + + The errors are: + + (.) This error is caused by an absolute direct assign- + ment of the current location counter + . = expression (incorrect) + rather than the correct + . = . + expression + + (a) Indicates a machine specific addressing or address- + ing mode error. + + (b) Indicates a direct page boundary error. + + (d) Indicates a direct page addressing error. + + (i) Caused by an .include file error or an .if/.endif + mismatch. + + (m) Multiple definitions of the same label, multiple + .module directives, multiple conflicting attributes + in an .area directive. + + (n) An .mexit, .endm, or .narg directive outside of a + macro, repeat block or indefinite repeat block. + + (o) Directive or mnemonic error or the use of the .org + directive in a relocatable area. + + (p) Phase error: label location changing between passes + 2 and 3. Normally caused by having more than one + level of forward referencing. + + (q) Questionable syntax: missing or improper operators, + terminators, or delimiters. + + (r) Relocation error: logic operation attempted on a + relocatable term, addition of two relocatable terms, + subtraction of two relocatable terms not within the + same programming area or external symbols. + + (s) String Substitution / recursion error. + + (u) Undefined symbol encountered during assembly. + + (z) Divide by 0 or Modulus by 0 error: result is 0. + + + + + THE ASSEMBLER PAGE 1-54 + LISTING FILE + + + 1.7 LISTING FILE + + + The (-l) option produces an ascii output listing file. Each + page of output contains a five line header: + + + 1. The ASxxxx program name and page number + + 2. Assembler Radix and Address Bits + + 3. Title from a .title directive (if any) + + 4. Subtitle from a .sbttl directive (if any) + + 5. Blank line + + + + Each succeeding line contains six fields: + + + 1. Error field (first two characters of line) + + 2. Current location counter + + 3. Generated code in byte format + + 4. Opcode cycles count + + 5. Source text line number + + 6. Source text + + + The error field may contain upto 2 error flags indicating any + errors encountered while assembling this line of source code. + + The current location counter field displays the 16-bit, + 24-bit, or 32-bit program position. This field will be in the + selected radix. + + The generated code follows the program location. The listing + radix determines the number of bytes that will be displayed in + this field. Hexadecimal listing allows six bytes of data within + the field, decimal and octal allow four bytes within the field. + If more than one field of data is generated from the assembly of + a single line of source code, then the data field is repeated on + successive lines. + + The opcode cycles count is printed within the delimiters [ ] + on the line with the source text. This reduces the number of + + + THE ASSEMBLER PAGE 1-55 + LISTING FILE + + + generated code bytes displayed on the line with the source list- + ing by one. (The -c option disables all opcode cycle listing.) + + The source text line number is printed in decimal and is fol- + lowed by the source text. A Source line with a .page directive + is never listed. (The -u option overrides this behavior.) + + Two additional options are available for printing the source + line text. If the -b option is specified then the listed source + line contains all the .define substitutions. If the -bb option + is specified then the original source line is printed before the + source line with substitutions. + + Two data field options are available to flag those bytes + which will be relocated by the linker. If the -f option is + specified then each byte to be relocated will be preceeded by + the '`' character. If the -ff option is specified then each + byte to be relocated will be preceeded by one of the following + characters: + + 1. * paged relocation + + 2. u low byte of unsigned word or unsigned byte + + 3. v high byte of unsigned word + + 4. p PCR low byte of word relocation or PCR byte + + 5. q PCR high byte of word relocation + + 6. r low byte relocation or byte relocation + + 7. s high byte relocation + + + Assemblers which use 24-bit or 32-bit addressing use an ex- + tended flagging mode: + + 1. * paged relocation + + 2. u 1st byte of unsigned value + + 3. v 2nd byte of unsigned value + + 4. U 3rd byte of unsigned value + + 5. V 4th byte of unsigned value + + 6. p PCR 1st byte of relocation value or PCR byte + + 7. q PCR 2nd byte of relocation value + + + + THE ASSEMBLER PAGE 1-56 + LISTING FILE + + + 8. P PCR 3rd byte of relocation value + + 9. Q PCR 4th byte of relocation value + + 10. r 1st byte of relocation value or byte relocation + + 11. s 2nd byte of relocation value + + 12. R 3rd byte of relocation value + + 13. S 4th byte of relocation value + + + + 1.8 SYMBOL TABLE FILE + + + The symbol table has two parts: + + 1. The alphabetically sorted list of symbols and/or labels + defined or referenced in the source program. + + 2. A list of the program areas defined during assembly of + the source program. + + + The sorted list of symbols and/or labels contains the follow- + ing information: + + 1. Program area number (none if absolute value or exter- + nal) + + 2. The symbol or label + + 3. Directly assigned symbol is denoted with an (=) sign + + 4. The value of a symbol, location of a label relative to + the program area base address (=0), or a **** indicat- + ing the symbol or label is undefined. + + 5. The characters: G - global, L - local, + R - relocatable, and X - external. + + + The list of program areas provides the correspondence between + the program area numbers and the defined program areas, the size + of the program areas, and the area flags (attributes). + + + + + THE ASSEMBLER PAGE 1-57 + OBJECT FILE + + + 1.9 OBJECT FILE + + + The object file is an ascii file containing the information + needed by the linker to bind multiple object modules into a com- + plete loadable memory image. The object module contains the + following designators: + + [XDQ][HL][234] + X Hexadecimal radix + D Decimal radix + Q Octal radix + + H Most significant byte first + L Least significant byte first + + 2 16-Bit Addressing + 3 24-Bit Addressing + 4 32-Bit Addressing + + H Header + M Module + A Area + S Symbol + T Object code + R Relocation information + P Paging information + + Refer to the linker for a detailed description of each of the + designators and the format of the information contained in the + object file. + + + + + + + + + + + + + + + CHAPTER 2 + + THE MACRO PROCESSOR + + + + + + 2.1 DEFINING MACROS + + + By using macros a programmer can use a single line to insert + a sequence of lines into a source program. + + A macro definition is headed by a .macro directive followed + by the source lines. The source lines may optionally contain + dummy arguments. If such arguments are used, each one is listed + in the .macro directive. + + A macro call is the statement used by the programmer to call + the macro source program. It consists of the macro name fol- + lowed by the real arguments needed to replace the dummy argu- + ments used in the macro. + + Macro expansion is the insertion of the macro source lines + into the main program. Included in this insertion is the + replacement of the dummy arguments by the real arguments. + + Macro directives provide a means to manipulate the macro ex- + pansions. Only one directive is allowed per source line. Each + directive may have a blank operand field or one or more + operands. Legal operands differ with each directive. The + macros and their associated directives are detailed in this + chapter. + + Macro directives can replace any machine dependent mnemonic + associated with a specific assembler. However, the basic assem- + bler directives cannot be replaced with a macro. + + + THE MACRO PROCESSOR PAGE 2-2 + DEFINING MACROS + + + 2.1.1 .macro Directive + + + Format: + + [label:] .macro name, dummy argument list + + where: label represents an optional statement label. + + name represents the user-assigned symbolic + name of the macro. This name may be + any legal symbol and may be used as a + label elsewhere in the program. The + macro name is not case sensitive, + name, NAME, or nAmE all refer to the + same macro. + + , represents a legal macro separator + (comma, space, and/or tab). + + dummy represents a number of legal symbols + argument that may appear anywhere in the body of + list the macro definition, even as a label. + These dummy symbols can be used elsewhere + in the program with no conflict of + definition. Multiple dummy arguments + specified in this directive may be + separated by any legal separator. The + detection of a duplicate or an illegal + symbol in a dummy argument list + terminates the scan and causes a 'q' + error to be generated. + + + A comment may follow the dummy argument list in a .macro direc- + tive, as shown below: + + .macro abs a,b ;Defines macro abs + + + The first statement of a macro definition must be a .macro + directive. Defining a macro with the same name as an existing + macro will generate an 'm' error. The .mdelete directive should + be used to delete the previous macro definition before redefin- + ing a macro. + + + + + THE MACRO PROCESSOR PAGE 2-3 + DEFINING MACROS + + + 2.1.2 .endm Directive + + + Format: + + .endm + + + The .endm directive should not have a label. Because the direc- + tives .irp, .irpc, and .rept may repeat more than once the label + will be defined multiple times resulting in 'm' and/or 'p' er- + rors. + + The .endm directive may be followed by a comment field, as + shown below: + + .endm ;end of macro + + A comment may follow the dummy argument list in a .macro + directive, as shown below: + + .macro typemsg message ;Type a message. + jsr typemsg + .word message + .endm ;End of typemsg + + + The final statement of every macro definition must be a .endm + directive. The .endm directive is also used to terminate inde- + finite repeat blocks and repeat blocks. A .endm directive en- + countered outside a macro definition is flagged with an 'n' + error. + + + 2.1.3 .mexit Directive + + + Format: + + .mexit + + + The .mexit directive may be used to terminate a macro expansion + before the end of the macro is encountered. This directive is + also legal within repeat blocks. It is most useful in nested + macros. The .mexit directive terminates the current macro as + though a .endm directive had been encountered. Using the .mexit + directive bypasses the complexities of nested conditional direc- + tives and alternate assembly paths, as shown in the following + example: + + + + THE MACRO PROCESSOR PAGE 2-4 + DEFINING MACROS + + + .macro altr N,A,B + . + . + . + .if eq,N ;Start conditional Block + . + . + . + .mexit ;Terminate macro expansion + .endif ;End of conditional block + . + . + . + .endm ;Normal end of macro + + + In an assembly where the symbol N is replaced by zero, the + .mexit directive would assemble the conditional block and ter- + minate the macro expansion. When macros ar nested, a .mexit + directive causes an exit to the next higher level of macro ex- + pansion. A .mexit directive encountered outside a macro defini- + tion is flagged with an 'n' error. + + + 2.2 CALLING MACROS + + + Format: + + [label:] name real arguments + + where: label represents an optional statement label. + + name represents the name of the macro, as + specified in the macro definition. + + real represent symbolic arguments which + arguments replace the dummy arguments listed + in the .macro definition. When + multiple arguments occur, they are + separated by any legal separator. + Arguments to the macro call are + treated as character strings, their + usage is determined by the macro + definition. + + A macro definition must be established by means of the .macro + directive before the macro can be called and expanded within the + source program. + + When a macro name is the same as a user label, the appearance + of the symbol in the operator field designates the symbol as a + + + THE MACRO PROCESSOR PAGE 2-5 + CALLING MACROS + + + macro call; the appearance of the symbol in the operand field + designates it as a label, as shown below: + + LESS: mov @r0,r1 ;LESS is a label + . + . + . + bra LESS ;LESS is considered a label + . + . + . + LESS sym1,sym2 ;LESS is a macro call + + + 2.3 ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + Multiple arguments within a macro must be separated by one of + the legal separating characters (comma, space, and/or tab). + + Macro definition arguments (dummy) and macro call arguments + (real) maintain a strict positional relationship. That is, the + first real argument in a macro call corresponds with the first + dummy argument in the macro definition. + + For example, the following macro definition and its asso- + ciated macro call contain multiple arguments: + + .macro new a,b,c + . + . + . + + new phi,sig,^/C1,C2/ + + + Arguments which themselves contain separating characters must be + enclosed within the delimiter construct ^/ / where the + character '/' may be any character not in the argument string. + For example, the macro call: + + new ^/exg x,y/,#44,ij + + causes the entire expression + + exg x,y + + to replace all occurrances of the symbol a in the macro defini- + tion. Real arguments with a macro call are considered to be + character strings and are treated as a single entity during + macro expansion. + + + + THE MACRO PROCESSOR PAGE 2-6 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + The up-arrow (^) construction also allows another up-arrow + costruction to be passed as part of the argument. This con- + struction, for example, could have been used in the above macro + call, as follows: + + new ^!^/exg x,y/!,#44,ij + + causing the entire string ^/exg x,y/ to be passed as an argu- + ment. + + + 2.3.1 Macro Nesting + + + Macro nesting occurs where the expansion of one macro in- + cludes a call to another macro. The depth of nesting is arbi- + trarily limited to 20. + + To pass an argument containing legal argument delimiters to + nested macros, enclose the argument in the macro definition + within an up-arrow construction, as shown in the coding example + below. This extra set of delimiters for each level of nesting + is required in the macro definition, not the in the macro call. + + .macro level1 dum1,dum2 + level2 ^/dum1/ + level2 ^/dum2/ + .endm + + .macro level2 dum3 + dum3 + add #10,z + push z + .endm + + A call to the level1 macro, as shown below, for example: + + level1 ^/leaz 0,x/,^/tfr x,z/ + + causes the following macro expansion to occur: + + leaz 0,x + add #10,z + push z + tfr x,z + add #10,z + push z + + When macro definitions are nested, the inner definition cannot + be called until the outer macro has been called and expanded. + For example, in the following code: + + + + THE MACRO PROCESSOR PAGE 2-7 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + .macro lv1 a,b + . + . + . + .macro lv2 c + . + . + . + .endm + .endm + + the lv2 macro cannot be called and expanded until the lv1 macro + has been expanded. Likewise, any macro defined within the lv2 + macro definition cannot be called and expanded until lv2 has + also been expanded. + + + 2.3.2 Special Characters in Macro Arguments + + + If an argument does not contain spaces, tabs, or commas it + may include special characters without enclosing them in a + delimited construction. For example: + + .macro push arg + mov arg,-(sp) + .endm + + + push x+3(%2) + + causes the following code to be generated: + + mov x+3(%2),-(sp) + + + 2.3.3 Passing Numerical Arguments as Symbols + + + If the unary operator backslash (\) precedes an argument, the + macro treats the argument as a numeric value in the current pro- + gram radix. The ascii characters representing this value are + inserted in the macro expansion, and their function is defined + in the context of the resulting code, as shown in the following + example: + + + + THE MACRO PROCESSOR PAGE 2-8 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + .macro inc a,b + con a,\b + b = b + 1 + .endm + + .macro con a,b + a'b: .word 4 + .endm + + ... + + c = 0 ;Initialize + + inc x,c + + The above macro call (inc) would thus expand to: + + x0: .word 4 + + In this expanded code, the lable x0: results from the con- + catenation of two real arguments. The single quote (') + character in the label a'b: concatenates the real argument x + and 0 as they are passed during the expansion of the macro. + This type of argument construction is descibed in more detail in + a following section. + + A subsequent call to the same macro would generate the fol- + lowing code: + + x1: .word 4 + + and so on, for later calls. The two macro definitions are + necessary because the symbol associated with the dummy argument + b (that is, symbol c) cannot be updated in the con macro defini- + tion, because the character 0 has replaced c in the argument + string (inc x,c). In the con macro definition, the number + passed is treated as a string argument. (Where the value of the + real argument is 0, only a single 0 character is passed to the + macro expansion. + + + + + THE MACRO PROCESSOR PAGE 2-9 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + 2.3.4 Number of Arguments in Macro Calls + + + A macro can be defined with or without arguments. If more + arguments appear in the macro call than in the macro definition, + a 'q' error is generated. If fewer arguments appear in the + macro call than in the macro definition, missing arguments are + assumed to be null values. The conditional directives .if b and + .if nb can be used within the macro to detect missing arguments. + The number of arguments can be determined using the .narg direc- + tive. + + + 2.3.5 Creating Local Symbols Automatically + + + A label is often required in an expanded macro. In the con- + ventional macro facilituies thus far described, a label must be + explicitly specified as an argument with each macro call. The + user must be careful in issuing subsequent calls to the same + macro in order avoid duplicating labels. This concern can be + eliminated through a feature of the ASxxxx macro facility that + creates a unique symbol where a label is required in an expanded + macro. + + ASxxxx allows temporary symbols of the form n$, where n is a + decimal integer. Automatically created symbols are created in + numerical order beginning at 10000$. + + The automatic generation of local symbols is invoked on each + call of a macro whose definition contains a dummy argument pre- + ceded by the question mark (?) character, as shown in the macro + definition below: + + .macro beta a,?b ;dummy argument b with ? + tst a + beq b + add #5,a + b: + .endm + + + A local symbol is created automatically only when a real ar- + gument of the macro call is either null or missing, as shown in + Example 1 below. If the real argument is specified in the macro + call, however, generation of the local symbol is inhibited and + normal argument replacement occurs, as shown in Example 2 below. + (Examples 1 and 2 are both expansions of the beta macro defined + above.) + + + + THE MACRO PROCESSOR PAGE 2-10 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + Example 1: Create a Local Symbol for the Missing Argument + + beta flag ;Second argument is missing. + tst flag + beq 10000$ ;Local symbol is created. + add #5,flag + 10000$: + + Example 2: Do Not Create a Local Symbol + + beta r3,xyz + tst r3 + beq xyz + add #5,r3 + xyz: + + + Automatically created local symbols resulting from the expan- + sion of a macro, as described above, do not establish a local + symbol block in their own right. + + When a macro has several arguments earmarked for automatic + local symbol generation, substituting a specific label for one + such argument risks assembly errors because the arguments are + constructed at the point of macro invocation. Therefor, the ap- + pearance of a label in the macro expansion will create a new lo- + cal symbol block. The new local symbol block could leave local + symbol references in the previous block and their symbol defini- + tions in the new one, causing error codes in the assembly list- + ing. Furthermore a later macro expansion that creates local + symbols in the new block may duplicate one of the symbols in + question, causing an additional error code 'p' in the assembly + listing. + + + 2.3.6 Concatenation of Macro Arguments + + + The apostrophe or single quote character (') operates as a + legal delimiting character in macro definitions. A single quote + that precedes and/or follows a dummy argument in a macro defini- + tion is removed, and the substitution of the real argument oc- + curs at that point. For example, in the following statements: + + .macro def A,B,C + A'B: asciz "C" + .byte ''A,''B + .endm + + when the macro def is called through the statement: + + + + THE MACRO PROCESSOR PAGE 2-11 + ARGUMENTS IN MACRO DEFINITIONS AND MACRO CALLS + + + def x,y,^/V05.00/ + + it is expanded, as follows: + + xy: asciz "V05.00" + .byte 'x,'y + + In expanding the first line, the scan for the first argument + terminates upon finding the first apostrophe (') character. + Since A is a dummy argument, the apostrphe (') is removed. The + scan then resumes with B; B is also noted as another dummy ar- + gument. The two real arguments x and y are then concated to + form the label xy:. The third dummy argument is noted in the + operand field of the .asciz directive, causing the real argument + V05.00 to be substituted in this field. + + When evaluating the arguments of the .byte directive during + expansion of the second line, the scan begins with the first + apostrophe (') character. Since it is neither preceded nor fol- + lowed by a dummy argument, this apostrophe remains in the macro + expansion. The scan then encounters the second apostrophe, + which is followed by a dummy argument and is therefor discarded. + The scan of argument A is terminated upon encountering the comma + (,). The third apostrophe is neither preceded nor followed by a + dummy argument and again remains in the macro expansion. The + fourth (and last) apostrophe is followed by another dummy argu- + ment and is likewise discarded. (Four apostrophe (') characters + were necessary in the macro definition to generate two apos- + trophe (') characters in the macro expansion.) + + + 2.4 MACRO ATTRIBUTE DIRECTIVES + + + The ASxxxx assemblers have four directives that allow the + user to determine certain attributes of macro arguments: .narg, + .nchr, .ntyp, and .nval. The use of these directives permits + selective modifications of a macro expansion, depending on the + nature of the arguments being passed. These directives are + described below. + + + THE MACRO PROCESSOR PAGE 2-12 + MACRO ATTRIBUTE DIRECTIVES + + + 2.4.1 .narg Directive + + + Format: + + [label:] .narg symbol + + where: label represents an optional statement label. + + symbol represents any legal symbol. This symbol + is equated to the number of arguments in + the macro call currently being expanded. + If a symbol is not specified, the .narg + directive is flagged with a 'q' error. + + The .narg directive is used to determine the number of arguments + in the macro call currently being expanded. Hence, the .narg + directive can appear only within a macro definition; if it ap- + pears elsewhere, an 'n' error is generated. + + The argument count includes null arguments as shown in the + following: + + .macro pack A,B,C + .narg cnt + . + . + . + .endm + + pack arg1,,arg3 + pack arg1 + + When the first macro pack is invoked .narg will assign a value + of three (3) to the number of arguments cnt, which includes the + empty argument. The second invocation of macro pack has only a + single argument specified and .narg will assign a value of one + (1) to cnt. + + + THE MACRO PROCESSOR PAGE 2-13 + MACRO ATTRIBUTE DIRECTIVES + + + 2.4.2 .nchr Directive + + + Format: + + [label:] .nchr symbol,string + + where: label represents an optional statement label. + + symbol represents any legal symbol. This symbol + is equated to the number of characters in + the string of the macro call currently + being expanded. If a symbol is not + specified, the .nchr directive is + flagged with a 'q' error. + + , represents any legal separator (comma, + space, and/or tab). + + string represents a string of printable 7-bit + ascii characters. If the character + string contains a legal separator + (comma, space and/or tab) the whole + string must be delimited using the + up-arrow (^) construct ^/ /. + If the delimiting characters do not + match or if the ending delimiter + cannot be detected because of a + syntactical error in the character + string, the .nchr directive reports + a 'q' error. + + The .nchr directive, which can appear anywhere in an ASxxxx pro- + gram, is used to determine the number of characters in a speci- + fied character string. This directive is useful in calculating + the length of macro arguments. + + + THE MACRO PROCESSOR PAGE 2-14 + MACRO ATTRIBUTE DIRECTIVES + + + 2.4.3 .ntyp Directive + + + Format: + + [label:] .ntyp symbol,arg + + where: label represents an optional statement label. + + symbol represents any legal symbol. The symbol + is made absolute and equated to 0 if + arg is an absolute value or a non + relocatable symbol. The symbol is made + absolute and equated to 1 if arg is a + relocatable symbol. If a symbol is not + specified then the .ntyp directive is + flagged with a 'q' error. + + , represents any legal separator (comma, + space, and/or tab). + + arg represents any legal expression or + symbol. If arg is not specified + then the .ntyp directive is flagged + with a 'q' error. + + The .ntyp directive, which can appear anywhere in an ASxxxx pro- + gram, is used to determine the symbol or expression type as ab- + solute (0) or relocatable (1). + + + 2.4.4 .nval Directive + + + Format: + + [label:] .nval symbol,arg + + where: label represents an optional statement label. + + symbol represents any legal symbol. The symbol + is equated to the value of arg and made + absolute. If a symbol is not specified + then the .nval directive is flagged + with a 'q' error. + + , represents any legal separator (comma, + space, and/or tab). + + arg represents any legal expression or + symbol. If arg is not specified + then the .nval directive is flagged + + + THE MACRO PROCESSOR PAGE 2-15 + MACRO ATTRIBUTE DIRECTIVES + + + with a 'q' error. + + The .nval directive, which can appear anywhere in an ASxxxx pro- + gram, is used to determine the value of arg and make the result + an absolute value. + + + 2.5 INDEFINITE REPEAT BLOCK DIRECTIVES + + + An indefinite repeat block is similar to a macro definition + with only one dummy argument. At each expansion of the inde- + finite repeat range, this dummy argument is replaced with suc- + cessive elements of a real argument list. Since the repeat + directive and its associated range are coded in-line within the + source program, this type of macro definition and expansion does + not require calling the macro by name, as required in the expan- + sion of the conventional macros previously described. + + An indefinite repeat block can appear within or outside + another macro definition, indefinite repeat block, or repeat + block. The rules specifying indefinite repeat block arguments + are the same as for specifying macro arguments. + + + THE MACRO PROCESSOR PAGE 2-16 + INDEFINITE REPEAT BLOCK DIRECTIVES + + + 2.5.1 .irp Directive + + + Format: + + [label:] .irp sym,argument_list + . + . + (range of indefinite repeat block) + . + . + .endm + + where: label represents an optional statement label. + + sym represents a dummy argument that is + replaced with successive real arguments + from the argument list. If the dummy + argument is not specified, the .irp + directive is flagged with a 'q' error. + + , represents any legal separator (comma, + space, and/or tab). + + argument_list represents a list of real arguments + that are to be used in the expansion + of the indefinite repeat range. A real + argument may consist of one or more + 7-bit ascii characters; multiple + arguments must be separated by any + legal separator (comma, space, and/or + tab). If an argument must contain + a legal separator then the up-arrow + (_^) construct is require for that + argument. If no real arguments are + specified, no action is taken. + + range represents the block of code to be + repeated once for each occurrence of + a real argument in the list. The + range may contain other macro + definitions, repeat ranges and/or + the .mexit directive. + + .endm indicates the end of the indefinite + repeat block range. + + The .irp directive is used to replace a dummy argument with suc- + cessive real arguments specified in an argument list. This + replacement process occurrs during the expansion of an inde- + finite repeat block range. + + + THE MACRO PROCESSOR PAGE 2-17 + INDEFINITE REPEAT BLOCK DIRECTIVES + + + 2.5.2 .irpc Directive + + + Format: + + [label:] .irpc sym,string + . + . + (range of indefinite repeat block) + . + . + .endm + + where: label represents an optional statement label. + + sym represents a dummy argument that is + replaced with successive real characters + from the argument string. If the dummy + argument is not specified, the .irpc + directive is flagged with a 'q' error. + + , represents any legal separator (comma, + space, and/or tab). + + string represents a list of 7-bit ascii + characters. If the string contains + legal separator characters (comma, + space, and/or tab) then the up-arrow + (_^) construct must delimit the string. + + range represents the block of code to be + repeated once for each occurrence of + a real argument in the list. The + range may contain other macro + definitions, repeat ranges and/or + the .mexit directive. + + .endm indicates the end of the indefinite + repeat block range. + + The .irpc directive is available to permit single character sub- + stition. On each iteration of the indefinite repeat range, the + dummy argument is replaced with successive characters in the + specified string. + + + THE MACRO PROCESSOR PAGE 2-18 + INDEFINITE REPEAT BLOCK DIRECTIVES + + + 2.6 REPEAT BLOCK DIRECTIVE + + + A repeat block is similar to a macro definition with only one + argument. The argument specifies the number of times the repeat + block is inserted into the assembly stream. Since the repeat + directive and its associated range are coded in-line within the + source program, this type of macro definition and expansion does + not require calling the macro by name, as required in the expan- + sion of the conventional macros previously described. + + A repeat block can appear within or outside another macro de- + finition, indefinite repeat block, or repeat block. + + + 2.6.1 .rept + + + Format: + + [label:] .rept exp + . + . + (range of repeat block) + . + . + .endm + + where: label represents an optional statement label. + + exp represents any legal expression. + This value controls the number of + times the block of code is to be assembled + within the program. When the expression + value is less than or equal to zero (0), + the repeat block is not assembled. If + this value is not an absolute value, the + .rept directive is flagged with an 'r' + error. + + range represents the block of code to be + repeated. The range may contain other + macro definitions, repeat ranges and/or + the .mexit directive. + + .endm indicates the end of the repeat block + range. + + The .rept directive is used to duplicate a block of code, a cer- + tain number of times, in line with other source code. + + + THE MACRO PROCESSOR PAGE 2-19 + REPEAT BLOCK DIRECTIVE + + + 2.7 MACRO DELETION DIRECTIVE + + + The .mdelete directive deletes the definitions of the the + specified macro(s). + + + 2.7.1 .mdelete + + + Format: + + .mdelete name1,name2,...,namen + + where: name1, represent legal macro names. When multiple + name2, names are specified, they are separated + ..., by any legal separator (comma, space, and/or + namen tab). + + + + 2.8 MACRO INVOCATION DETAILS + + + The invocation of a macro, indefinite repeat block, or repeat + block has specific implications for .if-.else-.endif constructs + and for .list-.nlist directives. + + At the point a macro, indefinite repeat block, or repeat + block is called the following occurs: + + 1) The initial .if-.else-.endif + state is saved. + + 2) The initial .list-.nlist + state is saved. + + 3) The macro, indefinite repeat block, + or repeat block is inserted into the + assembler source code stream. All + argument substitution is performed + at this point. + + When the macro completes and after each pass through an inde- + finite repeat block or repeat block the .if-.else-.endif and + .list-.nlist state is reset to the initial state. + + The reset of the .if-.else-.endif state means that the invo- + cation of a macro, indefinite repeat block, or repeat block can- + not change the .if-.else-.endif state of the calling code. For + example the following code does not change the .if-.else-.endif + condition at macro completion: + + + THE MACRO PROCESSOR PAGE 2-20 + MACRO INVOCATION DETAILS + + + + + .macro fnc A + .if nb,^!A! + ... + .list (meb) + .mexit + .else + ... + .nlist + .mexit + .endif + .endm + + code: fnc + + + Within the macro the .if condition becomes false but the con- + dition is not propagated outside the macro. + + Similarly, when the .list-.nlist state is changed within a + macro the change is not propogated outside the macro. + + The normal .if-.else-.endif processing verifies that every + .if has a corresponding .endif. When a macro, indefinite repeat + block, or repeat block terminates by using the .mexit directive + the .if-.endif checking is bypassed because all source lines + between the .mexit and .endm directives are skipped. + + + 2.9 BUILDING A MACRO LIBRARY + + + Using the macro facilities of the ASxxxx assemblers a simple + macro library can be built. The macro library is built by com- + bining individual macros, sets of macros, or include file direc- + tives into a single file. Each macro entity is enclosed within + a .if/.endif block that selects the desired macro definitions. + + The selection of specific macros to be imported in a program + is performed by three macros, .mlib, .mcall, and .mload, con- + tained in the file mlib.def. + + + THE MACRO PROCESSOR PAGE 2-21 + BUILDING A MACRO LIBRARY + + + 2.9.1 .mlib Macro Directive + + + Format: + + .mlib file + + where: file represents the macro library file name. + If the file name does not include a path + then the path of the current assembly + file is used. If the file name (and/or + path) contains white space then the + path/name must be delimited with the + up-arrow (^) construct ^/ /. + + The .mlib directive defines two macros, .mcall and .mload, which + when invoked will read a file, importing specific macro defini- + tions. Any previous .mcall and/or .mload directives will be + deleted before the new .mcall and .mload directives are defined. + + The .mload directive is an internal directive which simply + includes the macro library file with the listing disabled. + + The following is the mlib.def file which defines the macros + .mlib, .mcall, and .mload. + + + + THE MACRO PROCESSOR PAGE 2-22 + BUILDING A MACRO LIBRARY + + + ;************************************************ + ;* * + ;* A simple Macro Library Implementation * + ;* * + ;* December 2008 * + ;* * + ;************************************************ + + .macro .mlib FileName + .if b,^!FileName! + .error 1 ; File Name Required + .mexit + .endif + .mdelete .mcall + .macro .mcall a,b,c,d,e,f,g,h + .irp sym ^!a!,^!b!,^!c!,^!d!,^!e!,^!f!,^!g!,^!h! + .iif nb,^!sym! .define .$$.'sym + .endm + .mload + .irp sym ^!a!,^!b!,^!c!,^!d!,^!e!,^!f!,^!g!,^!h! + .if nb,^!sym! + .iif ndef,sym'.$$. .error 1 ; macro not found + .undefine .$$.'sym + .undefine sym'.$$. + .endif + .endm + .endm ;.mcall + .mdelete .mload + .macro .mload + .nlist + .include ^!FileName! + .list + .endm ;.mload + .endm ;.mlib + + + 2.9.2 .mcall Macro Directive + + + Format: + + .mcall macro1,macro2,...,macro8 + + where: + + macro1, represents from 1 to 8 macro library + macro2, references to a macro definition or + ..., set of macro definitions included in + macro8 the file specified with the .mlib macro. + + As can be seen from the macro definition of .mlib and .mcall + shown above, when .mcall is invoked temporary symbols are + + + THE MACRO PROCESSOR PAGE 2-23 + BUILDING A MACRO LIBRARY + + + defined for each macro or macro set that is to be imported. The + macro .mload is then invoked to load the macro library file + specified in the call to .mlib. + + For example, when the following macros are invoked: + + .mlib crossasm.sml ; Cross Assembler Macros + .mcall M6809 ; M6809 Macro Group + + The .mlib macro defines the .mload macro to access the system + macro file crossasm.sml. Invoking the .mcall macro creates a + temporary symbol, '.$$.M6809', and then invokes the macro .mload + to import the system macro file crossasm.sml. The file cros- + sasm.sml contains conditional statements that define the re- + quired macros and creates a temporary symbol 'M6809.$$.' to + indicate the macro group was found. If the macro is not found + an error message is generated. + + The following is a small portion of the crossasm.sml system + macro file which shows the M6809 macro group: + + .title Cross Assembler Macro Library + + ; This MACRO Library is Case Insensitive. + ; + + ... + + ; Macro Based 6809 Cross Assembler + + .$.SML.$. =: 0 + .if idn a,A + .iif def,.$$.m6809 .$.SML.$. = -1 + .else + .iif def,.$$.m6809 .$.SML.$. = -1 + .iif def,.$$.M6809 .$.SML.$. = 1 + .endif + .iif lt,.$.SML.$. .define m6809.$$. + .iif gt,.$.SML.$. .define M6809.$$. + .iif ne,.$.SML.$. .include "m6809.mac" + + ... + + + + + + THE MACRO PROCESSOR PAGE 2-24 + EXAMPLE MACRO CROSS ASSEMBLERS + + + 2.10 EXAMPLE MACRO CROSS ASSEMBLERS + + + The 'ascheck' subdirectory 'macroasm' contains 7 assemblers + written using only the general macro processing facility of the + ASxxxx assemblers: + + i8085.mac - 8085 Microprocessor + m6800.mac - 6800 Microprocessor + m6801.mac - 6801 Microprocessor + m6804.mac - 6804 Microprocessor + m6805.mac - 6805 Microprocessor + m6809.mac - 6809 Microprocessor + s2650.mac - 2650 Microprocessor + + + These absolute macro cross assemblers are included to il- + lustrate the functionality of the general macro processing + facility of the ASxxxx assemblers. In general they are useful + examples of actual macro implementations. + + + + + + + + + + + + + + + CHAPTER 3 + + THE LINKER + + + + + + 3.1 ASLINK RELOCATING LINKER + + + ASLINK is the companion linker for the ASxxxx assemblers. + + The program ASLINK is a general relocating linker performing + the following functions: + + 1. Bind multiple object modules into a single memory image + + 2. Resolve inter-module symbol references + + 3. Combine code belonging to the same area from multiple + object files into a single contiguous memory region + + 4. Search and import object module libraries for undefined + global variables + + 5. Perform byte and word program counter relative + (pc or pcr) addressing calculations + + 6. Define absolute symbol values at link time + + 7. Define absolute area base address values at link time + + 8. Produce Intel Hex or Motorola S19 output file + + 9. Produce a map of the linked memory image + + 10. Produce an updated listing file with the relocated ad- + dresses and data + + + THE LINKER PAGE 3-2 + INVOKING ASLINK + + + 3.2 INVOKING ASLINK + + + Starting ASlink without any arguments provides the following + option list and then exits: + + Usage: [-Options] [-Option with arg] file + Usage: [-Options] [-Option with arg] outfile file [file ...] + -p Echo commands to stdout (default) + -n No echo of commands to stdout + Alternates to Command Line Input: + -c ASlink >> prompt input + -f file[.lnk] Command File input + Librarys: + -k Library path specification, one per -k + -l Library file specification, one per -l + Relocation: + -b area base address=expression + -g global symbol=expression + Map format: + -m Map output generated as (out)file[.map] + -w Wide listing format for map file + -x Hexadecimal (default) + -d Decimal + -q Octal + Output: + -i Intel Hex as (out)file[.i--] + -s Motorola S Record as (out)file[.s--] + -j NoICE Debug output as (out)file[.noi] + -y SDCDB Debug output as (out)file[.cdb] + -o Linked file/library object output enable (default) + -v Linked file/library object output disable + List: + -u Update listing file(s) with link data as file(s)[.rst] + Case Sensitivity: + -z Disable Case Sensitivity for Symbols + End: + -e or null line terminates input + + + + + NOTE + + When ASlink is invoked with a single filename the + created output file will have the same filename as the + .rel file. + + When ASlink is invoked with multiple filenames the + first filename is the output filename and the remain- + ing filenames are linked together into the output + + + THE LINKER PAGE 3-3 + INVOKING ASLINK + + + filename. + + + + + Most sytems require the options to be entered on the command + line: + + aslink [-Options] [-Options with args] file + + aslink [-Options] [-Options with args] outfile file1 [file2 + ...] + + + Some systems may request the arguments after the linker is + started at a system specific prompt: + + aslink + argv: -[options] -[option arg] file + + aslink + argv: [-Options] [-Options with args] outfile file1 [file2 + ...] + + + The linker commands are explained in some more detail: + + 1. -c ASlink >> prompt mode. + The ASlink >> prompt mode reads linker commands from + stdin. + + 2. -f file Command file mode. + The command file mode imports linker commands from the + specified file (extension must be .lnk), imported -c + and -f commands are ignored. If the directory path, + for a file to be linked, is not specified in the com- + mand file then the path defaults to the .lnk file + directory path. + + 3. -p/-n enable/disable echoing commands to stdout. + + 4. -i/-s Intel Hex (file.i--), or Motorola S (file.s--) + image output file. + + 5. -o/-v Specifies that subsequent linked + files/libraries will generate object output (default) + or suppress object output. (if option -i, -s, or -t + was specified) + + 6. -z Disable Case Sensitivity for Symbols + + + + THE LINKER PAGE 3-4 + INVOKING ASLINK + + + 7. -m Generate a map file (file.map). This file + contains a list of the symbols (by area) with absolute + addresses, sizes of linked areas, and other linking in- + formation. + + 8. -w Specifies that a wide listing format be used + for the map file. + + 9. -xdq Specifies the number radix for the map file + (Hexadecimal, Decimal, or Octal). + + 10. -u Generate an updated listing file (file.rst) + derived from the relocated addresses and data from the + linker. + + 11. file File(s) to be linked. Files may be on the + same line as the above options or on a separate line(s) + one file per line or multiple files separated by spaces + or tabs. + + 12. -b area=expression + (one definition per line in a linker command file.) + This specifies an area base address where the expres- + sion may contain constants and/or defined symbols from + the linked files. + + 13. -g symbol=expression + (one definition per line in a linker command file.) + This specifies the value for the symbol where the ex- + pression may contain constants and/or defined symbols + from the linked files. + + 14. -k library directory path + (one definition per line in a linker command file.) + This specifies one possible path to an object library. + More than one path is allowed. + + 15. -l library file specification + (one definition per line in a linker command file.) + This specifies a possible library file. More than one + file is allowed. + + 16. -e or null line, terminates input to the linker. + + ASLINK linker supported by and distributed with SDCC are: + sdld + + sdld specific options: + + Miscellaneous: + -I [iram-size] Check for internal RAM overflow + -X [xram-size] Check for external RAM overflow + -C [code-size] Check for code overflow + -M Generate memory usage summary file[mem] + -Y Pack internal ram + -S [stack-size] Allocate space for stack + -E ELF executable as file[elf] + + THE LINKER PAGE 3-5 + LIBRARY PATH(S) AND FILE(S) + + + 3.3 LIBRARY PATH(S) AND FILE(S) + + + The process of resolving undefined symbols after scanning the + input object files includes the scanning of object module + libraries. The linker will search through all combinations of + the library path specifications (input by the -k option) and the + library file specifications (input by the -l option) that lead + to an existing library file. Each library file contains a list + (one file per line) of modules included in this particular + library. Each existing object module is scanned for a match to + the undefined symbol. The first module containing the symbol is + then linked with the previous modules to resolve the symbol de- + finition. The library object modules are rescanned until no + more symbols can be resolved. The scanning algorithm allows + resolution of back references. No errors are reported for non + existant library files or object modules. + + The library file specification may be formed in one of two + ways: + + 1. If the library file contained an absolute path/file + specification then this is the object module's + path/file. + (i.e. C:\... or C:/...) + + 2. If the library file contains a relative path/file + specification then the concatenation of the path and + this file specification becomes the object module's + path/file. + (i.e. \... or /...) + + + As an example, assume there exists a library file termio.lib + in the syslib directory specifying the following object modules: + + \6809\io_disk first object module + d:\special\io_comm second object module + + and the following parameters were specified to the linker: + + -k c:\iosystem\ the first path + -k c:\syslib\ the second path + + -l termio the first library file + -l io the second library file (no such file) + + The linker will attempt to use the following object modules to + resolve any undefined symbols: + + c:\syslib\6809\io_disk.rel (concatenated path/file) + d:\special\io_comm.rel (absolute path/file) + + + THE LINKER PAGE 3-6 + LIBRARY PATH(S) AND FILE(S) + + + + all other path(s)/file(s) don't exist. (No errors are reported + for non existant path(s)/file(s).) + + + 3.4 ASLINK PROCESSING + + + The linker processes the files in the order they are + presented. The first pass through the input files is used to + define all program areas, the section area sizes, and symbols + defined or referenced. Undefined symbols will initiate a search + of any specified library file(s) and the importing of the module + containing the symbol definition. After the first pass the -b + (area base address) definitions, if any, are processed and the + areas linked. + + The area linking proceeds by first examining the area types + ABS, CON, REL, OVR and PAG. Absolute areas (ABS) from separate + object modules are always overlayed and have been assembled at a + specific address, these are not normally relocated (if a -b com- + mand is used on an absolute area the area will be relocated). + Relative areas (normally defined as REL|CON) have a base address + of 0x0000 as read from the object files, the -b command speci- + fies the beginning address of the area. All subsequent relative + areas will be concatenated with proceeding relative areas. + Where specific ordering is desired, the first linker input file + should have the area definitions in the desired order. At the + completion of the area linking all area addresses and lengths + have been determined. The areas of type PAG are verified to be + on a 256 byte boundary and that the length does not exceed 256 + bytes. Any errors are noted on stderr and in the map file. + + Next the global symbol definitions (-g option), if any, are + processed. The symbol definitions have been delayed until this + point because the absolute addresses of all internal symbols are + known and can be used in the expression calculations. + + Before continuing with the linking process the symbol table + is scanned to determine if any symbols have been referenced but + not defined. Undefined symbols are listed on the stderr device. + if a .module directive was included in the assembled file the + module making the reference to this undefined variable will be + printed. + + Constants defined as global in more than one module will be + flagged as multiple definitions if their values are not identi- + cal. + + After the preceeding processes are complete the linker may + output a map file (-m option). This file provides the following + information: + + + THE LINKER PAGE 3-7 + ASLINK PROCESSING + + + 1. Global symbol values and label absolute addresses + + 2. Defined areas and there lengths + + 3. Remaining undefined symbols + + 4. List of modules linked + + 5. List of library modules linked + + 6. List of -b and -g definitions + + + + + The final step of the linking process is performed during the + second pass of the input files. As the xxx.rel files are read + the code is relocated by substituting the physical addresses for + the referenced symbols and areas and may be output in Intel or + Motorola formats. The number of files + linked and symbols defined/referenced is limited by the proces- + sor space available to build the area/symbol lists. If the -u + option is specified then the listing files (file.lst) associated + with the relocation files (file.rel) are scanned and used to + create a new file (file.rst) which has all addresses and data + relocated to their final values. + + The -o/-v options allow the simple creation of loadable or + overlay modules. Loadable and overlay modules normally need to + be linked with a main module(s) to resolve external symbols. + The -o/-v options can be used to enable object output for the + loadable or overlay module(s) and suppress the object code from + the linked main module(s). The -o/-v options can be applied + repeatedly to specify a single linked file, groups of files, or + libraries for object code inclusion or suppression. + + + THE LINKER Page 3-15 + ASXXXX VERSION 3.XX LINKING + + + 3.6 ASXXXX VERSION 3.XX LINKING + + + The linkers' input object file is an ascii file containing + the information needed by the linker to bind multiple object + modules into a complete loadable memory image. + + The object module contains the following designators: + + [XDQ][HL][234] + X Hexadecimal radix + D Decimal radix + Q Octal radix + + H Most significant byte first + L Least significant byte first + + 2 16-Bit Addressing + 3 24-Bit Addressing + 4 32-Bit Addressing + + H Header + M Module + A Area + S Symbol + T Object code + R Relocation information + P Paging information + + + 3.6.1 Object Module Format + + + The first line of an object module contains the + [XDQ][HL][234] format specifier (i.e. XH2 indicates a hexa- + decimal file with most significant byte first and 16-bit ad- + dressing) for the following designators. + + + 3.6.2 Header Line + + H aa areas gg global symbols + + The header line specifies the number of areas(aa) and the + number of global symbols(gg) defined or referenced in this ob- + ject module segment. + + + + + THE LINKER PAGE 3-16 + ASXXXX VERSION 3.XX LINKING + + + 3.6.3 Module Line + + M name + + The module line specifies the module name from which this + header segment was assembled. The module line will not appear + if the .module directive was not used in the source program. + + + 3.6.4 Area Line + + A label size ss flags ff + + The area line defines the area label, the size (ss) of the + area in bytes, and the area flags (ff). The area flags specify + the ABS, REL, CON, OVR, and PAG parameters: + + OVR/CON (0x04/0x00 i.e. bit position 2) + + ABS/REL (0x08/0x00 i.e. bit position 3) + + PAG (0x10 i.e. bit position 4) + + + 3.6.5 Symbol Line + + S name Defnnnn + + or + + S name Refnnnn + + The symbol line defines (Def) or references (Ref) the identi- + fier name with the value nnnn. The defined value is relative to + the current area base address. References to constants and ex- + ternal global symbols will always appear before the first area + definition. References to external symbols will have a value of + zero. + + + 3.6.6 T Line + + T xx xx nn nn nn nn nn ... + + The T line contains the assembled code output by the assem- + bler with xx xx being the offset address from the current area + base address and nn being the assembled instructions and data in + byte format. + + + + + THE LINKER PAGE 3-17 + ASXXXX VERSION 3.XX LINKING + + + 3.6.7 R Line + + R 0 0 nn nn n1 n2 xx xx ... + + The R line provides the relocation information to the linker. + The nn nn value is the current area index, i.e. which area the + current values were assembled. Relocation information is en- + coded in groups of 4 bytes: + + 1. n1 is the relocation mode and object format, for the + adhoc extension modes refer to asxxxx.h or aslink.h + 1. bit 0 word(0x00)/byte(0x01) + 2. bit 1 relocatable area(0x00)/symbol(0x02) + 3. bit 2 normal(0x00)/PC relative(0x04) relocation + 4. bit 3 1-byte(0x00)/2-byte(0x08) object format + 5. bit 4 signed(0x00)/unsigned(0x10) byte data + 6. bit 5 normal(0x00)/page '0'(0x20) reference + 7. bit 6 normal(0x00)/page 'nnn'(0x40) reference + 8. bit 7 LSB byte(0x00)/MSB byte(0x80) + + 2. n2 is a byte index into the corresponding (i.e. pre- + ceeding) T line data (i.e. a pointer to the data to be + updated by the relocation). The T line data may be + 1-byte or 2-byte byte data format or 2-byte word + format. + + 3. xx xx is the area/symbol index for the area/symbol be- + ing referenced. the corresponding area/symbol is found + in the header area/symbol lists. + + + The groups of 4 bytes are repeated for each item requiring relo- + cation in the preceeding T line. + + + 3.6.8 P Line + + P 0 0 nn nn n1 n2 xx xx + + The P line provides the paging information to the linker as + specified by a .setdp directive. The format of the relocation + information is identical to that of the R line. The correspond- + ing T line has the following information: + T xx xx aa aa bb bb + + Where aa aa is the area reference number which specifies the + selected page area and bb bb is the base address of the page. + bb bb will require relocation processing if the 'n1 n2 xx xx' is + specified in the P line. The linker will verify that the base + address is on a 256 byte boundary and that the page length of an + area defined with the PAG type is not larger than 256 bytes. + + + + THE LINKER PAGE 3-18 + ASXXXX VERSION 3.XX LINKING + + + The linker defaults any direct page references to the first + area defined in the input REL file. All ASxxxx assemblers will + specify the _CODE area first, making this the default page area. + + + 3.6.9 24-Bit and 32-Bit Addressing + + + When 24-bit or 32-bit addressing is specified in the file + format line [XDQ][HL][234] then the S and T Lines have modified + formats: + S name Defnnnnnn (24-bit) + S name Refnnnnnn (24-bit) + T xx xx xx nn nn nn nn nn ... (24-bit) + + S name Defnnnnnnnn (32-bit) + S name Refnnnnnnnn (32-bit) + T xx xx xx xx nn nn nn nn nn ... (32-bit) + + The multibyte formats for byte data replace the 2-byte form + for 16-bit data with 3-byte or 4-byte data for 24-bit or 32-bit + data respectively. The 2nd byte format (also named MSB) always + uses the second byte of the 2, 3, or 4-byte data. + + + 3.6.10 ASlink V3.xx Error Messages + + + The linker provides detailed error messages allowing the pro- + grammer to quickly find the errant code. As the linker com- + pletes pass 1 over the input file(s) it reports any page + boundary or page length errors as follows: + + ?ASlink-Warning-Paged Area PAGE0 Boundary Error + + and/or + + ?ASlink-Warning-Paged Area PAGE0 Length Error + + where PAGE0 is the paged area. + + During Pass two the linker reads the T, R, and P lines per- + forming the necessary relocations and outputting the absolute + code. Various errors may be reported during this process + + + THE LINKER PAGE 3-19 + ASXXXX VERSION 3.XX LINKING + + + The P line processing can produce only one possible error: + + ?ASlink-Warning-Page Definition Boundary Error + file module pgarea pgoffset + PgDef t6809l t6809l PAGE0 0001 + + The error message specifies the file and module where the .setdp + direct was issued and indicates the page area and the page + offset value determined after relocation. + + + The R line processing produces various errors: + + ?ASlink-Warning-Byte PCR relocation error for symbol bra2 + ?ASlink-Warning-Unsigned Byte error for symbol two56 + ?ASlink-Warning-Page0 relocation error for symbol ltwo56 + ?ASlink-Warning-Page Mode relocation error for symbol two56 + ?ASlink-Warning-Page Mode relocation error + ?ASlink-Warning-2K Page relocation error + ?ASlink-Warning-512K Page relocation error + + These error messages also specify the file, module, area, and + offset within the area of the code referencing (Refby) and de- + fining (Defin) the symbol: + + ?ASlink-Warning-Unsigned Byte error for symbol two56 + file module area offset + Refby t6800l t6800l DIRECT 0015 + Defin tconst tconst . .ABS. 0100 + + If the symbol is defined in the same module as the reference the + linker is unable to report the symbol name. The assembler list- + ing file(s) should be examined at the offset from the specified + area to locate the offending code. + + The errors are: + + 1. The byte PCR error is caused by exceeding the pc rela- + tive byte branch range. + + 2. The Unsigned byte error indicates an indexing value was + negative or larger than 255. + + 3. The Page0 error is generated if the direct page vari- + able is not in the page0 range of 0 to 255. + + 4. The page mode error is generated if the direct variable + is not within the current direct page (6809). + + 5. The 2K Page relocation error is generated if the + destination is not within the current 2K page (8051, + DS8xCxxx). + + + THE LINKER PAGE 3-20 + ASXXXX VERSION 3.XX LINKING + + + 6. The 512K Page relocation error is generated if the + destination is not within the current 512K page + (DS80C390). + + + + THE LINKER Page 3-21 + INTEL IHX OUTPUT FORMAT + + + 3.7 INTEL IHX OUTPUT FORMAT (16-BIT) + + Record Mark Field - This field signifies the start of a + record, and consists of an ascii colon + (:). + + Record Length Field - This field consists of two ascii + characters which indicate the number of + data bytes in this record. The + characters are the result of converting + the number of bytes in binary to two + ascii characters, high digit first. An + End of File record contains two ascii + zeros in this field. + + Load Address Field - This field consists of the four ascii + characters which result from converting + the the binary value of the address in + which to begin loading this record. The + order is as follows: + + High digit of high byte of address. + Low digit of high byte of address. + High digit of low byte of address. + Low digit of low byte of address. + + In an End of File record this field con- + sists of either four ascii zeros or the + program entry address. + + Record Type Field - This field identifies the record type, + which is either 0 for data records or 1 + for an End of File record. It consists + of two ascii characters, with the high + digit of the record type first, followed + by the low digit of the record type. + + Data Field - This field consists of the actual data, + converted to two ascii characters, high + digit first. There are no data bytes in + the End of File record. + + Checksum Field - The checksum field is the 8 bit binary + sum of the record length field, the load + address field, the record type field, + and the data field. This sum is then + negated (2's complement) and converted + to two ascii characters, high digit + first. + + + THE LINKER Page 3-22 + INTEL I86 OUTPUT FORMAT + + + 3.8 INTEL I86 OUTPUT FORMAT (24 OR 32-BIT) + + Record Mark Field - This field signifies the start of a + record, and consists of an ascii colon + (:). + + Record Length Field - This field consists of two ascii + characters which indicate the number of + data bytes in this record. The + characters are the result of converting + the number of bytes in binary to two + ascii characters, high digit first. An + End of File record contains two ascii + zeros in this field. + + Load Address Field - This field consists of the four ascii + characters which result from converting + the the binary value of the address in + which to begin loading this record. The + order is as follows: + + High digit of high byte of address. + Low digit of high byte of address. + High digit of low byte of address. + Low digit of low byte of address. + + In an End of File record this field con- + sists of either four ascii zeros or the + program entry address. + + Record Type Field - This field identifies the record type, + which is either 0 for data records, 1 + for an End of File record, or 4 for a + segment record. It consists of two + ascii characters, with the high digit of + the record type first, followed by the + low digit of the record type. + + Data Field - This field consists of the actual data, + converted to two ascii characters, high + digit first. There are no data bytes in + the End of File record. + + Checksum Field - The checksum field is the 8 bit binary + sum of the record length field, the load + address field, the record type field, + and the data field. This sum is then + negated (2's complement) and converted + to two ascii characters, high digit + first. + + + THE LINKER Page 3-23 + MOTOROLA S1-S9 OUTPUT FORMAT + + + 3.9 MOTORLA S1-S9 OUTPUT FORMAT (16-BIT) + + Record Type Field - This field signifies the start of a + record and identifies the the record + type as follows: + + Ascii S1 - Data Record + Ascii S9 - End of File Record + + Record Length Field - This field specifies the record length + which includes the address, data, and + checksum fields. The 8 bit record + length value is converted to two ascii + characters, high digit first. + + Load Address Field - This field consists of the four ascii + characters which result from converting + the the binary value of the address in + which to begin loading this record. The + order is as follows: + + High digit of high byte of address. + Low digit of high byte of address. + High digit of low byte of address. + Low digit of low byte of address. + + In an End of File record this field con- + sists of either four ascii zeros or the + program entry address. + + Data Field - This field consists of the actual data, + converted to two ascii characters, high + digit first. There are no data bytes in + the End of File record. + + Checksum Field - The checksum field is the 8 bit binary + sum of the record length field, the load + address field, and the data field. This + sum is then complemented (1's comple- + ment) and converted to two ascii + characters, high digit first. + + + + + + + + + + + + + + + CHAPTER 4 + + BUILDING ASXXXX AND ASLINK + + + + + The assemblers and linker have been successfully compiled for + Linux, DOS, and various flavors of Windows using the Linux GCC, + the Cygwin environment, the DJGPP environment, and the graphical + user interfaces and command line environments of + MS Visual C++ V6.0, MS Visual Studio 2005, + MS Visual Studio 2010, Open Watcom V1.7, Symantec C/C++ V7.2, + and Turbo C 3.0. + + Makefiles for Linux, Cygwin, DJGPP, project files and a + makefile for Turbo C and psuedo makefiles and project files for + VC6, VS2005, VS2010, Open Watcom and Symantec are available to + build all the assemblers and the linker. + + Unpack the asxv5pxx.zip file into an appropriate directory + using the utility appropriate to your environment. For DOS or + Windows the following command line will unpack the distribution + zip file: + + pkunzip -d asxv5pxx.zip + + + The distribution file has been packed with DOS style end of + lines (CR/LF), and UPPER CASE file names. The Linux make file + assumes all lower case directories and file names. For Linux + the unpacking utility you choose should have an option to force + all lower case directories / file names and convert the ascii + files to local format. On most systems the following command + should do the trick: + + unzip -L -a asxv5pxx.zip + + Some systems may require a -LL option to force all lower case. + + The distribution will be unpacked into the base directory + 'asxv5pxx' which will contain source directories for each sup- + ported processor (as6800, asz80, ...), the machine independent + source (asxxsrc), the linker source (linksrc), and the + + + BUILDING ASXXXX AND ASLINK Page 4-2 + + + + miscellaneous sources (asxxmisc). Other directories include the + documentation (asxdoc), test file directory (asxtst), html do- + cumentation (asxhtml), NoICE support files (noice), various + debug monitors that can be assembled with the ASxxxx assemblers + (asmasm), project files for an application that uses the AS6809 + assembler and ASlink linker (project), and the packaging direc- + tory (zipper). + + + 4.1 BUILDING ASXXXX AND ASLINK WITH LINUX + + + The Linux build directory is /asxv5pxx/asxmak/linux/build. + The makefile in this directory is compatible with the Linux GNU + make and GCC. The command + + make clean + + will remove all the current executable files in directory + /asxv5pxx/asxmak/linux/exe and all the compiled object modules + from the /asxv5pxx/asxmak/linux/build directory. + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + 4.2 BUILDING ASXXXX AND ASLINK UNDER CYGWIN + + + The Cygwin build directory is \asxv5pxx\asxmak\cygwin\build. + The makefile in this directory is compatible with the Cygwin GNU + make and GCC. The command + + make clean + + will remove all the current executable files in directory + \asxv5pxx\asxmak\cygwin\exe and all the compiled object modules + from the \asxv5pxx\asxmak\cygwin\build directory. The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific + + + BUILDING ASXXXX AND ASLINK PAGE 4-3 + BUILDING ASXXXX AND ASLINK UNDER CYGWIN + + + assembler, linker, or utility you wish to build: + + make aslink + + + 4.3 BUILDING ASXXXX AND ASLINK WITH DJGPP + + + The DJGPP build directory is \asxv5pxx\asxmak\djgpp\build. + The makefile in this directory is compatible with the DJGPP GNU + make and GCC. The command + + make clean + + will remove all the current executable files in directory + \asxv5pxx\asxmak\djgpp\exe and all the compiled object modules + from the \asxv5pxx\asxmak\djgpp\build directory. The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + 4.4 BUILDING ASXXXX AND ASLINK WITH BORLAND'S TURBO C++ 3.0 + + + The Borland product is available in the Borland Turbo C++ + Suite which contains C++ Builder 1.0, Turbo C++ 4.5 for Windows + and Turbo C++ 3.0 for DOS. The DOS IDE will install and run on + x86 (16 or 32 bit) versions of Windows (not x64 versions). + + + 4.4.1 Graphical User Interface + + + Each ASxxxx Assembler has two project specific files + (*.dsk and *.prj) located in the subdirectory + \asxv5pxx\asxmak\turboc30\build. You must enter the .prj + filename into the Turbo C++ IDE: enter Options->Directories and + change the include and output directories to match your confi- + guration. After these changes have been made you will be able + to compile the selected project. These changes must be manually + entered for each project. + + + + + BUILDING ASXXXX AND ASLINK PAGE 4-4 + BUILDING ASXXXX AND ASLINK WITH BORLAND'S TURBO C++ 3.0 + + + 4.4.2 Command Line Interface + + + Before the command line interface can be used you must per- + form the steps outlined in the 'Graphical User Interface' in- + structions above for each project you wish to build. + + Open a command prompt window in the + \asxv5pxx\asxmak\turboc30\build directory. Assuming the Turbo C + compiler has been installed in the default location (C:\TC) the + file _setpath.bat will set the PATH variable. If this is not + the case then the line + + PATH=C:\TC;C:\TC\BIN;C:\TC\INCLUDE + + must be changed to match your environment. The compiled object + code modules will be placed in the + \asxv5pxx\asxmak\turboc30\build\ directory and the executable + files will be placed in the \asxv5pxx\asxmak\turboc30\exe direc- + tory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The Turbo C make utility uses the information in the correspond- + ing .prj and .dsk files to compile and link the programs. + + The file _makeall.bat found in the directory can also be used + to invoke the Turbo C command line compiler. The _makeall.bat + file calls the _setpath.bat file to set the path to the compiler + directories in the environment variable PATH and then invokes + 'make all'. + + + + + BUILDING ASXXXX AND ASLINK PAGE 4-5 + BUILDING ASXXXX AND ASLINK WITH MS VISUAL C++ 6.0 + + + 4.5 BUILDING ASXXXX AND ASLINK WITH MS VISUAL C++ 6.0 + + + + 4.5.1 Graphical User Interface + + + Each ASxxxx Assembler has a VC6 project file (*.dsw) located + in a subdirectory of \asxv5pxx\asxmak\vc6\build. Simply enter + this project filename into the VC6 IDE and build/rebuild the as- + sembler. + + + 4.5.2 Command Line Interface + + + Open a command prompt window in the + \asxv5pxx\asxmak\vc6\build directory. The file make.bat found + in the directory can be used to invoke the VC6 command line com- + piler. The make.bat file assumes that the Visual C++ compiler + has been installed in the default location. If this is not the + case then the line + + SET MS$DEV="C:\Program Files\Microsoft Visual Studio\ + Common\MSDev98\Bin\msdev.exe" + + must be changed to match your environment. The compiled object + code modules will be placed in the + \asxv5pxx\asxmak\vc6\build\as----\release directory and the exe- + cutable files will be placed in the \asxv5pxx\asxmak\vc6\exe + directory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The VC6 command line compiler uses the information in the cor- + responding .dsw/.dsp files to compile and link the programs. + + The command 'make clean' is not required or valid as a make + of anything does a complete rebuild of the program. + + + + BUILDING ASXXXX AND ASLINK PAGE 4-6 + BUILDING ASXXXX AND ASLINK WITH MS VISUAL STUDIO 2005 + + + 4.6 BUILDING ASXXXX AND ASLINK WITH MS VISUAL STUDIO 2005 + + + + 4.6.1 Graphical User Interface + + + Each ASxxxx Assembler has a VS2005 project file (*.vcproj) + located in a subdirectory of \asxv5pxx\asxmak\vs05\build. Sim- + ply enter this project filename into the VS2005 IDE and + build/rebuild the assembler. + + + 4.6.2 Command Line Interface + + + Open a command prompt window in the + \asxv5pxx\asxmak\vs05\build directory. The file make.bat found + in the directory can be used to invoke the VS2005 command line + compiler. The make.bat file assumes that the Visual C++ com- + piler has been installed in the default location. If this is + not the case then the line + + SET VC$BUILD="C:\Program Files\Microsoft Visual Studio 8\ + Common\MSDev98\Bin\msdev.exe" + + must be changed to match your environment. The compiled object + code modules will be placed in the + \asxv5pxx\asxmak\vs05\build\as----\release directory and the ex- + ecutable files will be placed in the \asxv5pxx\asxmak\vs05\exe + directory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The VS2005 command line compiler uses the information in the + corresponding .vcproj file to compile and link the programs. + + The command 'make clean' is not required or valid as a make + of anything does a complete rebuild of the program. + + + + BUILDING ASXXXX AND ASLINK PAGE 4-7 + BUILDING ASXXXX AND ASLINK WITH MS VISUAL STUDIO 2010 + + + 4.7 BUILDING ASXXXX AND ASLINK WITH MS VISUAL STUDIO 2010 + + + + 4.7.1 Graphical User Interface + + + Each ASxxxx Assembler has a VS2010 project file (*.vcxproj) + located in a subdirectory of \asxv5pxx\asxmak\vs10\build. Sim- + ply enter this project filename into the VS2010 IDE and + build/rebuild the assembler. + + + 4.7.2 Command Line Interface + + + Open a command prompt window in the + \asxv5pxx\asxmak\vs10\build directory. The file make.bat found + in the directory can be used to invoke the VS2010 command line + compiler. The make.bat file assumes that the Visual C++ com- + piler has been installed in the default location. If this is + not the case then the line + + call "c:\Program Files (x86)\Microsoft Visual Studio 10.0\ + VC\bin\vcvars32.bat" + + must be changed to match your environment. The compiled object + code modules will be placed in the + \asxv5pxx\asxmak\vs10\build\as----\release directory and the ex- + ecutable files will be placed in the \asxv5pxx\asxmak\vs10\exe + directory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The VS2010 command line compiler uses the information in the + corresponding .vcxproj file to compile and link the programs. + + The command 'make clean' is not required or valid as a make + of anything does a complete rebuild of the program. + + + + BUILDING ASXXXX AND ASLINK PAGE 4-8 + BUILDING ASXXXX AND ASLINK WITH OPEN WATCOM V1.9 + + + 4.8 BUILDING ASXXXX AND ASLINK WITH OPEN WATCOM V1.9 + + + + 4.8.1 Graphical User Interface + + + Each ASxxxx Assembler has a set of project files (.prj, .tgt, + .mk, .mk1, and .lk1) located in the subdirectory + \asxv5pxx\asxmak\watcom\build. You will have to edit the pro- + ject files to match your local file locations. + + + 4.8.2 Command Line Interface + + + Open a command prompt window in the + \asxv5pxx\asxmak\watcom\build directory. Assuming the Watcom + compiler has been installed in the default location (C:\WATCOM) + the file _setpath.bat will set the PATH variable. If this is + not the case then the line + + PATH=C:\WATCOM\BINNT;C:\WATCOM\BINW + + must be changed to match your environment. The compiled object + code modules will be placed in the + \asxv5pxx\asxmak\watcom\build\ directory and the executable + files will be placed in the \asxv5pxx\asxmak\watcom\exe direc- + tory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The Watcom command line compiler wmake.exe uses the information + in the corresponding project files to compile and link the pro- + grams. + + The file _makeall.bat found in the directory can also be used + to invoke the Watcom command line compiler. The _makeall.bat + file calls the _setpath.bat file to set the path to the compiler + + + BUILDING ASXXXX AND ASLINK PAGE 4-9 + BUILDING ASXXXX AND ASLINK WITH OPEN WATCOM V1.9 + + + directories in the environment variable PATH and then invokes + 'make all'. + + The command 'make clean' is not required or valid as a make + of anything does a complete rebuild of the program. + + + 4.9 BUILDING ASXXXX AND ASLINK WITH SYMANTEC C/C++ V7.2 + + + The Symantec product is no longer available but is included + for historical reasons (the final version, 7.5, was introduced + in 1996). The product had an excellent graphical user inter- + face, built in editor, project manager, and supported DOS, Ex- + tended DOS (the executable contained a built in DOS extender + which was rendered unusable in Windows 2000, after service pack + 2, or in Windows XP), Win95, and Windows NT. + + + 4.9.1 Graphical User Interface + + + Each ASxxxx Assembler has a series of project specific files + (*.bro, *.def, *.dpd, *.lnk, *.mak, *.opn, and *.prj) located in + in the subdirectory \asxv5pxx\asxmak\symantec\build. You must + enter the .prj filename into the Symantec IDE and then select + Project->Settings->Directories and change the include, target, + and compiler output directories to match your configuration. + After these changes have been made you will be able to compile + the selected project. These changes must be manually entered + for each project. + + + 4.9.2 Command Line Interface + + + Before the command line interface can be used you must per- + form the steps outlined in the 'Graphical User Interface' in- + structions above for each project you wish to build. + + Open a command prompt window in the + \asxv5pxx\asxmak\symantec\build directory. The file make.bat + found in the directory can be used to invoke the Symantec com- + mand line compiler. The make.bat file assumes that the path to + the compiler directories has been set in the environment vari- + able PATH. Assuming the Symantec compiler has been installed in + the default location (C:\SC) the file _setpath.bat will set the + PATH variable. If this is not the case then the line + + PATH=C:\SC;C:\SC\BIN;C:\SC\INCLUDE;C:\SC\LIB + + must be changed to match your environment. The compiled object + + + BUILDING ASXXXX AND ASLINK PAGE 4-10 + BUILDING ASXXXX AND ASLINK WITH SYMANTEC C/C++ V7.2 + + + code modules will be placed in the + \asxv5pxx\asxmak\symantec\build directory and the executable + files will be placed in the \asxv5pxx\asxmak\symantec\exe direc- + tory. + + + + The command + + make all + + will compile and link all the ASxxxx assemblers, the ASlink pro- + gram, and the utility programs asxscn and asxcnv. The make file + can make a single program by invoking make with the specific as- + sembler, linker, or utility you wish to build: + + make aslink + + + The Symantec make utility , smake.exe, uses the information in + the corresponding .mak files to compile and link the programs. + + The file _makeall.bat found in the directory can also be used + to invoke the Symantec command line compiler. The _makeall.bat + file calls the _setpath.bat file to set the path to the compiler + directories in the environment variable PATH and then invokes + 'make all'. + + + 4.10 THE _CLEAN.BAT AND _PREP.BAT FILES + + + Each of the build directories have two maintenance files: + _prep.bat and _clean.bat. The command file _prep.bat prepares + the particular compiler directories for distribution by removing + all exteraneous files but keeping the final compiled execut- + ables. The _clean.bat command file performs the same function + as _prep.bat and removes the compiled executables. + + + + + + + + + + + + + + + APPENDIX AK + + AS68(HC[S])08 ASSEMBLER + + + + + + AK.1 PROCESSOR SPECIFIC DIRECTIVES + + + The MC68HC(S)08 processor is a superset of the MC6805 proces- + sors. The AS6808 assembler supports the HC08, HCS08, 6805, and + HC05 cores. + + + AK.1.1 .hc08 Directive + + Format: + + .hc08 + + The .hc08 directive enables processing of only the HC08 specific + mnemonics. 6805/HC05/HCS08 mnemonics encountered without the + .hc08 directive will be flagged with an 'o' error. + + The .hc08 directive also selects the HC08 specific cycles + count to be output. + + + AK.1.2 .hcs08 Directive + + Format: + + .hcs08 + + The .hcs08 directive enables processing of the HCS08 specific + mnemonics. + + The .hcs08 directive also selects the HCS08 specific cycles + count to be output. + + + + + AS68(HC[S])08 ASSEMBLER PAGE AK-2 + PROCESSOR SPECIFIC DIRECTIVES + + + AK.1.3 .6805 Directive + + Format: + + .6805 + + The .6805 directive enables processing of only the 6805/HC05 + specific mnemonics. HC08/HCS08 mnemonics encountered without + the .hc08/.hcs08 directives will be flagged with an 'o' error. + + The .6805 directive also selects the MC6805 specific cycles + count to be output. + + + AK.1.4 .hc05 Directive + + Format: + + .hc05 + + The .hc05 directive enables processing of only the 6805/HC05 + specific mnemonics. HC08/HCS08 mnemonics encountered without + the .hc08/.hcs08 directives will be flagged with an 'o' error. + + The .hc05 directive also selects the MC68HC05/146805 specific + cycles count to be output. + + + AK.1.5 The .__.CPU. Variable + + + The value of the pre-defined symbol '.__.CPU.' corresponds to + the selected processor type. The default value is 0 which cor- + responds to the default processor type. The following table + lists the processor types and associated values for the AS6808 + assembler: + + Processor Type .__.CPU. Value + -------------- -------------- + .hc08 0 + .hcs08 1 + .6805 2 + .hc05 3 + + + The variable '.__.CPU.' is by default defined as local and + will not be output to the created .rel file. The assembler com- + mand line options -g or -a will not cause the local symbol to be + output to the created .rel file. + + The assembler .globl directive may be used to change the + variable type to global causing its definition to be output to + + + AS68(HC[S])08 ASSEMBLER PAGE AK-3 + PROCESSOR SPECIFIC DIRECTIVES + + + the .rel file. The inclusion of the definition of the variable + '.__.CPU.' might be a useful means of validating that seperately + assembled files have been compiled for the same processor type. + The linker will report an error for variables with multiple non + equal definitions. + + + AK.2 68HC(S)08 REGISTER SET + + The following is a list of the 68HC(S)08 registers used by + AS6808: + + a - 8-bit accumulator + x - index register <H:X> + s - stack pointer + + + AK.3 68HC(S)08 INSTRUCTION SET + + + The following tables list all 68HC(S)08 mnemonics recognized + by the AS6808 assembler. The designation [] refers to a re- + quired addressing mode argument. The following list specifies + the format for each addressing mode supported by AS6808: + + #data immediate data + byte or word data + + *dir direct page addressing + (see .setdp directive) + 0 <= dir <= 255 + + ,x register indexed addressing + zero offset + + offset,x register indexed addressing + 0 <= offset <= 255 --- byte mode + 256 <= offset <= 65535 --- word mode + (an externally defined offset uses the + word mode) + + ,x+ register indexed addressing + zero offset with post increment + + offset,x+ register indexed addressing + unsigned byte offset with post increment + + offset,s stack pointer indexed addressing + 0 <= offset <= 255 --- byte mode + 256 <= offset <= 65535 --- word mode + (an externally defined offset uses the + word mode) + + + AS68(HC[S])08 ASSEMBLER PAGE AK-4 + 68HC(S)08 INSTRUCTION SET + + + + ext extended addressing + + label branch label + + The terms data, dir, offset, and ext may all be expressions. + + Note that not all addressing modes are valid with every in- + struction, refer to the 68HC(S)08 technical data for valid + modes. + + + AK.3.1 Control Instructions + + clc cli daa div + mul nop nsa psha + pshh pshx pula pulh + pulx rsp rti rts + sec sei stop swi + tap tax tpa tsx + txa txs wait + + + AK.3.2 Bit Manipulation Instructions + + brset #data,*dir,label + brclr #data,*dir,label + + bset #data,*dir + bclr #data,*dir + + + AK.3.3 Branch Instructions + + bra label brn label + bhi label bls label + bcc label bcs label + bne label beq label + bhcc label bhcs label + bpl label bmi label + bmc label bms label + bil label bih label + bsr label bge label + blt label bgt label + ble label + + + AS68(HC[S])08 ASSEMBLER PAGE AK-5 + 68HC(S)08 INSTRUCTION SET + + + AK.3.4 Complex Branch Instructions + + cbeqa [],label + cbeqx [],label + cbeq [],label + dbnza label + dbnzx label + dbnz [],label + + + AK.3.5 Read-Modify-Write Instructions + + nega negx + neg [] + + coma comx + com [] + + lsra lsrx + lsr [] + + rora rorx + ror [] + + asra asrx + asr [] + + asla aslx + asl [] + + lsla lslx + lsl [] + + rola rolx + rol [] + + deca decx + dec [] + + inca incx + inc [] + + tsta tstx + tst [] + + clra clrx + clr [] clrh + + aix #data + + ais #data + + + AS68(HC[S])08 ASSEMBLER PAGE AK-6 + 68HC(S)08 INSTRUCTION SET + + + AK.3.6 Register\Memory Instructions + + sub [] cmp [] + sbc [] cpx [] + and [] bit [] + lda [] sta [] + eor [] adc [] + ora [] add [] + ldx [] stx [] + + + AK.3.7 Double Operand Move Instruction + + mov [],[] + + + AK.3.8 16-Bit <H:X> Index Register Instructions + + cphx [] + ldhx [] + sthx [] + + + AK.3.9 Jump and Jump to Subroutine Instructions + + jmp [] jsr [] + + + + + + + + + + + + + + + APPENDIX AR + + AS8051 ASSEMBLER + + + + + + AR.1 ACKNOWLEDGMENT + + + Thanks to John Hartman for his contribution of the AS8051 + cross assembler. + + John L. Hartman + jhartman at compuserve dot com + noice at noicedebugger dot com + + + AR.2 8051 REGISTER SET + + The following is a list of the 8051 registers used by AS8051: + + a,b - 8-bit accumulators + r0,r1,r2,r3 - 8-bit registers + r4,r5,r6,r7 + dptr - data pointer + sp - stack pointer + pc - program counter + psw - status word + c - carry (bit in status word) + + + AS8051 ASSEMBLER PAGE AR-2 + 8051 REGISTER SET + + + AR.3 8051 INSTRUCTION SET + + + The following tables list all 8051 mnemonics recognized by + the AS8051 assembler. The following list specifies the format + for each addressing mode supported by AS8051: + + #data immediate data + byte or word data + + r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7 + + @r indirect on register r0 or r1 + @dptr indirect on data pointer + @a+dptr indirect on accumulator + plus data pointer + @a+pc indirect on accumulator + plus program counter + + addr direct memory address + + bitaddr bit address + + label call or jump label + + The terms data, addr, bitaddr, and label may all be expressions. + + Note that not all addressing modes are valid with every in- + struction. Refer to the 8051 technical data for valid modes. + + + AR.3.1 Inherent Instructions + + nop + + + AS8051 ASSEMBLER PAGE AR-3 + 8051 INSTRUCTION SET + + + AR.3.2 Move Instructions + + mov a,#data mov a,addr + mov a,r mov a,@r + + mov r,#data mov r,addr + mov r,a + + mov addr,a mov addr,#data + mov addr,r mov addr,@r + mov addr1,addr2 mov bitaddr,c + + mov @r,#data mov @r,addr + mov @r,a + + mov c,bitaddr + mov dptr,#data + + movc a,@a+dptr movc a,@a+pc + movx a,@dptr movx a,@r + movx @dptr,a movx @r,a + + + AR.3.3 Single Operand Instructions + + clr a clr c + clr bitaddr + cpl a cpl c + cpl bitaddr + setb c setb bitaddr + + da a + rr a rrc a + rl a rlc a + swap a + + dec a dec r + dec @r + inc a inc r + inc dptr inc @r + + div ab mul ab + + pop addr push addr + + + AS8051 ASSEMBLER PAGE AR-4 + 8051 INSTRUCTION SET + + + AR.3.4 Two Operand Instructions + + add a,#data add a,addr + add a,r add a,@r + addc a,#data addc a,addr + addc a,r addc a,@r + subb a,#data subb a,addr + subb a,r subb a,@r + orl a,#data orl a,addr + orl a,r orl a,@r + orl addr,a orl addr,#data + orl c,bitaddr orl c,/bitaddr + anl a,#data anl a,addr + anl a,r anl a,@r + anl addr,a anl addr,#data + anl c,bitaddr anl c,/bitaddr + xrl a,#data xrl a,addr + xrl a,r xrl a,@r + xrl addr,a xrl addr,#data + xrl c,bitaddr xrl c,/bitaddr + xch a,addr xch a,r + xch a,@r xchd a,@r + + + AR.3.5 Call and Return Instructions + + acall label lcall label + ret reti + in data + out data + rst data + + + AR.3.6 Jump Instructions + + ajmp label + cjne a,#data,label cjne a,addr,label + cjne r,#data,label cjne @r,#data,label + djnz r,label djnz addr,label + jbc bitadr,label + jb bitadr,label jnb bitadr,label + jc label jnc label + jz label jnz label + jmp @a+dptr + ljmp label sjmp label + + + AS8051 ASSEMBLER PAGE AR-5 + 8051 INSTRUCTION SET + + + AR.3.7 Predefined Symbols: SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + FC FF + F8 FB + F4 F7 + F0 B F3 + EC EF + E8 EB + E4 E7 + E0 ACC E3 + DC DF + D8 DB + D4 D7 + D0 PSW D3 + CC [ TL2 TH2 ] CF + C8 [ T2CON RCAP2L RCAP2H ] CB + C4 C7 + C0 C3 + BC BF + B8 IP BB + B4 B7 + B0 P3 B3 + AC AF + A8 IE AB + A4 A7 + A0 P2 A3 + 9C 9F + 98 SCON SBUF 9B + 94 97 + 90 P1 93 + 8C TH0 TH1 8F + 88 TCON TMOD TL0 TL1 8B + 84 PCON 87 + 80 P0 SP DPL DPH 83 + + [...] Indicates Resident in 8052, not 8051 + A is an allowed alternate for ACC. + + + AS8051 ASSEMBLER PAGE AR-6 + 8051 INSTRUCTION SET + + + AR.3.8 Predefined Symbols: SFR Bit Addresses + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + FC FF + F8 FB + F4 B.4 B.5 B.6 B.7 F7 + F0 B.0 B.1 B.2 B.3 F3 + EC EF + E8 EB + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + DC DF + D8 DB + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + CC [ T2CON.4 T2CON.5 T2CON.6 T2CON.7 ] CF + C8 [ T2CON.0 T2CON.1 T2CON.2 T2CON.3 ] CB + C4 C7 + C0 C3 + BC IP.4 IP.5 IP.6 IP.7 BF + B8 IP.0 IP.1 IP.2 IP.3 BB + B4 P3.4 P3.5 P3.6 P3.7 B7 + B0 P3.0 P3.1 P3.2 P3.3 B3 + AC IE.4 IE.5 EI.6 IE.7 AF + A8 IE.0 IE.1 IE.2 IE.3 AB + A4 P2.4 P2.5 P2.6 P2.7 A7 + A0 P2.0 P2.1 P2.2 P2.3 A3 + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 94 P1.4 P1.5 P1.6 P1.7 97 + 90 P1.0 P1.1 P1.2 P1.3 93 + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 84 P0.4 P0.5 P0.6 P0.7 87 + 80 P0.0 P0.1 P0.2 P0.3 83 + + [...] Indicates Resident in 8052, not 8051 + A is an allowed alternate for ACC. + + + AS8051 ASSEMBLER PAGE AR-7 + 8051 INSTRUCTION SET + + + AR.3.9 Predefined Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + FC FF + F8 FB + F4 F7 + F0 F3 + EC EF + E8 EB + E4 E7 + E0 E3 + DC DF + D8 DB + D4 RS1 F0 AC CY D7 + D0 P OV RS0 D3 + CC [ TLCK RCLK EXF2 TF2 ] CF + C8 [ CPRL2 CT2 TR2 EXEN2 ] CB + C4 C7 + C0 C3 + BC PS PT2 BF + B8 PX0 PT0 PX1 PT1 BB + B4 B7 + B0 RXD TXD INT0 INT1 B3 + AC ES ET2 EA AF + A8 EX0 ET0 EX1 ET1 AB + A4 A7 + A0 A3 + 9C REN SM2 SM1 SM0 9F + 98 RI TI RB8 TB8 9B + 94 97 + 90 93 + 8C TR0 TF0 TR1 TF1 8F + 88 IT0 IE0 IT1 IE1 8B + 84 87 + 80 83 + + [...] Indicates Resident in 8052, not 8051 + + + + + + + + + + + + + + + APPENDIX AT + + AS8XCXXX ASSEMBLER + + + + + + AT.1 ACKNOWLEDGMENTS + + + Thanks to Bill McKinnon for his contributions to the AS8XCXXX + cross assembler. + + Bill McKinnon + w_mckinnon at conknet dot com + + This assembler was derived from the AS8051 cross assembler + contributed by John Hartman. + + John L. Hartman + jhartman at compuserve dot com + noice at noicedebugger dot com + + + AT.2 AS8XCXXX ASSEMBLER DIRECTIVES + + + + AT.2.1 Processor Selection Directives + + + The AS8XCXXX assembler contains directives to specify the + processor core SFR (Special Function Registers) and enable the + SFR Bit Register values during the assembly process. The fol- + lowing directives are supported: + + .DS8XCXXX ;80C32 core + .DS80C310 ;Dallas Semiconductor + .DS80C320 ;Microprocessors + .DS80C323 + .DS80C390 + .DS83C520 + .DS83C530 + + + AS8XCXXX ASSEMBLER PAGE AT-2 + AS8XCXXX ASSEMBLER DIRECTIVES + + + .DS83C550 + .DS87C520 + .DS87C530 + .DS87C550 + + The invocation of one of the processor directives creates a pro- + cessor specific symbol and an SFR-Bits symbol. For example the + directive + + .DS80C390 + + creates the global symbols '__DS80C390' and '__SFR_BITS' each + with a value of 1. If the microprocessor core selection direc- + tive is followed by an optional argument then the symbol + '__SFR_BITS' is given the value of the argument. The file + DS8XCXXX.SFR contains the SFR and SFR register bit values for + all the microprocessor selector directives. This file may be + modified to create a new SFR for other microprocessor types. + + If a microprocessor selection directive is not specified then + no processor symbols will be defined. This mode allows the SFR + and SFR register bit values to be defined by the assembly source + file. + + + AT.2.2 .cpu Directive + + + The .cpu directive is similar to the processor selection + directives. This directive defines a new processor type and + creates a user defined symbol: + + .cpu "CP84C331" 2 + + creates the symbol '__CP84C331' with a value of 1 and the + symbol '__SFR_BITS' with a value of 2. These values can be used + to select the processor SFR and SFR register bits from an in- + clude file. If the optional final argument, 2, is omitted then + the value of the symbol '__SFR_BITS' is 1. + + + + + AS8XCXXX ASSEMBLER PAGE AT-3 + AS8XCXXX ASSEMBLER DIRECTIVES + + + AT.2.3 Processor Addressing Range Directives + + + If one of the .DS8... microprocessor selection directives is + not specified then the following address range assembler direc- + tives are accepted: + + .16bit ;16-Bit Addressing + .24bit ;24-Bit Addressing + .32bit ;32-Bit Addressing + + These directives specify the assembler addressing space and ef- + fect the output format for the .lst, .sym, and .rel files. + + The default addressing space for defined microprocessors is + 16-Bit except for the DS80C390 microprocessor which is 24-Bit. + + The .cpu directive defaults to the 16-Bit addressing range + but this can be changed using these directives. + + + AT.2.4 The .__.CPU. Variable + + + The value of the pre-defined symbol '.__.CPU.' corresponds to + the selected processor type. The default value is 0 which cor- + responds to the default processor type. The following table + lists the processor types and associated values for the AS8XCXXX + assembler: + + Processor Type .__.CPU. Value + -------------- -------------- + .cpu 0 + + .DS8XCXXX 1 + .DS80C310 2 + .DS80C320 3 + .DS80C323 4 + .DS80C390 5 + .DS83C520 6 + .DS83C530 7 + .DS83C550 8 + .DS87C520 9 + .DS87C530 10 + .DS87C550 11 + + + The variable '.__.CPU.' is by default defined as local and + will not be output to the created .rel file. The assembler com- + mand line options -g or -a will not cause the local symbol to be + output to the created .rel file. + + + + AS8XCXXX ASSEMBLER PAGE AT-4 + AS8XCXXX ASSEMBLER DIRECTIVES + + + The assembler .globl directive may be used to change the + variable type to global causing its definition to be output to + the .rel file. The inclusion of the definition of the variable + '.__.CPU.' might be a useful means of validating that seperately + assembled files have been compiled for the same processor type. + The linker will report an error for variables with multiple non + equal definitions. + + + AT.2.5 DS80C390 Addressing Mode Directive + + + The DS80C390 microprocessor supports 16-Bit and 24-Bit ad- + dressing modes. The .amode assembler directive provides a + method to select the addressing mode used by the ajmp, acall, + ljmp, and lcall instructions. These four instructions support + 16 and 24 bit addressing modes selected by bits AM0 and AM1 in + the ACON register. The assembler is 'informed' about the ad- + dressing mode selected by using the .amode directive: + + .amode 2 ;mode 2 is 24-bit addressing + + If a second argument is specified and its value is non-zero, + then a three instruction sequence is inserted at the .amode lo- + cation loading the mode bits into the ACON register: + + .amode 2,1 ;mode 2 is 24-bit addressing, load ACON + ;mov ta,#0xAA + ;mov ta,#0x55 + ;mov acon,#amode + + + + AT.2.6 The .msb Directive + + + The .msb directive is available in the AS8XCXXX assembler. + + The assembler operator '>' selects the upper byte (MSB) when + included in an assembler instruction. The default assembler + mode is to select bits <15:8> as the MSB. The .msb directive + allows the programmer to specify a particular byte as the 'MSB' + when the address space is larger than 16-bits. + + The assembler directive .msb n configures the assembler to + select a particular byte as MSB. Given a 24-bit address of Nmn + (N(2) is <23:16>, m(1) is <15:8>, and n(0) is <7:0>) the follow- + ing examples show how to select a particular address byte: + + .msb 1 ;select byte 1 of address + ;<M(3):N(2):m(1):n(0)> + LD A,>MNmn ;byte m <15:8> ==>> A + + + AS8XCXXX ASSEMBLER PAGE AT-5 + AS8XCXXX ASSEMBLER DIRECTIVES + + + ... + + .msb 2 ;select byte 2 of address + ;<M(3):N(2):m(1):n(0)> + LD A,>MNmn ;byte N <23:16> ==>> A + ... + + + AS8XCXXX ASSEMBLER PAGE AT-6 + AS8XCXXX ASSEMBLER DIRECTIVES + + + AT.3 DS8XCXXX REGISTER SET + + The AS8XCXXX cross assembler supports the Dallas Semiconductor + DS8XCXXX series of 8051-compatible devices. These microproces- + sors retain instruction set and object code compatability with + the 8051 microprocessor. The DS8XCXXX family is updated with + several new peripherals while providing all the standard + features of the 80C32 microprocessor. + + The following is a list of the registers used by AS8XCXXX: + + a,b - 8-bit accumulators + r0,r1,r2,r3 - 8-bit registers + r4,r5,r6,r7 + dptr - data pointer + sp - stack pointer + pc - program counter + psw - status word + c - carry (bit in status word) + + + AT.4 DS8XCXXX INSTRUCTION SET + + + The following tables list all DS8XCXXX mnemonics recognized + by the AS8XCXXX assembler. The following list specifies the + format for each addressing mode supported by AS8XCXXX: + + #data immediate data + byte or word data + + r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7 + + @r indirect on register r0 or r1 + @dptr indirect on data pointer + @a+dptr indirect on accumulator + plus data pointer + @a+pc indirect on accumulator + plus program counter + + addr direct memory address + + bitaddr bit address + + label call or jump label + + The terms data, addr, bitaddr, and label may all be expressions. + + Note that not all addressing modes are valid with every in- + struction. Refer to the DS8XCXXX technical data for valid + modes. + + + AS8XCXXX ASSEMBLER PAGE AT-7 + DS8XCXXX INSTRUCTION SET + + + AT.4.1 Inherent Instructions + + nop + + + AT.4.2 Move Instructions + + mov a,#data mov a,addr + mov a,r mov a,@r + + mov r,#data mov r,addr + mov r,a + + mov addr,a mov addr,#data + mov addr,r mov addr,@r + mov addr1,addr2 mov bitaddr,c + + mov @r,#data mov @r,addr + mov @r,a + + mov c,bitaddr + mov dptr,#data + + movc a,@a+dptr movc a,@a+pc + movx a,@dptr movx a,@r + movx @dptr,a movx @r,a + + + AT.4.3 Single Operand Instructions + + clr a clr c + clr bitaddr + cpl a cpl c + cpl bitaddr + setb c setb bitaddr + + da a + rr a rrc a + rl a rlc a + swap a + + dec a dec r + dec @r + inc a inc r + inc dptr inc @r + + div ab mul ab + + pop addr push addr + + + AS8XCXXX ASSEMBLER PAGE AT-8 + DS8XCXXX INSTRUCTION SET + + + AT.4.4 Two Operand Instructions + + add a,#data add a,addr + add a,r add a,@r + addc a,#data addc a,addr + addc a,r addc a,@r + subb a,#data subb a,addr + subb a,r subb a,@r + orl a,#data orl a,addr + orl a,r orl a,@r + orl addr,a orl addr,#data + orl c,bitaddr orl c,/bitaddr + anl a,#data anl a,addr + anl a,r anl a,@r + anl addr,a anl addr,#data + anl c,bitaddr anl c,/bitaddr + xrl a,#data xrl a,addr + xrl a,r xrl a,@r + xrl addr,a xrl addr,#data + xrl c,bitaddr xrl c,/bitaddr + xch a,addr xch a,r + xch a,@r xchd a,@r + + + AT.4.5 Call and Return Instructions + + acall label lcall label + ret reti + in data + out data + rst data + + + AT.4.6 Jump Instructions + + ajmp label + cjne a,#data,label cjne a,addr,label + cjne r,#data,label cjne @r,#data,label + djnz r,label djnz addr,label + jbc bitadr,label + jb bitadr,label jnb bitadr,label + jc label jnc label + jz label jnz label + jmp @a+dptr + ljmp label sjmp label + + + AS8XCXXX ASSEMBLER PAGE AT-9 + DS8XCXXX INSTRUCTION SET + + + AT.5 DS8XCXXX SPECIAL FUNCTION REGISTERS + + + The 80C32 core Special Function Registers are selected using + the .DS8XCXXX assembler directive. + + + AT.5.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 SP DPL DPH 83 + 84 PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 8F + 90 P1 93 + 94 97 + 98 SCON SBUF 9B + 9C 9F + A0 P2 A3 + A4 A7 + A8 IE SADDR0 AB + AC AF + B0 P3 B3 + B4 B7 + B8 IP SADEN0 BB + BC BF + C0 C3 + C4 STATUS C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 CF + D0 PSW D3 + D4 D7 + D8 DB + DC DF + E0 ACC E3 + E4 E7 + E8 EB + EC EF + F0 B F3 + F4 F7 + F8 FB + FC FF + + + AS8XCXXX ASSEMBLER PAGE AT-10 + DS8XCXXX SPECIAL FUNCTION REGISTERS + + + AT.5.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + P1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + C0 C3 + C4 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + D8 DB + DC DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + E8 EB + EC EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + F8 FB + FC FF + + + AS8XCXXX ASSEMBLER PAGE AT-11 + DS8XCXXX SPECIAL FUNCTION REGISTERS + + + AT.5.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 BF + C0 C3 + C4 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + D8 DB + DC DF + E0 E3 + E4 E7 + E8 EB + EC EF + F0 F3 + F4 F7 + F8 FB + FC FF + + Alternates: + + SCON 98 9B + 9C FE 9F + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-12 + DS8XCXXX SPECIAL FUNCTION REGISTERS + + + AT.5.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + PCON 0x80 SMOD SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + STATUS 0x80 HIP LIP 0x10 + 0x08 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-13 + DS8XCXXX SPECIAL FUNCTION REGISTERS + + + AT.6 DS80C310 SPECIAL FUNCTION REGISTERS + + + The DS80C310 Special Function Registers are selected using + the .DS80C310 assembler directive. + + + AT.6.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 P1 EXIF 93 + 94 97 + 98 SCON SBUF 9B + 9C 9F + A0 P2 A3 + A4 A7 + A8 IE SADDR0 AB + AC AF + B0 P3 B3 + B4 B7 + B8 IP SADEN0 BB + BC BF + C0 C3 + C4 STATUS C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 CF + D0 PSW D3 + D4 D7 + D8 WDCON DB + DC DF + E0 ACC E3 + E4 E7 + E8 EIE EB + EC EF + F0 B F3 + F4 F7 + F8 EIP FB + FC FF + + + AS8XCXXX ASSEMBLER PAGE AT-14 + DS80C310 SPECIAL FUNCTION REGISTERS + + + AT.6.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + P1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + C0 C3 + C4 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + WDCON D8 WDCON.0 WDCON.1 WDCON.2 WDCON.3 DB + DC WDCON.4 WDCON.5 WDCON.6 WDCON.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + + AS8XCXXX ASSEMBLER PAGE AT-15 + DS80C310 SPECIAL FUNCTION REGISTERS + + + AT.6.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 BF + C0 C3 + C4 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + WDCON D8 DB + DC POR DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC FF + + Alternates: + + SCON 98 9B + 9C FE 9F + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-16 + DS80C310 SPECIAL FUNCTION REGISTERS + + + AT.6.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + EXIF 0x80 IE5 IE4 IE3 IE2 0x10 + 0x08 0x01 + STATUS 0x80 HIP LIP 0x10 + 0x08 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + + Alternates: + + PCON 0x80 SMOD_0 0x10 + 0x08 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-17 + DS80C310 SPECIAL FUNCTION REGISTERS + + + AT.7 DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS + + + The DS80C320/DS80C323 Special Function Registers are selected + using the .DS80C320 or DS80C323 assembler directives. + + + AT.7.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 P1 EXIF 93 + 94 97 + 98 SCON0 SBUF0 9B + 9C 9F + A0 P2 A3 + A4 A7 + A8 IE SADDR0 AB + AC AF + B0 P3 B3 + B4 B7 + B8 IP SADEN0 BB + BC BF + C0 SCON1 SBUF1 C3 + C4 STATUS TA C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 CF + D0 PSW D3 + D4 D7 + D8 WDCON DB + DC DF + E0 ACC E3 + E4 E7 + E8 EIE EB + EC EF + F0 B F3 + F4 F7 + F8 EIP FB + FC FF + + Alternates: + + 98 SCON SBUF 9B + + + AS8XCXXX ASSEMBLER PAGE AT-18 + DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS + + + AT.7.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + P1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON0 98 SCON0.0 SCON0.1 SCON0.2 SCON0.3 9B + 9C SCON0.4 SCON0.5 SCON0.6 SCON0.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + SCON1 C0 SCON1.0 SCON1.1 SCON1.2 SCON1.3 C3 + C4 SCON1.4 SCON1.5 SCON1.6 SCON1.7 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + WDCON D8 WDCON.0 WDCON.1 WDCON.2 WDCON.3 DB + DC WDCON.4 WDCON.5 WDCON.6 WDCON.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + Alternates: + + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + + + AS8XCXXX ASSEMBLER PAGE AT-19 + DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS + + + AT.7.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON0 98 RI_0 TI_0 RB8_0 TB8_0 9B + 9C REN_0 SM2_0 SM1_0 SMO_0 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 BF + SCON1 C0 RI_1 TI_1 RB8_1 TB8_1 C3 + C4 REN_1 SM2_1 SM1_1 SMO_1 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + WDCON D8 RWT EWT WTRF WDIF DB + DC PFI EPFI POR SMOD_1 DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC EWDI EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC PWDI FF + + Alternates: + + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + SCON 98 9B + 9C FE 9F + SCON0 98 9B + 9C FE_0 9F + SCON1 C0 C3 + C4 FE_1 C7 + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-20 + DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS + + + AT.7.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD_0 SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 WD1 WD0 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + EXIF 0x80 IE5 IE4 IE3 IE2 0x10 + 0x08 RGMD RGSL BGS 0x01 + STATUS 0x80 PIP HIP LIP 0x10 + 0x08 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + + Alternates: + + PCON 0x80 SMOD 0x10 + 0x08 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-21 + DS80C320/DS80C323 SPECIAL FUNCTION REGISTERS + + + AT.8 DS80C390 SPECIAL FUNCTION REGISTERS + + + The DS80C390 Special Function Registers are selected using + the .DS80C390 assembler directive. + + + AT.8.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 P4 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 P1 EXIF P4CNT DPX 93 + 94 DPX1 C0RMS0 C0RMS1 97 + 98 SCON0 SBUF0 ESP 9B + 9C AP ACON C0TMA0 C0TMA1 9F + A0 P2 P5 P5CNT C0C A3 + A4 C0S C0IR C0TE C0RE A7 + A8 IE SADDR0 SADDR1 C0M1C AB + AC C0M2C C0M3C C0M4C C0M5C AF + B0 P3 C0M6C B3 + B4 C0M7C C0M8C C0M9C C0M10C B7 + B8 IP SADEN0 SADEN1 C0M11C BB + BC C0M12C C0M13C C0M14C C0M15C BF + C0 SCON1 SBUF1 C3 + C4 PMR STATUS MCON TA C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 COR CF + D0 PSW MCNT0 MCNT1 MA D3 + D4 MB MC C1RMS0 C1RMS1 D7 + D8 WDCON DB + DC C1TMA0 C1TMA1 DF + E0 ACC C1C E3 + E4 C1S C1IR C1TE C1RE E7 + E8 EIE MXAX C1M1C EB + EC C1M2C C1M3C C1M4C C1M5C EF + F0 B C1M6C F3 + F4 C1M7C C1M8C C1M9C C1M10C F7 + F8 EIP C1M11C FB + FC C1M12C C1M13C C1M14C C1M15C FF + + Alternates: + + 98 SCON SBUF 9B + + + AS8XCXXX ASSEMBLER PAGE AT-22 + DS80C390 SPECIAL FUNCTION REGISTERS + + + AT.8.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + P4 80 P4.0 P4.1 P4.2 P4.3 83 + 84 P4.4 P4.5 P4.6 P4.7 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + P1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON0 98 SCON0.0 SCON0.1 SCON0.2 SCON0.3 9B + 9C SCON0.4 SCON0.5 SCON0.6 SCON0.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + SCON1 C0 SCON1.0 SCON1.1 SCON1.2 SCON1.3 C3 + C4 SCON1.4 SCON1.5 SCON1.6 SCON1.7 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + WDCON D8 WDCON.0 WDCON.1 WDCON.2 WDCON.3 DB + DC WDCON.4 WDCON.5 WDCON.6 WDCON.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + Alternates: + + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + + + AS8XCXXX ASSEMBLER PAGE AT-23 + DS80C390 SPECIAL FUNCTION REGISTERS + + + AT.8.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + P1 90 T2 T2EX RXD1 TXD1 93 + 94 INT2 INT3 INT4 INT5 97 + SCON0 98 RI_0 TI_0 RB8_0 TB8_0 9B + 9C REN_0 SM2_0 SM1_0 SMO_0 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 ES1 EA AF + P3 B0 RXD0 TXD0 INT0 INT1 B3 + B4 T0 T1 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 PS1 BF + SCON1 C0 RI_1 TI_1 RB8_1 TB8_1 C3 + C4 REN_1 SM2_1 SM1_1 SMO_1 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + WDCON D8 RWT EWT WTRF WDIF DB + DC PFI EPFI POR SMOD_1 DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC EWDI C1IE C0IE CANBIE EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC PWDI C1IP C0IP CANBIP FF + + Alternates: + + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + SCON 98 9B + 9C FE 9F + SCON0 98 9B + 9C FE_0 9F + SCON1 C0 C3 + C4 FE_1 C7 + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-24 + DS80C390 SPECIAL FUNCTION REGISTERS + + + AT.8.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 ID1 ID0 TSL 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD_0 SMOD0 OFDF OFDE 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 WD1 WD0 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + EXIF 0x80 IE5 IE4 IE3 IE2 0x10 + 0x08 CKRY RGMD RGSL BGS 0x01 + P4CNT 0x80 SBCAN 0x10 + 0x08 0x01 + ESP 0x80 0x10 + 0x08 ESP.1 ESP.0 0x01 + ACON 0x80 0x10 + 0x08 SA AM1 AM0 0x01 + P5 0x80 P5.7 P5.6 P5.5 P5.4 0x10 + 0x08 P5.3 P5.2 P5.1 P5.0 0x01 + P5CNT 0x80 CAN1BA CAN0BA SP1EC C1_IO 0x10 + 0x08 C0_IO P5CNT.2 P5CNT.1 P5CNT.0 0x01 + CxC 0x80 ERIE STIE PDE SIESTA 0x10 + 0x08 CRST AUTOB ERCS SWINT 0x01 + CxS 0x80 BSS EC96_128 WKS RXS 0x10 + 0x08 TXS ER2 ER1 ER0 0x01 + CxIR 0x80 INTIN7 INTIN6 INTIN5 INTIN4 0x10 + 0x08 INTIN3 INTIN2 INTIN1 INTIN0 0x01 + CxCxxC 0x80 MSRDY ET1 ER1 INTRQ 0x10 + 0x08 EXTRQ MTRQ ROW_TIH DTUP 0x01 + PMR 0x80 CD1 CD0 SWB CTM 0x10 + 0x08 4X_2X ALEOFF 0x01 + STATUS 0x80 PIP HIP LIP 0x10 + 0x08 SPTA1 SPRA1 SPTA0 SPRA0 0x01 + MCON 0x80 IDM1 IDM0 CMA 0x10 + 0x08 PDCE3 PDCE2 PDCE1 PDCE0 0x01 + T2MOD 0x80 D13T1 0x10 + 0x08 D13T2 T2OE DCEN 0x01 + COR 0x80 IRDACK C1BPR7 C1BPR6 C0BPR7 0x10 + 0x08 C0BPR6 COD1 COD0 CLKOE 0x01 + MCNT0 0x80 _LSHIFT CSE SCB MAS4 0x10 + 0x08 MAS3 MAS2 MAS1 MAS0 0x01 + MCNT1 0x80 MST MOF CLM 0x10 + 0x08 0x01 + + Alternates: + + + + AS8XCXXX ASSEMBLER PAGE AT-25 + DS80C390 SPECIAL FUNCTION REGISTERS + + + PCON 0x80 SMOD 0x10 + 0x08 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-26 + DS80C390 SPECIAL FUNCTION REGISTERS + + + AT.9 DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS + + + The DS83C520/DS87C520 Special Function Registers are selected + using the .DS83C520 or DS87C520 assembler directives. + + + AT.9.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 P0 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 PORT1 EXIF 93 + 94 97 + 98 SCON0 SBUF0 9B + 9C 9F + A0 P2 A3 + A4 A7 + A8 IE SADDR0 SADDR1 AB + AC AF + B0 P3 B3 + B4 B7 + B8 IP SADEN0 SADEN1 BB + BC BF + C0 SCON1 SBUF1 ROMSIZE C3 + C4 PMR STATUS TA C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 CF + D0 PSW D3 + D4 D7 + D8 WDCON DB + DC DF + E0 ACC E3 + E4 E7 + E8 EIE EB + EC EF + F0 B F3 + F4 F7 + F8 EIP FB + FC FF + + Alternates: + + 98 SCON SBUF 9B + + + AS8XCXXX ASSEMBLER PAGE AT-27 + DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS + + + AT.9.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + P0 80 P0.7 P0.6 P0.5 P0.4 83 + 84 P0.3 P0.2 P0.1 P0.0 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + PORT1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON0 98 SCON0.0 SCON0.1 SCON0.2 SCON0.3 9B + 9C SCON0.4 SCON0.5 SCON0.6 SCON0.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + SCON1 C0 SCON1.0 SCON1.1 SCON1.2 SCON1.3 C3 + C4 SCON1.4 SCON1.5 SCON1.6 SCON1.7 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + WDCON D8 WDCON.0 WDCON.1 WDCON.2 WDCON.3 DB + DC WDCON.4 WDCON.5 WDCON.6 WDCON.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + Alternates: + + PORT1 90 PORT1.0 PORT1.1 PORT1.2 PORT1.3 93 + 94 PORT1.4 PORT1.5 PORT1.6 PORT1.7 97 + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + + + AS8XCXXX ASSEMBLER PAGE AT-28 + DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS + + + AT.9.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON0 98 RI_0 TI_0 RB8_0 TB8_0 9B + 9C REN_0 SM2_0 SM1_0 SMO_0 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 ES1 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 PS1 BF + SCON1 C0 RI_1 TI_1 RB8_1 TB8_1 C3 + C4 REN_1 SM2_1 SM1_1 SMO_1 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + WDCON D8 RWT EWT WTRF WDIF DB + DC PFI EPFI POR SMOD_1 DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC EWDI EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC PWDI FF + + Alternates: + + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + SCON 98 9B + 9C FE 9F + SCON0 98 9B + 9C FE_0 9F + SCON1 C0 C3 + C4 FE_1 C7 + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-29 + DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS + + + AT.9.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD_0 SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 WD1 WD0 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + EXIF 0x80 IE5 IE4 IE3 IE 0x10 + 0x08 XT_RG RGMD RGSL BGS 0x01 + SBUF1 0x80 SB7 SB6 SB5 SB4 0x10 + 0x08 SB3 SB2 SB1 SB0 0x01 + ROMSIZE 0x80 0x10 + 0x08 RMS2 RMS1 RMS0 0x01 + PMR 0x80 CD1 CD0 SWB 0x10 + 0x08 XTOFF ALEOFF DME1 DME0 0x01 + STATUS 0x80 PIP HIP LIP XTUP 0x10 + 0x08 SPTA1 SPRA1 SPTA0 SPRA0 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + + Alternates: + + PCON 0x80 SMOD 0x10 + 0x08 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-30 + DS83C520/DS87C520 SPECIAL FUNCTION REGISTERS + + + AT.10 DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS + + + The DS83C530/DS87C530 Special Function Registers are selected + using the .DS83C530 or DS87C530 assembler directives. + + + AT.10.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 P0 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 P1 EXIF 93 + 94 TRIM 97 + 98 SCON0 SBUF0 9B + 9C 9F + A0 P2 A3 + A4 A7 + A8 IE SADDR0 SADDR1 AB + AC AF + B0 P3 B3 + B4 B7 + B8 IP SADEN0 SADEN1 BB + BC BF + C0 SCON1 SBUF1 ROMSIZE C3 + C4 PMR STATUS TA C7 + C8 T2CON T2MOD RCAP2L RCAP2H CB + CC TL2 TH2 CF + D0 PSW D3 + D4 D7 + D8 WDCON DB + DC DF + E0 ACC E3 + E4 E7 + E8 EIE EB + EC EF + F0 B RTASS RTAS F3 + F4 RTAM RTAH F7 + F8 EIP RTCC RTCSS RTCS FB + FC RTCM RTCH RTCD0 RTCD1 FF + + Alternates: + + 98 SCON SBUF 9B + + + AS8XCXXX ASSEMBLER PAGE AT-31 + DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS + + + AT.10.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + P0 80 P0.7 P0.6 P0.5 P0.4 83 + 84 P0.3 P0.2 P0.1 P0.0 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + P1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON0 98 SCON0.0 SCON0.1 SCON0.2 SCON0.3 9B + 9C SCON0.4 SCON0.5 SCON0.6 SCON0.7 9F + P2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + P3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + SCON1 C0 SCON1.0 SCON1.1 SCON1.2 SCON1.3 C3 + C4 SCON1.4 SCON1.5 SCON1.6 SCON1.7 C7 + T2CON C8 T2CON.0 T2CON.1 T2CON.2 T2CON.3 CB + CC T2CON.4 T2CON.5 T2CON.6 T2CON.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + WDCON D8 WDCON.0 WDCON.1 WDCON.2 WDCON.3 DB + DC WDCON.4 WDCON.5 WDCON.6 WDCON.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + Alternates: + + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + + + AS8XCXXX ASSEMBLER PAGE AT-32 + DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS + + + AT.10.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON0 98 RI_0 TI_0 RB8_0 TB8_0 9B + 9C REN_0 SM2_0 SM1_0 SMO_0 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 ES1 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PT2 PS1 BF + SCON1 C0 RI_1 TI_1 RB8_1 TB8_1 C3 + C4 REN_1 SM2_1 SM1_1 SMO_1 C7 + T2CON C8 CPRL2 CT2 TR2 EXEN2 CB + CC TCLK RCLK EXF2 TF2 CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + WDCON D8 RWT EWT WTRF WDIF DB + DC PFI EPFI POR SMOD_1 DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC EWDI ERTCI EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC PWDI PRTCI FF + + Alternates: + + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + SCON 98 9B + 9C FE 9F + SCON0 98 9B + 9C FE_0 9F + SCON1 C0 C3 + C4 FE_1 C7 + T2CON C8 CP_RL2 C_T2 CB + CC CF + + + AS8XCXXX ASSEMBLER PAGE AT-33 + DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS + + + AT.10.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD_0 SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 WD1 WD0 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + EXIF 0x80 IE5 IE4 IE3 IE 0x10 + 0x08 XT_RG RGMD RGSL BGS 0x01 + TRIM 0x80 E4K X12_6 TRM2 _TRM2 0x10 + 0x08 TRM1 _TRM1 TRM0 _TRM0 0x01 + SBUF1 0x80 SB7 SB6 SB5 SB4 0x10 + 0x08 SB3 SB2 SB1 SB0 0x01 + ROMSIZE 0x80 0x10 + 0x08 RMS2 RMS1 RMS0 0x01 + PMR 0x80 CD1 CD0 SWB 0x10 + 0x08 XTOFF ALEOFF DME1 DME0 0x01 + STATUS 0x80 PIP HIP LIP XTUP 0x10 + 0x08 SPTA1 SPRA1 SPTA0 SPRA0 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + RTCC 0x80 SSCE SCE MCE HCE 0x10 + 0x08 RTCRE RTCWE RTCIF RTCE 0x01 + + Alternates: + + PCON 0x80 SMOD 0x10 + 0x08 0x01 + + + AS8XCXXX ASSEMBLER PAGE AT-34 + DS83C530/DS87C530 SPECIAL FUNCTION REGISTERS + + + AT.11 DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + The DS83C550/DS87C550 Special Function Registers are selected + using the .DS83C550 or DS87C550 assembler directives. + + + AT.11.1 SFR Map + + --------- 4 Bytes ---------- + ---- ---- ---- ---- + 80 PORT0 SP DPL DPH 83 + 84 DPL1 DPH1 DPS PCON 87 + 88 TCON TMOD TL0 TL1 8B + 8C TH0 TH1 CKCON 8F + 90 PORT1 RCON 93 + 94 97 + 98 SCON0 SBUF0 9B + 9C PMR 9F + A0 PORT2 SADDR0 SADDR1 A3 + A4 A7 + A8 IE CMPL0 CMPL1 CMPL2 AB + AC CPTL0 CPTL1 CPTL2 CPTL3 AF + B0 PORT3 ADCON1 ADCON2 B3 + B4 ADMSB ADLSD WINHI WINLO B7 + B8 IP SADEN0 SADEN1 BB + BC T2CON T2MOD BF + C0 PORT4 ROMSIZE C3 + C4 PORT5 STATUS TA C7 + C8 T2IR CMPH0 CMPH1 CMPH2 CB + CC CPTH0 CPTH1 CPTH2 CPTH3 CF + D0 PSW PW0FG PW1FG D3 + D4 PW2FG PW3FG PWMADR D7 + D8 SCON1 SBUF1 DB + DC PWM0 PWM1 PWM2 PWM3 DF + E0 ACC PW01CS PW23CS PW01CON E3 + E4 PW23CON RLOADL RLOADH E7 + E8 EIE T2SEL CTCON EB + EC TL2 TH2 SETR RSTR EF + F0 B PORT6 F3 + F4 F7 + F8 EIP FB + FC WDCON FF + + Alternates: + + 80 P0 83 + 90 P1 93 + 98 SCON SBUF 9B + A0 P2 A3 + B0 P3 B3 + C0 P4 C3 + + + AS8XCXXX ASSEMBLER PAGE AT-35 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + C4 P5 C7 + F0 PORT6 F3 + + + AS8XCXXX ASSEMBLER PAGE AT-36 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + AT.11.2 Bit Addressable Registers: Generic + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + PORT0 80 P0.7 P0.6 P0.5 P0.4 83 + 84 P0.3 P0.2 P0.1 P0.0 87 + TCON 88 TCON.0 TCON.1 TCON.2 TCON.3 8B + 8C TCON.4 TCON.5 TCON.6 TCON.7 8F + PORT1 90 P1.0 P1.1 P1.2 P1.3 93 + 94 P1.4 P1.5 P1.6 P1.7 97 + SCON0 98 SCON0.0 SCON0.1 SCON0.2 SCON0.3 9B + 9C SCON0.4 SCON0.5 SCON0.6 SCON0.7 9F + PORT2 A0 P2.0 P2.1 P2.2 P2.3 A3 + A4 P2.4 P2.5 P2.6 P2.7 A7 + IE A8 IE.0 IE.1 IE.2 IE.3 AB + AC IE.4 IE.5 EI.6 IE.7 AF + PORT3 B0 P3.0 P3.1 P3.2 P3.3 B3 + B4 P3.4 P3.5 P3.6 P3.7 B7 + IP B8 IP.0 IP.1 IP.2 IP.3 BB + BC IP.4 IP.5 IP.6 IP.7 BF + PORT4 C0 P4.0 P4.1 P4.2 P4.3 C3 + C4 P4.4 P4.5 P4.6 P4.7 C7 + T2IR C8 T2IR.0 T2IR.1 T2IR.2 T2IR.3 CB + CC T2IR.4 T2IR.5 T2IR.6 T2IR.7 CF + PSW D0 PSW.0 PSW.1 PSW.2 PSW.3 D3 + D4 PSW.4 PSW.5 PSW.6 PSW.7 D7 + SCON1 D8 SCON1.0 SCON1.1 SCON1.2 SCON1.3 DB + DC SCON1.4 SCON1.5 SCON1.6 SCON1.7 DF + ACC E0 ACC.0 ACC.1 ACC.2 ACC.3 E3 + E4 ACC.4 ACC.5 ACC.6 ACC.7 E7 + EIE E8 EIE.0 EIE.1 EIE.2 EIE.3 EB + EC EIE.4 EIE.5 EIE.6 EIE.7 EF + B F0 B.0 B.1 B.2 B.3 F3 + F4 B.4 B.5 B.6 B.7 F7 + EIP F8 EIP.0 EIP.1 EIP.2 EIP.3 FB + FC EIP.4 EIP.5 EIP.6 EIP.7 FF + + Alternates: + + PORT0 80 PORT0.7 PORT0.6 PORT0.5 PORT0.4 83 + 84 PORT0.3 PORT0.2 PORT0.1 PORT0.0 87 + PORT1 90 PORT1.0 PORT1.1 PORT1.2 PORT1.3 93 + 94 PORT1.4 PORT1.5 PORT1.6 PORT1.7 97 + SCON 98 SCON.0 SCON.1 SCON.2 SCON.3 9B + 9C SCON.4 SCON.5 SCON.6 SCON.7 9F + PORT2 A0 PORT2.0 PORT2.1 PORT2.2 PORT2.3 A3 + A4 PORT2.4 PORT2.5 PORT2.6 PORT2.7 A7 + PORT3 B0 PORT3.0 PORT3.1 PORT3.2 PORT3.3 B3 + B4 PORT3.4 PORT3.5 PORT3.6 PORT3.7 B7 + PORT4 C0 PORT4.0 PORT4.1 PORT4.2 PORT4.3 C3 + C4 PORT4.4 PORT4.5 PORT4.6 PORT4.7 C7 + + + AS8XCXXX ASSEMBLER PAGE AT-37 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + AT.11.3 Bit Addressable Registers: Specific + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 80 83 + 84 87 + TCON 88 IT0 IE0 IT1 IE1 8B + 8C TR0 TF0 TR1 TF1 8F + 90 93 + 94 97 + SCON0 98 RI_0 TI_0 RB8_0 TB8_0 9B + 9C REN_0 SM2_0 SM1_0 SMO_0 9F + A0 A3 + A4 A7 + IE A8 EX0 ET0 EX1 ET1 AB + AC ES0 ET2 ES1 EA AF + B0 B3 + B4 B7 + IP B8 PX0 PT0 PX1 PT1 BB + BC PS0 PS1 PAD BF + PORT4 C0 CMSR0 CMSR1 CMSR2 CMSR3 C3 + C4 CMSR4 CMSR5 CMT0 CMT1 C7 + T2IR C8 CF0 CF1 CF2 CF3 CB + CC CM0F CM1F CM2F CF + PSW D0 P FL OV RS0 D3 + D4 RS1 F0 AC CY D7 + SCON1 D8 RI_1 TI_1 RB8_1 TB8_1 DB + DC REN_1 SM2_1 SM1_1 SMO_1 DF + E0 E3 + E4 E7 + EIE E8 EX2 EX3 EX4 EX5 EB + EC ECM0 ECM1 ECM2 ET2 EF + F0 F3 + F4 F7 + EIP F8 PX2 PX3 PX4 PX5 FB + FC PCM0 PCM1 PCM2 PT2 FF + + Alternates: + + SCON 98 RI TI RB8 TB8 9B + 9C REN SM2 SM1 SMO 9F + SCON 98 9B + 9C FE 9F + SCON0 98 9B + 9C FE_0 9F + T2IR C8 IE2 IE3 IE4 IE5 CB + CC CF + SCON1 D8 DB + DC FE_1 DF + EIE E8 EC0 EC1 EC2 EC3 EB + EC EF + EIP F8 PC0 PC1 PC2 PC3 FB + + + AS8XCXXX ASSEMBLER PAGE AT-38 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + FC FF + + + AS8XCXXX ASSEMBLER PAGE AT-39 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + AT.11.4 Optional Symbols: Control Bits + + ---------- 4 BITS ---------- + ---- ---- ---- ---- + 0x80 0x40 0x20 0x10 + 0x08 0x04 0x02 0x10 + ---- ---- ---- ---- + DPS 0x80 ID1 ID0 TSL 0x10 + 0x08 SEL 0x01 + PCON 0x80 SMOD_0 SMOD0 0x10 + 0x08 GF1 GF0 STOP IDLE 0x01 + TMOD 0x80 T1GATE T1C_T T1M1 T1M0 0x10 + 0x08 T0GATE T0C_T T0M1 T0M0 0x01 + CKCON 0x80 WD1 WD0 T2M T1M 0x10 + 0x08 T0M MD2 MD1 MD0 0x01 + RCON 0x80 0x10 + 0x08 CKRDY RGMD RGSL BGS 0x01 + PMR 0x80 CD1 CD0 SWB CTM 0x10 + 0x08 4X_2X ALEOFF DEM1 DEM0 0x01 + ADCON1 0x80 STRT_BSY EOC CONT_SS ADEX 0x10 + 0x08 WCQ WCM ADON WCIO 0x01 + ADCON2 0x80 OUTCF MUX2 MUX1 MUX0 0x10 + 0x08 APS3 APS2 APS1 APS0 0x01 + T2CON 0x80 TF2 EXF2 RCLK TCLK 0x10 + 0x08 EXEN2 TR2 CT2 CPRL2 0x01 + T2MOD 0x80 0x10 + 0x08 T2OE DCEN 0x01 + PORT5 0x80 ADC7 ADC6 ADC5 ADC4 0x10 + 0x08 ADC3 ADC2 ADC1 ADC0 0x01 + ROMSIZE 0x80 0x10 + 0x08 RMS2 RMS1 RMS0 0x01 + STATUS 0x80 PIP HIP LIP XTUP 0x10 + 0x08 SPTA1 SPRA1 SPTA0 SPRA0 0x01 + PWMADR 0x80 ADRS 0x10 + 0x08 PWE1 PWE0 0x01 + PW01CS 0x80 PW0S2 PW0S1 PW0S0 PW0EN 0x10 + 0x08 PW1S2 PW1S1 PW1S0 PW1EN 0x01 + PW23CS 0x80 PW2S2 PW2S1 PW2S0 PW2EN 0x10 + 0x08 PW3S2 PW3S1 PW3S0 PW3EN 0x01 + PW01CON 0x80 PW0F PW0DC PW0OE PW0T_C 0x10 + 0x08 PW1F PW1DC PW1OE PW1T_C 0x01 + PW23CON 0x80 PW2F PW2DC PW2OE PW2T_C 0x10 + 0x08 PW3F PW3DC PW3OE PW3T_C 0x01 + T2SEL 0x80 TF2S TF2BS TF2B 0x10 + 0x08 T2P1 T2P0 0x01 + CTCON 0x80 _CT3 CT3 _CT2 CT2 0x10 + 0x08 _CT1 CT1 _CT0 CT0 0x01 + SETR 0x80 TGFF1 TGFF0 CMS5 CMS4 0x10 + 0x08 CMS3 CMS2 CMS1 CMS0 0x01 + RSTR 0x80 CMTE1 CMTE0 CMR5 CMR4 0x10 + 0x08 CMR3 CMR2 CMR1 CMR0 0x01 + PORT6 0x80 STADC PWMC1 PWMC0 0x10 + + + AS8XCXXX ASSEMBLER PAGE AT-40 + DS83C550/DS87C550 SPECIAL FUNCTION REGISTERS + + + 0x08 PWMO3 PWMO2 PWMO1 PWMO0 0x01 + WDCON 0x80 SMOD_1 POR EPF1 PF1 0x10 + 0x08 WDIF WTRF EWT RWT 0x01 + + Alternates: + + PCON 0x80 SMOD 0x10 + 0x08 0x01 + T2CON 0x80 0x10 + 0x08 C_T2 _RL2 0x01 + + + + + + + + + + + + + + + APPENDIX AY + + ASGB ASSEMBLER + + + + + + AY.1 ACKNOWLEDGEMENT + + + Thanks to Roger Ivie for his contribution of the ASGB cross + assembler. + + Roger Ivie + ivie at cc dot usu dot edu + + + AY.2 INTRODUCTION + + + The Gameboy uses an 8-bit processor which is closely related + to the 8080. It is usually described as a modified Z80, but may + be more closely understood as an enhanced 8080; it has the 8080 + register set and many, but not all, enhanced Z80 instructions. + However, even this is not accurate, for the Gameboy also lacks + some basic 8080 instructions (most annoyingly SHLD and LHLD). + ASGB is based on ASZ80 and therefore uses the Z80 mnemonic set. + + + AY.3 GAMEBOY REGISTER SET AND CONDITIONS + + + The following is a complete list of register designations and + condition mnemonics: + + byte registers - a,b,c,d,e,h,l + register pairs - af, bc, de, hl + word registers - pc, sp + + C - carry bit set + NC - carry bit clear + NZ - zero bit clear + Z - zero bit set + + + ASGB ASSEMBLER PAGE AY-2 + GAMEBOY INSTRUCTION SET + + + AY.4 GAMEBOY INSTRUCTION SET + + + The following tables list all Gameboy mnemnoics recognized by + the ASGB assembler. The designation [] refers to a required ad- + dressing mode argument. The following list specifies the format + for each addressing mode supported by ASGB: + + #data immediate data + byte or word data + + n byte value + + rg a byte register + a,b,c,d,e,h,l + + rp a register pair or 16-bit register + bc,de,hl + + (hl) implied addressing or + register indirect addressing + + (label) direct addressing + + label call/jmp/jr label + + + The terms data, dir, and ext may all be expression. The term + dir is not allowed to be an external reference. + + Note that not all addressing modes are valid with every in- + struction. Although official information is not, as far as I + know, publically available for the Gameboy processor, many unof- + ficial sources are available on the internet. + + + AY.4.1 .tile Directive + + + Format: + + .tile /string/ or + + .tile ^/string/ + + + + where: string is a string of ascii characters taken from the + set ' ', '.', '+', '*', '0', '1', '2', and '3'. + The string must be a multiple of eight + characters long. + + + + ASGB ASSEMBLER PAGE AY-3 + GAMEBOY INSTRUCTION SET + + + / / represent the delimiting characters. These + delimiters may be any paired printing + characters, as long as the characters are not + contained within the string itself. If the + delimiting characters do not match, the .tile + directive will give the (q) error. + + The Gameboy displays information on the screen using a pro- + grammable character set (referred to as "tiles" among Gameboy + developers). The ASGB cross assembler has a processor-specific + assembler directive to aid in the creation of the game's + character set. + + Each character is created from an 8x8 grid of pixels, each + pixel of which is composed of two bits. The .tile directive ac- + cepts a single string argument which is processed to create the + byte values corresponding to the lines of pixels in the + character. The string argument must be some multiple of 8 + characters long, and be one of these characters: + + ' ' or '0' - for the pixel value 00 + '.' or '1' - for the pixel value 01 + '+' or '2' - for the pixel value 10 + '*' or '3' - for the pixel value 11 + + The .tile directive processes each 8-character group of its + string argument to create the two-byte value corresponding to + that line of pixels. The example in the popular extant litera- + ture could be done using ASGB like this: + + 0000 7C 7C 1 .tile " ***** " + 0002 00 C6 2 .tile "++ ++ " + 0004 C6 00 3 .tile ".. .. " + 0006 00 FE 4 .tile "+++++++ " + 0008 C6 C6 5 .tile "** ** " + 000A 00 C6 6 .tile "++ ++ " + 000C C6 00 7 .tile ".. .. " + 000E 00 00 8 .tile " " + + Or, using the synonym character set, as: + + 0010 7C 7C 10 .tile "03333300" + 0012 00 C6 11 .tile "22000220" + 0014 C6 00 12 .tile "11000110" + 0016 00 FE 13 .tile "22222220" + 0018 C6 C6 14 .tile "33000330" + 001A 00 C6 15 .tile "22000220" + 001C C6 00 16 .tile "11000110" + 001E 00 00 17 .tile "00000000" + + + + ASGB ASSEMBLER PAGE AY-4 + GAMEBOY INSTRUCTION SET + + + Since .tile is perfectly willing to assemble multiple lines + of a character at once (as long as it is given complete rows of + pixels), it could even be done as: + + .tile " ***** ++ ++ .. .. +++++++ " + .tile "** ** ++ ++ .. .. " + + + AY.4.2 Potentially Controversial Mnemonic Selection + + + Although the Gameboy processor is based on the Z80, it does + include some features which are not present in the Z80. The Z80 + mnemonic set is not sufficient to describe these additional + operations; mnemonics must be created for the new operations. + The mnemonics ASGB uses are not the same as those used by other + publically-available Gameboy assemblers. + + + AY.4.2.1 Auto-Indexing Loads - + + The Gameboy provides instructions to load or store the ac- + cumulator indirectly via HL and then subsequently increment or + decrement HL. ASGB uses the mnemonic 'ldd' for the instructions + which decrement HL and 'ldi' for the instructions which incre- + ment HL. Because the Gameboy lacks the Z80's block moves, the + mnemonics are not otherwise needed by ASGB. + + ldd a,(hl) ldd (hl),a + ldi a,(hl) ldi (hl),a + + + AY.4.2.2 Input and Output Operations - + + The Gameboy replaces the Z80's separate address space for + I/O with a mechanism similar to the zero page addressing of pro- + cessors such as the 6800 or 6502. All I/O registers in the + Gameboy reside in the address range between 0xff00 and 0xffff. + The Gameboy adds special instructions to load and store the ac- + cumulator from and into this page of memory. The instructions + are analogous to the Z80's in and out instructions and ASGB re- + tains the 'in' and 'out' mnemonics for them. + + in a,(n) out (n),a + in a,(c) out (c),a + + From ASGB's perspective, the RAM available from 0xff80 + through 0xffff is composed of unused I/O locations rather than + direct-page RAM. + + + + + ASGB ASSEMBLER PAGE AY-5 + GAMEBOY INSTRUCTION SET + + + AY.4.2.3 The 'stop' Instruction - + + The publically-available documentation for the Gameboy + lists the 'stop' instruction as the two-byte instruction 10 00, + and the other freely-available Gameboy assemblers assemble it in + that manner. As far as I can tell, the only rationale for this + is that the corresponding Z80 instruction ('djnz label') is a + two-byte instruction. ASGB assembles 'stop' as the one-byte in- + struction 10. + + + AY.4.3 Inherent Instructions + + + ccf cpl + daa di + ei nop + halt rla + rlca rra + rrca scf + reti stop + swap + + + AY.4.4 Implicit Operand Instructions + + + adc a,[] adc [] + add a,[] add [] + and a,[] and [] + cp a,[] cp [] + dec a,[] dec [] + inc a,[] inc [] + or a,[] or [] + rl a,[] rl [] + rlc a,[] rlc [] + rr a,[] rr [] + rrc a,[] rrc [] + sbc a,[] sbc [] + sla a,[] sla [] + sra a,[] sra [] + srl a,[] srl [] + sub a,[] sub [] + xor a,[] xor [] + + + + + ASGB ASSEMBLER PAGE AY-6 + GAMEBOY INSTRUCTION SET + + + AY.4.5 Load Instructions + + + ld rg,[] ld [],rg + ld (bc),a ld a,(bc) + ld (de),a ld a,(de) + ld (label),a ld a,(label) + ld (label),sp ld rp,#data + ld sp,hl ld hl,sp + + ldd a,(hl) ldd (hl),a + ldi a,(hl) ldi (hl),a + + + AY.4.6 Call/Return Instructions + + + call C,label ret C + call NC,label ret NC + call Z,label ret Z + call NZ,label ret NZ + call label ret + + rst n + + + AY.4.7 Jump Instructions + + + jp C,label jp NC,label + jp Z,label jp NZ,label + + jp (hl) jp label + + jr C,label jr NC,label + jr Z,label jr NZ,label + jr label + + + AY.4.8 Bit Manipulation Instructions + + + bit n,[] + res n,[] + set n,[] + + + + + ASGB ASSEMBLER PAGE AY-7 + GAMEBOY INSTRUCTION SET + + + AY.4.9 Input and Output Instructions + + + in a,(n) in a,(c) + out (n),a out (c),a + + + AY.4.10 Register Pair Instructions + + + add hl,rp add hl,sp + add sp,#data + + push rp pop rp + + + + + + + + + + + + + + + APPENDIX BC + + ASRAB ASSEMBLER + + + + + + + + BC.1 ACKNOWLEDGMENT + + Thanks to Ulrich Raich and Razaq Ijoduola for their contribution + of the ASRAB cross assembler. + + Ulrich Raich and Razaq Ijoduola + PS Division + CERN + CH-1211 Geneva-23 + Ulrich Raich + Ulrich dot Raich at cern dot ch + + + + + BC.2 PROCESSOR SPECIFIC DIRECTIVES + + + The ASRAB assembler is a port of the ASZ80 assembler. This + assembler can process Z80, HD64180 (Z180), and Rabbit 2000/3000 + (default) code. The following processor specific assembler + directives specify which processor to target when processing the + input assembler files. + + + + + + + ASRAB ASSEMBLER PAGE BC-2 + PROCESSOR SPECIFIC DIRECTIVES + + + BC.2.1 .r2k Directive + + Format: + + .r2k + + The .r2k directive enables processing of the Rabbit 2000/3000 + specific mnemonics. Mnemonics not associated with the Rabbit + 2000/3000 processor will be flagged with an 'o' error. Address- + ing modes not supported by the Rabbit 2000/3000 will be flagged + with an 'a' error. A synonym of .r2k is .r3k. The default as- + sembler mode is .r2k. + + The .r2k directive also selects the Rabbit 2000/3000 + specific cycles count to be output. + + + + + BC.2.2 .hd64 Directive + + Format: + + .hd64 + + The .hd64 directive enables processing of the HD64180 (Z180) + specific mnemonics not included in the Z80 instruction set. + Rabbit 2000/3000 mnemonics encountered will be flagged with an + 'o' error. Addressing modes not supported by the HD64180 (Z180) + will be flagged with an 'a' error. A synonym of .hd64 is .z180. + + The .hd64 directive also selects the HD64180/Z180 specific + cycles count to be output. + + + + + BC.2.3 .z80 Directive + + Format: + + .z80 + + The .z80 directive enables processing of the Z80 specific + mnemonics. HD64180 and Rabbit 2000/3000 specific mnemonics will + be flagged with an 'o' error. Addressing modes not supported by + the z80 will be flagged with an 'a' error. + + The .z80 directive also selects the Z80 specific cycles + count to be output. + + + + ASRAB ASSEMBLER PAGE BC-3 + PROCESSOR SPECIFIC DIRECTIVES + + + + + + BC.2.4 The .__.CPU. Variable + + + The value of the pre-defined symbol '.__.CPU.' corresponds + to the selected processor type. The default value is 0 which + corresponds to the default processor type. The following table + lists the processor types and associated values for the ASRAB + assembler: + + Processor Type .__.CPU. Value + -------------- -------------- + .r2k / .r3k 0 + .hd64 / .z180 1 + .z80 2 + + + The variable '.__.CPU.' is by default defined as local and + will not be output to the created .rel file. The assembler com- + mand line options -g or -a will not cause the local symbol to be + output to the created .rel file. + + The assembler .globl directive may be used to change the + variable type to global causing its definition to be output to + the .rel file. The inclusion of the definition of the variable + '.__.CPU.' might be a useful means of validating that seperately + assembled files have been compiled for the same processor type. + The linker will report an error for variables with multiple non + equal definitions. + + + ASRAB ASSEMBLER PAGE BC-4 + PROCESSOR SPECIFIC DIRECTIVES + + + BC.3 RABBIT 2000/3000 ADDRESSING AND INSTRUCTIONS + + + + BC.3.1 Instruction Symbols + + + b Bit select + (000 = bit 0, 001 = bit 1, + 010 = bit 2, 011 = bit 3, + 100 = bit 4, 101 = bit 5, + 110 = bit 6, 111 = bit 7) + cc Condition code select + (00 = NZ, 01 = Z, 10 = NC, 11 = C) + d 8-bit (signed) displacement. + Expressed in two\'s complement. + dd word register select-destination + (00 = BC, 01 = DE, 10 = HL, 11 = SP) + dd' word register select-alternate + (00 = BC', 01 = DE', 10 = HL') + e 8-bit (signed) displacement added to PC. + f condition code select + (000 = NZ, 001 = Z, 010 = NC, 011 = C, + 100 = LZ/NV, 101 = LO/V, 110 = P, 111 = M) + m the most significant bits(MSB) of a 16-bit constant + mn 16-bit constant + n 8-bit constant or the least significant bits(LSB) + of a 16-bit constant + r, g byte register select + (000 = B, 001 = C, 010 = D, 011 = E, + 100 = H, 101 = L, 111 = A) + ss word register select-source + (00 = BC, 01 = DE, 10 = HL, 11 = SP) + v Restart address select + (010 = 0020h, 011 = 0030h, 100 = 0040h, + 101 = 0050h, 111 = 0070h) + x an 8-bit constant to load into the XPC + xx word register select + (00 = BC, 01 = DE, 10 = IX, 11 = SP) + yy word register select + (00 = BC, 01 = DE, 10 = IY, 11 = SP) + zz word register select + (00 = BC, 01 = DE, 10 = HL, 11 = AF) + + + + + ASRAB ASSEMBLER PAGE BC-5 + RABBIT 2000/3000 ADDRESSING AND INSTRUCTIONS + + + C - carry bit set + M - sign bit set + NC - carry bit clear + NZ - zero bit clear + P - sign bit clear + PE - parity even + V - overflow bit set + PO - parity odd + NV - overflow bit clear + Z - zero bit set + + + The terms m, mn, n, and x may all be expressions. The terms b + and v are not allowed to be external references. + + + ASRAB ASSEMBLER PAGE BC-6 + RABBIT 2000/3000 ADDRESSING AND INSTRUCTIONS + + + BC.3.2 Rabbit Instructions + + + The following list of instructions (with explicit address- + ing modes) are available in the Rabbit 2000/3000 assembler mode. + Those instructions denoted by an asterisk (*) are additional in- + structions not available in the HD64180 or Z80 assembler mode. + + ADC A,n DEC IX LD A,EIR + ADC A,r DEC IY LD A,IIR + ADC A,(HL) DEC r *LD A,XPC + ADC A,(IX+d) DEC ss LD A,(BC) + ADC A,(IY+d) DEC (HL) LD A,(DE) + ADC HL,ss DEC (IX+d) LD A,(mn) + ADD A,n DEC (IY+d) *LD dd,BC + ADD A,r DJNZ e *LD dd,DE + ADD A,(HL) LD dd,mn + ADD A,(IX+d) EX AF,AF LD dd,(mn) + ADD A,(IY+d) EX DE,HL LD EIR,A + ADD HL,ss EX DE,HL *LD HL,IX + ADD IX,xx EX (SP),HL *LD HL,IY + ADD IY,yy EX (SP),IX *LD HL,(HL+d) + *ADD SP,d EX (SP),IY *LD HL,(IX+d) + *ALTD EXX *LD HL,(IY+d) + *AND HL,DE LD HL,(mn) + *AND IX,DE INC IX *LD HL,(SP+n) + *AND IY,DE INC IY LD IIR,A + AND n INC r *LD IX,HL + AND r INC ss LD IX,mn + AND (HL) INC (HL) LD IX,(mn) + AND (IX+d) INC (IX+d) *LD IX,(SP+n) + AND (IY+d) INC (IY+d) *LD IY,HL + *IOE LD IY,mn + BIT b,r *IOI LD IY,(mn) + BIT b,(HL) *IPRES *LD IY,(SP+n) + BIT b,(IX+d) *IPSET 0 LD r,g + BIT b,(IY+d) *IPSET 1 LD r,n + *BOOL HL *IPSET 2 LD r,(HL) + *BOOL IX *IPSET 3 LD r,(IX+d) + *BOOL IY LD r,(IY+d) + JP f,mn LD SP,HL + CALL mn JP mn LD SP,IX + CCF JP (HL) LD SP,IY + CP n JP (IX) *LD XPC,A + CP r JP (IY) LD (BC),A + CP (HL) JR cc,e LD (DE),A + CP (IX+d) JR e LD (HL),n + CP (IY+d) LD (HL),r + CPL *LCALL x,mn + + + ASRAB ASSEMBLER PAGE BC-7 + RABBIT 2000/3000 ADDRESSING AND INSTRUCTIONS + + + *LD (HL+d),HL *POP IP SBC A,n + *LD (IX+d),HL POP IX SBC A,r + LD (IX+d),n POP IY SBC A,(HL) + LD (IX+d),r POP zz SBC HL,ss + *LD (IY+d),HL *PUSH IP SBC (IX+d) + LD (IY+d),n PUSH IX SBC (IY+d) + LD (IY+d),r PUSH IY SCF + LD (mn),A PUSH zz SET b,r + LD (mn),HL SET b,(HL) + LD (mn),IX RA SET b,(IX+d) + LD (mn),IY RES b,r SET b,(IY+d) + LD (mn),ss RES b,(HL) SLA r + *LD (SP+n),HL RES b,(IX+d) SLA (HL) + *LD (SP+n),IX RES b,(IY+d) SLA (IX+d) + *LD (SP+n),IY RET SLA (IY+d) + LDD RET f SRA r + LDDR *RETI SRA (HL) + LDI *RL DE SRA (IX+d) + LDIR RL r SRA (IY+d) + *LDP HL,(HL) RL (HL) SRL r + *LDP HL,(IX) RL (IX+d) SRL (HL) + *LDP HL,(IY) RL (IY+d) SRL (IX+d) + *LDP HL,(mn) RLA SRL (IY+d) + *LDP IX,(mn) RLC r SUB n + *LDP IY,(mn) RLC (HL) SUB r + *LDP (HL),HL RLC (IX+d) SUB (HL) + *LDP (IX),HL RLC (IY+d) SUB (IX+d) + *LDP (IY),HL RLCA SUB (IY+d) + *LDP (mn),HL *RR DE + *LDP (mn),IX *RR HL XOR n + *LDP (mn),IY *RR IX XOR r + LJP x,mn *RR IY XOR (HL) + LRET RR r XOR (IX+d) + RR (HL) XOR (IY+d) + *MUL RR (IX+d) + RR (IY+d) + NEG RRC r + NOP RRC (HL) + RRC (IX+d) + *OR HL,DE RRC (IY+d) + *OR IX,DE RRCA + *OR IY,DE RST v + OR n + OR r + OR (HL) + OR (IX+d) + OR (IY+d) + + + + + + + ASRAB ASSEMBLER PAGE BC-8 + Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + + BC.4 Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + The following list specifies the format for each Z80/HD64180 ad- + dressing mode supported by ASZ80: + + #data immediate data + byte or word data + + n byte value + + rg a byte register + a,b,c,d,e,h,l + + rp a register pair + bc,de,hl + + (hl) implied addressing or + register indirect addressing + + (label) direct addressing + + (ix+offset) indexed addressing with + offset(ix) an offset + + label call/jmp/jr label + + The terms data, n, label, and offset, may all be expressions. + The terms dir and offset are not allowed to be external refer- + ences. + + The following tables list all Z80/HD64180 mnemonics recog- + nized by the ASRAB assembler. The designation [] refers to a + required addressing mode argument. Note that not all addressing + modes are valid with every instruction, refer to the Z80/HD64180 + technical data for valid modes. + + + + + ASRAB ASSEMBLER PAGE BC-9 + Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + + BC.4.1 Inherent Instructions + + ccf cpd + cpdr cpi + cpir cpl + daa di + ei exx + halt neg + nop reti + retn rla + rlca rld + rra rrca + rrd scf + + + + + BC.4.2 Implicit Operand Instructions + + adc a,[] adc [] + add a,[] add [] + and a,[] and [] + cp a,[] cp [] + dec a,[] dec [] + inc a,[] inc [] + or a,[] or [] + rl a,[] rl [] + rlc a,[] rlc [] + rr a,[] rr [] + rrc a,[] rrc [] + sbc a,[] sbc [] + sla a,[] sla [] + sra a,[] sra [] + srl a,[] srl [] + sub a,[] sub [] + xor a,[] xor [] + + + + + ASRAB ASSEMBLER PAGE BC-10 + Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + + BC.4.3 Load Instruction + + ld rg,[] ld [],rg + ld (bc),a ld a,(bc) + ld (de),a ld a,(de) + ld (label),a ld a,(label) + ld (label),rp ld rp,(label) + ld i,a ld r,a + ld a,i ld a,r + ld sp,hl ld sp,ix + ld sp,iy ld rp,#data + ldd lddr + ldi ldir + + + + + BC.4.4 Call/Return Instructions + + call C,label ret C + call M,label ret M + call NC,label ret NC + call NZ,label ret NZ + call P,label ret P + call PE,label ret PE + call PO,label ret PO + call Z,label ret Z + call label ret + + + + + BC.4.5 Jump and Jump to Subroutine Instructions + + jp C,label jp M,label + jp NC,label jp NZ,label + jp P,label jp PE,label + jp PO,label jp Z,label + jp (hl) jp (ix) + jp (iy) jp label + djnz label + jr C,label jr NC,label + jr NZ,label jr Z,label + jr label + + + + + ASRAB ASSEMBLER PAGE BC-11 + Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + + BC.4.6 Bit Manipulation Instructions + + bit n,[] + res n,[] + set n,[] + + + + + BC.4.7 Interrupt Mode and Reset Instructions + + im n + im n + im n + rst n + + + + + BC.4.8 Input and Output Instructions + + in a,(n) in rg,(c) + ind indr + ini inir + out (n),a out (c),rg + outd otdr + outi otir + + + + + BC.4.9 Register Pair Instructions + + add hl,rp add ix,rp + add iy,rp + adc hl,rp sbc hl,rp + ex (sp),hl ex (sp),ix + ex (sp),iy + ex de,hl + ex af,af' + push rp pop rp + + + + + ASRAB ASSEMBLER PAGE BC-12 + Z80/HD64180 ADDRESSING AND INSTRUCTIONS + + + BC.4.10 HD64180 Specific Instructions + + in0 rg,(n) + out0 (n),rg + otdm otdmr + otim otimr + mlt bc mlt de + mlt hl mlt sp + slp + tst a + tstio #data + + + + + + + + + + + + + + + APPENDIX BI + + ASZ80 ASSEMBLER + + + + + + BI.1 .z80 DIRECTIVE + + Format: + + .z80 + + The .z80 directive enables processing of only the z80 specific + mnemonics. HD64180/Z180 mnemonics encountered without the .hd64 + directive will be flagged with an 'o' error. + + The .z80 directive also selects the Z80 specific cycles + count to be output. + + + BI.2 .hd64 DIRECTIVE + + Format: + + .hd64 + + The .hd64 directive enables processing of the HD64180/Z180 + specific mnemonics not included in the Z80 instruction set. + HD64180/Z180 mnemonics encountered without the .hd64 directive + will be flagged with an 'o' error. A synonym of .hd64 is .z180. + + The .hd64 directive also selects the HD64180/Z180 specific + cycles count to be output. + + + + + ASZ80 ASSEMBLER PAGE BI-2 + THE .__.CPU. VARIABLE + + + BI.3 THE .__.CPU. VARIABLE + + + The value of the pre-defined symbol '.__.CPU.' corresponds + to the selected processor type. The default value is 0 which + corresponds to the default processor type. The following table + lists the processor types and associated values for the ASZ80 + assembler: + + Processor Type .__.CPU. Value + -------------- -------------- + .z80 0 + .hd64 / .z180 1 + + + The variable '.__.CPU.' is by default defined as local and + will not be output to the created .rel file. The assembler com- + mand line options -g or -a will not cause the local symbol to be + output to the created .rel file. + + The assembler .globl directive may be used to change the + the variable type to global causing its definition to be output + to the .rel file. The inclusion of the definition of the vari- + able '.__.CPU.' might be a useful means of validating that + seperately assembled files have been compiled for the same pro- + cessor type. The linker will report an error for variables with + multiple non equal definitions. + + + BI.4 Z80 REGISTER SET AND CONDITIONS + + + The following is a complete list of register designations + and condition mnemonics: + + byte registers - a,b,c,d,e,h,l,i,r + register pairs - af,af',bc,de,hl + word registers - pc,sp,ix,iy + + C - carry bit set + M - sign bit set + NC - carry bit clear + NZ - zero bit clear + P - sign bit clear + PE - parity even + PO - parity odd + Z - zero bit set + + + + + ASZ80 ASSEMBLER PAGE BI-3 + Z80 INSTRUCTION SET + + + BI.5 Z80 INSTRUCTION SET + + + The following list specifies the format for each addressing + mode supported by ASZ80: + + #data immediate data + byte or word data + + n byte value + + rg a byte register + a,b,c,d,e,h,l + + rp a register pair + bc,de,hl + + (hl) implied addressing or + register indirect addressing + + (label) direct addressing + + offset(ix) indexed addressing with + an offset + + label call/jmp/jr label + + The terms data, n, label, and offset may all be expressions. + + Note that not all addressing modes are valid with every in- + struction, refer to the Z80/HD64180/Z180 technical data for + valid modes. + + The following tables list all Z80/HD64180/Z180 mnemonics + recognized by the ASZ80 assembler. The designation [] refers to + a required addressing mode argument. + + + ASZ80 ASSEMBLER PAGE BI-4 + Z80 INSTRUCTION SET + + + BI.5.1 Inherent Instructions + + ccf cpd + cpdr cpi + cpir cpl + daa di + ei exx + halt neg + nop reti + retn rla + rlca rld + rra rrca + rrd scf + + + BI.5.2 Implicit Operand Instructions + + adc a,[] adc [] + add a,[] add [] + and a,[] and [] + cp a,[] cp [] + dec a,[] dec [] + inc a,[] inc [] + or a,[] or [] + rl a,[] rl [] + rlc a,[] rlc [] + rr a,[] rr [] + rrc a,[] rrc [] + sbc a,[] sbc [] + sla a,[] sla [] + sra a,[] sra [] + srl a,[] srl [] + sub a,[] sub [] + xor a,[] xor [] + + + ASZ80 ASSEMBLER PAGE BI-5 + Z80 INSTRUCTION SET + + + BI.5.3 Load Instruction + + ld rg,[] ld [],rg + ld (bc),a ld a,(bc) + ld (de),a ld a,(de) + ld (label),a ld a,(label) + ld (label),rp ld rp,(label) + ld i,a ld r,a + ld a,i ld a,r + ld sp,hl ld sp,ix + ld sp,iy ld rp,#data + + ldd lddr + ldi ldir + + + BI.5.4 Call/Return Instructions + + call C,label ret C + call M,label ret M + call NC,label ret NC + call NZ,label ret NZ + call P,label ret P + call PE,label ret PE + call PO,label ret PO + call Z,label ret Z + call label ret + + + BI.5.5 Jump and Jump to Subroutine Instructions + + jp C,label jp M,label + jp NC,label jp NZ,label + jp P,label jp PE,label + jp PO,label jp Z,label + + jp (hl) jp (ix) + jp (iy) jp label + + djnz label + + jr C,label jr NC,label + jr NZ,label jr Z,label + jr label + + + ASZ80 ASSEMBLER PAGE BI-6 + Z80 INSTRUCTION SET + + + BI.5.6 Bit Manipulation Instructions + + bit n,[] + res n,[] + set n,[] + + + BI.5.7 Interrupt Mode and Reset Instructions + + im n + im n + im n + rst n + + + BI.5.8 Input and Output Instructions + + in a,(n) in rg,(c) + ind indr + ini inir + + out (n),a out (c),rg + outd otdr + outi otir + + + BI.5.9 Register Pair Instructions + + add hl,rp add ix,rp + add iy,rp + + adc hl,rp sbc hl,rp + + ex (sp),hl ex (sp),ix + ex (sp),iy + ex de,hl + ex af,af' + + push rp pop rp + + + ASZ80 ASSEMBLER PAGE BI-7 + Z80 INSTRUCTION SET + + + BI.5.10 HD64180/Z180 Specific Instructions + + in0 rg,(n) + out0 (n),rg + + otdm otdmr + otim otimr + + mlt bc mlt de + mlt hl mlt sp + + slp + + tst a + tstio #data +
\ No newline at end of file diff --git a/sdas/doc/format.txt b/sdas/doc/format.txt new file mode 100644 index 0000000..0cc625e --- /dev/null +++ b/sdas/doc/format.txt @@ -0,0 +1,142 @@ + 2.5.1 Object Module Format + + + The first line of an object module contains the [XDQ][HL] + format specifier (i.e. XH indicates a hexidecimal file with + most significant byte first) for the following designators. + + + 2.5.2 Header Line + + H aa areas gg global symbols + + The header line specifies the number of areas(aa) and the + number of global symbols(gg) defined or referenced in this ob- + ject module segment. + + + 2.5.3 Module Line + + M name + + The module line specifies the module name from which this + header segment was assembled. The module line will not appear + if the .module directive was not used in the source program. + + + 2.5.4 Symbol Line + + S string Defnnnn + + or + + S string Refnnnn + + The symbol line defines (Def) or references (Ref) the symbol + 'string' with the value nnnn. The defined value is relative to + the current area base address. References to constants and + external global symbols will always appear before the first area + definition. References to external symbols will have a value of + zero. + + + 2.5.5 Area Line + + A label size ss flags ff + + The area line defines the area label, the size (ss) of the + area in bytes, and the area flags (ff). The area flags specify + the ABS, REL, CON, OVR, and PAG parameters: + + OVR/CON (0x04/0x00 i.e. bit position 2) + + ABS/REL (0x08/0x00 i.e. bit position 3) + + PAG (0x10 i.e. bit position 4) + + + 2.5.6 T Line + + T xx xx nn nn nn nn nn ... + + The T line contains the assembled code output by the assem- + bler with xx xx being the offset address from the current area + base address and nn being the assembled instructions and data in + byte format. + + + 2.5.7 R Line + + R 0 0 nn nn n1 [n1x] n2 xx xx ... + + The R line provides the relocation information to the linker. + The nn nn value is the current area index, i.e. which area the + current values were assembled. Relocation information is en- + coded in groups of 4 (possibly 5) bytes: + + 1. n1 (and optionally n1x) is the relocation mode and object + format: + 1. bit 0 word(0x00)/byte(0x01) + 2. bit 1 relocatable area(0x00)/symbol(0x02) + 3. bit 2 normal(0x00)/PC relative(0x04) relocation + 4. bit 3 1-byte(0x00)/2-byte(0x08) object format for + byte data + 5. bit 4 signed(0x00)/unsigned(0x10) byte data + 6. bit 5 normal(0x00)/page '0'(0x20) reference + 7. bit 6 normal(0x00)/page 'nnn'(0x40) reference + 8. bit 7 LSB byte(0x00)/MSB byte(0x80) with 2-byte + mode + 9. bit 8 1 or 2 (0x00)/3-byte (0x100) object format + for byte data. + 10. bit 9 LSB or MSB (middle byte) (0x00) or byte 3 + (real MSB) (0x200) for 3-byte mode. + + If the upper four bits of n1 are set (i.e. + (n1 & 0xf0) == 0xf0), it is taken as an escape character, + and the relocation mode will consist of the lower four bits + of n1 left shifted 8 bits or'ed with the value of n1x. If + the upper four bits of n1 are not all set, then it is not an + escape character, and the n1x byte is not present. + + This escape mechanism allows a 12-bit relocation mode value. + + Note that in byte mode, when 3-byte mode is used (bits 0 + and 8 are both set), the MSB bit (bit 7) really refers to + the 16 bit MSB (the middle byte of the 24-bit value) while + the "byte 3" bit (bit 9) refers to the 24-bit MSB. + + 2. n2 is a byte index into the corresponding (i.e. pre- + ceeding) T line data (i.e. a pointer to the data to be + updated by the relocation). The T line data may be + 1-byte or 2-byte byte data format or 2-byte word + format. + + 3. xx xx is the area/symbol index for the area/symbol be- + ing referenced. the corresponding area/symbol is found + in the header area/symbol lists. + + + The groups of 4 bytes are repeated for each item requiring relo- + cation in the preceeding T line. + + + 2.5.8 P Line + + P 0 0 nn nn n1 n2 xx xx + + The P line provides the paging information to the linker as + specified by a .setdp directive. The format of the relocation + information is identical to that of the R line. The correspond- + ing T line has the following information: + T xx xx aa aa bb bb + + Where aa aa is the area reference number which specifies the + selected page area and bb bb is the base address of the page. + bb bb will require relocation processing if the 'n1 n2 xx xx' is + specified in the P line. The linker will verify that the base + address is on a 256 byte boundary and that the page length of an + area defined with the PAG type is not larger than 256 bytes. + + The linker defaults any direct page references to the first + area defined in the input REL file. All ASxxxx assemblers will + specify the _CODE area first, making this the default page area. |
