]>
Commit | Line | Data |
---|---|---|
c25f6a44 L |
1 | @Part(CPKERM,root="kuser") |
2 | @string(-cpmversion="@q<4.11>") | |
3 | @Chapter<CP/M-80 KERMIT> | |
4 | @index<CP/M-80 Kermit> | |
5 | ||
6 | @case(device,file="********@* | |
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> |