CP/M-80 для любознательных


Продаю платы и наборы микросхем, куплю микросхемы Купить программы, микросхемы, готовые блоки запчастей ПК Орион-128


C. Gianone

Columbia University Center for Computing Activities New York, New York 10027 April 23, 1991

Copyright (C) 1981,1991
Trustees of Columbia University in the City of New York

Permission is granted to any individual or institution to use, copy,
or redistribute this document so long as it is not sold for profit, and
provided this copyright notice is retained.


This document is formatted as an ordinary, plain text ASCII disk file. Typeset
copies are available in the Kermit User Guide from Columbia University.
Changes should be made to CPKERM.MSS.

Program: Mike Freeman, Bonneville Power Administration, Vancouver, WA, USA,
with contributions from many others.

Language: 8080 Assembler, LASM, M80, or MAC80

Version: 4.11

Date: April 1, 1991

Documentation: Christine Gianone, Columbia University, with contributions from
many others.

KERMIT-80 Capabilities At A Glance:
Local operation: Yes
Remote operation: Partial, Auto-receive only
Login scipts: Yes, limited
Transfer text files: Yes
Transfer binary files: Yes
Wildcard send: Yes
File transfer interruption: Yes
Filename collision avoidance: Yes
Can time out: Yes
8th-bit prefixing: Yes
Repeat count prefixing: No
Alternate block checks: Yes
Terminal emulation: Yes, VT52 and others
Communication settings: Yes
Support for dial-out modems: No
Transmit BREAK: Yes; most versions
IBM communication: Yes
Transaction logging: No
Debug logging: No
Session logging: Yes
Raw file transmit: Yes
Act as server: No
Talk to server: Yes
Advanced commands for servers: Yes
Command/init files: Yes
Command macros: No
Local file management: Yes
Handle file attributes: No
Long packets: No
International Character Sets: No
Sliding Windows: No
Printer control: Yes, limited

1.1. Credits

CP/M Kermit is the first of all the Kermit programs. It was originally written by Bill Catchings of Columbia University in 1981. Over the years, contributions have been added by many people, including Charles Carvalho (ACC), Bernie Eiben (DEC), Nick Bush (Stevens Institute of Technology), John Bray (University of Tennessee), Bruce Tanner (Cerritos College), Greg Small (University of California at Berkeley), Kimmo Laaksonen (Helskini University of Technology), Bertil Schou (Loughborough University), Jon Warbrick (Plymouth Polytechnic University), Brian Robertson (Aberdeen University), A.J. Cole (Leeds University), John Shearwood (Birmingham University), Tony Addyman (Salford University), Godfrey Nix and Martin Carter (Nottingham University), Ian Young (Edinburgh University), Chris Miles (Manchester University), Richard Russell, Dave Roberts, and many, many others.

Version 4.11 is the work of Mike Freeman of the Bonneville Power Administration in Vancouver, WA, USA, with assistance from Russell Lang of Monash University in Australia, Jay S Rouman of Mt Pleasant MI, and others.

1.2. What's New

Features added since version 4.09 include:



- Many REMOTE commands, including some REMOTE SET commands

- RENAME command to rename CP/M files from within Kermit-80


- SET AUTORECEIVE ON now implies that Kermit-80 ALWAYS tries to receive
more files when a RECEIVE transaction has completed. The user can
cancel with ^C.

- QUIT is now a synonym for EXIT.

- STAY is now a synonym for SET NO-EXIT.

- CONNECT, RECEIVE and SEND may be abbreviated to C, R and S,

- Cancellation of TAKE, TYPE, and PRINT commands from the keyboard.

- Many bug fixes.

- Kermit-80 Version 4.11 now supports the Microbee family of computers
(56K, 64K, 128K and 256K) manufactured by Microbee Systems, Ltd, of

- Kermit-80 now supports the Ampro Little Board system.

1.3. Overview of Kermit Operation

Use the SET command to establish necessary communication parameters like SPEED
and PARITY. Use the CONNECT to establish a terminal connection to the remote
computer. If you are dialing out with a modem, type the necessary dialing
commands to the modem first. The dialing process can be automated to some
extent using a TAKE command file containing INPUT, OUTPUT, and PAUSE commands.
Then log in to the remote computer or service and conduct a session.

To transfer a text file, start the Kermit program on the remote computer and
tell it to SEND the desired file (if uploading) or to RECEIVE (if downloading).
"Escape back" to CP/M Kermit, usually by typing Ctrl-] (hold down the Control
key and press the right bracket key) and then type the letter C. At the CP/M
Kermit prompt type RECEIVE (if you gave a SEND command to the remote Kermit) or
SEND filename (if you gave a receive command to the remote Kermit).

To transfer a binary file, give the command SET FILE TYPE BINARY to the remote
Kermit and SET FILE-MODE BINARY to CP/M Kermit before issuing any SEND or
RECEIVE commands.

Multiple files of the same type (text or binary) can be transferred in a single
operation using "wildcard notation" (including special characters like asterisk
in the filename).

When file transfer is complete, CONNECT back to the remote computer, use the
EXIT command to exit from the remote Kermit program, finish your work on the
remote computer, log out from it, escape back to CP/M Kermit again, and EXIT
from CP/M Kermit.

The remote Kermit may also be put into "server mode" to simplify these
operations. Give the SERVER command to the remote Kermit, escape back to CP/M
Kermit, and then issue SEND commands to send files (upload), GET filename
commands to receive (download) files, REMOTE commands to request various other
services (like directory listings) from the remote Kermit. When you are done,
give a BYE command to terminate your remote session, or a FINISH command to
tell the remote Kermit to return to its prompt so you can CONNECT back and
conduct further business.

That's all there is to it.

1.4. Summary of CP/M

There are essentially two versions of CP/M - Versions 2.2 and 3.0 (sometimes
also called CP/M PLUS.)

CP/M-80 Version 2.2 is run in a single 64 Kbyte "page", usually the largest
amount of memory on Z80 or 8080 systems. The BIOS (Basic input/output system),
BDOS (Basic Disk Operating System) and CCP (Command console processor) all
share memory with any transient program the user may wish to run. Some basic
commands are available through the CCP, like DIR, ERA etc,while others are
loaded from disk into the transient program area and run as a program, like PIP
or STAT.

CP/M Version 3.0 (or CP/M PLUS) effectively removes the requirement of having
the CCP and BDOS along with a chunk of the BIOS code being resident in the
single 64k byte page of memory. This allows even more space for programs in
the TPA, but still a little less than the maximum of 64k. It is substantially
different from CP/M version 2.2, with lots of added features. Kermit-80 uses
very few additional version 3.0 features, and only where absolutely necessary.

CP/M file specifications are of the form DEV:XXXXXXXX.YYY, where

DEV: is a device name, normally the A: or B: floppy. If omitted,
the device name defaults to your connected diskette.

XXXXXXXX is a filename of up to 8 characters.

YYY is the file type, up to 3 characters.

File names and file types may contain letters, digits, and some special
characters, including dash, dollar sign, and underscore, but no imbedded
spaces. Upper and lower case letters are equivalent.

"Wildcard" file-group specifications are permitted in file names and file types
(but not device names) within certain contexts; a "*" matches a whole field, a
"?" matches a single character, including space. Examples: "*.F??" specifies
all files whose types start with F and are 1, 2, or 3 characters long; "F?.*"
specifies all files whose names start with F and are no more than two
characters long (before the trailing spaces).

The five CP/M commands are:

DIR file Lists the the names of the specified files. The default file
specification is "*.*". Example: "DIR B:*.FOR".

ERA file Erases (deletes) the specified file(s); wildcards allowed.

REN new old Changes the name of a file from old to new, e.g.

SAVE Saves the specified number of memory blocks into a file. (Not
on CP/M Plus systems)

TYPE file Types the specified file on the screen, e.g. "TYPE FOO.TXT".

The most important programs are:

STAT Gives statistics on disk usage; sets and displays IOBYTE. (Not
on CP/M Plus systems)

PIP Peripheral Interchange Program. Copies files. In response to
the "*" prompt, give a command of the form


Wildcards ("*" for a whole field or "?" for a letter) can be
used. Examples: "A:=B:*.*" to copy a whole disk, "A:=B:*.FOR"
to copy all the Fortran programs from disk B to disk A. If the
disk specification is omitted, your "connected" disk is
assumed. Command line arguments are also accepted, e.g. "PIP

There are equivalent commands for CP/M Version 3.0, but are not loaded into
memory in the same way as for CP/M Version 2.2. For further information on
CP/M, consult your microcomputer manual or a CP/M handbook.

1.5. Kermit-80 Description

Since Kermit-80 runs on a standalone micro, it is always in control of the
screen -- it is always in "local mode". It includes a terminal emulator for
establishing a connection to a remote computer or service, and during file
transfer, it keeps the screen updated with the file name and the packet number,
whether sending or receiving.

Kermit-80 is capable of an imprecise or "fuzzy" timeout on an input request,
and can break deadlocks automatically. In most cases, this is not important,
because the Kermit program on the other side is most likely able to handle the
timeouts. The timeouts done by Kermit-80 are fuzzy because they depend on the
speed of the processor and other factors that can vary from system to system.

If, despite the timeout capability, the transmission appears to be stuck (and
you can tell that this has happened if the screen fails to change for a while)
you can type carriage return to have the micro do what it would have done on a
timeout, namely NAK the expected packet to cause theforeign host to send it
again (or, if the micro is sending, to retransmit the last packet). Micro/
micro or micro/IBM-mainframe transfers could require this kind of manual

File transfers may be interrupted in several ways.

Control-C This will return you to Kermit-80 command level immediately, so
that you can connect back to the remote system, or take any
other desired action.

Control-X When sending a file, this will terminate the sending of the
current file with a signal to the KERMIT on the other side to
discard what it got so far. If there are more files to be
sent, KERMIT-80 will go on to the next one. When receiving a
file, KERMIT-80 will send a signal to the remote KERMIT to stop
sending this file. If the remote KERMIT understands this
signal (not all implementations of KERMIT do), it will comply,
otherwise the file will keep coming. In any case, the remote
KERMIT will go on to the next file in the group, if any.

