]> cloudbase.mooo.com Git - kermit-80.git/blame - cpkerm.mss
Bugfix in outmdm (output buffer flush)
[kermit-80.git] / cpkerm.mss
CommitLineData
c25f6a44
L
1@Part(CPKERM,root="kuser")
2@string(-cpmversion="@q<4.11>")
3@Chapter<CP/M-80 KERMIT>
4@index<CP/M-80 Kermit>
5
6@case(device,file="********@*
7This document is formatted as an ordinary, plain text ASCII disk file.
8Typeset copies are available in the Kermit User Guide from Columbia
9University. Changes should be made to CPKERM.MSS.@*********")
10
11@Begin<Description,Leftmargin +12,Indent -12,spread 1>
12@i(Program:)@\Mike Freeman, Bonneville Power Administration, Vancouver, WA,
13USA, with contributions from many others.
14
15@i(Language:)@\8080 Assembler, LASM, M80, or MAC80
16
17@i(Version:)@\@value(-cpmversion)
18
19@i(Date:)@\April 1, 1991
20
21@i(Documentation:)@ @ Christine Gianone, Columbia University, with
22contributions from many others.
23
24@end<Description>
25@label<-k80>
26
27@i<KERMIT-80 Capabilities At A Glance:>
28@begin<format,leftmargin +2>
29@tabclear()@tabset(3.5inches,4.0inches)
30Local operation:@\Yes
31Remote operation:@\Partial, Auto-receive only
32Login scipts:@\Yes, limited
33Transfer text files:@\Yes
34Transfer binary files:@\Yes
35Wildcard send:@\Yes
36File transfer interruption:@\Yes
37Filename collision avoidance:@\Yes
38Can time out:@\Yes
398th-bit prefixing:@\Yes
40Repeat count prefixing:@\No
41Alternate block checks:@\Yes
42Terminal emulation:@\Yes, VT52 and others
43Communication settings:@\Yes
44Support for dial-out modems:@\No
45Transmit BREAK:@\Yes; most versions
46IBM communication:@\Yes
47Transaction logging:@\No
48Debug logging:@\No
49Session logging:@\Yes
50Raw file transmit:@\Yes
51Act as server:@\No
52Talk to server:@\Yes
53Advanced commands for servers:@\Yes
54Command/init files:@\Yes
55Command macros:@\No
56Local file management:@\Yes
57Handle file attributes:@\No
58Long packets:@\No
59International Character Sets:@\No
60Sliding Windows:@\No
61Printer control:@\Yes, limited
62@end<format>
63
64@Section<Credits>
65
66CP/M Kermit is the first of all the Kermit programs. It was originally
67written by Bill Catchings of Columbia University in 1981. Over the years,
68contributions have been added by many people, including
69Charles Carvalho (ACC),
70Bernie Eiben (DEC), Nick Bush (Stevens Institute of Technology),
71John Bray (University of Tennessee), Bruce Tanner (Cerritos College),
72Greg Small (University of California at Berkeley),
73Kimmo Laaksonen (Helskini University of Technology),
74Brian Robertson (Aberdeen University), A.J. Cole (Leeds University),
75John Shearwood (Birmingham University),
76Tony Addyman (Salford University), Godfrey Nix and Martin Carter
77(Nottingham University), Ian Young (Edinburgh University), Chris Miles
78(Manchester University), Richard Russell, Dave Roberts,
79and many, many others.
80
81Version 4.11 is the work of Mike Freeman of the Bonneville Power
82Administration in Vancouver, WA, USA, with assistance from Russell Lang of
83Monash University in Australia, Jay S Rouman of Mt Pleasant MI, and others.
84
85@section<What's New>
86
87Features added since version 4.09 include:
88@begin<itemize>
89SET COLLISION {BACKUP/DISCARD/OVERWRITE/RENAME}
90
91SET INCOMPLETE-FILES {DISCARD/KEEP}
92
93Many REMOTE commands, including some REMOTE SET commands
94
95RENAME command to rename CP/M files from within Kermit-80
96
97SET RECEIVE/SEND PACKET-LENGTH nn (nn <= 94)
98
99SET AUTORECEIVE ON now implies that Kermit-80 ALWAYS tries to
100receive more files when a RECEIVE transaction has completed. The
101user can cancel with ^C.
102
103QUIT is now a synonym for EXIT.
104
105STAY is now a synonym for SET NO-EXIT.
106
107CONNECT, RECEIVE and SEND may be abbreviated to C, R and S,
108respectively.
109
110Cancellation of TAKE, TYPE, and PRINT commands from the keyboard.
111
112Many bug fixes.
113
114Kermit-80 Version 4.11 now supports the Microbee family of
115computers (56K, 64K, 128K and 256K) manufactured by
116Microbee Systems, Ltd, of Australia.
117
118Kermit-80 now supports the Ampro Little Board system.
119@end<itemize>
120
121@section<Overview of Kermit Operation>
122
123Use the SET command to establish necessary communication parameters like
124SPEED and PARITY. Use the CONNECT to establish a terminal connection to
125the remote computer. If you are dialing out with a modem, type the necessary
126dialing commands to the modem first. The dialing process can be automated
127to some extent using a TAKE command file containing INPUT, OUTPUT, and PAUSE
128commands. Then log in to the remote computer or service and conduct a session.
129
130To transfer a text file, start the Kermit program on the remote computer and
131tell it to SEND the desired file (if uploading) or to RECEIVE (if
132downloading). "Escape back" to CP/M Kermit, usually by typing Ctrl-] (hold
133down the Control key and press the right bracket key) and then type the letter
134C. At the CP/M Kermit prompt type RECEIVE (if you gave a SEND command to the
135remote Kermit) or SEND @i<filename> (if you gave a receive command to the
136remote Kermit).
137
138To transfer a binary file, give the command SET FILE TYPE BINARY to the remote
139Kermit and SET FILE-MODE BINARY to CP/M Kermit before issuing any SEND or
140RECEIVE commands.
141
142Multiple files of the same type (text or binary) can be transferred in a
143single operation using "wildcard notation" (including special characters like
144asterisk in the filename).
145
146When file transfer is complete, CONNECT back to the remote computer,
147use the EXIT command to exit from the remote Kermit program, finish your work
148on the remote computer, log out from it, escape back to CP/M Kermit again,
149and EXIT from CP/M Kermit.
150
151The remote Kermit may also be put into "server mode" to simplify these
152operations. Give the SERVER command to the remote Kermit, escape back to CP/M
153Kermit, and then issue SEND commands to send files (upload), GET @i<filename>
154commands to receive (download) files, REMOTE commands to request various other
155services (like directory listings) from the remote Kermit. When you are done,
156give a BYE command to terminate your remote session, or a FINISH command to
157tell the remote Kermit to return to its prompt so you can CONNECT back and
158conduct further business.
159
160That's all there is to it.
161
162@Section<Summary of CP/M>
163
164There are essentially two versions of CP/M - Versions 2.2
165and 3.0 (sometimes also called CP/M PLUS.)
166
167CP/M-80 Version 2@q<.>2 is run in
168a single 64 Kbyte "page", usually the largest amount of memory on
169Z80 or 8080 systems. The BIOS (Basic input/output system),
170BDOS (Basic Disk Operating System) and CCP (Command console processor)
171all share memory with any transient program the user may wish to run.
172Some basic commands are
173available through the CCP, like DIR, ERA etc,while others are loaded
174from disk into the transient program area and run as a program,
175like PIP or STAT.
176
177CP/M Version 3@q<.>0 (or CP/M PLUS) effectively removes the requirement
178of having the CCP and BDOS along with a chunk of the BIOS code being
179resident in the single 64k byte page of memory. This allows even more
180space for programs in the TPA, but still a little less than the maximum
181of 64k. It is substantially different from CP/M version 2@q<.>2, with
182lots of added features. Kermit-80 uses very few additional version
1833@q<.>0 features, and only where absolutely necessary.
184
185CP/M file specifications are of
186the form @q(DEV:XXXXXXXX.YYY), where
187@begin<description>
188 @q(DEV:)@\is a @i<device name>,
189normally the A:@ or B:@ floppy. If omitted, the device name defaults
190to your connected diskette.
191
192@q(XXXXXXXX)@\is a @i<filename> of up to 8 characters.
193
194@q(YYY)@\is the @i<file type>, up to 3 characters.
195 @end<description>
196 File names and file types may contain letters, digits, and some
197special characters, including dash, dollar sign, and underscore, but
198no imbedded spaces. Upper and lower case letters are equivalent.
199
200 "Wildcard" file-@|group specifications are permitted in file names
201and file types (but not device names) within certain contexts; a "@q(*)"
202matches a whole field, a "@q(?)" matches a single character, including
203space. Examples: "@q(*.F??)" specifies all files whose @i<types> start
204with F and are 1, 2, or 3 characters long; "@q(F?.*)" specifies all
205files whose names start with F and are no more than two characters
206long (before the trailing spaces).
207
208The five CP/M commands are:
209 @Begin<Description>
210DIR @i<file>@\Lists the the names of the specified files. The
211default file specification is "*.*". Example: @w<"@q(DIR B:*.FOR)">.
212
213ERA @i<file>@\Erases (deletes) the specified file(s); wildcards allowed.
214
215REN @i<new> @i<old>@\Changes the name of a file from @i<old> to
216@i<new>, e.g.@*
217@w<"@q(REN NEW.FOR=OLD.FOR)">.
218
219SAVE@\Saves the specified number of memory blocks into a file.
220(Not on CP/M Plus systems)
221
222TYPE @i<file>@\Types the specified file on the screen, e.g.
223@w<"@q(TYPE FOO.TXT)">.
224 @End<Description>
225The most important programs are:
226 @Begin<Description>
227STAT@\Gives statistics on disk usage; sets and displays IOBYTE.
228(Not on CP/M Plus systems)
229
230PIP@\@u<P>eripheral @u<I>nterchange @u<P>rogram. Copies files. In
231response 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.
234Examples: "@q(A:=B:*.*)" to copy a whole disk, "@q(A:=B:*.FOR)" to copy all
235the Fortran programs from disk B to disk A. If the disk specification
236is omitted, your "connected" disk is assumed. Command line arguments
237are also accepted, e.g. "@q(PIP A:=B:*.*)".
238
239@End<Description>
240
241There are equivalent commands for CP/M Version 3.0, but are not loaded into
242memory in the same way as for CP/M Version 2.2.
243For further information on CP/M, consult your microcomputer manual or
244a CP/M handbook.
245
246@Section<Kermit-80 Description>
247
248Since Kermit-80 runs on a standalone micro, it is always in control of the
249screen -- it is always in "@i<local>@index<Local> mode". It includes a
250terminal emulator for establishing a connection to a remote computer or
251service, and during file transfer, it keeps the screen updated with the
252file name and the packet number, whether sending or receiving.
253
254@index<Timeout> Kermit-80 is capable of an imprecise or "fuzzy" timeout on an
255input request, and can break deadlocks automatically. In most cases, this is
256not important, because the Kermit program on the other side is most likely
257able to handle the timeouts. The timeouts done by Kermit-80 are fuzzy because
258they depend on the speed of the processor and other factors that can vary from
259system to system.
260
261If, despite the timeout capability, the transmission appears to be stuck (and
262you can tell that this has happened if the screen fails to change for a while)
263you 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
265cause theforeign host to send it again (or, if the micro is sending, to
266retransmit the last packet). Micro/@|micro or micro/@|IBM-@|mainframe
267transfers could require this kind of manual intervention.
268
269File transfers may be interrupted in several ways.
270@begin<description>
271@Index[Control-C]
272Control-C@\This will return you to Kermit-80 command level immediately, so that
273you can connect back to the remote system, or take any other desired action.
274
275@Index[Control-X]
276Control-X@\When sending a file, this will terminate the sending of the current
277file with a signal to the KERMIT on the other side to discard what it got so
278far. If there are more files to be sent, KERMIT-80 will go on to the next one.
279When receiving a file, KERMIT-80 will send a signal to the remote KERMIT to
280stop sending this file. If the remote KERMIT understands this signal (not all
281implementations of KERMIT do), it will comply, otherwise the file will keep
282coming. In any case, the remote KERMIT will go on to the next file in the
283group, if any.
284
285@Index[Control-Z]
286Control-Z@\Like Control-X, except if a file group is being transmitted, this
287will stop the transmission of the entire group. If only a single file is being
288transmitted, it works exactly like Control-X.
289
290@Index[Carriage Return]
291@Index[CR]
292Carriage Return@\If you type a carriage return Kermit-80 will resend the
293current packet. You may do this repeatedly, up to the packet retry limit
294(somewhere between 5 and 16 times) for a particular packet.
295@end<description>
296
297@heading<Kermit-80 Commands>
298
299Kermit-80 is an interactive program. It issues a prompt, you type a command.
300The process repeats until you give the EXIT command to leave the program.
301
302Commands consist of keywords, filenames, and numbers. Keywords may be
303abbreviated to minumum unique length. "?" may be typed to request a menu of
304the available options for the current field at any point in a command. ESC
305may be typed at any point in a command to fill out the current keyword or
306filename; if sufficient characters have not been typed to identify the current
307field uniquely, Kermit-80 will sound a beep and allow you to continue from
308that point. Here are Kermit-80's commands:
309@begin<description,leftmargin +8,indent -8>
310@Index[Break]
311BREAK@\Send a BREAK condition to the remote computer. This is only possible
312if your system is capable of sending breaks. It is intended to be used with
313PAUSE, OUTPUT, etc and the TAKE command to do wierd and wonderful things, like
314automatic logging on to a remote host.
315
316@Index[Bye]
317BYE@\When talking to a remote Kermit Server, this command shuts down
318the server and logs it out, and also exits from Kermit-80 to CP/M command
319level.
320
321@Index[Virtual Terminal]@Index[Escape Character]@Index[Connect]
322CONNECT@\Establish a terminal connection to the computer, service, or device
323that is
324connected to the serial port, i.e.@ pass all typein to the serial port and
325display all input from the serial port on the screen. Also, emulate a DEC VT52
326to allow cursor control, screen clearing, etc., if VT52-EMULATION is ON (see
327below), in which case you should also set your terminal type on the remote host
328to VT52. (Some versions emulate other terminals.) The CONNECT command may
329be abbreviated by the single letter C.
330
331@\Warning: VT52 emulation is only successful if your system or its
332attached terminal can do the same sort of functions as a genuine
333VT52. Things to beware of are cursor addressing, clear to end of page
334and end of line, clear screen, home cursor, and clear-and-home
335functions. The useability of VT52 emulation depends entirely on
336how many of the VT52 functions can be emulated by your micro or terminal.
337
338@\The escape character differs from micro to micro; when you issue
339the CONNECT command, the micro will print a message telling you how
340to get back. The escape sequence is generally an uncommonly-@|used
341control character, like CTRL-backslash or CTRL-rightbracket, followed
342by a single letter "command":
343@begin<description,spread 0,leftmargin +4, indent -4>
344C@\Close Connection, return to @q(Kermit-80>) command level.
345
346S@\Display Status of connection, but maintain remote connection.
347
348@q<?>@\List available single-character commands.
349
3500@\(zero) Send a null (0) character.
351
352B@\Send a BREAK signal. Most systems provide this function.
353
354D@\Drop the line. Used on the Apple with modem. Automatically
355closes the connection after dropping the line. The TORCH system
356acknowledges this command but does nothing.
357
358P@\Toggle printer on or off. Allows you to copy whatever goes
359to the screen to the printer.
360
361S@\Temporarily suspend logging to the log file.
362
363Q@\Restart logging to the log file
364
365@q<^]>@\(or whatever - a second copy of the escape character) Send the
366escape character itself to the remote host.
367 @end<description>
368
369@Index[Copy]
370@Index[File Copying]
371COPY @i<source> @i<destination>
372@\Copy a named file to another file, either on the same drive or another
373drive.
374
375@Index[Directory]
376DIRECTORY@\This provides a directory listing of the specified files.
377If no files are
378specified, all files on the default disk are listed. File sizes, in K, are
379included. You may interrupt the listing at any time by typing any character.
380The listing (even if interrupted) concludes with a display of the amount of
381free storage left on the disk. You can inhibit the display of file sizes by
382SET DIRECTORY OFF.
383
384@Index[Erase]
385ERASE @i<filespec>@\This executes the CP/M ERA command on the specified
386file(s). The names of the files being erased are not displayed.
387
388@Index[Exit]
389EXIT@\Quit back to CP/M. The return is made by a JMP 0 (Warmstart). QUIT
390is a synonym for EXIT.
391
392@Index[FINISH]FINISH@\Like LOGOUT, but shuts down the remote server without
393logging it out. Leaves you at Kermit-80 command level; subsequent CONNECT
394commands will put you back at host system command level.
395
396@Index[GET]GET @i<filespec> [@i<local_filespec>]
397@\When Kermit-80 is talking to a Kermit Server on
398the host, you should use the GET command to request the server to send
399files to you, for example:
400@example<get hlp:k*.hlp>
401You may specify a local filename if you want to save the remote file
402under a different filename.
403Limitation: If you request an alternate block check type using the SET BLOCK
404command, the GET command will not communicate it to the remote server. If you
405want to have type 2 or 3 block checks done when getting files from the server,
406you have to issue the appropriate SET BLOCK command to the remote KERMIT before
407putting it in server mode.
408
409@Index[Help]HELP@\List all these commands, with a short description
410on what the commands do. A question mark will do the same. If you have
411already typed a command but do not know what the parameters are, type a
412space (to indicate the end of the command) and a question mark. You will
413be informed of what Kermit can expect at that stage.
414
415@Index[Input]INPUT @i<seconds> @i<text>@\Setup a text line and time delay
416for your CP/M system to expect from the host, then wait up to the given number
417of seconds (approximately) for text to be sent to your CP/M-80 system.
418
419@Index[LOG]LOG @i<filespec>@\When CONNECTed to a foreign host as a terminal,
420log the terminal session to the specified diskette file. This functionality
421depends 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
423transcript (after all, that's what the KERMIT protocol is for). The log file
424is closed when the connection is closed by typing the escape character followed
425by the single-@|character command "C".
426
427@Index[Append]
428@\It is possible to temporarily suspend logging during connect
429state. Typing an escape sequence can turn file logging on
430(<escape-character> R for Resume) or off (<escape-character> Q for quiet).
431
432@\Re-entering connect state will re-open the previously opened
433log file and append to that file.
434
435@Index[LOGOUT]LOGOUT@\Like BYE, but leaves you at Kermit-80 command level.
436
437@index<OUTPUT>OUTPUT @i<text>@\Send the text to the remote computer as if
438you had typed it.
439
440@Index[Pause]PAUSE @i<seconds>@\If this command is issued your CP/M
441system will wait a while before proceeding with another command.
442This is intended for use in TAKE commands, where you may want to pause
443for a while before proceeding with the rest of the TAKE file. The
444actual delay is very variable between systems, and values should
445be determined on a trial and error basis.
446
447@Index[Print]PRINT@\Print a file to the console and printer. Output to
448the printer is buffered by the Kermit-maintained printer buffer.
449This routine is identical to TYPE but characters are echoed to the printer
450as well as to the screen. Suspending and canceling output is as
451described in TYPE.
452
453QUIT@\Synonym for EXIT.
454
455@Index[RECEIVE]@Index[File-Warning]
456RECEIVE @i<filespec>@\Receive file(s) from the remote
457Kermit, and save them under the names provided in the file headers
458supplied by the remote host. If a local filespec is given, the file is
459saved under the given filename. If the names aren't legal, use as
460many legal characters from
461the name as possible (see the description of SET FILE-WARNING below). If
462there's a conflict, and FILE-WARNING is ON, warn the user and try to build a
463unique name for the file by adding "@q<&>" characters to the name. RECEIVE
464can be abbreviated to the single letter R.
465
466@index<REMOTE>REMOTE @i<command>@\Send a command to a remote Kermit server.
467The results are sent back to your CP/M screen. When two arguments are
468required and specify less than two in the command, you will be prompted for
469the missing arguments. REMOTE commands include:
470@begin<description,leftmargin +4, indent -4>
471REMOTE CD [directory]@\Ask the remote server to change its default directory.
472If no directory is specified, the server changes to its login directory.
473
474REMOTE COPY file1 file2@\Ask the remote server to copy file1 to file2.
475
476REMOTE RENAME file1 file2@\Ask the remote server to rename file1 to file2.
477
478REMOTE DELETE filespec@\Ask the remote server to delete the named file or
479files.
480
481REMOTE DIRECTORY [filespec]@\Ask the remote server to display a directory
482listing of the given files or, if the filespec is omitted, all the files in
483the current device or directory.
484
485REMOTE DISK-USAGE@\Ask the remote server to display information about its
486disk usage (such as free or used space).
487
488REMOTE ERASE filespec@\Same as REMOTE DELETE.
489
490REMOTE FINISH@\Same as FINISH.
491
492REMOTE HELP@\Ask the remote server to display a list of the commands it
493can respond to.
494
495REMOTE HOST command@\Ask the remote server to have its operating system
496execute the given command.
497
498REMOTE KERMIT command@\Ask the remote server to execute the given Kermit
499command, given in the server Kermit's command syntax.
500
501REMOTE LOGIN user password@\Log in to a remote Kermit server which has been
502set up to require a username and password.
503
504REMOTE MESSAGE text@\Send the text to the remote server for display on its
505screen (useful with MS-DOS Kermit servers).
506
507REMOTE SET parameter value@\Ask the remote server to set the given parameter
508to the given value, for example REMOTE SET FILE TYPE BINARY. Type REMOTE SET
509? to see a list of the REMOTE SET options.
510
511REMOTE SPACE@\Same as REMOTE DISK-USAGE.
512
513REMOTE STATUS@\Ask the remote server to provide a status report.
514
515REMOTE TYPE file@\Ask the remote server to display the named file on
516the micro's screen.
517
518REMOTE WHO [user]@\Ask the remote server for a list of users who are logged
519in, or if a user is specified, for a report on the named user.
520@end<description>
521
522RENAME file1 file2@\Rename local CP/M file1 to file2.
523
524@Index[SEND]SEND @i<filespec>@\Send file(s) specified by @i<filespec> to
525the remote Kermit. The @i<filespec> may contain CP/M wildcards. SEND may
526be abbreviated to the single letter S.
527
528@Index[SET]SET @i<parameter> [@i<value>]@\Set the specified parameter to
529the specified value. Possible parameter settings:
530
531@begin<description,leftmargin +8,indent -8>
532
533@Index[Autoreceive]AUTORECEIVE@\ON (or OFF). Allows several files to be
534received without having to type RECEIVE on the receiving machine. The routine
535simply looks for activity on the serial line, and if so fudges a RECEIVE
536command. The packet sent by the sender will be lost.
537
538@Index[Block Check]BLOCK-CHECK-TYPE @i<option>
539@\The options are:
540@begin<description,spread 0,leftmargin +8,indent -8>
5411-CHARACTER-CHECKSUM@\Normal, default, standard 6-bit checksum.
542
5432-CHARACTER-CHECKSUM@\A 12-bit checksum encoded as two characters.
544
5453-CHARACTER-CRC-CCITT@\A 16-bit CCITT-format Cyclic Redundancy Check, encoded
546as 3 characters.
547
548@end<description>
549
550@Index[Buffer size]BUFFER-SIZE @i<value>@\This allows you to set a buffer
551size during transfer of data. On some systems it takes so long that the
552remote end times out while the local system is reading or writing to disk.
553The size is the number of 128 disk sectors (nominal) and can be from 1
554(128 bytes) to 64 (8 kbytes).
555
556@\CP/M-80 filenames will still be mapped to uppercase characters.
557
558@index<COLLISION>COLLISION value@\What to do when a file arrives that has
559the same name as an existing file. BACKUP means to rename the existing file.
560DISCARD means to discard and reject the incoming file. OVERWRITE means to
561overwrite the existing file. RENAME means to rename the existing file.
562
563@Index[Debug]DEBUG@\ON (or OFF). Enables/disables displaying of packets
564on the screen during file transfer. Not performed if the QUIET option
565has been set for the terminal (SET TERMINAL QUIET)
566
567@Index[Default Disk]DEFAULT-DISK @i<drive letter>
568@\This allows you to set the default
569disk as source and destination
570of file transfers. In addition, issuing this command causes you to switch to
571the specified disk and log it in, write-@|enabled.
572The colon must be included in the disk name (A:).
573The selected disk appears
574in your KERMIT-80 prompt, for instance @example[Kermit-80 14A:>]
575
576@Index[Directory file size]DIRECTORY-FILE-SIZE ON (or OFF).
577
578@\By setting DIRECTORY-FILE-SIZE OFF you can get an abreviated listing of your
579disk drive. File sizes are not calculated, and five files are shown on
580a line. Setting this option ON will show file sizes of each file.
581
582@\Both options will list the free space remaining.
583
584@Index[Escape Character]ESCAPE@\Change the escape character for
585virtual terminal connections. Kermit-80 will prompt you for the new
586escape character, which you enter literally.
587
588@Index[File-mode]FILE-MODE @i<option>
589@\Tells KERMIT-80 what kind of file it
590is sending, so that KERMIT can correctly determine the end
591of the file. SET FILE BINARY means to send all the
592128-@|byte blocks (ie logical CP/M sectors)
593of the file, including the last block in its entirety; SET
594FILE ASCII is used for text files, and transmission stops when the first
595Control-Z is encountered anywhere in the file (this is the CP/M convention for
596marking the end of a text file).
597
598@\SET FILE-MODE DEFAULT tells Kermit to attempt to determine the file type by
599examining the file being transmitted. If a Control-Z appears before the
600last block of the file, it is assumed to be BINARY; if, when the first
601Control-Z is encountered, the remainder of the file contains only control-Z's,
602it is assumed to be a text file. Unfortunately, not all programs fill the
603remainder of the last record of a text file with Control-Z's,
604so this algorithm is not always successful.
605
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)
608may appear at the end of the file on the target system.
609
610@\If ASCII transmission is used on a binary file, any 8th bits set will
611be stripped and a warning sent to the console. When the first control-Z
612is encountered, the file is assumed to be at the end, even if it is not.
613
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
616to respond to an XOFF or XON sent by Kermit-80. If set off,
617no flow control is assumed and any XON/XOFF is ignored.
618
619@Index[IBM]IBM ON (or OFF)@\Allow the transfer of files to and from an IBM
620mainframe 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
622echoing during CONNECT. As distributed, KERMIT-80 uses MARK parity for IBM
623communication. If you don't give this command, IBM mode is OFF. Since IBM
624VM/CMS KERMIT does not have timeout capability, SET IBM ON also turns on the
625"fuzzy timer" automatically.
626
627@Index[Local-Echo]LOCAL-ECHO ON (or OFF)@\When you CONNECT to a remote
628host, you must set LOCAL-@|ECHO ON if the host is half duplex, OFF if
629full duplex. OFF by default.
630
631@Index[Logging]LOGGING ON (or OFF)@\Cease or resume logging whenever
632connect mode is entered. This is really only applicable after a LOG
633command is no longer required.
634
635@Index[No-exit]NO-EXIT@\This command is applicable only for Kermit initiated
636with a command tail. For example, if Kermit was initiated by:
637
638@\KERMIT ;SEND HELLO;NO-EXIT
639
640@\Kermit would first seek out and execute the KERMIT.INI file (if present),
641then send file HELLO to a remote system. Usually Kermit would exit back
642to CP/M, but NO-EXIT over-rides this. STAY is a synonym for NO-EXIT.
643
644@\Note the leading semicolon. This clears leading spaces from the first
645command.
646
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
649appropriate parameters have been set to be used, e.g. speed, parity etc.
650It is intended for use in TAKE command files.
651
652@Index[Parity]PARITY @i<option>
653@\Sets parity for outgoing characters to one of the
654following: NONE, SPACE, MARK, EVEN, or ODD. On input, if parity is NONE, then
655the 8th bit is kept (as data), otherwise it is stripped and ignored. The
656parity setting applies to both terminal connection and file transfer.
657If 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
660capable of 8th bit prefixing, then binary files can be transferred
661successfully; if not, the 8th bit of each data byte will be lost (you will see
662a warning on your screen if this happens).
663
664@Index[Port]PORT @i<port name>
665@\Allows you to switch between different communication ports.
666This command is not available on all systems.
667Type @q<SET PORT ?> for a list of valid options for your system. (Note:
668If your system does not support several ports, this command will
669return a "Not implemented" error if you try to set a port.)
670
671@Index[PRINTER]PRINTER@\ON (or OFF)
672@\Turns copying of CONNECT session to printer on and off. It is also
673possible to toggle the printer on/off from the connect state, by
674typing <escape character> followed by P.
675
676@Index[Set Receive]RECEIVE @i<parameter> [@i<value>]
677@\Set a RECEIVE parameter.
678
679@begin<description, Spread 0, leftmargin +8,indent -8>
680
681@Index[Pad character]
682PAD-CHAR@\Set the PAD character to use while receiving files.
683Currently a dummy, as for SET SEND PAD-CHAR.
684
685@Index[Set padding]PADDING [value]
686@\Set the number of PAD characters to use while receiving files.
687Same as SET SEND PADDING.
688
689@Index[Set Start of packet]
690START-OF-PACKET [value]
691@\Set the default start of Packet character for receiving files. Apply the
692same rules and considerations as for SET SEND START-OF-PACKET.
693
694PACKET-LENGTH number@\Tell the other Kermit the longest packet length CP/M
695Kermit is willing to receive during file transfer. The maximum length is 94,
696which is also the default length.
697
698@end<description>
699
700@Index[Set Send]SEND @i<parameter> [@i<value>]
701@\Set a SEND parameter.
702@begin<description, spread 0, leftmargin +8,indent -8>
703
704@Index[Pad character]
705PAD-CHAR@\Set the Pad character to be used while sending files.
706It is currently a dummy entry, and does not do anything.
707
708@Index[Set Padding]
709PADDING [value]
710@\Set the number of PAD-CHARS to be used while sending files. This
711too does nothing.
712
713@Index[Set Start of packet]
714START-OF-PACKET@\Set the default start of packet character to
715another character than control-A. This may be necessary on systems
716(including intervening networks) that trap control-A characters. Choose
717a control character not otherwise used, ie not carriage return (13D, ODH),
718line feed (10D, OAN), tabs (09D, 09H), backspace (08H), and bell (07H)
719or any other used between you and your remote system.
720
721@end<description>
722
723@Index[Baud]SPEED @i<value>
724@\Change the baud rate of the communications port. This
725command 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
727for a list of supported baud rates.
728On systems that do not support this command, you must set the port
729baud rate from CP/M or other setup mechanism outside of KERMIT-80.
730
731@Index[TacTrap]TACTRAP@\Set the TAC intercept character. If you are attached
732to a TAC it will swallow the intercept character (commercial AT sign by
733default) so Kermit sends it twice. With this command you can set the
734intercept character (ie the one to send twice) to another character.
735
736@Index[VT52 Emulation]
737@Index[Terminal Emulation]
738@Index[External Terminal Emulation]
739TERMINAL @i<option>
740@\Select one of the following terminal characteristics:
741
742@begin<description,spread 0.5,leftmargin +8,indent -8>
743
744OFF@\sets emulation off, and its up to the attached terminal to
745respond to escape sequences sent from the remote host system.
746
747DUMB@\Like off, but carriage return and line feed characters are
748the only control characters accepted. All other control characters are
749simply ignored. (Really a "Glass TTY").
750
751EXTERNAL@\Emulation is provided for by a routine in the system dependent
752part of Kermit. Attempting to set this option without having and
753externally supplied routine will returna "Not Implemented" error.
754
755OFF@\All characters are passed directly to the terminal without any
756interpretation by Kermit.
757
758VT52@\When connected as a terminal
759to a foreign host, the micro emulates a VT52.
760VT52 emulation is set by default, except on micros
761that already have terminal functionality built in, such as the DEC VT180 and
762DECmate (these act as @index<VT100 Emulation>VT100-@|series terminals). Some
763systems emulate other terminals, like the ADM3A; see table @ref<-cpmterms>.
764
765QUIET@\Do not display any file transfer information onto the console.
766This mode is useful if you console takes a long time to update the display.
767Only the file name is displayed. DEBUGging information is not displayed
768even if selected.
769
770REGULAR@\Inverse of QUIET. All packets etc displayed, as ususal.
771@end<description>
772
773@Index[TIMER]TIMER ON (or OFF)@\Enable or disable the "fuzzy timer". The timer
774is off by default, because in the normal case KERMIT-80 is communicating with a
775mainframe KERMIT that has its own timer. Mainframe KERMIT timers tend to be
776more precise or adaptable to changing conditions. You should SET TIMER ON if
777you are communicating with a KERMIT that does not have a timer. You should SET
778TIMER OFF if you are communicating over a network with long delays.
779
780@Index[USER]USER @i<user-number>
781@\Sets another user number to be active.
782Acceptable user numbers are 0 to 31, though it is recommended to use
783user numbers 0 to 15 only.
784This is really only useful for Winchester Systems with high disk capacities.
785
786@Index[Warning]WARNING ON (or OFF)@\Warn user of filename conflicts when
787receiving files from remote host, and attempt to generate a unique name by
788adding "@q<&>" characters to the given name. ON by default, which is
789equivalent to SET COLLISION RENAME.
790@end<description>
791
792@Index[Show]SHOW@\Display all settable parameters. You will get a page or so
793of the status af all parameters that can be set using the SET command.
794
795@Index[Status]STATUS@\The same function as Show.
796
797STAY@\Equivalent to SET NO-EXIT.
798
799@Index[Take]TAKE @i<filespec>@\Take characters and commands from the
800specified file as if they were entered from the keyboard.
801This is useful if you want to set up a batch job. A command
802file can send, get, receive, set functions
803etc automatically. A TAKE command can be interrupted with ^C.
804
805@\An automatic "TAKE KERMIT.INI" is executed from the default drive
806when Kermit-80 is loaded. This can be used to set defaults of band rate,
807parity, filetype, default drive etc.
808
809@\If KERMIT.INI does not exist, control is given directly to the user.
810
811@Index[TRANSMIT]TRANSMIT @i<filespec> @i<turnaround>@\Send the specified file
812to the system on
813the other end of the connection as though it were being typed at the terminal,
814one line at a time. Each line sent is terminated with a carriage return, and
815any line feeds are stripped from the file sent.
816After each line has been sent Kermit waits for a character string
817from the host (eg a acrriage return). If not specified, a carriage
818return is assumed. No KERMIT protocol is involved.
819An asterisk (star) is sent to the console for every line sent, to indicate
820how the transfer is progressing.
821This is useful for sending files to systems that don't have a
822KERMIT program. During transmission, you may type one of these
823single-@|character commands:
824@begin<description,spread 0,leftmargin +4, indent -4>
825Control-C@\Cease transmission, and drop into terminal emulation mode.
826
827CR@\(carriage return) Re-transmit the previous line.
828@end<description>
829
830@Index[Type]TYPE filespec@\Type a local CP/M file or files on the CP/M screen.
831A Control-C
832will cancel the command and return to the Kermit prompt. A Ctrl-X will cancel
833the current file and go on to the next one, if any.
834Typing any other character
835while the file is being displayed will suspend
836the output. Another character will resume output.
837
838@Index[VERSION]VERSION@\Show the name, edit number, and edit date of several of
839the modules that make up Kermit-80.
840
841@end<description>
842
843@section<Kermit-80 Flavors>
844@Comment(begin<description, leftmargin -8, indent +2>)
845
846Many of the systems supported use an external terminal, rather than a built-in
847console. Kermit may be further customized for these systems by defining
848(at assembly time) the terminal type to be used.
849If the terminal type is unknown or does not match any of the existing
850terminal options, the generic "CRT" option may be selected. In this case,
851Kermit cannot do fancy screen control during file transfer; it simply types the
852file names, packet numbers, and messages in sequence across and down the
853screen. This works best if you can put your micro or terminal in "autowrap"
854mode; otherwise the packet numbers will pile up in the rightmost column; the
855filenames and messages will always appear on a new line, however.
856If no specific terminal has been selected, Kermit cannot do VT52 emulation;
857it can act
858as a "dumb terminal" (sometimes called a "glass TTY"), or else its own built in
859terminal firmware provides cursor control functions independent of the Kermit
860program.
861
862@subsection<Generic Kermit-80>
863@index<Generic Kermit-80>@index<8080> "Generic Kermit-80" is an implementation
864of Kermit that should run on any 8080-@|compatible CP/M 2.2 system with no
865modification
866at all, or perhaps only a minor one. Unlike other Kermit-80 implementations,
867it contains no system-@|dependent manipulation of the serial port.
868All I/O is done with standard CP/M BIOS@index<BIOS> calls, and I/O redirection
869is done using the CP/M IOBYTE function, which, according to the Digital
870Research @i<CP/M Operating System Manual>, is an optional feature of any
871particular CP/M implementation. If your system does not provide the IOBYTE
872function, Generic Kermit-80 will not work; furthermore, not all systems that
873implement IOBYTE do so in the same way.
874The SET PORT command may be used to select the devices to be used for input
875and output. Table @ref<-cpmports> lists the options to the SET PORT command
876and their effects.
877
878@begin<table,use example,centered>
879@bar()
880@blankspace(1)
881@ux(SET PORT @i<xxx>) @ux(input from) @ux(output to)
882 CRT CRT: CRT:
883 PTR PTR: PTP:
884 TTY TTY: TTY:
885 UC1 UC1: UC1:
886 UR1 UR1: UP1:
887 UR2 UR2: UP2:
888@caption<Kermit-80 SET PORT Options>
889@tag<-cpmports>
890@bar()
891@end<table>
892
893The default is SET PORT PTR.
894In all cases, the console (CON:) and list (LST:) devices used are those
895selected when Kermit is started.
896
897 The reason all Kermit-80 implementations aren't
898generic is that a good deal of speed is sacrificed by getting all services from
899the operating system. While a specific implementation of Kermit-80 may be able
900to operate at 4800, 9600, or even 56 Kilo baud,
901generic Kermit will fail to work
902on some systems at speeds in excess of 1200 baud. In addition, many features
903of Kermit require more specific knowledge of the hardware involved. Generic
904Kermit cannot send a BREAK signal, or change the baud rate, for example.
905
906@subsection<CP/M 3 Kermit>
907
908CP/M-3 Kermit (also known as CP/M-Plus Kermit) is a version of generic
909Kermit-80, and should run on most CP/M-3 (CP/M-Plus) systems. It uses the
910auxilliary port (AUX:) to communicate to the remote Kermit. The SET BAUD
911and SET PORT commands are not supported; nor can a BREAK be sent.
912Like generic Kermit-80, a terminal may be selected at assembly time.
913
914@subsection<System-Specific Versions>
915
916There are also many versions of Kermit-80 tailored to specific systems.
917Most of these operate uniformly, but some of them take advantage (or suffer
918limitations) of the specific system. Here are some of the special features
919for particular systems:
920
921@begin<description, leftmargin +4, indent -4>
922@ux<Amstrad>: -- Two versions:
923
924@begin<description, leftmargin +4, indent -4>
925PCW 8256@\The PCW 8256/8512 with the serial inerafce attached.
926
927CPC 6128@\The 664 with add on memory and 6128 are both supported.
928Both systems must run CP/M Plus, so the 664 will need an add on RAM pack
929and CP/M upgrade. A high speed transfer rate of 38k baud can be used
930between Amstrad computers.
931@end<description>
932
933@ux<ACCESS>:@\Access Matrix computer using port J5. Supports SET
934BAUD-RATE for rates of 300-9600 baud.
935
936@ux<Apple II> -- four variations:
937@begin<description,leftmargin +4,indent -4>
938APMMDM:@\Apple with Z80 Softcard and Micromodem II in slot 2
939Dialout capability provided in connect command; user is prompted for
940phone number if carrier is not present. During connect mode,
941@q(^]D) drops carrier. BYE command also causes carrier to be dropped.
942
943AP6551:@\Apple with Z80 Softcard, and one of several 6551-based
944communication cards; the slot number is a compile-time parameter
945(default is slot 2). SET BAUD-RATE supported; speeds are 110-19200
946baud.
947
948APCPS:@\Apple with Z80 Softcard and CP Multi-Function Card. The slot
949number is again a compile-time parameter. SET BAUD-RATE is supported
950for baud rates from 50 baud to 19200 baud.
951
952AP6850:@\Apple II with Z80 Softcard and a 6850-based USART in slot 2-the
953slot being a compile-time parameter. SET BAUD-RATE is not supported.
954@end<description>
955
956@ux<BBC>:@\Acorn Computers BBC Computer with Acorn Z80 second
957processor running CP/M-80. Supports SET BAUD-RATE and can send breaks.
958
959@ux<BigBoard II>:@\Uses serial port A. To use port B, change mnport, mnprts,
960and baudrt and reassemble. Can generate BREAK. SET SPEED supported;
961speeds are 300-38400 baud.
962
963@begin<multiple>
964@ux<Cifer>:@\Originally coded for Cifer 1886 using the VL: port set
965as TTYI: and TTYO: but works successfully on 18xx and 28xx
966series machines.
967
968There are now two versions, each with two variations: Either running
969CP/M Version 2.2 or 3.0, and either using the VL: or AUX: ports. The VL:
970port version can only use seven bits of data, so parity prefixing is
971required for binary file transfers. This restriction is removed by
972using the AUX: port. For those interested, the problem is due to the
973interprocessor link between the video and CPU (!) boards. The VL: port
974is on the video board, and the AUX: port on the CPU board,
975and the inter processor link can only transfer seven bits of data.
976
977Supports SET SPEED, and can generate breaks on
978some models with a BREAK key.
979@end<multiple>
980
981@ux<Comart>:@\Comart Communicator-Similar to Northstar
982equipment. Can generate BREAK.
983
984@ux<Compupro>:@\Based on Kermit 3.x, and has been merged into V4.09
985
986@ux<CPT-85xx word processors>:@\Can generate BREAK. SET SPEED supported;
987speeds are 50-9600 baud.
988
989@ux<Cromemco>:@\Cromemco computers with TU-ART card. Supports SET
990BAUD-RATE (110-9600 baud).
991
992@ux<DEC DECmate II word processor (with Z80 card)>:@\Can generate BREAK.
993
994@ux<DEC VT180 (Robin)>:@\Three output ports, referred to as COMMUNICATIONS,
995GENERAL, and PRINTER. Can generate BREAK.
996
997@ux<Digicomp Delphi 100>:@\SET SPEED supported; speeds are 50-19200 baud.
998
999@ux<Discovery>:@\Action Computer Enterprises "Discovery" Multi-user
1000Computer. Uses Port B on an 83U user board. Supports SET SPEED
1001for 50-19200 baud. Can generate BREAK.
1002
1003@ux<Epson>:@\Epson PX-8 with LCD display. Although it is quite different
1004in displaying of Packet Information, it works as any other CP/M-80 Kermit.
1005Supports SET SPEED and can generate BREAK.
1006
1007@ux<Generic Kermit>:@\Two versions, one for CP/M version 2@q<.>2 and
1008version 3. These systems use IOBYTE flipping (V2@q<.>2) and the AUX:
1009device to communicate to the serial line. You may have to SET PORT xxx
1010before the version 2@q<.>2 will work, as Kermit needs to know what device
1011is the serial line.
1012
1013@ux<Genie>:@\Eaca Video Genie.
1014
1015@ux<Heath>: Three Versions:
1016@begin<description,leftmargin +4,indent -4>
1017H8QUAD@\for Heath-8 systems with the quad io board. This system has been
1018derived from V3.x code. Note that this version will not run "as is" on H89
1019systems.
1020
1021H89@\For Heath-89 machines suports baud rates from 50 to 56,000 baud.
1022
1023Z100@\For Z-100 running CP/M-85. This version does not support
1024setting of baud rates.
1025
1026@end<description>
1027
1028@ux<Intertec Superbrain>: Two Versions:
1029@begin<description,leftmargin +4,indent -4>
1030BRAINA@\For superbrain using AUX port. Breaks and SET BAUD both supported
1031
1032BRAINM@\As above, but using the MAIN port.
1033@end<description>
1034
1035@ux<Ithaca>:@\Ithaca Intersystems based computer using the VIO card for
1036all IO to the outside world. The system is strictly speaking a
1037home-brew variant of the Ithaca machine, using an S100 cardcage
1038without a front panel. It uses the Extended BIOS by EuroMicro of London.
1039However, I see no reason for this version not running on a genuine
1040Ithaca Intersystems machine. There are patches needed to the EuroMicro
1041BIOS to make this version work.
1042
1043@ux<Kaypro:>@\Should work on most Kaypro models, as well as some related
1044systems (Ferguson BigBoard I, Xerox 820). For the newer Kaypros with multiple
1045ports, Kermit uses the one labeled "serial data"; it cannot use the serial
1046printer or internal modem ports (but it should be possible to modify the values
1047for mnport, mnprts, and baudrt to do this). Can generate BREAK. SET SPEED
1048supported; speeds are 50-19200 baud.
1049
1050@ux<Lobo>:@\Lobo MAX-80. Supports SET SPEED and can generate BREAKS.
1051
1052@ux<Merlin>:@\British Telecom Merlin M2215 (also Rair Black Box, possibly
1053also the ICL PC?). Requires a terminal.
1054
1055@ux<Microbee>:@\Microbee Systems computer made in Australia. Works on
1056Microbee 56K (Series 2 APC), 64K (Computer in a Book), 128K (Dynamic), and
1057256K (256TC). Can generate BREAK. SET BAUD-RATE supported; speeds are
105875-9600. All serial I/O is via software, not hardware. Simultaneous transmit
1059and receive possible on all speeds except 75/1200, 1200/75, 4800, and 9600.
1060
1061@ux<Micromate>:@\PMC 101 Micromate. Supports SET SPEED and can
1062generate BREAK.
1063
1064@ux<Micromint>: Two versions
1065@begin<description, leftmargin +4, indent -4>
1066S6@\The Ciarcia/Micromint sb-180 board with a 6Mhz procoessor. System
1067requires a terminal.
1068
1069S9@\As above, but with a 9Mhz processor.
1070@end<description>
1071
1072@ux<NCR>:@\Decisionmate 5. Uses the 2651 and is largely
1073the same as the Ithaca Intersystems machine implementation.
1074
1075
1076@ux<Northstar>: -- There are four versions available:
1077@begin<description,leftmargin +4,indent -4>
1078NORTHS:@\Northstar Horizon with HS10-4 board. Supports SET SPEED
1079and SET PORT.
1080
1081HORIZON:@\Northstar Horizon using the serial ports on the Mother
1082board. Can generate BREAK.
1083
1084BASICNS:@\Basic Northstar Horizon using the printer port.
1085Can generate BREAK.
1086
1087ADVANT:@\Northstar Advantage. Supports SET SPEED and can
1088generate BREAK. Traps Control-0 in the system filter.
1089@end<description>
1090
1091@ux<Morrow Decision I>:@\Uses the Multi-I/O board. Port 1 is the console, port
10923 is the communications line. SET SPEED supported; speeds are 75-56000
1093baud.
1094
1095@ux<Morrow Micro Decision I>:@\
1096
1097@ux<Nokia MicroMikko>:@\
1098Will not echo control-O (which locks keyboard). SET SPEED
1099supported; speeds are 75-9600 baud.
1100
1101@ux<Ohio Scientific>:@\Doesn't have screen control.
1102
1103@ux<Osborne 1>:@\Uses serial line, not internal modem. Left-arrow
1104key generates
1105<DEL> ("delete" or "rubout" character) during connect mode. SET SPEED
1106supported; speeds are 300 and 1200 baud. Now supports multi-sector buffering.
1107
1108@ux<Research Machines>: Two Versions:
1109@begin<description,leftmargin +4,indent -4>
1110RM380ZM:@\380Z and 5.25" disks supports SET BAUD.RATE
1111
1112RM380ZF:@\380Z and 8" disks, otherwise as above.
1113@end<description>
1114
1115@ux<Sanyo>:@\Sanyo MBC-1100. This version derived from Kermit V3.x
1116
1117@ux<ScreenTyper>:@\Details unkown.
1118
1119@ux<TRS-80>: Three versions:
1120@begin<description,leftmargin +4,indent -4>
1121TRS80LB:@\TRS-80 with Lifeboat CP/M
1122
1123TRS80PT:@\TRS-80 with Pickles and Trout CP/M
1124
1125TRSM4:@\TRS-80 Model 4 with Montezuma CP/M
1126@end<description>
1127
1128@ux<Teletek>:@\Teletek Systemaster. Supports SET BAUD.
1129
1130@ux<Telcon>:@\TELCON ZOBRA portable computer.
1131
1132@ux<Torch>:@\Torch Unicorn 5 initially, but the code runs on other
1133Z80 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
1135RS423 port is used rather than any built in Modem.
1136(UK telecoms legislation effectively makes modem control software
1137tricky business...). Two potential versions exist-one using cursor
1138positioning codes for a MCP and CCCP ROM combination of revision less
1139than 1.00, the other version uses the additional facility MCP/CCCP
1140versions greater than 1. Supports SET SPEED and can generate BREAKs.
1141
1142@\Note that binary files must be transferred using SET PARITY to anything
1143other than NONE! Parity is neither generated nor checked.
1144
1145@ux<US Micro Sales>:@\S-100-8 based computer.
1146
1147@ux<Vector Graphics>:@\Vector
1148
1149@ux<Xerox>:@\Xerox 820.
1150
1151@ux<Z80MU>:@\Development Kermit on a PC running the Z80MU Z80 and CP/M 2@q<.>2
1152development system. Allows development of the system independent modules
1153to be done on an IBM PC or clone. Also allows the generation of new .HEX
1154files, that may then be KERMITed to the target system. Note: Not all
1155the 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
1157returning disk parameters is not supported.)
1158@end<description>
1159
1160@section<Installation of Kermit-80>
1161
1162Kermit-80 was written originally for the Intertec SuperBrain in
1163lowest-@|common-@|denominator @Index[8080] 8080 code with the standard
1164assembler, ASM (single source module, no macros, no advanced instructions), so
1165that it could be assembled on any CP/M-80 system (the 8080 assembler is
1166distributed as a standard part of CP/M-80, whereas the fancier Z80@Index[Z80]
1167or macro assemblers are normally commercial products). It has since been
1168modified to run on many other systems as well. Kermit-80 should be able to run
1169on any 8080-, 8085- or Z80-@|based microcomputer under @Index[CP/M] CP/M with
1170appropriate minor changes to reflect the port I/O and screen control for the
1171system (see below).
1172
1173The proliferation of new systems supported by Kermit-80 made the program grow
1174so large and complicated that it had to be broken up into system-@|independent
1175and system-@|dependent modules, as of version 4 (this was done by Charles
1176Carvalho of ACC). Each module is composed of multiple files. This has reduced
1177the time and disk space necessary for assembly; Kermit-80 may once again be
1178assembled on a CP/M system with roughly 250Kbytes of space. The majority of
1179the code does not need to be reassembled to support a new system.
1180Unfortunately, it can no longer be assembled with ASM, since ASM does not
1181support multiple input files. To allow it to be assembled on any CP/M system,
1182the public-domain assembler LASM is included in the distribution kit. Kermit-80
1183may also be assembled with Microsoft's M80 (not supplied). In theory, any 8080
1184assembler supporting the INCLUDE directive ought to work, as well.
1185
1186All versions of Kermit-80 are assembled from the same set of sources, with
1187system dependencies taken care of by assembly-@|time conditionals within the
1188system-@|dependent module (eventually, the system-@|dependent module will
1189itself be broken up into multiple files, one for each system). The most
1190important system dependencies are terminal emulation (when CONNECTed to the
1191remote host) and screen handling, which are dependent on the individual micro's
1192escape codes (these features are table driven and easily modified for other
1193CP/M systems), and the lowest level I/O routines for the serial communications
1194port. The port routines are best done only with BDOS calls, but some systems
1195do not allow this, primarily because the BDOS routines strip the parity bit
1196during port I/O, and the parity bit is used for data when transmitting binary
1197files.
1198
1199Kermit-80's I/O routines must check the port status and go elsewhere if no
1200input is available; this allows for virtual terminal connection, keyboard
1201interruption of stuck transmissions, etc. On systems that fully implement I/O
1202redirection via the optional CP/M IOBYTE facility, this may be done by
1203switching the IOBYTE definition. On others, however, IN/OUT instructions
1204explicitly referencing the port device registers must be used.
1205
1206@index<Timeout>
1207CP/M-80 KERMIT versions 3.8 and later include a "fuzzy timer" that allows a
1208timeout to occur after an interval ranging from 5 to 20 seconds (depending upon
1209the speed of the processor and the operating system routines) during which
1210expected input does not appear at the port. In this case, retransmission
1211occurs automatically. In any case, you may type a carriage return during
1212transmission to simulate a timeout when the transfer appears to be stuck.
1213
1214@subsection<Organization of Kermit-80>
1215Kermit-80 consists of two modules, each of which is generated from multiple
1216source files. The first module contains the system-@|independent code;
1217the second module is configured for a particular system and merged with
1218the system-@|independent module to produce a customized Kermit-80.
1219
1220The distribution kit contains:
1221@begin<itemize,spread 0>
1222the system-@|independent module, @q<CPSKER.HEX>;
1223
1224the system-@|dependent modules, @q<CPV*.HEX> (see table @ref<-cpmsystems1>
1225and @ref<-cpmsystems2>);
1226
1227the source files, @q(CPS*.ASM) and @q(CPX*.ASM),
1228
1229the public-domain CP/M assembler, @q<LASM.*>,
1230
1231the public-domain CP/M load/patch utility, @q<MLOAD.*>
1232@end<itemize>
1233
1234@Comment(NewPage<> added for local manual)
1235@begin<table,use verbatim,leftmargin +0>
1236@bar()
1237@blankspace(1)
1238@u(Symbol Filename System)
1239@blankspace(0.25)
1240ACCESS CPVACC @r<Access Matrix>
1241ADVANT CPVADV @r<Northstar Advantage>
1242AP6551 CPVAPL @r<Apple II, Z80 Softcard, 6551 ACIA in serial interface>
1243AP6850 CPVA65 @r<Apple II, Z80 Softcard, 6850 ACIA in Serial Iiterface>
1244APMMDM CPVAPM @r<Apple II, Z80 Softcard, Micromodem II in slot 2>
1245APCPS CPVCPS @r<Apple II, Z80 Softcard, with CPS multifunction card>
1246BASICNS CPVBNS @r<Northstar Horizon (terminal required)>
1247BBC CPVBBC @r<Acorn "BBC" computer with Acorn Z80 second processor>
1248BBII CPVBB2 @r<BigBoard II (terminal required)>
1249BRAINM CPVBRM @r<Intertec Superbrain using the main port>
1250BRAINA CPVBRA @r<Intertec Superbrain using the Aux port>
1251CIFER2 CPVCIF @r<Cifer 1886 using the VL: Serial port and CP/M V2.2>
1252CIFER3 CPVCI3 @r<Cifer 1886 using the VL: Serial port and CP/M V3.0>
1253CIFER2 CPVCA2 @r<Cifer 1886 using the AUX: Serial port and CP/M V2.2>
1254CIFER3 CPVCA3 @r<Cifer 1886 using the AUX: Serial port and CP/M V3.0>
1255CMEMCO CPVCRO @r<Cromemco with TU-ART card. Terminal required)>
1256COMART CPVCOM @r<Comart Communicator (terminal required)>
1257COMPRO CPVPRO @r<Compupro with Interfacer 4 (or 3). Terminal required.>
1258CPC CPVCPC @r<Amstrad CPC 664 and 6128 and CP/M 3>
1259CPM3 CPVCP3 @r<"Generic": CP/M 3.0 (CP/M Plus) systems (terminal req'd)>
1260CPT85XX CPVCPT @r<CPT-85xx wordprocessor with CP/M>
1261DELPHI CPVDEL @r<Digicomp Delphi 100 (terminal required)>
1262DISC CPVDIS @r<Action Computer Enterprises "Discovery" (terminal req'd)>
1263DMII CPVDM2 @r<DECmate II with CP/M option>
1264GENER CPVGEN @r<"Generic": CPM 2.2 systems with IOBYTE (terminal req'd)>
1265GENIE CPVGNI @r<Video Genie>
1266H8QUAD CPVH8Q @r<Heath-8 with Quad 8 i/o board>
1267HEATH CPVH89 @r<Heath/Zenith H89>
1268HORIZON CPVHOR @r<Northstar Horizon (terminal required)>
1269KPII CPVKPR @r<Kaypro-II (and 4; probably supports all Kaypro systems)>
1270LOBO 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>;
1273
1274"filename" is the name under which the module is supplied in the distribution.
1275@end<text>
1276@caption<Systems supported by Kermit-80 (Part 1)>
1277@bar()
1278@tag<-cpmsystems1>
1279@end<table>
1280
1281
1282@Comment(NewPage<> added for local manual)
1283@begin<table,use verbatim,leftmargin +0>
1284@bar()
1285@blankspace(1)
1286@u(Symbol Filename System)
1287@blankspace(0.25)
1288M2215 CPVMRL @r<British Telecom Merlin/Rair Black Box (terminal required)>
1289MBEE CPVBEE @r<Microbee>
1290MDI CPVMDI @r<Morrow Decision I (terminal required)>
1291MIKKO CPVMIK @r<MikroMikko>
1292MMATE CPVMM @r<PMC 101 Micromate (terminal required)>
1293MMDI CPVUD @r<Morrow Micro Decision I (terminal required)>
1294NCRDMV CPVDMV @r<NCR Decision Mate V. (Terminal required?)>
1295NORTHS CPVNS @r<Northstar Horizon with HSIO-4 card (terminal req'd)>
1296OSBRN1 CPVOSB @r<Osborne 1>
1297OSI CPVOSI @r<Ohio Scientific>
1298PCI2651 CPVPCI @r<Ithaca Intersystems with VI0 card (terminal required)>
1299PCW CPVPCW @r<Amstrad PCW 8256/8512 with serial interface>
1300PX8 CPVPX8 @r<Epson PX-8>
1301RM380ZM CPVRMM @r<Research Machines 380Z with MDS (5.25" discs)>
1302RM380ZF CPVRMF @r<Research Machines 380Z with FDS (8" discs)>
1303ROBIN CPVROB @r<DEC VT180>
1304S1008 CPVUSM @r<US Microsales S-100-8 (terminal required)>
1305SANYO CPVSAN @r<Sanyo MBC-1100>
1306SB6 CPVSB6 @r<Micromint SB-180 with 6Mhz CPU (terminal required)>
1307SB9 CPVSB9 @r<Micromint SB-180 with 9Mhz CPU (terminal required)>
1308SCNTPR CPVSCN @r<Screentyper>
1309TELCON CPVTEL @r<TELCON Zobra portable>
1310TELETEK CPVTET @r<Teletek Systemaster>
1311TORCH CPVTRC @r<Torch computers BBC-B with Z80 second processors>
1312TRS80LB CPVTLB @r<TRS-80 model II with Lifeboat 2.25C CP/M Display>
1313TRS80PT CPVTPT @r<TRS-80 model II with Pickles + Trout CP/M Display>
1314TRSM4 CPVTM4 @r<TRS-80 model IV>
1315VECTOR CPVVEC @r<Vector Graphics>
1316XER820 CPVXER @r<Xerox 820>
1317Z100 CPVZ00 @r<Z-100 under CP/M-85>
1318Z80MU 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>;
1321
1322"filename" is the name under which the module is supplied in the distribution.
1323@end<text>
1324@caption<Systems supported by Kermit-80 (Part 2)>
1325@bar()
1326@tag<-cpmsystems2>
1327@end<table>
1328
1329@Comment(NewPage added for local manual)
1330@NewPage()
1331@begin<table,use verbatim,leftmargin +0>
1332@bar()
1333@blankspace(1)
1334@u(Symbol Terminal type)
1335@blankspace(0.25)
1336CRT @r<Dumb terminal type. Does not do cursor addressing>
1337ADM3A @r<Lear Seigler ADM 3A>
1338ADM22 @r<Lear Seigler ADM 22>
1339AM230 @r<Ampro 230>
1340H1500 @r<Hazeltine 1500>
1341SMRTVD @r<Netronics Smartvid>
1342SOROQ @r<Soroq IQ-120>
1343TVI912 @r<Televideo 912>
1344TVI925 @r<Televideo 925 or Freedom 100>
1345VT52 @r<Dec VT52 or equivalent (H19)>
1346VT100 @r<Dec VT100 or equivalent>
1347WYSE @r<Wyse 100>
1348@begin<text,facecode R,above 1>
1349"symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
1350
1351"Terminal type" is the type of terminal "symbol" selects.
1352@end<text>
1353@caption<Terminals supported by Kermit-80>
1354@bar()
1355@tag<-cpmterminals>
1356@end<table>
1357@Comment(NewPage<> removed again)
1358
1359@Comment<for Installation of kermit-80>
1360
1361@subsection<Downloading Kermit-80>
1362
1363You'll need either a pre-configured @q<.COM> file or the system-@|independent
1364module, @q<CPSKER>, in binary (@q<.COM>) or hex (@q<.HEX>) format and the
1365system-@|dependent overlay for your system (from Tables @ref<-cpmsystems1> and
1366@ref<-cpmsystems2>). If
1367your system is not listed in the table, get the generic CP/M 2@q(.)2 Kermit or
1368the generic CP/M 3 Kermit. If you already have a version of Kermit on your
1369micro and you want to install a new version, simply use your present version to
1370get the new files. Transfer the files to your system and skip ahead to
1371"merging the modules".
1372
1373If you do not have a copy of Kermit on your micro, and you cannot borrow a
1374Kermit floppy but you do have access to a mainframe computer with a copy of the
1375Kermit-80 distribution, you should read this section.
1376
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.
1379The easiest is to "download" the necessary "hex" files into your micro's
1380memory and then save them on the disk. If you have a terminal emulator program
1381on your micro which can save a copy of the session to disk, connect to your
1382host, and type the necessary files. Exit from the emulator, saving the
1383session log, and edit the session log to extract the hex files. Skip ahead to
1384"merging the files".
1385
1386The following is a procedure which, though far from foolproof, should allow you
1387to get a version of Kermit to your CP/M based micro. It depends upon the host
1388prompt, or at least the first character of the host prompt, being some
1389character that cannot appear in a hex file (the valid characters for hex files
1390are the digits 0-9, the upper case letters A-F, the colon ``@q<:>'', carriage
1391return, and line feed). As soon the prompt character is encountered, the
1392transfer will terminate. If your host does not issue a prompt that will
1393accommodate 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
1395program below looks for an atsign (the normal DEC-20 prompt, hex 40).
1396DECSYSTEM-10 users would look for a dot, hex 2E; VAX/VMS or UNIX users would
1397look for a dollar sign, hex 24; UNIX C-Shell users would look for a percent
1398sign, hex 26.
1399
1400@Begin <Enumerate>
1401For CP/M 2@q<.>2 systems, connect to a floppy disk with plenty of free space.
1402Run DDT and type in the following (the comments should not be typed in;
1403they are there just to tell you what's happening): (Note that this wont work
1404for CP/M Plus or 3@q<.>0 systems!)
1405@Begin<figure, use Example, leftmargin +0>
1406@bar()
1407@blankspace(0.25)
1408-a100 ;Begin assembling code at 100
14090100 LXI H,2FE ;Where to store in memory
14100103 SHLD 200 ;Keep pointer there
14110106 MVI E,D ;Get a CR
14120108 MVI C,4 ;Output to PUNCH (send to HOST)
1413010A CALL 5
1414010D MVI C,3 ;Input from READER (read from HOST)
1415010F CALL 5
14160112 ANI 7F ;Strip parity bit
14170114 PUSH PSW ;Save a and flags
14180115 MOV E,A ;Move char to E for echo
14190116 MVI C,2 ;Output to screen
14200118 CALL 5
1421011B POP PSW ;Restore A and flags
1422011C CPI 40 ;(or 4E,24,26,etc) System prompt?
1423011E JZ 127 ;Yes, have whole file in memory
14240121 CALL 17A ;No, store another byte
14250124 JMP 10D ;Read another byte
14260127 MVI A,1A ;Get a Control-Z (CP/M EOF mark)
14270129 CALL 17A ;Store it in memory
1428012C LXI H,300 ;Get memory pointer
1429012F SHLD 202 ;Store as DMA pointer
14300132 LDA 201 ;Get 'HI' byte of memory pointer
14310135 STA 200 ;and store it as 'LO' one
14320138 XRA A
14330139 STA 201 ;Zero 'HI' byte (slow *256)
1434013C MVI C,16 ;Make NEW file
1435013E LXI D,5C ;With FCB1
14360141 CALL 5
14370144 CALL 15E ;Write 128 bytes (sector)
14380147 CALL 15E ;Write another sector
1439014A LXI H,FFFF ;Get a 16-bit Minus One
1440014D XCHG ;into DE
1441014E LHLD 200 ;Get 256-byte counter
14420151 DAD D ;Decrement
14430152 SHLD 200 ;and store back
14440155 MVI A,2 ;Check if
14450157 CMP L ; 256-byte counter down to offset
14460158 JZ 183 ;Yes, we're done
1447015B JMP 144 ;Keep writing..
1448015E LHLD 202 ;Get file-pointer
14490161 XCHG ;into DE
14500162 MVI C,1A ;Set DMA-address
14510164 CALL 5
14520167 MVI C,15 ;Write sector (128 bytes)
14530169 LXI D,5C ;using FCB1
1454016C CALL 5
1455016F LHLD 202 ;Get file-pointer
14560172 LXI D,80 ;128-bytes
14570175 DAD D ;added to file-pointer
14580176 SHLD 202 ;and save
14590179 RET ;and return
1460017A LHLD 200 ;Get Memory-pointer
1461017D MOV M,A ;Store character
1462017E INX H ;Increment Pointer
1463017F SHLD 200 ;and save
14640182 RET ;and return
14650183 MVI C,10 ;CLOSE file
14660185 LXI D,5C ;using FCB1
14670188 CALL 5
1468018B JMP 0 ;Force WARM BOOT
14690179
1470-^C ;(Type Control-C) Return to CP/M
1471A>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>
1473@bar()
1474@tag<-cpmboot>
1475@end<Figure>
1476Alternatively, an assembler source file for this program is distributed
1477with CP/M Kermit as @q<CPKFET.ASM>. You might prefer to type the assembler
1478version in and assemble and load it (ASM CPKFET, LOAD CPKFET, or MASM CPKFET,
1479MLOAD CPKFET), to let the assembler and loader catch any typing errors.
1480
1481Connect to your host using a terminal or a terminal emulation program. Ensure
1482that your host does not have your terminal in "page mode" (does not pause
1483at the end of each screenful).
1484
1485Tell the host to display the first hex file (the system-independent module)
1486at your terminal, e.g. give a command like @q<TYPE CPSKER.HEX>, @i<@u(without)
1487a terminating carriage return>.
1488
1489Return to your micro by switching the cable from the terminal to the micro,
1490or by terminating the micro's terminal program.
1491
1492Make sure your IOBYTE is set so that @q<RDR:> and @q<PUN:> correspond to the
1493I/O port that is connected to the host (this would normally be the case
1494unless you have done something special to change things).
1495
1496Load the program you entered in the first step with DDT, and use it to capture
1497the first hex file:
1498@Begin<Example,Free>
1499DDT FETCH.COM
1500-icpsker.hex ;Setup FCB for file CPSKER.HEX
1501-g100,179 ;Execute the program.
1502@End<Example>
1503Now there should be a file @q<CPSKER.HEX> on your connected disk.
1504
1505Return to the host, and tell it to display the second hex file (the
1506system-@|dependent module for your configuration). Again, do not type the
1507terminating carriage return.
1508
1509Return to your micro, and run the capture program again:
1510@Begin<Example,Free>
1511DDT FETCH.COM
1512-icpxovl.hex ;Setup FCB to create CPXOVL.HEX
1513-g100,179 ;Execute the program.
1514@End<Example>
1515Now 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
1517system.
1518@end<enumerate>
1519Merging the files:
1520@begin<enumerate>
1521For purposes of illustration, we will assume the system-@|dependent overlay is
1522called "cpxovl@q<.>hex". The two hex files may be combined with MLOAD or DDT.
1523If you already have a running Kermit, you can transfer @q<MLOAD.HEX> to your
1524system and create @q<MLOAD.COM> by running LOAD. If you're bootstrapping
1525Kermit, you could transfer @q<MLOAD.HEX> to your system the same way you got
1526the other two @q<.HEX> files, but it's probably simpler to use DDT to get
1527Kermit running, and get MLOAD later if you need it.
1528
1529Using MLOAD, the two pieces may be easily merged:
1530@begin<example>
1531A>@ux(mload kerm411=cpsker,cpxovl)
1532@i[(Some messages about program size, etc...)]
1533A>
1534@end<example>
1535
1536If you don't have MLOAD running, it's a bit more complex:
1537@begin<example>
1538A>@ux<ddt cpsker.hex>
1539NEXT PC
15403500 0100
1541-@ux<icpxovl.hex>
1542-@ux<r>
1543NEXT PC
1544xxxx 0000
1545-@ux<^C>
1546A>@ux<save @i(dd) kerm411.com>
1547@end<example>
1548The page count ("dd") used in the SAVE command is calculated from the last
1549address ("xxxx") given by DDT in response to the R command: drop the last two
1550digits and add 1 if they were not zero, then convert from hexadecimal (base 16)
1551to decimal (base 10): 684F becomes 69 hex, which is 105 decimal (5 times
155216 plus 9) -- but 6700 becomes 67 hex, or 103 decimal (consult an
1553introductory computing book if you don't understand number base conversion).
1554
1555If you are using the Z80MU CP/M and Z80 development toolkit on an IBM PC
1556or clone, then follow the same instructions as for a genuine CP/M system.
1557When 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
1559issue of Kermit?)
1560
1561
1562Note that CP/M hex files have checksums on each line. If there were any
1563transmission errors during the downloading process, MLOAD or DDT will notice a
1564bad checksum and will report an error (something like "Illegal Format"). If
1565you get any errors during loading, either fix the hex file locally with an
1566editor, or repeat the transfer.
1567
1568@End<Enumerate>
1569
1570You now should have a running version of Kermit-80, called @q<KERM411.COM>.
1571
1572Test your new Kermit by running it. If it gives you a prompt, it might be
1573OK. (don't delete your old one yet...). Instead of a prompt, you could get
1574one of two messages indicating that the configuration information is invalid:
1575@example<?Kermit has not been configured for a target system>
1576or
1577@example<?Consistency check on configuration failed>
1578Of course, neither of these messages should appear if you're building Kermit
1579from the distribution kit. The first message indicates that the overlay was
1580not found where the system-@|independent module expected to find it, probably
1581because the overlay address is incorrect; the second indicates that the version
1582of CPXLNK used in the system-@|dependent module is incompatible with the
1583system-@|independent module.
1584
1585Once you are satisfied that KERMIT40 works correctly, you should rename your
1586old @q<KERMIT.COM> to something else, like @q<OKERMIT.COM>, and rename
1587@q<KERMIT40.COM> to @q(KERMIT.COM).
1588
1589@subsection<Assembling Kermit-80 from the sources>
1590
1591Kermit-80 is built in two pieces from the following files:
1592@begin<description,spread 0>
1593@i(The system-independent files:)
1594
1595@q<@ @ CPSKER.ASM>@\header file
1596
1597@q<@ @ CPSDEF.ASM>@\definitions for both KERMIT and KERSYS
1598
1599@q<@ @ CPSMIT.ASM>@\initialization, main loop, miscellaneous commands
1600(BYE, EXIT, LOG, SET, SHOW, STATUS, and VERSION)
1601
1602@q<@ @ CPSCOM.ASM>@\second part of commands, status and set file
1603
1604@q<@ @ CPSPK1.ASM>@\part 1 of the KERMIT protocol handler
1605(SEND, RECEIVE, LOGOUT,and FINISH commands)
1606
1607@q<@ @ CPSPK2.ASM>@\part 2 of the KERMIT protocol handler
1608
1609@q<@ @ CPSREM.ASM>@\REMOTE routines (FINISH, BYE and LOGOUT in CPXPK*.ASM)
1610
1611@q<@ @ CPSSER.ASM>@\SERVER routines (for the future)
1612
1613@q<@ @ CPSTT.ASM>@\the transparent commands (TRANSMIT, CONNECT)
1614
1615@q<@ @ CPSCPM.ASM>@\CP/M commands (DIR, ERA, USER, TYPE, PRINT, COPY)
1616
1617@q<@ @ CPSWLD.ASM>@\the wildcard handler
1618
1619@q<@ @ CPSCMD.ASM>@\the command parser
1620
1621@q<@ @ CPSUTL.ASM>@\utility routines and data
1622
1623@q<@ @ CPSDAT.ASM>@\data space and the overlay definitions
1624
1625@q<@ @ CPXLNK.ASM>@\linkage area description
1626
1627@blankspace(1)
1628@i(The system-dependent files:)
1629
1630@q<@ @ CPXTYP.ASM>@\system selection
1631
1632@q<@ @ CPXLNK.ASM>@\system overlay specification and jump table
1633
1634@q<@ @ CPXCOM.ASM>@\common routines for all systems
1635
1636@q<@ @ CPXSWT.ASM>@\system selector or switcher
1637
1638@blankspace(1)
1639One of:
1640
1641@q<@ @ CPXSYS.ASM>@\family file for some system-specific code
1642
1643@q<@ @ CPXTOR.ASM>@\family file for Torch, Superbrain, PCI2651 etc
1644
1645@q<@ @ CPXNOR.ASM>@\family file for Northstar and Comart machines
1646
1647@q<@ @ CPXMRL.ASM>@\family file for British Telecom Merlin/Rair Black Box
1648
1649@q<@ @ CPXSB.ASM>@\family file for Micromint SB-180 systems
1650
1651@q<@ @ CPXCIF.ASM>@\family file for Cifer systems
1652
1653@q<@ @ CPXHEA.ASM>@\family file for Heath/Zenith systems
1654
1655@q<@ @ CPXAPP.ASM>@\family file for Apple II systems
1656
1657@q<@ @ CPXPCW.ASM>@\family file for Amstrad PCW 8256/8512 machines
1658
1659@q<@ @ CPXBBI.ASM>@\family file for BigBoard, Kaypro and Xerox 820 systems
1660
1661@q<@ @ CPXBEE.ASM>@\Microbee
1662
1663@q<@ @ CPXSYO.ASM>@\family file for Sanyo MBS-1100 systems
1664
1665@q<@ @ CPXTM4.ASM>@\family file for Tandy Model 4 with CP/M systems
1666
1667@q<@ @ CPXGNI.ASM>@\family file for Video Genie systems
1668
1669@q<@ @ CPXPRO.ASM>@\family file for Compupro systems
1670
1671@q<@ @ CPXZ80.ASM>@\family file for the Z80MU development system
1672
1673@blankspace(1)
1674and if you use a terminal,
1675
1676@q<@ @ CPXVDU.ASM>@\display codes for VDUs etc. Not always required
1677@end(description)
1678The system-@|independent module contains all of the system-@|independent files
1679except for @q(CPXLNK.ASM), which is assembled into the system-@|dependent
1680module to provide the structures needed to connect the two modules. As
1681distributed, the system-@|independent module is named @q(CPSKER.HEX). If you
1682have a copy of @q(CPSKER.HEX), you do not need to reassemble the
1683system-@|independent module to configure Kermit for your system.
1684
1685The 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),
1690if your system uses a terminal for the console. One copy of the
1691system-@|dependent module is supplied already assembled for each supported
1692system; 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
1694device) has been selected.
1695
1696After assembling the two pieces separately, they are combined with DDT or
1697MLOAD into a system-@|specific Kermit.
1698
1699If you want to rebuild the system-@|independent module, the only change you
1700may need to make is to select the assembler to be used, in @Q(CPSKER.ASM).
1701Define one of MAC80, M80, or LASM to TRUE to select it as the assembler;
1702the others should be defined FALSE.
1703
1704Assuming you have the Microsoft Macro Assembler package (M80/L80), you'll
1705need to do the following:
1706@begin<example>
1707A>@ux(m80 cpsker=cpsker.asm)
1708A>@ux(l80 /p:100,cpsker,cpsker/n/e)
1709@end<example>
1710This will produce @Q(CPSKER.COM).
1711
1712If you are using LASM instead, do this:
1713@example(A>@ux<lasm cpsker>)
1714LASM will generate @Q(CPSKER.HEX) and @Q(CPSKER.PRN). LASM allows options to
1715be specified in the same way as the standard assembler, ASM, so the command
1716@example[A>@ux(lasm cpsker.abz)]
1717will read the source files from drive A, send the @q(.HEX) file to drive B,
1718and suppress the listing file.
1719
1720If you are using the Z80MU development system on an IBM PC or clone, then
1721assemble your files using either LASM and MLOAD or M80 and L80, as if you
1722were using a genuine CP/M-80 system. Note that you will still have the
1723problem of transferring your assembled files to the target CP/M system.
1724
1725If you want to generate a system-@|dependent overlay for a particular system,
1726or want to change the terminal supported, you'll need to check three areas in
1727@Q(CPXTYP.ASM):
1728
1729First, the overlay start ADDRESS. The symbol "ovladr" is EQUated to the
1730address of "LNKFLG" in the system-@|independent module, as the starting address
1731of the overlay (7000H for version @value(-cpmversion)). You'll need to know
1732this value if you're building the overlay with M80/L80. You won't normally
1733need to change this value.
1734
1735Second, the assembler being used. Again, define one of MAC80, M80, and LASM
1736to 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
1738same assembler.
1739
1740Third, the system configuration. Locate your system in tables
1741@ref<-cpmsystems1> and @ref<-cpmsystems2>, then define the appropriate symbol
1742TRUE, and the rest FALSE. If the system comes with a builtin console terminal,
1743define all the terminal switches FALSE. If the system uses an external
1744terminal as the console, locate the terminal in table @ref<-cpmterms> and
1745define the appropriate symbol TRUE, and the remainder FALSE. If the terminal
1746is not listed in table @ref<-cpmterms>, use the CRT switch; in this case, VT52
1747emulation is not supported.
1748
1749In addition, there are a few general and system-@|specific symbols which may
1750be altered to fit your system:
1751@begin<description>
1752APSLOT@\For Apple with 6551 ACIA, defines the slot number of the serial card
1753
1754CPUSPD@\Processor speed in units of 100KHz (currently used only for bbII and
1755 kpII for timing loops)
1756
1757TAC@\For users connecting through ARPAnet TACs: set to TRUE if you wish the
1758default TACTRAP status to be ON. (This may be overridden with the SET TACTRAP
1759command). If you're not connecting through a TAC, set tac to FALSE and ignore
1760tacval.
1761
1762TACVAL@\For ARPANET TAC users: defines the default TAC intercept character
1763(may be overridden with the SET TACTRAP command).
1764@end<description>
1765
1766If 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
1768not modify @Q(CPSDEF.ASM) or @Q(CPXLNK.ASM); if you do, you'll have to change
1769the system-@|independent module also. Eventually, @Q(CPXSYS.ASM) will be split
1770into separate files, each of which will generate one or more related systems.
1771When this happens, you'll want to pick the one closest to your system to use as
1772a starting point.
1773
1774After editing @q<CPXTYP.ASM> as necessary, assemble and link the overlay as
1775follows:
1776@begin<itemize>
1777With M80 (where "xxxx" is the hex value of ovladr from @q<CPXLNK.ASM>):
1778@begin<example>
1779A>@ux<m80 cpxtyp=cpxtyp.asm>
1780A>@ux<l80 /p:xxxx,cpxtyp,cpxtyp/n/x/e>
1781@end<example>
1782
1783With LASM:
1784@begin<example>
1785A>@ux<lasm cpxtyp>
1786@end<example>
1787@end<itemize>
1788
1789With an IBM PC or clone using the Z80MU softwrae, follow the instructions
1790as if you were using a real CP/M system.
1791
1792The overlay (@q(CPXTYP.HEX)) may then be merged with the system-@|independent
1793module as described above (creating a runnable Kermit from the distribution
1794kit).
1795
1796If you are using the Z80MU
1797development system on a PC, and already have a running
1798Kermit-80 v3.9 or later, you can merge the two @q<.HEX> files into a @q<.COM>
1799file with LINK80 (TOPS 10/20), MLOAD (Z80MU), L80 (Z80MU), and
1800transfer the new @q<.COM> file to your micro with Kermit:
1801@begin<itemize>
1802Z80MU on a PC and MLOAD:
1803@begin<example>
1804@@@ux<MLOAD KERNEW=CPSKER,CPXTYP>
1805@end<example>
1806
1807Z80MU on a PC and C80:
1808@begin<example>
1809@@@ux<L80 /P:xxxx,CPXTYP,CPXTYP/N/X/E>
1810@end<example>
1811@end<itemize>
1812producing @Q(KERNEW.COM).
1813
1814@begin<table,leftmargin +0,use format>
1815@tabclear()@tabset(1.5in)
1816@bar()
1817@blankspace(1)
1818@u(Symbol)@\@ux<Terminal description>
1819crt@\Basic CRT, no cursor positioning
1820adm3a@\ADM3A Display or lookalike
1821adm22@\ADM22 Display or lookalike
1822am230@\Ampro 230
1823h1500@\Hazeltine 1500
1824smrtvd@\Netronics Smartvid-80
1825soroq@\Soroq IQ-120
1826tvi912@\TVI 912
1827tvi925@\TVI 925, Freedom 100
1828vt52@\VT 52 or VT52 emulator such as Heath H19, H29, etc.
1829vt100@\VT 100 or emulator (most ANSI terminals should work)
1830wyse@\Wyse 100
1831@caption<Terminals known to Kermit-80>
1832@tag<-cpmterms>
1833@bar()
1834@end<table>
1835
1836@section<Adding Support For A New System>
1837Kermit-80 is built from a common set of source files; the system-@|dependent
1838module makes heavy use of conditional assembly (this complication will be
1839removed in future releases). The system dependencies arise from attempts to
1840answer some questions:
1841@begin<enumerate>
1842@i<What kind of terminal is to be supported?>
1843@blankspace(1)
1844For many micros, the console is an integral part of the system, but
1845others can use an external terminal. In either case, the commands
1846to manipulate the screen (position the cursor, erase the screen, etc)
1847must be defined.
1848
1849@i<How is the serial line accessed?>
1850@blankspace(1)
1851For systems supporting the IOBYTE function, this is straightforward; the
1852symbol "IOBYT" is defined TRUE. If the serial line is accessed with IN and OUT
1853instructions, it may be possible to use the simple I/O routines provided. In
1854this case, the symbol "INOUT" is defined TRUE, the MNPORT and MNPRTS are
1855defined to be the data and control addresses, respectively, and bit masks for
1856testing for "input data available" and "output buffer empty" must be defined.
1857If the interface is strange, leave IOBYT and INOUT set to FALSE, and provide
1858the I/O routines.
1859
1860@i<What initialization is necessary?>
1861@blankspace(1)
1862You may wish to set the baud rate or configure the serial line at
1863startup. Examples for a number of devices are present.
1864
1865@i<What special features are to be supported?>
1866@blankspace(1)
1867You may want to provide the capability to select one of several serial lines
1868with the SET PORT command, or to change the speed of the serial line with the
1869SET SPEED command. To do this, you'll need to build a command table, using
1870the systems already supported as examples. The ability to send a BREAK signal
1871is desirable. Again, examples for several different interfaces (ACIA, SIO,
1872etc) are present.
1873
1874@i<Do you want to design an external terminal type?>
1875@blankspace(1)
1876There is a jump entry in the overlay file to allow users to add their
1877own termainl emulator. If you write the code for such an emulator,
1878you must load this jump address with the address of your emulator, and
1879SET TERMINAL EXTERNAL from within Kermit. All characters will be passed
1880to this routine during connect mode.
1881@end<enumerate>
1882
1883@section<Notes on New Features in Kermit-80 Version 4>
1884
1885@begin<itemize>
1886@i(Debugging aids:)
1887SET DEBUG ON will add two fields to the SEND/RECEIVE display, labelled "Spack"
1888and "Rpack". These display the last packet sent and received. Of course, this
1889slows down the transfer, especially if the console is an external terminal.
1890SET DEBUG OFF removes these fields. The VERSION command displays the name,
1891edit number, and edit date of several of the modules that make up Kermit.
1892
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
1896terminal concentrators, modems, port contention units, network PADs, etc) use a
1897printing character (like "@@") as an intercept character, to allow commands to
1898be issued to the TAC, or modem, etc. In order to send this character to the
1899host, it must be typed twice. The command "SET TAC CHARACTER" to Kermit
1900enables the "TACtrap" and asks the user to specify the TAC intercept character.
1901This character will be automatically doubled when it appears in Kermit protocol
1902messages (sent by the SEND or RECEIVE commands) or when it appears in a file
1903being sent with the TRANSMIT command. It is not automatically doubled when
1904typed by the user in CONNECT mode. "SET TAC ON" enables the TACtrap but does
1905not change the TAC intercept character, which is initially "@@". "SET TAC OFF"
1906disables the TACtrap.
1907
1908@i(File buffering:)
1909Previous versions of Kermit-80 buffered only one sector (128 bytes) at a time
1910during file transfer operations. This version buffers 16Kbytes at a time,
1911reducing the number of times the floppy drive must be spun up and down, and
1912increasing the effective throughput of the link. If the disk transfer rate is
1913too slow, however, the remote Kermit may time out and retransmit packets. This
1914will show up on the screen in the "Retries:" field; if this occurs after disk
1915activity, you may want to increase the timeout value on the remote Kermit,
1916SET BUFFER <new value> while in Kermit,or
1917reassemble Kermit with a smaller value for MAXSEC (in @Q(CPSDEF.ASM))
1918This buffer is also used by the TRANSMIT command; the log file
1919enabled by the LOG command is still written a sector at a time.
1920@end<itemize>
1921
1922@Comment<for Assembling Kermit-80)
1923
1924@section<Specification for Kermit-80 System Dependent Modules>
1925
1926This section is intended for people wanting to implement their own
1927versions of Kermit-80 for computers not already defined.
1928
1929The system independent code communicates to routines for a specific
1930system through a set of tables. These tables are defined in
1931CPXLNK.ASM, and should not be modified between revisions of Kermit. If
1932an entry is added or deleted, then the whole of Kermit-80
1933needs reassembling. Make sure that the changes to CPXLNK.ASM are
1934duplicated in CPSUTL.ASM, which has the system independent
1935equivalent of CPXLNK.ASM.
1936
1937The following entries/definitions apply to revision 4.09. There
1938have been three additional entries since revision 4.05.
1939
1940The table is split into three sectors; The first section defines
1941two byte "words" giving 16 bits of interface data; The second set is a
1942set of jumps to various functions, and finally the third set
1943a set of pure data bytes.
1944
1945
1946@subsection(Interface Data.)
1947
1948@begin<description, spread 0, indent -8>
1949
1950@ux<LNKFLG>@\Must be first entry in overlay at overlay address. Is a two
1951byte address giving the size of the linkage table. This is used to
1952check for consistency of overlay's
1953@blankspace(1)
1954
1955@ux<ENTSIZE>@\Length of entry table, also used for consistency checking after
1956the overlay. Currently 6
1957@blankspace(1)
1958
1959@ux<SYSEDT>@\The address of a dollar-terminated string giving the overlay
1960revision level and date. Points to a string like:
1961CPXSYS.ASM(33) 4-JUN-1986$
1962@blankspace(1)
1963
1964@ux<FAMILY>@\The address of a dollar-terminated string giving the Family overlay
1965revision level and date. If the system is in CPXSYS.ASM rather than a
1966particular Family overlay, it is simply a pointer to $
1967@end<description>
1968@blankspace(1)
1969
1970@subsection(Jump Table.)
1971This is split into three main sectors-
1972@blankspace(1)
1973
1974@begin(enumerate)
1975Input/Output routines
1976
1977Screen formatting routines
1978
1979other system dependent routines
1980@end<enumerate>
1981
1982
1983@begin<description, spread 0, indent -14>
1984@blankspace(1)
1985@ux<SELMDM>
1986
1987@i<Parameters>@\None
1988
1989@i<Returns>@\None
1990
1991@i<Description>@\selects the modem port. Most systems do nothing and
1992simply return. HL,DE and BC registers preserved.
1993
1994@blankspace(1)
1995@ux<OUTMDM>
1996
1997@i<Parameters>@\None
1998
1999@i<Returns>@\None
2000
2001@i<Description>@\Output the character in E register to the communications
2002line. BC,DE,HL registers preserved.
2003
2004@blankspace(1)
2005@ux<INPMDM>
2006
2007@i<Parameters>@\None
2008
2009@i<Returns>@\Accumulator either 0 or character from comms line if available
2010
2011@i<Description>@\Check modem for character and if so, return it in A.
2012HL,DE,BC registers preserved, flags
2013and accumulator lost.
2014
2015@blankspace(1)
2016@ux<FLSMDM>
2017
2018@i<Parameters>@\None
2019
2020@i<Returns>@\None
2021
2022@i<Description>@\Clear any pending characters in the input buffer from the
2023modem. No registers are preserved.
2024
2025
2026@blankspace(1)
2027@ux<SELCON>
2028
2029@i<Parameters>@\None
2030
2031@i<Returns>@\None
2032
2033@i<Description>@\Select the console. This is a null subroutine for most
2034systems, but for IOBYTE systems selects the console.
2035
2036@blankspace(1)
2037@ux<OUTCON>
2038
2039@i<Parameters>@\Character in E
2040
2041@i<Returns>@\None
2042
2043@i<Description>@\Send the character in E to the console. Any quirks of
2044system responding in an odd manner should be handled. No
2045registers preserved.
2046
2047
2048@blankspace(1)
2049@ux<INPCON>
2050
2051@i<Parameters>@\None
2052
2053@i<Returns>@\Zero or character in A.
2054
2055@i<Description>@\Get a character from the console or return a null if
2056no character to be read. No registers are preserved.
2057
2058
2059@blankspace(1)
2060@ux<OUTLPT>
2061
2062@i<Parameters>@\Character in E
2063
2064@i<Returns>@\None
2065
2066@i<Description>@\Send the character in E to the printer. The console is
2067selected. Only DE registers are preserved
2068
2069
2070@blankspace(1)
2071@ux<LPTSTAT>
2072
2073@i<Parameters>@\None
2074
2075@i<Returns>@\00H or 0FFH in A register
2076
2077@i<Description>@\Test the printer to see if it is ready to receive a
2078character to be printed. If a 00H is returned then the printer is
2079ready to receive a character.
2080
2081
2082@blankspace(1)
2083@ux<EXTTER>
2084
2085@i<Parameters>@\Character to be sent to the user supplied terminal emulator
2086in the E register
2087
2088@i<Returns>@\None
2089
2090@i<Description>@\If the user has supplied a terminal emulator in the overlay
2091code, EXTTER will be a JMP <non zero address>. If SET TERMINAL EXTERNAL
2092has been set, all caharcters will be passed verbatim to this terminal
2093emulator. If there is no external emulator, this code will never be called.
2094The user should reset terminal conditions on initialisation of both
2095 the system and before CONNECT. All registers should be preserved.
2096
2097
2098@blankspace(1)
2099@ux<XBDOS>
2100
2101@i<Parameters>@\Any required for calling BDOS
2102
2103@i<Returns>@\Any expected from the called BDOS routine
2104
2105@i<Description>@\This is an alternative entry to BDOS. This entry will also
2106check the printer status etc. For full details see the code for the
2107BDOS trap in CPSUTL.ASM.
2108@blankspace(1)
21092b)
2110@blankspace(1)
2111@ux<CLRLIN>
2112
2113@i<Parameters>@\None
2114
2115@i<Returns>@\None
2116
2117@i<Description>@\Clear the current line on the terminal
2118
2119
2120
2121@blankspace(1)
2122@ux<CLRSPC>
2123
2124@i<Parameters>@\None
2125
2126@i<Returns>@\None
2127
2128@i<Description>@\Erase the current position (after a backspace)
2129
2130
2131
2132@blankspace(1)
2133@ux<DELCHR>
2134
2135@i<Parameters>@\None
2136
2137@i<Returns>@\None
2138
2139@i<Description>@\Make delete (7FH) look like a backspace. Some systems
2140do a backspace, space, backspace automatically others have to simulate it
2141
2142@blankspace(1)
2143@ux<CLRTOP>
2144
2145@i<Parameters>@\None
2146
2147@i<Returns>@\None
2148
2149@i<Description>@\Clear the screen and place the cursor at the top LH corner
2150
2151
2152
2153@blankspace(1)
2154@ux<SCREND>
2155
2156@i<Parameters>@\None
2157
2158@i<Returns>@\None
2159
2160@i<Description>@\Place the cursor on the line for the Kermit-80 prompt
2161after a file transfer. (Usually line 13)
2162
2163
2164
2165@blankspace(1)
2166@ux<SCRERR>
2167
2168@i<Parameters>@\None
2169
2170@i<Returns>@\None
2171
2172@i<Description>@\Move cursor to the error message field on the
2173file transfer format screen
2174
2175
2176
2177@blankspace(1)
2178@ux<SCRFLN>
2179
2180@i<Parameters>@\None
2181
2182@i<Returns>@\None
2183
2184@i<Description>@\Move the cursor to the filename field
2185
2186
2187
2188@blankspace(1)
2189@ux<SCRNP>
2190
2191@i<Parameters>@\None
2192
2193@i<Returns>@\None
2194
2195@i<Description>@\Move the cursor to the packet count field
2196
2197
2198
2199@blankspace(1)
2200@ux<SCRNRT>
2201
2202@i<Parameters>@\None
2203
2204@i<Returns>@\None
2205
2206@i<Description>@\Move cursor to the retry count field
2207
2208
2209
2210@blankspace(1)
2211@ux<SCRST>
2212
2213@i<Parameters>@\None
2214
2215@i<Returns>@\None
2216
2217@i<Description>@\Move cursor to the status field
2218
2219
2220
2221@blankspace(1)
2222@ux<RPPOS>
2223
2224@i<Parameters>@\None
2225
2226@i<Returns>@\None
2227
2228@i<Description>@\Move to the receive packet field (debugging use)
2229
2230
2231
2232@blankspace(1)
2233@ux<SPPOS>
2234
2235@i<Parameters>@\None
2236
2237@i<Returns>@\None
2238
2239@i<Description>@\Move to the send packet field (for debugging use)
2240@blankspace(1)
22412c)
2242@blankspace(1)
2243@ux<SYSINIT>
2244
2245@i<Parameters>@\None
2246
2247@i<Returns>@\None
2248
2249@i<Description>@\Initialize the system specific items. No registers
2250are preserved. Any initialization is done once only when Kermit-80
2251is first loaded.
2252
2253
2254
2255@blankspace(1)
2256@ux<SYSEXIT>
2257
2258@i<Parameters>@\None
2259
2260@i<Returns>@\None
2261
2262@i<Description>@\Program termination. De-initialize anything
2263in preparation for a return to CP/M
2264
2265
2266
2267@blankspace(1)
2268@ux<SYSCON>
2269
2270@i<Parameters>@\None
2271
2272@i<Returns>@\None
2273
2274@i<Description>@\Initialize anything before entering the connect state.
2275
2276
2277
2278@blankspace(1)
2279@ux<SYSCLS>
2280
2281@i<Parameters>@\None
2282
2283@i<Returns>@\None
2284
2285@i<Description>@\System dependent close routine when exiting connect state
2286
2287
2288
2289@blankspace(1)
2290@ux<SYSINH>
2291
2292@i<Parameters>@\None
2293
2294@i<Returns>@\None
2295
2296@i<Description>@\Help routine to test for any extensions to the escape menu
2297during the connect state. If a system has any special feature it
2298can use during connect mode, then it can be tested as
2299<escape-character>xxx. This entry is a string for printing
2300to the console for an <escape-character>? Often used for
2301generating breaks or controlling a modem.
2302
2303
2304
2305@blankspace(1)
2306@ux<SYSINT>
2307
2308@i<Parameters>@\None
2309
2310@i<Returns>@\None
2311
2312@i<Description>@\This is a test-and-jump on receipt of an escape
2313sequence not understood by Kermit-80. If the character in A is
2314not recognized by your version of Kermit=80, do a rskip
2315
2316
2317
2318@blankspace(1)
2319@ux<SYSFLT>
2320
2321@i<Parameters>@\Character in E
2322
2323@i<Returns>@\Character in E. Either a 00H or anything else in A
2324
2325@i<Description>@\Test the character in E. If it may not be printed to
2326the console, set A to zero. All other registers preserved.
2327
2328@\NB <XON>,<XOFF>,<DEL>,<NULL> are always rejected.
2329
2330
2331@blankspace(1)
2332@ux<SYSBYE>
2333
2334@i<Parameters>@\None
2335
2336@i<Returns>@\None
2337
2338@i<Description>@\System dependent processing for the BYE command. (eg hang
2339up the phone)
2340
2341
2342
2343@blankspace(1)
2344@ux<SYSSPD>
2345
2346@i<Parameters>@\Value from table in DE
2347
2348@i<Returns>@\None
2349
2350@i<Description>@\The system dependent code for baud rate change. DE
2351contains the two byte value from the baud rate table. This value is
2352also stored in "SPEED"
2353
2354
2355
2356@blankspace(1)
2357@ux<SYSPRT>
2358
2359@i<Parameters>@\Value in DE
2360
2361@i<Returns>@\None
2362
2363@i<Description>@\The system dependent code for setting the port.
2364The parameters are passed in DE, which are obtained from the port tables
2365
2366
2367
2368@blankspace(1)
2369@ux<SYSSCR>
2370
2371@i<Parameters>@\String pointer in DE
2372
2373@i<Returns>@\None
2374
2375@i<Description>@\Setup the screen display for file transfer. The Kermit
2376version string is pointed to by DE. If the terminal is not capable of
2377cursor addressing (eg dumb glass TTY) then only the screen is cleared
2378and the version string is printed.
2379
2380
2381
2382@blankspace(1)
2383@ux<CSRPOS>
2384
2385@i<Parameters>@\Row number in B, column number in C
2386
2387@i<Returns>@\None
2388
2389@i<Description>@\Move the cursor to row B, column C where B=1,C=1 is top
2390LH corner of screen. The routine should first end a "cursor
2391position" leading string (up to four characters) then use the
2392parameters given to complete the versions cursor position function
2393
2394
2395
2396@blankspace(1)
2397@ux<SYSSPC>
2398
2399@i<Parameters>@\None
2400
2401@i<Returns>@\K bytes free in HL
2402
2403@i<Description>@\Get the amount of free disk space on the selected disk
2404drive. This could be in the system independent code. Automatically
2405detects CP/M V2.2 or V3.0. No registers saved.
2406
2407
2408
2409@blankspace(1)
2410@ux<MOVER>
2411
2412@i<Parameters>@\Source Pointer in HL
2413
2414@\Destination Pointer in DE
2415
2416@\Byte count in BC
2417
2418@i<Returns>@\None
2419
2420@i<Description>@\Move (BC) bytes from (HL) to (DE) Z80 based systems
2421do an LDIR, while 8080 systems do it as a loop. All registers destroyed
2422
2423@blankspace(1)
2424@ux<PRTSTR>
2425
2426@i<Parameters>@\$ terminated string pointed to by DE
2427
2428@i<Returns>@\None
2429
2430@i<Description>@\Print the string onto the console.
2431@blankspace(1)
24323)
2433@blankspace(1)
2434@tabclear()
2435@tabset(2 inches, 1.0 inches, 1.0 inches)
2436
2437@blankspace(1)
2438@ux<PTTAB>@\WORD@\Points to VT52 equivalent escape sequences.
2439
2440@blankspace(1)
2441@ux<SPDTAB>@\WORD@\Address of baud-rate command table, or 0 if table does
2442not exist
2443
2444@blankspace(1)
2445@ux<SPDHLP>@\WORD@\Address of baud-rate help table, or 0 if SET SPEED
2446is not supported.
2447
2448@blankspace(1)
2449@ux<PRTTAB>@\WORD@\Address of port command table or 0 if SET PORT is not supported.
2450
2451@blankspace(1)
2452@ux<PRTHLP>@\WORD@\Address of port help table or 0 if SET PORT is not supported
2453
2454@blankspace(1)
2455@ux<TIMOUT>@\BYTE@\FUZZY-TIMER. Set to value suitable to your
2456system (depends largely on CPU speed)
2457
2458@blankspace(1)
2459@ux<VTFLG>@\BYTE@\VT52 emulation flag. Set to 0 if terminal
2460emulates a VT52, 01 if emulation is required, or 0FFH if emulations not
2461possible (eg for "CRT")
2462
2463@blankspace(1)
2464@ux<ESCCHR>@\BYTE@\default escape character-usually control-] but
2465sometimes control-\
2466
2467@blankspace(1)
2468@ux<SPEED>@\WORD@\Storage space for baud-rate. Set to 0FFFFH as baud
2469rates are initially unknown. Note that the STATUS routine only looks at the
2470first (least significant) byte.
2471
2472@blankspace(1)
2473@ux<PORT>@\WORD@\Storage space for port. Set to 0FFFFH as ports may
2474not be implemented, and is initially unknown
2475
2476@blankspace(1)
2477@ux<PRNFLG>@\BYTE@\Printer copy flag-if O no copy. Anything else =>
2478copy to printer
2479
2480@blankspace(1)
2481@ux<DBGFLG>@\BYTE@\Debugging flag. If O then no debugging to be done.
2482(ie writing of debugging info during a file transfer)
2483
2484@blankspace(1)
2485@ux<ECOFLG>@\BYTE@\Local ECHO flag (default is off)
2486
2487@blankspace(1)
2488@ux<FLWFLG>@\BYTE@\File warning flag. If set to 1 will not
2489overwrite files already existing on disk with some-named files
2490being transferred
2491
2492@blankspace(1)
2493@ux<IBMFLG>@\BYTE@\IBM system is the host-assume IBM file transfers etc
2494
2495@blankspace(1)
2496@ux<CPMFLG>@\BYTE@\Flag indicating type of CP/M files to be transferred.
2497Default setting - DEFAULT
2498
2499@blankspace(1)
2500@ux<PARITY>@\BYTE@\Type of parity in use
2501
2502@\ 0 = Even parity
2503
2504@\ 3 = Mark parity
2505
2506@\ 6 = No parity (8th bit is data)
2507
2508@\ 9 = Odd parity
2509
2510@\12 = Space parity
2511
2512@blankspace(1)
2513@ux<SPSIZ>@\BYTE@\Size of send packet
2514
2515@blankspace(1)
2516@ux<RPSIZ>@\BYTE@\Size of receive packet
2517
2518@blankspace(1)
2519@ux<STIME>@\BYTE@\Send timer (time-out)
2520
2521@blankspace(1)
2522@ux<RTIME>@\BYTE@\Receive timer (time-out)
2523
2524@blankspace(1)
2525@ux<SPAD>@\BYTE@\Send Padding (default=0)
2526
2527@blankspace(1)
2528@ux<RPAD>@\BYTE@\Receive Padding (default=0)
2529
2530@blankspace(1)
2531@ux<SPADCH>@\BYTE@\Send Padding character (default=NULL)
2532
2533@blankspace(1)
2534@ux<RPADCH>@\BYTE@\Receive Padding character (default=NULC)
2535
2536@blankspace(1)
2537@ux<SEOL>@\BYTE@\Send EOL character (default=CR)
2538
2539@blankspace(1)
2540@ux<REOL>@\BYTE@\Receive EOL character (default=CR)
2541
2542@blankspace(1)
2543@ux<SQUOTE>@\BYTE@\Send quote character (default=#)
2544
2545@blankspace(1)
2546@ux<RQUOTE>@\BYTE@\Receive quote character (default=#)
2547
2548@blankspace(1)
2549@ux<CHKTYP>@\BYTE@\Ascii value of checktype
2550
2551@\31H="1"=checktype1 (6bits)
2552
2553@\32H="2"=checktype2 (12bits)
2554
2555@\33H="3"=CCITT checksum (CRC)
2556
2557@\Default is 31H("1")
2558
2559@blankspace(1)
2560@ux<TACFLG>@\BYTE@\If set to on (non zero) send the TACCHR twice. This is
2561for ARPA TAC users, where the TAC swallows one "wakeup" character. If
2562sent twice the TAC will pas one on and go back to normal mode.
2563
2564@blankspace(1)
2565@ux<TACCHR>@\BYTE@\Desired TAC character. It is ignored if TAC trapping
2566is turned off. Value to send twice if TAC interception is set on.
2567Default=0, but set to commercial AT if the conditional assembly flag TAC
2568is set true
2569
2570@blankspace(1)
2571@ux<BUFADR>@\WORD@\Address of Multi-Sector buffering for I/O
2572
2573@blankspace(1)
2574@ux<BUFSEC>@\BYTE@\The number of bytes the big buffers can hold.
2575Default is 1. (0=256 sectors).
2576
2577@blankspace(1)
2578@ux<FFUSSY>@\BYTE@\Indicates if funny characters may be used in CP/M
2579file names (eg @q{<>.,;?#[]}) If zero, allow anything. Default is nonzero.
2580
2581@blankspace(1)
2582@ux<BMAX>
2583@\SPACE:(2bytes) Highest block number on selected disk drive
2584
2585@blankspace(1)
2586@ux<BMASK>@\SPACE:(1byte) (Records/block)-1
2587
2588@blankspace(1)
2589@ux<BSHIFTF>@\SPACE:(1byte) Number of shifts to multiply by rec.block
2590
2591@blankspace(1)
2592@ux<NNAMS>@\SPACE:(1byte) Counter for file-names per line
2593
2594@end<description>
2595
2596
2597
2598@section<Future Work>
2599
2600Work that needs to be done in future releases includes:
2601@begin<itemize>
2602Merge in support for additional CP/M-80 systems, particularly those for
2603which support was recently added to the monolithic v3.x source.
2604
2605Break up @q<CPXSYS> into discrete source files, one for each system.
2606These source files should serve as simple models for adding support for
2607new systems to Kermit-80 -- only the very basic screen definitions, flags,
2608i/o primitives, initializations, and so forth should appear in each
2609system-@|dependent file.
2610
2611Addition of missing features -- compression of repeated characters during
2612packet transmission, transmission of file attributes (particularly size, so
2613that "percent done" can be displayed for both incoming and outbound files),
2614command macros, more advanced login scripts, remote operation and server mode,
2615etc etc. Any offers??
2616@end<itemize>