]> cloudbase.mooo.com Git - kermit-80.git/blob - cpkerm.mss
Bugfix in outmdm (output buffer flush)
[kermit-80.git] / cpkerm.mss
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="********@*
7 This document is formatted as an ordinary, plain text ASCII disk file.
8 Typeset copies are available in the Kermit User Guide from Columbia
9 University. Changes should be made to CPKERM.MSS.@*********")
10
11 @Begin<Description,Leftmargin +12,Indent -12,spread 1>
12 @i(Program:)@\Mike Freeman, Bonneville Power Administration, Vancouver, WA,
13 USA, with contributions from many others.
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
22 contributions 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)
30 Local operation:@\Yes
31 Remote operation:@\Partial, Auto-receive only
32 Login scipts:@\Yes, limited
33 Transfer text files:@\Yes
34 Transfer binary files:@\Yes
35 Wildcard send:@\Yes
36 File transfer interruption:@\Yes
37 Filename collision avoidance:@\Yes
38 Can time out:@\Yes
39 8th-bit prefixing:@\Yes
40 Repeat count prefixing:@\No
41 Alternate block checks:@\Yes
42 Terminal emulation:@\Yes, VT52 and others
43 Communication settings:@\Yes
44 Support for dial-out modems:@\No
45 Transmit BREAK:@\Yes; most versions
46 IBM communication:@\Yes
47 Transaction logging:@\No
48 Debug logging:@\No
49 Session logging:@\Yes
50 Raw file transmit:@\Yes
51 Act as server:@\No
52 Talk to server:@\Yes
53 Advanced commands for servers:@\Yes
54 Command/init files:@\Yes
55 Command macros:@\No
56 Local file management:@\Yes
57 Handle file attributes:@\No
58 Long packets:@\No
59 International Character Sets:@\No
60 Sliding Windows:@\No
61 Printer control:@\Yes, limited
62 @end<format>
63
64 @Section<Credits>
65
66 CP/M Kermit is the first of all the Kermit programs. It was originally
67 written by Bill Catchings of Columbia University in 1981. Over the years,
68 contributions have been added by many people, including
69 Charles Carvalho (ACC),
70 Bernie Eiben (DEC), Nick Bush (Stevens Institute of Technology),
71 John Bray (University of Tennessee), Bruce Tanner (Cerritos College),
72 Greg Small (University of California at Berkeley),
73 Kimmo Laaksonen (Helskini University of Technology),
74 Brian Robertson (Aberdeen University), A.J. Cole (Leeds University),
75 John Shearwood (Birmingham University),
76 Tony Addyman (Salford University), Godfrey Nix and Martin Carter
77 (Nottingham University), Ian Young (Edinburgh University), Chris Miles
78 (Manchester University), Richard Russell, Dave Roberts,
79 and many, many others.
80
81 Version 4.11 is the work of Mike Freeman of the Bonneville Power
82 Administration in Vancouver, WA, USA, with assistance from Russell Lang of
83 Monash University in Australia, Jay S Rouman of Mt Pleasant MI, and others.
84
85 @section<What's New>
86
87 Features added since version 4.09 include:
88 @begin<itemize>
89 SET COLLISION {BACKUP/DISCARD/OVERWRITE/RENAME}
90
91 SET INCOMPLETE-FILES {DISCARD/KEEP}
92
93 Many REMOTE commands, including some REMOTE SET commands
94
95 RENAME command to rename CP/M files from within Kermit-80
96
97 SET RECEIVE/SEND PACKET-LENGTH nn (nn <= 94)
98
99 SET AUTORECEIVE ON now implies that Kermit-80 ALWAYS tries to
100 receive more files when a RECEIVE transaction has completed. The
101 user can cancel with ^C.
102
103 QUIT is now a synonym for EXIT.
104
105 STAY is now a synonym for SET NO-EXIT.
106
107 CONNECT, RECEIVE and SEND may be abbreviated to C, R and S,
108 respectively.
109
110 Cancellation of TAKE, TYPE, and PRINT commands from the keyboard.
111
112 Many bug fixes.
113
114 Kermit-80 Version 4.11 now supports the Microbee family of
115 computers (56K, 64K, 128K and 256K) manufactured by
116 Microbee Systems, Ltd, of Australia.
117
118 Kermit-80 now supports the Ampro Little Board system.
119 @end<itemize>
120
121 @section<Overview of Kermit Operation>
122
123 Use the SET command to establish necessary communication parameters like
124 SPEED and PARITY. Use the CONNECT to establish a terminal connection to
125 the remote computer. If you are dialing out with a modem, type the necessary
126 dialing commands to the modem first. The dialing process can be automated
127 to some extent using a TAKE command file containing INPUT, OUTPUT, and PAUSE
128 commands. Then log in to the remote computer or service and conduct a session.
129
130 To transfer a text file, start the Kermit program on the remote computer and
131 tell it to SEND the desired file (if uploading) or to RECEIVE (if
132 downloading). "Escape back" to CP/M Kermit, usually by typing Ctrl-] (hold
133 down the Control key and press the right bracket key) and then type the letter
134 C. At the CP/M Kermit prompt type RECEIVE (if you gave a SEND command to the
135 remote Kermit) or SEND @i<filename> (if you gave a receive command to the
136 remote Kermit).
137
138 To transfer a binary file, give the command SET FILE TYPE BINARY to the remote
139 Kermit and SET FILE-MODE BINARY to CP/M Kermit before issuing any SEND or
140 RECEIVE commands.
141
142 Multiple files of the same type (text or binary) can be transferred in a
143 single operation using "wildcard notation" (including special characters like
144 asterisk in the filename).
145
146 When file transfer is complete, CONNECT back to the remote computer,
147 use the EXIT command to exit from the remote Kermit program, finish your work
148 on the remote computer, log out from it, escape back to CP/M Kermit again,
149 and EXIT from CP/M Kermit.
150
151 The remote Kermit may also be put into "server mode" to simplify these
152 operations. Give the SERVER command to the remote Kermit, escape back to CP/M
153 Kermit, and then issue SEND commands to send files (upload), GET @i<filename>
154 commands to receive (download) files, REMOTE commands to request various other
155 services (like directory listings) from the remote Kermit. When you are done,
156 give a BYE command to terminate your remote session, or a FINISH command to
157 tell the remote Kermit to return to its prompt so you can CONNECT back and
158 conduct further business.
159
160 That's all there is to it.
161
162 @Section<Summary of CP/M>
163
164 There are essentially two versions of CP/M - Versions 2.2
165 and 3.0 (sometimes also called CP/M PLUS.)
166
167 CP/M-80 Version 2@q<.>2 is run in
168 a single 64 Kbyte "page", usually the largest amount of memory on
169 Z80 or 8080 systems. The BIOS (Basic input/output system),
170 BDOS (Basic Disk Operating System) and CCP (Command console processor)
171 all share memory with any transient program the user may wish to run.
172 Some basic commands are
173 available through the CCP, like DIR, ERA etc,while others are loaded
174 from disk into the transient program area and run as a program,
175 like PIP or STAT.
176
177 CP/M Version 3@q<.>0 (or CP/M PLUS) effectively removes the requirement
178 of having the CCP and BDOS along with a chunk of the BIOS code being
179 resident in the single 64k byte page of memory. This allows even more
180 space for programs in the TPA, but still a little less than the maximum
181 of 64k. It is substantially different from CP/M version 2@q<.>2, with
182 lots of added features. Kermit-80 uses very few additional version
183 3@q<.>0 features, and only where absolutely necessary.
184
185 CP/M file specifications are of
186 the form @q(DEV:XXXXXXXX.YYY), where
187 @begin<description>
188 @q(DEV:)@\is a @i<device name>,
189 normally the A:@ or B:@ floppy. If omitted, the device name defaults
190 to your connected diskette.
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
197 special characters, including dash, dollar sign, and underscore, but
198 no imbedded spaces. Upper and lower case letters are equivalent.
199
200 "Wildcard" file-@|group specifications are permitted in file names
201 and file types (but not device names) within certain contexts; a "@q(*)"
202 matches a whole field, a "@q(?)" matches a single character, including
203 space. Examples: "@q(*.F??)" specifies all files whose @i<types> start
204 with F and are 1, 2, or 3 characters long; "@q(F?.*)" specifies all
205 files whose names start with F and are no more than two characters
206 long (before the trailing spaces).
207
208 The five CP/M commands are:
209 @Begin<Description>
210 DIR @i<file>@\Lists the the names of the specified files. The
211 default file specification is "*.*". Example: @w<"@q(DIR B:*.FOR)">.
212
213 ERA @i<file>@\Erases (deletes) the specified file(s); wildcards allowed.
214
215 REN @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
219 SAVE@\Saves the specified number of memory blocks into a file.
220 (Not on CP/M Plus systems)
221
222 TYPE @i<file>@\Types the specified file on the screen, e.g.
223 @w<"@q(TYPE FOO.TXT)">.
224 @End<Description>
225 The most important programs are:
226 @Begin<Description>
227 STAT@\Gives statistics on disk usage; sets and displays IOBYTE.
228 (Not on CP/M Plus systems)
229
230 PIP@\@u<P>eripheral @u<I>nterchange @u<P>rogram. Copies files. In
231 response to the "@q(*)" prompt, give a command of the form
232 @example<disk:outfile=disk:infile>
233 Wildcards ("@q(*)" for a whole field or "@q(?)" for a letter) can be used.
234 Examples: "@q(A:=B:*.*)" to copy a whole disk, "@q(A:=B:*.FOR)" to copy all
235 the Fortran programs from disk B to disk A. If the disk specification
236 is omitted, your "connected" disk is assumed. Command line arguments
237 are also accepted, e.g. "@q(PIP A:=B:*.*)".
238
239 @End<Description>
240
241 There are equivalent commands for CP/M Version 3.0, but are not loaded into
242 memory in the same way as for CP/M Version 2.2.
243 For further information on CP/M, consult your microcomputer manual or
244 a CP/M handbook.
245
246 @Section<Kermit-80 Description>
247
248 Since Kermit-80 runs on a standalone micro, it is always in control of the
249 screen -- it is always in "@i<local>@index<Local> mode". It includes a
250 terminal emulator for establishing a connection to a remote computer or
251 service, and during file transfer, it keeps the screen updated with the
252 file name and the packet number, whether sending or receiving.
253
254 @index<Timeout> Kermit-80 is capable of an imprecise or "fuzzy" timeout on an
255 input request, and can break deadlocks automatically. In most cases, this is
256 not important, because the Kermit program on the other side is most likely
257 able to handle the timeouts. The timeouts done by Kermit-80 are fuzzy because
258 they depend on the speed of the processor and other factors that can vary from
259 system to system.
260
261 If, despite the timeout capability, the transmission appears to be stuck (and
262 you can tell that this has happened if the screen fails to change for a while)
263 you can type carriage return to have the micro do what it would have done on a
264 @Index[Timeout] timeout, namely NAK@Index[NAK] the expected packet to
265 cause theforeign host to send it again (or, if the micro is sending, to
266 retransmit the last packet). Micro/@|micro or micro/@|IBM-@|mainframe
267 transfers could require this kind of manual intervention.
268
269 File transfers may be interrupted in several ways.
270 @begin<description>
271 @Index[Control-C]
272 Control-C@\This will return you to Kermit-80 command level immediately, so that
273 you can connect back to the remote system, or take any other desired action.
274
275 @Index[Control-X]
276 Control-X@\When sending a file, this will terminate the sending of the current
277 file with a signal to the KERMIT on the other side to discard what it got so
278 far. If there are more files to be sent, KERMIT-80 will go on to the next one.
279 When receiving a file, KERMIT-80 will send a signal to the remote KERMIT to
280 stop sending this file. If the remote KERMIT understands this signal (not all
281 implementations of KERMIT do), it will comply, otherwise the file will keep
282 coming. In any case, the remote KERMIT will go on to the next file in the
283 group, if any.
284
285 @Index[Control-Z]
286 Control-Z@\Like Control-X, except if a file group is being transmitted, this
287 will stop the transmission of the entire group. If only a single file is being
288 transmitted, it works exactly like Control-X.
289
290 @Index[Carriage Return]
291 @Index[CR]
292 Carriage Return@\If you type a carriage return Kermit-80 will resend the
293 current packet. You may do this repeatedly, up to the packet retry limit
294 (somewhere between 5 and 16 times) for a particular packet.
295 @end<description>
296
297 @heading<Kermit-80 Commands>
298
299 Kermit-80 is an interactive program. It issues a prompt, you type a command.
300 The process repeats until you give the EXIT command to leave the program.
301
302 Commands consist of keywords, filenames, and numbers. Keywords may be
303 abbreviated to minumum unique length. "?" may be typed to request a menu of
304 the available options for the current field at any point in a command. ESC
305 may be typed at any point in a command to fill out the current keyword or
306 filename; if sufficient characters have not been typed to identify the current
307 field uniquely, Kermit-80 will sound a beep and allow you to continue from
308 that point. Here are Kermit-80's commands:
309 @begin<description,leftmargin +8,indent -8>
310 @Index[Break]
311 BREAK@\Send a BREAK condition to the remote computer. This is only possible
312 if your system is capable of sending breaks. It is intended to be used with
313 PAUSE, OUTPUT, etc and the TAKE command to do wierd and wonderful things, like
314 automatic logging on to a remote host.
315
316 @Index[Bye]
317 BYE@\When talking to a remote Kermit Server, this command shuts down
318 the server and logs it out, and also exits from Kermit-80 to CP/M command
319 level.
320
321 @Index[Virtual Terminal]@Index[Escape Character]@Index[Connect]
322 CONNECT@\Establish a terminal connection to the computer, service, or device
323 that is
324 connected to the serial port, i.e.@ pass all typein to the serial port and
325 display all input from the serial port on the screen. Also, emulate a DEC VT52
326 to allow cursor control, screen clearing, etc., if VT52-EMULATION is ON (see
327 below), in which case you should also set your terminal type on the remote host
328 to VT52. (Some versions emulate other terminals.) The CONNECT command may
329 be abbreviated by the single letter C.
330
331 @\Warning: VT52 emulation is only successful if your system or its
332 attached terminal can do the same sort of functions as a genuine
333 VT52. Things to beware of are cursor addressing, clear to end of page
334 and end of line, clear screen, home cursor, and clear-and-home
335 functions. The useability of VT52 emulation depends entirely on
336 how many of the VT52 functions can be emulated by your micro or terminal.
337
338 @\The escape character differs from micro to micro; when you issue
339 the CONNECT command, the micro will print a message telling you how
340 to get back. The escape sequence is generally an uncommonly-@|used
341 control character, like CTRL-backslash or CTRL-rightbracket, followed
342 by a single letter "command":
343 @begin<description,spread 0,leftmargin +4, indent -4>
344 C@\Close Connection, return to @q(Kermit-80>) command level.
345
346 S@\Display Status of connection, but maintain remote connection.
347
348 @q<?>@\List available single-character commands.
349
350 0@\(zero) Send a null (0) character.
351
352 B@\Send a BREAK signal. Most systems provide this function.
353
354 D@\Drop the line. Used on the Apple with modem. Automatically
355 closes the connection after dropping the line. The TORCH system
356 acknowledges this command but does nothing.
357
358 P@\Toggle printer on or off. Allows you to copy whatever goes
359 to the screen to the printer.
360
361 S@\Temporarily suspend logging to the log file.
362
363 Q@\Restart logging to the log file
364
365 @q<^]>@\(or whatever - a second copy of the escape character) Send the
366 escape character itself to the remote host.
367 @end<description>
368
369 @Index[Copy]
370 @Index[File Copying]
371 COPY @i<source> @i<destination>
372 @\Copy a named file to another file, either on the same drive or another
373 drive.
374
375 @Index[Directory]
376 DIRECTORY@\This provides a directory listing of the specified files.
377 If no files are
378 specified, all files on the default disk are listed. File sizes, in K, are
379 included. You may interrupt the listing at any time by typing any character.
380 The listing (even if interrupted) concludes with a display of the amount of
381 free storage left on the disk. You can inhibit the display of file sizes by
382 SET DIRECTORY OFF.
383
384 @Index[Erase]
385 ERASE @i<filespec>@\This executes the CP/M ERA command on the specified
386 file(s). The names of the files being erased are not displayed.
387
388 @Index[Exit]
389 EXIT@\Quit back to CP/M. The return is made by a JMP 0 (Warmstart). QUIT
390 is a synonym for EXIT.
391
392 @Index[FINISH]FINISH@\Like LOGOUT, but shuts down the remote server without
393 logging it out. Leaves you at Kermit-80 command level; subsequent CONNECT
394 commands will put you back at host system command level.
395
396 @Index[GET]GET @i<filespec> [@i<local_filespec>]
397 @\When Kermit-80 is talking to a Kermit Server on
398 the host, you should use the GET command to request the server to send
399 files to you, for example:
400 @example<get hlp:k*.hlp>
401 You may specify a local filename if you want to save the remote file
402 under a different filename.
403 Limitation: If you request an alternate block check type using the SET BLOCK
404 command, the GET command will not communicate it to the remote server. If you
405 want to have type 2 or 3 block checks done when getting files from the server,
406 you have to issue the appropriate SET BLOCK command to the remote KERMIT before
407 putting it in server mode.
408
409 @Index[Help]HELP@\List all these commands, with a short description
410 on what the commands do. A question mark will do the same. If you have
411 already typed a command but do not know what the parameters are, type a
412 space (to indicate the end of the command) and a question mark. You will
413 be informed of what Kermit can expect at that stage.
414
415 @Index[Input]INPUT @i<seconds> @i<text>@\Setup a text line and time delay
416 for your CP/M system to expect from the host, then wait up to the given number
417 of seconds (approximately) for text to be sent to your CP/M-80 system.
418
419 @Index[LOG]LOG @i<filespec>@\When CONNECTed to a foreign host as a terminal,
420 log the terminal session to the specified diskette file. This functionality
421 depends to some extent on the remote host's ability to do
422 @Index[XON/XOFF]XON/XOFF flow control, and does not guarantee a complete
423 transcript (after all, that's what the KERMIT protocol is for). The log file
424 is closed when the connection is closed by typing the escape character followed
425 by the single-@|character command "C".
426
427 @Index[Append]
428 @\It is possible to temporarily suspend logging during connect
429 state. Typing an escape sequence can turn file logging on
430 (<escape-character> R for Resume) or off (<escape-character> Q for quiet).
431
432 @\Re-entering connect state will re-open the previously opened
433 log 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
438 you had typed it.
439
440 @Index[Pause]PAUSE @i<seconds>@\If this command is issued your CP/M
441 system will wait a while before proceeding with another command.
442 This is intended for use in TAKE commands, where you may want to pause
443 for a while before proceeding with the rest of the TAKE file. The
444 actual delay is very variable between systems, and values should
445 be determined on a trial and error basis.
446
447 @Index[Print]PRINT@\Print a file to the console and printer. Output to
448 the printer is buffered by the Kermit-maintained printer buffer.
449 This routine is identical to TYPE but characters are echoed to the printer
450 as well as to the screen. Suspending and canceling output is as
451 described in TYPE.
452
453 QUIT@\Synonym for EXIT.
454
455 @Index[RECEIVE]@Index[File-Warning]
456 RECEIVE @i<filespec>@\Receive file(s) from the remote
457 Kermit, and save them under the names provided in the file headers
458 supplied by the remote host. If a local filespec is given, the file is
459 saved under the given filename. If the names aren't legal, use as
460 many legal characters from
461 the name as possible (see the description of SET FILE-WARNING below). If
462 there's a conflict, and FILE-WARNING is ON, warn the user and try to build a
463 unique name for the file by adding "@q<&>" characters to the name. RECEIVE
464 can be abbreviated to the single letter R.
465
466 @index<REMOTE>REMOTE @i<command>@\Send a command to a remote Kermit server.
467 The results are sent back to your CP/M screen. When two arguments are
468 required and specify less than two in the command, you will be prompted for
469 the missing arguments. REMOTE commands include:
470 @begin<description,leftmargin +4, indent -4>
471 REMOTE CD [directory]@\Ask the remote server to change its default directory.
472 If no directory is specified, the server changes to its login directory.
473
474 REMOTE COPY file1 file2@\Ask the remote server to copy file1 to file2.
475
476 REMOTE RENAME file1 file2@\Ask the remote server to rename file1 to file2.
477
478 REMOTE DELETE filespec@\Ask the remote server to delete the named file or
479 files.
480
481 REMOTE DIRECTORY [filespec]@\Ask the remote server to display a directory
482 listing of the given files or, if the filespec is omitted, all the files in
483 the current device or directory.
484
485 REMOTE DISK-USAGE@\Ask the remote server to display information about its
486 disk usage (such as free or used space).
487
488 REMOTE ERASE filespec@\Same as REMOTE DELETE.
489
490 REMOTE FINISH@\Same as FINISH.
491
492 REMOTE HELP@\Ask the remote server to display a list of the commands it
493 can respond to.
494
495 REMOTE HOST command@\Ask the remote server to have its operating system
496 execute the given command.
497
498 REMOTE KERMIT command@\Ask the remote server to execute the given Kermit
499 command, given in the server Kermit's command syntax.
500
501 REMOTE LOGIN user password@\Log in to a remote Kermit server which has been
502 set up to require a username and password.
503
504 REMOTE MESSAGE text@\Send the text to the remote server for display on its
505 screen (useful with MS-DOS Kermit servers).
506
507 REMOTE SET parameter value@\Ask the remote server to set the given parameter
508 to the given value, for example REMOTE SET FILE TYPE BINARY. Type REMOTE SET
509 ? to see a list of the REMOTE SET options.
510
511 REMOTE SPACE@\Same as REMOTE DISK-USAGE.
512
513 REMOTE STATUS@\Ask the remote server to provide a status report.
514
515 REMOTE TYPE file@\Ask the remote server to display the named file on
516 the micro's screen.
517
518 REMOTE WHO [user]@\Ask the remote server for a list of users who are logged
519 in, or if a user is specified, for a report on the named user.
520 @end<description>
521
522 RENAME file1 file2@\Rename local CP/M file1 to file2.
523
524 @Index[SEND]SEND @i<filespec>@\Send file(s) specified by @i<filespec> to
525 the remote Kermit. The @i<filespec> may contain CP/M wildcards. SEND may
526 be abbreviated to the single letter S.
527
528 @Index[SET]SET @i<parameter> [@i<value>]@\Set the specified parameter to
529 the 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
534 received without having to type RECEIVE on the receiving machine. The routine
535 simply looks for activity on the serial line, and if so fudges a RECEIVE
536 command. The packet sent by the sender will be lost.
537
538 @Index[Block Check]BLOCK-CHECK-TYPE @i<option>
539 @\The options are:
540 @begin<description,spread 0,leftmargin +8,indent -8>
541 1-CHARACTER-CHECKSUM@\Normal, default, standard 6-bit checksum.
542
543 2-CHARACTER-CHECKSUM@\A 12-bit checksum encoded as two characters.
544
545 3-CHARACTER-CRC-CCITT@\A 16-bit CCITT-format Cyclic Redundancy Check, encoded
546 as 3 characters.
547
548 @end<description>
549
550 @Index[Buffer size]BUFFER-SIZE @i<value>@\This allows you to set a buffer
551 size during transfer of data. On some systems it takes so long that the
552 remote end times out while the local system is reading or writing to disk.
553 The size is the number of 128 disk sectors (nominal) and can be from 1
554 (128 bytes) to 64 (8 kbytes).
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
559 the same name as an existing file. BACKUP means to rename the existing file.
560 DISCARD means to discard and reject the incoming file. OVERWRITE means to
561 overwrite the existing file. RENAME means to rename the existing file.
562
563 @Index[Debug]DEBUG@\ON (or OFF). Enables/disables displaying of packets
564 on the screen during file transfer. Not performed if the QUIET option
565 has been set for the terminal (SET TERMINAL QUIET)
566
567 @Index[Default Disk]DEFAULT-DISK @i<drive letter>
568 @\This allows you to set the default
569 disk as source and destination
570 of file transfers. In addition, issuing this command causes you to switch to
571 the specified disk and log it in, write-@|enabled.
572 The colon must be included in the disk name (A:).
573 The selected disk appears
574 in your KERMIT-80 prompt, for instance @example[Kermit-80 14A:>]
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
579 disk drive. File sizes are not calculated, and five files are shown on
580 a line. Setting this option ON will show file sizes of each file.
581
582 @\Both options will list the free space remaining.
583
584 @Index[Escape Character]ESCAPE@\Change the escape character for
585 virtual terminal connections. Kermit-80 will prompt you for the new
586 escape character, which you enter literally.
587
588 @Index[File-mode]FILE-MODE @i<option>
589 @\Tells KERMIT-80 what kind of file it
590 is sending, so that KERMIT can correctly determine the end
591 of the file. SET FILE BINARY means to send all the
592 128-@|byte blocks (ie logical CP/M sectors)
593 of the file, including the last block in its entirety; SET
594 FILE ASCII is used for text files, and transmission stops when the first
595 Control-Z is encountered anywhere in the file (this is the CP/M convention for
596 marking the end of a text file).
597
598 @\SET FILE-MODE DEFAULT tells Kermit to attempt to determine the file type by
599 examining the file being transmitted. If a Control-Z appears before the
600 last block of the file, it is assumed to be BINARY; if, when the first
601 Control-Z is encountered, the remainder of the file contains only control-Z's,
602 it is assumed to be a text file. Unfortunately, not all programs fill the
603 remainder of the last record of a text file with Control-Z's,
604 so this algorithm is not always successful.
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)
608 may 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
611 be stripped and a warning sent to the console. When the first control-Z
612 is encountered, the file is assumed to be at the end, even if it is not.
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
616 to respond to an XOFF or XON sent by Kermit-80. If set off,
617 no flow control is assumed and any XON/XOFF is ignored.
618
619 @Index[IBM]IBM ON (or OFF)@\Allow the transfer of files to and from an IBM
620 mainframe computer. This makes Kermit-80 wait for the IBM turnaround character
621 (XON), ignore parity on input, add appropriate parity to output, and use local
622 echoing during CONNECT. As distributed, KERMIT-80 uses MARK parity for IBM
623 communication. If you don't give this command, IBM mode is OFF. Since IBM
624 VM/CMS KERMIT does not have timeout capability, SET IBM ON also turns on the
625 "fuzzy timer" automatically.
626
627 @Index[Local-Echo]LOCAL-ECHO ON (or OFF)@\When you CONNECT to a remote
628 host, you must set LOCAL-@|ECHO ON if the host is half duplex, OFF if
629 full duplex. OFF by default.
630
631 @Index[Logging]LOGGING ON (or OFF)@\Cease or resume logging whenever
632 connect mode is entered. This is really only applicable after a LOG
633 command is no longer required.
634
635 @Index[No-exit]NO-EXIT@\This command is applicable only for Kermit initiated
636 with a command tail. For example, if Kermit was initiated by:
637
638 @\KERMIT ;SEND HELLO;NO-EXIT
639
640 @\Kermit would first seek out and execute the KERMIT.INI file (if present),
641 then send file HELLO to a remote system. Usually Kermit would exit back
642 to CP/M, but NO-EXIT over-rides this. STAY is a synonym for NO-EXIT.
643
644 @\Note the leading semicolon. This clears leading spaces from the first
645 command.
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
649 appropriate parameters have been set to be used, e.g. speed, parity etc.
650 It 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
654 following: NONE, SPACE, MARK, EVEN, or ODD. On input, if parity is NONE, then
655 the 8th bit is kept (as data), otherwise it is stripped and ignored. The
656 parity setting applies to both terminal connection and file transfer.
657 If you set parity to anything other than none, KERMIT-80 will attempt to use
658 @Index<Eighth-Bit Prefix>
659 "8th bit prefixing" to transfer binary files. If the other KERMIT is also
660 capable of 8th bit prefixing, then binary files can be transferred
661 successfully; if not, the 8th bit of each data byte will be lost (you will see
662 a warning on your screen if this happens).
663
664 @Index[Port]PORT @i<port name>
665 @\Allows you to switch between different communication ports.
666 This command is not available on all systems.
667 Type @q<SET PORT ?> for a list of valid options for your system. (Note:
668 If your system does not support several ports, this command will
669 return a "Not implemented" error if you try to set a port.)
670
671 @Index[PRINTER]PRINTER@\ON (or OFF)
672 @\Turns copying of CONNECT session to printer on and off. It is also
673 possible to toggle the printer on/off from the connect state, by
674 typing <escape character> followed by P.
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]
682 PAD-CHAR@\Set the PAD character to use while receiving files.
683 Currently 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.
687 Same as SET SEND PADDING.
688
689 @Index[Set Start of packet]
690 START-OF-PACKET [value]
691 @\Set the default start of Packet character for receiving files. Apply the
692 same rules and considerations as for SET SEND START-OF-PACKET.
693
694 PACKET-LENGTH number@\Tell the other Kermit the longest packet length CP/M
695 Kermit is willing to receive during file transfer. The maximum length is 94,
696 which is also the default length.
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]
705 PAD-CHAR@\Set the Pad character to be used while sending files.
706 It is currently a dummy entry, and does not do anything.
707
708 @Index[Set Padding]
709 PADDING [value]
710 @\Set the number of PAD-CHARS to be used while sending files. This
711 too does nothing.
712
713 @Index[Set Start of packet]
714 START-OF-PACKET@\Set the default start of packet character to
715 another character than control-A. This may be necessary on systems
716 (including intervening networks) that trap control-A characters. Choose
717 a control character not otherwise used, ie not carriage return (13D, ODH),
718 line feed (10D, OAN), tabs (09D, 09H), backspace (08H), and bell (07H)
719 or any other used between you and your remote system.
720
721 @end<description>
722
723 @Index[Baud]SPEED @i<value>
724 @\Change the baud rate of the communications port. This
725 command only works on some systems. @i<value> is the numeric baud rate
726 (300, 9600, etc.) desired. Type SET SPEED followed by a question mark
727 for a list of supported baud rates.
728 On systems that do not support this command, you must set the port
729 baud rate from CP/M or other setup mechanism outside of KERMIT-80.
730
731 @Index[TacTrap]TACTRAP@\Set the TAC intercept character. If you are attached
732 to a TAC it will swallow the intercept character (commercial AT sign by
733 default) so Kermit sends it twice. With this command you can set the
734 intercept character (ie the one to send twice) to another character.
735
736 @Index[VT52 Emulation]
737 @Index[Terminal Emulation]
738 @Index[External Terminal Emulation]
739 TERMINAL @i<option>
740 @\Select one of the following terminal characteristics:
741
742 @begin<description,spread 0.5,leftmargin +8,indent -8>
743
744 OFF@\sets emulation off, and its up to the attached terminal to
745 respond to escape sequences sent from the remote host system.
746
747 DUMB@\Like off, but carriage return and line feed characters are
748 the only control characters accepted. All other control characters are
749 simply ignored. (Really a "Glass TTY").
750
751 EXTERNAL@\Emulation is provided for by a routine in the system dependent
752 part of Kermit. Attempting to set this option without having and
753 externally supplied routine will returna "Not Implemented" error.
754
755 OFF@\All characters are passed directly to the terminal without any
756 interpretation by Kermit.
757
758 VT52@\When connected as a terminal
759 to a foreign host, the micro emulates a VT52.
760 VT52 emulation is set by default, except on micros
761 that already have terminal functionality built in, such as the DEC VT180 and
762 DECmate (these act as @index<VT100 Emulation>VT100-@|series terminals). Some
763 systems emulate other terminals, like the ADM3A; see table @ref<-cpmterms>.
764
765 QUIET@\Do not display any file transfer information onto the console.
766 This mode is useful if you console takes a long time to update the display.
767 Only the file name is displayed. DEBUGging information is not displayed
768 even if selected.
769
770 REGULAR@\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
774 is off by default, because in the normal case KERMIT-80 is communicating with a
775 mainframe KERMIT that has its own timer. Mainframe KERMIT timers tend to be
776 more precise or adaptable to changing conditions. You should SET TIMER ON if
777 you are communicating with a KERMIT that does not have a timer. You should SET
778 TIMER OFF if you are communicating over a network with long delays.
779
780 @Index[USER]USER @i<user-number>
781 @\Sets another user number to be active.
782 Acceptable user numbers are 0 to 31, though it is recommended to use
783 user numbers 0 to 15 only.
784 This is really only useful for Winchester Systems with high disk capacities.
785
786 @Index[Warning]WARNING ON (or OFF)@\Warn user of filename conflicts when
787 receiving files from remote host, and attempt to generate a unique name by
788 adding "@q<&>" characters to the given name. ON by default, which is
789 equivalent to SET COLLISION RENAME.
790 @end<description>
791
792 @Index[Show]SHOW@\Display all settable parameters. You will get a page or so
793 of the status af all parameters that can be set using the SET command.
794
795 @Index[Status]STATUS@\The same function as Show.
796
797 STAY@\Equivalent to SET NO-EXIT.
798
799 @Index[Take]TAKE @i<filespec>@\Take characters and commands from the
800 specified file as if they were entered from the keyboard.
801 This is useful if you want to set up a batch job. A command
802 file can send, get, receive, set functions
803 etc automatically. A TAKE command can be interrupted with ^C.
804
805 @\An automatic "TAKE KERMIT.INI" is executed from the default drive
806 when Kermit-80 is loaded. This can be used to set defaults of band rate,
807 parity, filetype, default drive etc.
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
812 to the system on
813 the other end of the connection as though it were being typed at the terminal,
814 one line at a time. Each line sent is terminated with a carriage return, and
815 any line feeds are stripped from the file sent.
816 After each line has been sent Kermit waits for a character string
817 from the host (eg a acrriage return). If not specified, a carriage
818 return is assumed. No KERMIT protocol is involved.
819 An asterisk (star) is sent to the console for every line sent, to indicate
820 how the transfer is progressing.
821 This is useful for sending files to systems that don't have a
822 KERMIT program. During transmission, you may type one of these
823 single-@|character commands:
824 @begin<description,spread 0,leftmargin +4, indent -4>
825 Control-C@\Cease transmission, and drop into terminal emulation mode.
826
827 CR@\(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.
831 A Control-C
832 will cancel the command and return to the Kermit prompt. A Ctrl-X will cancel
833 the current file and go on to the next one, if any.
834 Typing any other character
835 while the file is being displayed will suspend
836 the output. Another character will resume output.
837
838 @Index[VERSION]VERSION@\Show the name, edit number, and edit date of several of
839 the 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
846 Many of the systems supported use an external terminal, rather than a built-in
847 console. Kermit may be further customized for these systems by defining
848 (at assembly time) the terminal type to be used.
849 If the terminal type is unknown or does not match any of the existing
850 terminal options, the generic "CRT" option may be selected. In this case,
851 Kermit cannot do fancy screen control during file transfer; it simply types the
852 file names, packet numbers, and messages in sequence across and down the
853 screen. This works best if you can put your micro or terminal in "autowrap"
854 mode; otherwise the packet numbers will pile up in the rightmost column; the
855 filenames and messages will always appear on a new line, however.
856 If no specific terminal has been selected, Kermit cannot do VT52 emulation;
857 it can act
858 as a "dumb terminal" (sometimes called a "glass TTY"), or else its own built in
859 terminal firmware provides cursor control functions independent of the Kermit
860 program.
861
862 @subsection<Generic Kermit-80>
863 @index<Generic Kermit-80>@index<8080> "Generic Kermit-80" is an implementation
864 of Kermit that should run on any 8080-@|compatible CP/M 2.2 system with no
865 modification
866 at all, or perhaps only a minor one. Unlike other Kermit-80 implementations,
867 it contains no system-@|dependent manipulation of the serial port.
868 All I/O is done with standard CP/M BIOS@index<BIOS> calls, and I/O redirection
869 is done using the CP/M IOBYTE function, which, according to the Digital
870 Research @i<CP/M Operating System Manual>, is an optional feature of any
871 particular CP/M implementation. If your system does not provide the IOBYTE
872 function, Generic Kermit-80 will not work; furthermore, not all systems that
873 implement IOBYTE do so in the same way.
874 The SET PORT command may be used to select the devices to be used for input
875 and output. Table @ref<-cpmports> lists the options to the SET PORT command
876 and 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
893 The default is SET PORT PTR.
894 In all cases, the console (CON:) and list (LST:) devices used are those
895 selected when Kermit is started.
896
897 The reason all Kermit-80 implementations aren't
898 generic is that a good deal of speed is sacrificed by getting all services from
899 the operating system. While a specific implementation of Kermit-80 may be able
900 to operate at 4800, 9600, or even 56 Kilo baud,
901 generic Kermit will fail to work
902 on some systems at speeds in excess of 1200 baud. In addition, many features
903 of Kermit require more specific knowledge of the hardware involved. Generic
904 Kermit cannot send a BREAK signal, or change the baud rate, for example.
905
906 @subsection<CP/M 3 Kermit>
907
908 CP/M-3 Kermit (also known as CP/M-Plus Kermit) is a version of generic
909 Kermit-80, and should run on most CP/M-3 (CP/M-Plus) systems. It uses the
910 auxilliary port (AUX:) to communicate to the remote Kermit. The SET BAUD
911 and SET PORT commands are not supported; nor can a BREAK be sent.
912 Like generic Kermit-80, a terminal may be selected at assembly time.
913
914 @subsection<System-Specific Versions>
915
916 There are also many versions of Kermit-80 tailored to specific systems.
917 Most of these operate uniformly, but some of them take advantage (or suffer
918 limitations) of the specific system. Here are some of the special features
919 for particular systems:
920
921 @begin<description, leftmargin +4, indent -4>
922 @ux<Amstrad>: -- Two versions:
923
924 @begin<description, leftmargin +4, indent -4>
925 PCW 8256@\The PCW 8256/8512 with the serial inerafce attached.
926
927 CPC 6128@\The 664 with add on memory and 6128 are both supported.
928 Both systems must run CP/M Plus, so the 664 will need an add on RAM pack
929 and CP/M upgrade. A high speed transfer rate of 38k baud can be used
930 between Amstrad computers.
931 @end<description>
932
933 @ux<ACCESS>:@\Access Matrix computer using port J5. Supports SET
934 BAUD-RATE for rates of 300-9600 baud.
935
936 @ux<Apple II> -- four variations:
937 @begin<description,leftmargin +4,indent -4>
938 APMMDM:@\Apple with Z80 Softcard and Micromodem II in slot 2
939 Dialout capability provided in connect command; user is prompted for
940 phone number if carrier is not present. During connect mode,
941 @q(^]D) drops carrier. BYE command also causes carrier to be dropped.
942
943 AP6551:@\Apple with Z80 Softcard, and one of several 6551-based
944 communication cards; the slot number is a compile-time parameter
945 (default is slot 2). SET BAUD-RATE supported; speeds are 110-19200
946 baud.
947
948 APCPS:@\Apple with Z80 Softcard and CP Multi-Function Card. The slot
949 number is again a compile-time parameter. SET BAUD-RATE is supported
950 for baud rates from 50 baud to 19200 baud.
951
952 AP6850:@\Apple II with Z80 Softcard and a 6850-based USART in slot 2-the
953 slot being a compile-time parameter. SET BAUD-RATE is not supported.
954 @end<description>
955
956 @ux<BBC>:@\Acorn Computers BBC Computer with Acorn Z80 second
957 processor running CP/M-80. Supports SET BAUD-RATE and can send breaks.
958
959 @ux<BigBoard II>:@\Uses serial port A. To use port B, change mnport, mnprts,
960 and baudrt and reassemble. Can generate BREAK. SET SPEED supported;
961 speeds are 300-38400 baud.
962
963 @begin<multiple>
964 @ux<Cifer>:@\Originally coded for Cifer 1886 using the VL: port set
965 as TTYI: and TTYO: but works successfully on 18xx and 28xx
966 series machines.
967
968 There are now two versions, each with two variations: Either running
969 CP/M Version 2.2 or 3.0, and either using the VL: or AUX: ports. The VL:
970 port version can only use seven bits of data, so parity prefixing is
971 required for binary file transfers. This restriction is removed by
972 using the AUX: port. For those interested, the problem is due to the
973 interprocessor link between the video and CPU (!) boards. The VL: port
974 is on the video board, and the AUX: port on the CPU board,
975 and the inter processor link can only transfer seven bits of data.
976
977 Supports SET SPEED, and can generate breaks on
978 some models with a BREAK key.
979 @end<multiple>
980
981 @ux<Comart>:@\Comart Communicator-Similar to Northstar
982 equipment. 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;
987 speeds are 50-9600 baud.
988
989 @ux<Cromemco>:@\Cromemco computers with TU-ART card. Supports SET
990 BAUD-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,
995 GENERAL, 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
1000 Computer. Uses Port B on an 83U user board. Supports SET SPEED
1001 for 50-19200 baud. Can generate BREAK.
1002
1003 @ux<Epson>:@\Epson PX-8 with LCD display. Although it is quite different
1004 in displaying of Packet Information, it works as any other CP/M-80 Kermit.
1005 Supports SET SPEED and can generate BREAK.
1006
1007 @ux<Generic Kermit>:@\Two versions, one for CP/M version 2@q<.>2 and
1008 version 3. These systems use IOBYTE flipping (V2@q<.>2) and the AUX:
1009 device to communicate to the serial line. You may have to SET PORT xxx
1010 before the version 2@q<.>2 will work, as Kermit needs to know what device
1011 is the serial line.
1012
1013 @ux<Genie>:@\Eaca Video Genie.
1014
1015 @ux<Heath>: Three Versions:
1016 @begin<description,leftmargin +4,indent -4>
1017 H8QUAD@\for Heath-8 systems with the quad io board. This system has been
1018 derived from V3.x code. Note that this version will not run "as is" on H89
1019 systems.
1020
1021 H89@\For Heath-89 machines suports baud rates from 50 to 56,000 baud.
1022
1023 Z100@\For Z-100 running CP/M-85. This version does not support
1024 setting of baud rates.
1025
1026 @end<description>
1027
1028 @ux<Intertec Superbrain>: Two Versions:
1029 @begin<description,leftmargin +4,indent -4>
1030 BRAINA@\For superbrain using AUX port. Breaks and SET BAUD both supported
1031
1032 BRAINM@\As above, but using the MAIN port.
1033 @end<description>
1034
1035 @ux<Ithaca>:@\Ithaca Intersystems based computer using the VIO card for
1036 all IO to the outside world. The system is strictly speaking a
1037 home-brew variant of the Ithaca machine, using an S100 cardcage
1038 without a front panel. It uses the Extended BIOS by EuroMicro of London.
1039 However, I see no reason for this version not running on a genuine
1040 Ithaca Intersystems machine. There are patches needed to the EuroMicro
1041 BIOS to make this version work.
1042
1043 @ux<Kaypro:>@\Should work on most Kaypro models, as well as some related
1044 systems (Ferguson BigBoard I, Xerox 820). For the newer Kaypros with multiple
1045 ports, Kermit uses the one labeled "serial data"; it cannot use the serial
1046 printer or internal modem ports (but it should be possible to modify the values
1047 for mnport, mnprts, and baudrt to do this). Can generate BREAK. SET SPEED
1048 supported; speeds are 50-19200 baud.
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
1053 also the ICL PC?). Requires a terminal.
1054
1055 @ux<Microbee>:@\Microbee Systems computer made in Australia. Works on
1056 Microbee 56K (Series 2 APC), 64K (Computer in a Book), 128K (Dynamic), and
1057 256K (256TC). Can generate BREAK. SET BAUD-RATE supported; speeds are
1058 75-9600. All serial I/O is via software, not hardware. Simultaneous transmit
1059 and receive possible on all speeds except 75/1200, 1200/75, 4800, and 9600.
1060
1061 @ux<Micromate>:@\PMC 101 Micromate. Supports SET SPEED and can
1062 generate BREAK.
1063
1064 @ux<Micromint>: Two versions
1065 @begin<description, leftmargin +4, indent -4>
1066 S6@\The Ciarcia/Micromint sb-180 board with a 6Mhz procoessor. System
1067 requires a terminal.
1068
1069 S9@\As above, but with a 9Mhz processor.
1070 @end<description>
1071
1072 @ux<NCR>:@\Decisionmate 5. Uses the 2651 and is largely
1073 the same as the Ithaca Intersystems machine implementation.
1074
1075
1076 @ux<Northstar>: -- There are four versions available:
1077 @begin<description,leftmargin +4,indent -4>
1078 NORTHS:@\Northstar Horizon with HS10-4 board. Supports SET SPEED
1079 and SET PORT.
1080
1081 HORIZON:@\Northstar Horizon using the serial ports on the Mother
1082 board. Can generate BREAK.
1083
1084 BASICNS:@\Basic Northstar Horizon using the printer port.
1085 Can generate BREAK.
1086
1087 ADVANT:@\Northstar Advantage. Supports SET SPEED and can
1088 generate 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
1092 3 is the communications line. SET SPEED supported; speeds are 75-56000
1093 baud.
1094
1095 @ux<Morrow Micro Decision I>:@\
1096
1097 @ux<Nokia MicroMikko>:@\
1098 Will not echo control-O (which locks keyboard). SET SPEED
1099 supported; 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
1104 key generates
1105 <DEL> ("delete" or "rubout" character) during connect mode. SET SPEED
1106 supported; 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>
1110 RM380ZM:@\380Z and 5.25" disks supports SET BAUD.RATE
1111
1112 RM380ZF:@\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>
1121 TRS80LB:@\TRS-80 with Lifeboat CP/M
1122
1123 TRS80PT:@\TRS-80 with Pickles and Trout CP/M
1124
1125 TRSM4:@\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
1133 Z80 based CP/N (as in Nut!) systems. It uses the BBC Computer as a
1134 "Base processor", and is similar to the BBC version. The base processors
1135 RS423 port is used rather than any built in Modem.
1136 (UK telecoms legislation effectively makes modem control software
1137 tricky business...). Two potential versions exist-one using cursor
1138 positioning codes for a MCP and CCCP ROM combination of revision less
1139 than 1.00, the other version uses the additional facility MCP/CCCP
1140 versions greater than 1. Supports SET SPEED and can generate BREAKs.
1141
1142 @\Note that binary files must be transferred using SET PARITY to anything
1143 other 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
1152 development system. Allows development of the system independent modules
1153 to be done on an IBM PC or clone. Also allows the generation of new .HEX
1154 files, that may then be KERMITed to the target system. Note: Not all
1155 the BDOS or BIOS routines are supported, so avoid "unusual" BIOS/BDOS calls.
1156 (For example, DIR from within Kermit will fail as one of the BIOS routines
1157 returning disk parameters is not supported.)
1158 @end<description>
1159
1160 @section<Installation of Kermit-80>
1161
1162 Kermit-80 was written originally for the Intertec SuperBrain in
1163 lowest-@|common-@|denominator @Index[8080] 8080 code with the standard
1164 assembler, ASM (single source module, no macros, no advanced instructions), so
1165 that it could be assembled on any CP/M-80 system (the 8080 assembler is
1166 distributed as a standard part of CP/M-80, whereas the fancier Z80@Index[Z80]
1167 or macro assemblers are normally commercial products). It has since been
1168 modified to run on many other systems as well. Kermit-80 should be able to run
1169 on any 8080-, 8085- or Z80-@|based microcomputer under @Index[CP/M] CP/M with
1170 appropriate minor changes to reflect the port I/O and screen control for the
1171 system (see below).
1172
1173 The proliferation of new systems supported by Kermit-80 made the program grow
1174 so large and complicated that it had to be broken up into system-@|independent
1175 and system-@|dependent modules, as of version 4 (this was done by Charles
1176 Carvalho of ACC). Each module is composed of multiple files. This has reduced
1177 the time and disk space necessary for assembly; Kermit-80 may once again be
1178 assembled on a CP/M system with roughly 250Kbytes of space. The majority of
1179 the code does not need to be reassembled to support a new system.
1180 Unfortunately, it can no longer be assembled with ASM, since ASM does not
1181 support multiple input files. To allow it to be assembled on any CP/M system,
1182 the public-domain assembler LASM is included in the distribution kit. Kermit-80
1183 may also be assembled with Microsoft's M80 (not supplied). In theory, any 8080
1184 assembler supporting the INCLUDE directive ought to work, as well.
1185
1186 All versions of Kermit-80 are assembled from the same set of sources, with
1187 system dependencies taken care of by assembly-@|time conditionals within the
1188 system-@|dependent module (eventually, the system-@|dependent module will
1189 itself be broken up into multiple files, one for each system). The most
1190 important system dependencies are terminal emulation (when CONNECTed to the
1191 remote host) and screen handling, which are dependent on the individual micro's
1192 escape codes (these features are table driven and easily modified for other
1193 CP/M systems), and the lowest level I/O routines for the serial communications
1194 port. The port routines are best done only with BDOS calls, but some systems
1195 do not allow this, primarily because the BDOS routines strip the parity bit
1196 during port I/O, and the parity bit is used for data when transmitting binary
1197 files.
1198
1199 Kermit-80's I/O routines must check the port status and go elsewhere if no
1200 input is available; this allows for virtual terminal connection, keyboard
1201 interruption of stuck transmissions, etc. On systems that fully implement I/O
1202 redirection via the optional CP/M IOBYTE facility, this may be done by
1203 switching the IOBYTE definition. On others, however, IN/OUT instructions
1204 explicitly referencing the port device registers must be used.
1205
1206 @index<Timeout>
1207 CP/M-80 KERMIT versions 3.8 and later include a "fuzzy timer" that allows a
1208 timeout to occur after an interval ranging from 5 to 20 seconds (depending upon
1209 the speed of the processor and the operating system routines) during which
1210 expected input does not appear at the port. In this case, retransmission
1211 occurs automatically. In any case, you may type a carriage return during
1212 transmission to simulate a timeout when the transfer appears to be stuck.
1213
1214 @subsection<Organization of Kermit-80>
1215 Kermit-80 consists of two modules, each of which is generated from multiple
1216 source files. The first module contains the system-@|independent code;
1217 the second module is configured for a particular system and merged with
1218 the system-@|independent module to produce a customized Kermit-80.
1219
1220 The distribution kit contains:
1221 @begin<itemize,spread 0>
1222 the system-@|independent module, @q<CPSKER.HEX>;
1223
1224 the system-@|dependent modules, @q<CPV*.HEX> (see table @ref<-cpmsystems1>
1225 and @ref<-cpmsystems2>);
1226
1227 the source files, @q(CPS*.ASM) and @q(CPX*.ASM),
1228
1229 the public-domain CP/M assembler, @q<LASM.*>,
1230
1231 the 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)
1240 ACCESS CPVACC @r<Access Matrix>
1241 ADVANT CPVADV @r<Northstar Advantage>
1242 AP6551 CPVAPL @r<Apple II, Z80 Softcard, 6551 ACIA in serial interface>
1243 AP6850 CPVA65 @r<Apple II, Z80 Softcard, 6850 ACIA in Serial Iiterface>
1244 APMMDM CPVAPM @r<Apple II, Z80 Softcard, Micromodem II in slot 2>
1245 APCPS CPVCPS @r<Apple II, Z80 Softcard, with CPS multifunction card>
1246 BASICNS CPVBNS @r<Northstar Horizon (terminal required)>
1247 BBC CPVBBC @r<Acorn "BBC" computer with Acorn Z80 second processor>
1248 BBII CPVBB2 @r<BigBoard II (terminal required)>
1249 BRAINM CPVBRM @r<Intertec Superbrain using the main port>
1250 BRAINA CPVBRA @r<Intertec Superbrain using the Aux port>
1251 CIFER2 CPVCIF @r<Cifer 1886 using the VL: Serial port and CP/M V2.2>
1252 CIFER3 CPVCI3 @r<Cifer 1886 using the VL: Serial port and CP/M V3.0>
1253 CIFER2 CPVCA2 @r<Cifer 1886 using the AUX: Serial port and CP/M V2.2>
1254 CIFER3 CPVCA3 @r<Cifer 1886 using the AUX: Serial port and CP/M V3.0>
1255 CMEMCO CPVCRO @r<Cromemco with TU-ART card. Terminal required)>
1256 COMART CPVCOM @r<Comart Communicator (terminal required)>
1257 COMPRO CPVPRO @r<Compupro with Interfacer 4 (or 3). Terminal required.>
1258 CPC CPVCPC @r<Amstrad CPC 664 and 6128 and CP/M 3>
1259 CPM3 CPVCP3 @r<"Generic": CP/M 3.0 (CP/M Plus) systems (terminal req'd)>
1260 CPT85XX CPVCPT @r<CPT-85xx wordprocessor with CP/M>
1261 DELPHI CPVDEL @r<Digicomp Delphi 100 (terminal required)>
1262 DISC CPVDIS @r<Action Computer Enterprises "Discovery" (terminal req'd)>
1263 DMII CPVDM2 @r<DECmate II with CP/M option>
1264 GENER CPVGEN @r<"Generic": CPM 2.2 systems with IOBYTE (terminal req'd)>
1265 GENIE CPVGNI @r<Video Genie>
1266 H8QUAD CPVH8Q @r<Heath-8 with Quad 8 i/o board>
1267 HEATH CPVH89 @r<Heath/Zenith H89>
1268 HORIZON CPVHOR @r<Northstar Horizon (terminal required)>
1269 KPII CPVKPR @r<Kaypro-II (and 4; probably supports all Kaypro systems)>
1270 LOBO CPVLBO @r<Lobo Max-80>
1271 @begin<text,facecode R,above 1>
1272 "symbol" is the symbol used to select the target system, in @q<CPVTYP.ASM>;
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)
1288 M2215 CPVMRL @r<British Telecom Merlin/Rair Black Box (terminal required)>
1289 MBEE CPVBEE @r<Microbee>
1290 MDI CPVMDI @r<Morrow Decision I (terminal required)>
1291 MIKKO CPVMIK @r<MikroMikko>
1292 MMATE CPVMM @r<PMC 101 Micromate (terminal required)>
1293 MMDI CPVUD @r<Morrow Micro Decision I (terminal required)>
1294 NCRDMV CPVDMV @r<NCR Decision Mate V. (Terminal required?)>
1295 NORTHS CPVNS @r<Northstar Horizon with HSIO-4 card (terminal req'd)>
1296 OSBRN1 CPVOSB @r<Osborne 1>
1297 OSI CPVOSI @r<Ohio Scientific>
1298 PCI2651 CPVPCI @r<Ithaca Intersystems with VI0 card (terminal required)>
1299 PCW CPVPCW @r<Amstrad PCW 8256/8512 with serial interface>
1300 PX8 CPVPX8 @r<Epson PX-8>
1301 RM380ZM CPVRMM @r<Research Machines 380Z with MDS (5.25" discs)>
1302 RM380ZF CPVRMF @r<Research Machines 380Z with FDS (8" discs)>
1303 ROBIN CPVROB @r<DEC VT180>
1304 S1008 CPVUSM @r<US Microsales S-100-8 (terminal required)>
1305 SANYO CPVSAN @r<Sanyo MBC-1100>
1306 SB6 CPVSB6 @r<Micromint SB-180 with 6Mhz CPU (terminal required)>
1307 SB9 CPVSB9 @r<Micromint SB-180 with 9Mhz CPU (terminal required)>
1308 SCNTPR CPVSCN @r<Screentyper>
1309 TELCON CPVTEL @r<TELCON Zobra portable>
1310 TELETEK CPVTET @r<Teletek Systemaster>
1311 TORCH CPVTRC @r<Torch computers BBC-B with Z80 second processors>
1312 TRS80LB CPVTLB @r<TRS-80 model II with Lifeboat 2.25C CP/M Display>
1313 TRS80PT CPVTPT @r<TRS-80 model II with Pickles + Trout CP/M Display>
1314 TRSM4 CPVTM4 @r<TRS-80 model IV>
1315 VECTOR CPVVEC @r<Vector Graphics>
1316 XER820 CPVXER @r<Xerox 820>
1317 Z100 CPVZ00 @r<Z-100 under CP/M-85>
1318 Z80MU CPVZ80 @r<Z80MU development system on a PC>
1319 @begin<text,facecode R,above 1>
1320 "symbol" is the symbol used to select the target system, in @q<CPXTYP.ASM>;
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)
1336 CRT @r<Dumb terminal type. Does not do cursor addressing>
1337 ADM3A @r<Lear Seigler ADM 3A>
1338 ADM22 @r<Lear Seigler ADM 22>
1339 AM230 @r<Ampro 230>
1340 H1500 @r<Hazeltine 1500>
1341 SMRTVD @r<Netronics Smartvid>
1342 SOROQ @r<Soroq IQ-120>
1343 TVI912 @r<Televideo 912>
1344 TVI925 @r<Televideo 925 or Freedom 100>
1345 VT52 @r<Dec VT52 or equivalent (H19)>
1346 VT100 @r<Dec VT100 or equivalent>
1347 WYSE @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
1363 You'll need either a pre-configured @q<.COM> file or the system-@|independent
1364 module, @q<CPSKER>, in binary (@q<.COM>) or hex (@q<.HEX>) format and the
1365 system-@|dependent overlay for your system (from Tables @ref<-cpmsystems1> and
1366 @ref<-cpmsystems2>). If
1367 your system is not listed in the table, get the generic CP/M 2@q(.)2 Kermit or
1368 the generic CP/M 3 Kermit. If you already have a version of Kermit on your
1369 micro and you want to install a new version, simply use your present version to
1370 get the new files. Transfer the files to your system and skip ahead to
1371 "merging the modules".
1372
1373 If you do not have a copy of Kermit on your micro, and you cannot borrow a
1374 Kermit floppy but you do have access to a mainframe computer with a copy of the
1375 Kermit-80 distribution, you should read this section.
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.
1379 The easiest is to "download" the necessary "hex" files into your micro's
1380 memory and then save them on the disk. If you have a terminal emulator program
1381 on your micro which can save a copy of the session to disk, connect to your
1382 host, and type the necessary files. Exit from the emulator, saving the
1383 session log, and edit the session log to extract the hex files. Skip ahead to
1384 "merging the files".
1385
1386 The following is a procedure which, though far from foolproof, should allow you
1387 to get a version of Kermit to your CP/M based micro. It depends upon the host
1388 prompt, or at least the first character of the host prompt, being some
1389 character that cannot appear in a hex file (the valid characters for hex files
1390 are the digits 0-9, the upper case letters A-F, the colon ``@q<:>'', carriage
1391 return, and line feed). As soon the prompt character is encountered, the
1392 transfer will terminate. If your host does not issue a prompt that will
1393 accommodate this scheme, you can achieve the same effect by adding an atsign
1394 ``@@'' to the very end of the hex file before sending it from the host. The
1395 program below looks for an atsign (the normal DEC-20 prompt, hex 40).
1396 DECSYSTEM-10 users would look for a dot, hex 2E; VAX/VMS or UNIX users would
1397 look for a dollar sign, hex 24; UNIX C-Shell users would look for a percent
1398 sign, hex 26.
1399
1400 @Begin <Enumerate>
1401 For CP/M 2@q<.>2 systems, connect to a floppy disk with plenty of free space.
1402 Run DDT and type in the following (the comments should not be typed in;
1403 they are there just to tell you what's happening): (Note that this wont work
1404 for CP/M Plus or 3@q<.>0 systems!)
1405 @Begin<figure, use Example, leftmargin +0>
1406 @bar()
1407 @blankspace(0.25)
1408 -a100 ;Begin assembling code at 100
1409 0100 LXI H,2FE ;Where to store in memory
1410 0103 SHLD 200 ;Keep pointer there
1411 0106 MVI E,D ;Get a CR
1412 0108 MVI C,4 ;Output to PUNCH (send to HOST)
1413 010A CALL 5
1414 010D MVI C,3 ;Input from READER (read from HOST)
1415 010F CALL 5
1416 0112 ANI 7F ;Strip parity bit
1417 0114 PUSH PSW ;Save a and flags
1418 0115 MOV E,A ;Move char to E for echo
1419 0116 MVI C,2 ;Output to screen
1420 0118 CALL 5
1421 011B POP PSW ;Restore A and flags
1422 011C CPI 40 ;(or 4E,24,26,etc) System prompt?
1423 011E JZ 127 ;Yes, have whole file in memory
1424 0121 CALL 17A ;No, store another byte
1425 0124 JMP 10D ;Read another byte
1426 0127 MVI A,1A ;Get a Control-Z (CP/M EOF mark)
1427 0129 CALL 17A ;Store it in memory
1428 012C LXI H,300 ;Get memory pointer
1429 012F SHLD 202 ;Store as DMA pointer
1430 0132 LDA 201 ;Get 'HI' byte of memory pointer
1431 0135 STA 200 ;and store it as 'LO' one
1432 0138 XRA A
1433 0139 STA 201 ;Zero 'HI' byte (slow *256)
1434 013C MVI C,16 ;Make NEW file
1435 013E LXI D,5C ;With FCB1
1436 0141 CALL 5
1437 0144 CALL 15E ;Write 128 bytes (sector)
1438 0147 CALL 15E ;Write another sector
1439 014A LXI H,FFFF ;Get a 16-bit Minus One
1440 014D XCHG ;into DE
1441 014E LHLD 200 ;Get 256-byte counter
1442 0151 DAD D ;Decrement
1443 0152 SHLD 200 ;and store back
1444 0155 MVI A,2 ;Check if
1445 0157 CMP L ; 256-byte counter down to offset
1446 0158 JZ 183 ;Yes, we're done
1447 015B JMP 144 ;Keep writing..
1448 015E LHLD 202 ;Get file-pointer
1449 0161 XCHG ;into DE
1450 0162 MVI C,1A ;Set DMA-address
1451 0164 CALL 5
1452 0167 MVI C,15 ;Write sector (128 bytes)
1453 0169 LXI D,5C ;using FCB1
1454 016C CALL 5
1455 016F LHLD 202 ;Get file-pointer
1456 0172 LXI D,80 ;128-bytes
1457 0175 DAD D ;added to file-pointer
1458 0176 SHLD 202 ;and save
1459 0179 RET ;and return
1460 017A LHLD 200 ;Get Memory-pointer
1461 017D MOV M,A ;Store character
1462 017E INX H ;Increment Pointer
1463 017F SHLD 200 ;and save
1464 0182 RET ;and return
1465 0183 MVI C,10 ;CLOSE file
1466 0185 LXI D,5C ;using FCB1
1467 0188 CALL 5
1468 018B JMP 0 ;Force WARM BOOT
1469 0179
1470 -^C ;(Type Control-C) Return to CP/M
1471 A>SAVE 1 FETCH.COM ;Save program, we need to run it twice.
1472 @caption<Bootstrap program for Kermit-80 and CP/M Version 2.2>
1473 @bar()
1474 @tag<-cpmboot>
1475 @end<Figure>
1476 Alternatively, an assembler source file for this program is distributed
1477 with CP/M Kermit as @q<CPKFET.ASM>. You might prefer to type the assembler
1478 version in and assemble and load it (ASM CPKFET, LOAD CPKFET, or MASM CPKFET,
1479 MLOAD CPKFET), to let the assembler and loader catch any typing errors.
1480
1481 Connect to your host using a terminal or a terminal emulation program. Ensure
1482 that your host does not have your terminal in "page mode" (does not pause
1483 at the end of each screenful).
1484
1485 Tell the host to display the first hex file (the system-independent module)
1486 at your terminal, e.g. give a command like @q<TYPE CPSKER.HEX>, @i<@u(without)
1487 a terminating carriage return>.
1488
1489 Return to your micro by switching the cable from the terminal to the micro,
1490 or by terminating the micro's terminal program.
1491
1492 Make sure your IOBYTE is set so that @q<RDR:> and @q<PUN:> correspond to the
1493 I/O port that is connected to the host (this would normally be the case
1494 unless you have done something special to change things).
1495
1496 Load the program you entered in the first step with DDT, and use it to capture
1497 the first hex file:
1498 @Begin<Example,Free>
1499 DDT FETCH.COM
1500 -icpsker.hex ;Setup FCB for file CPSKER.HEX
1501 -g100,179 ;Execute the program.
1502 @End<Example>
1503 Now there should be a file @q<CPSKER.HEX> on your connected disk.
1504
1505 Return to the host, and tell it to display the second hex file (the
1506 system-@|dependent module for your configuration). Again, do not type the
1507 terminating carriage return.
1508
1509 Return to your micro, and run the capture program again:
1510 @Begin<Example,Free>
1511 DDT FETCH.COM
1512 -icpxovl.hex ;Setup FCB to create CPXOVL.HEX
1513 -g100,179 ;Execute the program.
1514 @End<Example>
1515 Now there should be a file @q<CPXOVL.HEX> on your connected disk. Replace
1516 @q<CPXOVL.HEX> in this example with the appropriate overlay file for your
1517 system.
1518 @end<enumerate>
1519 Merging the files:
1520 @begin<enumerate>
1521 For purposes of illustration, we will assume the system-@|dependent overlay is
1522 called "cpxovl@q<.>hex". The two hex files may be combined with MLOAD or DDT.
1523 If you already have a running Kermit, you can transfer @q<MLOAD.HEX> to your
1524 system and create @q<MLOAD.COM> by running LOAD. If you're bootstrapping
1525 Kermit, you could transfer @q<MLOAD.HEX> to your system the same way you got
1526 the other two @q<.HEX> files, but it's probably simpler to use DDT to get
1527 Kermit running, and get MLOAD later if you need it.
1528
1529 Using MLOAD, the two pieces may be easily merged:
1530 @begin<example>
1531 A>@ux(mload kerm411=cpsker,cpxovl)
1532 @i[(Some messages about program size, etc...)]
1533 A>
1534 @end<example>
1535
1536 If you don't have MLOAD running, it's a bit more complex:
1537 @begin<example>
1538 A>@ux<ddt cpsker.hex>
1539 NEXT PC
1540 3500 0100
1541 -@ux<icpxovl.hex>
1542 -@ux<r>
1543 NEXT PC
1544 xxxx 0000
1545 -@ux<^C>
1546 A>@ux<save @i(dd) kerm411.com>
1547 @end<example>
1548 The page count ("dd") used in the SAVE command is calculated from the last
1549 address ("xxxx") given by DDT in response to the R command: drop the last two
1550 digits and add 1 if they were not zero, then convert from hexadecimal (base 16)
1551 to decimal (base 10): 684F becomes 69 hex, which is 105 decimal (5 times
1552 16 plus 9) -- but 6700 becomes 67 hex, or 103 decimal (consult an
1553 introductory computing book if you don't understand number base conversion).
1554
1555 If you are using the Z80MU CP/M and Z80 development toolkit on an IBM PC
1556 or clone, then follow the same instructions as for a genuine CP/M system.
1557 When you have loaded your file, you will have to ship the .COM or two
1558 .HEX files to the target CP/M system. (Possibly using a previous
1559 issue of Kermit?)
1560
1561
1562 Note that CP/M hex files have checksums on each line. If there were any
1563 transmission errors during the downloading process, MLOAD or DDT will notice a
1564 bad checksum and will report an error (something like "Illegal Format"). If
1565 you get any errors during loading, either fix the hex file locally with an
1566 editor, or repeat the transfer.
1567
1568 @End<Enumerate>
1569
1570 You now should have a running version of Kermit-80, called @q<KERM411.COM>.
1571
1572 Test your new Kermit by running it. If it gives you a prompt, it might be
1573 OK. (don't delete your old one yet...). Instead of a prompt, you could get
1574 one of two messages indicating that the configuration information is invalid:
1575 @example<?Kermit has not been configured for a target system>
1576 or
1577 @example<?Consistency check on configuration failed>
1578 Of course, neither of these messages should appear if you're building Kermit
1579 from the distribution kit. The first message indicates that the overlay was
1580 not found where the system-@|independent module expected to find it, probably
1581 because the overlay address is incorrect; the second indicates that the version
1582 of CPXLNK used in the system-@|dependent module is incompatible with the
1583 system-@|independent module.
1584
1585 Once you are satisfied that KERMIT40 works correctly, you should rename your
1586 old @q<KERMIT.COM> to something else, like @q<OKERMIT.COM>, and rename
1587 @q<KERMIT40.COM> to @q(KERMIT.COM).
1588
1589 @subsection<Assembling Kermit-80 from the sources>
1590
1591 Kermit-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)
1639 One 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)
1674 and if you use a terminal,
1675
1676 @q<@ @ CPXVDU.ASM>@\display codes for VDUs etc. Not always required
1677 @end(description)
1678 The system-@|independent module contains all of the system-@|independent files
1679 except for @q(CPXLNK.ASM), which is assembled into the system-@|dependent
1680 module to provide the structures needed to connect the two modules. As
1681 distributed, the system-@|independent module is named @q(CPSKER.HEX). If you
1682 have a copy of @q(CPSKER.HEX), you do not need to reassemble the
1683 system-@|independent module to configure Kermit for your system.
1684
1685 The system-@|dependent module consists of @Q(CPXTYP.ASM), @Q(CPSDEF.ASM),
1686 @Q(CPXLNK.ASM), @q(CPXSWT.ASM), @q(CPSCOM.ASM), one of the family files
1687 @Q(CPXSYS.ASM), @q(CPXTOR.ASM), @q(CPXMRL.ASM), @q(CPXSB.ASM), @q(CPXCIF.ASM),
1688 @q(CPXHEA.ASM), @q(CPXBBI.ASM), @q(CPXTM4.ASM), @q(CPXGNI.ASM), @q(CPXNOR.ASM),
1689 @q(CPXAPP.ASM), @q(CPXPCW.ASM), or @q(CPXPRO.ASM), and possibly @q(CPXVDU.ASM),
1690 if your system uses a terminal for the console. One copy of the
1691 system-@|dependent module is supplied already assembled for each supported
1692 system; the filename may be obtained from tables @ref<-cpmsystems1> and
1693 @ref<-cpmsystems2>. If a terminal is required for a system, a CRT (glass TTY
1694 device) has been selected.
1695
1696 After assembling the two pieces separately, they are combined with DDT or
1697 MLOAD into a system-@|specific Kermit.
1698
1699 If you want to rebuild the system-@|independent module, the only change you
1700 may need to make is to select the assembler to be used, in @Q(CPSKER.ASM).
1701 Define one of MAC80, M80, or LASM to TRUE to select it as the assembler;
1702 the others should be defined FALSE.
1703
1704 Assuming you have the Microsoft Macro Assembler package (M80/L80), you'll
1705 need to do the following:
1706 @begin<example>
1707 A>@ux(m80 cpsker=cpsker.asm)
1708 A>@ux(l80 /p:100,cpsker,cpsker/n/e)
1709 @end<example>
1710 This will produce @Q(CPSKER.COM).
1711
1712 If you are using LASM instead, do this:
1713 @example(A>@ux<lasm cpsker>)
1714 LASM will generate @Q(CPSKER.HEX) and @Q(CPSKER.PRN). LASM allows options to
1715 be specified in the same way as the standard assembler, ASM, so the command
1716 @example[A>@ux(lasm cpsker.abz)]
1717 will read the source files from drive A, send the @q(.HEX) file to drive B,
1718 and suppress the listing file.
1719
1720 If you are using the Z80MU development system on an IBM PC or clone, then
1721 assemble your files using either LASM and MLOAD or M80 and L80, as if you
1722 were using a genuine CP/M-80 system. Note that you will still have the
1723 problem of transferring your assembled files to the target CP/M system.
1724
1725 If you want to generate a system-@|dependent overlay for a particular system,
1726 or want to change the terminal supported, you'll need to check three areas in
1727 @Q(CPXTYP.ASM):
1728
1729 First, the overlay start ADDRESS. The symbol "ovladr" is EQUated to the
1730 address of "LNKFLG" in the system-@|independent module, as the starting address
1731 of the overlay (7000H for version @value(-cpmversion)). You'll need to know
1732 this value if you're building the overlay with M80/L80. You won't normally
1733 need to change this value.
1734
1735 Second, the assembler being used. Again, define one of MAC80, M80, and LASM
1736 to be TRUE to select it, and define the others to be FALSE. The two modules
1737 (system-@|independent and system-@|dependent) do not need to be built with the
1738 same assembler.
1739
1740 Third, the system configuration. Locate your system in tables
1741 @ref<-cpmsystems1> and @ref<-cpmsystems2>, then define the appropriate symbol
1742 TRUE, and the rest FALSE. If the system comes with a builtin console terminal,
1743 define all the terminal switches FALSE. If the system uses an external
1744 terminal as the console, locate the terminal in table @ref<-cpmterms> and
1745 define the appropriate symbol TRUE, and the remainder FALSE. If the terminal
1746 is not listed in table @ref<-cpmterms>, use the CRT switch; in this case, VT52
1747 emulation is not supported.
1748
1749 In addition, there are a few general and system-@|specific symbols which may
1750 be altered to fit your system:
1751 @begin<description>
1752 APSLOT@\For Apple with 6551 ACIA, defines the slot number of the serial card
1753
1754 CPUSPD@\Processor speed in units of 100KHz (currently used only for bbII and
1755 kpII for timing loops)
1756
1757 TAC@\For users connecting through ARPAnet TACs: set to TRUE if you wish the
1758 default TACTRAP status to be ON. (This may be overridden with the SET TACTRAP
1759 command). If you're not connecting through a TAC, set tac to FALSE and ignore
1760 tacval.
1761
1762 TACVAL@\For ARPANET TAC users: defines the default TAC intercept character
1763 (may be overridden with the SET TACTRAP command).
1764 @end<description>
1765
1766 If you are just assembling an existing configuration, you'll need to edit
1767 @Q(CPXTYP.ASM) only. If you are adding support for a new system, you should
1768 not modify @Q(CPSDEF.ASM) or @Q(CPXLNK.ASM); if you do, you'll have to change
1769 the system-@|independent module also. Eventually, @Q(CPXSYS.ASM) will be split
1770 into separate files, each of which will generate one or more related systems.
1771 When this happens, you'll want to pick the one closest to your system to use as
1772 a starting point.
1773
1774 After editing @q<CPXTYP.ASM> as necessary, assemble and link the overlay as
1775 follows:
1776 @begin<itemize>
1777 With M80 (where "xxxx" is the hex value of ovladr from @q<CPXLNK.ASM>):
1778 @begin<example>
1779 A>@ux<m80 cpxtyp=cpxtyp.asm>
1780 A>@ux<l80 /p:xxxx,cpxtyp,cpxtyp/n/x/e>
1781 @end<example>
1782
1783 With LASM:
1784 @begin<example>
1785 A>@ux<lasm cpxtyp>
1786 @end<example>
1787 @end<itemize>
1788
1789 With an IBM PC or clone using the Z80MU softwrae, follow the instructions
1790 as if you were using a real CP/M system.
1791
1792 The overlay (@q(CPXTYP.HEX)) may then be merged with the system-@|independent
1793 module as described above (creating a runnable Kermit from the distribution
1794 kit).
1795
1796 If you are using the Z80MU
1797 development system on a PC, and already have a running
1798 Kermit-80 v3.9 or later, you can merge the two @q<.HEX> files into a @q<.COM>
1799 file with LINK80 (TOPS 10/20), MLOAD (Z80MU), L80 (Z80MU), and
1800 transfer the new @q<.COM> file to your micro with Kermit:
1801 @begin<itemize>
1802 Z80MU on a PC and MLOAD:
1803 @begin<example>
1804 @@@ux<MLOAD KERNEW=CPSKER,CPXTYP>
1805 @end<example>
1806
1807 Z80MU on a PC and C80:
1808 @begin<example>
1809 @@@ux<L80 /P:xxxx,CPXTYP,CPXTYP/N/X/E>
1810 @end<example>
1811 @end<itemize>
1812 producing @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>
1819 crt@\Basic CRT, no cursor positioning
1820 adm3a@\ADM3A Display or lookalike
1821 adm22@\ADM22 Display or lookalike
1822 am230@\Ampro 230
1823 h1500@\Hazeltine 1500
1824 smrtvd@\Netronics Smartvid-80
1825 soroq@\Soroq IQ-120
1826 tvi912@\TVI 912
1827 tvi925@\TVI 925, Freedom 100
1828 vt52@\VT 52 or VT52 emulator such as Heath H19, H29, etc.
1829 vt100@\VT 100 or emulator (most ANSI terminals should work)
1830 wyse@\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>
1837 Kermit-80 is built from a common set of source files; the system-@|dependent
1838 module makes heavy use of conditional assembly (this complication will be
1839 removed in future releases). The system dependencies arise from attempts to
1840 answer some questions:
1841 @begin<enumerate>
1842 @i<What kind of terminal is to be supported?>
1843 @blankspace(1)
1844 For many micros, the console is an integral part of the system, but
1845 others can use an external terminal. In either case, the commands
1846 to manipulate the screen (position the cursor, erase the screen, etc)
1847 must be defined.
1848
1849 @i<How is the serial line accessed?>
1850 @blankspace(1)
1851 For systems supporting the IOBYTE function, this is straightforward; the
1852 symbol "IOBYT" is defined TRUE. If the serial line is accessed with IN and OUT
1853 instructions, it may be possible to use the simple I/O routines provided. In
1854 this case, the symbol "INOUT" is defined TRUE, the MNPORT and MNPRTS are
1855 defined to be the data and control addresses, respectively, and bit masks for
1856 testing for "input data available" and "output buffer empty" must be defined.
1857 If the interface is strange, leave IOBYT and INOUT set to FALSE, and provide
1858 the I/O routines.
1859
1860 @i<What initialization is necessary?>
1861 @blankspace(1)
1862 You may wish to set the baud rate or configure the serial line at
1863 startup. Examples for a number of devices are present.
1864
1865 @i<What special features are to be supported?>
1866 @blankspace(1)
1867 You may want to provide the capability to select one of several serial lines
1868 with the SET PORT command, or to change the speed of the serial line with the
1869 SET SPEED command. To do this, you'll need to build a command table, using
1870 the systems already supported as examples. The ability to send a BREAK signal
1871 is desirable. Again, examples for several different interfaces (ACIA, SIO,
1872 etc) are present.
1873
1874 @i<Do you want to design an external terminal type?>
1875 @blankspace(1)
1876 There is a jump entry in the overlay file to allow users to add their
1877 own termainl emulator. If you write the code for such an emulator,
1878 you must load this jump address with the address of your emulator, and
1879 SET TERMINAL EXTERNAL from within Kermit. All characters will be passed
1880 to this routine during connect mode.
1881 @end<enumerate>
1882
1883 @section<Notes on New Features in Kermit-80 Version 4>
1884
1885 @begin<itemize>
1886 @i(Debugging aids:)
1887 SET DEBUG ON will add two fields to the SEND/RECEIVE display, labelled "Spack"
1888 and "Rpack". These display the last packet sent and received. Of course, this
1889 slows down the transfer, especially if the console is an external terminal.
1890 SET DEBUG OFF removes these fields. The VERSION command displays the name,
1891 edit number, and edit date of several of the modules that make up Kermit.
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
1896 terminal concentrators, modems, port contention units, network PADs, etc) use a
1897 printing character (like "@@") as an intercept character, to allow commands to
1898 be issued to the TAC, or modem, etc. In order to send this character to the
1899 host, it must be typed twice. The command "SET TAC CHARACTER" to Kermit
1900 enables the "TACtrap" and asks the user to specify the TAC intercept character.
1901 This character will be automatically doubled when it appears in Kermit protocol
1902 messages (sent by the SEND or RECEIVE commands) or when it appears in a file
1903 being sent with the TRANSMIT command. It is not automatically doubled when
1904 typed by the user in CONNECT mode. "SET TAC ON" enables the TACtrap but does
1905 not change the TAC intercept character, which is initially "@@". "SET TAC OFF"
1906 disables the TACtrap.
1907
1908 @i(File buffering:)
1909 Previous versions of Kermit-80 buffered only one sector (128 bytes) at a time
1910 during file transfer operations. This version buffers 16Kbytes at a time,
1911 reducing the number of times the floppy drive must be spun up and down, and
1912 increasing the effective throughput of the link. If the disk transfer rate is
1913 too slow, however, the remote Kermit may time out and retransmit packets. This
1914 will show up on the screen in the "Retries:" field; if this occurs after disk
1915 activity, you may want to increase the timeout value on the remote Kermit,
1916 SET BUFFER <new value> while in Kermit,or
1917 reassemble Kermit with a smaller value for MAXSEC (in @Q(CPSDEF.ASM))
1918 This buffer is also used by the TRANSMIT command; the log file
1919 enabled by the LOG command is still written a sector at a time.
1920 @end<itemize>
1921
1922 @Comment<for Assembling Kermit-80)
1923
1924 @section<Specification for Kermit-80 System Dependent Modules>
1925
1926 This section is intended for people wanting to implement their own
1927 versions of Kermit-80 for computers not already defined.
1928
1929 The system independent code communicates to routines for a specific
1930 system through a set of tables. These tables are defined in
1931 CPXLNK.ASM, and should not be modified between revisions of Kermit. If
1932 an entry is added or deleted, then the whole of Kermit-80
1933 needs reassembling. Make sure that the changes to CPXLNK.ASM are
1934 duplicated in CPSUTL.ASM, which has the system independent
1935 equivalent of CPXLNK.ASM.
1936
1937 The following entries/definitions apply to revision 4.09. There
1938 have been three additional entries since revision 4.05.
1939
1940 The table is split into three sectors; The first section defines
1941 two byte "words" giving 16 bits of interface data; The second set is a
1942 set of jumps to various functions, and finally the third set
1943 a set of pure data bytes.
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
1951 byte address giving the size of the linkage table. This is used to
1952 check for consistency of overlay's
1953 @blankspace(1)
1954
1955 @ux<ENTSIZE>@\Length of entry table, also used for consistency checking after
1956 the overlay. Currently 6
1957 @blankspace(1)
1958
1959 @ux<SYSEDT>@\The address of a dollar-terminated string giving the overlay
1960 revision level and date. Points to a string like:
1961 CPXSYS.ASM(33) 4-JUN-1986$
1962 @blankspace(1)
1963
1964 @ux<FAMILY>@\The address of a dollar-terminated string giving the Family overlay
1965 revision level and date. If the system is in CPXSYS.ASM rather than a
1966 particular Family overlay, it is simply a pointer to $
1967 @end<description>
1968 @blankspace(1)
1969
1970 @subsection(Jump Table.)
1971 This is split into three main sectors-
1972 @blankspace(1)
1973
1974 @begin(enumerate)
1975 Input/Output routines
1976
1977 Screen formatting routines
1978
1979 other 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
1992 simply 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
2002 line. 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.
2012 HL,DE,BC registers preserved, flags
2013 and 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
2023 modem. 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
2034 systems, 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
2044 system responding in an odd manner should be handled. No
2045 registers 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
2056 no 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
2067 selected. 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
2078 character to be printed. If a 00H is returned then the printer is
2079 ready 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
2086 in the E register
2087
2088 @i<Returns>@\None
2089
2090 @i<Description>@\If the user has supplied a terminal emulator in the overlay
2091 code, EXTTER will be a JMP <non zero address>. If SET TERMINAL EXTERNAL
2092 has been set, all caharcters will be passed verbatim to this terminal
2093 emulator. If there is no external emulator, this code will never be called.
2094 The user should reset terminal conditions on initialisation of both
2095 the system and before CONNECT. All registers should be preserved.
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
2106 check the printer status etc. For full details see the code for the
2107 BDOS trap in CPSUTL.ASM.
2108 @blankspace(1)
2109 2b)
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
2140 do 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
2161 after 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
2173 file 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)
2241 2c)
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
2250 are preserved. Any initialization is done once only when Kermit-80
2251 is 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
2263 in 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
2297 during the connect state. If a system has any special feature it
2298 can use during connect mode, then it can be tested as
2299 <escape-character>xxx. This entry is a string for printing
2300 to the console for an <escape-character>? Often used for
2301 generating breaks or controlling a modem.
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
2313 sequence not understood by Kermit-80. If the character in A is
2314 not recognized by your version of Kermit=80, do a rskip
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
2326 the 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
2339 up 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
2351 contains the two byte value from the baud rate table. This value is
2352 also 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.
2364 The 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
2376 version string is pointed to by DE. If the terminal is not capable of
2377 cursor addressing (eg dumb glass TTY) then only the screen is cleared
2378 and the version string is printed.
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
2390 LH corner of screen. The routine should first end a "cursor
2391 position" leading string (up to four characters) then use the
2392 parameters given to complete the versions cursor position function
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
2404 drive. This could be in the system independent code. Automatically
2405 detects 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
2421 do 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)
2432 3)
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
2442 not exist
2443
2444 @blankspace(1)
2445 @ux<SPDHLP>@\WORD@\Address of baud-rate help table, or 0 if SET SPEED
2446 is 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
2456 system (depends largely on CPU speed)
2457
2458 @blankspace(1)
2459 @ux<VTFLG>@\BYTE@\VT52 emulation flag. Set to 0 if terminal
2460 emulates a VT52, 01 if emulation is required, or 0FFH if emulations not
2461 possible (eg for "CRT")
2462
2463 @blankspace(1)
2464 @ux<ESCCHR>@\BYTE@\default escape character-usually control-] but
2465 sometimes control-\
2466
2467 @blankspace(1)
2468 @ux<SPEED>@\WORD@\Storage space for baud-rate. Set to 0FFFFH as baud
2469 rates are initially unknown. Note that the STATUS routine only looks at the
2470 first (least significant) byte.
2471
2472 @blankspace(1)
2473 @ux<PORT>@\WORD@\Storage space for port. Set to 0FFFFH as ports may
2474 not be implemented, and is initially unknown
2475
2476 @blankspace(1)
2477 @ux<PRNFLG>@\BYTE@\Printer copy flag-if O no copy. Anything else =>
2478 copy 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
2489 overwrite files already existing on disk with some-named files
2490 being 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.
2497 Default 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
2561 for ARPA TAC users, where the TAC swallows one "wakeup" character. If
2562 sent twice the TAC will pas one on and go back to normal mode.
2563
2564 @blankspace(1)
2565 @ux<TACCHR>@\BYTE@\Desired TAC character. It is ignored if TAC trapping
2566 is turned off. Value to send twice if TAC interception is set on.
2567 Default=0, but set to commercial AT if the conditional assembly flag TAC
2568 is 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.
2575 Default is 1. (0=256 sectors).
2576
2577 @blankspace(1)
2578 @ux<FFUSSY>@\BYTE@\Indicates if funny characters may be used in CP/M
2579 file names (eg @q{<>.,;?#[]}) If zero, allow anything. Default is nonzero.
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
2600 Work that needs to be done in future releases includes:
2601 @begin<itemize>
2602 Merge in support for additional CP/M-80 systems, particularly those for
2603 which support was recently added to the monolithic v3.x source.
2604
2605 Break up @q<CPXSYS> into discrete source files, one for each system.
2606 These source files should serve as simple models for adding support for
2607 new systems to Kermit-80 -- only the very basic screen definitions, flags,
2608 i/o primitives, initializations, and so forth should appear in each
2609 system-@|dependent file.
2610
2611 Addition of missing features -- compression of repeated characters during
2612 packet transmission, transmission of file attributes (particularly size, so
2613 that "percent done" can be displayed for both incoming and outbound files),
2614 command macros, more advanced login scripts, remote operation and server mode,
2615 etc etc. Any offers??
2616 @end<itemize>