Control-Z Like Control-X, except if a file group is being transmitted,
this will stop the transmission of the entire group. If only a
single file is being transmitted, it works exactly like

Carriage Return If you type a carriage return Kermit-80 will resend the current
packet. You may do this repeatedly, up to the packet retry
limit (somewhere between 5 and 16 times) for a particular


Kermit-80 is an interactive program. It issues a prompt, you type a command.
The process repeats until you give the EXIT command to leave the program.

Commands consist of keywords, filenames, and numbers. Keywords may be
abbreviated to minumum unique length. "?" may be typed to request a menu of
the available options for the current field at any point in a command. ESC may
be typed at any point in a command to fill out the current keyword or filename;
if sufficient characters have not been typed to identify the current field
uniquely, Kermit-80 will sound a beep and allow you to continue from that
point. Here are Kermit-80's commands:

BREAK Send a BREAK condition to the remote computer. This is only possible
if your system is capable of sending breaks. It is intended to be used
with PAUSE, OUTPUT, etc and the TAKE command to do wierd and wonderful
things, like automatic logging on to a remote host.

BYE When talking to a remote Kermit Server, this command shuts down the
server and logs it out, and also exits from Kermit-80 to CP/M command

CONNECT Establish a terminal connection to the computer, service, or device
that is connected to the serial port, i.e. pass all typein to the
serial port and display all input from the serial port on the screen.
Also, emulate a DEC VT52 to allow cursor control, screen clearing,
etc., if VT52-EMULATION is ON (see below), in which case you should
also set your terminal type on the remote host to VT52. (Some versions
emulate other terminals.) The CONNECT command may be abbreviated by
the single letter C.

Warning: VT52 emulation is only successful if your system or its
attached terminal can do the same sort of functions as a genuine VT52.
Things to beware of are cursor addressing, clear to end of page and end
of line, clear screen, home cursor, and clear-and-home functions. The
useability of VT52 emulation depends entirely on how many of the VT52
functions can be emulated by your micro or terminal.

The escape character differs from micro to micro; when you issue the
CONNECT command, the micro will print a message telling you how to get
back. The escape sequence is generally an uncommonly-used control
character, like CTRL-backslash or CTRL-rightbracket, followed by a
single letter "command":

C Close Connection, return to Kermit-80> command level.
S Display Status of connection, but maintain remote connection.
? List available single-character commands.
0 (zero) Send a null (0) character.
B Send a BREAK signal. Most systems provide this function.
D Drop the line. Used on the Apple with modem. Automatically closes
the connection after dropping the line. The TORCH system
acknowledges this command but does nothing.
P Toggle printer on or off. Allows you to copy whatever goes to the
screen to the printer.
S Temporarily suspend logging to the log file.
Q Restart logging to the log file
^] (or whatever - a second copy of the escape character) Send the
escape character itself to the remote host.

COPY source destination
Copy a named file to another file, either on the same drive or another

This provides a directory listing of the specified files. If no files
are specified, all files on the default disk are listed. File sizes,
in K, are included. You may interrupt the listing at any time by
typing any character. The listing (even if interrupted) concludes with
a display of the amount of free storage left on the disk. You can
inhibit the display of file sizes by SET DIRECTORY OFF.

ERASE filespec
This executes the CP/M ERA command on the specified file(s). The names
of the files being erased are not displayed.

EXIT Quit back to CP/M. The return is made by a JMP 0 (Warmstart). QUIT is
a synonym for EXIT.

FINISH Like LOGOUT, but shuts down the remote server without logging it out.
Leaves you at Kermit-80 command level; subsequent CONNECT commands will
put you back at host system command level.

GET filespec [local_filespec]
When Kermit-80 is talking to a Kermit Server on the host, you should
use the GET command to request the server to send files to you, for

get hlp:k*.hlp

You may specify a local filename if you want to save the remote file
under a different filename. Limitation: If you request an alternate
block check type using the SET BLOCK command, the GET command will not
communicate it to the remote server. If you want to have type 2 or 3
block checks done when getting files from the server, you have to issue
the appropriate SET BLOCK command to the remote KERMIT before putting
it in server mode.

HELP List all these commands, with a short description on what the commands
do. A question mark will do the same. If you have already typed a
command but do not know what the parameters are, type a space (to
indicate the end of the command) and a question mark. You will be
informed of what Kermit can expect at that stage.

INPUT seconds text
Setup a text line and time delay for your CP/M system to expect from
the host, then wait up to the given number of seconds (approximately)
for text to be sent to your CP/M-80 system.

LOG filespec
When CONNECTed to a foreign host as a terminal, log the terminal
session to the specified diskette file. This functionality depends to
some extent on the remote host's ability to do XON/XOFF flow control,
and does not guarantee a complete transcript (after all, that's what
the KERMIT protocol is for). The log file is closed when the
connection is closed by typing the escape character followed by the
single-character command "C".

It is possible to temporarily suspend logging during connect state.
Typing an escape sequence can turn file logging on (<escape-character>
R for Resume) or off (<escape-character> Q for quiet).

Re-entering connect state will re-open the previously opened log file
and append to that file.

LOGOUT Like BYE, but leaves you at Kermit-80 command level.

Send the text to the remote computer as if you had typed it.

PAUSE seconds
If this command is issued your CP/M system will wait a while before
proceeding with another command. This is intended for use in TAKE
commands, where you may want to pause for a while before proceeding
with the rest of the TAKE file. The actual delay is very variable
between systems, and values should be determined on a trial and error

PRINT Print a file to the console and printer. Output to the printer is
buffered by the Kermit-maintained printer buffer. This routine is
identical to TYPE but characters are echoed to the printer as well as
to the screen. Suspending and canceling output is as described in

QUIT Synonym for EXIT.

RECEIVE filespec
Receive file(s) from the remote Kermit, and save them under the names
provided in the file headers supplied by the remote host. If a local
filespec is given, the file is saved under the given filename. If the
names aren't legal, use as many legal characters from the name as
possible (see the description of SET FILE-WARNING below). If there's a
conflict, and FILE-WARNING is ON, warn the user and try to build a
unique name for the file by adding "&" characters to the name. RECEIVE
can be abbreviated to the single letter R.

REMOTE command
Send a command to a remote Kermit server. The results are sent back to
your CP/M screen. When two arguments are required and specify less
than two in the command, you will be prompted for the missing
arguments. REMOTE commands include:

REMOTE CD [directory]
Ask the remote server to change its default directory. If no
directory is specified, the server changes to its login directory.

REMOTE COPY file1 file2
Ask the remote server to copy file1 to file2.

REMOTE RENAME file1 file2
Ask the remote server to rename file1 to file2.

Ask the remote server to delete the named file or files.

Ask the remote server to display a directory listing of the given
files or, if the filespec is omitted, all the files in the current
device or directory.

Ask the remote server to display information about its disk usage
(such as free or used space).


Same as FINISH.

Ask the remote server to display a list of the commands it can
respond to.

Ask the remote server to have its operating system execute the
given command.

Ask the remote server to execute the given Kermit command, given in
the server Kermit's command syntax.

REMOTE LOGIN user password
Log in to a remote Kermit server which has been set up to require a
username and password.

Send the text to the remote server for display on its screen
(useful with MS-DOS Kermit servers).

REMOTE SET parameter value
Ask the remote server to set the given parameter to the given
to see a list of the REMOTE SET options.


Ask the remote server to provide a status report.

Ask the remote server to display the named file on the micro's

Ask the remote server for a list of users who are logged in, or if
a user is specified, for a report on the named user.

RENAME file1 file2
Rename local CP/M file1 to file2.

SEND filespec
Send file(s) specified by filespec to the remote Kermit. The filespec
may contain CP/M wildcards. SEND may be abbreviated to the single
letter S.

SET parameter [value]
Set the specified parameter to the specified value. Possible parameter

ON (or OFF). Allows several files to be received without
having to type RECEIVE on the receiving machine. The routine
simply looks for activity on the serial line, and if so fudges
a RECEIVE command. The packet sent by the sender will be lost.

The options are:

Normal, default, standard 6-bit checksum.
A 12-bit checksum encoded as two characters.
A 16-bit CCITT-format Cyclic Redundancy Check, encoded
as 3 characters.

This allows you to set a buffer size during transfer of data.
On some systems it takes so long that the remote end times out
while the local system is reading or writing to disk. The size
is the number of 128 disk sectors (nominal) and can be from 1
(128 bytes) to 64 (8 kbytes).

CP/M-80 filenames will still be mapped to uppercase characters.

What to do when a file arrives that has the same name as an
existing file. BACKUP means to rename the existing file.
DISCARD means to discard and reject the incoming file.
OVERWRITE means to overwrite the existing file. RENAME means
to rename the existing file.

DEBUG ON (or OFF). Enables/disables displaying of packets on the
screen during file transfer. Not performed if the QUIET option
has been set for the terminal (SET TERMINAL QUIET)

DEFAULT-DISK drive letter
This allows you to set the default disk as source and
destination of file transfers. In addition, issuing this
command causes you to switch to the specified disk and log it
in, write-enabled. The colon must be included in the disk name
(A:). The selected disk appears in your KERMIT-80 prompt, for

Kermit-80 14A:>


By setting DIRECTORY-FILE-SIZE OFF you can get an abreviated
listing of your disk drive. File sizes are not calculated, and
five files are shown on a line. Setting this option ON will
show file sizes of each file.

Both options will list the free space remaining.

ESCAPE Change the escape character for virtual terminal connections.
Kermit-80 will prompt you for the new escape character, which
you enter literally.

FILE-MODE option
Tells KERMIT-80 what kind of file it is sending, so that KERMIT
can correctly determine the end of the file. SET FILE BINARY
means to send all the 128-byte blocks (ie logical CP/M sectors)
of the file, including the last block in its entirety; SET FILE
ASCII is used for text files, and transmission stops when the
first Control-Z is encountered anywhere in the file (this is
the CP/M convention for marking the end of a text file).

SET FILE-MODE DEFAULT tells Kermit to attempt to determine the
file type by examining the file being transmitted. If a
Control-Z appears before the last block of the file, it is
assumed to be BINARY; if, when the first Control-Z is
encountered, the remainder of the file contains only
control-Z's, it is assumed to be a text file. Unfortunately,
not all programs fill the remainder of the last record of a
text file with Control-Z's, so this algorithm is not always

