1 @Part(CPKERM,root="kuser")
2 @string(-cpmversion="@q<4.11>")
3 @Chapter<CP/M-80 KERMIT>
6 @case(device,file="********@*
7 This document is formatted as an ordinary, plain text ASCII disk file.
8 Typeset copies are available in the Kermit User Guide from Columbia
9 University. Changes should be made to CPKERM.MSS.@*********")
11 @Begin<Description,Leftmargin +12,Indent -12,spread 1>
12 @i(Program:)@\Mike Freeman, Bonneville Power Administration, Vancouver, WA,
13 USA, with contributions from many others.
15 @i(Language:)@\8080 Assembler, LASM, M80, or MAC80
17 @i(Version:)@\@value(-cpmversion)
19 @i(Date:)@\April 1, 1991
21 @i(Documentation:)@ @ Christine Gianone, Columbia University, with
22 contributions from many others.
27 @i<KERMIT-80 Capabilities At A Glance:>
28 @begin<format,leftmargin +2>
29 @tabclear()@tabset(3.5inches,4.0inches)
31 Remote operation:@\Partial, Auto-receive only
32 Login scipts:@\Yes, limited
33 Transfer text files:@\Yes
34 Transfer binary files:@\Yes
36 File transfer interruption:@\Yes
37 Filename collision avoidance:@\Yes
39 8th-bit prefixing:@\Yes
40 Repeat count prefixing:@\No
41 Alternate block checks:@\Yes
42 Terminal emulation:@\Yes, VT52 and others
43 Communication settings:@\Yes
44 Support for dial-out modems:@\No
45 Transmit BREAK:@\Yes; most versions
46 IBM communication:@\Yes
47 Transaction logging:@\No
50 Raw file transmit:@\Yes
53 Advanced commands for servers:@\Yes
54 Command/init files:@\Yes
56 Local file management:@\Yes
57 Handle file attributes:@\No
59 International Character Sets:@\No
61 Printer control:@\Yes, limited
66 CP/M Kermit is the first of all the Kermit programs. It was originally
67 written by Bill Catchings of Columbia University in 1981. Over the years,
68 contributions have been added by many people, including
69 Charles Carvalho (ACC),
70 Bernie Eiben (DEC), Nick Bush (Stevens Institute of Technology),
71 John Bray (University of Tennessee), Bruce Tanner (Cerritos College),
72 Greg Small (University of California at Berkeley),
73 Kimmo Laaksonen (Helskini University of Technology),
74 Brian Robertson (Aberdeen University), A.J. Cole (Leeds University),
75 John Shearwood (Birmingham University),
76 Tony Addyman (Salford University), Godfrey Nix and Martin Carter
77 (Nottingham University), Ian Young (Edinburgh University), Chris Miles
78 (Manchester University), Richard Russell, Dave Roberts,
79 and many, many others.
81 Version 4.11 is the work of Mike Freeman of the Bonneville Power
82 Administration in Vancouver, WA, USA, with assistance from Russell Lang of
83 Monash University in Australia, Jay S Rouman of Mt Pleasant MI, and others.
87 Features added since version 4.09 include:
89 SET COLLISION {BACKUP/DISCARD/OVERWRITE/RENAME}
91 SET INCOMPLETE-FILES {DISCARD/KEEP}
93 Many REMOTE commands, including some REMOTE SET commands
95 RENAME command to rename CP/M files from within Kermit-80
97 SET RECEIVE/SEND PACKET-LENGTH nn (nn <= 94)
99 SET AUTORECEIVE ON now implies that Kermit-80 ALWAYS tries to
100 receive more files when a RECEIVE transaction has completed. The
101 user can cancel with ^C.
103 QUIT is now a synonym for EXIT.
105 STAY is now a synonym for SET NO-EXIT.
107 CONNECT, RECEIVE and SEND may be abbreviated to C, R and S,
110 Cancellation of TAKE, TYPE, and PRINT commands from the keyboard.
114 Kermit-80 Version 4.11 now supports the Microbee family of
115 computers (56K, 64K, 128K and 256K) manufactured by
116 Microbee Systems, Ltd, of Australia.
118 Kermit-80 now supports the Ampro Little Board system.
121 @section<Overview of Kermit Operation>
123 Use the SET command to establish necessary communication parameters like
124 SPEED and PARITY. Use the CONNECT to establish a terminal connection to
125 the remote computer. If you are dialing out with a modem, type the necessary
126 dialing commands to the modem first. The dialing process can be automated
127 to some extent using a TAKE command file containing INPUT, OUTPUT, and PAUSE
128 commands. Then log in to the remote computer or service and conduct a session.
130 To transfer a text file, start the Kermit program on the remote computer and
131 tell it to SEND the desired file (if uploading) or to RECEIVE (if
132 downloading). "Escape back" to CP/M Kermit, usually by typing Ctrl-] (hold
133 down the Control key and press the right bracket key) and then type the letter
134 C. At the CP/M Kermit prompt type RECEIVE (if you gave a SEND command to the
135 remote Kermit) or SEND @i<filename> (if you gave a receive command to the
138 To transfer a binary file, give the command SET FILE TYPE BINARY to the remote
139 Kermit and SET FILE-MODE BINARY to CP/M Kermit before issuing any SEND or
142 Multiple files of the same type (text or binary) can be transferred in a
143 single operation using "wildcard notation" (including special characters like
144 asterisk in the filename).
146 When file transfer is complete, CONNECT back to the remote computer,
147 use the EXIT command to exit from the remote Kermit program, finish your work
148 on the remote computer, log out from it, escape back to CP/M Kermit again,
149 and EXIT from CP/M Kermit.
151 The remote Kermit may also be put into "server mode" to simplify these
152 operations. Give the SERVER command to the remote Kermit, escape back to CP/M
153 Kermit, and then issue SEND commands to send files (upload), GET @i<filename>
154 commands to receive (download) files, REMOTE commands to request various other
155 services (like directory listings) from the remote Kermit. When you are done,
156 give a BYE command to terminate your remote session, or a FINISH command to
157 tell the remote Kermit to return to its prompt so you can CONNECT back and
158 conduct further business.
160 That's all there is to it.
162 @Section<Summary of CP/M>
164 There are essentially two versions of CP/M - Versions 2.2
165 and 3.0 (sometimes also called CP/M PLUS.)
167 CP/M-80 Version 2@q<.>2 is run in
168 a single 64 Kbyte "page", usually the largest amount of memory on
169 Z80 or 8080 systems. The BIOS (Basic input/output system),
170 BDOS (Basic Disk Operating System) and CCP (Command console processor)
171 all share memory with any transient program the user may wish to run.
172 Some basic commands are
173 available through the CCP, like DIR, ERA etc,while others are loaded
174 from disk into the transient program area and run as a program,
177 CP/M Version 3@q<.>0 (or CP/M PLUS) effectively removes the requirement
178 of having the CCP and BDOS along with a chunk of the BIOS code being
179 resident in the single 64k byte page of memory. This allows even more
180 space for programs in the TPA, but still a little less than the maximum
181 of 64k. It is substantially different from CP/M version 2@q<.>2, with
182 lots of added features. Kermit-80 uses very few additional version
183 3@q<.>0 features, and only where absolutely necessary.
185 CP/M file specifications are of
186 the form @q(DEV:XXXXXXXX.YYY), where
188 @q(DEV:)@\is a @i<device name>,
189 normally the A:@ or B:@ floppy. If omitted, the device name defaults
190 to your connected diskette.
192 @q(XXXXXXXX)@\is a @i<filename> of up to 8 characters.
194 @q(YYY)@\is the @i<file type>, up to 3 characters.
196 File names and file types may contain letters, digits, and some
197 special characters, including dash, dollar sign, and underscore, but
198 no imbedded spaces. Upper and lower case letters are equivalent.
200 "Wildcard" file-@|group specifications are permitted in file names
201 and file types (but not device names) within certain contexts; a "@q(*)"
202 matches a whole field, a "@q(?)" matches a single character, including
203 space. Examples: "@q(*.F??)" specifies all files whose @i<types> start
204 with F and are 1, 2, or 3 characters long; "@q(F?.*)" specifies all
205 files whose names start with F and are no more than two characters
206 long (before the trailing spaces).
208 The five CP/M commands are:
210 DIR @i<file>@\Lists the the names of the specified files. The
211 default file specification is "*.*". Example: @w<"@q(DIR B:*.FOR)">.
213 ERA @i<file>@\Erases (deletes) the specified file(s); wildcards allowed.
215 REN @i<new> @i<old>@\Changes the name of a file from @i<old> to
217 @w<"@q(REN NEW.FOR=OLD.FOR)">.
219 SAVE@\Saves the specified number of memory blocks into a file.
220 (Not on CP/M Plus systems)
222 TYPE @i<file>@\Types the specified file on the screen, e.g.
223 @w<"@q(TYPE FOO.TXT)">.
225 The most important programs are:
227 STAT@\Gives statistics on disk usage; sets and displays IOBYTE.
228 (Not on CP/M Plus systems)
230 PIP@\@u<P>eripheral @u<I>nterchange @u<P>rogram. Copies files. In
231 response to the "@q(*)" prompt, give a command of the form
232 @example<disk:outfile=disk:infile>
233 Wildcards ("@q(*)" for a whole field or "@q(?)" for a letter) can be used.
234 Examples: "@q(A:=B:*.*)" to copy a whole disk, "@q(A:=B:*.FOR)" to copy all
235 the Fortran programs from disk B to disk A. If the disk specification
236 is omitted, your "connected" disk is assumed. Command line arguments
237 are also accepted, e.g. "@q(PIP A:=B:*.*)".
241 There are equivalent commands for CP/M Version 3.0, but are not loaded into
242 memory in the same way as for CP/M Version 2.2.
243 For further information on CP/M, consult your microcomputer manual or
246 @Section<Kermit-80 Description>
248 Since Kermit-80 runs on a standalone micro, it is always in control of the
249 screen -- it is always in "@i<local>@index<Local> mode". It includes a
250 terminal emulator for establishing a connection to a remote computer or
251 service, and during file transfer, it keeps the screen updated with the
252 file name and the packet number, whether sending or receiving.
254 @index<Timeout> Kermit-80 is capable of an imprecise or "fuzzy" timeout on an
255 input request, and can break deadlocks automatically. In most cases, this is
256 not important, because the Kermit program on the other side is most likely
257 able to handle the timeouts. The timeouts done by Kermit-80 are fuzzy because
258 they depend on the speed of the processor and other factors that can vary from
261 If, despite the timeout capability, the transmission appears to be stuck (and
262 you can tell that this has happened if the screen fails to change for a while)
263 you can type carriage return to have the micro do what it would have done on a
264 @Index[Timeout] timeout, namely NAK@Index[NAK] the expected packet to
265 cause theforeign host to send it again (or, if the micro is sending, to
266 retransmit the last packet). Micro/@|micro or micro/@|IBM-@|mainframe
267 transfers could require this kind of manual intervention.
269 File transfers may be interrupted in several ways.
272 Control-C@\This will return you to Kermit-80 command level immediately, so that
273 you can connect back to the remote system, or take any other desired action.
276 Control-X@\When sending a file, this will terminate the sending of the current
277 file with a signal to the KERMIT on the other side to discard what it got so
278 far. If there are more files to be sent, KERMIT-80 will go on to the next one.
279 When receiving a file, KERMIT-80 will send a signal to the remote KERMIT to
280 stop sending this file. If the remote KERMIT understands this signal (not all
281 implementations of KERMIT do), it will comply, otherwise the file will keep
282 coming. In any case, the remote KERMIT will go on to the next file in the
286 Control-Z@\Like Control-X, except if a file group is being transmitted, this
287 will stop the transmission of the entire group. If only a single file is being
288 transmitted, it works exactly like Control-X.
290 @Index[Carriage Return]
292 Carriage Return@\If you type a carriage return Kermit-80 will resend the
293 current packet. You may do this repeatedly, up to the packet retry limit
294 (somewhere between 5 and 16 times) for a particular packet.
297 @heading<Kermit-80 Commands>
299 Kermit-80 is an interactive program. It issues a prompt, you type a command.
300 The process repeats until you give the EXIT command to leave the program.
302 Commands consist of keywords, filenames, and numbers. Keywords may be
303 abbreviated to minumum unique length. "?" may be typed to request a menu of
304 the available options for the current field at any point in a command. ESC
305 may be typed at any point in a command to fill out the current keyword or
306 filename; if sufficient characters have not been typed to identify the current
307 field uniquely, Kermit-80 will sound a beep and allow you to continue from
308 that point. Here are Kermit-80's commands:
309 @begin<description,leftmargin +8,indent -8>
311 BREAK@\Send a BREAK condition to the remote computer. This is only possible
312 if your system is capable of sending breaks. It is intended to be used with
313 PAUSE, OUTPUT, etc and the TAKE command to do wierd and wonderful things, like
314 automatic logging on to a remote host.
317 BYE@\When talking to a remote Kermit Server, this command shuts down
318 the server and logs it out, and also exits from Kermit-80 to CP/M command
321 @Index[Virtual Terminal]@Index[Escape Character]@Index[Connect]
322 CONNECT@\Establish a terminal connection to the computer, service, or device
324 connected to the serial port, i.e.@ pass all typein to the serial port and
325 display all input from the serial port on the screen. Also, emulate a DEC VT52
326 to allow cursor control, screen clearing, etc., if VT52-EMULATION is ON (see
327 below), in which case you should also set your terminal type on the remote host
328 to VT52. (Some versions emulate other terminals.) The CONNECT command may
329 be abbreviated by the single letter C.
331 @\Warning: VT52 emulation is only successful if your system or its
332 attached terminal can do the same sort of functions as a genuine
333 VT52. Things to beware of are cursor addressing, clear to end of page
334 and end of line, clear screen, home cursor, and clear-and-home
335 functions. The useability of VT52 emulation depends entirely on
336 how many of the VT52 functions can be emulated by your micro or terminal.
338 @\The escape character differs from micro to micro; when you issue
339 the CONNECT command, the micro will print a message telling you how
340 to get back. The escape sequence is generally an uncommonly-@|used
341 control character, like CTRL-backslash or CTRL-rightbracket, followed
342 by a single letter "command":
343 @begin<description,spread 0,leftmargin +4, indent -4>
344 C@\Close Connection, return to @q(Kermit-80>) command level.
346 S@\Display Status of connection, but maintain remote connection.
348 @q<?>@\List available single-character commands.
350 0@\(zero) Send a null (0) character.
352 B@\Send a BREAK signal. Most systems provide this function.
354 D@\Drop the line. Used on the Apple with modem. Automatically
355 closes the connection after dropping the line. The TORCH system
356 acknowledges this command but does nothing.
358 P@\Toggle printer on or off. Allows you to copy whatever goes
359 to the screen to the printer.
361 S@\Temporarily suspend logging to the log file.
363 Q@\Restart logging to the log file
365 @q<^]>@\(or whatever - a second copy of the escape character) Send the
366 escape character itself to the remote host.
371 COPY @i<source> @i<destination>
372 @\Copy a named file to another file, either on the same drive or another
376 DIRECTORY@\This provides a directory listing of the specified files.
378 specified, all files on the default disk are listed. File sizes, in K, are
379 included. You may interrupt the listing at any time by typing any character.
380 The listing (even if interrupted) concludes with a display of the amount of
381 free storage left on the disk. You can inhibit the display of file sizes by
385 ERASE @i<filespec>@\This executes the CP/M ERA command on the specified
386 file(s). The names of the files being erased are not displayed.
389 EXIT@\Quit back to CP/M. The return is made by a JMP 0 (Warmstart). QUIT
390 is a synonym for EXIT.
392 @Index[FINISH]FINISH@\Like LOGOUT, but shuts down the remote server without
393 logging it out. Leaves you at Kermit-80 command level; subsequent CONNECT
394 commands will put you back at host system command level.
396 @Index[GET]GET @i<filespec> [@i<local_filespec>]
397 @\When Kermit-80 is talking to a Kermit Server on
398 the host, you should use the GET command to request the server to send
399 files to you, for example:
400 @example<get hlp:k*.hlp>
401 You may specify a local filename if you want to save the remote file
402 under a different filename.
403 Limitation: If you request an alternate block check type using the SET BLOCK
404 command, the GET command will not communicate it to the remote server. If you
405 want to have type 2 or 3 block checks done when getting files from the server,
406 you have to issue the appropriate SET BLOCK command to the remote KERMIT before
407 putting it in server mode.
409 @Index[Help]HELP@\List all these commands, with a short description
410 on what the commands do. A question mark will do the same. If you have
411 already typed a command but do not know what the parameters are, type a
412 space (to indicate the end of the command) and a question mark. You will
413 be informed of what Kermit can expect at that stage.
415 @Index[Input]INPUT @i<seconds> @i<text>@\Setup a text line and time delay
416 for your CP/M system to expect from the host, then wait up to the given number
417 of seconds (approximately) for text to be sent to your CP/M-80 system.
419 @Index[LOG]LOG @i<filespec>@\When CONNECTed to a foreign host as a terminal,
420 log the terminal session to the specified diskette file. This functionality
421 depends to some extent on the remote host's ability to do
422 @Index[XON/XOFF]XON/XOFF flow control, and does not guarantee a complete
423 transcript (after all, that's what the KERMIT protocol is for). The log file
424 is closed when the connection is closed by typing the escape character followed
425 by the single-@|character command "C".
428 @\It is possible to temporarily suspend logging during connect
429 state. Typing an escape sequence can turn file logging on
430 (<escape-character> R for Resume) or off (<escape-character> Q for quiet).
432 @\Re-entering connect state will re-open the previously opened
433 log file and append to that file.
435 @Index[LOGOUT]LOGOUT@\Like BYE, but leaves you at Kermit-80 command level.
437 @index<OUTPUT>OUTPUT @i<text>@\Send the text to the remote computer as if
440 @Index[Pause]PAUSE @i<seconds>@\If this command is issued your CP/M
441 system will wait a while before proceeding with another command.
442 This is intended for use in TAKE commands, where you may want to pause
443 for a while before proceeding with the rest of the TAKE file. The
444 actual delay is very variable between systems, and values should
445 be determined on a trial and error basis.
447 @Index[Print]PRINT@\Print a file to the console and printer. Output to
448 the printer is buffered by the Kermit-maintained printer buffer.
449 This routine is identical to TYPE but characters are echoed to the printer
450 as well as to the screen. Suspending and canceling output is as
453 QUIT@\Synonym for EXIT.
455 @Index[RECEIVE]@Index[File-Warning]
456 RECEIVE @i<filespec>@\Receive file(s) from the remote
457 Kermit, and save them under the names provided in the file headers
458 supplied by the remote host. If a local filespec is given, the file is
459 saved under the given filename. If the names aren't legal, use as
460 many legal characters from
461 the name as possible (see the description of SET FILE-WARNING below). If
462 there's a conflict, and FILE-WARNING is ON, warn the user and try to build a
463 unique name for the file by adding "@q<&>" characters to the name. RECEIVE
464 can be abbreviated to the single letter R.
466 @index<REMOTE>REMOTE @i<command>@\Send a command to a remote Kermit server.
467 The results are sent back to your CP/M screen. When two arguments are
468 required and specify less than two in the command, you will be prompted for
469 the missing arguments. REMOTE commands include:
470 @begin<description,leftmargin +4, indent -4>
471 REMOTE CD [directory]@\Ask the remote server to change its default directory.
472 If no directory is specified, the server changes to its login directory.
474 REMOTE COPY file1 file2@\Ask the remote server to copy file1 to file2.
476 REMOTE RENAME file1 file2@\Ask the remote server to rename file1 to file2.
478 REMOTE DELETE filespec@\Ask the remote server to delete the named file or
481 REMOTE DIRECTORY [filespec]@\Ask the remote server to display a directory
482 listing of the given files or, if the filespec is omitted, all the files in
483 the current device or directory.
485 REMOTE DISK-USAGE@\Ask the remote server to display information about its
486 disk usage (such as free or used space).
488 REMOTE ERASE filespec@\Same as REMOTE DELETE.
490 REMOTE FINISH@\Same as FINISH.
492 REMOTE HELP@\Ask the remote server to display a list of the commands it
495 REMOTE HOST command@\Ask the remote server to have its operating system
496 execute the given command.
498 REMOTE KERMIT command@\Ask the remote server to execute the given Kermit
499 command, given in the server Kermit's command syntax.
501 REMOTE LOGIN user password@\Log in to a remote Kermit server which has been
502 set up to require a username and password.
504 REMOTE MESSAGE text@\Send the text to the remote server for display on its
505 screen (useful with MS-DOS Kermit servers).
507 REMOTE SET parameter value@\Ask the remote server to set the given parameter
508 to the given value, for example REMOTE SET FILE TYPE BINARY. Type REMOTE SET
509 ? to see a list of the REMOTE SET options.
511 REMOTE SPACE@\Same as REMOTE DISK-USAGE.
513 REMOTE STATUS@\Ask the remote server to provide a status report.
515 REMOTE TYPE file@\Ask the remote server to display the named file on
518 REMOTE WHO [user]@\Ask the remote server for a list of users who are logged
519 in, or if a user is specified, for a report on the named user.
522 RENAME file1 file2@\Rename local CP/M file1 to file2.
524 @Index[SEND]SEND @i<filespec>@\Send file(s) specified by @i<filespec> to
525 the remote Kermit. The @i<filespec> may contain CP/M wildcards. SEND may
526 be abbreviated to the single letter S.
528 @Index[SET]SET @i<parameter> [@i<value>]@\Set the specified parameter to
529 the specified value. Possible parameter settings:
531 @begin<description,leftmargin +8,indent -8>
533 @Index[Autoreceive]AUTORECEIVE@\ON (or OFF). Allows several files to be
534 received without having to type RECEIVE on the receiving machine. The routine
535 simply looks for activity on the serial line, and if so fudges a RECEIVE
536 command. The packet sent by the sender will be lost.
538 @Index[Block Check]BLOCK-CHECK-TYPE @i<option>
540 @begin<description,spread 0,leftmargin +8,indent -8>
541 1-CHARACTER-CHECKSUM@\Normal, default, standard 6-bit checksum.
543 2-CHARACTER-CHECKSUM@\A 12-bit checksum encoded as two characters.
545 3-CHARACTER-CRC-CCITT@\A 16-bit CCITT-format Cyclic Redundancy Check, encoded
550 @Index[Buffer size]BUFFER-SIZE @i<value>@\This allows you to set a buffer
551 size during transfer of data. On some systems it takes so long that the
552 remote end times out while the local system is reading or writing to disk.
553 The size is the number of 128 disk sectors (nominal) and can be from 1
554 (128 bytes) to 64 (8 kbytes).
556 @\CP/M-80 filenames will still be mapped to uppercase characters.
558 @index<COLLISION>COLLISION value@\What to do when a file arrives that has
559 the same name as an existing file. BACKUP means to rename the existing file.
560 DISCARD means to discard and reject the incoming file. OVERWRITE means to
561 overwrite the existing file. RENAME means to rename the existing file.
563 @Index[Debug]DEBUG@\ON (or OFF). Enables/disables displaying of packets
564 on the screen during file transfer. Not performed if the QUIET option
565 has been set for the terminal (SET TERMINAL QUIET)
567 @Index[Default Disk]DEFAULT-DISK @i<drive letter>
568 @\This allows you to set the default
569 disk as source and destination
570 of file transfers. In addition, issuing this command causes you to switch to
571 the specified disk and log it in, write-@|enabled.
572 The colon must be included in the disk name (A:).
573 The selected disk appears
574 in your KERMIT-80 prompt, for instance @example[Kermit-80 14A:>]
576 @Index[Directory file size]DIRECTORY-FILE-SIZE ON (or OFF).
578 @\By setting DIRECTORY-FILE-SIZE OFF you can get an abreviated listing of your
579 disk drive. File sizes are not calculated, and five files are shown on
580 a line. Setting this option ON will show file sizes of each file.
582 @\Both options will list the free space remaining.
584 @Index[Escape Character]ESCAPE@\Change the escape character for
585 virtual terminal connections. Kermit-80 will prompt you for the new
586 escape character, which you enter literally.
588 @Index[File-mode]FILE-MODE @i<option>
589 @\Tells KERMIT-80 what kind of file it
590 is sending, so that KERMIT can correctly determine the end
591 of the file. SET FILE BINARY means to send all the
592 128-@|byte blocks (ie logical CP/M sectors)
593 of the file, including the last block in its entirety; SET
594 FILE ASCII is used for text files, and transmission stops when the first
595 Control-Z is encountered anywhere in the file (this is the CP/M convention for
596 marking the end of a text file).
598 @\SET FILE-MODE DEFAULT tells Kermit to attempt to determine the file type by
599 examining the file being transmitted. If a Control-Z appears before the
600 last block of the file, it is assumed to be BINARY; if, when the first
601 Control-Z is encountered, the remainder of the file contains only control-Z's,
602 it is assumed to be a text file. Unfortunately, not all programs fill the
603 remainder of the last record of a text file with Control-Z's,
604 so this algorithm is not always successful.
606 @\If binary transmission is used on a text file, or a compressed file
607 (eg a .DQC file) some extraneous characters (up to 127 of them)
608 may appear at the end of the file on the target system.
610 @\If ASCII transmission is used on a binary file, any 8th bits set will
611 be stripped and a warning sent to the console. When the first control-Z
612 is encountered, the file is assumed to be at the end, even if it is not.
614 @Index[Flow Control]FLOW-CONTROL ON (or OFF)
615 @\Sets XON/XOFF flow control on or off. If set ON the host is expected
616 to respond to an XOFF or XON sent by Kermit-80. If set off,
617 no flow control is assumed and any XON/XOFF is ignored.
619 @Index[IBM]IBM ON (or OFF)@\Allow the transfer of files to and from an IBM
620 mainframe computer. This makes Kermit-80 wait for the IBM turnaround character
621 (XON), ignore parity on input, add appropriate parity to output, and use local
622 echoing during CONNECT. As distributed, KERMIT-80 uses MARK parity for IBM
623 communication. If you don't give this command, IBM mode is OFF. Since IBM
624 VM/CMS KERMIT does not have timeout capability, SET IBM ON also turns on the
625 "fuzzy timer" automatically.
627 @Index[Local-Echo]LOCAL-ECHO ON (or OFF)@\When you CONNECT to a remote
628 host, you must set LOCAL-@|ECHO ON if the host is half duplex, OFF if
629 full duplex. OFF by default.
631 @Index[Logging]LOGGING ON (or OFF)@\Cease or resume logging whenever
632 connect mode is entered. This is really only applicable after a LOG
633 command is no longer required.
635 @Index[No-exit]NO-EXIT@\This command is applicable only for Kermit initiated
636 with a command tail. For example, if Kermit was initiated by:
638 @\KERMIT ;SEND HELLO;NO-EXIT
640 @\Kermit would first seek out and execute the KERMIT.INI file (if present),
641 then send file HELLO to a remote system. Usually Kermit would exit back
642 to CP/M, but NO-EXIT over-rides this. STAY is a synonym for NO-EXIT.
644 @\Note the leading semicolon. This clears leading spaces from the first
647 @Index[OUTPUT]OUTPUT @i<text-line>@\Send a line of text to the remote computer
648 (or modem). This simply copies the string to the correct line, and assumes all
649 appropriate parameters have been set to be used, e.g. speed, parity etc.
650 It is intended for use in TAKE command files.
652 @Index[Parity]PARITY @i<option>
653 @\Sets parity for outgoing characters to one of the
654 following: NONE, SPACE, MARK, EVEN, or ODD. On input, if parity is NONE, then
655 the 8th bit is kept (as data), otherwise it is stripped and ignored. The
656 parity setting applies to both terminal connection and file transfer.
657 If you set parity to anything other than none, KERMIT-80 will attempt to use
658 @Index<Eighth-Bit Prefix>
659 "8th bit prefixing" to transfer binary files. If the other KERMIT is also
660 capable of 8th bit prefixing, then binary files can be transferred
661 successfully; if not, the 8th bit of each data byte will be lost (you will see
662 a warning on your screen if this happens).
664 @Index[Port]PORT @i<port name>
665 @\Allows you to switch between different communication ports.
666 This command is not available on all systems.
667 Type @q<SET PORT ?> for a list of valid options for your system. (Note:
668 If your system does not support several ports, this command will
669 return a "Not implemented" error if you try to set a port.)
671 @Index[PRINTER]PRINTER@\ON (or OFF)
672 @\Turns copying of CONNECT session to printer on and off. It is also
673 possible to toggle the printer on/off from the connect state, by
674 typing <escape character> followed by P.
676 @Index[Set Receive]RECEIVE @i<parameter> [@i<value>]
677 @\Set a RECEIVE parameter.
679 @begin<description, Spread 0, leftmargin +8,indent -8>
681 @Index[Pad character]
682 PAD-CHAR@\Set the PAD character to use while receiving files.
683 Currently a dummy, as for SET SEND PAD-CHAR.
685 @Index[Set padding]PADDING [value]
686 @\Set the number of PAD characters to use while receiving files.
687 Same as SET SEND PADDING.
689 @Index[Set Start of packet]
690 START-OF-PACKET [value]
691 @\Set the default start of Packet character for receiving files. Apply the
692 same rules and considerations as for SET SEND START-OF-PACKET.
694 PACKET-LENGTH number@\Tell the other Kermit the longest packet length CP/M
695 Kermit is willing to receive during file transfer. The maximum length is 94,
696 which is also the default length.
700 @Index[Set Send]SEND @i<parameter> [@i<value>]
701 @\Set a SEND parameter.
702 @begin<description, spread 0, leftmargin +8,indent -8>
704 @Index[Pad character]
705 PAD-CHAR@\Set the Pad character to be used while sending files.
706 It is currently a dummy entry, and does not do anything.
710 @\Set the number of PAD-CHARS to be used while sending files. This
713 @Index[Set Start of packet]
714 START-OF-PACKET@\Set the default start of packet character to
715 another character than control-A. This may be necessary on systems
716 (including intervening networks) that trap control-A characters. Choose
717 a control character not otherwise used, ie not carriage return (13D, ODH),
718 line feed (10D, OAN), tabs (09D, 09H), backspace (08H), and bell (07H)
719 or any other used between you and your remote system.
723 @Index[Baud]SPEED @i<value>
724 @\Change the baud rate of the communications port. This
725 command only works on some systems. @i<value> is the numeric baud rate
726 (300, 9600, etc.) desired. Type SET SPEED followed by a question mark
727 for a list of supported baud rates.
728 On systems that do not support this command, you must set the port
729 baud rate from CP/M or other setup mechanism outside of KERMIT-80.
731 @Index[TacTrap]TACTRAP@\Set the TAC intercept character. If you are attached
732 to a TAC it will swallow the intercept character (commercial AT sign by
733 default) so Kermit sends it twice. With this command you can set the
734 intercept character (ie the one to send twice) to another character.
736 @Index[VT52 Emulation]
737 @Index[Terminal Emulation]
738 @Index[External Terminal Emulation]
740 @\Select one of the following terminal characteristics:
742 @begin<description,spread 0.5,leftmargin +8,indent -8>
744 OFF@\sets emulation off, and its up to the attached terminal to
745 respond to escape sequences sent from the remote host system.
747 DUMB@\Like off, but carriage return and line feed characters are
748 the only control characters accepted. All other control characters are
749 simply ignored. (Really a "Glass TTY").
751 EXTERNAL@\Emulation is provided for by a routine in the system dependent
752 part of Kermit. Attempting to set this option without having and
753 externally supplied routine will returna "Not Implemented" error.
755 OFF@\All characters are passed directly to the terminal without any
756 interpretation by Kermit.
758 VT52@\When connected as a terminal
759 to a foreign host, the micro emulates a VT52.
760 VT52 emulation is set by default, except on micros
761 that already have terminal functionality built in, such as the DEC VT180 and
762 DECmate (these act as @index<VT100 Emulation>VT100-@|series terminals). Some
763 systems emulate other terminals, like the ADM3A; see table @ref<-cpmterms>.
765 QUIET@\Do not display any file transfer information onto the console.
766 This mode is useful if you console takes a long time to update the display.
767 Only the file name is displayed. DEBUGging information is not displayed
770 REGULAR@\Inverse of QUIET. All packets etc displayed, as ususal.
773 @Index[TIMER]TIMER ON (or OFF)@\Enable or disable the "fuzzy timer". The timer
774 is off by default, because in the normal case KERMIT-80 is communicating with a
775 mainframe KERMIT that has its own timer. Mainframe KERMIT timers tend to be
776 more precise or adaptable to changing conditions. You should SET TIMER ON if
777 you are communicating with a KERMIT that does not have a timer. You should SET
778 TIMER OFF if you are communicating over a network with long delays.
780 @Index[USER]USER @i<user-number>
781 @\Sets another user number to be active.
782 Acceptable user numbers are 0 to 31, though it is recommended to use
783 user numbers 0 to 15 only.
784 This is really only useful for Winchester Systems with high disk capacities.
786 @Index[Warning]WARNING ON (or OFF)@\Warn user of filename conflicts when
787 receiving files from remote host, and attempt to generate a unique name by
788 adding "@q<&>" characters to the given name. ON by default, which is
789 equivalent to SET COLLISION RENAME.
792 @Index[Show]SHOW@\Display all settable parameters. You will get a page or so
793 of the status af all parameters that can be set using the SET command.
795 @Index[Status]STATUS@\The same function as Show.
797 STAY@\Equivalent to SET NO-EXIT.
799 @Index[Take]TAKE @i<filespec>@\Take characters and commands from the
800 specified file as if they were entered from the keyboard.
801 This is useful if you want to set up a batch job. A command
802 file can send, get, receive, set functions
803 etc automatically. A TAKE command can be interrupted with ^C.
805 @\An automatic "TAKE KERMIT.INI" is executed from the default drive
806 when Kermit-80 is loaded. This can be used to set defaults of band rate,
807 parity, filetype, default drive etc.
809 @\If KERMIT.INI does not exist, control is given directly to the user.
811 @Index[TRANSMIT]TRANSMIT @i<filespec> @i<turnaround>@\Send the specified file
813 the other end of the connection as though it were being typed at the terminal,
814 one line at a time. Each line sent is terminated with a carriage return, and
815 any line feeds are stripped from the file sent.
816 After each line has been sent Kermit waits for a character string
817 from the host (eg a acrriage return). If not specified, a carriage
818 return is assumed. No KERMIT protocol is involved.
819 An asterisk (star) is sent to the console for every line sent, to indicate
820 how the transfer is progressing.
821 This is useful for sending files to systems that don't have a
822 KERMIT program. During transmission, you may type one of these
823 single-@|character commands:
824 @begin<description,spread 0,leftmargin +4, indent -4>
825 Control-C@\Cease transmission, and drop into terminal emulation mode.
827 CR@\(carriage return) Re-transmit the previous line.
830 @Index[Type]TYPE filespec@\Type a local CP/M file or files on the CP/M screen.
832 will cancel the command and return to the Kermit prompt. A Ctrl-X will cancel
833 the current file and go on to the next one, if any.
834 Typing any other character
835 while the file is being displayed will suspend
836 the output. Another character will resume output.
838 @Index[VERSION]VERSION@\Show the name, edit number, and edit date of several of
839 the modules that make up Kermit-80.
843 @section<Kermit-80 Flavors>
844 @Comment(begin<description, leftmargin -8, indent +2>)
846 Many of the systems supported use an external terminal, rather than a built-in
847 console. Kermit may be further customized for these systems by defining
848 (at assembly time) the terminal type to be used.
849 If the terminal type is unknown or does not match any of the existing
850 terminal options, the generic "CRT" option may be selected. In this case,
851 Kermit cannot do fancy screen control during file transfer; it simply types the
852 file names, packet numbers, and messages in sequence across and down the
853 screen. This works best if you can put your micro or terminal in "autowrap"
854 mode; otherwise the packet numbers will pile up in the rightmost column; the
855 filenames and messages will always appear on a new line, however.
856 If no specific terminal has been selected, Kermit cannot do VT52 emulation;
858 as a "dumb terminal" (sometimes called a "glass TTY"), or else its own built in
859 terminal firmware provides cursor control functions independent of the Kermit
862 @subsection<Generic Kermit-80>
863 @index<Generic Kermit-80>@index<8080> "Generic Kermit-80" is an implementation
864 of Kermit that should run on any 8080-@|compatible CP/M 2.2 system with no
866 at all, or perhaps only a minor one. Unlike other Kermit-80 implementations,
867 it contains no system-@|dependent manipulation of the serial port.
868 All I/O is done with standard CP/M BIOS@index<BIOS> calls, and I/O redirection
869 is done using the CP/M IOBYTE function, which, according to the Digital
870 Research @i<CP/M Operating System Manual>, is an optional feature of any
871 particular CP/M implementation. If your system does not provide the IOBYTE
872 function, Generic Kermit-80 will not work; furthermore, not all systems that
873 implement IOBYTE do so in the same way.
874 The SET PORT command may be used to select the devices to be used for input
875 and output. Table @ref<-cpmports> lists the options to the SET PORT command
878 @begin<table,use example,centered>
881 @ux(SET PORT @i<xxx>) @ux(input from) @ux(output to)
888 @caption<Kermit-80 SET PORT Options>
893 The default is SET PORT PTR.
894 In all cases, the console (CON:) and list (LST:) devices used are those
895 selected when Kermit is started.
897 The reason all Kermit-80 implementations aren't
898 generic is that a good deal of speed is sacrificed by getting all services from
899 the operating system. While a specific implementation of Kermit-80 may be able
900 to operate at 4800, 9600, or even 56 Kilo baud,
901 generic Kermit will fail to work
902 on some systems at speeds in excess of 1200 baud. In addition, many features
903 of Kermit require more specific knowledge of the hardware involved. Generic
904 Kermit cannot send a BREAK signal, or change the baud rate, for example.
906 @subsection<CP/M 3 Kermit>
908 CP/M-3 Kermit (also known as CP/M-Plus Kermit) is a version of generic
909 Kermit-80, and should run on most CP/M-3 (CP/M-Plus) systems. It uses the
910 auxilliary port (AUX:) to communicate to the remote Kermit. The SET BAUD
911 and SET PORT commands are not supported; nor can a BREAK be sent.
912 Like generic Kermit-80, a terminal may be selected at assembly time.
914 @subsection<System-Specific Versions>
916 There are also many versions of Kermit-80 tailored to specific systems.
917 Most of these operate uniformly, but some of them take advantage (or suffer
918 limitations) of the specific system. Here are some of the special features
919 for particular systems:
921 @begin<description, leftmargin +4, indent -4>
922 @ux<Amstrad>: -- Two versions:
924 @begin<description, leftmargin +4, indent -4>
925 PCW 8256@\The PCW 8256/8512 with the serial inerafce attached.
927 CPC 6128@\The 664 with add on memory and 6128 are both supported.
928 Both systems must run CP/M Plus, so the 664 will need an add on RAM pack
929 and CP/M upgrade. A high speed transfer rate of 38k baud can be used
930 between Amstrad computers.
933 @ux<ACCESS>:@\Access Matrix computer using port J5. Supports SET
934 BAUD-RATE for rates of 300-9600 baud.
936 @ux<Apple II> -- four variations:
937 @begin<description,leftmargin +4,indent -4>
938 APMMDM:@\Apple with Z80 Softcard and Micromodem II in slot 2
939 Dialout capability provided in connect command; user is prompted for
940 phone number if carrier is not present. During connect mode,
941 @q(^]D) drops carrier. BYE command also causes carrier to be dropped.
943 AP6551:@\Apple with Z80 Softcard, and one of several 6551-based
944 communication cards; the slot number is a compile-time parameter
945 (default is slot 2). SET BAUD-RATE supported; speeds are 110-19200
948 APCPS:@\Apple with Z80 Softcard and CP Multi-Function Card. The slot
949 number is again a compile-time parameter. SET BAUD-RATE is supported
950 for baud rates from 50 baud to 19200 baud.
952 AP6850:@\Apple II with Z80 Softcard and a 6850-based USART in slot 2-the
953 slot being a compile-time parameter. SET BAUD-RATE is not supported.
956 @ux<BBC>:@\Acorn Computers BBC Computer with Acorn Z80 second
957 processor running CP/M-80. Supports SET BAUD-RATE and can send breaks.
959 @ux<BigBoard II>:@\Uses serial port A. To use port B, change mnport, mnprts,
960 and baudrt and reassemble. Can generate BREAK. SET SPEED supported;
961 speeds are 300-38400 baud.
964 @ux<Cifer>:@\Originally coded for Cifer 1886 using the VL: port set
965 as TTYI: and TTYO: but works successfully on 18xx and 28xx
968 There are now two versions, each with two variations: Either running
969 CP/M Version 2.2 or 3.0, and either using the VL: or AUX: ports. The VL:
970 port version can only use seven bits of data, so parity prefixing is
971 required for binary file transfers. This restriction is removed by
972 using the AUX: port. For those interested, the problem is due to the
973 interprocessor link between the video and CPU (!) boards. The VL: port
974 is on the video board, and the AUX: port on the CPU board,
975 and the inter processor link can only transfer seven bits of data.
977 Supports SET SPEED, and can generate breaks on
978 some models with a BREAK key.
981 @ux<Comart>:@\Comart Communicator-Similar to Northstar
982 equipment. Can generate BREAK.
984 @ux<Compupro>:@\Based on Kermit 3.x, and has been merged into V4.09
986 @ux<CPT-85xx word processors>:@\Can generate BREAK. SET SPEED supported;
987 speeds are 50-9600 baud.
989 @ux<Cromemco>:@\Cromemco computers with TU-ART card. Supports SET
990 BAUD-RATE (110-9600 baud).
992 @ux<DEC DECmate II word processor (with Z80 card)>:@\Can generate BREAK.
994 @ux<DEC VT180 (Robin)>:@\Three output ports, referred to as COMMUNICATIONS,
995 GENERAL, and PRINTER. Can generate BREAK.
997 @ux<Digicomp Delphi 100>:@\SET SPEED supported; speeds are 50-19200 baud.
999 @ux<Discovery>:@\Action Computer Enterprises "Discovery" Multi-user
1000 Computer. Uses Port B on an 83U user board. Supports SET SPEED
1001 for 50-19200 baud. Can generate BREAK.
1003 @ux<Epson>:@\Epson PX-8 with LCD display. Although it is quite different
1004 in displaying of Packet Information, it works as any other CP/M-80 Kermit.
1005 Supports SET SPEED and can generate BREAK.
1007 @ux<Generic Kermit>:@\Two versions, one for CP/M version 2@q<.>2 and
1008 version 3. These systems use IOBYTE flipping (V2@q<.>2) and the AUX:
1009 device to communicate to the serial line. You may have to SET PORT xxx
1010 before the version 2@q<.>2 will work, as Kermit needs to know what device
1013 @ux<Genie>:@\Eaca Video Genie.
1015 @ux<Heath>: Three Versions:
1016 @begin<description,leftmargin +4,indent -4>
1017 H8QUAD@\for Heath-8 systems with the quad io board. This system has been
1018 derived from V3.x code. Note that this version will not run "as is" on H89
1021 H89@\For Heath-89 machines suports baud rates from 50 to 56,000 baud.
1023 Z100@\For Z-100 running CP/M-85. This version does not support
1024 setting of baud rates.
1028 @ux<Intertec Superbrain>: Two Versions:
1029 @begin<description,leftmargin +4,indent -4>
1030 BRAINA@\For superbrain using AUX port. Breaks and SET BAUD both supported
1032 BRAINM@\As above, but using the MAIN port.
1035 @ux<Ithaca>:@\Ithaca Intersystems based computer using the VIO card for
1036 all IO to the outside world. The system is strictly speaking a
1037 home-brew variant of the Ithaca machine, using an S100 cardcage
1038 without a front panel. It uses the Extended BIOS by EuroMicro of London.
1039 However, I see no reason for this version not running on a genuine
1040 Ithaca Intersystems machine. There are patches needed to the EuroMicro
1041 BIOS to make this version work.
1043 @ux<Kaypro:>@\Should work on most Kaypro models, as well as some related
1044 systems (Ferguson BigBoard I, Xerox 820). For the newer Kaypros with multiple
1045 ports, Kermit uses the one labeled "serial data"; it cannot use the serial
1046 printer or internal modem ports (but it should be possible to modify the values
1047 for mnport, mnprts, and baudrt to do this). Can generate BREAK. SET SPEED
1048 supported; speeds are 50-19200 baud.
1050 @ux<Lobo>:@\Lobo MAX-80. Supports SET SPEED and can generate BREAKS.
1052 @ux<Merlin>:@\British Telecom Merlin M2215 (also Rair Black Box, possibly
1053 also the ICL PC?). Requires a terminal.
1055 @ux<Microbee>:@\Microbee Systems computer made in Australia. Works on
1056 Microbee 56K (Series 2 APC), 64K (Computer in a Book), 128K (Dynamic), and
1057 256K (256TC). Can generate BREAK. SET BAUD-RATE supported; speeds are
1058 75-9600. All serial I/O is via software, not hardware. Simultaneous transmit
1059 and receive possible on all speeds except 75/1200, 1200/75, 4800, and 9600.
1061 @ux<Micromate>:@\PMC 101 Micromate. Supports SET SPEED and can
1064 @ux<Micromint>: Two versions
1065 @begin<description, leftmargin +4, indent -4>
1066 S6@\The Ciarcia/Micromint sb-180 board with a 6Mhz procoessor. System
1067 requires a terminal.
1069 S9@\As above, but with a 9Mhz processor.
1072 @ux<NCR>:@\Decisionmate 5. Uses the 2651 and is largely
1073 the same as the Ithaca Intersystems machine implementation.
1076 @ux<Northstar>: -- There are four versions available:
1077 @begin<description,leftmargin +4,indent -4>
1078 NORTHS:@\Northstar Horizon with HS10-4 board. Supports SET SPEED
1081 HORIZON:@\Northstar Horizon using the serial ports on the Mother
1082 board. Can generate BREAK.
1084 BASICNS:@\Basic Northstar Horizon using the printer port.
1087 ADVANT:@\Northstar Advantage. Supports SET SPEED and can
1088 generate BREAK. Traps Control-0 in the system filter.
1091 @ux<Morrow Decision I>:@\Uses the Multi-I/O board. Port 1 is the console, port
1092 3 is the communications line. SET SPEED supported; speeds are 75-56000
1095 @ux<Morrow Micro Decision I>:@\
1097 @ux<Nokia MicroMikko>:@\
1098 Will not echo control-O (which locks keyboard). SET SPEED
1099 supported; speeds are 75-9600 baud.
1101 @ux<Ohio Scientific>:@\Doesn't have screen control.
1103 @ux<Osborne 1>:@\Uses serial line, not internal modem. Left-arrow
1105 <DEL> ("delete" or "rubout" character) during connect mode. SET SPEED
1106 supported; speeds are 300 and 1200 baud. Now supports multi-sector buffering.
1108 @ux<Research Machines>: Two Versions:
1109 @begin<description,leftmargin +4,indent -4>
1110 RM380ZM:@\380Z and 5.25" disks supports SET BAUD.RATE
1112 RM380ZF:@\380Z and 8" disks, otherwise as above.
1115 @ux<Sanyo>:@\Sanyo MBC-1100. This version derived from Kermit V3.x
1117 @ux<ScreenTyper>:@\Details unkown.
1119 @ux<TRS-80>: Three versions:
1120 @begin<description,leftmargin +4,indent -4>
1121 TRS80LB:@\TRS-80 with Lifeboat CP/M
1123 TRS80PT:@\TRS-80 with Pickles and Trout CP/M
1125 TRSM4:@\TRS-80 Model 4 with Montezuma CP/M
1128 @ux<Teletek>:@\Teletek Systemaster. Supports SET BAUD.
1130 @ux<Telcon>:@\TELCON ZOBRA portable computer.
1132 @ux<Torch>:@\Torch Unicorn 5 initially, but the code runs on other
1133 Z80 based CP/N (as in Nut!) systems. It uses the BBC Computer as a
1134 "Base processor", and is similar to the BBC version. The base processors
1135 RS423 port is used rather than any built in Modem.
1136 (UK telecoms legislation effectively makes modem control software
1137 tricky business...). Two potential versions exist-one using cursor
1138 positioning codes for a MCP and CCCP ROM combination of revision less
1139 than 1.00, the other version uses the additional facility MCP/CCCP
1140 versions greater than 1. Supports SET SPEED and can generate BREAKs.
1142 @\Note that binary files must be transferred using SET PARITY to anything
1143 other than NONE! Parity is neither generated nor checked.
1145 @ux<US Micro Sales>:@\S-100-8 based computer.
1147 @ux<Vector Graphics>:@\Vector
1149 @ux<Xerox>:@\Xerox 820.
1151 @ux<Z80MU>:@\Development Kermit on a PC running the Z80MU Z80 and CP/M 2@q<.>2
1152 development system. Allows development of the system independent modules
1153 to be done on an IBM PC or clone. Also allows the generation of new .HEX
1154 files, that may then be KERMITed to the target system. Note: Not all
1155 the BDOS or BIOS routines are supported, so avoid "unusual" BIOS/BDOS calls.
1156 (For example, DIR from within Kermit will fail as one of the BIOS routines
1157 returning disk parameters is not supported.)
1160 @section<Installation of Kermit-80>
1162 Kermit-80 was written originally for the Intertec SuperBrain in
1163 lowest-@|common-@|denominator @Index[8080] 8080 code with the standard
1164 assembler, ASM (single source module, no macros, no advanced instructions), so
1165 that it could be assembled on any CP/M-80 system (the 8080 assembler is
1166 distributed as a standard part of CP/M-80, whereas the fancier Z80@Index[Z80]
1167 or macro assemblers are normally commercial products). It has since been
1168 modified to run on many other systems as well. Kermit-80 should be able to run
1169 on any 8080-, 8085- or Z80-@|based microcomputer under @Index[CP/M] CP/M with
1170 appropriate minor changes to reflect the port I/O and screen control for the
1173 The proliferation of new systems supported by Kermit-80 made the program grow
1174 so large and complicated that it had to be broken up into system-@|independent
1175 and system-@|dependent modules, as of version 4 (this was done by Charles
1176 Carvalho of ACC). Each module is composed of multiple files. This has reduced
1177 the time and disk space necessary for assembly; Kermit-80 may once again be
1178 assembled on a CP/M system with roughly 250Kbytes of space. The majority of
1179 the code does not need to be reassembled to support a new system.
1180 Unfortunately, it can no longer be assembled with ASM, since ASM does not
1181 support multiple input files. To allow it to be assembled on any CP/M system,
1182 the public-domain assembler LASM is included in the distribution kit. Kermit-80
1183 may also be assembled with Microsoft's M80 (not supplied). In theory, any 8080
1184 assembler supporting the INCLUDE directive ought to work, as well.
1186 All versions of Kermit-80 are assembled from the same set of sources, with
1187 system dependencies taken care of by assembly-@|time conditionals within the
1188 system-@|dependent module (eventually, the system-@|dependent module will
1189 itself be broken up into multiple files, one for each system). The most
1190 important system dependencies are terminal emulation (when CONNECTed to the
1191 remote host) and screen handling, which are dependent on the individual micro's
1192 escape codes (these features are table driven and easily modified for other
1193 CP/M systems), and the lowest level I/O routines for the serial communications
1194 port. The port routines are best done only with BDOS calls, but some systems
1195 do not allow this, primarily because the BDOS routines strip the parity bit
1196 during port I/O, and the parity bit is used for data when transmitting binary
1199 Kermit-80's I/O routines must check the port status and go elsewhere if no
1200 input is available; this allows for virtual terminal connection, keyboard
1201 interruption of stuck transmissions, etc. On systems that fully implement I/O
1202 redirection via the optional CP/M IOBYTE facility, this may be done by
1203 switching the IOBYTE definition. On others, however, IN/OUT instructions
1204 explicitly referencing the port device registers must be used.
1207 CP/M-80 KERMIT versions 3.8 and later include a "fuzzy timer" that allows a
1208 timeout to occur after an interval ranging from 5 to 20 seconds (depending upon
1209 the speed of the processor and the operating system routines) during which
1210 expected input does not appear at the port. In this case, retransmission
1211 occurs automatically. In any case, you may type a carriage return during
1212 transmission to simulate a timeout when the transfer appears to be stuck.
1214 @subsection<Organization of Kermit-80>
1215 Kermit-80 consists of two modules, each of which is generated from multiple
1216 source files. The first module contains the system-@|independent code;
1217 the second module is configured for a particular system and merged with
1218 the system-@|independent module to produce a customized Kermit-80.
1220 The distribution kit contains:
1221 @begin<itemize,spread 0>
1222 the system-@|independent module, @q<CPSKER.HEX>;
1224 the system-@|dependent modules, @q<CPV*.HEX> (see table @ref<-cpmsystems1>
1225 and @ref<-cpmsystems2>);
1227 the source files, @q(CPS*.ASM) and @q(CPX*.ASM),
1229 the public-domain CP/M assembler, @q<LASM.*>,
1231 the public-domain CP/M load/patch utility, @q<MLOAD.*>
1234 @Comment(NewPage<> added for local manual)
1235 @begin<table,use verbatim,leftmargin +0>
1238 @u(Symbol Filename System)
1240 ACCESS CPVACC @r<Access Matrix>
1241 ADVANT CPVADV @r<Northstar Advantage>
1242 AP6551 CPVAPL @r<Apple II, Z80 Softcard, 6551 ACIA in serial interface>
1243 AP6850 CPVA65 @r<Apple II, Z80 Softcard, 6850 ACIA in Serial Iiterface>
1244 APMMDM CPVAPM @r<Apple II, Z80 Softcard, Micromodem II in slot 2>
1245 APCPS CPVCPS @r<Apple II, Z80 Softcard, with CPS multifunction card>
1246 BASICNS CPVBNS @r<Northstar Horizon (terminal required)>
1247 BBC CPVBBC @r<Acorn "BBC" computer with Acorn Z80 second processor>
1248 BBII CPVBB2 @r<BigBoard II (terminal required)>
1249 BRAINM CPVBRM @r<Intertec Superbrain using the main port>
1250 BRAINA CPVBRA @r<Intertec Superbrain using the Aux port>
1251 CIFER2 CPVCIF @r<Cifer 1886 using the VL: Serial port and CP/M V2.2>
1252 CIFER3 CPVCI3 @r<Cifer 1886 using the VL: Serial port and CP/M V3.0>
1253 CIFER2 CPVCA2 @r<Cifer 1886 using the AUX: Serial port and CP/M V2.2>
1254 CIFER3 CPVCA3 @r<Cifer 1886 using the AUX: Serial port and CP/M V3.0>
1255 CMEMCO CPVCRO @r<Cromemco with TU-ART card. Terminal required)>
1256 COMART CPVCOM @r<Comart Communicator (terminal required)>
1257 COMPRO CPVPRO @r<Compupro with Interfacer 4 (or 3). Terminal required.>
1258 CPC CPVCPC @r<Amstrad CPC 664 and 6128 and CP/M 3>
1259 CPM3 CPVCP3 @r<"Generic": CP/M 3.0 (CP/M Plus) systems (terminal req'd)>
1260 CPT85XX CPVCPT @r<CPT-85xx wordprocessor with CP/M>
1261 DELPHI CPVDEL @r<Digicomp Delphi 100 (terminal required)>
1262 DISC CPVDIS @r<Action Computer Enterprises "Discovery" (terminal req'd)>
1263 DMII CPVDM2 @r<DECmate II with CP/M option>
1264 GENER CPVGEN @r<"Generic": CPM 2.2 systems with IOBYTE (terminal req'd)>
1265 GENIE CPVGNI @r<Video Genie>
1266 H8QUAD CPVH8Q @r<Heath-8 with Quad 8 i/o board>
1267 HEATH CPVH89 @r<Heath/Zenith H89>
1268 HORIZON CPVHOR @r<Northstar Horizon (terminal required)>
1269 KPII CPVKPR @r<Kaypro-II (and 4; probably supports all Kaypro systems)>
1270 LOBO CPVLBO @r<Lobo Max-80>
1271 @begin<text,facecode R,above 1>
1272 "symbol" is the symbol used to select the target system, in @q<CPVTYP.ASM>;
1274 "filename" is the name under which the module is supplied in the distribution.
1276 @caption<Systems supported by Kermit-80 (Part 1)>
1282 @Comment(NewPage<> added for local manual)
1283 @begin<table,use verbatim,leftmargin +0>
1286 @u(Symbol Filename System)
1288 M2215 CPVMRL @r<British Telecom Merlin/Rair Black Box (terminal required)>
1289 MBEE CPVBEE @r<Microbee>
1290 MDI CPVMDI @r<Morrow Decision I (terminal required)>
1291 MIKKO CPVMIK @r<MikroMikko>
1292 MMATE CPVMM @r<PMC 101 Micromate (terminal required)>
1293 MMDI CPVUD @r<Morrow Micro Decision I (terminal required)>
1294 NCRDMV CPVDMV @r<NCR Decision Mate V. (Terminal required?)>
1295 NORTHS CPVNS @r<Northstar Horizon with HSIO-4 card (terminal req'd)>
1296 OSBRN1 CPVOSB @r<Osborne 1>
1297 OSI CPVOSI @r<Ohio Scientific>
1298 PCI2651 CPVPCI @r<Ithaca Intersystems with VI0 card (terminal required)>
1299 PCW CPVPCW @r<Amstrad PCW 8256/8512 with serial interface>
1300 PX8 CPVPX8 @r<Epson PX-8>
1301 RM380ZM CPVRMM @r<Research Machines 380Z with MDS (5.25" discs)>
1302 RM380ZF CPVRMF @r<Research Machines 380Z with FDS (8" discs)>
1303 ROBIN CPVROB @r<DEC VT180>
1304 S1008 CPVUSM @r<US Microsales S-100-8 (terminal required)>
1305 SANYO CPVSAN @r<Sanyo MBC-1100>
1306 SB6 CPVSB6 @r<Micromint SB-180 with 6Mhz CPU (terminal required)>
1307 SB9 CPVSB9 @r<Micromint SB-180 with 9Mhz CPU (terminal required)>
1308 SCNTPR CPVSCN @r<Screentyper>
1309 TELCON CPVTEL @r<TELCON Zobra portable>
1310 TELETEK CPVTET @r<Teletek Systemaster>
1311 TORCH CPVTRC @r<Torch computers BBC-B with Z80 second processors>
1312 TRS80LB CPVTLB @r<TRS-80 model II with Lifeboat 2.25C CP/M Display>
1313 TRS80PT CPVTPT @r<TRS-80 model II with Pickles + Trout CP/M Display>
1314 TRSM4 CPVTM4 @r<TRS-80 model IV>
1315 VECTOR CPVVEC @r<Vector Graphics>
1316 XER820 CPVXER @r<Xerox 820>
1317 Z100 CPVZ00 @r<Z-100 under CP/M-85>
1318 Z80MU CPVZ80 @r<Z80MU development system on a PC>
1319 @begin<text,facecode R,above 1>
1320 "symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
1322 "filename" is the name under which the module is supplied in the distribution.
1324 @caption<Systems supported by Kermit-80 (Part 2)>
1329 @Comment(NewPage added for local manual)
1331 @begin<table,use verbatim,leftmargin +0>
1334 @u(Symbol Terminal type)
1336 CRT @r<Dumb terminal type. Does not do cursor addressing>
1337 ADM3A @r<Lear Seigler ADM 3A>
1338 ADM22 @r<Lear Seigler ADM 22>
1340 H1500 @r<Hazeltine 1500>
1341 SMRTVD @r<Netronics Smartvid>
1342 SOROQ @r<Soroq IQ-120>
1343 TVI912 @r<Televideo 912>
1344 TVI925 @r<Televideo 925 or Freedom 100>
1345 VT52 @r<Dec VT52 or equivalent (H19)>
1346 VT100 @r<Dec VT100 or equivalent>
1348 @begin<text,facecode R,above 1>
1349 "symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
1351 "Terminal type" is the type of terminal "symbol" selects.
1353 @caption<Terminals supported by Kermit-80>
1357 @Comment(NewPage<> removed again)
1359 @Comment<for Installation of kermit-80>
1361 @subsection<Downloading Kermit-80>
1363 You'll need either a pre-configured @q<.COM> file or the system-@|independent
1364 module, @q<CPSKER>, in binary (@q<.COM>) or hex (@q<.HEX>) format and the
1365 system-@|dependent overlay for your system (from Tables @ref<-cpmsystems1> and
1366 @ref<-cpmsystems2>). If
1367 your system is not listed in the table, get the generic CP/M 2@q(.)2 Kermit or
1368 the generic CP/M 3 Kermit. If you already have a version of Kermit on your
1369 micro and you want to install a new version, simply use your present version to
1370 get the new files. Transfer the files to your system and skip ahead to
1371 "merging the modules".
1373 If you do not have a copy of Kermit on your micro, and you cannot borrow a
1374 Kermit floppy but you do have access to a mainframe computer with a copy of the
1375 Kermit-80 distribution, you should read this section.
1377 @Index[Bootstrapping CP/M Kermit]@index<Downloading>
1378 There are several ways to get CP/M Kermit from a host system to your micro.
1379 The easiest is to "download" the necessary "hex" files into your micro's
1380 memory and then save them on the disk. If you have a terminal emulator program
1381 on your micro which can save a copy of the session to disk, connect to your
1382 host, and type the necessary files. Exit from the emulator, saving the
1383 session log, and edit the session log to extract the hex files. Skip ahead to
1384 "merging the files".
1386 The following is a procedure which, though far from foolproof, should allow you
1387 to get a version of Kermit to your CP/M based micro. It depends upon the host
1388 prompt, or at least the first character of the host prompt, being some
1389 character that cannot appear in a hex file (the valid characters for hex files
1390 are the digits 0-9, the upper case letters A-F, the colon ``@q<:>'', carriage
1391 return, and line feed). As soon the prompt character is encountered, the
1392 transfer will terminate. If your host does not issue a prompt that will
1393 accommodate this scheme, you can achieve the same effect by adding an atsign
1394 ``@@'' to the very end of the hex file before sending it from the host. The
1395 program below looks for an atsign (the normal DEC-20 prompt, hex 40).
1396 DECSYSTEM-10 users would look for a dot, hex 2E; VAX/VMS or UNIX users would
1397 look for a dollar sign, hex 24; UNIX C-Shell users would look for a percent
1401 For CP/M 2@q<.>2 systems, connect to a floppy disk with plenty of free space.
1402 Run DDT and type in the following (the comments should not be typed in;
1403 they are there just to tell you what's happening): (Note that this wont work
1404 for CP/M Plus or 3@q<.>0 systems!)
1405 @Begin<figure, use Example, leftmargin +0>
1408 -a100 ;Begin assembling code at 100
1409 0100 LXI H,2FE ;Where to store in memory
1410 0103 SHLD 200 ;Keep pointer there
1411 0106 MVI E,D ;Get a CR
1412 0108 MVI C,4 ;Output to PUNCH (send to HOST)
1414 010D MVI C,3 ;Input from READER (read from HOST)
1416 0112 ANI 7F ;Strip parity bit
1417 0114 PUSH PSW ;Save a and flags
1418 0115 MOV E,A ;Move char to E for echo
1419 0116 MVI C,2 ;Output to screen
1421 011B POP PSW ;Restore A and flags
1422 011C CPI 40 ;(or 4E,24,26,etc) System prompt?
1423 011E JZ 127 ;Yes, have whole file in memory
1424 0121 CALL 17A ;No, store another byte
1425 0124 JMP 10D ;Read another byte
1426 0127 MVI A,1A ;Get a Control-Z (CP/M EOF mark)
1427 0129 CALL 17A ;Store it in memory
1428 012C LXI H,300 ;Get memory pointer
1429 012F SHLD 202 ;Store as DMA pointer
1430 0132 LDA 201 ;Get 'HI' byte of memory pointer
1431 0135 STA 200 ;and store it as 'LO' one
1433 0139 STA 201 ;Zero 'HI' byte (slow *256)
1434 013C MVI C,16 ;Make NEW file
1435 013E LXI D,5C ;With FCB1
1437 0144 CALL 15E ;Write 128 bytes (sector)
1438 0147 CALL 15E ;Write another sector
1439 014A LXI H,FFFF ;Get a 16-bit Minus One
1441 014E LHLD 200 ;Get 256-byte counter
1442 0151 DAD D ;Decrement
1443 0152 SHLD 200 ;and store back
1444 0155 MVI A,2 ;Check if
1445 0157 CMP L ; 256-byte counter down to offset
1446 0158 JZ 183 ;Yes, we're done
1447 015B JMP 144 ;Keep writing..
1448 015E LHLD 202 ;Get file-pointer
1450 0162 MVI C,1A ;Set DMA-address
1452 0167 MVI C,15 ;Write sector (128 bytes)
1453 0169 LXI D,5C ;using FCB1
1455 016F LHLD 202 ;Get file-pointer
1456 0172 LXI D,80 ;128-bytes
1457 0175 DAD D ;added to file-pointer
1458 0176 SHLD 202 ;and save
1459 0179 RET ;and return
1460 017A LHLD 200 ;Get Memory-pointer
1461 017D MOV M,A ;Store character
1462 017E INX H ;Increment Pointer
1463 017F SHLD 200 ;and save
1464 0182 RET ;and return
1465 0183 MVI C,10 ;CLOSE file
1466 0185 LXI D,5C ;using FCB1
1468 018B JMP 0 ;Force WARM BOOT
1470 -^C ;(Type Control-C) Return to CP/M
1471 A>SAVE 1 FETCH.COM ;Save program, we need to run it twice.
1472 @caption<Bootstrap program for Kermit-80 and CP/M Version 2.2>
1476 Alternatively, an assembler source file for this program is distributed
1477 with CP/M Kermit as @q<CPKFET.ASM>. You might prefer to type the assembler
1478 version in and assemble and load it (ASM CPKFET, LOAD CPKFET, or MASM CPKFET,
1479 MLOAD CPKFET), to let the assembler and loader catch any typing errors.
1481 Connect to your host using a terminal or a terminal emulation program. Ensure
1482 that your host does not have your terminal in "page mode" (does not pause
1483 at the end of each screenful).
1485 Tell the host to display the first hex file (the system-independent module)
1486 at your terminal, e.g. give a command like @q<TYPE CPSKER.HEX>, @i<@u(without)
1487 a terminating carriage return>.
1489 Return to your micro by switching the cable from the terminal to the micro,
1490 or by terminating the micro's terminal program.
1492 Make sure your IOBYTE is set so that @q<RDR:> and @q<PUN:> correspond to the
1493 I/O port that is connected to the host (this would normally be the case
1494 unless you have done something special to change things).
1496 Load the program you entered in the first step with DDT, and use it to capture
1498 @Begin<Example,Free>
1500 -icpsker.hex ;Setup FCB for file CPSKER.HEX
1501 -g100,179 ;Execute the program.
1503 Now there should be a file @q<CPSKER.HEX> on your connected disk.
1505 Return to the host, and tell it to display the second hex file (the
1506 system-@|dependent module for your configuration). Again, do not type the
1507 terminating carriage return.
1509 Return to your micro, and run the capture program again:
1510 @Begin<Example,Free>
1512 -icpxovl.hex ;Setup FCB to create CPXOVL.HEX
1513 -g100,179 ;Execute the program.
1515 Now there should be a file @q<CPXOVL.HEX> on your connected disk. Replace
1516 @q<CPXOVL.HEX> in this example with the appropriate overlay file for your
1521 For purposes of illustration, we will assume the system-@|dependent overlay is
1522 called "cpxovl@q<.>hex". The two hex files may be combined with MLOAD or DDT.
1523 If you already have a running Kermit, you can transfer @q<MLOAD.HEX> to your
1524 system and create @q<MLOAD.COM> by running LOAD. If you're bootstrapping
1525 Kermit, you could transfer @q<MLOAD.HEX> to your system the same way you got
1526 the other two @q<.HEX> files, but it's probably simpler to use DDT to get
1527 Kermit running, and get MLOAD later if you need it.
1529 Using MLOAD, the two pieces may be easily merged:
1531 A>@ux(mload kerm411=cpsker,cpxovl)
1532 @i[(Some messages about program size, etc...)]
1536 If you don't have MLOAD running, it's a bit more complex:
1538 A>@ux<ddt cpsker.hex>
1546 A>@ux<save @i(dd) kerm411.com>
1548 The page count ("dd") used in the SAVE command is calculated from the last
1549 address ("xxxx") given by DDT in response to the R command: drop the last two
1550 digits and add 1 if they were not zero, then convert from hexadecimal (base 16)
1551 to decimal (base 10): 684F becomes 69 hex, which is 105 decimal (5 times
1552 16 plus 9) -- but 6700 becomes 67 hex, or 103 decimal (consult an
1553 introductory computing book if you don't understand number base conversion).
1555 If you are using the Z80MU CP/M and Z80 development toolkit on an IBM PC
1556 or clone, then follow the same instructions as for a genuine CP/M system.
1557 When you have loaded your file, you will have to ship the .COM or two
1558 .HEX files to the target CP/M system. (Possibly using a previous
1562 Note that CP/M hex files have checksums on each line. If there were any
1563 transmission errors during the downloading process, MLOAD or DDT will notice a
1564 bad checksum and will report an error (something like "Illegal Format"). If
1565 you get any errors during loading, either fix the hex file locally with an
1566 editor, or repeat the transfer.
1570 You now should have a running version of Kermit-80, called @q<KERM411.COM>.
1572 Test your new Kermit by running it. If it gives you a prompt, it might be
1573 OK. (don't delete your old one yet...). Instead of a prompt, you could get
1574 one of two messages indicating that the configuration information is invalid:
1575 @example<?Kermit has not been configured for a target system>
1577 @example<?Consistency check on configuration failed>
1578 Of course, neither of these messages should appear if you're building Kermit
1579 from the distribution kit. The first message indicates that the overlay was
1580 not found where the system-@|independent module expected to find it, probably
1581 because the overlay address is incorrect; the second indicates that the version
1582 of CPXLNK used in the system-@|dependent module is incompatible with the
1583 system-@|independent module.
1585 Once you are satisfied that KERMIT40 works correctly, you should rename your
1586 old @q<KERMIT.COM> to something else, like @q<OKERMIT.COM>, and rename
1587 @q<KERMIT40.COM> to @q(KERMIT.COM).
1589 @subsection<Assembling Kermit-80 from the sources>
1591 Kermit-80 is built in two pieces from the following files:
1592 @begin<description,spread 0>
1593 @i(The system-independent files:)
1595 @q<@ @ CPSKER.ASM>@\header file
1597 @q<@ @ CPSDEF.ASM>@\definitions for both KERMIT and KERSYS
1599 @q<@ @ CPSMIT.ASM>@\initialization, main loop, miscellaneous commands
1600 (BYE, EXIT, LOG, SET, SHOW, STATUS, and VERSION)
1602 @q<@ @ CPSCOM.ASM>@\second part of commands, status and set file
1604 @q<@ @ CPSPK1.ASM>@\part 1 of the KERMIT protocol handler
1605 (SEND, RECEIVE, LOGOUT,and FINISH commands)
1607 @q<@ @ CPSPK2.ASM>@\part 2 of the KERMIT protocol handler
1609 @q<@ @ CPSREM.ASM>@\REMOTE routines (FINISH, BYE and LOGOUT in CPXPK*.ASM)
1611 @q<@ @ CPSSER.ASM>@\SERVER routines (for the future)
1613 @q<@ @ CPSTT.ASM>@\the transparent commands (TRANSMIT, CONNECT)
1615 @q<@ @ CPSCPM.ASM>@\CP/M commands (DIR, ERA, USER, TYPE, PRINT, COPY)
1617 @q<@ @ CPSWLD.ASM>@\the wildcard handler
1619 @q<@ @ CPSCMD.ASM>@\the command parser
1621 @q<@ @ CPSUTL.ASM>@\utility routines and data
1623 @q<@ @ CPSDAT.ASM>@\data space and the overlay definitions
1625 @q<@ @ CPXLNK.ASM>@\linkage area description
1628 @i(The system-dependent files:)
1630 @q<@ @ CPXTYP.ASM>@\system selection
1632 @q<@ @ CPXLNK.ASM>@\system overlay specification and jump table
1634 @q<@ @ CPXCOM.ASM>@\common routines for all systems
1636 @q<@ @ CPXSWT.ASM>@\system selector or switcher
1641 @q<@ @ CPXSYS.ASM>@\family file for some system-specific code
1643 @q<@ @ CPXTOR.ASM>@\family file for Torch, Superbrain, PCI2651 etc
1645 @q<@ @ CPXNOR.ASM>@\family file for Northstar and Comart machines
1647 @q<@ @ CPXMRL.ASM>@\family file for British Telecom Merlin/Rair Black Box
1649 @q<@ @ CPXSB.ASM>@\family file for Micromint SB-180 systems
1651 @q<@ @ CPXCIF.ASM>@\family file for Cifer systems
1653 @q<@ @ CPXHEA.ASM>@\family file for Heath/Zenith systems
1655 @q<@ @ CPXAPP.ASM>@\family file for Apple II systems
1657 @q<@ @ CPXPCW.ASM>@\family file for Amstrad PCW 8256/8512 machines
1659 @q<@ @ CPXBBI.ASM>@\family file for BigBoard, Kaypro and Xerox 820 systems
1661 @q<@ @ CPXBEE.ASM>@\Microbee
1663 @q<@ @ CPXSYO.ASM>@\family file for Sanyo MBS-1100 systems
1665 @q<@ @ CPXTM4.ASM>@\family file for Tandy Model 4 with CP/M systems
1667 @q<@ @ CPXGNI.ASM>@\family file for Video Genie systems
1669 @q<@ @ CPXPRO.ASM>@\family file for Compupro systems
1671 @q<@ @ CPXZ80.ASM>@\family file for the Z80MU development system
1674 and if you use a terminal,
1676 @q<@ @ CPXVDU.ASM>@\display codes for VDUs etc. Not always required
1678 The system-@|independent module contains all of the system-@|independent files
1679 except for @q(CPXLNK.ASM), which is assembled into the system-@|dependent
1680 module to provide the structures needed to connect the two modules. As
1681 distributed, the system-@|independent module is named @q(CPSKER.HEX). If you
1682 have a copy of @q(CPSKER.HEX), you do not need to reassemble the
1683 system-@|independent module to configure Kermit for your system.
1685 The system-@|dependent module consists of @Q(CPXTYP.ASM), @Q(CPSDEF.ASM),
1686 @Q(CPXLNK.ASM), @q(CPXSWT.ASM), @q(CPSCOM.ASM), one of the family files
1687 @Q(CPXSYS.ASM), @q(CPXTOR.ASM), @q(CPXMRL.ASM), @q(CPXSB.ASM), @q(CPXCIF.ASM),
1688 @q(CPXHEA.ASM), @q(CPXBBI.ASM), @q(CPXTM4.ASM), @q(CPXGNI.ASM), @q(CPXNOR.ASM),
1689 @q(CPXAPP.ASM), @q(CPXPCW.ASM), or @q(CPXPRO.ASM), and possibly @q(CPXVDU.ASM),
1690 if your system uses a terminal for the console. One copy of the
1691 system-@|dependent module is supplied already assembled for each supported
1692 system; the filename may be obtained from tables @ref<-cpmsystems1> and
1693 @ref<-cpmsystems2>. If a terminal is required for a system, a CRT (glass TTY
1694 device) has been selected.
1696 After assembling the two pieces separately, they are combined with DDT or
1697 MLOAD into a system-@|specific Kermit.
1699 If you want to rebuild the system-@|independent module, the only change you
1700 may need to make is to select the assembler to be used, in @Q(CPSKER.ASM).
1701 Define one of MAC80, M80, or LASM to TRUE to select it as the assembler;
1702 the others should be defined FALSE.
1704 Assuming you have the Microsoft Macro Assembler package (M80/L80), you'll
1705 need to do the following:
1707 A>@ux(m80 cpsker=cpsker.asm)
1708 A>@ux(l80 /p:100,cpsker,cpsker/n/e)
1710 This will produce @Q(CPSKER.COM).
1712 If you are using LASM instead, do this:
1713 @example(A>@ux<lasm cpsker>)
1714 LASM will generate @Q(CPSKER.HEX) and @Q(CPSKER.PRN). LASM allows options to
1715 be specified in the same way as the standard assembler, ASM, so the command
1716 @example[A>@ux(lasm cpsker.abz)]
1717 will read the source files from drive A, send the @q(.HEX) file to drive B,
1718 and suppress the listing file.
1720 If you are using the Z80MU development system on an IBM PC or clone, then
1721 assemble your files using either LASM and MLOAD or M80 and L80, as if you
1722 were using a genuine CP/M-80 system. Note that you will still have the
1723 problem of transferring your assembled files to the target CP/M system.
1725 If you want to generate a system-@|dependent overlay for a particular system,
1726 or want to change the terminal supported, you'll need to check three areas in
1729 First, the overlay start ADDRESS. The symbol "ovladr" is EQUated to the
1730 address of "LNKFLG" in the system-@|independent module, as the starting address
1731 of the overlay (7000H for version @value(-cpmversion)). You'll need to know
1732 this value if you're building the overlay with M80/L80. You won't normally
1733 need to change this value.
1735 Second, the assembler being used. Again, define one of MAC80, M80, and LASM
1736 to be TRUE to select it, and define the others to be FALSE. The two modules
1737 (system-@|independent and system-@|dependent) do not need to be built with the
1740 Third, the system configuration. Locate your system in tables
1741 @ref<-cpmsystems1> and @ref<-cpmsystems2>, then define the appropriate symbol
1742 TRUE, and the rest FALSE. If the system comes with a builtin console terminal,
1743 define all the terminal switches FALSE. If the system uses an external
1744 terminal as the console, locate the terminal in table @ref<-cpmterms> and
1745 define the appropriate symbol TRUE, and the remainder FALSE. If the terminal
1746 is not listed in table @ref<-cpmterms>, use the CRT switch; in this case, VT52
1747 emulation is not supported.
1749 In addition, there are a few general and system-@|specific symbols which may
1750 be altered to fit your system:
1752 APSLOT@\For Apple with 6551 ACIA, defines the slot number of the serial card
1754 CPUSPD@\Processor speed in units of 100KHz (currently used only for bbII and
1755 kpII for timing loops)
1757 TAC@\For users connecting through ARPAnet TACs: set to TRUE if you wish the
1758 default TACTRAP status to be ON. (This may be overridden with the SET TACTRAP
1759 command). If you're not connecting through a TAC, set tac to FALSE and ignore
1762 TACVAL@\For ARPANET TAC users: defines the default TAC intercept character
1763 (may be overridden with the SET TACTRAP command).
1766 If you are just assembling an existing configuration, you'll need to edit
1767 @Q(CPXTYP.ASM) only. If you are adding support for a new system, you should
1768 not modify @Q(CPSDEF.ASM) or @Q(CPXLNK.ASM); if you do, you'll have to change
1769 the system-@|independent module also. Eventually, @Q(CPXSYS.ASM) will be split
1770 into separate files, each of which will generate one or more related systems.
1771 When this happens, you'll want to pick the one closest to your system to use as
1774 After editing @q<CPXTYP.ASM> as necessary, assemble and link the overlay as
1777 With M80 (where "xxxx" is the hex value of ovladr from @q<CPXLNK.ASM>):
1779 A>@ux<m80 cpxtyp=cpxtyp.asm>
1780 A>@ux<l80 /p:xxxx,cpxtyp,cpxtyp/n/x/e>
1789 With an IBM PC or clone using the Z80MU softwrae, follow the instructions
1790 as if you were using a real CP/M system.
1792 The overlay (@q(CPXTYP.HEX)) may then be merged with the system-@|independent
1793 module as described above (creating a runnable Kermit from the distribution
1796 If you are using the Z80MU
1797 development system on a PC, and already have a running
1798 Kermit-80 v3.9 or later, you can merge the two @q<.HEX> files into a @q<.COM>
1799 file with LINK80 (TOPS 10/20), MLOAD (Z80MU), L80 (Z80MU), and
1800 transfer the new @q<.COM> file to your micro with Kermit:
1802 Z80MU on a PC and MLOAD:
1804 @@@ux<MLOAD KERNEW=CPSKER,CPXTYP>
1807 Z80MU on a PC and C80:
1809 @@@ux<L80 /P:xxxx,CPXTYP,CPXTYP/N/X/E>
1812 producing @Q(KERNEW.COM).
1814 @begin<table,leftmargin +0,use format>
1815 @tabclear()@tabset(1.5in)
1818 @u(Symbol)@\@ux<Terminal description>
1819 crt@\Basic CRT, no cursor positioning
1820 adm3a@\ADM3A Display or lookalike
1821 adm22@\ADM22 Display or lookalike
1823 h1500@\Hazeltine 1500
1824 smrtvd@\Netronics Smartvid-80
1827 tvi925@\TVI 925, Freedom 100
1828 vt52@\VT 52 or VT52 emulator such as Heath H19, H29, etc.
1829 vt100@\VT 100 or emulator (most ANSI terminals should work)
1831 @caption<Terminals known to Kermit-80>
1836 @section<Adding Support For A New System>
1837 Kermit-80 is built from a common set of source files; the system-@|dependent
1838 module makes heavy use of conditional assembly (this complication will be
1839 removed in future releases). The system dependencies arise from attempts to
1840 answer some questions:
1842 @i<What kind of terminal is to be supported?>
1844 For many micros, the console is an integral part of the system, but
1845 others can use an external terminal. In either case, the commands
1846 to manipulate the screen (position the cursor, erase the screen, etc)
1849 @i<How is the serial line accessed?>
1851 For systems supporting the IOBYTE function, this is straightforward; the
1852 symbol "IOBYT" is defined TRUE. If the serial line is accessed with IN and OUT
1853 instructions, it may be possible to use the simple I/O routines provided. In
1854 this case, the symbol "INOUT" is defined TRUE, the MNPORT and MNPRTS are
1855 defined to be the data and control addresses, respectively, and bit masks for
1856 testing for "input data available" and "output buffer empty" must be defined.
1857 If the interface is strange, leave IOBYT and INOUT set to FALSE, and provide
1860 @i<What initialization is necessary?>
1862 You may wish to set the baud rate or configure the serial line at
1863 startup. Examples for a number of devices are present.
1865 @i<What special features are to be supported?>
1867 You may want to provide the capability to select one of several serial lines
1868 with the SET PORT command, or to change the speed of the serial line with the
1869 SET SPEED command. To do this, you'll need to build a command table, using
1870 the systems already supported as examples. The ability to send a BREAK signal
1871 is desirable. Again, examples for several different interfaces (ACIA, SIO,
1874 @i<Do you want to design an external terminal type?>
1876 There is a jump entry in the overlay file to allow users to add their
1877 own termainl emulator. If you write the code for such an emulator,
1878 you must load this jump address with the address of your emulator, and
1879 SET TERMINAL EXTERNAL from within Kermit. All characters will be passed
1880 to this routine during connect mode.
1883 @section<Notes on New Features in Kermit-80 Version 4>
1887 SET DEBUG ON will add two fields to the SEND/RECEIVE display, labelled "Spack"
1888 and "Rpack". These display the last packet sent and received. Of course, this
1889 slows down the transfer, especially if the console is an external terminal.
1890 SET DEBUG OFF removes these fields. The VERSION command displays the name,
1891 edit number, and edit date of several of the modules that make up Kermit.
1893 @index<ARPAnet>@index<TAC> @index<Attention Character>
1894 @index<Intercept Character>
1895 @i(TAC support:) ARPAnet TACs (and many other communication devices such as
1896 terminal concentrators, modems, port contention units, network PADs, etc) use a
1897 printing character (like "@@") as an intercept character, to allow commands to
1898 be issued to the TAC, or modem, etc. In order to send this character to the
1899 host, it must be typed twice. The command "SET TAC CHARACTER" to Kermit
1900 enables the "TACtrap" and asks the user to specify the TAC intercept character.
1901 This character will be automatically doubled when it appears in Kermit protocol
1902 messages (sent by the SEND or RECEIVE commands) or when it appears in a file
1903 being sent with the TRANSMIT command. It is not automatically doubled when
1904 typed by the user in CONNECT mode. "SET TAC ON" enables the TACtrap but does
1905 not change the TAC intercept character, which is initially "@@". "SET TAC OFF"
1906 disables the TACtrap.
1909 Previous versions of Kermit-80 buffered only one sector (128 bytes) at a time
1910 during file transfer operations. This version buffers 16Kbytes at a time,
1911 reducing the number of times the floppy drive must be spun up and down, and
1912 increasing the effective throughput of the link. If the disk transfer rate is
1913 too slow, however, the remote Kermit may time out and retransmit packets. This
1914 will show up on the screen in the "Retries:" field; if this occurs after disk
1915 activity, you may want to increase the timeout value on the remote Kermit,
1916 SET BUFFER <new value> while in Kermit,or
1917 reassemble Kermit with a smaller value for MAXSEC (in @Q(CPSDEF.ASM))
1918 This buffer is also used by the TRANSMIT command; the log file
1919 enabled by the LOG command is still written a sector at a time.
1922 @Comment<for Assembling Kermit-80)
1924 @section<Specification for Kermit-80 System Dependent Modules>
1926 This section is intended for people wanting to implement their own
1927 versions of Kermit-80 for computers not already defined.
1929 The system independent code communicates to routines for a specific
1930 system through a set of tables. These tables are defined in
1931 CPXLNK.ASM, and should not be modified between revisions of Kermit. If
1932 an entry is added or deleted, then the whole of Kermit-80
1933 needs reassembling. Make sure that the changes to CPXLNK.ASM are
1934 duplicated in CPSUTL.ASM, which has the system independent
1935 equivalent of CPXLNK.ASM.
1937 The following entries/definitions apply to revision 4.09. There
1938 have been three additional entries since revision 4.05.
1940 The table is split into three sectors; The first section defines
1941 two byte "words" giving 16 bits of interface data; The second set is a
1942 set of jumps to various functions, and finally the third set
1943 a set of pure data bytes.
1946 @subsection(Interface Data.)
1948 @begin<description, spread 0, indent -8>
1950 @ux<LNKFLG>@\Must be first entry in overlay at overlay address. Is a two
1951 byte address giving the size of the linkage table. This is used to
1952 check for consistency of overlay's
1955 @ux<ENTSIZE>@\Length of entry table, also used for consistency checking after
1956 the overlay. Currently 6
1959 @ux<SYSEDT>@\The address of a dollar-terminated string giving the overlay
1960 revision level and date. Points to a string like:
1961 CPXSYS.ASM(33) 4-JUN-1986$
1964 @ux<FAMILY>@\The address of a dollar-terminated string giving the Family overlay
1965 revision level and date. If the system is in CPXSYS.ASM rather than a
1966 particular Family overlay, it is simply a pointer to $
1970 @subsection(Jump Table.)
1971 This is split into three main sectors-
1975 Input/Output routines
1977 Screen formatting routines
1979 other system dependent routines
1983 @begin<description, spread 0, indent -14>
1987 @i<Parameters>@\None
1991 @i<Description>@\selects the modem port. Most systems do nothing and
1992 simply return. HL,DE and BC registers preserved.
1997 @i<Parameters>@\None
2001 @i<Description>@\Output the character in E register to the communications
2002 line. BC,DE,HL registers preserved.
2007 @i<Parameters>@\None
2009 @i<Returns>@\Accumulator either 0 or character from comms line if available
2011 @i<Description>@\Check modem for character and if so, return it in A.
2012 HL,DE,BC registers preserved, flags
2013 and accumulator lost.
2018 @i<Parameters>@\None
2022 @i<Description>@\Clear any pending characters in the input buffer from the
2023 modem. No registers are preserved.
2029 @i<Parameters>@\None
2033 @i<Description>@\Select the console. This is a null subroutine for most
2034 systems, but for IOBYTE systems selects the console.
2039 @i<Parameters>@\Character in E
2043 @i<Description>@\Send the character in E to the console. Any quirks of
2044 system responding in an odd manner should be handled. No
2045 registers preserved.
2051 @i<Parameters>@\None
2053 @i<Returns>@\Zero or character in A.
2055 @i<Description>@\Get a character from the console or return a null if
2056 no character to be read. No registers are preserved.
2062 @i<Parameters>@\Character in E
2066 @i<Description>@\Send the character in E to the printer. The console is
2067 selected. Only DE registers are preserved
2073 @i<Parameters>@\None
2075 @i<Returns>@\00H or 0FFH in A register
2077 @i<Description>@\Test the printer to see if it is ready to receive a
2078 character to be printed. If a 00H is returned then the printer is
2079 ready to receive a character.
2085 @i<Parameters>@\Character to be sent to the user supplied terminal emulator
2090 @i<Description>@\If the user has supplied a terminal emulator in the overlay
2091 code, EXTTER will be a JMP <non zero address>. If SET TERMINAL EXTERNAL
2092 has been set, all caharcters will be passed verbatim to this terminal
2093 emulator. If there is no external emulator, this code will never be called.
2094 The user should reset terminal conditions on initialisation of both
2095 the system and before CONNECT. All registers should be preserved.
2101 @i<Parameters>@\Any required for calling BDOS
2103 @i<Returns>@\Any expected from the called BDOS routine
2105 @i<Description>@\This is an alternative entry to BDOS. This entry will also
2106 check the printer status etc. For full details see the code for the
2107 BDOS trap in CPSUTL.ASM.
2113 @i<Parameters>@\None
2117 @i<Description>@\Clear the current line on the terminal
2124 @i<Parameters>@\None
2128 @i<Description>@\Erase the current position (after a backspace)
2135 @i<Parameters>@\None
2139 @i<Description>@\Make delete (7FH) look like a backspace. Some systems
2140 do a backspace, space, backspace automatically others have to simulate it
2145 @i<Parameters>@\None
2149 @i<Description>@\Clear the screen and place the cursor at the top LH corner
2156 @i<Parameters>@\None
2160 @i<Description>@\Place the cursor on the line for the Kermit-80 prompt
2161 after a file transfer. (Usually line 13)
2168 @i<Parameters>@\None
2172 @i<Description>@\Move cursor to the error message field on the
2173 file transfer format screen
2180 @i<Parameters>@\None
2184 @i<Description>@\Move the cursor to the filename field
2191 @i<Parameters>@\None
2195 @i<Description>@\Move the cursor to the packet count field
2202 @i<Parameters>@\None
2206 @i<Description>@\Move cursor to the retry count field
2213 @i<Parameters>@\None
2217 @i<Description>@\Move cursor to the status field
2224 @i<Parameters>@\None
2228 @i<Description>@\Move to the receive packet field (debugging use)
2235 @i<Parameters>@\None
2239 @i<Description>@\Move to the send packet field (for debugging use)
2245 @i<Parameters>@\None
2249 @i<Description>@\Initialize the system specific items. No registers
2250 are preserved. Any initialization is done once only when Kermit-80
2258 @i<Parameters>@\None
2262 @i<Description>@\Program termination. De-initialize anything
2263 in preparation for a return to CP/M
2270 @i<Parameters>@\None
2274 @i<Description>@\Initialize anything before entering the connect state.
2281 @i<Parameters>@\None
2285 @i<Description>@\System dependent close routine when exiting connect state
2292 @i<Parameters>@\None
2296 @i<Description>@\Help routine to test for any extensions to the escape menu
2297 during the connect state. If a system has any special feature it
2298 can use during connect mode, then it can be tested as
2299 <escape-character>xxx. This entry is a string for printing
2300 to the console for an <escape-character>? Often used for
2301 generating breaks or controlling a modem.
2308 @i<Parameters>@\None
2312 @i<Description>@\This is a test-and-jump on receipt of an escape
2313 sequence not understood by Kermit-80. If the character in A is
2314 not recognized by your version of Kermit=80, do a rskip
2321 @i<Parameters>@\Character in E
2323 @i<Returns>@\Character in E. Either a 00H or anything else in A
2325 @i<Description>@\Test the character in E. If it may not be printed to
2326 the console, set A to zero. All other registers preserved.
2328 @\NB <XON>,<XOFF>,<DEL>,<NULL> are always rejected.
2334 @i<Parameters>@\None
2338 @i<Description>@\System dependent processing for the BYE command. (eg hang
2346 @i<Parameters>@\Value from table in DE
2350 @i<Description>@\The system dependent code for baud rate change. DE
2351 contains the two byte value from the baud rate table. This value is
2352 also stored in "SPEED"
2359 @i<Parameters>@\Value in DE
2363 @i<Description>@\The system dependent code for setting the port.
2364 The parameters are passed in DE, which are obtained from the port tables
2371 @i<Parameters>@\String pointer in DE
2375 @i<Description>@\Setup the screen display for file transfer. The Kermit
2376 version string is pointed to by DE. If the terminal is not capable of
2377 cursor addressing (eg dumb glass TTY) then only the screen is cleared
2378 and the version string is printed.
2385 @i<Parameters>@\Row number in B, column number in C
2389 @i<Description>@\Move the cursor to row B, column C where B=1,C=1 is top
2390 LH corner of screen. The routine should first end a "cursor
2391 position" leading string (up to four characters) then use the
2392 parameters given to complete the versions cursor position function
2399 @i<Parameters>@\None
2401 @i<Returns>@\K bytes free in HL
2403 @i<Description>@\Get the amount of free disk space on the selected disk
2404 drive. This could be in the system independent code. Automatically
2405 detects CP/M V2.2 or V3.0. No registers saved.
2412 @i<Parameters>@\Source Pointer in HL
2414 @\Destination Pointer in DE
2420 @i<Description>@\Move (BC) bytes from (HL) to (DE) Z80 based systems
2421 do an LDIR, while 8080 systems do it as a loop. All registers destroyed
2426 @i<Parameters>@\$ terminated string pointed to by DE
2430 @i<Description>@\Print the string onto the console.
2435 @tabset(2 inches, 1.0 inches, 1.0 inches)
2438 @ux<PTTAB>@\WORD@\Points to VT52 equivalent escape sequences.
2441 @ux<SPDTAB>@\WORD@\Address of baud-rate command table, or 0 if table does
2445 @ux<SPDHLP>@\WORD@\Address of baud-rate help table, or 0 if SET SPEED
2449 @ux<PRTTAB>@\WORD@\Address of port command table or 0 if SET PORT is not supported.
2452 @ux<PRTHLP>@\WORD@\Address of port help table or 0 if SET PORT is not supported
2455 @ux<TIMOUT>@\BYTE@\FUZZY-TIMER. Set to value suitable to your
2456 system (depends largely on CPU speed)
2459 @ux<VTFLG>@\BYTE@\VT52 emulation flag. Set to 0 if terminal
2460 emulates a VT52, 01 if emulation is required, or 0FFH if emulations not
2461 possible (eg for "CRT")
2464 @ux<ESCCHR>@\BYTE@\default escape character-usually control-] but
2468 @ux<SPEED>@\WORD@\Storage space for baud-rate. Set to 0FFFFH as baud
2469 rates are initially unknown. Note that the STATUS routine only looks at the
2470 first (least significant) byte.
2473 @ux<PORT>@\WORD@\Storage space for port. Set to 0FFFFH as ports may
2474 not be implemented, and is initially unknown
2477 @ux<PRNFLG>@\BYTE@\Printer copy flag-if O no copy. Anything else =>
2481 @ux<DBGFLG>@\BYTE@\Debugging flag. If O then no debugging to be done.
2482 (ie writing of debugging info during a file transfer)
2485 @ux<ECOFLG>@\BYTE@\Local ECHO flag (default is off)
2488 @ux<FLWFLG>@\BYTE@\File warning flag. If set to 1 will not
2489 overwrite files already existing on disk with some-named files
2493 @ux<IBMFLG>@\BYTE@\IBM system is the host-assume IBM file transfers etc
2496 @ux<CPMFLG>@\BYTE@\Flag indicating type of CP/M files to be transferred.
2497 Default setting - DEFAULT
2500 @ux<PARITY>@\BYTE@\Type of parity in use
2506 @\ 6 = No parity (8th bit is data)
2513 @ux<SPSIZ>@\BYTE@\Size of send packet
2516 @ux<RPSIZ>@\BYTE@\Size of receive packet
2519 @ux<STIME>@\BYTE@\Send timer (time-out)
2522 @ux<RTIME>@\BYTE@\Receive timer (time-out)
2525 @ux<SPAD>@\BYTE@\Send Padding (default=0)
2528 @ux<RPAD>@\BYTE@\Receive Padding (default=0)
2531 @ux<SPADCH>@\BYTE@\Send Padding character (default=NULL)
2534 @ux<RPADCH>@\BYTE@\Receive Padding character (default=NULC)
2537 @ux<SEOL>@\BYTE@\Send EOL character (default=CR)
2540 @ux<REOL>@\BYTE@\Receive EOL character (default=CR)
2543 @ux<SQUOTE>@\BYTE@\Send quote character (default=#)
2546 @ux<RQUOTE>@\BYTE@\Receive quote character (default=#)
2549 @ux<CHKTYP>@\BYTE@\Ascii value of checktype
2551 @\31H="1"=checktype1 (6bits)
2553 @\32H="2"=checktype2 (12bits)
2555 @\33H="3"=CCITT checksum (CRC)
2557 @\Default is 31H("1")
2560 @ux<TACFLG>@\BYTE@\If set to on (non zero) send the TACCHR twice. This is
2561 for ARPA TAC users, where the TAC swallows one "wakeup" character. If
2562 sent twice the TAC will pas one on and go back to normal mode.
2565 @ux<TACCHR>@\BYTE@\Desired TAC character. It is ignored if TAC trapping
2566 is turned off. Value to send twice if TAC interception is set on.
2567 Default=0, but set to commercial AT if the conditional assembly flag TAC
2571 @ux<BUFADR>@\WORD@\Address of Multi-Sector buffering for I/O
2574 @ux<BUFSEC>@\BYTE@\The number of bytes the big buffers can hold.
2575 Default is 1. (0=256 sectors).
2578 @ux<FFUSSY>@\BYTE@\Indicates if funny characters may be used in CP/M
2579 file names (eg @q{<>.,;?#[]}) If zero, allow anything. Default is nonzero.
2583 @\SPACE:(2bytes) Highest block number on selected disk drive
2586 @ux<BMASK>@\SPACE:(1byte) (Records/block)-1
2589 @ux<BSHIFTF>@\SPACE:(1byte) Number of shifts to multiply by rec.block
2592 @ux<NNAMS>@\SPACE:(1byte) Counter for file-names per line
2598 @section<Future Work>
2600 Work that needs to be done in future releases includes:
2602 Merge in support for additional CP/M-80 systems, particularly those for
2603 which support was recently added to the monolithic v3.x source.
2605 Break up @q<CPXSYS> into discrete source files, one for each system.
2606 These source files should serve as simple models for adding support for
2607 new systems to Kermit-80 -- only the very basic screen definitions, flags,
2608 i/o primitives, initializations, and so forth should appear in each
2609 system-@|dependent file.
2611 Addition of missing features -- compression of repeated characters during
2612 packet transmission, transmission of file attributes (particularly size, so
2613 that "percent done" can be displayed for both incoming and outbound files),
2614 command macros, more advanced login scripts, remote operation and server mode,
2615 etc etc. Any offers??