Contents ( and functionality ) of CPMGENERI.ASM This is a "first" attempt, to construct a "generic" version of KERMIT. It is in NO WAY finished yet! "Generic" KERMIT uses only CP/M calls. This brings one disadvantage and some advantages: 1. It should ( after more modifications ) run on "most" CP/M systems without major modifications. 2. It only will run at speeds up to (but NOT exceeding) 1200 Baud on the Rainbow; perhaps faster on other systems (it is known to run at 4800 buad on the VT180). How did it get done: The "standard" CP/M system allows limited assignment of "logical" devices to physical devices. This is handled by the I/O byte. The I/O byte allows one to "assign" 4 "physical" devices to 4 "logical" devices. This allows one to use the CP/M call CONSTAT ( is there a Input at the "logical" CONSOLE-device ? ) to be used for any of the "other" four assignable devices for CONSOL. One of these devices is BAT:, the BATCH device ( Input comes from "logical" device READER, Output goes to "logical" device LIST ). We use in GENERIC Kermit during CONNECT-state (terminal-emulation) and SEND/RECEIVE state the CONSOLE=BAT: assignment, to be able to "poll" for pending character-input from the physical device READER=RDR: , which is for the DEC-VT180 (aka ROBIN) and the DEC-RAINBOW the COMM-Port. To circumvent BDOS-implementation differences, we call the BIOS directly. This is accomplished in routine INIADR, which grabs location 1 and 2 ( at 0 is a JMP WARMSTART ), adds increments of 3 ( we got the second entry of the BIOS-JMP vector -- the next three entries are JMP CONSTAT, JMP CONIN and JMP CONOUT ) and plugs them into our BIOS-CALL routines. - Bernie Eiben