If binary transmission is used on a text file, or a compressed
file (eg a .DQC file) some extraneous characters (up to 127 of
them) may appear at the end of the file on the target system.

If ASCII transmission is used on a binary file, any 8th bits
set will be stripped and a warning sent to the console. When
the first control-Z is encountered, the file is assumed to be
at the end, even if it is not.

Sets XON/XOFF flow control on or off. If set ON the host is
expected to respond to an XOFF or XON sent by Kermit-80. If
set off, no flow control is assumed and any XON/XOFF is

Allow the transfer of files to and from an IBM mainframe
computer. This makes Kermit-80 wait for the IBM turnaround
character (XON), ignore parity on input, add appropriate parity
to output, and use local echoing during CONNECT. As
distributed, KERMIT-80 uses MARK parity for IBM communication.
If you don't give this command, IBM mode is OFF. Since IBM
VM/CMS KERMIT does not have timeout capability, SET IBM ON also
turns on the "fuzzy timer" automatically.

When you CONNECT to a remote host, you must set LOCAL-ECHO ON
if the host is half duplex, OFF if full duplex. OFF by

Cease or resume logging whenever connect mode is entered. This
is really only applicable after a LOG command is no longer

NO-EXIT This command is applicable only for Kermit initiated with a
command tail. For example, if Kermit was initiated by:


Kermit would first seek out and execute the KERMIT.INI file (if
present), then send file HELLO to a remote system. Usually
Kermit would exit back to CP/M, but NO-EXIT over-rides this.
STAY is a synonym for NO-EXIT.

Note the leading semicolon. This clears leading spaces from
the first command.

OUTPUT text-line
Send a line of text to the remote computer (or modem). This
simply copies the string to the correct line, and assumes all
appropriate parameters have been set to be used, e.g. speed,
parity etc. It is intended for use in TAKE command files.

