PIPMODEM.DOC P. L. Kelley - 10/29/82 PIPMODEM.ASM is a routine to modify CP/M-80's PIP (1) to become a communications terminal program as well as to download to your disk a text file from another computer. PIPMODEM.ASM is short enough that it can be easily typed in if you have a printed copy or be hand copied from a display terminal while in communication with a remote computer. The comments in lower case do not need to be copied. Normally only three or four equates need to be modified. 88 bytes of object code are generated. PIPMODEM.ASM makes use of PIP's :INP (input) feature. The :INP function is invoked by typing UFN=:INP to PIP (UFN stands for Unambiguous File Name). PIP reserves locations 106H-108H for a jump to a user written routine and locations 10AH-1FFH are reserved for the user written routine. The user routine RETs after loading location 109H with an input byte; PIP then stores the byte in its memory buffer and calls location 106H to get the next byte. If the user routine puts control-Z in 109H and RETs, PIP will write the memory buffer to the disk file and return to the command level. The routine is written so that the memory buffer is only loaded after control-O is typed; this allows you to log on to the remote system and search for the file before opening the memory buffer. To write the file and exit you simply type control-Z. You make the modified version of PIP as follows: 1) Use a text editor to make a disk file of PIPMODEM.ASM, be sure to change the four modem equates for you computer, note that validity checks are given at the end of this file, 2) Do the following A>asm pipmodem.aaz<cr> CP/M ASSEMBLER - VER 2.0 015C 000H USE FACTOR END OF ASSEMBLY A>ddt pip.com<cr> NEXT PC 1E00 0100 -ipipmodem.hex<cr> -r<cr> NEXT PC 1E00 0000 -g0<cr> A>save 29 pipmodem.com<cr> The lower case characters are your inputs, where <cr> stands for carriage return, and the upper case characters are the computer's responses. This routine should work on the majority of machines running CP/M. However, some warning needs to be given concerning the general validity of PIPMODEM.ASM; unfortunately, in this pluralistic world it is impossible to write a routine that is universal. Some microcomputer's have hardware which require memory mapped I/O to modems; the file will then have to be modified to load and store to memory locations instead of inputting and outputting to ports. In addition, some BIOSs poll the ports on keyboard status checks and put the input byte from the ports into a buffer where it will be lost to PIP. Other systems may use interrupts on ported input; again the input byte is buffered and lost to PIP. There are ways around these problems but the solutions vary. Not all computers you may connect your micro to behave in the way the this routine assumes; however, Bulletin Board Systems (BBSs) and Remote CP/Ms (RCP/Ms) do. If the computer you connect to doesn't echo what you send, you will need to add some code to echo to your console what you type in; this can be readily accomplished by adding a call to the BIOS console output vector after the line labeled MODOUT. If you make the line of the form CNOUT2 CALL $-$, add SHLD CNOUT2+1 just before the JMP OLDSTRT line. There are also systems to which you might connect which don't send a linefeed as well as echo a carriage return after a carriage return is sent to them; this requires additional code to test for your input of a carriage return and send a linefeed as well as the carriage return. In order to keep the program simple, to avoid getting hung up if the modem is not working properly and because no one can type as fast as a modem sends characters, no transmit ready checking was implemented. Unfortunately, the computer works faster than the modem and unless you do transmit ready checking the linefeed it sends after the carriage return will be lost. Finally, some systems require the parity bit to be set on any byte sent to them; add ORI 80 before you output but be sure to strip parity back off before you store at 109H or locally echo. Perhaps the first thing you will want to do after you have the modified version of PIP working is to communicate with an RCP/M and download the short (~10K) file MBOOT.ASM. PIPMODEM can only be used to obtain, without loss of characters, text files up to the length of PIP's memory buffer, thus, the requirement that the file transferred be short. MBOOT does error checking and can be used to obtain files of any size and type assuming the other computer has the appropriate software. Once you have MBOOT working it is then desirable to obtain an even more versatile modem program from an RCP/M, such as MODEM7XX or MODEM2XX (the X's stand for version numbers). RCP/Ms are remote CP/M microcomputers which you can call to obtain public domain software; you will find that the latest versions of popular, useful software are available. On your end you normally use MBOOT or MODEM7XX/2XX in conjunction with XMODEM on the RCP/M. The numbers of RCP/Ms can usually be found on computer BBSs. As an example of PIPMODEM's use, communication with an RCP/M, including transfer of a short text file, will be described. To use a modem you must first configure your modem ports to the proper settings; typically, 300 baud, 8 bit word, 1 stop bit, no parity. Some computers come with configuration programs which do this for you in a simple fashion. Next, do PIPMODEM MBOOT.ASM=INP: (assuming you want MBOOT.ASM). Call up an RCP/M, connect your modem to the telephone and hit RETURN a few times. If the remote computer responds you will get a message and, depending on the system, the RCP/M operating program may go directly to CP/M so that it appears that you are at the remote system's console or you may be led to CP/M through a bulletin board program. After you have searched the disks/user areas for MBOOT.ASM, do control-O then TYPE MBOOT.ASM. MBOOT.ASM will be displayed on your console. When the type out is finished and the remote system gives you its CP/M prompt, type control-Z. MBOOT.ASM will then be written to your disk. Hang up the telephone; the RCP/M operating program will sense the loss of your modem carrier and will recycle for the next caller. Be sure and edit out the extraneous commands, prompts, etc. at the beginning and end of the file. Before you assemble PIPMODEM.ASM make a note of the following checks on the validity of your copy. There are: 1) 8 EQUates, 2) an ORG statement, 3) 40 lines of assembly code, and 4) an END statement. The file generates code up to the location before 15CH. (1) CP/M-80, PIP, ASM, and DDT are products of Digital Research Inc.