home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BDSC
/
BDSC-1
/
CASM.DQC
/
CASM.DOC
Wrap
Text File
|
2000-06-30
|
9KB
|
195 lines
The CASM.C Assembly-language-to-CRL-Format Preprocessor
For BDS C v1.46
March 3, 1982
Leor Zolman
BD Software
33 Lothrop st.
Brighton, Massachussetts 02135
The files making up the CASM package are as follows:
CASM.C Source file for CASM program
CASM.SUB Submit file for performing entire conversion of CSM file to CRL
CASM.DOC This file
USERCODE.C, Library for taking user area prefixes on filenames
USERCODE.CRL for input files (optional).
Also needed:
ASM.COM
DDT.COM (or SID.COM)
Description:
------------
The only means previously provided to BDS C users for creating relocatable
object modules (CRL files) from assembly language programs was a painfully
obscure macro package (CMAC.LIB) that required Digital Research's macro
assembler (MAC.COM) in order to work. This was especially bad because MAC, if
not already owned, cost almost as much as BDS C to purchase. This document
describes the program "CASM", which I am placing in the public domain. CASM is
a preprocessor that takes, as input, an assembly language source file of type
".CSM" (mnemonic for C aSseMbly language) in a format much closer to "vanilla"
assembly language than the bizarre craziness of CMAC.LIB, and writes out an
".ASM" file which may then be assembled by the standard, FREE, CP/M assembler
(ASM.COM). CASM automatically recognizes which assembly language instructions
require relocation parameters and inserts the appropriate pseudo-operations and
extra opcodes into the output file to cause that file to properly assemble
directly into CRL format. In addition, some rudimentary logic checks are
performed; doubly-defined and/or undefined labels are detected and reported,
with the feature of allowing similarly-named labels to exist in different
functions.
The pseudo-operations that CASM recognizes as special control commands
within a .CSM file are as follows:
FUNCTION <name> There is no need to specify a directory of included
functions at the start of a .CSM file. Each function
must begin with "function" pseudo-op, where <name> is
the name that will be used for the function in the
.CRL file directory. No other information should
appear on this line.
EXTERNAL <list> If a function calls other C or assembly-coded
functions, an "external" pseudo-op naming these other
functions must follow immediately after the "function"
1
op. One or more names may appear in the list, and the
list may be spread over as many "external" lines as
necessary. Note that for the current version of BDS C,
only function names may appear in "external" lines;
data names (e.g. for external variables defined in C
programs) cannot be placed in "external" statements.
ENDFUNC
(or) ENDFUNCTION This op (both forms are equivalent) must appear after
the end of the code for a particular function. The
name of the function need not be given as an operand.
The three pseudo-ops just listed are the ONLY
pseudo-ops that need to appear among the assembly
language instructions of a ".CSM" file, and at no time
do the assembly instruction themselves need to be
altered for relocation, as was the case with CMAC.LIB.
INCLUDE <filename>
(or) INCLUDE "filename" This op causes the named file to be inserted at the
current line of the output file. If the filename is
enclosed in angle brackets (i.e., <filename>) then a
default user area and logical drive are assumed to
contain the named file (the specific defaults for your
system may be custimzed by changing the appropriate
defines in CASM.C). If the name is enclosed in
quotes, than the current drive and user area are
searched. Note that you'll usually want to include the
file BDS.LIB at the start of your .CSM file, so that
names of routines in the run-time package are
recognized by CASM and not interpreted as undefined
local forward references, which would cause CASM to
generate relocation parameters for those instructions
having run-time package routine names as operands.
Note that the pseudo-op MACLIB is equivalent to
INCLUDE and may be used instead.
Additional notes and bugs:
0. If a label appears on an instruction, it MUST begin in column one of the
line. If a label does not begin in column one, CASM will not recognize it as
a label and relocation will not be handled correctly.
1. Forward references to EQUated symbols in executable instructions are not
allowed, although forward references to relocatable symbols are OK. The
reason for this is that CASM is a one-pass preprocessor, and any time a
previously unknown symbol is encountered in an instruction, CASM assumes
that symbol is relocatable and generates a relocation parameter for the
instruction.
2. INCLUDE and MACLIB only work for one level of inclusion.
3. When a relocatable value needs to be specified in a "DW" op, then it must be
the ONLY value given in that particular DW statement, or else relocation
will not be properly handled.
4. Characters used in symbol names should be restricted to alphanumeric
characters; the dollar sign ($) is also allowed, but might lead to a
conflict with labels generated by CASM.
2
5. The .HEX file produced by ASM after assembling the output of CASM cannot be
converted into a binary file by using the LOAD.COM command; instead, DDT or
SID must be used to read the file into memory, and then the CP/M "SAVE"
command must be issued to save the file as a .CRL file. CASM inserts a line
into the ASM file ending in the character sequence "!.", specifically so
that the line will be flagged as an error. The user may then look at the
value printed out at the left margin to see exactly how many 256-byte blocks
need to be saved; this is the value to be used with the "SAVE" command.
The reason that "LOAD" cannot be used is that CASM puts out the code to
generate the CRL File directory at the END of the ASM file, using ORG to set
the location counter back to the base of the TPA, and the "LOAD" command
aborts with the cryptic message "INVERTED LOAD ADDRESS" when out-of-sequence
data like that is encountered. Rather than require CASM to write out the
directory into a new file and append the entire previous output onto the end
of the directory, I require the user to have to enter a SAVE command. What
the heck; you'd have to rename the file anyway if it were LOADed, right?
6. The CASM.SUB submit file may be used to perform the entire procedure of
converting a .CSM file to a .CRL file. For a file named "FOO.CSM", just say:
submit casm foo
and enter the "SAVE" command just the way says when all is done.
3