home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
utils
/
asmutl
/
crowecpm.lbr
/
CROWECPM.DZC
/
CROWECPM.DOC
Wrap
Text File
|
1986-12-07
|
7KB
|
144 lines
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 receive 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.
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.
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