aboutsummaryrefslogtreecommitdiff
path: root/doc/cpkerm.mss
diff options
context:
space:
mode:
authorJeff Armstrong <jeff@approximatrix.com>2026-10-25 17:42:06 -0400
committerJeff Armstrong <jeff@approximatrix.com>2026-10-25 17:42:06 -0400
commitebb2ff2af569d5822b70ee555a32d27cf7494816 (patch)
tree7ac5e7b3fa73f7a8d996129086932ecce66374ad /doc/cpkerm.mss
downloadkermit-80-ebb2ff2af569d5822b70ee555a32d27cf7494816.tar.gz
kermit-80-ebb2ff2af569d5822b70ee555a32d27cf7494816.zip
Initial import of 4.11HEADmain
Diffstat (limited to 'doc/cpkerm.mss')
-rw-r--r--doc/cpkerm.mss2616
1 files changed, 2616 insertions, 0 deletions
diff --git a/doc/cpkerm.mss b/doc/cpkerm.mss
new file mode 100644
index 0000000..2318208
--- /dev/null
+++ b/doc/cpkerm.mss
@@ -0,0 +1,2616 @@
+@Part(CPKERM,root="kuser")
+@string(-cpmversion="@q<4.11>")
+@Chapter<CP/M-80 KERMIT>
+@index<CP/M-80 Kermit>
+
+@case(device,file="********@*
+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.@*********")
+
+@Begin<Description,Leftmargin +12,Indent -12,spread 1>
+@i(Program:)@\Mike Freeman, Bonneville Power Administration, Vancouver, WA,
+USA, with contributions from many others.
+
+@i(Language:)@\8080 Assembler, LASM, M80, or MAC80
+
+@i(Version:)@\@value(-cpmversion)
+
+@i(Date:)@\April 1, 1991
+
+@i(Documentation:)@ @ Christine Gianone, Columbia University, with
+contributions from many others.
+
+@end<Description>
+@label<-k80>
+
+@i<KERMIT-80 Capabilities At A Glance:>
+@begin<format,leftmargin +2>
+@tabclear()@tabset(3.5inches,4.0inches)
+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
+@end<format>
+
+@Section<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),
+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.
+
+@section<What's New>
+
+Features added since version 4.09 include:
+@begin<itemize>
+SET COLLISION {BACKUP/DISCARD/OVERWRITE/RENAME}
+
+SET INCOMPLETE-FILES {DISCARD/KEEP}
+
+Many REMOTE commands, including some REMOTE SET commands
+
+RENAME command to rename CP/M files from within Kermit-80
+
+SET RECEIVE/SEND PACKET-LENGTH nn (nn <= 94)
+
+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,
+respectively.
+
+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 Australia.
+
+Kermit-80 now supports the Ampro Little Board system.
+@end<itemize>
+
+@section<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 @i<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 @i<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.
+
+@Section<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@q<.>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@q<.>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@q<.>2, with
+lots of added features. Kermit-80 uses very few additional version
+3@q<.>0 features, and only where absolutely necessary.
+
+CP/M file specifications are of
+the form @q(DEV:XXXXXXXX.YYY), where
+@begin<description>
+ @q(DEV:)@\is a @i<device name>,
+normally the A:@ or B:@ floppy. If omitted, the device name defaults
+to your connected diskette.
+
+@q(XXXXXXXX)@\is a @i<filename> of up to 8 characters.
+
+@q(YYY)@\is the @i<file type>, up to 3 characters.
+ @end<description>
+ 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 "@q(*)"
+matches a whole field, a "@q(?)" matches a single character, including
+space. Examples: "@q(*.F??)" specifies all files whose @i<types> start
+with F and are 1, 2, or 3 characters long; "@q(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:
+ @Begin<Description>
+DIR @i<file>@\Lists the the names of the specified files. The
+default file specification is "*.*". Example: @w<"@q(DIR B:*.FOR)">.
+
+ERA @i<file>@\Erases (deletes) the specified file(s); wildcards allowed.
+
+REN @i<new> @i<old>@\Changes the name of a file from @i<old> to
+@i<new>, e.g.@*
+@w<"@q(REN NEW.FOR=OLD.FOR)">.
+
+SAVE@\Saves the specified number of memory blocks into a file.
+(Not on CP/M Plus systems)
+
+TYPE @i<file>@\Types the specified file on the screen, e.g.
+@w<"@q(TYPE FOO.TXT)">.
+ @End<Description>
+The most important programs are:
+ @Begin<Description>
+STAT@\Gives statistics on disk usage; sets and displays IOBYTE.
+(Not on CP/M Plus systems)
+
+PIP@\@u<P>eripheral @u<I>nterchange @u<P>rogram. Copies files. In
+response to the "@q(*)" prompt, give a command of the form
+ @example<disk:outfile=disk:infile>
+ Wildcards ("@q(*)" for a whole field or "@q(?)" for a letter) can be used.
+Examples: "@q(A:=B:*.*)" to copy a whole disk, "@q(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. "@q(PIP A:=B:*.*)".
+
+@End<Description>
+
+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.
+
+@Section<Kermit-80 Description>
+
+Since Kermit-80 runs on a standalone micro, it is always in control of the
+screen -- it is always in "@i<local>@index<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.
+
+@index<Timeout> 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
+@Index[Timeout] timeout, namely NAK@Index[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 intervention.
+
+File transfers may be interrupted in several ways.
+@begin<description>
+@Index[Control-C]
+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.
+
+@Index[Control-X]
+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.
+
+@Index[Control-Z]
+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 Control-X.
+
+@Index[Carriage Return]
+@Index[CR]
+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 packet.
+@end<description>
+
+@heading<Kermit-80 Commands>
+
+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:
+@begin<description,leftmargin +8,indent -8>
+@Index[Break]
+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.
+
+@Index[Bye]
+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
+level.
+
+@Index[Virtual Terminal]@Index[Escape Character]@Index[Connect]
+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":
+@begin<description,spread 0,leftmargin +4, indent -4>
+C@\Close Connection, return to @q(Kermit-80>) command level.
+
+S@\Display Status of connection, but maintain remote connection.
+
+@q<?>@\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
+
+@q<^]>@\(or whatever - a second copy of the escape character) Send the
+escape character itself to the remote host.
+ @end<description>
+
+@Index[Copy]
+@Index[File Copying]
+COPY @i<source> @i<destination>
+@\Copy a named file to another file, either on the same drive or another
+drive.
+
+@Index[Directory]
+DIRECTORY@\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.
+
+@Index[Erase]
+ERASE @i<filespec>@\This executes the CP/M ERA command on the specified
+file(s). The names of the files being erased are not displayed.
+
+@Index[Exit]
+EXIT@\Quit back to CP/M. The return is made by a JMP 0 (Warmstart). QUIT
+is a synonym for EXIT.
+
+@Index[FINISH]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.
+
+@Index[GET]GET @i<filespec> [@i<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 example:
+@example<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.
+
+@Index[Help]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.
+
+@Index[Input]INPUT @i<seconds> @i<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.
+
+@Index[LOG]LOG @i<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
+@Index[XON/XOFF]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".
+
+@Index[Append]
+@\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.
+
+@Index[LOGOUT]LOGOUT@\Like BYE, but leaves you at Kermit-80 command level.
+
+@index<OUTPUT>OUTPUT @i<text>@\Send the text to the remote computer as if
+you had typed it.
+
+@Index[Pause]PAUSE @i<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 basis.
+
+@Index[Print]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 TYPE.
+
+QUIT@\Synonym for EXIT.
+
+@Index[RECEIVE]@Index[File-Warning]
+RECEIVE @i<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 "@q<&>" characters to the name. RECEIVE
+can be abbreviated to the single letter R.
+
+@index<REMOTE>REMOTE @i<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:
+@begin<description,leftmargin +4, indent -4>
+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.
+
+REMOTE DELETE filespec@\Ask the remote server to delete the named file or
+files.
+
+REMOTE DIRECTORY [filespec]@\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.
+
+REMOTE DISK-USAGE@\Ask the remote server to display information about its
+disk usage (such as free or used space).
+
+REMOTE ERASE filespec@\Same as REMOTE DELETE.
+
+REMOTE FINISH@\Same as FINISH.
+
+REMOTE HELP@\Ask the remote server to display a list of the commands it
+can respond to.
+
+REMOTE HOST command@\Ask the remote server to have its operating system
+execute the given command.
+
+REMOTE KERMIT 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.
+
+REMOTE MESSAGE text@\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 value, for example REMOTE SET FILE TYPE BINARY. Type REMOTE SET
+? to see a list of the REMOTE SET options.
+
+REMOTE SPACE@\Same as REMOTE DISK-USAGE.
+
+REMOTE STATUS@\Ask the remote server to provide a status report.
+
+REMOTE TYPE file@\Ask the remote server to display the named file on
+the micro's screen.
+
+REMOTE WHO [user]@\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.
+@end<description>
+
+RENAME file1 file2@\Rename local CP/M file1 to file2.
+
+@Index[SEND]SEND @i<filespec>@\Send file(s) specified by @i<filespec> to
+the remote Kermit. The @i<filespec> may contain CP/M wildcards. SEND may
+be abbreviated to the single letter S.
+
+@Index[SET]SET @i<parameter> [@i<value>]@\Set the specified parameter to
+the specified value. Possible parameter settings:
+
+@begin<description,leftmargin +8,indent -8>
+
+@Index[Autoreceive]AUTORECEIVE@\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.
+
+@Index[Block Check]BLOCK-CHECK-TYPE @i<option>
+@\The options are:
+@begin<description,spread 0,leftmargin +8,indent -8>
+1-CHARACTER-CHECKSUM@\Normal, default, standard 6-bit checksum.
+
+2-CHARACTER-CHECKSUM@\A 12-bit checksum encoded as two characters.
+
+3-CHARACTER-CRC-CCITT@\A 16-bit CCITT-format Cyclic Redundancy Check, encoded
+as 3 characters.
+
+@end<description>
+
+@Index[Buffer size]BUFFER-SIZE @i<value>@\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.
+
+@index<COLLISION>COLLISION value@\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.
+
+@Index[Debug]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)
+
+@Index[Default Disk]DEFAULT-DISK @i<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 instance @example[Kermit-80 14A:>]
+
+@Index[Directory file size]DIRECTORY-FILE-SIZE ON (or OFF).
+
+@\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.
+
+@Index[Escape Character]ESCAPE@\Change the escape character for
+virtual terminal connections. Kermit-80 will prompt you for the new
+escape character, which you enter literally.
+
+@Index[File-mode]FILE-MODE @i<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 successful.
+
+@\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.
+
+@Index[Flow Control]FLOW-CONTROL ON (or OFF)
+@\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 ignored.
+
+@Index[IBM]IBM ON (or OFF)@\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.
+
+@Index[Local-Echo]LOCAL-ECHO ON (or OFF)@\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 default.
+
+@Index[Logging]LOGGING ON (or OFF)@\Cease or resume logging whenever
+connect mode is entered. This is really only applicable after a LOG
+command is no longer required.
+
+@Index[No-exit]NO-EXIT@\This command is applicable only for Kermit initiated
+with a command tail. For example, if Kermit was initiated by:
+
+@\KERMIT ;SEND HELLO;NO-EXIT
+
+@\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.
+
+@Index[OUTPUT]OUTPUT @i<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.
+
+@Index[Parity]PARITY @i<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
+@Index<Eighth-Bit Prefix>
+"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 happens).
+
+@Index[Port]PORT @i<port name>
+@\Allows you to switch between different communication ports.
+This command is not available on all systems.
+Type @q<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.)
+
+@Index[PRINTER]PRINTER@\ON (or OFF)
+@\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.
+
+@Index[Set Receive]RECEIVE @i<parameter> [@i<value>]
+@\Set a RECEIVE parameter.
+
+@begin<description, Spread 0, leftmargin +8,indent -8>
+
+@Index[Pad character]
+PAD-CHAR@\Set the PAD character to use while receiving files.
+Currently a dummy, as for SET SEND PAD-CHAR.
+
+@Index[Set padding]PADDING [value]
+@\Set the number of PAD characters to use while receiving files.
+Same as SET SEND PADDING.
+
+@Index[Set Start of packet]
+START-OF-PACKET [value]
+@\Set the default start of Packet character for receiving files. Apply the
+same rules and considerations as for SET SEND START-OF-PACKET.
+
+PACKET-LENGTH number@\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.
+
+@end<description>
+
+@Index[Set Send]SEND @i<parameter> [@i<value>]
+@\Set a SEND parameter.
+@begin<description, spread 0, leftmargin +8,indent -8>
+
+@Index[Pad character]
+PAD-CHAR@\Set the Pad character to be used while sending files.
+It is currently a dummy entry, and does not do anything.
+
+@Index[Set Padding]
+PADDING [value]
+@\Set the number of PAD-CHARS to be used while sending files. This
+too does nothing.
+
+@Index[Set Start of packet]
+START-OF-PACKET@\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.
+
+@end<description>
+
+@Index[Baud]SPEED @i<value>
+@\Change the baud rate of the communications port. This
+command only works on some systems. @i<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.
+
+@Index[TacTrap]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.
+
+@Index[VT52 Emulation]
+@Index[Terminal Emulation]
+@Index[External Terminal Emulation]
+TERMINAL @i<option>
+@\Select one of the following terminal characteristics:
+
+@begin<description,spread 0.5,leftmargin +8,indent -8>
+
+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 TTY").
+
+EXTERNAL@\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 @index<VT100 Emulation>VT100-@|series terminals). Some
+systems emulate other terminals, like the ADM3A; see table @ref<-cpmterms>.
+
+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 ususal.
+@end<description>
+
+@Index[TIMER]TIMER ON (or OFF)@\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.
+
+@Index[USER]USER @i<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.
+
+@Index[Warning]WARNING ON (or OFF)@\Warn user of filename conflicts when
+receiving files from remote host, and attempt to generate a unique name by
+adding "@q<&>" characters to the given name. ON by default, which is
+equivalent to SET COLLISION RENAME.
+@end<description>
+
+@Index[Show]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.
+
+@Index[Status]STATUS@\The same function as Show.
+
+STAY@\Equivalent to SET NO-EXIT.
+
+@Index[Take]TAKE @i<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.
+
+@Index[TRANSMIT]TRANSMIT @i<filespec> @i<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 commands:
+@begin<description,spread 0,leftmargin +4, indent -4>
+Control-C@\Cease transmission, and drop into terminal emulation mode.
+
+CR@\(carriage return) Re-transmit the previous line.
+@end<description>
+
+@Index[Type]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.
+
+@Index[VERSION]VERSION@\Show the name, edit number, and edit date of several of
+the modules that make up Kermit-80.
+
+@end<description>
+
+@section<Kermit-80 Flavors>
+@Comment(begin<description, leftmargin -8, indent +2>)
+
+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.
+
+@subsection<Generic Kermit-80>
+@index<Generic Kermit-80>@index<8080> "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@index<BIOS> calls, and I/O redirection
+is done using the CP/M IOBYTE function, which, according to the Digital
+Research @i<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 @ref<-cpmports> lists the options to the SET PORT command
+and their effects.
+
+@begin<table,use example,centered>
+@bar()
+@blankspace(1)
+@ux(SET PORT @i<xxx>) @ux(input from) @ux(output to)
+ CRT CRT: CRT:
+ PTR PTR: PTP:
+ TTY TTY: TTY:
+ UC1 UC1: UC1:
+ UR1 UR1: UP1:
+ UR2 UR2: UP2:
+@caption<Kermit-80 SET PORT Options>
+@tag<-cpmports>
+@bar()
+@end<table>
+
+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.
+
+@subsection<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.
+
+@subsection<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:
+
+@begin<description, leftmargin +4, indent -4>
+@ux<Amstrad>: -- Two versions:
+
+@begin<description, leftmargin +4, indent -4>
+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.
+@end<description>
+
+@ux<ACCESS>:@\Access Matrix computer using port J5. Supports SET
+BAUD-RATE for rates of 300-9600 baud.
+
+@ux<Apple II> -- four variations:
+@begin<description,leftmargin +4,indent -4>
+APMMDM:@\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,
+@q(^]D) drops carrier. BYE command also causes carrier to be dropped.
+
+AP6551:@\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.
+
+APCPS:@\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.
+
+AP6850:@\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.
+@end<description>
+
+@ux<BBC>:@\Acorn Computers BBC Computer with Acorn Z80 second
+processor running CP/M-80. Supports SET BAUD-RATE and can send breaks.
+
+@ux<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 baud.
+
+@begin<multiple>
+@ux<Cifer>:@\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 key.
+@end<multiple>
+
+@ux<Comart>:@\Comart Communicator-Similar to Northstar
+equipment. Can generate BREAK.
+
+@ux<Compupro>:@\Based on Kermit 3.x, and has been merged into V4.09
+
+@ux<CPT-85xx word processors>:@\Can generate BREAK. SET SPEED supported;
+speeds are 50-9600 baud.
+
+@ux<Cromemco>:@\Cromemco computers with TU-ART card. Supports SET
+BAUD-RATE (110-9600 baud).
+
+@ux<DEC DECmate II word processor (with Z80 card)>:@\Can generate BREAK.
+
+@ux<DEC VT180 (Robin)>:@\Three output ports, referred to as COMMUNICATIONS,
+GENERAL, and PRINTER. Can generate BREAK.
+
+@ux<Digicomp Delphi 100>:@\SET SPEED supported; speeds are 50-19200 baud.
+
+@ux<Discovery>:@\Action Computer Enterprises "Discovery" Multi-user
+Computer. Uses Port B on an 83U user board. Supports SET SPEED
+for 50-19200 baud. Can generate BREAK.
+
+@ux<Epson>:@\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.
+
+@ux<Generic Kermit>:@\Two versions, one for CP/M version 2@q<.>2 and
+version 3. These systems use IOBYTE flipping (V2@q<.>2) and the AUX:
+device to communicate to the serial line. You may have to SET PORT xxx
+before the version 2@q<.>2 will work, as Kermit needs to know what device
+is the serial line.
+
+@ux<Genie>:@\Eaca Video Genie.
+
+@ux<Heath>: Three Versions:
+@begin<description,leftmargin +4,indent -4>
+H8QUAD@\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.
+
+Z100@\For Z-100 running CP/M-85. This version does not support
+setting of baud rates.
+
+@end<description>
+
+@ux<Intertec Superbrain>: Two Versions:
+@begin<description,leftmargin +4,indent -4>
+BRAINA@\For superbrain using AUX port. Breaks and SET BAUD both supported
+
+BRAINM@\As above, but using the MAIN port.
+@end<description>
+
+@ux<Ithaca>:@\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.
+
+@ux<Kaypro:>@\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.
+
+@ux<Lobo>:@\Lobo MAX-80. Supports SET SPEED and can generate BREAKS.
+
+@ux<Merlin>:@\British Telecom Merlin M2215 (also Rair Black Box, possibly
+also the ICL PC?). Requires a terminal.
+
+@ux<Microbee>:@\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.
+
+@ux<Micromate>:@\PMC 101 Micromate. Supports SET SPEED and can
+generate BREAK.
+
+@ux<Micromint>: Two versions
+@begin<description, leftmargin +4, indent -4>
+S6@\The Ciarcia/Micromint sb-180 board with a 6Mhz procoessor. System
+requires a terminal.
+
+S9@\As above, but with a 9Mhz processor.
+@end<description>
+
+@ux<NCR>:@\Decisionmate 5. Uses the 2651 and is largely
+the same as the Ithaca Intersystems machine implementation.
+
+
+@ux<Northstar>: -- There are four versions available:
+@begin<description,leftmargin +4,indent -4>
+NORTHS:@\Northstar Horizon with HS10-4 board. Supports SET SPEED
+and SET PORT.
+
+HORIZON:@\Northstar Horizon using the serial ports on the Mother
+board. Can generate BREAK.
+
+BASICNS:@\Basic Northstar Horizon using the printer port.
+Can generate BREAK.
+
+ADVANT:@\Northstar Advantage. Supports SET SPEED and can
+generate BREAK. Traps Control-0 in the system filter.
+@end<description>
+
+@ux<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.
+
+@ux<Morrow Micro Decision I>:@\
+
+@ux<Nokia MicroMikko>:@\
+Will not echo control-O (which locks keyboard). SET SPEED
+supported; speeds are 75-9600 baud.
+
+@ux<Ohio Scientific>:@\Doesn't have screen control.
+
+@ux<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.
+
+@ux<Research Machines>: Two Versions:
+@begin<description,leftmargin +4,indent -4>
+RM380ZM:@\380Z and 5.25" disks supports SET BAUD.RATE
+
+RM380ZF:@\380Z and 8" disks, otherwise as above.
+@end<description>
+
+@ux<Sanyo>:@\Sanyo MBC-1100. This version derived from Kermit V3.x
+
+@ux<ScreenTyper>:@\Details unkown.
+
+@ux<TRS-80>: Three versions:
+@begin<description,leftmargin +4,indent -4>
+TRS80LB:@\TRS-80 with Lifeboat CP/M
+
+TRS80PT:@\TRS-80 with Pickles and Trout CP/M
+
+TRSM4:@\TRS-80 Model 4 with Montezuma CP/M
+@end<description>
+
+@ux<Teletek>:@\Teletek Systemaster. Supports SET BAUD.
+
+@ux<Telcon>:@\TELCON ZOBRA portable computer.
+
+@ux<Torch>:@\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 BREAKs.
+
+@\Note that binary files must be transferred using SET PARITY to anything
+other than NONE! Parity is neither generated nor checked.
+
+@ux<US Micro Sales>:@\S-100-8 based computer.
+
+@ux<Vector Graphics>:@\Vector
+
+@ux<Xerox>:@\Xerox 820.
+
+@ux<Z80MU>:@\Development Kermit on a PC running the Z80MU Z80 and CP/M 2@q<.>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.)
+@end<description>
+
+@section<Installation of Kermit-80>
+
+Kermit-80 was written originally for the Intertec SuperBrain in
+lowest-@|common-@|denominator @Index[8080] 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@Index[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 @Index[CP/M] 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.
+
+@index<Timeout>
+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.
+
+@subsection<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:
+@begin<itemize,spread 0>
+the system-@|independent module, @q<CPSKER.HEX>;
+
+the system-@|dependent modules, @q<CPV*.HEX> (see table @ref<-cpmsystems1>
+and @ref<-cpmsystems2>);
+
+the source files, @q(CPS*.ASM) and @q(CPX*.ASM),
+
+the public-domain CP/M assembler, @q<LASM.*>,
+
+the public-domain CP/M load/patch utility, @q<MLOAD.*>
+@end<itemize>
+
+@Comment(NewPage<> added for local manual)
+@begin<table,use verbatim,leftmargin +0>
+@bar()
+@blankspace(1)
+@u(Symbol Filename System)
+@blankspace(0.25)
+ACCESS CPVACC @r<Access Matrix>
+ADVANT CPVADV @r<Northstar Advantage>
+AP6551 CPVAPL @r<Apple II, Z80 Softcard, 6551 ACIA in serial interface>
+AP6850 CPVA65 @r<Apple II, Z80 Softcard, 6850 ACIA in Serial Iiterface>
+APMMDM CPVAPM @r<Apple II, Z80 Softcard, Micromodem II in slot 2>
+APCPS CPVCPS @r<Apple II, Z80 Softcard, with CPS multifunction card>
+BASICNS CPVBNS @r<Northstar Horizon (terminal required)>
+BBC CPVBBC @r<Acorn "BBC" computer with Acorn Z80 second processor>
+BBII CPVBB2 @r<BigBoard II (terminal required)>
+BRAINM CPVBRM @r<Intertec Superbrain using the main port>
+BRAINA CPVBRA @r<Intertec Superbrain using the Aux port>
+CIFER2 CPVCIF @r<Cifer 1886 using the VL: Serial port and CP/M V2.2>
+CIFER3 CPVCI3 @r<Cifer 1886 using the VL: Serial port and CP/M V3.0>
+CIFER2 CPVCA2 @r<Cifer 1886 using the AUX: Serial port and CP/M V2.2>
+CIFER3 CPVCA3 @r<Cifer 1886 using the AUX: Serial port and CP/M V3.0>
+CMEMCO CPVCRO @r<Cromemco with TU-ART card. Terminal required)>
+COMART CPVCOM @r<Comart Communicator (terminal required)>
+COMPRO CPVPRO @r<Compupro with Interfacer 4 (or 3). Terminal required.>
+CPC CPVCPC @r<Amstrad CPC 664 and 6128 and CP/M 3>
+CPM3 CPVCP3 @r<"Generic": CP/M 3.0 (CP/M Plus) systems (terminal req'd)>
+CPT85XX CPVCPT @r<CPT-85xx wordprocessor with CP/M>
+DELPHI CPVDEL @r<Digicomp Delphi 100 (terminal required)>
+DISC CPVDIS @r<Action Computer Enterprises "Discovery" (terminal req'd)>
+DMII CPVDM2 @r<DECmate II with CP/M option>
+GENER CPVGEN @r<"Generic": CPM 2.2 systems with IOBYTE (terminal req'd)>
+GENIE CPVGNI @r<Video Genie>
+H8QUAD CPVH8Q @r<Heath-8 with Quad 8 i/o board>
+HEATH CPVH89 @r<Heath/Zenith H89>
+HORIZON CPVHOR @r<Northstar Horizon (terminal required)>
+KPII CPVKPR @r<Kaypro-II (and 4; probably supports all Kaypro systems)>
+LOBO CPVLBO @r<Lobo Max-80>
+@begin<text,facecode R,above 1>
+"symbol" is the symbol used to select the target system, in @q<CPVTYP.ASM>;
+
+"filename" is the name under which the module is supplied in the distribution.
+@end<text>
+@caption<Systems supported by Kermit-80 (Part 1)>
+@bar()
+@tag<-cpmsystems1>
+@end<table>
+
+
+@Comment(NewPage<> added for local manual)
+@begin<table,use verbatim,leftmargin +0>
+@bar()
+@blankspace(1)
+@u(Symbol Filename System)
+@blankspace(0.25)
+M2215 CPVMRL @r<British Telecom Merlin/Rair Black Box (terminal required)>
+MBEE CPVBEE @r<Microbee>
+MDI CPVMDI @r<Morrow Decision I (terminal required)>
+MIKKO CPVMIK @r<MikroMikko>
+MMATE CPVMM @r<PMC 101 Micromate (terminal required)>
+MMDI CPVUD @r<Morrow Micro Decision I (terminal required)>
+NCRDMV CPVDMV @r<NCR Decision Mate V. (Terminal required?)>
+NORTHS CPVNS @r<Northstar Horizon with HSIO-4 card (terminal req'd)>
+OSBRN1 CPVOSB @r<Osborne 1>
+OSI CPVOSI @r<Ohio Scientific>
+PCI2651 CPVPCI @r<Ithaca Intersystems with VI0 card (terminal required)>
+PCW CPVPCW @r<Amstrad PCW 8256/8512 with serial interface>
+PX8 CPVPX8 @r<Epson PX-8>
+RM380ZM CPVRMM @r<Research Machines 380Z with MDS (5.25" discs)>
+RM380ZF CPVRMF @r<Research Machines 380Z with FDS (8" discs)>
+ROBIN CPVROB @r<DEC VT180>
+S1008 CPVUSM @r<US Microsales S-100-8 (terminal required)>
+SANYO CPVSAN @r<Sanyo MBC-1100>
+SB6 CPVSB6 @r<Micromint SB-180 with 6Mhz CPU (terminal required)>
+SB9 CPVSB9 @r<Micromint SB-180 with 9Mhz CPU (terminal required)>
+SCNTPR CPVSCN @r<Screentyper>
+TELCON CPVTEL @r<TELCON Zobra portable>
+TELETEK CPVTET @r<Teletek Systemaster>
+TORCH CPVTRC @r<Torch computers BBC-B with Z80 second processors>
+TRS80LB CPVTLB @r<TRS-80 model II with Lifeboat 2.25C CP/M Display>
+TRS80PT CPVTPT @r<TRS-80 model II with Pickles + Trout CP/M Display>
+TRSM4 CPVTM4 @r<TRS-80 model IV>
+VECTOR CPVVEC @r<Vector Graphics>
+XER820 CPVXER @r<Xerox 820>
+Z100 CPVZ00 @r<Z-100 under CP/M-85>
+Z80MU CPVZ80 @r<Z80MU development system on a PC>
+@begin<text,facecode R,above 1>
+"symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
+
+"filename" is the name under which the module is supplied in the distribution.
+@end<text>
+@caption<Systems supported by Kermit-80 (Part 2)>
+@bar()
+@tag<-cpmsystems2>
+@end<table>
+
+@Comment(NewPage added for local manual)
+@NewPage()
+@begin<table,use verbatim,leftmargin +0>
+@bar()
+@blankspace(1)
+@u(Symbol Terminal type)
+@blankspace(0.25)
+CRT @r<Dumb terminal type. Does not do cursor addressing>
+ADM3A @r<Lear Seigler ADM 3A>
+ADM22 @r<Lear Seigler ADM 22>
+AM230 @r<Ampro 230>
+H1500 @r<Hazeltine 1500>
+SMRTVD @r<Netronics Smartvid>
+SOROQ @r<Soroq IQ-120>
+TVI912 @r<Televideo 912>
+TVI925 @r<Televideo 925 or Freedom 100>
+VT52 @r<Dec VT52 or equivalent (H19)>
+VT100 @r<Dec VT100 or equivalent>
+WYSE @r<Wyse 100>
+@begin<text,facecode R,above 1>
+"symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
+
+"Terminal type" is the type of terminal "symbol" selects.
+@end<text>
+@caption<Terminals supported by Kermit-80>
+@bar()
+@tag<-cpmterminals>
+@end<table>
+@Comment(NewPage<> removed again)
+
+@Comment<for Installation of kermit-80>
+
+@subsection<Downloading Kermit-80>
+
+You'll need either a pre-configured @q<.COM> file or the system-@|independent
+module, @q<CPSKER>, in binary (@q<.COM>) or hex (@q<.HEX>) format and the
+system-@|dependent overlay for your system (from Tables @ref<-cpmsystems1> and
+@ref<-cpmsystems2>). If
+your system is not listed in the table, get the generic CP/M 2@q(.)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.
+
+@Index[Bootstrapping CP/M Kermit]@index<Downloading>
+ 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 files".
+
+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 ``@q<:>'', 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.
+
+@Begin <Enumerate>
+For CP/M 2@q<.>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@q<.>0 systems!)
+@Begin<figure, use Example, leftmargin +0>
+@bar()
+@blankspace(0.25)
+-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
+0179
+-^C ;(Type Control-C) Return to CP/M
+A>SAVE 1 FETCH.COM ;Save program, we need to run it twice.
+@caption<Bootstrap program for Kermit-80 and CP/M Version 2.2>
+@bar()
+@tag<-cpmboot>
+@end<Figure>
+Alternatively, an assembler source file for this program is distributed
+with CP/M Kermit as @q<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.
+
+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).
+
+Tell the host to display the first hex file (the system-independent module)
+at your terminal, e.g. give a command like @q<TYPE CPSKER.HEX>, @i<@u(without)
+a terminating carriage return>.
+
+Return to your micro by switching the cable from the terminal to the micro,
+or by terminating the micro's terminal program.
+
+Make sure your IOBYTE is set so that @q<RDR:> and @q<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).
+
+Load the program you entered in the first step with DDT, and use it to capture
+the first hex file:
+@Begin<Example,Free>
+DDT FETCH.COM
+-icpsker.hex ;Setup FCB for file CPSKER.HEX
+-g100,179 ;Execute the program.
+@End<Example>
+Now there should be a file @q<CPSKER.HEX> on your connected disk.
+
+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.
+
+Return to your micro, and run the capture program again:
+@Begin<Example,Free>
+DDT FETCH.COM
+-icpxovl.hex ;Setup FCB to create CPXOVL.HEX
+-g100,179 ;Execute the program.
+@End<Example>
+Now there should be a file @q<CPXOVL.HEX> on your connected disk. Replace
+@q<CPXOVL.HEX> in this example with the appropriate overlay file for your
+system.
+@end<enumerate>
+Merging the files:
+@begin<enumerate>
+For purposes of illustration, we will assume the system-@|dependent overlay is
+called "cpxovl@q<.>hex". The two hex files may be combined with MLOAD or DDT.
+If you already have a running Kermit, you can transfer @q<MLOAD.HEX> to your
+system and create @q<MLOAD.COM> by running LOAD. If you're bootstrapping
+Kermit, you could transfer @q<MLOAD.HEX> to your system the same way you got
+the other two @q<.HEX> files, but it's probably simpler to use DDT to get
+Kermit running, and get MLOAD later if you need it.
+
+Using MLOAD, the two pieces may be easily merged:
+@begin<example>
+A>@ux(mload kerm411=cpsker,cpxovl)
+@i[(Some messages about program size, etc...)]
+A>
+@end<example>
+
+If you don't have MLOAD running, it's a bit more complex:
+@begin<example>
+A>@ux<ddt cpsker.hex>
+NEXT PC
+3500 0100
+-@ux<icpxovl.hex>
+-@ux<r>
+NEXT PC
+xxxx 0000
+-@ux<^C>
+A>@ux<save @i(dd) kerm411.com>
+@end<example>
+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).
+
+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?)
+
+
+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.
+
+@End<Enumerate>
+
+You now should have a running version of Kermit-80, called @q<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:
+@example<?Kermit has not been configured for a target system>
+or
+@example<?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 @q<KERMIT.COM> to something else, like @q<OKERMIT.COM>, and rename
+@q<KERMIT40.COM> to @q(KERMIT.COM).
+
+@subsection<Assembling Kermit-80 from the sources>
+
+Kermit-80 is built in two pieces from the following files:
+@begin<description,spread 0>
+@i(The system-independent files:)
+
+@q<@ @ CPSKER.ASM>@\header file
+
+@q<@ @ CPSDEF.ASM>@\definitions for both KERMIT and KERSYS
+
+@q<@ @ CPSMIT.ASM>@\initialization, main loop, miscellaneous commands
+(BYE, EXIT, LOG, SET, SHOW, STATUS, and VERSION)
+
+@q<@ @ CPSCOM.ASM>@\second part of commands, status and set file
+
+@q<@ @ CPSPK1.ASM>@\part 1 of the KERMIT protocol handler
+(SEND, RECEIVE, LOGOUT,and FINISH commands)
+
+@q<@ @ CPSPK2.ASM>@\part 2 of the KERMIT protocol handler
+
+@q<@ @ CPSREM.ASM>@\REMOTE routines (FINISH, BYE and LOGOUT in CPXPK*.ASM)
+
+@q<@ @ CPSSER.ASM>@\SERVER routines (for the future)
+
+@q<@ @ CPSTT.ASM>@\the transparent commands (TRANSMIT, CONNECT)
+
+@q<@ @ CPSCPM.ASM>@\CP/M commands (DIR, ERA, USER, TYPE, PRINT, COPY)
+
+@q<@ @ CPSWLD.ASM>@\the wildcard handler
+
+@q<@ @ CPSCMD.ASM>@\the command parser
+
+@q<@ @ CPSUTL.ASM>@\utility routines and data
+
+@q<@ @ CPSDAT.ASM>@\data space and the overlay definitions
+
+@q<@ @ CPXLNK.ASM>@\linkage area description
+
+@blankspace(1)
+@i(The system-dependent files:)
+
+@q<@ @ CPXTYP.ASM>@\system selection
+
+@q<@ @ CPXLNK.ASM>@\system overlay specification and jump table
+
+@q<@ @ CPXCOM.ASM>@\common routines for all systems
+
+@q<@ @ CPXSWT.ASM>@\system selector or switcher
+
+@blankspace(1)
+One of:
+
+@q<@ @ CPXSYS.ASM>@\family file for some system-specific code
+
+@q<@ @ CPXTOR.ASM>@\family file for Torch, Superbrain, PCI2651 etc
+
+@q<@ @ CPXNOR.ASM>@\family file for Northstar and Comart machines
+
+@q<@ @ CPXMRL.ASM>@\family file for British Telecom Merlin/Rair Black Box
+
+@q<@ @ CPXSB.ASM>@\family file for Micromint SB-180 systems
+
+@q<@ @ CPXCIF.ASM>@\family file for Cifer systems
+
+@q<@ @ CPXHEA.ASM>@\family file for Heath/Zenith systems
+
+@q<@ @ CPXAPP.ASM>@\family file for Apple II systems
+
+@q<@ @ CPXPCW.ASM>@\family file for Amstrad PCW 8256/8512 machines
+
+@q<@ @ CPXBBI.ASM>@\family file for BigBoard, Kaypro and Xerox 820 systems
+
+@q<@ @ CPXBEE.ASM>@\Microbee
+
+@q<@ @ CPXSYO.ASM>@\family file for Sanyo MBS-1100 systems
+
+@q<@ @ CPXTM4.ASM>@\family file for Tandy Model 4 with CP/M systems
+
+@q<@ @ CPXGNI.ASM>@\family file for Video Genie systems
+
+@q<@ @ CPXPRO.ASM>@\family file for Compupro systems
+
+@q<@ @ CPXZ80.ASM>@\family file for the Z80MU development system
+
+@blankspace(1)
+and if you use a terminal,
+
+@q<@ @ CPXVDU.ASM>@\display codes for VDUs etc. Not always required
+@end(description)
+The system-@|independent module contains all of the system-@|independent files
+except for @q(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 @q(CPSKER.HEX). If you
+have a copy of @q(CPSKER.HEX), you do not need to reassemble the
+system-@|independent module to configure Kermit for your system.
+
+The system-@|dependent module consists of @Q(CPXTYP.ASM), @Q(CPSDEF.ASM),
+@Q(CPXLNK.ASM), @q(CPXSWT.ASM), @q(CPSCOM.ASM), one of the family files
+@Q(CPXSYS.ASM), @q(CPXTOR.ASM), @q(CPXMRL.ASM), @q(CPXSB.ASM), @q(CPXCIF.ASM),
+@q(CPXHEA.ASM), @q(CPXBBI.ASM), @q(CPXTM4.ASM), @q(CPXGNI.ASM), @q(CPXNOR.ASM),
+@q(CPXAPP.ASM), @q(CPXPCW.ASM), or @q(CPXPRO.ASM), and possibly @q(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 @ref<-cpmsystems1> and
+@ref<-cpmsystems2>. 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 @Q(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:
+@begin<example>
+A>@ux(m80 cpsker=cpsker.asm)
+A>@ux(l80 /p:100,cpsker,cpsker/n/e)
+@end<example>
+This will produce @Q(CPSKER.COM).
+
+If you are using LASM instead, do this:
+@example(A>@ux<lasm cpsker>)
+LASM will generate @Q(CPSKER.HEX) and @Q(CPSKER.PRN). LASM allows options to
+be specified in the same way as the standard assembler, ASM, so the command
+@example[A>@ux(lasm cpsker.abz)]
+will read the source files from drive A, send the @q(.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
+@Q(CPXTYP.ASM):
+
+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 @value(-cpmversion)). 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 assembler.
+
+Third, the system configuration. Locate your system in tables
+@ref<-cpmsystems1> and @ref<-cpmsystems2>, 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 @ref<-cpmterms> and
+define the appropriate symbol TRUE, and the remainder FALSE. If the terminal
+is not listed in table @ref<-cpmterms>, 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:
+@begin<description>
+APSLOT@\For Apple with 6551 ACIA, defines the slot number of the serial card
+
+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).
+@end<description>
+
+If you are just assembling an existing configuration, you'll need to edit
+@Q(CPXTYP.ASM) only. If you are adding support for a new system, you should
+not modify @Q(CPSDEF.ASM) or @Q(CPXLNK.ASM); if you do, you'll have to change
+the system-@|independent module also. Eventually, @Q(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 @q<CPXTYP.ASM> as necessary, assemble and link the overlay as
+follows:
+@begin<itemize>
+With M80 (where "xxxx" is the hex value of ovladr from @q<CPXLNK.ASM>):
+@begin<example>
+A>@ux<m80 cpxtyp=cpxtyp.asm>
+A>@ux<l80 /p:xxxx,cpxtyp,cpxtyp/n/x/e>
+@end<example>
+
+With LASM:
+@begin<example>
+A>@ux<lasm cpxtyp>
+@end<example>
+@end<itemize>
+
+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 (@q(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 @q<.HEX> files into a @q<.COM>
+file with LINK80 (TOPS 10/20), MLOAD (Z80MU), L80 (Z80MU), and
+transfer the new @q<.COM> file to your micro with Kermit:
+@begin<itemize>
+Z80MU on a PC and MLOAD:
+@begin<example>
+@@@ux<MLOAD KERNEW=CPSKER,CPXTYP>
+@end<example>
+
+Z80MU on a PC and C80:
+@begin<example>
+@@@ux<L80 /P:xxxx,CPXTYP,CPXTYP/N/X/E>
+@end<example>
+@end<itemize>
+producing @Q(KERNEW.COM).
+
+@begin<table,leftmargin +0,use format>
+@tabclear()@tabset(1.5in)
+@bar()
+@blankspace(1)
+@u(Symbol)@\@ux<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
+@caption<Terminals known to Kermit-80>
+@tag<-cpmterms>
+@bar()
+@end<table>
+
+@section<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:
+@begin<enumerate>
+@i<What kind of terminal is to be supported?>
+@blankspace(1)
+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.
+
+@i<How is the serial line accessed?>
+@blankspace(1)
+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.
+
+@i<What initialization is necessary?>
+@blankspace(1)
+You may wish to set the baud rate or configure the serial line at
+startup. Examples for a number of devices are present.
+
+@i<What special features are to be supported?>
+@blankspace(1)
+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 present.
+
+@i<Do you want to design an external terminal type?>
+@blankspace(1)
+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.
+@end<enumerate>
+
+@section<Notes on New Features in Kermit-80 Version 4>
+
+@begin<itemize>
+@i(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.
+
+@index<ARPAnet>@index<TAC> @index<Attention Character>
+@index<Intercept Character>
+@i(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.
+
+@i(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 @Q(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.
+@end<itemize>
+
+@Comment<for Assembling Kermit-80)
+
+@section<Specification for Kermit-80 System Dependent Modules>
+
+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.
+
+
+@subsection(Interface Data.)
+
+@begin<description, spread 0, indent -8>
+
+@ux<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
+@blankspace(1)
+
+@ux<ENTSIZE>@\Length of entry table, also used for consistency checking after
+the overlay. Currently 6
+@blankspace(1)
+
+@ux<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$
+@blankspace(1)
+
+@ux<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 $
+@end<description>
+@blankspace(1)
+
+@subsection(Jump Table.)
+This is split into three main sectors-
+@blankspace(1)
+
+@begin(enumerate)
+Input/Output routines
+
+Screen formatting routines
+
+other system dependent routines
+@end<enumerate>
+
+
+@begin<description, spread 0, indent -14>
+@blankspace(1)
+@ux<SELMDM>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\selects the modem port. Most systems do nothing and
+simply return. HL,DE and BC registers preserved.
+
+@blankspace(1)
+@ux<OUTMDM>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Output the character in E register to the communications
+line. BC,DE,HL registers preserved.
+
+@blankspace(1)
+@ux<INPMDM>
+
+@i<Parameters>@\None
+
+@i<Returns>@\Accumulator either 0 or character from comms line if available
+
+@i<Description>@\Check modem for character and if so, return it in A.
+HL,DE,BC registers preserved, flags
+and accumulator lost.
+
+@blankspace(1)
+@ux<FLSMDM>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Clear any pending characters in the input buffer from the
+modem. No registers are preserved.
+
+
+@blankspace(1)
+@ux<SELCON>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Select the console. This is a null subroutine for most
+systems, but for IOBYTE systems selects the console.
+
+@blankspace(1)
+@ux<OUTCON>
+
+@i<Parameters>@\Character in E
+
+@i<Returns>@\None
+
+@i<Description>@\Send the character in E to the console. Any quirks of
+system responding in an odd manner should be handled. No
+registers preserved.
+
+
+@blankspace(1)
+@ux<INPCON>
+
+@i<Parameters>@\None
+
+@i<Returns>@\Zero or character in A.
+
+@i<Description>@\Get a character from the console or return a null if
+no character to be read. No registers are preserved.
+
+
+@blankspace(1)
+@ux<OUTLPT>
+
+@i<Parameters>@\Character in E
+
+@i<Returns>@\None
+
+@i<Description>@\Send the character in E to the printer. The console is
+selected. Only DE registers are preserved
+
+
+@blankspace(1)
+@ux<LPTSTAT>
+
+@i<Parameters>@\None
+
+@i<Returns>@\00H or 0FFH in A register
+
+@i<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.
+
+
+@blankspace(1)
+@ux<EXTTER>
+
+@i<Parameters>@\Character to be sent to the user supplied terminal emulator
+in the E register
+
+@i<Returns>@\None
+
+@i<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.
+
+
+@blankspace(1)
+@ux<XBDOS>
+
+@i<Parameters>@\Any required for calling BDOS
+
+@i<Returns>@\Any expected from the called BDOS routine
+
+@i<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.
+@blankspace(1)
+2b)
+@blankspace(1)
+@ux<CLRLIN>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Clear the current line on the terminal
+
+
+
+@blankspace(1)
+@ux<CLRSPC>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Erase the current position (after a backspace)
+
+
+
+@blankspace(1)
+@ux<DELCHR>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Make delete (7FH) look like a backspace. Some systems
+do a backspace, space, backspace automatically others have to simulate it
+
+@blankspace(1)
+@ux<CLRTOP>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Clear the screen and place the cursor at the top LH corner
+
+
+
+@blankspace(1)
+@ux<SCREND>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Place the cursor on the line for the Kermit-80 prompt
+after a file transfer. (Usually line 13)
+
+
+
+@blankspace(1)
+@ux<SCRERR>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move cursor to the error message field on the
+file transfer format screen
+
+
+
+@blankspace(1)
+@ux<SCRFLN>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move the cursor to the filename field
+
+
+
+@blankspace(1)
+@ux<SCRNP>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move the cursor to the packet count field
+
+
+
+@blankspace(1)
+@ux<SCRNRT>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move cursor to the retry count field
+
+
+
+@blankspace(1)
+@ux<SCRST>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move cursor to the status field
+
+
+
+@blankspace(1)
+@ux<RPPOS>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move to the receive packet field (debugging use)
+
+
+
+@blankspace(1)
+@ux<SPPOS>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Move to the send packet field (for debugging use)
+@blankspace(1)
+2c)
+@blankspace(1)
+@ux<SYSINIT>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Initialize the system specific items. No registers
+are preserved. Any initialization is done once only when Kermit-80
+is first loaded.
+
+
+
+@blankspace(1)
+@ux<SYSEXIT>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Program termination. De-initialize anything
+in preparation for a return to CP/M
+
+
+
+@blankspace(1)
+@ux<SYSCON>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\Initialize anything before entering the connect state.
+
+
+
+@blankspace(1)
+@ux<SYSCLS>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\System dependent close routine when exiting connect state
+
+
+
+@blankspace(1)
+@ux<SYSINH>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<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.
+
+
+
+@blankspace(1)
+@ux<SYSINT>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<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
+
+
+
+@blankspace(1)
+@ux<SYSFLT>
+
+@i<Parameters>@\Character in E
+
+@i<Returns>@\Character in E. Either a 00H or anything else in A
+
+@i<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.
+
+
+@blankspace(1)
+@ux<SYSBYE>
+
+@i<Parameters>@\None
+
+@i<Returns>@\None
+
+@i<Description>@\System dependent processing for the BYE command. (eg hang
+up the phone)
+
+
+
+@blankspace(1)
+@ux<SYSSPD>
+
+@i<Parameters>@\Value from table in DE
+
+@i<Returns>@\None
+
+@i<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"
+
+
+
+@blankspace(1)
+@ux<SYSPRT>
+
+@i<Parameters>@\Value in DE
+
+@i<Returns>@\None
+
+@i<Description>@\The system dependent code for setting the port.
+The parameters are passed in DE, which are obtained from the port tables
+
+
+
+@blankspace(1)
+@ux<SYSSCR>
+
+@i<Parameters>@\String pointer in DE
+
+@i<Returns>@\None
+
+@i<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.
+
+
+
+@blankspace(1)
+@ux<CSRPOS>
+
+@i<Parameters>@\Row number in B, column number in C
+
+@i<Returns>@\None
+
+@i<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 function
+
+
+
+@blankspace(1)
+@ux<SYSSPC>
+
+@i<Parameters>@\None
+
+@i<Returns>@\K bytes free in HL
+
+@i<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.
+
+
+
+@blankspace(1)
+@ux<MOVER>
+
+@i<Parameters>@\Source Pointer in HL
+
+@\Destination Pointer in DE
+
+@\Byte count in BC
+
+@i<Returns>@\None
+
+@i<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
+
+@blankspace(1)
+@ux<PRTSTR>
+
+@i<Parameters>@\$ terminated string pointed to by DE
+
+@i<Returns>@\None
+
+@i<Description>@\Print the string onto the console.
+@blankspace(1)
+3)
+@blankspace(1)
+@tabclear()
+@tabset(2 inches, 1.0 inches, 1.0 inches)
+
+@blankspace(1)
+@ux<PTTAB>@\WORD@\Points to VT52 equivalent escape sequences.
+
+@blankspace(1)
+@ux<SPDTAB>@\WORD@\Address of baud-rate command table, or 0 if table does
+not exist
+
+@blankspace(1)
+@ux<SPDHLP>@\WORD@\Address of baud-rate help table, or 0 if SET SPEED
+is not supported.
+
+@blankspace(1)
+@ux<PRTTAB>@\WORD@\Address of port command table or 0 if SET PORT is not supported.
+
+@blankspace(1)
+@ux<PRTHLP>@\WORD@\Address of port help table or 0 if SET PORT is not supported
+
+@blankspace(1)
+@ux<TIMOUT>@\BYTE@\FUZZY-TIMER. Set to value suitable to your
+system (depends largely on CPU speed)
+
+@blankspace(1)
+@ux<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")
+
+@blankspace(1)
+@ux<ESCCHR>@\BYTE@\default escape character-usually control-] but
+sometimes control-\
+
+@blankspace(1)
+@ux<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.
+
+@blankspace(1)
+@ux<PORT>@\WORD@\Storage space for port. Set to 0FFFFH as ports may
+not be implemented, and is initially unknown
+
+@blankspace(1)
+@ux<PRNFLG>@\BYTE@\Printer copy flag-if O no copy. Anything else =>
+copy to printer
+
+@blankspace(1)
+@ux<DBGFLG>@\BYTE@\Debugging flag. If O then no debugging to be done.
+(ie writing of debugging info during a file transfer)
+
+@blankspace(1)
+@ux<ECOFLG>@\BYTE@\Local ECHO flag (default is off)
+
+@blankspace(1)
+@ux<FLWFLG>@\BYTE@\File warning flag. If set to 1 will not
+overwrite files already existing on disk with some-named files
+being transferred
+
+@blankspace(1)
+@ux<IBMFLG>@\BYTE@\IBM system is the host-assume IBM file transfers etc
+
+@blankspace(1)
+@ux<CPMFLG>@\BYTE@\Flag indicating type of CP/M files to be transferred.
+Default setting - DEFAULT
+
+@blankspace(1)
+@ux<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
+
+@blankspace(1)
+@ux<SPSIZ>@\BYTE@\Size of send packet
+
+@blankspace(1)
+@ux<RPSIZ>@\BYTE@\Size of receive packet
+
+@blankspace(1)
+@ux<STIME>@\BYTE@\Send timer (time-out)
+
+@blankspace(1)
+@ux<RTIME>@\BYTE@\Receive timer (time-out)
+
+@blankspace(1)
+@ux<SPAD>@\BYTE@\Send Padding (default=0)
+
+@blankspace(1)
+@ux<RPAD>@\BYTE@\Receive Padding (default=0)
+
+@blankspace(1)
+@ux<SPADCH>@\BYTE@\Send Padding character (default=NULL)
+
+@blankspace(1)
+@ux<RPADCH>@\BYTE@\Receive Padding character (default=NULC)
+
+@blankspace(1)
+@ux<SEOL>@\BYTE@\Send EOL character (default=CR)
+
+@blankspace(1)
+@ux<REOL>@\BYTE@\Receive EOL character (default=CR)
+
+@blankspace(1)
+@ux<SQUOTE>@\BYTE@\Send quote character (default=#)
+
+@blankspace(1)
+@ux<RQUOTE>@\BYTE@\Receive quote character (default=#)
+
+@blankspace(1)
+@ux<CHKTYP>@\BYTE@\Ascii value of checktype
+
+@\31H="1"=checktype1 (6bits)
+
+@\32H="2"=checktype2 (12bits)
+
+@\33H="3"=CCITT checksum (CRC)
+
+@\Default is 31H("1")
+
+@blankspace(1)
+@ux<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.
+
+@blankspace(1)
+@ux<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
+
+@blankspace(1)
+@ux<BUFADR>@\WORD@\Address of Multi-Sector buffering for I/O
+
+@blankspace(1)
+@ux<BUFSEC>@\BYTE@\The number of bytes the big buffers can hold.
+Default is 1. (0=256 sectors).
+
+@blankspace(1)
+@ux<FFUSSY>@\BYTE@\Indicates if funny characters may be used in CP/M
+file names (eg @q{<>.,;?#[]}) If zero, allow anything. Default is nonzero.
+
+@blankspace(1)
+@ux<BMAX>
+@\SPACE:(2bytes) Highest block number on selected disk drive
+
+@blankspace(1)
+@ux<BMASK>@\SPACE:(1byte) (Records/block)-1
+
+@blankspace(1)
+@ux<BSHIFTF>@\SPACE:(1byte) Number of shifts to multiply by rec.block
+
+@blankspace(1)
+@ux<NNAMS>@\SPACE:(1byte) Counter for file-names per line
+
+@end<description>
+
+
+
+@section<Future Work>
+
+Work that needs to be done in future releases includes:
+@begin<itemize>
+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 @q<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??
+@end<itemize>