home *** CD-ROM | disk | FTP | other *** search
- CROWECPM-----A Z80 ASSEMBLER
-
-
- The assembler provides all the features of Zilog's assembler except
- for macros, conditional assembly and lower case. It was originally
- written to be used with cassette or paper tape, with the desired pass
- number entered from the console. The assembler is now set up to recieve
- the pass numbers from a buffer in the program itself. The output of the
- assembler is sent to files except the error listing which is sent to the
- console. For each pass, the source is re-read and the appropriate output
- generated. Pass 1 builds the symbol table and is required. Pass 2 outputs
- the assembly listing, pass 3 writes Intel format hex object and pass 4
- gives an assembly listing of those lines containing errors on the console.
- The assembler has been modified to perform pass 4 before writing the files
- (passes 2 and 3) so that errors can be seen and corrected before the time
- consuming output is done.
-
- The linkage routines are written so that the assembler can be run as
- a standard CP/M .COM file with the following command format:
-
- CROWECPM FILENAME.YY
-
- The characters in the normal file extension position are Y/N selects
- (default is Y), the first for listing file and the second for the hex
- object file. The source must have a file extension of .Z80 while the
- listing is created with an extension of .PRN and the object with an
- extension of .HEX. Only minimal error checking and reporting is done
- when creating files. If no source file with the correct name is found
- a message is displayed. If any other disk error on a BDOS call occurs,
- that is reported. In either case, the routine waits for a keystroke
- before exiting to CP/M.
-
- SYNTAX--------------------------------------------------------------------
-
- The CROWECPM assembler requires that the source file be written using
- standard Zilog mnemonics. In addition it requires that tabs be used as
- field delimiters. Labels may have colons following but this is not required.
- Comments can be entered anywhere (in any field) following a semicolon as
- is usually the case. Hexidecimal numbers that begin with a letter must be
- preceded by a 0 and conclude with an H with no imbedded spaces. Since the
- source of the assembler is included, and it is syntactically correct, it
- can be used as a model of assembly language programming.
-
- FUNCTIONAL OPERATORS-------------------------------------------------------
-
- + MONADIC PLUS
- - MONADIC MINUS
- .NOT. or \ LOGICAL NOT
- .HIGH. VALUE OF MOST SIGNIFICANT BIT
- .LOW. VALUE OF LEAST SIGNIFICNANT BIT
- .RES. RESULT
- ** EXPONENTIATION
- * MULTIPLICATION
- / DIVISION
- .MOD. MODULO
- .SHR. LOGIGAL SHIFT RIGHT
- .SHL. LOGICAL SHIFT LEFT
- + ADDITION
- - SUBTRACTION
- .AND. or & LOGICAL AND
- .OR. or ^ LOGICAL OR
- .XOR. LOGICAL EXCLUSIVE OR
- .EQ. or = EQUALS
- .GT. or > GREATER THAN
- .LT. or < LESS THAN
- .UGT. UNSIGNED GREATER THAN
- .ULT. UNSIGNED LESS THAN
-
- PSEUDO-OPS-----------------------------------------------------------------
-
- The following Pseudo-ops are supported by CROWECPM:
-
- ORG ---Sets the address reference
- EQU ---For assigning a value to a label (can appear only once per label)
- DEFL --Also assigns a value to a label but can be used to assign different
- values to a label at different places in the program
- END ---Must conclude the program. Can be followed with the starting address
- of the target program.
- DEFB --Defines the content of one byte of memory at the address the OP
- appears in the program.
- DEFB 'x'--Same as above but defines the byte to be the ascii code for the
- character between the quotes. (x in the example)
- DEFW --Defines the contents of two bytes of memory
- DEFS --Reserves bytes in memory beginning with the address the OP appears
- DEFM 'x'--Defines the contents memory to be the ascii code of the characters
- appearing between the quotes----MUST NOT EXCEED 32 CHARACTERS-----
- TITLE 's'-Defines the program title. It is printed in the listing headers.
- __________________________________________________________________________
- WARNING___________________________________________________________________
-
- An additional note about the assembler the way it stands: there
- is a limit of 32 characters for a quoted string as operand of a DEFM
- statement. If this limit is exceeded NO error message is generated, the
- string is truncated. If you're not careful, the terminating '$' for
- a CP/M output string could be lost and the results would be unpredictable.
- __________________________________________________________________________
- __________________________________________________________________________
-
- LISTING THE .PRN FILE-----------------------------------------------------
-
- The assembler has a strange way of creating the .PRN file which will
- cause problems on many printers. A program is included with the disk
- to solve this bug and must be used to send your listing file to the
- printer. See PRINTPRN.DOC for details.
- __________________________________________________________________________
-
- The CROWCPM.Z80 file has the linkages incorporated into it, near the
- end. As it now stands, the symbol table is limited only by the amount of
- available memory since the assembler reads the start address of BDOS from
- locations 6&7 and sets that as the top of available symbol space.
-
- There has been one minor improvement to the assembler: you can now
- specify that the .LST or .HEX files should be sent to drive B rather than
- the current default drive by putting a B in the proper position in the
- normal filename extension. E.g. CROWECPM CROWECPM.NB would assemble the
- file CROWECPM.Z80, skip the .LST file and send the .HEX file to drive B.
- The source file must still reside on the same drive as the assembler.
-
- The source is currently set up for the CROWECPM assembler. To assemble it
- with M80 you will need to add ASEG and .Z80 commands to it.
-
- ****************************************************************************
-
- Bug fixes from Thomas Hameenaho
-
- The first bug resulted when the single quote character in EX AF,AF'
- caused the assembler to expect the following characters
- to be a text string. Now I test if the character preceding the ' is
- a 'F', if so, the 'QUOTE' flag should not be set.
-
- The other bug (LBFSZ-1) resulted because the minus character (instead
- of the "_" character) was declared legal in a label.
- Probably a typing error when entering the source code.
-
- So now CROWCPM.COM will assemble CROWECPM.Z80.
-
- Thomas Hameenaho
- Djaknegatan 7
- S-754 23 Uppsala
- Sweden
- *****************************************************************************
-
- Enhancements from Micro Cornucopia
-
- The assembler we received was machine dependent. Rather than just changing
- it so that it would run on the Kaypro we replaced the machine dependent
- code with standard CP/M function calls. As a result the assembler should
- now run on any standard CP/M machine. We have tested it with the Big Board
- running double density and a Kaypro with a Winchester sub-system. If you
- have any problems with the assembler or improve it in any way please contact
- us.
-
- Micro Cornucopia
- PO BOX 223
- Bend OR 97709
- ******************************************************************************