diff options
| author | Jeff Armstrong <jeff@approximatrix.com> | 2026-10-25 17:42:06 -0400 |
|---|---|---|
| committer | Jeff Armstrong <jeff@approximatrix.com> | 2026-10-25 17:42:06 -0400 |
| commit | ebb2ff2af569d5822b70ee555a32d27cf7494816 (patch) | |
| tree | 7ac5e7b3fa73f7a8d996129086932ecce66374ad /doc/cpkerm.mss | |
| download | kermit-80-main.tar.gz kermit-80-main.zip | |
Diffstat (limited to 'doc/cpkerm.mss')
| -rw-r--r-- | doc/cpkerm.mss | 2616 |
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> |
