MSKERMIT for the RMX Operating Systems INTRODUCTION MSKERMIT, the richest and most widely used implementation of KERMIT for the small computer, has been ported to iRMX86 and iRMX286. A DOS emulator provides enough of the DOS environment to allow the essentially unchanged MSKERMIT code to run under both of the RMX Operating Systems. This document discusses differences between KERMIT and MSKERMIT, where KERMIT refers to the RMX version and MSKERMIT refers to the DOS program. Users unfamiliar with MSKERMIT may prefer to read this in conjunction with MSKERM.DOC. KERMIT's initialization command file, called MSKERMIT.INI in MSKERM.DOC, is called KERMIT.INI for RMX. Wherever MSKERM.DOC refers to the BACKSPACE key, the RUBOUT or DEL key is used in RMX. Directions for installation and configuration are included at the end of this document. FEATURES NOT IMPLEMENTED PUSH has not been implemented. Unlike the DOS implementations, there is nothing that could be done with PUSH that can't be done with RUN. VT102 and Heath/Zenith-19 terminal emulation, as well as all of the SET TERMINAL commands have not been implemented. You can use the terminal of your choice and configure KERMIT to work with it. You cannot transmit a break to the remote computer. Although some serial communication board's firmware supports sending breaks, the RMX Terminal Support Code does not. PATH AND FILE NAMES KERMIT will accept any RMX path or file name with one exception. If the right-most path separator is ^, it must be followed by a redundant /. For example: DIR ^/UNCLE.FILE and DIR ^UNCLE.FILE are the same in RMX, but only the first will work in KERMIT. MSKERMIT doesn't recognize ^ as a path separator, so we have to fool it. Wherever KERMIT accepts a wild card file specification, a list of file names may be used, as long as they are all in the default directory. For example: SEND READ.ME.FIRST,*X*.A*,*.OBJ,ETC.ETC works. Try to say that in DOS. When KERMIT is in SERVER mode, operating as the "remote" KERMIT, it will respond to a GET file-name-list from the "local" KERMIT. KERMIT will rename incoming files to match DOS naming rules. It's still basically a DOS program. The command: SEND , is an extension to MSKERMIT that tells KERMIT to send those files unsent from the previous wild card batch. If you are well into a SEND *, when you lose your connection to the remote computer, you can "SEND ,", after you reestablish your connection, and the SEND will be resumed with the next file from the wild card batch. The interrupted file will have to be sent individually. USAGE NOTES The KERMIT TYPE command is the RMX COPY command. The KERMIT DEL command is the RMX DELETE command. KERMIT will accept any RMX DIR command. This applies to SERVER mode response to REMOTE DEL, REMOTE DIR, and REMOTE TYPE. Examples: TYPE SAMPLE.FILE TO :LP: DEL * Q DIR $ FOR *.P86 L Continuation can be used with the RUN command. For example: RUN ATTACHDEVICE T4 AS COM2 & RUN PHYSICAL is equivalent to: RUN ATTACHDEVICE T4 AS COM2 PHYSICAL If ^W is used for a paging display while in the command being RUN or in DEL, DIR, SPACE, or TYPE, the Terminal Support Code will deadlock the system. SET DEFAULT-DISK will accomplish nothing. Use the KERMIT CWD command to change disk drives and/or directories. The CWD command is not the same as the RMX ATTACHFILE command. Use CWD :HOME: where you would simply say ATTACHFILE. Upon exit, KERMIT returns you to the same $ directory you were in when you called KERMIT. The kermit action verbs available for SET KEY are \Kexit (exit connect mode), \Khelp (connect mode help), \Kstatus (STATUS command), \Klogoff (suspend logging), \Klogon (resume logging), \Khangup (HANGUP command), and \Knull (send the null character out the serial port). These kermit action verbs are best bound to keys that send characters in the 80-0ffh range or control characters unused in your dialog with the remote computer. The scan codes for keys whose codes are 80h through 0ffh are \X180 through \X1ff. While SET DESTINATION PRINTER works, it is very slow. The line printer driver hogs the processor, as a result, simultaneous read/write/compute is not possible. It's probably quicker to receive to disk and then copy to the printer. KERMIT is a Human Interface command. When invoked from another program, it should be by sendcommand rather then loadiojob. KERMIT's exit status is returned as the user fault code of exitiojob and is available as the command exception when KERMIT is invoked by sendcommand. If non-zero, the high byte is 40h; the low byte contains the values mentioned in MSKERM.DOC, with an additional value of 0ffh meaning that KERMIT bombed gracefully. KERMIT has the appearance of being a CPU hog; the green light burns bright and steady. Actually, in the default, KERMIT has simply substituted itself for the idle task. KERMIT uses a scratch file to implement wild cards and REMOTE server commands that return information. Failure to exit KERMIT, such as hanging up in the Terminal Support Code or re-booting while in KERMIT, will result in an fnode and possibly some blocks becoming allocated but unreferenced. The fnode and blocks can be freed using DISKVERIFY. SERIAL PORTS There are ten serial ports, 0 through 9. Port 0 corresponds to :TERM:. Port n, for n > 0, corresponds to logical name :COMn: or :Tn:. At startup, KERMIT looks for the first of ports 1 through 9. If none are found, a warning message is issued and port 0 is used. When a port whose physical device name is the same as :TERM:'s is selected, KERMIT changes the display mode to QUIET to prevent screen displays from conflicting with serial communication. When a port is selected that changes from a one port to two port state, the display mode is restored to its previous value. The RMX Terminal Support Code hangs up when a DTE configured port is active and you either plug or unplug the RS-232 cable. The RMX Terminal Support Code, when operating with unbuffered serial boards such as the 8251, can accept only a few characters at 9600 baud before losing some. KERMIT can send at 9600 baud through such boards, but receiving is limited to 4800 baud. It can connect to a remote computer at 9600 baud, but will drop some characters if they are sent faster than fast typing speed. There should be no baud rate problems up to 19200 baud with buffered serial I/O boards, such as the 544 or 188/48. RMX86 R6 and RMX286 R1 Terminal Support Code Problems The Terminal Support Code fails to wait for I/O completion when a connection is closed. When in SERVER mode using an unbuffered serial board at lower baud rates, the acknowledgement packet to a FINISH or BYE command from the Kermit at the other end gets chopped off and the local Kermit will report a failure of the FINISH or BYE. For middle and higher baud rates, 1200 and up for the 86/30, the TSC doesn't overlap read and compute. The consequences are most noticeable in connect mode, when nothing will appear on the screen until the either the remote host stops sending or is XOF'd. Serial I/O results in system clock slow down. No, it's not relativity, it's probably great yawning chasms of code enclosed in CLI/STI brackets in the TSC. To solve these problems, use a later release of RMX. SINGLE PORT OPERATION You can use KERMIT on a single port system, if you have another computer that you can connect directly to it. For example, connect your RMX system to a PC's COM port in place of your terminal. Call up KERMIT on the PC, set the baud rate to match your RMX system, and connect to it. Use the PC as the RMX terminal. If there are no logical names :COMn: and :Tn:, where 0 < n < 10, KERMIT will automatically select port 0 and change its default display mode to "quiet", which is necessary for one port operation. If your system is an 8086 and you want to receive files, SET BAUD 4800 before issuing the SERVER command (see above, under serial ports). The baud rate change won't take effect until the SERVER command. After issuing the SERVER command escape back to the PC's KERMIT, resetting it's baud rate, if necessary, and use SEND or GET for file transfer. When done, issue the FINISH command, reconnect to KERMIT, and exit to the system. The terminal's baud rate and other attributes will be restored to their initial values. If you want to continue using the PC as a terminal, you may have to escape back to the PC to change its baud rate and reconnect. In one port operation, KERMIT refuses to CONNECT. You may alternate use of port 0 with other ports and KERMIT will change display modes for you automatically. INSTALLATION KERMIT and, if you want to do wild card sends, the auxiliary WC command should be copied to one of the default search directories. The logical choice is :UTILS:, though they both needn't be in the same directory. If all you have is the source for WC, WC.P86, its comment header contains SUBMIT file contents to make the command. The WC command isn't otherwise totally useless. Try entering "WC ?able,movie*" as an alternative to "DIR $ FOR ?able,movie*". CONFIGURATION Configuration is optional. The configuration file, KERMIT.CFG (actually it's '.CFG' suffixed to whatever you call KERMIT), follows the rules for KERMIT TAKE files with one configuration command per line. KERMIT looks for KERMIT.CFG first in your default directory, $. If not found, it looks in the directory from which KERMIT was loaded. Suppose you install KERMIT by copying it to :UTILS:TOAD. The search would be, first :$:TOAD.CFG, then, :UTILS:TOAD.CFG. A system requiring configuration for different brand terminals or for different remote hosts can configure them all by using a different default directory for each. In the following configuration command descriptions, upper case is used for literal keywords, n refers to a decimal number, and \n refers to a number in KERMIT backslash notation, i.e. '\' followed by an optional case insensitive radix letter followed by the number. Radix letters are D for decimal, X for hexadecimal, and O for octal. If omitted, the radix defaults to decimal. OSC string OSC is used to configure KERMIT to your terminal using OSC sequences (see RMX86 Release 6 or RMX286 Release 1, BIOS App. F; or RMX86 Release 7 or RMX286 Release 2, Device Drivers User's Guide, Section 2.3). If your terminal is set to send space or no parity and is VT100 compatible or you use SET DISPLAY SERIAL or QUIET, it is unnecessary. First you must decide if the regular screen formatted display during file transfers is what you want. The RMX Terminal Support Code is reluctant to permit transparent input when translation is enabled. As a consequence, you have the choice between a decent screen format during file transfer, or a fully functional keyboard. When you choose the acceptable screen format, RMX holds up the escape key for one extra keystroke, and if ^E, ^X, or ^Z are needed for terminal configuration (several terminals use ^Z for clear screen), they won't work as escapes during file transfer. Also, file transfer is quicker with a SERIAL or QUIET display. On the other hand, opting for the keyboard results in a hideous screen during file transfer, unless you SET DISPLAY SERIAL or QUIET. The string is a valid and complete OSC sequence WITHOUT the ESC [ lead-in or ESC \ terminator. Any number of OSC commands may be used as long as each is complete and independent. If your terminal sends even, odd, or mark parity, include T:R=0 in your OSC to strip parity from terminal input. In this case you will not be able to use SET KEY for characters greater than 7fh, but then, you couldn't anyway. The following example illustrates an OSC command sufficient for KERMIT screen displays. It configures KERMIT for the Qume QVT102, Televideo 910 Plus, 912, 920, 925, & 950, and Zentec Zephyr & Cobra terminals. Let's look at it to see how OSC configuration works. OSC T:T=1,F=1,U=32,E6=93,E30=75,E31=116 T=1 enables translation F=1 vertical cursor coordinate precedes horizontal U=32 value for cursor row or column 1. 32 is the code for space E6=93 translate cursor positioning to ESC = E30=75 translate clear screen to ESC + E31=116 translate clear to end of line to ESC T Referring to the manual for your terminal and BIOS Tables F-4 and F-5 or DD Tables 2-3 and 2-4, edit the above to match your terminal. TRANSLATE By default, KERMIT disables TSC translation when you connect to the remote computer. The TRANSLATE command enables TSC translation in connect mode. It's possible to make your non-VT100 terminal behave like a VT100 if your mainframe's screen editor uses a subset of VT100 escapes that the TSC can translate or simulate. ESCC The ESCC command causes KERMIT to send an ESC c, the VT100 reset, to your terminal on exit. You may want to use this if you have a VT100 compatible terminal or if you are unjustifiably optimistic about the Terminal Support Code. It's use has been known to deadlock Release 6 when TSC translation is enabled. ECHO ON or OFF ECHO ON causes subsequent CFG commands and TAKE file commands, including those from KERMIT.INI, to be displayed. This is useful for associating cryptic CFG error messages with the offending line. ECHO OFF stops CFG and TAKE file echoing. BUFILL \n KERMIT's serial input is content paced against a background fill whose default value is 0ffh. Use BUFILL to change it if your remote computer can send 0ffh. Values to try include \X7f, \X80, and \0. If none of these work, you'll have to find a control character never used by the remote computer. The maximum value is 255. CIFILL \n Terminal input is content paced against an 80h background. If your terminal sends 80h, use CIFILL to change the default. See the paragraph above for suggested values. PRIORITY \n By default, KERMIT sets its priority to 254 to guarantee more (numerically lower) priority for its I/O tasks regardless of how the system it's running on has been ICU'd. This permits it to stay out of the way in multi-user systems and in background operation. The maximum value is 254. If KERMIT is included in round-robin sheduling, it will use its full time slice. SUB-PACK n This parameter tunes performance for file sending. Send packets are sent in bursts of default size 60. This optimizes send performance for an 86/30 at 19.6 KB with 1000 byte packets. Decreasing its value increases RMX overhead, while increasing it reduces write/compute overlap. Factors effecting the optimal value include the CPU board, clock rate, baud rate, and packet size as well as the performance of the remote host. The transmission time/sub-packet size function has a broad minimum. CO-DELAY n This parameter tunes connect mode performance. Output to the terminal is allowed to accumulate and is written every n system clock ticks. The default value is 6, nominally 60 ms. Increasing the value improves connect mode performance at the expense of herky-jerk terminal output. DTR-TIME n The duration, in milli-seconds, that DTR is held down by the HANGUP command. The default is 500. For the HANGUP command to work, all of the following must be true. The port must be configured DTE, the serial board must support modem control, and the system must have been ICU'd with modem control enabled for the DTE port(s). A null-modem cable with a DCE port will not permit DTR control. KILL \n Creates a "kill KERMIT" task associated with the terminal input character specified by the parameter, usually an unused control character. Useful for developers, incorporators, and anyone trying to figure out how to connect a DTE port to their remote computer for the first time. This will not solve the ^W inspired TSC deadlock. Only killing the job from another terminal or warm boot will do.