home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-09-17 | 69.6 KB | 1,697 lines |
-
-
-
-
-
-
- TASM USER'S MANUAL
-
-
- TASM - A Table Driven Cross Assembler for the MSDOS* Environment
-
-
-
-
-
- Thomas N. Anderson
- Speech Technology Incorporated
- 837 Front Street South, Issaquah, WA 98027
-
-
- August, 1990
- Version 2.8
-
- [Speech Technology Incorporated manufactures electronic devices to
- aid the visually impaired employing digital speech synthesis
- technology.]
-
-
- TASM software is Copyright (C) 1985-1990 by Speech Technology
- Incorporated. All rights reserved.
-
- This document is Copyright (C) 1985-1990 by Speech Technology
- Incorporated. All rights reserved. Permission is granted to copy
- this document and related software except for the source code. The
- source code, distributed to registered users, may be copied for the
- sole use of the registered user.
-
- Portions of TASM.EXE (C runtime library) are Copyright 1987 by
- Microsoft Corporation.
-
-
-
- * MSDOS is a trademark of Microsoft Corporation.
-
- TASM - Table Driven Assembler Version 2.8 Page 2
-
- TABLE OF CONTENTS
-
- SECTION PAGE
- ______________________________________________________________________
- INTRODUCTION 4
- INVOCATION 5
- File Names 5
- Option: a - Assembly Control 6
- Option: b - Binary Object Format 7
- Option: c - Contiguous Block Output 7
- Option: d - Define a Macro 7
- Option: e - Expand Source 7
- Option: f - Fill Memory 7
- Option: g - Select Object File Format 8
- Option: h - Hex Object Code Table 8
- Option: i - Ignore Case in Labels 8
- Option: l - Label Table 8
- Option: m - MOS Technology Object Format 8
- Option: o - Set Number of Bytes per Object Record 8
- Option: p - Page Listing File 8
- Option: q - Disable Listing File 8
- Option: r - Set Read Buffer Size 8
- Option: s - Enable Symbol File Generation 9
- Option: t - Table Name 9
- Option: x - Enable Extended Instruction Set 10
- Option: y - Enable Assembly Timing 10
- ENVIRONMENT VARIABLES 11
- TASMTABS 11
- TASMOPTS 10
- EXIT CODES 10
- SOURCE FILE FORMAT 12
- EXPRESSIONS 13
- Labels 13
- Numeric Constants 13
- Character Constants 14
- String Constants 14
- Location Counter Symbol 14
- Operators 14
- ASSEMBLER DIRECTIVES 17
- ADDINSTR 17
- AVSYM 17
- BLOCK 17
- BSEG/CSEG/DSEG/NSEG/XSEG 17
- BYTE 18
- CODES/NOCODES 18
- DB 18
- DW 18
- DEFINE 18
- DEFCONT 19
- EJECT 19
- ELSE 20
- END 20
- ENDIF 20
- EQU 20
- EXPORT 21
- IFDEF 21
- TASM - Table Driven Assembler Version 2.8 Page 3
-
- IFNDEF 21
- IF 22
- INCLUDE 22
- LIST/NOLIST 22
- LSFIRST/MSFIRST 22
- ORG 22
- PAGE/NOPAGE 23
- SET 23
- SYM/AVSYM 23
- TEXT 24
- TITLE 25
- WORD 25
- OBJECT FILE FORMATS 26
- Intel Hex Object Format 26
- MOS Technology Hex Object Format 27
- Motorola Hex Object Format 27
- Binary Object Format 28
- LISTING FILE FORMAT 29
- PROM PROGRAMMING 30
- ERROR MESSAGES 31
- BUGS AND LIMITATIONS 34
-
- APPENDIX A - ORDERING INFORMATION 35
- TASM - Table Driven Assembler Version 2.8 Page 4
-
- INTRODUCTION
-
-
- TASM is a table driven cross assembler for the MS-DOS environment.
- Assembly source code, written in the appropriate dialect (generally
- very close to the manufacturers assembly language), can be assembled
- with TASM, and the resulting object code transferred to the target
- microprocessor system via PROM or other mechanisms.
-
- The current microprocessor families supported by TASM are:
-
- 6502 8048
- 6800/6801 8051
- 6805 8080/8085
- TMS32010 Z80
- TMS7000
-
- The user so inclined may build tables for other microprocessors. The
- descriptions of the various existing tables and instructions on
- building new tables are not in this document but can be found in the
- TASMTABS.DOC file on the TASM distribution disk.
-
- TASM characteristics include:
-
- 1. Powerful expression parsing (17 operators).
- 2. Supports a subset of the 'C' preprocessor commands.
- 3. Macro capability (through use of DEFINE directive).
- 4. Multiple statements per line.
- 5. Four object file formats:
- Intel hex, MOS Technology hex, Motorola hex, binary.
- 6. Absolute code generation only.
- 7. Source code available (in C).
- 8. Uniform syntax across versions for different target machines.
- 9. Features in support of PROM programming (preset memory,
- contiguous block).
- 10. Supports extended instructions for many of the supported
- microprocessor families.
- 11. Tables read at run time - single TASM executable for all
- table versions.
- 12. Symbol table export for inclusion in subsequent assemblies
- (.EXP format).
- 13. Symbol table export file compatible with the Avocet 8051
- simulator (.SYM format).
-
- SHAREWARE
-
- TASM is distributed as shareware. TASM is not public domain. The
- TASM distribution files may be freely copied (excluding the source
- code files) and freely used for the purpose of evaluating the
- suitability of TASM for a given purpose. Use of TASM beyond a
- reasonable evaluation period requires registration. Prolonged use
- without registration is unethical.
-
- TASM - Table Driven Assembler Version 2.8 Page 5
-
- INVOCATION
-
- TASM can be invoked as follows (optional fields shown in brackets,
- symbolic fields in <>):
-
- tasm -<pn> [-<option_flag ...>] <src_file> [<obj_file>
- [<lst_file> [<exp_file> [<sym_file>]]]]
-
- Where <option_flag> can be one or more of the following:
-
- -<table> Specify version (<table> = table designation)
- -t<table> Table (alternate form of above)
- -a<amask> Assembly control (optional error checking)
- -b Produce object in binary (.COM) format
- -c Object file written as a contiguous block
- -d<macro> Define a macro (or just a macro label)
- -e Show source lines after macro expansion
- -f<fillbyte> Fill entire memory space with <fillbyte> (hex)
- -g<objtype> Object file (0=Intel, 1=MOS Tech, 2=Motorola, 3=binary)
- -h Produce hex table of the assembled code (in list file)
- -i Ignore case for labels
- -l Produce a label table in the listing
- -m Produce object in MOS Technology format
- -o<obytes> Bytes per object record (for hex obj formats)
- -p[<lines>] Page the listing file (<lines per page>. default=60)
- -q Quiet, disable the listing file
- -r<kb> Set read buffer size in Kbytes (default 2 Kbytes)
- -s Write a symbol table file
- -x[<xmask>] Enable extended instruction set (if any)
- -y Time the assembly
-
- The file parameters are defined as follows:
-
- <src_file> Source file name
- <obj_file> Object code file name
- <lst_file> Listing file name
- <exp_file> Symbol export file (only if the EXPORT directive is used).
- <sym_file> Symbol table file (only if the "-s"
- option or the SYM/AVSYM directives are used).
-
- The source file must be specified. If not, some usage information
- is displayed. Default file names for all the other files are
- generated if they are not explicitly provided. The filename is
- formed by taking the source filename and changing the extension to
- one of the following:
-
- Extension File type
- ________________________________________________________
- .OBJ Object file
- .LST Listing file
- .EXP Symbol export file
- .SYM Symbol table file
-
- TASM has no built-in instruction set tables. Instruction set
- definition files are read at run time. TASM determines which table
- to use based on the '-table' field shown above. For example, to
- TASM - Table Driven Assembler Version 2.8 Page 6
-
- assemble the code in a file called source.asm, one would enter:
-
- tasm -48 source.asm for an 8048 assembly
- tasm -65 source.asm for a 6502 assembly
- tasm -51 source.asm for an 8051 assembly.
- tasm -85 source.asm for an 8085 assembly.
- tasm -80 source.asm for a Z80 assembly.
- tasm -05 source.asm for a 6805 assembly.
- tasm -68 source.asm for a 6800/6801 assembly.
- tasm -70 source.asm for a TMS7000 assembly.
- tasm -32 source.asm for a TMS32010 assembly.
-
- The file name that the tables are read from is formed by taking the
- digits specified after the '-' and appending it to 'TASM' then
- appending the '.TAB' extension. Thus, the '-48' flag would cause
- the tables to be read from the file 'TASM48.TAB'.
-
- It is possible to designate tables by non numeric part numbers if
- the '-t' flag is used. For example, if a user built a table called
- TASMF8.TAB then TASM could be invoked as follows:
-
- tasm -tf8 source.asm
-
- Each option flag must be preceded by a dash. Options need not
- precede the file names, however. The various options are described
- below:
-
- a - Assembly Control. TASM can provide additional error checking by
- specifying the '-a' option at the time of execution. If the '-a' is
- provided without a digit following, then all the available error
- checking is done. If a digit follows, then it is used as a mask to
- determine the error checks to be made. The bits of the mask are
- defined as follows:
-
- Bit Option Description
- __________________________________________________________________
- 0 -a1 Check for apparent illegal use of indirection
- 1 -a2 Check for unused data in the arguments
- 2 -a4 Check for duplicate labels
- 3 -a8 Check for non-unary operators at start of expression.
- 4 -a10 Check for off-page jumps for 8051 ACALL/AJMP.
-
- Combinations of the above bits can also be used. For example, '-a5'
- would enable the checking for illegal indirection and duplicate
- labels.
-
- Illegal indirection applies to micros that use parenthesis around an
- argument to indicate indirection. Since it is always legal to put
- an extra pair of parenthesis around any expression (as far as the
- expression parser is concerned), the user may think that he/she is
- indicating indirection for an instruction that has no indirection
- and TASM would not complain. Enabling this checking will result in
- an error message (warning) whenever an outer pair of parenthesis is
- used and the instruction set definition table does not explicitly
- indicate that to be a valid form of addressing.
-
- TASM - Table Driven Assembler Version 2.8 Page 7
-
- Unused data in arguments applies to cases where a single byte of
- data is needed from an argument, but the argument contains more than
- one byte of data. If a full sixteen bit address is used in a 'Load
- Immediate' type instruction that needs only a single byte, for
- example, an error message would be generated. Here is an example
- (6502 code):
-
- 0001 1234 .org $1234
- tasm: Unused data in MS byte of argument. Line 0002 in test.asm
- 0002 1234 A9 34 start lda #start
-
- To make the above checks occur whenever you do an assembly, add a
- line like this to your AUTOEXEC.BAT file:
-
- SET TASMOPTS=-a
-
-
- b - Binary Object Format. This option causes the object file to be
- written in binary - one byte for each byte of code/data. Note that
- no address information is included in the object file in this
- format. The contiguous block (-c) output mode is forced when this
- option is invoked. This flag is equivalent to '-g3'.
-
- c - Contiguous Block Output. If this option is specified, then all
- bytes in the range from the lowest used byte to the highest will be
- defined in the object file. Normally, with the default Intel Hex
- object format enabled, if the Program Counter (PC) jumps forward
- because of an .ORG directive, the bytes skipped over will not have
- any value assigned them in the object file. With this option
- enabled, no output to the object file occurs until the end of the
- assembly at which time the whole block is written. This is useful
- when using TASM to generate code that will be put into a PROM so
- that all locations will have a known value. This option is often
- used in conjunction with the -f option to ensure all unused bytes
- will have a known value.
-
- d - Define a Macro. Macros are defined on the command line generally
- to control the assembly of various IFDEF's that are in the source
- file. This is a convenient way to generate various versions of
- object code from a single source file.
-
- e - Expand Source. Normally TASM shows lines in the listing file
- just as they are in the source file. If macros are in use (via the
- DEFINE directive) it is sometimes desirable to see the source lines
- after expansion. Use the '-e' flag to accomplish this.
-
- f - Fill Memory. This option causes the memory image that TASM
- maintains to be initialized to the value specified by the two hex
- characters immediately following the 'f'. TASM maintains a memory
- image that is a full 64K bytes in size (even if the target processor
- cannot utilize that memory space). Invocation of this option
- introduces a delay at start up of up to 2 seconds (time required to
- initialize all 64K bytes).
-
- g - Object File Format. TASM can generate object code in four
- different formats as indicated below:
- TASM - Table Driven Assembler Version 2.8 Page 8
-
- -g0 for Intel hex (default)
- -g1 for MOS Technology hex (same as -m)
- -g2 for Motorola hex
- -g3 for binary (same as -b)
-
- The '-m' and '-b' flags may also be used, as indicated above.
-
- See the section on OBJECT FILE FORMATS for descriptions of each of
- the above.
-
-
- h - Hex Object Code Table. This option causes a hex table of the
- produced object code to appear in the listing file. Each line of
- the table shows sixteen bytes of code.
-
-
- i - Ignore Case in Labels. TASM is normally case sensitive when
- dealing with labels. For those that prefer case insensitivity, the
- '-i' command line option can be employed.
-
- l - Label Table. This option causes a label table to appear in the
- listing file. Each label is shown with its corresponding value.
- Macro labels (as established via the DEFINE directives) do not
- appear.
-
- m - MOS Technology Object Format. This option causes the object file
- to be written in MOS Technology hex format rather than the default
- Intel hex format. See section on OBJECT FILE FORMATS for a
- description of the format.
-
- o - Set Number of Bytes per Object Record. When generating object
- code in either the MOS Technology format or the Intel hex format, a
- default of 24 (decimal) bytes of object are defined on each record.
- This can be altered by invoking the '-o' option immediately followed
- by two hex digits defining the number of bytes per record desired.
- For example, if 32 bytes per record are desired, one might invoke
- TASM as:
-
- TASM -48 -o20 source.asm
-
- p - Page Listing File. This option causes the listing file to have
- top of page headers and form feeds inserted at appropriate intervals
- (every sixty lines of output). To override the default of sixty
- lines per page, indicate the desired number of lines per page as a
- decimal number immediatly following the '-p'. Here is an example:
-
- TASM -48 -p56 source.asm
-
- q - Disable Listing File. This option causes all output to the
- listing file to be suppressed, unless a .LIST directive is
- encountered in the source file (see LIST/NOLIST directives).
-
- r - Set Read Buffer Size. This option overrides the default read
- buffer size of 2 Kbytes. The first hexadecimal digit immediately
- after the 'r' is taken as the number of K bytes to allocate for the
- read buffer (.e.g. '-r8' indicates an 8K byte buffer, '-rf'
- TASM - Table Driven Assembler Version 2.8 Page 9
-
- indicates a 15K byte buffer). Note that that read buffers are taken
- from the same memory pool as labels and macro storage, and that
- additional read buffers are needed if "includes" are used. Thus,
- using 8K byte buffers may be suitable for most assemblies, but
- programs with large numbers of symbols may not allow such a value.
- Also, reducing the buffer size to 1 Kbyte can increase the memory
- pool available for label storage, if such is needed.
-
- s - Enable Symbol File Generation. If this flag is set, a symbol
- file is generated at the end of the assembly. The format of the
- file is one line per label, each label starts in the first column
- and is followed by white space and then four hexadecimal digits
- representing the value of the label. The following illustrates the
- format:
-
- label1 FFFE
- label2 FFFF
- label3 1000
-
- The symbol file name can be provided as the fifth file name on the
- the command line, or the name will be generated from the source file
- name with a '.SYM' extension. The symbol table file can also be
- generated by invoking the SYM directive. The AVSYM directive also
- generates the symbol file but in a different format (see section on
- ASSEMBLER DIRECTIVES).
-
- t - Table Name. As an alternative to specifying the instruction set
- table as two decimal digits, the table indication may be preceeded
- by the '-t' option. This is useful if the desired table name starts
- with a non-numeric. Thus, a table for an F8 might be selected as:
-
- TASM -tf8 source.asm
-
- TASM would expect to read the instruction set definition tables from
- a file named TASMF8.TAB.
-
- TASM - Table Driven Assembler Version 2.8 Page 10
-
- x - Enable Extended Instruction Set. If a processor family has
- instructions that are valid for only certain members, this option
- can be used to enable those beyond the basic standard instruction
- set. A hex digit may follow the 'x' to indicate a mask value used
- in selecting the appropriate instruction set. Bit 0 of the mask
- selects the basic instruction set, thus a '-x1' would have no
- effect. A '-x3' would enable the basic set plus whatever
- instructions have bit 1 set in their class mask. A '-x' without a
- digit following is equivalent to a '-xf' which sets all four of the
- mask bits. The following table indicates the current extended
- instruction sets available in the TASM tables:
-
- Base Extension 1 Extension 2 Extension 3
- Base Table Family (-x3) (-x5) (-x9)
- ____________________________________________________________________
- TASM48.TAB 8048 8041A 8022 8021
- TASM65.TAB 6502 R65C02 R65C00/21
- TASM05.TAB 6805 M146805 CMOS HC05C4
- TASM80.TAB Z80 HD64180
- TASM68.TAB 6800 6801/6803
- TASM51.TAB 8051
- TASM85.TAB 8080
- TASM32.TAB TMS32010
- TASM70.TAB TMS7000
-
- The above table does not attempt to show the many microprocessor
- family members that may apply under a given column.
-
- y - Enable Assembly Timing. If this option is enabled TASM will
- generate a statement of elapsed time and assembled lines per second
- at the end of the assembly.
-
- TASM - Table Driven Assembler Version 2.8 Page 11
-
- ENVIRONMENT VARIABLES
-
- The TASM environment can be customized by using the enviroment
- variables listed below:
-
- TASMTABS. This variable specifies the path to be searched for TASM
- instruction set definition tables. If it is not defined then the
- table(s) must exist in the current working directory. If it was
- desired to put the instruction set definition tables in a directory
- called 'TASM' on a drive called 'C:', the following statement would
- be appropriate in the AUTOEXEC.BAT file:
-
- set TASMTABS=C:\TASM
-
- TASMOPTS. This variable specifies TASM command line options that are
- to be invoked every time TASM is executed. For example, if TASM is
- being used for 8048 assemblies with binary object file output
- desired, the following statement would be appropriate in the
- AUTOEXEC.BAT file:
-
- set TASMOPTS=-48 -b
-
-
- EXIT CODES
-
- When TASM terminates, it will return to DOS the following exit
- codes:
-
- Exit Code Meaning
- ___________________________________________________________
- 0 Normal completion, no assembly errors
- 1 Normal completion, with assembly errors
- 2 Abnormal completion, insufficient memory
- 3 Abnormal completion, file access error
- 4 Abnormal completion, general error
-
-
- Exit codes 2 and above will also be accompanied by messages to the
- console concerning the error.
-
- TASM - Table Driven Assembler Version 2.8 Page 12
-
- SOURCE FILE FORMAT
-
- Statements in the source file must conform to a format as follows
- (except for assembler directive statements which are described in a
- subsequent section):
-
- label operation operand comment
-
- All of the fields are optional, under appropriate circumstances. An
- arbitrary amount of white space (space and tabs) can separate each
- field (as long as the maximum line length of 255 characters is not
- exceeded). Each of the fields are described below:
-
- Label Field. If the first character of the line is alphabetic, it is
- assumed to be the start of a label. Subsequent characters are
- accepted as part of that label until a space, tab, or ':' is
- encountered. The assembler assigns a value to the label
- corresponding to the current location counter. Labels can be a
- maximum of 13 characters long. Labels can contain upper and lower
- case letters, digits, underscores, and periods (the first character
- must be alphabetic). Labels are case sensitive - the label 'START'
- is a different label from 'start' - unless the '-i' (ignore case)
- option is enabled.
-
- Operation Field. The operation field contains an instruction
- mnemonic which specifies the action to be carried out by the target
- processor when this instruction is executed. The interpretation of
- each mnemonic is dependent on the target microprocessor (as
- indicated by the selected TASM table). The operation field may
- begin in any column except the first. The operation field is case
- insensitive.
-
- Operand Field. The operand field specifies the data to be operated
- on by the instruction. It may include expressions and/or special
- symbols describing the addressing mode to be used. The actual
- format and interpretation is dependent on the target processor. For
- a description of the format for currently supported processors, see
- the TASMTABS.DOC file on the TASM distribution disk.
-
- Comment Field. The comment field always begins with a semicolon.
- The rest of the line from the semicolon to the end of the line is
- ignored by TASM, but passed on to the listing file for annotation
- purposes. The comment field must be the last field on a line, but
- it may be the only field, starting in column one, if desired.
-
- Multiple Statement Lines. If the backslash character is
- encountered on a source line, it is treated as a newline. The
- remainder of the line following the backslash will be processed
- as an independent line of source code. This allows one to put
- multiple statements on a line. This facility is not so useful of
- itself, but when coupled with the capability of the DEFINE
- directive, powerful multiple statement macros can be
- constructed (see section on ASSEMBLER DIRECTIVES). Note that
- when using the statement separator, the character immediately
- following it should be considered the first character of a new
- line, and thus must either be a start of a label or white space
- TASM - Table Driven Assembler Version 2.8 Page 13
-
- (not an instruction). As the examples show, a space is put between
- the backslash and the start of the next instruction.
-
-
- Some examples of valid source statements follow (6502 mnemonics
- shown):
-
- label1 lda byte1 ;get the first byte
- dec byte1
- jne label1
-
- ;
- label2
- sta byte2,X
- ; a multiple statement line follows
- lda byte1\ sta byte1+4\ lda byte2\ sta byte2+4
-
-
-
- EXPRESSIONS
-
- Expressions are made up of various syntactic elements (tokens)
- combined according to a set of syntactical rules. The tokens are
- summarized as follows:
-
- 1. Labels
- 2. Constants
- 3. Location Counter Symbol
- 4. Operators
- 5. Parenthesis
-
- Labels. Labels are strings of characters that have a numeric value
- associated with them, generally representing an address. Labels can
- contain upper and lower case letters, digits, underscores, and
- periods. The first character must be a letter (to distinguish it
- from a numeric constant). The value of a label is limited to 32 bit
- precision. Labels can contain up to 13 characters, all of which are
- significant (none are ignored when looking at a label's value, as in
- some assemblers). Case is significant unless the '-i' command line
- option is invoked.
-
- Numeric Constants. Numeric constants must always begin with a
- decimal digit (thus hexadecimal constants that start with a letter
- must be prefixed by a '0' unless the '$' prefix is used). The radix
- is determined by a letter immediately following the digit string
- according to the following table:
-
- Radix Suffix Prefix
- ______________________________________________________
- 2 B or b %
- 8 O or o @
- 10 D or d (or nothing)
- 16 H or h $
-
- Decimal is the default radix, so decimal constants need no suffix or
- prefix.
- TASM - Table Driven Assembler Version 2.8 Page 14
-
- The following representations are equivalent:
-
- 1234H or $1234
- 100d or 100
- 177400O or @177400
- 01011000b or %01011000
-
- The prefixes are provided for compatibility with some other source
- code formats but introduce a problem of ambiguity. Both '%' and '$'
- have alternate uses ('%' for modulo, '$' for location counter
- symbol). The ambiguity is resolved by examining the context. The
- '%' character is interpreted as the modulo operator only if it is in
- a postion suitable for a binary operator. Similarly, if the first
- character following a '$' is a valid hexadecimal digit, it is
- assumed to be a radix specifier and not the location counter.
-
- Character Constants. Character constants are single characters
- surrounded by single quotes (following quote is optional). The
- ASCII value of the character in the quotes is returned. No escape
- provision exists to represent non-printable characters within the
- quotes, but this is not necessary since these can be just as easily
- represented as numeric constants (or using the TEXT directive which
- does allow escapes).
-
- String Constants. String constants are one or more characters
- surrounded by double quotes. Note that string constants are not
- allowed in expressions. They are only allowable following the TITLE,
- BYTE and TEXT assembler directives. The quoted strings may also
- contain escape sequences to put in unprintable values. The
- following escape sequences are supported:
-
- Escape
- Sequence Description
- ___________________________________________________________
- \n Line Feed
- \r Carriage return
- \b Backspace
- \t Tab
- \f Formfeed
- \\ Backslash
- \" Quote
- \000 Octal value of character
-
- Location Counter Symbol. The current value of the location
- counter (PC) can be used in expressions by placing a '$' in the
- desired place. The Location Counter Symbol is allowable anywhere a
- numeric constant is. (Note that if the '$' is followed by a decimal
- digit then it is taken to be the hexadecimal radix indicator
- instead of the Location Counter symbol, as mentioned above). The
- '*' may also be used to represent the location counter, but is less
- preferred because of its ambiguity with the multiplicative operator.
-
- Operators. Expressions can optionally contain operators to perform
- some alterations or calculations on particular values. The
- operators are summarized as follows:
-
- TASM - Table Driven Assembler Version 2.8 Page 15
-
- Operator Type Description
- __________________________________________
- + Additive addition
- - subtraction
-
- * Multiplicative multiplication
- / division
- % modulo
- << logical shift left
- >> logical shift right
-
- ~ Unary bit inversion (one's complement)
- - unary negation
-
- = Relational equal
- == equal
- != not equal
- < less than
- > greater than
- <= less than or equal
- >= greater than or equal
-
- & Binary binary 'and'
- | binary 'or'
- ^ binary 'exclusive or'
-
- The syntax is much the same as in 'C' with the following notes:
-
- 1. No operator precedence is in effect. Evaluation is from left to
- right unless grouped by parenthesis (see example below).
-
- 2. All evaluations are done with 32 bit signed precision.
-
- 3. Both '=' and '==' are allowable equality checkers. This is
- allowed since the syntax does not provide assignment capability (as
- '=' would normally imply).
-
- The relational operators return a value of 1 if the relation is true
- and 0 if it is false. Thirtytwo bit signed arithmetic is used.
-
- It is always a good idea to explicitly indicate the desired order of
- evaluation with parenthesis, especially to maintain portability
- since TASM does not evaluate expressions in the same manner as many
- other assemblers. To understand how it does arrive at the values
- for expressions, consider the following example:
-
- 1 + 2*3 + 4
-
- TASM would evaluate this as:
-
- (((1 + 2) * 3) + 4) = 13
-
- Typical rules of precedence would cause the (2*3) to be evaluated
- first, such as:
-
- 1 + (2*3) + 4 = 11
- TASM - Table Driven Assembler Version 2.8 Page 16
-
- To make sure you get the desired order of evaluation, use
- parenthesis liberally.
-
- Note that TASM versions earlier than 2.7.8 employed a somewhat
- different method of evaluating expressions (also without precedence)
- that essentially resulted in a right to left evaluation.
-
- Here are some examples of valid expressions:
-
- (0f800H + tab)
- (label_2 >> 8)
- (label_3 << 8) & $f000
- $ + 4
- 010010000100100b + 'a'
- (base + ((label_4 >> 5) & (mask << 2))
- TASM - Table Driven Assembler Version 2.8 Page 17
-
- ASSEMBLER DIRECTIVES
-
- Most of the assembler directives have a format similar to the
- machine instruction format. However, instead of specifying
- operations for the processor to carry out, the directives cause the
- assembler to perform some function related to the assembly process.
- TASM has two types of assembler directives - those that mimic the
- 'C' preprocessor functions, and those that resemble the more
- traditional assembler directive functions. Each of these will be
- discussed.
-
- The 'C' preprocessor style directives are invoked with a '#' as the
- first character of the line followed by the appropriate directive
- (just as in 'C'). Thus, these directives cannot have a label
- preceding them (on the same line). Note that in the examples
- directives are shown in upper case, however, either upper or lower
- case is acceptable.
-
- ADDINSTR. This directive can be used to define additional
- instructions for TASM to use in this assembly. The format is:
-
- [<label>] .ADDINSTR inst args opcode nbytes modop class shift binor
-
- The fields are separated by white space just as they would appear in
- an instruction definition file. See the TASMTABS.DOC file on the
- TASM distribution disk for more detail.
-
- AVSYM. See SYM/AVSYM.
-
- BLOCK. This directive causes the Instruction Pointer to advance the
- specified number of bytes without assigning values to the skipped
- over locations. The format is:
-
- [label] .BLOCK expr
-
- Some valid examples are:
-
- word1 .BLOCK 2
- byte1 .block 1
- buffer .block 80
-
- BSEG/CSEG/DSEG/NSEG/XSEG. These directives can be invoked to
- indicate the appropriate address space for symbols and labels
- defined in the subsequent code. The invocation of these directives
- in no way affects the code generated, only provides more information
- in the symbol table file if the AVSYM directive is employed.
- Segment control directives such as these are generally supported by
- assemblers that generate relocatable object code. TASM does not
- generate relocatable object code and does not support a link phase,
- so these directives have no direct effect on the resulting object
- code. The segments are defined as follows:
-
- TASM - Table Driven Assembler Version 2.8 Page 18
-
- Directive Segment Description
- _________________________________________________________
- BSEG Bit address
- CSEG Code address
- DSEG Data address (internal RAM)
- NSEG Number or constant (EQU)
- XSEG External data address (external RAM)
-
-
- BYTE. This directive allows a value assignment to the byte pointed
- to by the current Instruction Pointer. The format is:
-
- [label] .BYTE expr [, expr ...]
-
- Only the lower eight bits of expr are used. Multiple bytes may be
- assigned by separating them with commas or (for printable strings)
- enclosed in double quotes. Here are some examples:
-
-
- label1 .BYTE 10010110B
- .byte 'a'
- .byte 0
- .byte 100010110b,'a',0
- .byte "Hello", 10, 13, "World"
-
-
- CODES/NOCODES. These directives can be used to alternately turn on
- or off the generation of formatted listing output with line numbers,
- opcodes, data, etc. With NOCODES in effect, the source lines are
- sent to the listing file untouched. This is useful around blocks of
- comments that need a full 80 columns of width for clarity.
-
- DB. This is alternate form of the BYTE directive.
-
- DW. This is alternate form of the WORD directive.
-
- DEFINE. The DEFINE directive is one of the most powerful of the
- directives and allows string substitution with optional arguments
- (macros). The format is as follows:
-
- #DEFINE <macro_label>[(<arg_list>)] [<macro_def>]
-
- <macro_label> := character string to be expanded when found in
- the source file.
-
- <arg_list> := optional argument list for variable
- substitution in macro expansion.
-
- <macro_def> := character string to replace the occurrences
- of macro_label in the source file.
-
- The simplest form of the DEFINE directive might look like this:
-
- #DEFINE MLABEL
-
- Notice that no substitutionary string is specified. The purpose of
- TASM - Table Driven Assembler Version 2.8 Page 19
-
- a statement like this would typically be to define a label for the
- purpose of controlling some subsequent conditional assembly (IFDEF
- or IFNDEF).
-
- A more complicated example, performing simple substitution, might
- look like this:
-
- #DEFINE VAR1_LO (VAR1 & 255)
-
- This statement would cause all occurrences of the string 'VAR1_LO'
- in the source to be substituted with '(VAR1 & 255)'.
-
- As a more complicated example, using the argument expansion
- capability, consider this:
-
- #DEFINE ADD(xx,yy) clc\ lda xx\ adc yy\ sta xx
-
- If the source file then contained a line like this:
-
- ADD(VARX,VARY)
-
- It would be expanded to:
-
- clc\ lda VARX\ adc VARY\ sta VARX
-
- The above example shows the use of the backslash ('\') character as
- a multiple instruction statement delimiter. This approach allows
- the definition of fairly powerful, multiple statement macros. The
- example shown generates 6502 instructions to add one memory location
- to another.
-
- Some rules associated with the argument list:
-
- 1. Use a maximum of 10 arguments.
-
- 2. Each argument should be a maximum of 15 characters.
-
- Note that macros can be defined on the TASM command line, also, with
- the '-d' option flag.
-
- DEFCONT. This directive can be used to add to the last macro started
- with a DEFINE directive. This provides a convenient way to define
- long macros without running off the edge of the page. The ADD macro
- shown above could be defined as follows:
-
- #DEFINE ADD(xx,yy) clc
- #DEFCONT \ lda xx
- #DEFCONT \ adc yy
- #DEFCONT \ sta xx
-
- EJECT. This directive can be used to force a top of form and the
- generation of a page header on the list file. It has no effect if
- the paging mode is off (see PAGE/NOPAGE). The format is:
-
- .EJECT
-
- TASM - Table Driven Assembler Version 2.8 Page 20
-
- ELSE. This directive can optionally be used with IFDEF, IFNDEF and
- IF to delineate an alternate block of code to be assembled if the
- block immediately following the IFDEF, IFNDEF or IF is not
- assembled.
-
- Here are some examples of the use of IFDEF, IFNDEF, IF, ELSE, and
- ENDIF:
-
- #IFDEF label1
- lda byte1
- sta byte2
- #ENDIF
-
- #ifdef label1
- lda byte1
- #else
- lda byte2
- #endif
-
- #ifndef label1
- lda byte2
- #else
- lda byte1
- #endif
-
- #if ($ >= 1000h)
- ; generate an invalid statement to cause an error
- ; when we go over the 4K boundary.
- !!! PROM bounds exceeded.
- #endif
-
- END. This directive should follow all code/data generating
- statements in the source file. It forces the last record to be
- written to the object file. The format is:
-
- [<label>] .END
-
- ENDIF. This directive must always follow an IFDEF, IFNDEF, or IF
- directive and signifies the end of the conditional block.
-
- EQU. This directive can be used to assign values to labels. The
- labels can then be used in expressions in place of the literal
- constant. The format is:
-
- <label> .EQU <expr>
-
- Here is an example:
-
- MASK .EQU 0F0H
- ;
- lda IN_BYTE
- and MASK
- sta OUT_BYTE
-
- An alternate form of 'EQU' is '='. The previous example is
- equivalent to:
- TASM - Table Driven Assembler Version 2.8 Page 21
-
- MASK = 0F0H
-
- or
-
- MASK =0FOH
- MASK =$FO
-
- White space must exist after the label, but none is required after
- the '='.
-
- EXPORT. This directive can be used to define labels (symbols) that
- are to be written to the export symbol file. The symbols are
- written as equates (using the .EQU directive) so that the resulting
- file can be included in a subsequent assembly. This feature can
- help overcome some of the deficiencies of TASM due to its lack of a
- relocating linker. The format is:
-
- [<label>] .EXPORT <label >
-
- The following example illustrates the use of the EXPORT directive
- and the format of the resulting export file:
-
- Source file:
-
- .EXPORT read_byte
- .EXPORT write_byte
- .EXPORT open_file
-
- Resulting export file:
-
- read_byte .EQU $1243
- write_byte .EQU $12AF
- open_file .EQU $1301
-
-
- IFDEF. This directive can be used to optionally assemble a block of
- code. It has the following form:
-
- #IFDEF <macro_label>
-
- When invoked, the list of macro labels (established via DEFINE
- directives) is searched. If the label is found, the following lines
- of code are assembled. If not found, the input file is skipped
- until an ENDIF or ELSE directive is found.
-
- Lines that are skipped over still appear in the listing file, but a
- '~' will appear immediately after the current PC and no object code
- will be generated (this is applicable to IFDEF, IFNDEF, and IF).
-
- IFNDEF. This directive is the opposite of the IFDEF directive. The
- block of code following is assembled only if the specified
- macro_label is undefined. It has the following form:
-
- #IFNDEF <macro_label>
-
- When invoked, the list of macro labels (established via DEFINE
- TASM - Table Driven Assembler Version 2.8 Page 22
-
- directives) is searched. If the label is not found, the following
- lines of code are assembled. If it is found, the input file is
- skipped until an ENDIF or ELSE directive is found.
-
- IF. This directive can be used to optionally assemble a block of
- code dependent on the value of a given expression. The format is as
- follows:
-
- #IF <expr>
-
- If the expression <expr> evaluates to non-zero, the following block
- of code is assembled (until an ENDIF or ELSE is encountered).
-
- INCLUDE. The INCLUDE directive reads in and assembles the indicated
- source file. INCLUDEs can be nested up to six levels. This allows
- a convenient means to keep common definitions, declarations, or
- subroutines in files to be included as needed. The format is as
- follows:
-
- #INCLUDE "<filename>"
-
- The <filename> must be enclosed in double quotes. Here are some
- examples:
-
- #INCLUDE "macros.h"
- #include "equates"
- #include "subs.asm"
-
- LIST/NOLIST. These directives can be used to alternately turn the
- output to the list file on (LIST) or off (NOLIST). The format is:
-
- .LIST
- .NOLIST
-
- LSFIRST/MSFIRST. These directives determine the byte order rule to
- be employed for the WORD directive. The default (whether correct or
- not) for all TASM versions is the least significant byte first
- (LSFIRST). The following illustrates its effect:
-
- 0000 34 12 .word $1234
- 0002 .msfirst
- 0002 12 34 .word $1234
- 0004 .lsfirst
- 0004 34 12 .word $1234
-
-
- ORG. This directive provides the means to set the Instruction
- Pointer (a.k.a. Program Counter) to the desired value. The format
- is:
-
- [<label>] .ORG <expr>
-
- The <label> is optional. The Instruction pointer is assigned the
- value of the expression, <expr>. For example, to generate code
- starting at address 1000H, the following could be done:
-
- TASM - Table Driven Assembler Version 2.8 Page 23
-
- start .ORG 1000H
-
- The expression (<expr>) may contain references to the current
- Instruction Pointer, thus allowing various manipulations to be done.
- For example, to align the Instruction Pointer on the next 256 byte
- boundary, the following could be done:
-
- .ORG (($ + 0FFH) & 0FF00H)
-
- ORG can also be used to reserve space without assigning values:
-
- .ORG $+8
-
- An alternate form of ORG is '*=' or '$='. Thus the following two
- examples are exactly equivalent to the previous example:
-
- *=*+8
- $=$+8
-
- PAGE/NOPAGE. These directives can be used to alternately turn the
- paging mode on (PAGE) or off (NOPAGE). If paging is in effect, then
- every sixty lines of output will be followed by a Top of Form
- character and a two line header containing page number, filename,
- and the title. The format is:
-
- .PAGE
- .NOPAGE
-
- The number of lines per page can be set with the '-p' command line
- option.
-
-
- SET. This directive allows the value of an existing label to be
- changed. The format is:
-
- <label> .SET <expr>
-
- The use of the SET directive should be avoided since changing the
- value of a label can sometimes cause phase errors between pass 1 and
- pass 2 of the assembly.
-
- SYM/AVSYM. These directives can be used to cause a symbol table file
- to be generated. The format is:
-
- .SYM ["<symbol_filename>"]
- .AVSYM ["<symbol_filename>"]
-
- For example:
-
- .SYM "symbol.map"
- .SYM
- .AVSYM "prog.sym"
- .AVSYM
-
- The two directives are similar, but result in a different format of
- the symbol table file. The format of the SYM file is one line per
- TASM - Table Driven Assembler Version 2.8 Page 24
-
- symbol, each symbol starts in the first column and is followed by
- white space and then four hexadecimal digits representing the value
- of the symbol. The following illustrates the format:
-
- label1 FFFE
- label2 FFFF
- label3 1000
-
- The AVSYM is provided to generate symbol tables compatible with the
- Avocet 8051 simulator. The format is similar, but each line is
- prefixed by an 'AS' and each symbol value is prefixed by a segment
- indicator:
-
- AS start C:1000
- AS read_byte C:1243
- AS write_byte C:1280
- AS low_nib_mask N:000F
- AS buffer X:0080
-
- The segment prefixes are determined by the most recent segment
- directive invoked (see BSEG/CSEG/DSEG/NSEG/XSEG directives).
-
- TEXT. This directive allows an ASCII string to be used to assign
- values to a sequence of locations starting at the current
- Instruction Pointer. The format is:
-
- [<label>] .TEXT "<string>"
-
- The ASCII value of each character in string is taken and assigned to
- the next sequential location. Some escape sequences are supported
- as follows:
-
- Escape
- Sequence Description
- ___________________________________________________
- \n Line Feed
- \r Carriage return
- \b Backspace
- \t Tab
- \f Formfeed
- \\ Backslash
- \" Quote
- \000 Octal value of character
-
- Here are some examples:
-
- message1 .TEXT "Disk I/O error"
- message2 .text "Enter file name "
- .text "abcdefg\n\r"
- .text "I said \"NO\""
-
-
- TITLE. This directive allows the user to define a title string that
- appears at the top of each page of the list file (assuming the PAGE
- mode is on). The format is:
-
- TASM - Table Driven Assembler Version 2.8 Page 25
-
- .TITLE "<string>"
-
- The string should not exceed 80 characters. Here are some examples:
-
- .TITLE "Controller version 1.1"
- .title "This is the title of the assembly"
- .title ""
-
- WORD. This directive allows a value assignment to the next two bytes
- pointed to by the current Instruction Pointer. The format is:
-
- [<label>] .WORD <expr> [, <expr> ...]
-
- The least significant byte of <expr> is put at the current
- Instruction Pointer with the most significant byte at the next
- sequential location (unless the MSFIRST directive has been invoked).
- Here are some examples:
-
- data_table .WORD (data_table + 1)
- .word $1234
- .Word (('x' - 'a') << 2)
- .Word 12, 55, 32
-
- TASM - Table Driven Assembler Version 2.8 Page 26
-
- OBJECT FILE FORMATS
-
- TASM supports four object file formats:
-
- 1. Intel Hex (default).
- 2. MOS Technology Hex.
- 3. Motorola Hex.
- 4. Binary
-
- Each are described below:
-
- Intel Hex Object Format. This is the default format. This format is
- line oriented and uses only printable ASCII characters except for
- the carriage return/line feed at the end of each line. Each line in
- the file assumes the following format:
-
- :NNAAAARRHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCTT
-
- Where:
-
- All fields marked 'hex' consist of two or four ASCII hexadecimal
- digits (0-9, A-F). A maximum of 24 data bytes will be represented
- on each line (override the 24 byte default with the '-o' command
- line option).
-
- : = Record Start Character
- NN = Byte Count (hex)
- AAAA = Address of first byte (hex)
- RR = Record Type (hex, 00 except for last record which is 01)
- HH = Data Bytes (hex)
- CC = Check Sum (hex)
- TT = Line Terminator (carriage return, line feed)
-
- The last line of the file will be a record conforming to the above
- format with a byte count of zero:
-
- :00000001FF
-
- The checksum is defined as:
-
- sum = byte_cnt+addr_hi+addr_lo+rec_type + (sum of all data bytes)
- checksum = ((-sum) & ffh)
- TASM - Table Driven Assembler Version 2.8 Page 27
-
- MOS Technology Hex Object Format. This format is line oriented and
- uses only printable ASCII characters except for the carriage
- return/line feed at the end of each line. Each line in the file
- assumes the following format:
-
- ;NNAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCCCTT
-
- All fields marked 'hex' consist of two or four ASCII hexadecimal
- digits (0-9, A-F). A maximum of 24 data bytes will be represented
- on each line (override the 24 byte default with the '-o' command
- line option).
-
- ; = Record Start Character
- NN = Byte Count (hex)
- AAAA = Address of first byte (hex)
- HH = Data Bytes (hex)
- CCCC = Check Sum (hex)
- TT = Line Terminator (carriage return, line feed)
-
- The last line of the file will be a record with a byte count of zero
- (';00').
-
- The checksum is defined as:
-
- sum = byte_cnt+addr_hi+addr_lo+rec_type + (sum of all data bytes)
- checksum = (sum & ffffh)
-
-
- Motorola Hex Object Format. This format is line oriented and uses
- only printable ASCII characters except for the carriage return/line
- feed at the end of each line. Each line in the file assumes the
- following format:
-
- S1NNAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCCCCTT
-
- All fields marked 'hex' consist of two or four ASCII hexadecimal
- digits (0-9, A-F). A maximum of 24 data bytes will be represented
- on each line (override the 24 byte default with the '-o' command
- line option).
-
- S1 = Record Start Prefix
- NN = Byte Count (hex) (data byte count + 3)
- AAAA = Address of first byte (hex)
- HH = Data Bytes (hex)
- CC = Check Sum (hex)
- TT = Line Terminator (carriage return, line feed)
-
- The last line of the file will be a record with a byte count of zero
- ('S903AAAACCTT'). The checksum is defined as:
-
- sum = byte_cnt+addr_hi+addr_lo+rec_type + (sum of all data bytes)
- checksum = (~sum & ffh)
-
-
- Binary Object Format. This file format has only a binary
- representation of each data byte with no address, checksum or format
- TASM - Table Driven Assembler Version 2.8 Page 28
-
- description, whatsoever. It is often a convenient format to use to
- pass the data to other programs on your PC (like a PROM programmer
- package) but because of the non-printability and lack of address
- information, it is not often used to transmit the code to other
- systems.
-
- Note that when this object format is selected (-b option), the -c
- option is forced. This is done so that no ambiguity arises as a
- result of the lack of address information in the file. Without the
- -c option, discontinuous blocks of object code would appear
- contiguous.
-
- TASM - Table Driven Assembler Version 2.8 Page 29
-
- LISTING FILE FORMAT
-
- Each line of source code generates one (or more) lines of output in
- the listing file. The fields of the output line are as follows:
-
- 1. Current source file line number (4 decimal digits).
-
- 2. An optional '+' appears if this is an 'INCLUDE' file. (One
- '+' for each level of INCLUDE invoked).
-
- 3. Current Instruction Pointer (4 hex digits). An optional '~'
- follows the Instruction Pointer if the line of source code is not
- being assembled because of an IFDEF, IFNDEF, or IF directive.
-
- 4. Resulting code/data generated from this source line (two hex
- digits per byte, each byte separated by a space, up to six bytes per
- line).
-
- 5. The source line exactly as it appears in the source file.
-
- If paging is enabled (by either the '-p' option flag or the .PAGE
- directive) some additional fields will be inserted into the listing
- file every 60 lines. These fields are:
-
- 1. Top of Form (form feed).
- 2. Assembler identifier (e.g. "TASM 6502 Assembler").
- 3. Initial source file name.
- 4. Page number.
- 5. Title.
- TASM - Table Driven Assembler Version 2.8 Page 30
-
- PROM PROGRAMMING
-
- A wide variety of PROM programming equipment is available that can
- use object code in one or more of the formats TASM supports. Here
- are some notes concerning the generation of code to be put in PROMs:
-
- 1. PRESET MEMORY. It is often desirable to have all bytes in the
- PROM programmed even if not explicitly assigned a value in the
- source code (e.g. the bytes are skipped over with a .ORG
- statement). This can be accomplished by using the -c (contiguous
- block) and the -f (fill) command line option flags. The -c will
- ensure that every byte from the lowest byte assigned a value to the
- the highest byte assigned a value will be in the object file with no
- gaps. The -f flag will assign the specified value to all bytes
- before the assembly begins so that when the object file is written,
- all bytes not assigned a value in the source code will have a known
- value. As an example, the following command line will generate
- object code in the default Intel Hex format with all bytes not
- assigned a value in the source set to EA (hex, 6502 NOP):
-
- tasm -65 -c -fEA test.asm
-
- 2. CONTIGUOUS BLOCKS. To ensure that TASM generates object code to
- cover the full address range of the target PROM, put a .ORG
- statement at the end of the source file set to the last address
- desired. For example, to generate code to be put in a 2716 EPROM (2
- Kbytes) from hex address $1000 to $17ff, do something like this in
- the source file:
-
- ;start of the file
- .ORG $1000
- ;rest of the source code follows
-
- <source code>
-
- ;end of the source code
- .ORG $17ff
- .BYTE 0
- .END
-
- Now, to invoke TASM to generate the code in the binary format with
- all unassigned bytes set to 00 (6502 BRK), do the following:
-
- tasm -65 -b -f00 test.asm
-
- Note that -b forces the -c option.
-
- TASM - Table Driven Assembler Version 2.8 Page 31
-
- ERROR MESSAGES
-
-
- ERROR MESSAGE DESCRIPTION
- _______________________________________________________________________
- Unrecognized directive A statement starting with a
- '.' or '#' has a mnemonic
- that is not defined as a
- directive.
-
- Unrecognized instruction A statement has an opcode
- mnemonic that is not defined.
-
- Unrecognized argument A statement has an operand
- format that is not defined.
-
- Label value misaligned The value of a label appears
- to have a different value on
- the second pass then it was
- computed to have on the first
- pass. This is generally due
- to Zero Page Addressing mode
- problems with the 6502
- version of TASM. Labels that
- are used in operands for
- statements that could utilize
- Zero Page addressing mode
- should always be defined
- before used as an operand.
-
- Label table overflow To many labels have been
- encountered.
-
- No END directive before EOF The source file did not have
- an END directive in it. This
- is not fatal, but may cause
- the last object file record
- to be lost.
-
- No files specified TASM was invoked with no
- source file specified.
-
- Unknown option flag TASM was invoked with an
- undefined option flag on the
- command line.
-
- Source file open error TASM was not able to open the
- specified source file.
-
- List file open error TASM was not able to open the
- specified list file.
-
- Object file open error TASM was not able to open the
- specified object file.
-
- Unknown token Unexpected characters were
- TASM - Table Driven Assembler Version 2.8 Page 32
-
- encountered while parsing an
- expression.
-
- maximum number of macros exceeded To many macros (DEFINEs) have
- been encountered.
-
- macro buffer overflow The buffer from which space
- is allocated for macro
- definitions is exhausted.
-
- range of relative branch exceeded A branch instruction exceeds
- the maximum range (6502
- Version).
-
- macro expansion too long. The expansion of a macro
- resulted in a line that
- exceeded the maximum length.
-
- Heap overflow on label definition. TASM was unable to allocate
- memory to store the label.
-
- No such label yet defined. A SET directive was
- encountered for a label not
- yet defined. The value of
- labels that are modified by
- the SET directive must
- already exist.
-
- No indirection for this instruction. A parenthesis was found
- around the operand
- expression. This may indicate
- an attempt to use indirection
- where it is inappropriate.
-
- Non-unary operator at start of expression A non-unary operator at the
- beginning of an expression is
- invalid.
-
- Binary operator where value expected. Two binary operators in a row
- indicate a missing value.
-
- Invalid token where value expected. Two binary operators in a row
- are not allowed.
-
- Duplicate label. Duplicate label checks are
- optionally enabled by the '-
- a' option.
-
- Label must pre-exist for SET. The SET directive can only be
- applied to an existing label.
-
- Unused data in MS byte of argument. An instruction or directive
- used the least significant
- byte of an argurment and left
- the most significant byte
- unused, but it was non-zero.
- TASM - Table Driven Assembler Version 2.8 Page 33
-
- File name too short A file name on the command
- line is fewer than 3
- characters. This is done to
- prevent a garbled option flag
- from being taken as a source
- file, which in turn can
- result in the source file
- taken as an object file
- (which are truncated at
- start-up time).
-
- Unkown option Flag. Invalid option flag has been
- specified on the command
- line. invoke TASM with
- nothing on the command line
- to see a list of valid
- options.
-
- TASM - Table Driven Assembler Version 2.8 Page 34
-
- BUGS AND LIMITATIONS
-
- Limitations and Specifications
- _____________________________________________________________________
- Maximum number of labels 2000
- Maximum length of labels 13 characters
- Maximum address space 64 Kbytes (65536 bytes)
- Maximum number of nested INCLUDES 4
- Maximum length of TITLE string 79 characters
- Maximum source line length 255 characters
- Maximum length after macro expansion 255 characters
- Maximum length of expressions 255 characters
- Maximum length of pathnames 79 characters
- Maximum length of command line 127 characters
-
- Maximum number of instructions (per table) 600
- Maximum number of macros 1000
- Maximum number of macro arguments 10
- Maximum length of macro argument 16 characters
- Heap size (for labels, macros, & buffers) 20000 bytes
- Memory requirements 160K
-
- Bugs
-
- 1. The 8048 version of TASM does not check for use of memory beyond
- any reasonable bounds (e.g. an 8048 has a maximum address space of
- 4 Kbytes but TASM will let you pretend that you have 64 Kbytes).
-
- 2. Expression evaluation has no operator precedence in effect which
- can make for unexpected results if not explicitly grouped with
- parenthesis.
-
- 3. First page of listing file will not show a user defined title
- (defined via TITLE directive).
-
- 4. TASM sometimes does not generate error messages for improperly
- formed expressions.
-
- 5. TASM does not generate an error message when a EQU directive has
- an undefined label on the right hand side.
-
- TASM - Table Driven Assembler Version 2.8 Page 35
-
- APPENDIX A - ORDERING INFORMATION
-
- TASM is distributed as shareware. The shareware portion of the
- product may be freely copied and used for evaluation purposes. Use
- of TASM beyond an evaluation period of 90 days requires
- registration. Registered users receive the following benefits:
-
- 1. The recent version of TASM.
- 2. TASM source code (in C).
- 3. Bound TASM manual.
- 4. Telephone support.
- 5. Knowledge that they are supporting the development of useful
- but inexpensive software.
-
- DESCRIPTION UNIT PRICE PRICE
- ____________________________________________________________________
-
- TASM Registration (TASM disk, manual, & source) $40.00 _______
-
- TASM Site Registration (for sites with multiple 90.00 _______
- users. Includes same materials as above.)
-
- TASM User's Manual (included above) 10.00 _______
-
- TASM update for registered users 10.00 _______
- (latest disk (with source), and manual)
-
- Subtotal _______
-
- Tax (Washington state residents add 8.1%) _______
-
- Billing fee (for orders not accompanied by check) 10.00 _______
-
- Foreign postage (outside North America) add $10.00 _______
- (Foreign orders must be in US funds drawn on a US bank)
-
- TOTAL (post paid) _______
-
-
- Which processors are of primary interest to you? __________________
- (This is for information only. You will receive all current tables).
-
- Shipping Address:
-
- ______________________________________________
-
- ______________________________________________
-
- ______________________________________________
-
- Send check or money order to:
-
- Speech Technology Incorporated
- Software Division
- 837 Front Street South
- Issaquah, WA 98027 USA
-
-