PARITY option
Sets parity for outgoing characters to one of the following:
NONE, SPACE, MARK, EVEN, or ODD. On input, if parity is NONE,
then the 8th bit is kept (as data), otherwise it is stripped
and ignored. The parity setting applies to both terminal
connection and file transfer. If you set parity to anything
other than none, KERMIT-80 will attempt to use "8th bit
prefixing" to transfer binary files. If the other KERMIT is
also capable of 8th bit prefixing, then binary files can be
transferred successfully; if not, the 8th bit of each data byte
will be lost (you will see a warning on your screen if this

PORT port name
Allows you to switch between different communication ports.
This command is not available on all systems. Type SET PORT ?
for a list of valid options for your system. (Note: If your
system does not support several ports, this command will return
a "Not implemented" error if you try to set a port.)

Turns copying of CONNECT session to printer on and off. It is
also possible to toggle the printer on/off from the connect
state, by typing <escape character> followed by P.

RECEIVE parameter [value]
Set a RECEIVE parameter.

Set the PAD character to use while receiving files.
Currently a dummy, as for SET SEND PAD-CHAR.
PADDING [value]
Set the number of PAD characters to use while receiving
files. Same as SET SEND PADDING.
Set the default start of Packet character for receiving
files. Apply the same rules and considerations as for
Tell the other Kermit the longest packet length CP/M
Kermit is willing to receive during file transfer. The
maximum length is 94, which is also the default length.

SEND parameter [value]
Set a SEND parameter.

Set the Pad character to be used while sending files.
It is currently a dummy entry, and does not do
PADDING [value]
Set the number of PAD-CHARS to be used while sending
files. This too does nothing.
Set the default start of packet character to another
character than control-A. This may be necessary on
systems (including intervening networks) that trap
control-A characters. Choose a control character not
otherwise used, ie not carriage return (13D, ODH), line
feed (10D, OAN), tabs (09D, 09H), backspace (08H), and
bell (07H) or any other used between you and your
remote system.

SPEED value
Change the baud rate of the communications port. This command
only works on some systems. value is the numeric baud rate
(300, 9600, etc.) desired. Type SET SPEED followed by a
question mark for a list of supported baud rates. On systems
that do not support this command, you must set the port baud
rate from CP/M or other setup mechanism outside of KERMIT-80.

TACTRAP Set the TAC intercept character. If you are attached to a TAC
it will swallow the intercept character (commercial AT sign by
default) so Kermit sends it twice. With this command you can
set the intercept character (ie the one to send twice) to
another character.

Select one of the following terminal characteristics:

OFF sets emulation off, and its up to the attached terminal
to respond to escape sequences sent from the remote
host system.

DUMB Like off, but carriage return and line feed characters
are the only control characters accepted. All other
control characters are simply ignored. (Really a "Glass

Emulation is provided for by a routine in the system
dependent part of Kermit. Attempting to set this
option without having and externally supplied routine
will returna "Not Implemented" error.

OFF All characters are passed directly to the terminal
without any interpretation by Kermit.

VT52 When connected as a terminal to a foreign host, the
micro emulates a VT52. VT52 emulation is set by
default, except on micros that already have terminal
functionality built in, such as the DEC VT180 and
DECmate (these act as VT100-series terminals). Some
systems emulate other terminals, like the ADM3A; see
table 1-5.

QUIET Do not display any file transfer information onto the
console. This mode is useful if you console takes a
long time to update the display. Only the file name is
displayed. DEBUGging information is not displayed even
if selected.

REGULAR Inverse of QUIET. All packets etc displayed, as

Enable or disable the "fuzzy timer". The timer is off by
default, because in the normal case KERMIT-80 is communicating
with a mainframe KERMIT that has its own timer. Mainframe
KERMIT timers tend to be more precise or adaptable to changing
conditions. You should SET TIMER ON if you are communicating
with a KERMIT that does not have a timer. You should SET TIMER
OFF if you are communicating over a network with long delays.

USER user-number
Sets another user number to be active. Acceptable user numbers
are 0 to 31, though it is recommended to use user numbers 0 to
15 only. This is really only useful for Winchester Systems
with high disk capacities.

Warn user of filename conflicts when receiving files from
remote host, and attempt to generate a unique name by adding
"&" characters to the given name. ON by default, which is

SHOW Display all settable parameters. You will get a page or so of the
status af all parameters that can be set using the SET command.

STATUS The same function as Show.

STAY Equivalent to SET NO-EXIT.

TAKE filespec
Take characters and commands from the specified file as if they were
entered from the keyboard. This is useful if you want to set up a
batch job. A command file can send, get, receive, set functions etc
automatically. A TAKE command can be interrupted with ^C.
An automatic "TAKE KERMIT.INI" is executed from the default drive when
Kermit-80 is loaded. This can be used to set defaults of band rate,
parity, filetype, default drive etc.

If KERMIT.INI does not exist, control is given directly to the user.

TRANSMIT filespec turnaround
Send the specified file to the system on the other end of the
connection as though it were being typed at the terminal, one line at a
time. Each line sent is terminated with a carriage return, and any
line feeds are stripped from the file sent. After each line has been
sent Kermit waits for a character string from the host (eg a acrriage
return). If not specified, a carriage return is assumed. No KERMIT
protocol is involved. An asterisk (star) is sent to the console for
every line sent, to indicate how the transfer is progressing. This is
useful for sending files to systems that don't have a KERMIT program.
During transmission, you may type one of these single-character

Cease transmission, and drop into terminal emulation mode.
CR (carriage return) Re-transmit the previous line.

TYPE filespec
Type a local CP/M file or files on the CP/M screen. A Control-C will
cancel the command and return to the Kermit prompt. A Ctrl-X will
cancel the current file and go on to the next one, if any. Typing any
other character while the file is being displayed will suspend the
output. Another character will resume output.

VERSION Show the name, edit number, and edit date of several of the modules
that make up Kermit-80.

1.6. Kermit-80 Flavors

Many of the systems supported use an external terminal, rather than a built-in
console. Kermit may be further customized for these systems by defining (at
assembly time) the terminal type to be used. If the terminal type is unknown
or does not match any of the existing terminal options, the generic "CRT"
option may be selected. In this case, Kermit cannot do fancy screen control
during file transfer; it simply types the file names, packet numbers, and
messages in sequence across and down the screen. This works best if you can
put your micro or terminal in "autowrap" mode; otherwise the packet numbers
will pile up in the rightmost column; the filenames and messages will always
appear on a new line, however. If no specific terminal has been selected,
Kermit cannot do VT52 emulation; it can act as a "dumb terminal" (sometimes
called a "glass TTY"), or else its own built in terminal firmware provides
cursor control functions independent of the Kermit program.

1.6.1. Generic Kermit-80

"Generic Kermit-80" is an implementation of Kermit that should run on any 8080-
compatible CP/M 2.2 system with no modification at all, or perhaps only a minor
one. Unlike other Kermit-80 implementations, it contains no system-dependent
manipulation of the serial port. All I/O is done with standard CP/M BIOS
calls, and I/O redirection is done using the CP/M IOBYTE function, which,
according to the Digital Research CP/M Operating System Manual, is an optional
feature of any particular CP/M implementation. If your system does not provide
the IOBYTE function, Generic Kermit-80 will not work; furthermore, not all
systems that implement IOBYTE do so in the same way. The SET PORT command may
be used to select the devices to be used for input and output. Table 1-1 lists
the options to the SET PORT command and their effects.


SET PORT xxx input from output to
UC1 UC1: UC1:
UR1 UR1: UP1:
UR2 UR2: UP2:

Table 1-1: Kermit-80 SET PORT Options


The default is SET PORT PTR. In all cases, the console (CON:) and list (LST:)
devices used are those selected when Kermit is started.

The reason all Kermit-80 implementations aren't generic is that a good deal of
speed is sacrificed by getting all services from the operating system. While a
specific implementation of Kermit-80 may be able to operate at 4800, 9600, or
even 56 Kilo baud, generic Kermit will fail to work on some systems at speeds
in excess of 1200 baud. In addition, many features of Kermit require more
specific knowledge of the hardware involved. Generic Kermit cannot send a
BREAK signal, or change the baud rate, for example.

1.6.2. CP/M 3 Kermit

CP/M-3 Kermit (also known as CP/M-Plus Kermit) is a version of generic
Kermit-80, and should run on most CP/M-3 (CP/M-Plus) systems. It uses the
auxilliary port (AUX:) to communicate to the remote Kermit. The SET BAUD and
SET PORT commands are not supported; nor can a BREAK be sent. Like generic
Kermit-80, a terminal may be selected at assembly time.

1.6.3. System-Specific Versions

There are also many versions of Kermit-80 tailored to specific systems. Most
of these operate uniformly, but some of them take advantage (or suffer
limitations) of the specific system. Here are some of the special features for
particular systems:

Amstrad: -- Two versions:

PCW 8256
The PCW 8256/8512 with the serial inerafce attached.

CPC 6128
The 664 with add on memory and 6128 are both supported. Both systems
must run CP/M Plus, so the 664 will need an add on RAM pack and CP/M
upgrade. A high speed transfer rate of 38k baud can be used between
Amstrad computers.

Access Matrix computer using port J5. Supports SET BAUD-RATE for rates of
300-9600 baud.

Apple II -- four variations:

Apple with Z80 Softcard and Micromodem II in slot 2 Dialout capability
provided in connect command; user is prompted for phone number if
carrier is not present. During connect mode, ^]D drops carrier. BYE
command also causes carrier to be dropped.

Apple with Z80 Softcard, and one of several 6551-based communication
cards; the slot number is a compile-time parameter (default is slot 2).
SET BAUD-RATE supported; speeds are 110-19200 baud.

Apple with Z80 Softcard and CP Multi-Function Card. The slot number is
again a compile-time parameter. SET BAUD-RATE is supported for baud
rates from 50 baud to 19200 baud.

Apple II with Z80 Softcard and a 6850-based USART in slot 2-the slot
being a compile-time parameter. SET BAUD-RATE is not supported.

Acorn Computers BBC Computer with Acorn Z80 second processor running
CP/M-80. Supports SET BAUD-RATE and can send breaks.

BigBoard II:
Uses serial port A. To use port B, change mnport, mnprts, and baudrt and
reassemble. Can generate BREAK. SET SPEED supported; speeds are 300-38400

Originally coded for Cifer 1886 using the VL: port set as TTYI: and TTYO:
but works successfully on 18xx and 28xx series machines.

There are now two versions, each with two variations: Either running CP/M
Version 2.2 or 3.0, and either using the VL: or AUX: ports. The VL: port
version can only use seven bits of data, so parity prefixing is required
for binary file transfers. This restriction is removed by using the AUX:
port. For those interested, the problem is due to the interprocessor link
between the video and CPU (!) boards. The VL: port is on the video board,
and the AUX: port on the CPU board, and the inter processor link can only
transfer seven bits of data.

Supports SET SPEED, and can generate breaks on some models with a BREAK

Comart Communicator-Similar to Northstar equipment. Can generate BREAK.

Based on Kermit 3.x, and has been merged into V4.09

CPT-85xx word processors:
Can generate BREAK. SET SPEED supported; speeds are 50-9600 baud.

Cromemco computers with TU-ART card. Supports SET BAUD-RATE (110-9600

DEC DECmate II word processor (with Z80 card):
Can generate BREAK.

DEC VT180 (Robin):
Three output ports, referred to as COMMUNICATIONS, GENERAL, and PRINTER.
Can generate BREAK.

Digicomp Delphi 100:
SET SPEED supported; speeds are 50-19200 baud.

Action Computer Enterprises "Discovery" Multi-user Computer. Uses Port B
on an 83U user board. Supports SET SPEED for 50-19200 baud. Can generate

Epson PX-8 with LCD display. Although it is quite different in displaying
of Packet Information, it works as any other CP/M-80 Kermit. Supports SET
SPEED and can generate BREAK.

Generic Kermit:
Two versions, one for CP/M version 2.2 and version 3. These systems use
IOBYTE flipping (V2.2) and the AUX: device to communicate to the serial
line. You may have to SET PORT xxx before the version 2.2 will work, as
Kermit needs to know what device is the serial line.

Eaca Video Genie.

Heath: Three Versions:

for Heath-8 systems with the quad io board. This system has been
derived from V3.x code. Note that this version will not run "as is" on
H89 systems.

H89 For Heath-89 machines suports baud rates from 50 to 56,000 baud.

For Z-100 running CP/M-85. This version does not support setting of
baud rates.

Intertec Superbrain: Two Versions:

For superbrain using AUX port. Breaks and SET BAUD both supported

As above, but using the MAIN port.

Ithaca Intersystems based computer using the VIO card for all IO to the
outside world. The system is strictly speaking a home-brew variant of the
Ithaca machine, using an S100 cardcage without a front panel. It uses the
Extended BIOS by EuroMicro of London. However, I see no reason for this
version not running on a genuine Ithaca Intersystems machine. There are
patches needed to the EuroMicro BIOS to make this version work.

Should work on most Kaypro models, as well as some related systems
(Ferguson BigBoard I, Xerox 820). For the newer Kaypros with multiple
ports, Kermit uses the one labeled "serial data"; it cannot use the serial
printer or internal modem ports (but it should be possible to modify the
values for mnport, mnprts, and baudrt to do this). Can generate BREAK.
SET SPEED supported; speeds are 50-19200 baud.

Lobo MAX-80. Supports SET SPEED and can generate BREAKS.

British Telecom Merlin M2215 (also Rair Black Box, possibly also the ICL
PC?). Requires a terminal.

Microbee Systems computer made in Australia. Works on Microbee 56K (Series
2 APC), 64K (Computer in a Book), 128K (Dynamic), and 256K (256TC). Can
generate BREAK. SET BAUD-RATE supported; speeds are 75-9600. All serial
I/O is via software, not hardware. Simultaneous transmit and receive
possible on all speeds except 75/1200, 1200/75, 4800, and 9600.

PMC 101 Micromate. Supports SET SPEED and can generate BREAK.

Micromint: Two versions

S6 The Ciarcia/Micromint sb-180 board with a 6Mhz procoessor. System
requires a terminal.

S9 As above, but with a 9Mhz processor.

Decisionmate 5. Uses the 2651 and is largely the same as the Ithaca
Intersystems machine implementation.

Northstar: -- There are four versions available:

Northstar Horizon with HS10-4 board. Supports SET SPEED and SET PORT.

Northstar Horizon using the serial ports on the Mother board. Can
generate BREAK.

Basic Northstar Horizon using the printer port. Can generate BREAK.

Northstar Advantage. Supports SET SPEED and can generate BREAK. Traps
Control-0 in the system filter.

Morrow Decision I:
Uses the Multi-I/O board. Port 1 is the console, port 3 is the
communications line. SET SPEED supported; speeds are 75-56000 baud.

Morrow Micro Decision I:

Nokia MicroMikko:
Will not echo control-O (which locks keyboard). SET SPEED supported;
speeds are 75-9600 baud.

Ohio Scientific:
Doesn't have screen control.

Osborne 1:
Uses serial line, not internal modem. Left-arrow key generates <DEL>
("delete" or "rubout" character) during connect mode. SET SPEED supported;
speeds are 300 and 1200 baud. Now supports multi-sector buffering.

Research Machines: Two Versions:

380Z and 5.25" disks supports SET BAUD.RATE

380Z and 8" disks, otherwise as above.

Sanyo MBC-1100. This version derived from Kermit V3.x

Details unkown.

TRS-80: Three versions:

TRS-80 with Lifeboat CP/M

TRS-80 with Pickles and Trout CP/M

TRS-80 Model 4 with Montezuma CP/M

Teletek Systemaster. Supports SET BAUD.

TELCON ZOBRA portable computer.

Torch Unicorn 5 initially, but the code runs on other Z80 based CP/N (as in
Nut!) systems. It uses the BBC Computer as a "Base processor", and is
similar to the BBC version. The base processors RS423 port is used rather
than any built in Modem. (UK telecoms legislation effectively makes modem
control software tricky business...). Two potential versions exist-one
using cursor positioning codes for a MCP and CCCP ROM combination of
revision less than 1.00, the other version uses the additional facility
MCP/CCCP versions greater than 1. Supports SET SPEED and can generate

Note that binary files must be transferred using SET PARITY to anything
other than NONE! Parity is neither generated nor checked.

US Micro Sales:
S-100-8 based computer.

Vector Graphics:

Xerox 820.

Development Kermit on a PC running the Z80MU Z80 and CP/M 2.2 development
system. Allows development of the system independent modules to be done on
an IBM PC or clone. Also allows the generation of new .HEX files, that may
then be KERMITed to the target system. Note: Not all the BDOS or BIOS
routines are supported, so avoid "unusual" BIOS/BDOS calls. (For example,
DIR from within Kermit will fail as one of the BIOS routines returning disk
parameters is not supported.)

1.7. Installation of Kermit-80

Kermit-80 was written originally for the Intertec SuperBrain in lowest-common-
denominator 8080 code with the standard assembler, ASM (single source module,
no macros, no advanced instructions), so that it could be assembled on any
CP/M-80 system (the 8080 assembler is distributed as a standard part of
CP/M-80, whereas the fancier Z80 or macro assemblers are normally commercial
products). It has since been modified to run on many other systems as well.
Kermit-80 should be able to run on any 8080-, 8085- or Z80-based microcomputer
under CP/M with appropriate minor changes to reflect the port I/O and screen
control for the system (see below).

The proliferation of new systems supported by Kermit-80 made the program grow
so large and complicated that it had to be broken up into system-independent
and system-dependent modules, as of version 4 (this was done by Charles
Carvalho of ACC). Each module is composed of multiple files. This has reduced
the time and disk space necessary for assembly; Kermit-80 may once again be
assembled on a CP/M system with roughly 250Kbytes of space. The majority of
the code does not need to be reassembled to support a new system.
Unfortunately, it can no longer be assembled with ASM, since ASM does not
support multiple input files. To allow it to be assembled on any CP/M system,
the public-domain assembler LASM is included in the distribution kit. Kermit-80
may also be assembled with Microsoft's M80 (not supplied). In theory, any 8080
assembler supporting the INCLUDE directive ought to work, as well.

All versions of Kermit-80 are assembled from the same set of sources, with
system dependencies taken care of by assembly-time conditionals within the
system-dependent module (eventually, the system-dependent module will itself be
broken up into multiple files, one for each system). The most important system
dependencies are terminal emulation (when CONNECTed to the remote host) and
screen handling, which are dependent on the individual micro's escape codes
(these features are table driven and easily modified for other CP/M systems),
and the lowest level I/O routines for the serial communications port. The port
routines are best done only with BDOS calls, but some systems do not allow
this, primarily because the BDOS routines strip the parity bit during port I/O,
and the parity bit is used for data when transmitting binary files.

Kermit-80's I/O routines must check the port status and go elsewhere if no
input is available; this allows for virtual terminal connection, keyboard
interruption of stuck transmissions, etc. On systems that fully implement I/O
redirection via the optional CP/M IOBYTE facility, this may be done by
switching the IOBYTE definition. On others, however, IN/OUT instructions
explicitly referencing the port device registers must be used.

CP/M-80 KERMIT versions 3.8 and later include a "fuzzy timer" that allows a
timeout to occur after an interval ranging from 5 to 20 seconds (depending upon
the speed of the processor and the operating system routines) during which
expected input does not appear at the port. In this case, retransmission
occurs automatically. In any case, you may type a carriage return during
transmission to simulate a timeout when the transfer appears to be stuck.

1.7.1. Organization of Kermit-80

Kermit-80 consists of two modules, each of which is generated from multiple
source files. The first module contains the system-independent code; the
second module is configured for a particular system and merged with the system-
independent module to produce a customized Kermit-80.

The distribution kit contains:

- the system-independent module, CPSKER.HEX;
- the system-dependent modules, CPV*.HEX (see table 1-2 and 1-3);
- the source files, CPS*.ASM and CPX*.ASM,
- the public-domain CP/M assembler, LASM.*,
- the public-domain CP/M load/patch utility, MLOAD.*


Symbol Filename System
ADVANT CPVADV Northstar Advantage
AP6551 CPVAPL Apple II, Z80 Softcard, 6551 ACIA in serial interface
AP6850 CPVA65 Apple II, Z80 Softcard, 6850 ACIA in Serial Iiterface
APMMDM CPVAPM Apple II, Z80 Softcard, Micromodem II in slot 2
APCPS CPVCPS Apple II, Z80 Softcard, with CPS multifunction card
BASICNS CPVBNS Northstar Horizon (terminal required)
BBC CPVBBC Acorn "BBC" computer with Acorn Z80 second processor
BBII CPVBB2 BigBoard II (terminal required)
BRAINM CPVBRM Intertec Superbrain using the main port
BRAINA CPVBRA Intertec Superbrain using the Aux port
CIFER2 CPVCIF Cifer 1886 using the VL: Serial port and CP/M V2.2
CIFER3 CPVCI3 Cifer 1886 using the VL: Serial port and CP/M V3.0
CIFER2 CPVCA2 Cifer 1886 using the AUX: Serial port and CP/M V2.2
CIFER3 CPVCA3 Cifer 1886 using the AUX: Serial port and CP/M V3.0
CMEMCO CPVCRO Cromemco with TU-ART card. Terminal required)
COMART CPVCOM Comart Communicator (terminal required)
COMPRO CPVPRO Compupro with Interfacer 4 (or 3). Terminal required.
CPC CPVCPC Amstrad CPC 664 and 6128 and CP/M 3
CPM3 CPVCP3 "Generic": CP/M 3.0 (CP/M Plus) systems (terminal req'd)
CPT85XX CPVCPT CPT-85xx wordprocessor with CP/M
DELPHI CPVDEL Digicomp Delphi 100 (terminal required)
DISC CPVDIS Action Computer Enterprises "Discovery" (terminal req'd)
DMII CPVDM2 DECmate II with CP/M option
GENER CPVGEN "Generic": CPM 2.2 systems with IOBYTE (terminal req'd)
H8QUAD CPVH8Q Heath-8 with Quad 8 i/o board
HEATH CPVH89 Heath/Zenith H89
HORIZON CPVHOR Northstar Horizon (terminal required)
KPII CPVKPR Kaypro-II (and 4; probably supports all Kaypro systems)

"symbol" is the symbol used to select the target system, in CPVTYP.ASM;

"filename" is the name under which the module is supplied in the distribution.

Table 1-2: Systems supported by Kermit-80 (Part 1)



Symbol Filename System
M2215 CPVMRL British Telecom Merlin/Rair Black Box (terminal required)
MDI CPVMDI Morrow Decision I (terminal required)
MMATE CPVMM PMC 101 Micromate (terminal required)
MMDI CPVUD Morrow Micro Decision I (terminal required)
NCRDMV CPVDMV NCR Decision Mate V. (Terminal required?)
NORTHS CPVNS Northstar Horizon with HSIO-4 card (terminal req'd)
OSI CPVOSI Ohio Scientific
PCI2651 CPVPCI Ithaca Intersystems with VI0 card (terminal required)
PCW CPVPCW Amstrad PCW 8256/8512 with serial interface
PX8 CPVPX8 Epson PX-8
RM380ZM CPVRMM Research Machines 380Z with MDS (5.25" discs)
RM380ZF CPVRMF Research Machines 380Z with FDS (8" discs)
S1008 CPVUSM US Microsales S-100-8 (terminal required)
SB6 CPVSB6 Micromint SB-180 with 6Mhz CPU (terminal required)
SB9 CPVSB9 Micromint SB-180 with 9Mhz CPU (terminal required)
TELETEK CPVTET Teletek Systemaster
TORCH CPVTRC Torch computers BBC-B with Z80 second processors
TRS80LB CPVTLB TRS-80 model II with Lifeboat 2.25C CP/M Display
TRS80PT CPVTPT TRS-80 model II with Pickles + Trout CP/M Display
TRSM4 CPVTM4 TRS-80 model IV
VECTOR CPVVEC Vector Graphics
XER820 CPVXER Xerox 820
Z100 CPVZ00 Z-100 under CP/M-85
Z80MU CPVZ80 Z80MU development system on a PC

"symbol" is the symbol used to select the target system, in CPXTYP.ASM;

"filename" is the name under which the module is supplied in the distribution.

Table 1-3: Systems supported by Kermit-80 (Part 2)



Symbol Terminal type
CRT Dumb terminal type. Does not do cursor addressing
ADM3A Lear Seigler ADM 3A
ADM22 Lear Seigler ADM 22
AM230 Ampro 230
H1500 Hazeltine 1500
SMRTVD Netronics Smartvid
SOROQ Soroq IQ-120
TVI912 Televideo 912
TVI925 Televideo 925 or Freedom 100
VT52 Dec VT52 or equivalent (H19)
VT100 Dec VT100 or equivalent
WYSE Wyse 100

"symbol" is the symbol used to select the target system, in CPXTYP.ASM;

"Terminal type" is the type of terminal "symbol" selects.

Table 1-4: Terminals supported by Kermit-80


1.7.2. Downloading Kermit-80

You'll need either a pre-configured .COM file or the system-independent module,
CPSKER, in binary (.COM) or hex (.HEX) format and the system-dependent overlay
for your system (from Tables 1-2 and 1-3). If your system is not listed in the
table, get the generic CP/M 2.2 Kermit or the generic CP/M 3 Kermit. If you
already have a version of Kermit on your micro and you want to install a new
version, simply use your present version to get the new files. Transfer the
files to your system and skip ahead to "merging the modules".

If you do not have a copy of Kermit on your micro, and you cannot borrow a
Kermit floppy but you do have access to a mainframe computer with a copy of the
Kermit-80 distribution, you should read this section.

There are several ways to get CP/M Kermit from a host system to your micro.
The easiest is to "download" the necessary "hex" files into your micro's memory
and then save them on the disk. If you have a terminal emulator program on
your micro which can save a copy of the session to disk, connect to your host,
and type the necessary files. Exit from the emulator, saving the session log,
and edit the session log to extract the hex files. Skip ahead to "merging the

The following is a procedure which, though far from foolproof, should allow you
to get a version of Kermit to your CP/M based micro. It depends upon the host
prompt, or at least the first character of the host prompt, being some
character that cannot appear in a hex file (the valid characters for hex files
are the digits 0-9, the upper case letters A-F, the colon ``:'', carriage
return, and line feed). As soon the prompt character is encountered, the
transfer will terminate. If your host does not issue a prompt that will
accommodate this scheme, you can achieve the same effect by adding an atsign
``@'' to the very end of the hex file before sending it from the host. The
program below looks for an atsign (the normal DEC-20 prompt, hex 40).
DECSYSTEM-10 users would look for a dot, hex 2E; VAX/VMS or UNIX users would
look for a dollar sign, hex 24; UNIX C-Shell users would look for a percent
sign, hex 26.

1. For CP/M 2.2 systems, connect to a floppy disk with plenty of free
space. Run DDT and type in the following (the comments should not
be typed in; they are there just to tell you what's happening):
(Note that this wont work for CP/M Plus or 3.0 systems!)

-a100 ;Begin assembling code at 100
0100 LXI H,2FE ;Where to store in memory
0103 SHLD 200 ;Keep pointer there
0106 MVI E,D ;Get a CR
0108 MVI C,4 ;Output to PUNCH (send to HOST)
010A CALL 5
010D MVI C,3 ;Input from READER (read from HOST)
010F CALL 5
0112 ANI 7F ;Strip parity bit
0114 PUSH PSW ;Save a and flags
0115 MOV E,A ;Move char to E for echo
0116 MVI C,2 ;Output to screen
0118 CALL 5
011B POP PSW ;Restore A and flags
011C CPI 40 ;(or 4E,24,26,etc) System prompt?
011E JZ 127 ;Yes, have whole file in memory
0121 CALL 17A ;No, store another byte
0124 JMP 10D ;Read another byte
0127 MVI A,1A ;Get a Control-Z (CP/M EOF mark)
0129 CALL 17A ;Store it in memory
012C LXI H,300 ;Get memory pointer
012F SHLD 202 ;Store as DMA pointer
0132 LDA 201 ;Get 'HI' byte of memory pointer
0135 STA 200 ;and store it as 'LO' one
0138 XRA A
0139 STA 201 ;Zero 'HI' byte (slow *256)
013C MVI C,16 ;Make NEW file
013E LXI D,5C ;With FCB1
0141 CALL 5
0144 CALL 15E ;Write 128 bytes (sector)
0147 CALL 15E ;Write another sector
014A LXI H,FFFF ;Get a 16-bit Minus One
014D XCHG ;into DE
014E LHLD 200 ;Get 256-byte counter
0151 DAD D ;Decrement
0152 SHLD 200 ;and store back
0155 MVI A,2 ;Check if
0157 CMP L ; 256-byte counter down to offset
0158 JZ 183 ;Yes, we're done
015B JMP 144 ;Keep writing..
015E LHLD 202 ;Get file-pointer
0161 XCHG ;into DE
0162 MVI C,1A ;Set DMA-address
0164 CALL 5
0167 MVI C,15 ;Write sector (128 bytes)
0169 LXI D,5C ;using FCB1
016C CALL 5
016F LHLD 202 ;Get file-pointer
0172 LXI D,80 ;128-bytes
0175 DAD D ;added to file-pointer
0176 SHLD 202 ;and save
0179 RET ;and return
017A LHLD 200 ;Get Memory-pointer
017D MOV M,A ;Store character
017E INX H ;Increment Pointer
017F SHLD 200 ;and save
0182 RET ;and return
0183 MVI C,10 ;CLOSE file
0185 LXI D,5C ;using FCB1
0188 CALL 5
018B JMP 0 ;Force WARM BOOT
-^C ;(Type Control-C) Return to CP/M
A>SAVE 1 FETCH.COM ;Save program, we need to run it twice.

Figure 1-1: Bootstrap program for Kermit-80 and CP/M Version 2.2


Alternatively, an assembler source file for this program is
distributed with CP/M Kermit as CPKFET.ASM. You might prefer to
type the assembler version in and assemble and load it (ASM CPKFET,
LOAD CPKFET, or MASM CPKFET, MLOAD CPKFET), to let the assembler and
loader catch any typing errors.

2. Connect to your host using a terminal or a terminal emulation
program. Ensure that your host does not have your terminal in "page
mode" (does not pause at the end of each screenful).

3. Tell the host to display the first hex file (the system-independent
module) at your terminal, e.g. give a command like TYPE CPSKER.HEX,
without a terminating carriage return.

4. Return to your micro by switching the cable from the terminal to the
micro, or by terminating the micro's terminal program.

5. Make sure your IOBYTE is set so that RDR: and PUN: correspond to the
I/O port that is connected to the host (this would normally be the
case unless you have done something special to change things).

6. Load the program you entered in the first step with DDT, and use it
to capture the first hex file:

-icpsker.hex ;Setup FCB for file CPSKER.HEX
-g100,179 ;Execute the program.

Now there should be a file CPSKER.HEX on your connected disk.

7. Return to the host, and tell it to display the second hex file (the
system-dependent module for your configuration). Again, do not type
the terminating carriage return.

8. Return to your micro, and run the capture program again:

-icpxovl.hex ;Setup FCB to create CPXOVL.HEX
-g100,179 ;Execute the program.

Now there should be a file CPXOVL.HEX on your connected disk.
Replace CPXOVL.HEX in this example with the appropriate overlay file
for your system.

Merging the files:

1. For purposes of illustration, we will assume the system-dependent
overlay is called "cpxovl.hex". The two hex files may be combined
with MLOAD or DDT. If you already have a running Kermit, you can
transfer MLOAD.HEX to your system and create MLOAD.COM by running
LOAD. If you're bootstrapping Kermit, you could transfer MLOAD.HEX
to your system the same way you got the other two .HEX files, but
it's probably simpler to use DDT to get Kermit running, and get
MLOAD later if you need it.

2. Using MLOAD, the two pieces may be easily merged:

A>mload kerm411=cpsker,cpxovl
(Some messages about program size, etc...)

3. If you don't have MLOAD running, it's a bit more complex:
A>ddt cpsker.hex
3500 0100
xxxx 0000
A>save dd kerm411.com

The page count ("dd") used in the SAVE command is calculated from
the last address ("xxxx") given by DDT in response to the R command:
drop the last two digits and add 1 if they were not zero, then
convert from hexadecimal (base 16) to decimal (base 10): 684F
becomes 69 hex, which is 105 decimal (5 times 16 plus 9) -- but 6700
becomes 67 hex, or 103 decimal (consult an introductory computing
book if you don't understand number base conversion).

4. If you are using the Z80MU CP/M and Z80 development toolkit on an
IBM PC or clone, then follow the same instructions as for a genuine
CP/M system. When you have loaded your file, you will have to ship
the .COM or two .HEX files to the target CP/M system. (Possibly
using a previous issue of Kermit?)

5. Note that CP/M hex files have checksums on each line. If there were
any transmission errors during the downloading process, MLOAD or DDT
will notice a bad checksum and will report an error (something like
"Illegal Format"). If you get any errors during loading, either fix
the hex file locally with an editor, or repeat the transfer.

You now should have a running version of Kermit-80, called KERM411.COM.

Test your new Kermit by running it. If it gives you a prompt, it might be OK.
(don't delete your old one yet...). Instead of a prompt, you could get one of
two messages indicating that the configuration information is invalid:

?Kermit has not been configured for a target system


?Consistency check on configuration failed

Of course, neither of these messages should appear if you're building Kermit
from the distribution kit. The first message indicates that the overlay was
not found where the system-independent module expected to find it, probably
because the overlay address is incorrect; the second indicates that the version
of CPXLNK used in the system-dependent module is incompatible with the system-
independent module.

Once you are satisfied that KERMIT40 works correctly, you should rename your
old KERMIT.COM to something else, like OKERMIT.COM, and rename KERMIT40.COM to

1.7.3. Assembling Kermit-80 from the sources

Kermit-80 is built in two pieces from the following files:

The system-independent files:
CPSKER.ASM header file
CPSDEF.ASM definitions for both KERMIT and KERSYS
CPSMIT.ASM initialization, main loop, miscellaneous commands (BYE, EXIT,
CPSCOM.ASM second part of commands, status and set file
CPSPK1.ASM part 1 of the KERMIT protocol handler (SEND, RECEIVE,
LOGOUT,and FINISH commands)
CPSPK2.ASM part 2 of the KERMIT protocol handler
CPSSER.ASM SERVER routines (for the future)
CPSTT.ASM the transparent commands (TRANSMIT, CONNECT)
CPSWLD.ASM the wildcard handler
CPSCMD.ASM the command parser
CPSUTL.ASM utility routines and data
CPSDAT.ASM data space and the overlay definitions
CPXLNK.ASM linkage area description

The system-dependent files:
CPXTYP.ASM system selection
CPXLNK.ASM system overlay specification and jump table
CPXCOM.ASM common routines for all systems
CPXSWT.ASM system selector or switcher

One of:
CPXSYS.ASM family file for some system-specific code
CPXTOR.ASM family file for Torch, Superbrain, PCI2651 etc
CPXNOR.ASM family file for Northstar and Comart machines
CPXMRL.ASM family file for British Telecom Merlin/Rair Black Box
CPXSB.ASM family file for Micromint SB-180 systems
CPXCIF.ASM family file for Cifer systems
CPXHEA.ASM family file for Heath/Zenith systems
CPXAPP.ASM family file for Apple II systems
CPXPCW.ASM family file for Amstrad PCW 8256/8512 machines
CPXBBI.ASM family file for BigBoard, Kaypro and Xerox 820 systems
CPXSYO.ASM family file for Sanyo MBS-1100 systems
CPXTM4.ASM family file for Tandy Model 4 with CP/M systems
CPXGNI.ASM family file for Video Genie systems
CPXPRO.ASM family file for Compupro systems
CPXZ80.ASM family file for the Z80MU development system

and if you use a terminal,
CPXVDU.ASM display codes for VDUs etc. Not always required

The system-independent module contains all of the system-independent files
except for CPXLNK.ASM, which is assembled into the system-dependent module to
provide the structures needed to connect the two modules. As distributed, the
system-independent module is named CPSKER.HEX. If you have a copy of
CPSKER.HEX, you do not need to reassemble the system-independent module to
configure Kermit for your system.

The system-dependent module consists of CPXTYP.ASM, CPSDEF.ASM, CPXLNK.ASM,
CPXVDU.ASM, if your system uses a terminal for the console. One copy of the
system-dependent module is supplied already assembled for each supported
system; the filename may be obtained from tables 1-2 and 1-3. If a terminal is
required for a system, a CRT (glass TTY device) has been selected.

After assembling the two pieces separately, they are combined with DDT or MLOAD
into a system-specific Kermit.

If you want to rebuild the system-independent module, the only change you may
need to make is to select the assembler to be used, in CPSKER.ASM. Define one
of MAC80, M80, or LASM to TRUE to select it as the assembler; the others should
be defined FALSE.

Assuming you have the Microsoft Macro Assembler package (M80/L80), you'll need
to do the following:

A>m80 cpsker=cpsker.asm
A>l80 /p:100,cpsker,cpsker/n/e

This will produce CPSKER.COM.

If you are using LASM instead, do this:

A>lasm cpsker

LASM will generate CPSKER.HEX and CPSKER.PRN. LASM allows options to be
specified in the same way as the standard assembler, ASM, so the command

A>lasm cpsker.abz

will read the source files from drive A, send the .HEX file to drive B, and
suppress the listing file.

If you are using the Z80MU development system on an IBM PC or clone, then
assemble your files using either LASM and MLOAD or M80 and L80, as if you were
using a genuine CP/M-80 system. Note that you will still have the problem of
transferring your assembled files to the target CP/M system.

If you want to generate a system-dependent overlay for a particular system, or
want to change the terminal supported, you'll need to check three areas in

First, the overlay start ADDRESS. The symbol "ovladr" is EQUated to the
address of "LNKFLG" in the system-independent module, as the starting address
of the overlay (7000H for version 4.11). You'll need to know this value if
you're building the overlay with M80/L80. You won't normally need to change
this value.

Second, the assembler being used. Again, define one of MAC80, M80, and LASM to
be TRUE to select it, and define the others to be FALSE. The two modules
(system-independent and system-dependent) do not need to be built with the same

Third, the system configuration. Locate your system in tables 1-2 and 1-3,
then define the appropriate symbol TRUE, and the rest FALSE. If the system
comes with a builtin console terminal, define all the terminal switches FALSE.
If the system uses an external terminal as the console, locate the terminal in
table 1-5 and define the appropriate symbol TRUE, and the remainder FALSE. If
the terminal is not listed in table 1-5, use the CRT switch; in this case, VT52
emulation is not supported.

In addition, there are a few general and system-specific symbols which may be
altered to fit your system:

APSLOT For Apple with 6551 ACIA, defines the slot number of the serial

CPUSPD Processor speed in units of 100KHz (currently used only for
bbII and kpII for timing loops)

TAC For users connecting through ARPAnet TACs: set to TRUE if you
wish the default TACTRAP status to be ON. (This may be
overridden with the SET TACTRAP command). If you're not
connecting through a TAC, set tac to FALSE and ignore tacval.

TACVAL For ARPANET TAC users: defines the default TAC intercept
character (may be overridden with the SET TACTRAP command).

If you are just assembling an existing configuration, you'll need to edit
CPXTYP.ASM only. If you are adding support for a new system, you should not
modify CPSDEF.ASM or CPXLNK.ASM; if you do, you'll have to change the system-
independent module also. Eventually, CPXSYS.ASM will be split into separate
files, each of which will generate one or more related systems. When this
happens, you'll want to pick the one closest to your system to use as a
starting point.

After editing CPXTYP.ASM as necessary, assemble and link the overlay as

- With M80 (where "xxxx" is the hex value of ovladr from CPXLNK.ASM):

A>m80 cpxtyp=cpxtyp.asm
A>l80 /p:xxxx,cpxtyp,cpxtyp/n/x/e

- With LASM:

A>lasm cpxtyp

With an IBM PC or clone using the Z80MU softwrae, follow the instructions as if
you were using a real CP/M system.

The overlay (CPXTYP.HEX) may then be merged with the system-independent module
as described above (creating a runnable Kermit from the distribution kit).

If you are using the Z80MU development system on a PC, and already have a
running Kermit-80 v3.9 or later, you can merge the two .HEX files into a .COM
file with LINK80 (TOPS 10/20), MLOAD (Z80MU), L80 (Z80MU), and transfer the new
.COM file to your micro with Kermit:

- Z80MU on a PC and MLOAD:


- Z80MU on a PC and C80:


producing KERNEW.COM.


Symbol Terminal description
crt Basic CRT, no cursor positioning
adm3a ADM3A Display or lookalike
adm22 ADM22 Display or lookalike
am230 Ampro 230
h1500 Hazeltine 1500
smrtvd Netronics Smartvid-80
soroq Soroq IQ-120
tvi912 TVI 912
tvi925 TVI 925, Freedom 100
vt52 VT 52 or VT52 emulator such as Heath H19, H29, etc.
vt100 VT 100 or emulator (most ANSI terminals should work)
wyse Wyse 100

Table 1-5: Terminals known to Kermit-80


1.8. Adding Support For A New System

Kermit-80 is built from a common set of source files; the system-dependent
module makes heavy use of conditional assembly (this complication will be
removed in future releases). The system dependencies arise from attempts to
answer some questions:

1. What kind of terminal is to be supported?

For many micros, the console is an integral part of the system, but
others can use an external terminal. In either case, the commands
to manipulate the screen (position the cursor, erase the screen,
etc) must be defined.

2. How is the serial line accessed?

For systems supporting the IOBYTE function, this is straightforward;
the symbol "IOBYT" is defined TRUE. If the serial line is accessed
with IN and OUT instructions, it may be possible to use the simple
I/O routines provided. In this case, the symbol "INOUT" is defined
TRUE, the MNPORT and MNPRTS are defined to be the data and control
addresses, respectively, and bit masks for testing for "input data
available" and "output buffer empty" must be defined. If the
interface is strange, leave IOBYT and INOUT set to FALSE, and
provide the I/O routines.

3. What initialization is necessary?

You may wish to set the baud rate or configure the serial line at
startup. Examples for a number of devices are present.

4. What special features are to be supported?

You may want to provide the capability to select one of several
serial lines with the SET PORT command, or to change the speed of
the serial line with the SET SPEED command. To do this, you'll need
to build a command table, using the systems already supported as
examples. The ability to send a BREAK signal is desirable. Again,
examples for several different interfaces (ACIA, SIO, etc) are

5. Do you want to design an external terminal type?

There is a jump entry in the overlay file to allow users to add
their own termainl emulator. If you write the code for such an
emulator, you must load this jump address with the address of your
emulator, and SET TERMINAL EXTERNAL from within Kermit. All
characters will be passed to this routine during connect mode.

1.9. Notes on New Features in Kermit-80 Version 4

- Debugging aids: SET DEBUG ON will add two fields to the SEND/RECEIVE
display, labelled "Spack" and "Rpack". These display the last packet
sent and received. Of course, this slows down the transfer,
especially if the console is an external terminal. SET DEBUG OFF
removes these fields. The VERSION command displays the name, edit
number, and edit date of several of the modules that make up Kermit.

- TAC support: ARPAnet TACs (and many other communication devices such
as terminal concentrators, modems, port contention units, network
PADs, etc) use a printing character (like "@") as an intercept
character, to allow commands to be issued to the TAC, or modem, etc.
In order to send this character to the host, it must be typed twice.
The command "SET TAC CHARACTER" to Kermit enables the "TACtrap" and
asks the user to specify the TAC intercept character. This character
will be automatically doubled when it appears in Kermit protocol
messages (sent by the SEND or RECEIVE commands) or when it appears in
a file being sent with the TRANSMIT command. It is not automatically
doubled when typed by the user in CONNECT mode. "SET TAC ON" enables
the TACtrap but does not change the TAC intercept character, which is
initially "@". "SET TAC OFF" disables the TACtrap.

- File buffering: Previous versions of Kermit-80 buffered only one
sector (128 bytes) at a time during file transfer operations. This
version buffers 16Kbytes at a time, reducing the number of times the
floppy drive must be spun up and down, and increasing the effective
throughput of the link. If the disk transfer rate is too slow,
however, the remote Kermit may time out and retransmit packets. This
will show up on the screen in the "Retries:" field; if this occurs
after disk activity, you may want to increase the timeout value on
the remote Kermit, SET BUFFER <new value> while in Kermit,or
reassemble Kermit with a smaller value for MAXSEC (in CPSDEF.ASM)
This buffer is also used by the TRANSMIT command; the log file
enabled by the LOG command is still written a sector at a time.

This section is intended for people wanting to implement their own versions of
Kermit-80 for computers not already defined.

The system independent code communicates to routines for a specific system
through a set of tables. These tables are defined in CPXLNK.ASM, and should
not be modified between revisions of Kermit. If an entry is added or deleted,
then the whole of Kermit-80 needs reassembling. Make sure that the changes to
CPXLNK.ASM are duplicated in CPSUTL.ASM, which has the system independent
equivalent of CPXLNK.ASM.

The following entries/definitions apply to revision 4.09. There have been
three additional entries since revision 4.05.

The table is split into three sectors; The first section defines two byte
"words" giving 16 bits of interface data; The second set is a set of jumps to
various functions, and finally the third set a set of pure data bytes.

1.9.1. Interface Data.

LNKFLG Must be first entry in overlay at overlay address. Is a two
byte address giving the size of the linkage table. This is
used to check for consistency of overlay's

ENTSIZE Length of entry table, also used for consistency checking after
the overlay. Currently 6

SYSEDT The address of a dollar-terminated string giving the overlay
revision level and date. Points to a string like:
CPXSYS.ASM(33) 4-JUN-1986$

FAMILY The address of a dollar-terminated string giving the Family
overlay revision level and date. If the system is in
CPXSYS.ASM rather than a particular Family overlay, it is
simply a pointer to $

1.9.2. Jump Table.

This is split into three main sectors-

1. Input/Output routines

2. Screen formatting routines

3. other system dependent routines

Parameters None
Returns None
Description selects the modem port. Most systems do nothing and simply
return. HL,DE and BC registers preserved.

Parameters None
Returns None
Description Output the character in E register to the communications line.
BC,DE,HL registers preserved.

Parameters None
Returns Accumulator either 0 or character from comms line if available
Description Check modem for character and if so, return it in A. HL,DE,BC
registers preserved, flags and accumulator lost.

Parameters None
Returns None
Description Clear any pending characters in the input buffer from the
modem. No registers are preserved.

Parameters None
Returns None
Description Select the console. This is a null subroutine for most
systems, but for IOBYTE systems selects the console.

Parameters Character in E
Returns None
Description Send the character in E to the console. Any quirks of system
responding in an odd manner should be handled. No registers

Parameters None
Returns Zero or character in A.
Description Get a character from the console or return a null if no
character to be read. No registers are preserved.

Parameters Character in E
Returns None
Description Send the character in E to the printer. The console is
selected. Only DE registers are preserved

Parameters None
Returns 00H or 0FFH in A register
Description Test the printer to see if it is ready to receive a character
to be printed. If a 00H is returned then the printer is ready
to receive a character.

Parameters Character to be sent to the user supplied terminal emulator in
the E register
Returns None
Description If the user has supplied a terminal emulator in the overlay
code, EXTTER will be a JMP <non zero address>. If SET TERMINAL
EXTERNAL has been set, all caharcters will be passed verbatim
to this terminal emulator. If there is no external emulator,
this code will never be called. The user should reset terminal
conditions on initialisation of both the system and before
CONNECT. All registers should be preserved.

Parameters Any required for calling BDOS
Returns Any expected from the called BDOS routine
Description This is an alternative entry to BDOS. This entry will also
check the printer status etc. For full details see the code
for the BDOS trap in CPSUTL.ASM.


Parameters None
Returns None
Description Clear the current line on the terminal

Parameters None
Returns None
Description Erase the current position (after a backspace)

Parameters None
Returns None
Description Make delete (7FH) look like a backspace. Some systems do a
backspace, space, backspace automatically others have to
simulate it

Parameters None
Returns None
Description Clear the screen and place the cursor at the top LH corner

Parameters None
Returns None
Description Place the cursor on the line for the Kermit-80 prompt after a
file transfer. (Usually line 13)

Parameters None
Returns None
Description Move cursor to the error message field on the file transfer
format screen

Parameters None
Returns None
Description Move the cursor to the filename field

Parameters None
Returns None
Description Move the cursor to the packet count field

Parameters None
Returns None
Description Move cursor to the retry count field

Parameters None
Returns None
Description Move cursor to the status field

Parameters None
Returns None
Description Move to the receive packet field (debugging use)

Parameters None
Returns None
Description Move to the send packet field (for debugging use)


Parameters None
Returns None
Description Initialize the system specific items. No registers are
preserved. Any initialization is done once only when Kermit-80
is first loaded.

Parameters None
Returns None
Description Program termination. De-initialize anything in preparation for
a return to CP/M

Parameters None
Returns None
Description Initialize anything before entering the connect state.

Parameters None
Returns None
Description System dependent close routine when exiting connect state

Parameters None
Returns None
Description Help routine to test for any extensions to the escape menu
during the connect state. If a system has any special feature
it can use during connect mode, then it can be tested as
<escape-character>xxx. This entry is a string for printing to
the console for an <escape-character>? Often used for
generating breaks or controlling a modem.

Parameters None
Returns None
Description This is a test-and-jump on receipt of an escape sequence not
understood by Kermit-80. If the character in A is not
recognized by your version of Kermit=80, do a rskip

Parameters Character in E
Returns Character in E. Either a 00H or anything else in A
Description Test the character in E. If it may not be printed to the
console, set A to zero. All other registers preserved.
NB <XON>,<XOFF>,<DEL>,<NULL> are always rejected.

Parameters None
Returns None
Description System dependent processing for the BYE command. (eg hang up
the phone)

Parameters Value from table in DE
Returns None
Description The system dependent code for baud rate change. DE contains
the two byte value from the baud rate table. This value is
also stored in "SPEED"

Parameters Value in DE
Returns None
Description The system dependent code for setting the port. The parameters
are passed in DE, which are obtained from the port tables

Parameters String pointer in DE
Returns None
Description Setup the screen display for file transfer. The Kermit version
string is pointed to by DE. If the terminal is not capable of
cursor addressing (eg dumb glass TTY) then only the screen is
cleared and the version string is printed.

Parameters Row number in B, column number in C
Returns None
Description Move the cursor to row B, column C where B=1,C=1 is top LH
corner of screen. The routine should first end a "cursor
position" leading string (up to four characters) then use the
parameters given to complete the versions cursor position

Parameters None
Returns K bytes free in HL
Description Get the amount of free disk space on the selected disk drive.
This could be in the system independent code. Automatically
detects CP/M V2.2 or V3.0. No registers saved.

Parameters Source Pointer in HL
Destination Pointer in DE
Byte count in BC
Returns None
Description Move (BC) bytes from (HL) to (DE) Z80 based systems do an LDIR,
while 8080 systems do it as a loop. All registers destroyed

Parameters $ terminated string pointed to by DE
Returns None
Description Print the string onto the console.


PTTAB WORD Points to VT52 equivalent escape sequences.

SPDTAB WORD Address of baud-rate command table, or 0 if table
does not exist

SPDHLP WORD Address of baud-rate help table, or 0 if SET SPEED is
not supported.

PRTTAB WORD Address of port command table or 0 if SET PORT is not

PRTHLP WORD Address of port help table or 0 if SET PORT is not

TIMOUT BYTE FUZZY-TIMER. Set to value suitable to your system
(depends largely on CPU speed)

VTFLG BYTE VT52 emulation flag. Set to 0 if terminal emulates a
VT52, 01 if emulation is required, or 0FFH if emulations not
possible (eg for "CRT")

ESCCHR BYTE default escape character-usually control-] but
sometimes control-\

SPEED WORD Storage space for baud-rate. Set to 0FFFFH as baud
rates are initially unknown. Note that the STATUS routine only
looks at the first (least significant) byte.

PORT WORD Storage space for port. Set to 0FFFFH as ports may
not be implemented, and is initially unknown

PRNFLG BYTE Printer copy flag-if O no copy. Anything else =>
copy to printer

DBGFLG BYTE Debugging flag. If O then no debugging to be done.
(ie writing of debugging info during a file transfer)

ECOFLG BYTE Local ECHO flag (default is off)

FLWFLG BYTE File warning flag. If set to 1 will not overwrite
files already existing on disk with some-named files being

IBMFLG BYTE IBM system is the host-assume IBM file transfers etc

CPMFLG BYTE Flag indicating type of CP/M files to be transferred.
Default setting - DEFAULT

PARITY BYTE Type of parity in use
0 = Even parity
3 = Mark parity
6 = No parity (8th bit is data)
9 = Odd parity
12 = Space parity

SPSIZ BYTE Size of send packet

RPSIZ BYTE Size of receive packet

STIME BYTE Send timer (time-out)

RTIME BYTE Receive timer (time-out)

SPAD BYTE Send Padding (default=0)

RPAD BYTE Receive Padding (default=0)

SPADCH BYTE Send Padding character (default=NULL)

RPADCH BYTE Receive Padding character (default=NULC)

SEOL BYTE Send EOL character (default=CR)

REOL BYTE Receive EOL character (default=CR)

SQUOTE BYTE Send quote character (default=#)

RQUOTE BYTE Receive quote character (default=#)

CHKTYP BYTE Ascii value of checktype
31H="1"=checktype1 (6bits)
32H="2"=checktype2 (12bits)
33H="3"=CCITT checksum (CRC)
Default is 31H("1")

TACFLG BYTE If set to on (non zero) send the TACCHR twice. This
is for ARPA TAC users, where the TAC swallows one "wakeup"
character. If sent twice the TAC will pas one on and go back
to normal mode.

TACCHR BYTE Desired TAC character. It is ignored if TAC trapping
is turned off. Value to send twice if TAC interception is set
on. Default=0, but set to commercial AT if the conditional
assembly flag TAC is set true

BUFADR WORD Address of Multi-Sector buffering for I/O

BUFSEC BYTE The number of bytes the big buffers can hold.
Default is 1. (0=256 sectors).

FFUSSY BYTE Indicates if funny characters may be used in CP/M
file names (eg <>.,;?#[]) If zero, allow anything. Default is

BMAX SPACE:(2bytes) Highest block number on selected disk drive

BMASK SPACE:(1byte) (Records/block)-1

BSHIFTF SPACE:(1byte) Number of shifts to multiply by rec.block

NNAMS SPACE:(1byte) Counter for file-names per line

1.10. Future Work

Work that needs to be done in future releases includes:

- Merge in support for additional CP/M-80 systems, particularly those
for which support was recently added to the monolithic v3.x source.

- Break up CPXSYS into discrete source files, one for each system.
These source files should serve as simple models for adding support
for new systems to Kermit-80 -- only the very basic screen
definitions, flags, i/o primitives, initializations, and so forth
should appear in each system-dependent file.

- Addition of missing features -- compression of repeated characters
during packet transmission, transmission of file attributes
(particularly size, so that "percent done" can be displayed for both
incoming and outbound files), command macros, more advanced login
scripts, remote operation and server mode, etc etc. Any offers??

Index (Page numbers are approximate)...

8080 5, 6

Append 2
ARPAnet 10
Attention Character 10
Autoreceive 3

Baud 4
Block Check 3
Bootstrapping CP/M Kermit 8
Break 2
Buffer size 3
Bye 2

Carriage Return 2
Connect 2
Control-C 2
Control-X 2
Control-Z 2
Copy 2
CP/M 6
CP/M-80 Kermit 1
CR 2

Debug 3
Default Disk 3
Directory 2
Directory file size 3
Downloading 8

Eighth-Bit Prefix 4
Erase 2
Escape Character 2, 3
Exit 2
External Terminal Emulation

File Copying 2
File-mode 3
File-Warning 3
Flow Control 4

Generic Kermit-80 5

Help 2

Input 2
Intercept Character 10

Local 2
Local-Echo 4
Logging 4

No-exit 4


Pad character 4
Parity 4
Pause 3
Port 4
Print 3


Set padding 4
Set Receive 4
Set Send 4
Set Start of packet 4
Show 4
Status 4

TAC 10
TacTrap 4
Take 4
Terminal Emulation 4
Timeout 2, 7
Type 5


Virtual Terminal 2
VT100 Emulation 4
VT52 Emulation 4

Warning 4


Z80 6

Table of Contents (page numbers are approximate)

1. CP/M-80 KERMIT 1

1.1. Credits 1
1.2. What's New 1
1.3. Overview of Kermit Operation 1
1.4. Summary of CP/M 1
1.5. Kermit-80 Description 2
1.6. Kermit-80 Flavors 5
1.6.1. Generic Kermit-80 5
1.6.2. CP/M 3 Kermit 5
1.6.3. System-Specific Versions 5
1.7. Installation of Kermit-80 6
1.7.1. Organization of Kermit-80 7
1.7.2. Downloading Kermit-80 8
1.7.3. Assembling Kermit-80 from the sources 9
1.8. Adding Support For A New System 10
1.9. Notes on New Features in Kermit-80 Version 4 10
1.9.1. Interface Data. 10
1.9.2. Jump Table. 10
1.10. Future Work 12

Index 13

List of Figures

Figure 1-1: Bootstrap program for Kermit-80 and CP/M Version 2.2 8

List of Tables

Table 1-1: Kermit-80 SET PORT Options 5
Table 1-2: Systems supported by Kermit-80 (Part 1) 7
Table 1-3: Systems supported by Kermit-80 (Part 2) 7
Table 1-4: Terminals supported by Kermit-80 8
Table 1-5: Terminals known to Kermit-80 10
rmore, not all
systems that implement IOBYTE do so in the s





Купить платы, готовые блоки, наборы микросхем, прошитые ПЗУ, микропроцессоры на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы


Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу