home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
pub
/
researchmachines
/
rmlgendoc.txt
< prev
next >
Wrap
Text File
|
2020-01-01
|
10KB
|
303 lines
File RMKGEN.DOC
---------------- Chris Kennington 9th July 1985
Generation of Research Machines Kermit
--------------------------------------
0. Modules Required and Status.
----------------------------
RM Kermit consists of two parts. The high-level routines, coded in
"C", are responsible for the whole program organization and behaviour.
Low-level routines, mostly coded in assembler, provide the interfaces for
driving the keyboard, screen and communications. A base-package for the
C code is also required.
The C-coded routines, which were written at RML, have the status
of "copyright - freely available", as requested by U. of Columbia. (They
do in fact contain a small amount of code originating from U of Columbia
C-Kermit.) The low-level interface routines, also written at RML, are
RML copyright and their source-text is not generally available. The
distribution files of RM Kermit therefore consist of the C-coded source
of the high-level routines plus object or REL files for the low-level ones.
The high-level files for either version are:-
RMKEXT.H RMKMAIN.C RMKDATA.C RMKDISK.C
RMKKEY.C RMKLINE.C RMKPARM.C RMKREC.C
RMKSEND.C RMKUTIL2.C RMKCSUPP.C
plus either RMK480Z.C or RMKNIMB.C
1. 480Z Interface Files.
---------------------
The files required to complete the 480Z version depend on whether
the communications are to be via the disk-unit (IDC) or direct from the
SIO4 port on the back of the 480Z (in which case network disks must be
used).
The relevant line-driver files for the IDC version are:
IDCEQUS1.REL IDCBASE.REL IDCDRIV.REL
The relevant line-driver files for the Network version are:
SIOBASE1.REL SIODRIV1.REL
In both cases the base-package and interface files must
also be included (see also section 3 below):
CS4COM.REL RMKERMIT.REL CBASE6.REL
2. Nimbus Interface Files.
-----------------------
Both Nimbus versions (for Aux and Piconet communications) use
the same basic code to drive the communications line. The destinction
between the two is in a short C-coded steering-file, whose name is
RMKSAUX.C
for the Aux (RS422) version, and
RMKSPIC.C
for the Piconet (RS232C) version.
The low-level driver code is then supplied by:
RMCOMMS.O & RMOUTC.O
When a version of Kermit is released for the Data Communications
Controller, this is expected to require a completely different version
of the communications drivers. Instructions for the generation of
this version will be promulgated when it becomes available (expected
late 1985).
3. Handling of C-Coded Files.
--------------------------
Development of RM Kermit on both 480Z and Nimbus has been carried out
using the Aztec C-compiler, version 1.06d. For internal reasons, the global
header file RMKEXT.H is referred to in the C-sources as "b:kext.h"; suitable
renaming must be done before any recompilation is undertaken, and attention
may be needed to the disks on which files are located. Aztec's .H files
will also be required.
Development of the 480Z version has encountered difficulties because
the program is large enough to almost fill the TPA of a 56-Kbyte CP/M.
The pre-exisiting low-level communications routines were in RML's own Z80
assembly-code, which is assembled by RML ZASM to produce Microsoft-compatible
.REL files. Aztec's C-compiler was used to generate Intel assembly code,
assembled by Microsoft's M80 to produce Microsoft .REL files.
The main reason for splitting the source into so many small files was
to permit this compilation under CP/M. Linking by
Microsoft's L80 linker was impossible (since this builds its module in
store); Prospero's PROLINK was therefore used. This has a restriction
on the use of external data + offsets, which caused a few special types
of C-statement to be avoided (these are flagged in the text). In addition,
PROLINK will not search the Aztec Microsoft-compatible library correctly,
so a tailored library module CBASE6.REL was constructed by hand. Also,
for reasons internal to CP/M and the communications drivers, it was found
necessary to initialize the driver package before initializing the
C base-package; the Aztec C-initialization MBEGIN has therefore to be
modified and is supplied as file RMKERMIT.REL (which also controls
the name of the .COM module). This version makes a call to s4go() and
then a call to BDOS (to alter the bottom-of-BDOS pointers) before allowing
Aztec-C to set up its stack. Other methods of solving these problems are
obviously possible. If any user wishes to modify the current 480Z version,
he will need M80 and PROLINK as well as Aztec-C, and may need to extract
additional library modules from the Aztec base-package library.
There were no such problems with the Nimbus version. The .O (object)
files supplied are direct outputs from Aztec's AS assembler, using
80186 assembly code which is very close to that for Microsoft MASM.
Linkage has been carried out by Aztec's LN linker using the library
C.LIB from Aztec-C 1.06d.
4. Linking Revised Versions.
-------------------------
In either 480Z or Nimbus versions, insertion of revised communications
code is very simple. Once the new code has been assembled by ZASM / M80
or AS respectively, it may be linked by PROLINK or LN using the appropriate
one of the following directives:-
-- for 480Z with IDC communications:
c:
a:PROLINK d:rmkermit,cbase6,rmkdata,rmkmain,cs4com,rmkcsupp,idcbase,rmk480z,
rmkdisk,rmkkey,rmkparm,rmkrec,rmksend,rmkline,rmkutil2,
idcequs1,idcdriv
d:
REN ikmit.com=rmkermit.com
a:
-- for 480Z with direct SIO4 communications:
c:
a:PROLINK d:rmkermit,cbase6,rmkdata,rmkmain,cs4com,rmkcsupp,siobase1,rmk480z,
rmkdisk,rmkkey,rmkparm,rmkrec,rmksend,rmkline,rmkutil2,
siodriv1
d:
REN nkmit.com=rmkermit.com
a:
-- for Nimbus with Aux communications:
LN -f alink
REN b:rmkermit.exe akmit.exe
where file "alink" consists of
-v -o b:rmkermit.exe
b:rmkmain.o b:rmknimb.o b:rmkdisk.o b:rmkparm.o
b:rmkdata.o b:rmkline.o b:rmkkey.o b:rmkrec.o
b:rmksend.o b:rmkutil2.o b:rmkcsupp.o
b:rmksaux.o b:rmcomms.o
a:rmoutc.o
a:c.lib
-- for Nimbus with Piconet communications
LN -f plink
REN b:rmkermit.exe pkmit.exe
where file "alink" consists of
-v -o b:rmkermit.exe
b:rmkmain.o b:rmknimb.o b:rmkdisk.o b:rmkparm.o
b:rmkdata.o b:rmkline.o b:rmkkey.o b:rmkrec.o
b:rmksend.o b:rmkutil2.o b:rmkcsupp.o
b:rmkspic.o b:rmcomms.o
a:rmoutc.o
a:c.lib
All these files make certain assumptions about the disks on which
specific files are located. These are the locations used in the original
development and may need changing if a different environment is used.
5. Total Rebuild - 480Z.
-----------------------
A "SUBMIT" file for total regeneration of 480Z Kermit is given
below. This is for a local-disk 480Z with MD2 IDC, assuming that
the C-system is on a:, the sources on b:, most of the .RELs on c:,
and leaving the generated .COMs on d:. Note that Aztec's TINY library
is used, and that careful attention has had to be given to the
space allocated to the various tables during compilation.
cz -DTINY -E20 -L12 -Y18 -MO d:kmain.mac b:rmkmain.c
M80 c:kmain,=d:kmain/I
era d:kmain.mac
cz -DTINY -E20 -L12 -Y18 -MO d:kdata.mac b:rmkdata.c
M80 c:kdata,=d:kdata/I
era d:kdata.mac
cz -DTINY -E20 -L12 -Y22 -MO d:k480z.mac b:rmk480z.c
M80 c:k480z,=d:k480z/I
era d:k480z.mac
cz -DTINY -E25 -L12 -Y22 -MO d:kkey.mac b:rmkkey.c
M80 c:kkey,=d:kkey/I
era d:kkey.mac
cz -DTINY -E25 -L12 -Y18 -MO d:kdisk.mac b:rmkdisk.c
M80 c:kdisk,=d:kdisk/I
era d:kdisk.mac
cz -DTINY -E20 -L12 -Y18 -MO d:kline.mac b:rmkline.c
M80 c:kline,=d:kline/I
era d:kline.mac
cz -DTINY -E20 -L12 -Y18 -MO d:kparm.mac b:rmkparm.c
M80 c:kparm,=d:kparm/I
era d:kparm.mac
cz -DTINY -E20 -L12 -Y18 -MO d:krec.mac b:rmkrec.c
M80 c:krec,=d:krec/I
era d:krec.mac
cz -DTINY -E20 -L12 -Y18 -MO d:ksend.mac b:rmksend.c
M80 c:ksend,=d:ksend/I
era d:ksend.mac
cz -DTINY -E20 -L12 -Y18 -MO d:kutil2.mac b:rmkutil2.c
M80 c:kutil2,=d:kutil2/I
era d:kutil2.mac
cz -DTINY -E20 -L12 -Y18 -MO d:kcsupp.mac b:rmkcsupp.c
M80 c:kcsupp,=d:kcsupp/I
era d:kcsupp.mac
era d:?kmit.com
c:
a:prol d:kermit,cbase6,kdata,kmain,cs4com,kcsupp,idcbase,k480z,kdisk,kkey,kparm,krec,ksend,kline,kutil2,idcequs1,idcdriv
d:
ren ikmit.com=kermit.com
c:
a:prol d:kermit,cbase6,kdata,kmain,cs4com,kcsupp,siobase1,k480z,kdisk,kkey,kparm,krec,ksend,kline,kutil2,siodriv1
d:
ren nkmit.com=kermit.com
a:
stat d:*.com
6. Total Rebuild - Nimbus.
-------------------------
A suitable .BAT file for total regeneration of Nimbus Kermit is given
below. This assumes a standard C-system on a:, and all the text files etc.
on b:.
REM Compile all of Kermit & link it for Aux & Piconet
a:
CC b:rmkmain
CC b:rmkdata
CC b:rmkdisk
CC b:rmkkey
CC b:rmkline
CC b:rmkparm
CC b:rmkrec
CC b:rmksend
CC b:rmkutil2
CC b:rmkcsupp
CC b:rmknimb
CC b:rmksaux
CC b:rmkspic
DIR b:rmk*.o/p
LN -f alink
REN b:rmkermit.exe akmit.exe
LN -f plink
REN b:rmkermit.exe pkmit.exe
DIR b:?kmit.com
7. Conditional Compilations.
-------------------------
The common C-files (RMKEXT.H and RMK*.C except 480Z and NIMB)
mostly contain a small amount of #ifdef-controlled conditional
compilation to distinguish between MSDOS (Nimbus) and CP/M (480Z)
versions. RMKDISK.C contains a lot of such conditionals. All
are keyed to the #define variable MPUZ80, supplied by Aztec as
predefined in the CP/M-Z80 version of C 1.06 and not so defined
in the MSDOS-8086 version. Many of these conditionals are either
trivial or organizational, but the whole area should be reviewed
by anyone making major alterations to the source or the way in
which it is used. In particular, any attempt to produce an 8080
version is likely to end up with MSDOS conditionals since the Aztec
pre#defined variable will then be MPU8080.
**********************************************************