IMD 1.16: 8/06/2007 11:54:04 ebmmug.003 eastbay micromate users' group mdm730/740 s&d newsweep205 disk issued: june 7, 1984 PAT730 V5 ;SMEXEC ASM SMEXEC ASM\SMARTE ASM !"#$%&'()*+SMARTE ASM=,-./01234567MDM730S COM89:;<=>?@APRTCOL CISsBCDEFGHIPATMD4 COM!JKLMNOPQRSTM7LIB COMUMDM730D COMVWXYZ[\]^_MDM730 MSG `aMDM730 UPDbcEBMDIR03TXTdRCPM49 LSTfghijklmnopqrstuRCPM49 LST = SHIFT INTO PROTOCOL MODE SO EQU 0EH ; = SHIFT OUT OF PROTOCOL MODE] ; PROTOCOL MODE IMPLIES THAT SEQUENCES ; ARE NOT SENT TO CONSOLE BUT ARE USED TO CONTROL ; THE UP/DOWN LOAD PROTOCOL DC1 EQU 11H ; CONTROL-Q: RESUME TRANSMISSION DC2 EQU 12H ; CONTROL-R: PRINTER ON DC3 EQU 13H ; CONTROL-S: STOP TRANSMISSION DC4 EQU 14H ; CONTROL-T: PRINTER OFF KNAK EQU 15H ; DLE EQU 10H ; (TRANSPARACY FLAG) ESC EQU 1BH ; ESCAPE EOF EQU 1AH ; ^Z (CP/M END OF FILE) CR EQU 0DH ; LF EQU 0AH ; FF EQU 0CH ; MON EQU 18H ; ^X (RETURN TO CP/M) (& DISCONNECT PMMI) ; CP/M EQUATES BDOS EQU BBASE+0005H ; MAIN ENTRY POINT FOR CP/M TFCB EQU BBASE+005CH ; DEFAULT FILE CONTROL BLOCK TBUFF EQU BBASE+0080H ; DEFAULT FILE BUFFER TBASE EQU BBASE+0100H ; TRANSIENT BASE ; DEFINE OFFSETS INTO FILE CONTROL BLOCK (FCB) FCB$ET EQU 0 ; ENTRY TYPE FCB$FN EQU 1 ; FILE NAME (8 BYTES) FCB$FT EQU 9 ; FILE TYPE (3 BYTES) FCB$RC EQU 15 ; RECORD COUNT (CURRENT EXTENT) FCB$DM EQU 16 ; DISK MAP FCB$NR EQU 32 ; NEXT RECORD NUMBER TO READ OR WRITE ; BDOS FUNCTIONS: FN$SR EQU 0 ; SYSTEM RESET FN$RC EQU 1 ; READ CONSOLE FN$WC EQU 2 ; WRITE CONSOLE FN$RR EQU 3 ; READ READER FN$WP EQU 4 ; WRITE PUNCH FN$WL EQU 5 ; WRITE LIST FN$IS EQU 7 ; INTERROGATE I/O STATUS FN$AS EQU 8 ; ALTER I/O STATUS FN$PCB EQU 9 ; PRINT CONSOLE BUFFER FN$RCB EQU 10 ; READ CONSOLE BUFFER FN$CCS EQU 11 ; CHECK CONSOLE STATUS FN$LDH EQU 12 ; LIFT DISK HEAD FN$RDS EQU 13 ; RESET DISK SYSTEM FN$SD EQU 14 ; SELECT DISK FN$OPN EQU 15 ; OPEN FILE FN$CLS EQU 16 ; CLOSE FILE FN$SF EQU 17 ; SEARCH FIRST FN$SN EQU 18 ; SEARCH NEXT FN$DEL EQU 19 ; DELETE FILE FN$RDR EQU 20 ; READ DISK RECORD FN$WDR EQU 21 ; WRITE DISK RECORD FN$CRE EQU 22 ; CREATE FILE FN$REN EQU 23 ; RENAME FILE FN$IL EQU 24 ; INTERROGATE LOGIN FN$ID EQU 25 ; INTERROGATE DISK FN$SDA EQU 26 ; SET DMA ADDRESS FN$IA EQU 27 ; INTERROGATE ALLOCATION ORG TBASE  START: JMP START0 ; NORMAL START INISIO: JMP SIOINI ; INITIALIZE MODEM UART GETSIO: JMP SIOGET ; GET CHAR FROM MODEM UART PUTSIO: JMP SIOPUT ; PUT A CHAR TO MODEM UART ; response for this executive: IF OTHER SYSID: DB '#CPMHayes,HC,PA,PL',CR,00 ;(ignore ASM error if SMODEM) ENDIF IF HZ89 SYSID: DB '#CPMHeath/Zenith,CC,HC,PA,PL',cr,00 ;(ignore ASM error if SMODEM) ENDIF IF SMODEM SYSID: DB '#CPMHayes,HC,PA,PL',CR,00 ENDIF IF PMMI SYSID: DB '#CPMPMMI,CC,HC,PA,PL',CR,00 ENDIF IF APLCPM SYSID: DB '#CPMApple,HC,PA,PL',CR,00 ENDIF ; CC = Cursor Control ; Implies following cursor controls: ; cursor up ; cursor down ; cursor right ; cursor left ; cursor home (line 1, column 1) ; erase to end of screen ; erase to end of line ; erase screen and home cursor (also ) ; position cursor to line L column C ; HC = Hard Copy ; Implies following: ; (^R, 022 octal, 12 hex) enable printer; subsequent data ; will be copied to local printer ; (^T, 024 octal, 14 hex) disable printer ; disable terminal display ; enable terminal display ; PA = A Protocol ; Implies file transfer capability using the CompuServe A protocol ; PL = Load Protocol ; Implies ability to load code segments under the CompuServe L protocol START0: LXI SP,STACK ; SET UP OUR OWN STACK MVI C,FN$ID ; GET CURRENT CP/M DISK DRIVE CALL BDOS STA CPMDEF LHLD BBASE+1 ; GET START OF BIOS XCHG LXI H,3 ; OFFSET TO CONSOLE CHECK DAD D SHLD TRMGET+1 ; STORE ADDRESS LXI H,6 ; OFFSET TO CONSOLE READ DAD D SHLD TERMRD+1 IF USEBIOS LXI H,9 ; OFFSET TO CONSOLE WRITE DAD D SHLD TERMWR+1 ENDIF IF NOT APLCPM LXI H,2AH ; OFFSET TO LIST STATUS DAD D ; MUST BE IMPLEMENTED IN BIOS SHLD LSTST+1 ; FOR PRINT BUFFERING TO WORK ENDIF XRA A ; DISABLE PRINTER OUTPUT STA PRTFLG STA SIFLAG ; NO SEEN IF SHOXFR  STA SHOFLG ; Don't come up in "show transfer" ENDIF ; mode! CALL INISIO ; INITIALIZE MODEM UART ; TERMINAL EMULATOR LOOP TERM: CALL LOSS ; CHECK FOR LOSS OF CARRIER CALL TRMGET JZ TSTSIN CPI MON ; IF USER WANTS TO RETURN TO CP/M IF PMMI OR APLCPM OR SMODEM JZ DISCON ; DISCONNECT MODEM CPI ENQ ; IF ^E ENDIF JZ BBASE ; THEN JUST EXIT CPI DC2 ; IF ^R JZ PRTON ; THEN TURN PRINTER ON CPI DC4 ; IF ^T JZ PRTOFF ; THEN TURN PRINTER OFF CPI ESC ; IF ESCAPE JZ LOCALP ; THEN GO DO LOCAL PROCESSING CALL PUTSIO ; ELSE PUT CHAR OUT TO SIO TSTSIN: CALL GETSIN ; ELSE GET A CHAR FROM SIO JZ TSTPRT CPI DLE ; IF JZ ISDLE ; THEN PROCESS CPI SI ; IF JZ ISSI ; THEN PROCESS CPI SO ; IF JZ ISSO ; THEN PROCESS CPI ESC ; IF JZ ISESC ; THEN GO PROCESS ESCAPE SEQUENCE CPI DC2 ; IF ^R JZ PRTON ; THEN TURN PRINTER ON CPI DC4 ; ELSE IF ^T JZ PRTOFF ; THEN TURN PRINTER OFF IF HZ19 ; IF RUNNING A H/Z-19 CONSOL CPI FF ; THEN IF CHAR IS JZ FFHZ19 ; THEN MAP IT TO ENDIF NOTSIM: CALL TERDSP ; DISPLAY/PRINT CHARACTER TSTPRT: LSTST: IF NOT APLCPM CALL 0000 ; MODIFIED TO LIST STATUS ORA A JZ TERM ; IF PRINTER IS BUSY ENDIF IF APLCPM LDA PCTL ANI PRDY JZ TERM ; IF PRINTER IS BUSY ENDIF ; THEN CONTINUE TO SERVICE THE ; KEYBOARD & MODEM AT HIGH POLLING RATE LHLD HEAD ; GET HEAD POINTER XCHG LHLD TAIL ; AND TAIL POINTER CALL DEHLCMP ; SEE IF THEY ARE EQUAL JZ TERM ; IF SO, BUFFER IS EMPTY, SO EXIT PUSH H ; SAVE TAIL POINTER MOV A,M ; GET THE CHAR ANI 7FH ; STRIP PARITY LXI H,LINCNT ; POINT TO LINE COUNTER CPI FF ; IF FF JZ NEWPAGE ; RESET LINE COUNTER CPI LF ; IF LF JNZ OUTP ; DECREMENT LINE COUNTER DCR M ; IF ROOM LEFT ON PAGE JNZ OUTP ; OUTPUT THE LF NEWPAGE MVI M,PAGLEN ; ELSE A FF MVI A,FF OUTP: MOV E,A MVI C,FN$WL ; CHAR TO LIST DEVICE CALL BDOS POP H ; RESTORE TAIL PTR INX H LDA BDOS+2 ; CHECK FOR MEMORY TOP DCR A CMP H JNC OUTP1 LXI H,PRTBUF ; WRAPAROUND OUTP1: SHLD TAIL ; UPDATE TAIL PTR JMP TERM DEHLCMP: ; TEST (DE)-(HL) COMPARISON MOV A,D CMP H RNZ MOV A,E CMP L RET LOSS: IF PMMI IN BASPRT+2 ANI CTSBT JNZ DISCON ENDIF IF SMODEM IN CTL ANI DCD JZ DISCON ENDIF RET ; GET A CHARACTER FROM LOCAL TERMINAL ; RETURN Z FLAG IF LOCAL NOT READY TRMGET: CALL 0000H ; **** MODIFIED ADDRESS!!! ANI CONDAV RZ ; RETURN IF NO LOCAL INPUT TERMRD: CALL 0000H ; **** MODIFIED ADDRESS!!! ANI 7FH ; RETURN WITH PARITY STRIPPED RET ; HERE IF (^R) RECEIVED FROM HOST OR CONSOLE PRTON: MVI A,0FFH ; SET PRINTER FLAG STA PRTFLG JMP TERM ; HERE IF (^T) RECEIVED FROM HOST OR CONSOLE PRTOFF: XRA A ; CLEAR PRINTER FLAG STA PRTFLG JMP TERM ; HERE IF RECEIVED FROM CONSOLE - LOCAL PROCESSING LOCALP: MVI A,DC3 ; STOP TRANSMISSION CALL PUTSIO LOCLRD: CALL TERMRD ANI 7FH CPI 'H' ; (H)ELP FUNCTION JZ HELP CPI 'D' ; (D)IRECTORY FUNCTION JZ DIR CPI ESC ; (E)SCAPE FUNCTION JZ TRANSP LOCLXT: MVI A,DC1 ; RESUME TRANSMISSION CALL PUTSIO JMP TERM ; HERE ON ELP - DISPLAY MENU HELP: CALL PRTMENU ; DISPLAY MENU ON CONSOLE JMP LOCLXT PRTMENU: LXI D,MENU MVI C,FN$PCB ; DISPLAY MENU ON CONSOLE CALL BDOS RET ; HERE ON IRECTORY - DISPLAY DISK DIRECTORY DIR: LXI H,SRCHFCB CALL INIT LXI D,DIRMSG ;PROMPT FOR DRIVE MVI C,FN$PCB CALL BDOS MVI C,FN$RC ;GET DRIVE CALL BDOS CPI CR JZ DEFDRV ANI 7 ;MASK OFF DRIVE NUMBER JMP DIRNM DEFDRV: XRA A ;USE DEFAULT DRIVE DIRNM: STA SRCHFCB CALL QMARK CALL DRIVE LXI D,TBUFF MVI C,FN$SDA CALL BDOS XRA A STA NAMECT ;CR AFTER 4 NAMES LXI D,SRCHFCB MVI C,FN$SF ;DO FIRST SEARCH CALL BDOS CPI 0FFH JZ NOFILE DIRLP: CALL GETADD LXI D,15 ;OFFSET FOR RECORD COUNT DAD D MOV A,M ORA A JZ NEXTSR ;NO LIST IF FILE IS ZERO LENGTH LXI D,-5 DAD D ;POINT TO $SYS ATTRIB BYTE MOV A,M ANI 80H JNZ NEXTSR ;NO LIST IF $SYS FILE LXI D,-10 DAD D ;POINT TO BEGINNING OF NAME INX H ;POINT TO FIRST LETTER LXI D,PRNTNAME MVI B,8 CALL MOVE INX D MVI B,3 CALL MOVE CALL ILPRT PRNTNAME: DB ' ',' ',' ', ' | ', 0 ;8,1,3 SPACES LDA NAMECT INR A STA NAMECT ANI 03H ORA A CZ CRLF NEXTSR: LXI D,SRCHFCB MVI C,FN$SN ;DO NEXT SEARCH CALL BDOS CPI 0FFH JZ DIRDONE JMP DIRLP NOFILE: CALL ILPRT DB 'NOT FOUND',0 DIRDONE: CALL CRLF JMP LOCLXT QMARK: MVI A,'?' ;IF BLANK IN FCB, PUT IN 11 ?'s MVI B,11 LXI H,SRCHFCB+1 QSTLP: MOV M,A INX H DCR B JNZ QSTLP RET GETADD: ANI 03H ;GET MOD4 FOR CP/M 1.4 ADD A ADD A ADD A ADD A ADD A MOV E,A MVI D,0 LXI H,80H ;ADD DMA OFFSET DAD D RET DRIVE: LDA SRCHFCB ;IF NO DRIVE, CAL ORA A ;LOGGED IN DRIVE JZ CALCDR ADI 40H JMP PRNTHD CALCDR: MVI C,FN$ID CALL BDOS ADI 41H PRNTHD: STA DRNAME CALL ILPRT DB CR,LF,LF,'DRIVE ' DRNAME: DB ' ',CR,LF,0 RET INIT: PUSH H ;INITIALIZES FCB WITH 1 NULL (FOR FIRST DRIVE),.. PUSH B ;..11 BLANKS, 4 NULLS, 1 NULL (FOR 2ND DRIVE),.. MVI M,0 ;..11 BLANKS, AND 4 NULLS. INX H MVI B,11 MVI A,20H CALL INITFILL MVI B,5 MVI A,0 CALL INITFILL MVI B,11 MVI A,20H CALL INITFILL MVI B,4 MVI A,0 CALL INITFILL POP B POP H RET INITFILL: MOV M,A INX H DCR B JNZ INITFILL RET ILPRT: XTHL ILPLP: MOV A,M ORA A JZ ILPRET CALL VIODSP INX H JMP ILPLP ILPRET: XTHL RET CRLF: MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP RET MOVE: MOV A,M STAX D INX H INX D DCR B JNZ MOVE RET ; HERE ON - TRANSMIT ESCAPE CHAR TRANSP: MVI A,DC1 ; RESUME TRANSMISSION CALL PUTSIO MVI A,ESC ; SEND ESC CHAR CALL PUTSIO JMP TSTSIN ; HERE IF RECEIVED FROM HOST ISDLE: CALL GETSIX ; GET CHARACTER FOLLOWING CALL TERDSP ; DISPLAY IT ON CONSOLE/PRINTER JMP TERM ISSO: XRA A ; DISABLES PROTOCOL MODE IF SHOXFR STA SHOFLG ENDIF LXI SP,STACK ; RESTORE STACK INCASE OF ABORT ISSI: STA SIFLAG ; ENABLES PROTOCOL MODE JMP TERM ; HERE ON ISESC: LDA SIFLAG ; IF NOT RECEIVED ORA A MVI A,ESC IF NOT HZ19 JZ NOTSIM ; THEN JUST DISPLAY IT ENDIF IF HZ19 JZ CK1061 ; THEN CHECK FOR SPECIAL MAPPINGS ENDIF ISESCN: CALL GETSIX ; ELSE GET CHARACTER FROLLOWING CPI 'I' ; IF JNZ ESC0 ; THEN LXI H,SYSID ; SEND THE ID STRING TO HOST SNDID: MOV A,M ; GET NEXT ID BYTE ORA A ; IF NULL JZ TERM ; THEN FINISHED CALL PUTSIO ; ELSE SEND TO HOST INX H JMP SNDID IF HZ19 ; IF WE HAVE A H/Z-19 AS CONSOLE CK1061: CALL GETSIX ; GET CHAR FOLLOWING CPI 'j' ; = JNZ NT1061 FFHZ19: MVI A,'E' NT1061: PUSH PSW MVI A,ESC CALL TERDSP POP PSW JMP NOTSIM ENDIF ; H/Z-19 MAPPING ESC0: CPI 'L' ; IF JNZ ESC1 ; THEN MVI E,0 ; PERFORM SYSTEM LOAD FUNCTION CALL GETCKS ; GET BYTE COUNT MOV B,A CALL GETCKS ; GET LOW ADDRESS BYTE MOV L,A CALL GETCKS MOV H,A ; AND HIGH-ORDER ESCL0: CALL GETCKS ; GET NEXT DATA BYTE MOV M,A ; SAVE IT INX H ; BUMP MEMORY ADDRESS DCR B ; COUNT BYTES RECEIVED JNZ ESCL0 ; & LOOOP TILL ZERO MOV C,E ; SAVE CHECKSUM CALL GETCKS ; GET NEXT BYTE CMP C ; IF MATCH MVI A,'.' ; THEN SEND . JZ ESCL1 ; ELSE MVI A,'/' ; SEND / ESCL1: CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ; display protocol mark ENDIF JMP TERM IF NOT SHOXFR VIOMRK: PUSH PSW MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP MVI A,32 STA XFRCTR POP PSW CPI '.' CNZ VIODSP RET CTXFR: PUSH H PUSH PSW LXI H,XFRCTR ; decrement count of xfr'd characters DCR M JNZ CTXFR0 MVI M,32 MVI A,'+' ; display '+' every 32 bytes CALL VIODSP CTXFR0: POP PSW POP H RET ENDIF ESC1: CPI 'A' ; IF JNZ TERM ; THEN ; Initialize for data transmission using the CompuServe A-protocol ; The protocol begins with the following being sent from the host: ; <ETX> ; where: ; U = upload, D = download ; A = ASCII (file ends in 1Ah), B = binary ; FILESPEC = standard CP/M file specification, including optional drive ; CKSUM = checksum for the record MVI A,'0' ; INIT RECORD NUMBER STA APNXT CALL APRCVX ; GET COMMAND LINE FROM HOST LXI H,APBUF+2 ; POINT TO FILE SPEC FROM USER LXI D,TFCB ; POINT TO FILE CONTROL BLOCK MOV B,M ; GET POSSIBLE DISK DRIVE NAME INX H ; IF : NEXT MOV A,M CPI ':' JNZ NOCOL ; THEN INX H ; SKIP THE COLON MVI A,7 ; MASK OFF DRIVE NUMBER ANA B JMP FIRSTB NOCOL: DCX H ; POINT BACK TO FIRST FILE BYTE XRA A ; USE DEFAULT DRIVE NUMBER FIRSTB: STAX D ; STORE DRIVE NUMBER INX D ; POINT TO FIRST FILE NAME BYTE MVI B,8 ; MAX LENGTH OF NAME CALL NAAME ; GET FILE NAME MOV A,M ; GET NEXT BYTE CPI '.' ; IF . PRESENT JNZ EXT ; THEN INX H ; SKIP OVER IT EXT: MVI B,3 ; LENGTH OF EXTENSION CALL NAAME ; GET EXTENSION XRA A ; ZERO FILE EXTENT STAX D LDA TFCB ; SELECT THE DISK ORA A ; IF 0 THEN USE DEFAULT DISK JZ NODISK SUI 1 ; MAP A INTO 0, B INTO 1, ETC. MOV E,A MVI D,0 MVI C,FN$SD CALL BDOS NODISK: LDA APBUF+1 ; store transfer type STA XFRTYP LDA APBUF ; CHECK DIRECTION CPI 'D' ; IF DOWN LOAD JNZ CHKUPL ; THEN LXI D,DNLOAD MVI C,FN$PCB CALL BDOS MVI C,FN$OPN ; IF THE FILE EXISTS CALL DSKOP CPI 0FFH JZ DLOKAY ; THEN LXI D,DLBOMB ; TELL THE USER ABOUT IT MVI C,FN$PCB CALL BDOS MVI C,FN$RC ; GET USER'S RESPONSE CALL BDOS ANI 7FH PUSH PSW MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP POP PSW CPI 'Y' ; IF NOT 'Y' JZ DLDEL CPI 'y' JNZ ABORT ; THEN ABORT THE DOWNLOAD ATTEMPT DLDEL: MVI C,FN$DEL ; ELSE DELETE THE FILE CALL DSKOP DLOKAY: CALL OPNOUT ; OPEN FOR OUTPUT IF SHOXFR MVI A,0FFH STA SHOFLG ENDIF ; THE FOLLOWING LOOP DOES THE DOWNLOAD FUNCTION DL0: CALL APRCV ; GET NEXT LINE OF DATA JNZ DLEOT ; HANDLE END OF TRANSMISSION LXI H,APBUF ; POINT TO BUFFER DL1: MOV A,M ; GET NEXT BYTE INX H ; POINT TO NEXT BYTE CALL PUTBYT ; PUT IT INTO OUTPUT BUFFER DCR B ; COUNT THE BYTE JNZ DL1 JMP DL0 ; GET NEXT RECORD FROM HOST ; HERE WHEN THE HOST'S MESSAGE HAS BEEN RECEIVED DLEOT: LDA XFRTYP ; if binary transfer CPI 'B' JZ DLEOTB ; then don't insert ^Z MVI A,EOF ; PUT ^Z (END OF FILE MARK) CALL PUTBYT DLEOTB: MVI C,FN$WDR CALL DSKOP DLEOT0: MVI C,FN$CLS CALL DSKOP CALL RSTDEF MVI A,'.' ; TELL HOST WE GOT IT CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF IF SHOXFR XRA A STA SHOFLG ENDIF JMP TERM ; BACK TO TERMINAL MODE ; HERE IF NOT A DOWN LOAD - BETTER BE UP LOAD! CHKUPL: CPI 'U' JNZ ABORT ; SEND NAK TO HOST IF NOT . LXI D,UPLOAD MVI C,FN$PCB CALL BDOS CALL OPNINP ; OPEN THE FILE FOR INPUT MVI A,'.' ; TELL HOST WE'RE READY TO SEND DATA CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF ; THE UPLOAD FUNCTION IS DONE IN THE FOLLOWING LOOP: CALL GETSIX ; GET HOST'S PROMPT CPI '.' ; ABORT IF NOT '.' JNZ ABORT IF SHOXFR MVI A,0FFH STA SHOFLG ENDIF UPL1: MVI B,0 ; INIT COUNT LXI H,APBUF UPL2: CALL GETBYT ; GET DATA FROM FILE JP UPL3 ; jump if occured MOV M,A ; THEN PUT INTO BUFFER INX H ; BUMP POINTER INR B ; AND BYTE COUNT JNZ UPL2 ; GET NEXT BYTE IF BUFFER NOT FILLED UPL4: MOV A,B ; SAVE COUNT STA APLEN CALL APSND ; SEND THE DATA JMP UPL1 ; GO DO NEXT LINE UPL3: MOV A,B ; WRITE FINAL DATA BLOCK IF THERE IS ONE STA APLEN ORA A CNZ APSND MVI A,0FFH ; SEND MESSAGE WITHOUT MASKING LXI H,EOTMSG CALL APSND0 CALL RSTDEF ; RESTORE CP/M'S DEFAULT DISK DRIVE IF SHOXFR XRA A STA SHOFLG ENDIF JMP TERM ; RETURN TO TERMINAL MODE EOTMSG: DB 1,EOT ;*** ; ROUTINE TO INTERFACE TO CP/M'S CONSOLE OUTPUT DRIVER VIODSP: PUSH B ; save register PUSH D PUSH H PUSH PSW IF USEBIOS MOV C,A TERMWR: CALL 0000H ; ***** MODIFIED TO CONOT IN BIOS ENDIF IF NOT USEBIOS MOV E,A ; call BDOS to write char on console MVI C,FN$WC CALL BDOS ENDIF POP PSW POP H POP D POP B RET ; ROUTINE TO DISPLAY C(A) ON CP/M CONSOLE AND PRINTER IF NECESSARY TERDSP: PUSH PSW ; SAVE C(A) CALL VIODSP ; DISPLAY ON CONSOLE POP PSW ; GET CHARACTER BACK MOV E,A ; SAVE CHARACTER LDA PRTFLG ; IF ^R RECEIVED ORA A RZ ; THEN ; STORE THE CHAR IN THE PRINTER BUFFER LHLD HEAD ; GET BUFFER PTR MOV M,E ; STORE THE CHAR INX H ; BUMP PTR LDA BDOS+2 ; CHECK FOR TOP OF MEMORY DCR A CMP H JNZ TERDS1 ; IF REACHED, WRAPAROUND LXI H,PRTBUF TERDS1: SHLD HEAD ; UPDATE PTR RET ; ROUTINE TO OPEN A FILE FOR OUTPUT OPNOUT: MVI C,FN$CRE ; CREATE FILE CALL DSKOP ; CALL CP/M CPI 0FFH ; IF OKAY JZ ERRCRE ; ERROR DURING CREATE (DIRECTOR FULL?) XRA A ; CLEAR NEXT RECORD COUNT STA TFCB+FCB$NR STA IBP ; INIT BUFFER POINTER RET ; ROUTINE TO OPEN FILE FOR INPUT OPNINP: MVI C,FN$OPN CALL DSKOP CPI 0FFH ; IF FILE NOT FOUND JZ ERROPN ; THEN ERROR MESSAGE TIME! XRA A STA TFCB+FCB$NR ; INIT TO FIRST RECORD MVI A,80H ; "EMPTY BUFFER" STA IBP RET ; ROUTINE TO PUT C(A) INTO DISK BUFFER PUTBYT: PUSH B ; SAVE REGS PUSH D PUSH H PUSH PSW ; SAVE BYTE LDA IBP ; IF BUFFER IS FULL CPI 80H JNZ PUT0 ; THEN MVI C,FN$WDR CALL DSKOP ORA A JNZ ERRWDR ; WRITE ERROR??? XRA A ; INIT IBP TO 0 PUT0: MOV E,A ; SAVE CUR BYTE POSITION MVI D,0 INR A ; BUMP POINTER STA IBP LXI H,TBUFF ; POINT TO BUFFER DAD D ; NOW POINT TO BYTE POP PSW ; GET BYTE MOV M,A ; STORE BYTE POP H ; RESTORE REGS POP D POP B RET ; ROUTINE TO GET NEXT BYTE FROM A DISK RECORD GETBYT: PUSH B ; SAVE REGS PUSH D PUSH H MVI B,0 ; assume not LDA IBP ; IF BUFFER IS EMPTY CPI 80H JNZ GET0 MVI C,FN$RDR CALL DSKOP MOV B,A ; save return code (0 implies okay) XRA A ; RESET BYTE POINTER GET0: MOV E,A ; SAVE BYTE POS MVI D,0 INR A ; BUMP BYTE POS STA IBP LXI H,TBUFF DAD D LDA XFRTYP ; if binary transfer CPI 'B' JZ GTBTBN ; then don't check for ^Z MOV A,M ; GET THE BYTE CPI EOF ; if ^Z JNZ GTRSTR ; then MVI B,1 ; we will exit with N cleared GTRSTR: DCR B ; set N if NOT eof POP H ; RESTORE REGS POP D POP B RET GTBTBN: MOV A,M ; get binary byte JMP GTRSTR ; set N flag and exit ; FATAL CP/M ERROR CONDITIONS PRINT A LOCAL MESSAGE ; THEN SEND A TO HOST ERRCRE: LXI D,CREMSG JMP DFATAL ERROPN: LXI D,OPNMSG JMP DFATAL ERRWDR: LXI D,WDRMSG JMP DFATAL DFATAL: FATAL: MVI C,FN$PCB ; WRITE ERROR MESSAGE CALL BDOS ABORT: LXI D,ABLOAD ; tell user we are aborting MVI C,FN$PCB CALL BDOS MVI C,FN$CLS CALL DSKOP CALL RSTDEF ; RESTORE DEFAULD DISK MVI A,KNAK CALL PUTSIO ; TELL HOST WE HAVE BOMBED JMP ISSO ; DISABLE PROTOCOL MODE ; HERE TO DO A CP/M DISK OPERATION; CALLED WITH DESIRED FUNCTION CODE IN C DSKOP: LXI D,TFCB CALL BDOS PUSH PSW ; SAVE RETURN CODE XRA A ; OUTPUT A NULL TO CONSOLE CALL VIODSP ; TO FLUSH DISK BUFFER POP PSW ; RESTORE DSK RETURN CODE RET ; ROUTINE TO RESTORE CP/M'S DEFAULT DISK DRIVE RSTDEF: LDA CPMDEF MOV E,A MVI D,0 MVI C,FN$SD CALL BDOS RET ; ROUTINE TO EXTRACT FILE NAME AND EXTENSION NAAME: MOV A,M ; GET NEXT BYTE CPI CR ; ENDS NAME JZ FILL ; FILL IF END OF STRING CPI '.' ; IF EXTENSION JZ FILL ; THEN FILL OUT WITH SPACES INX H ; SKIP THIS BYTE CPI 60H ; LOWER CASE A JC NAME1 ; JUMP IF NOT LOWER CASE SBI 20H ; CONVERT LOWER CASE TO UPPER NAME1: STAX D ; STORE BYTE IN FCB INX D DCR B ; COUNT THIS BYTE JNZ NAAME ; PROCESS NEXT IF MORET RET FILL: MVI A,' ' ; STORE A SPACE JMP NAME1 ; THIS ROUTINE RECEIVES A RECORD USING THE ASCII PROTOCOL APRCV: MVI A,'.' ; PROMPT REMOTE FOR NEXT RECORD CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF APRCVX: LDA APNXT ; BUMP EXPECTED RECORD NUMBER INR A CPI '9'+1 ; WRAP-AROUND JC APRCVY ; JUMP IF LEQ 9 MVI A,'0' APRCVY: STA APNXT IF NOT SHOXFR CALL VIODSP ENDIF APRCV0: CALL TRMGET ; GET LOCAL KEYBOARD INPUT CPI ETX ; IF ^C JZ ABORT ; THEN ABORT THE TRANSFER CALL GETSIX ; GET NEXT CHARACTER CPI SOH ; STARTS THE RECORD JZ APRCV1 CPI ETX ; BY ITSELF IS QUESTIONABLE JNZ APRCV0 MVI A,'/' ; SEND A LOGICAL NAK CALL PUTSIO IF NOT SHOXFR CALL VIODSP ENDIF JMP APRCV0 APRCV1: MVI E,0 ; INIT CHECKSUM MOV B,E ; INIT BYTE COUNT MOV A,E ; CLEAR FLAG STA APEOT LXI H,APBUF CALL GETCKS ; GET SENDER'S RECORD NUMBER STA APCUR APRCV2: CALL GETCKS ; GET A CHECKSUMMED CHARACTER JZ APRCV3 MOV M,A ; PUT BYTE IN BUFFER INR B ; COUNT THIS BYTE INX H IF NOT SHOXFR CALL CTXFR ; display '+' every 32 bytes ENDIF JMP APRCV2 APRCV3: MOV C,E ; SAVE CHECKSUM CALL GETCKS ; GET REMOTE'S CHECKSUM CMP C ; IF SAME JNZ APRCV4 ; THEN LDA APNXT ; CHECK RECORD COUNT MOV C,A LDA APCUR CMP C JNZ APRCV8 ; JUMP IF NOT MATCHED MOV A,B ; STORE BYTE COUNT STA APLEN LDA APEOT ; RETURN WITH EOT FLAG STATUS ORA A RET APRCV4: MVI A,'/' ; ELSE REQUEST RETRANSMISSION CALL PUTSIO IF NOT SHOXFR CALL VIODSP ENDIF JMP APRCV0 APRCV8: JNC ABORT ; ABORT IF RCV GTR EXPECTED MVI A,'.' ; MUST HAVE RECEIVED A DUPLICATE RECORD CALL PUTSIO ; ACCEPT IT, AND TRY AGAIN IF NOT SHOXFR CALL VIOMRK ENDIF JMP APRCV0 ; ROUTINE TO SEND A MESSAGE APSND: XRA A ; Flag for masking control characters LXI H,APLEN ; BUFFER ADDRESS: LENGTH FOLLOWED BY DTA APSND0: STA APFLG ; STORE MASK FLAG SHLD APADDR ; STORE BUFFER ADDRESS LDA APNXT ; BUMP NEXT RECORD COUNT INR A CPI '9'+1 JC ASND0A MVI A,'0' ASND0A: STA APNXT IF NOT SHOXFR CALL VIODSP ENDIF APSND1: MVI E,0 ; CLEAR CHECKSUM LHLD APADDR MOV B,M ; GET LENGTH INX H ; POINT TO DATA MVI A,SOH ; START THE MESSAGE CALL APPUTS LDA APNXT ; SEND RECORD NUMBER CALL DOCKS ; UPDATE CHECKSUM CALL APPUTS APSND2: MOV A,M ; GET NEXT DATA BYTE CALL DOCKS ;UPDATE CHECKSUM CPI 20H ; IF CONTROL CHARACTER JNC ASND2A ; THEN LDA APFLG ; IF MASKING CONTROL CHARACTERS ORA A MOV A,M ; GET BYTE AGAIN JNZ ASND2A ; THEN CPI 05H ; FOR EFFICIENCY, ONLY MASK THE BADDIES JC ASND2B ; MASK 00H 01H 02H 03H 04H ; NUL SOH STX ETX EOT CPI DLE JZ ASND2B ; 10H DLE CPI KNAK JNZ ASND2A ; 15H NAK ASND2B: MVI A,DLE ; SEND CALL APPUTS JMP ASND4A SND4B: IF SHOXFR CALL VIODSP ENDIF IF NOT SHOXFR CALL VIOMRK ENDIF CPI '.' RZ ; RETURN IF HOST GOT IT OKAY CPI '/' ; ELSE IF / JZ APSND1 ; THEN RETRANSMIT THE MESSAGE CPI KNAK ; ELSE IF JZ ISSO ; THEN ABORT JMP ASND4 ; ELSE KEEP WAITING APPUTS: PUSH PSW ; SAVE CHAR CALL GETSIN ; CHECK MODEM FIRST JZ APPUT4 ; THEN ANI 7FH CPI KNAK ; IF WE RECEIVE A JZ ISSO ; THEN SHUT DOWN THE PROTOCOL CPI DC3 ; IF X-OFF JNZ APPUT4 ; THEN PUSH D ; DELAY A FEW SECONDS PUSH B MVI B,2 APPUT0: LXI D,8000H APPUT1: CALL GETSIN ; IF CHAR PRESENT JZ APPUT2 ; THEN ANI 7FH CPI DC1 ; IF ^Q (XON) JZ APPUT3 ; THEN EXIT APPUT2: DCX D MOV A,D ORA E JNZ APPUT1 DCR B JNZ APPUT0 APPUT3: POP B ; RESTORE REGS AND RETURN POP D APPUT4: POP PSW ; GET CHAR CALL PUTSIO ; SEND CHAR RET ; ROUTINE TO GET A CHARACTER FROM UART WITH WAIT GETSIN: CALL GETSIO ; RETURN SIO CHAR WITH BIT 7 = 0 RZ ANI 7FH RET GETSIX: CALL GETSIO ; GET SIO CHAR OR WAIT JZ GETSIX ; WAIT FOR A CHARACTER CPI KNAK ; IF RECEIVED JZ ISSO ; THEN REVERT TO TERMINAL MODE RET ; RETURN GETCKS: CALL GETSIX ; GET NEXT SIO CHAR WITH CHECKSUMMING CPI ETX ; IF RZ ; THEN RETURN PUSH PSW CPI EOT JNZ NOTEOT ; THEN STA APEOT ; SET SEEN FLAG NOTEOT: CPI DLE ; IF JNZ GETCK0 ; THEN CALL GETSIX ; GET NEXT CHARACTER ANI 1FH ; MAKE CONTROL CHAR OF IT GETCK0: CALL DOCKS ; UPDATE CHECKSUM POP PSW ; RESTORE FLAGS MOV A,D ; RESTORE NEW CHAR RET ; RETURN DOCKS: MOV D,A ; SAVE BYTE MOV A,E ; GET OLD CHECKSUM RLC ; ROTATE ONE BIT LEFT ADD D ; ADD NEW BYTE ACI 0 ; ADD POSSIBLE CARRY MOV E,A ; REPLACE CHECKSUM WITH UPDATED ONE MOV A,D ; RESTORE NEW BYTE RET ; VARIOUS MESSAGE STRINGS PROINI: DB CR,LF,'% CSEXEC - Initializing file transfer',cr,lf,'$' DNLOAD: DB CR,LF,'% CSEXEC - Beginning Download',cr,lf,'$' UPLOAD: DB CR,LF,'% CSEXEC - Beginning Upload',cr,lf,'$' ABLOAD: DB CR,LF,'? CSEXEC - Aborting file transfer',cr,lf,'$' DLBOMB: DB CR,LF,'% CSEXEC - That file already exists on your disk.',CR,LF DB 'Do you wish to replace it (Y or N) ? $' CREMSG: DB CR,LF,'? CSEXEC - Diskette is full!',CR,LF,'$' OPNMSG: DB CR,LF,'? CSEXEC - That file is not on your diskette!',cr,lf,'$' WDRMSG: DB CR,LF,'? CSEXEC - Your diskette is full!',cr,lf,'$' DMSG: DB CR,LF,'++DISCONNECTED++',cr,lf,'$' DIRMSG: DB CR,LF,'Directory for what drive? $' IF SMODEM RTEMSG: DB CR,LF,'Do you want high speed (1200 baud) modem? $' ENDIF MENU: DB ESC,'E',ESC,'p' DB 'CompuServe CP/M (R) Executive Version 2.3',cr,lf IF OTHER DB '**** CompuPro 816 ****',cr,lf ENDIF IF HZ89 DB '**** Heath/Zenith ****',cr,lf ENDIF IF SMODEM DB '**** Hayes Smartmodem 1200 ****',cr,lf ENDIF IF PMMI DB '**** PMMI Modem ****',cr,lf ENDIF IF APLCPM DB '**** Apple CP/M ****',cr,lf ENDIF DB 'Copyright (C) 1980, 1981 CompuServe Incorporated',CR,LF,LF DB ' ESC H - DISPLAY THIS SCREEN  ' DB CR,LF DB ' ESC D - DISPLAY DISK DIRECTORY ' DB CR,LF DB ' ESC ESC - SEND ESCAPE CHARACTER ' DB CR,LF DB ' CTL A - SUSPENDS OUTPUT AT END OF CURRENT LINE ' DB CR,LF DB ' CTL C - STOP HOST PROGRAM EXECUTION ' IF PMMI OR APLCPM DB CR,LF DB ' CTL E - EXIT THIS PROGRAM WITHOUT DISCONNECT ' ENDIF DB CR,LF DB ' CTL H - BACKSPACES, DELETING A CHARACTER ' DB CR,LF DB ' CTL Q - RESUMES OUTPUT AFTER ^A OR ^S ' DB CR,LF DB ' CTL S - SUSPENDS OUTPUT IMMEDIATELY ' DB CR,LF DB ' CTL U - DELETES LINE CURRENTLY BEING TYPED ' DB CR,LF DB ' CTL V - REDISPLAYS THE PARTIAL LINE YOU ARE TYPING ' DB CR,LF IF PMMI OR APLCPM DB ' CTL X - EXIT THIS PROGRAM AND DISCONNECT ' ENDIF IF NOT (PMMI OR APLCPM) DB ' CTL X - EXIT THIS PROGRAM ' ENDIF DB CR,LF,LF DB ESC,'q' DB '$' ; I/O SUBROUTINES FOR SIO SIOGET: MVI A,7 ; SELECT PORT 7 ON OUT 17H ; GODBOUT IF4 IF APLCPM LDA CTL ; GET STATUS FLAGS ENDIF IF NOT APLCPM IN CTL ; GET MIO STATUS FLAGS ENDIF ANI SIOIR ; ISOLATE INPUT READY FLAG IF NOT HITRUE XRI SIOIR ; INVERT IT ENDIF RZ ; RETURN IF NOW 0 IF APLCPM LDA SIO ; ELSE GET CHARACTER ENDIF IF NOT APLCPM IN SIO ; ELSE GET SIO CHARACTER ENDIF IF SHOXFR CALL PRODSP ENDIF RET ; AND RETURN (Z FLAG = 0) SIOPUT: PUSH PSW ; WRITE (A) TO SIO PUTSI1: IF APLCPM LDA CTL ; WAIT FOR FLAG TO = 0 ENDIF IF NOT APLCPM IN CTL ; WAIT FOR FLAG TO = 0 ENDIF ANI SIOTR IF NOT HITRUE JNZ PUTSI1 ENDIF IF HITRUE JZ PUTSI1 ENDIF MVI A,7 ; SELECT PORT 7 ON OUT 17H ; GODBOUT IF4 POP PSW IF APLCPM STA SIO ENDIF IF NOT APLCPM OUT SIO ENDIF IF SHOXFR AND HZ19 PUSH PSW MVI A,ESC ; invert video for incoming characters CALL VIODSP MVI A,'p' CALL VIODSP POP PSW PUSH PSW CALL PRODSP MVI A,ESC CALL VIODSP MVI A,'q' ; return to normal video CALL VIODSP POP PSW ENDIF IF SHOXFR AND NOT HZ19 CALL PRODSP ENDIF RET SIOINI: IF HZ89 MVI A,3 ; init uart to OUT SIO+3 ; 8 data bits, 1 stop bit, no parity ENDIF IF SMODEM MVI A,7 ; SELECT PORT 7 ON OUT 17H ; GODBOUT IF4 IN CTL ; Check for carrier detect ANI DCD ; If present ... RNZ ; then already online so exit MVI A,01101110B ; 8 data bits, 1 stop bit, no parity OUT MODE LXI D,RTEMSG ; Prompt for high speed operation MVI C,FN$PCB CALL BDOS MVI C,FN$RC CALL BDOS CPI 'Y' JZ B1200 CPI 'y' JZ B1200 MVI A,01110101B ; 300 baud JMP BSET B1200: MVI A,01110111B ; 1200 baud BSET: OUT MODE MVI A,00100111B OUT CMND LXI D,DIALMG MVI C,FN$PCB CALL BDOS LXI H,SDIAL CALL SCMND SMDCD: MVI D,30 ; Allow 30 sec for data carrier det SMDCD1: MVI B,10 ; Set 1 sec interval CALL TIMER IN CTL ; Check for carrier det ANI DCD JNZ SMCTS ; If carrier detected go on DCR D ; else check timeout JNZ SMDCD1 ; If not try again LXI D,ABTMSG MVI C,FN$PCB CALL BDOS XRA A OUT CMND JMP BBASE SMCTS: CALL GETSIN CALL PRTMENU CALL SIGNON RET SCMND: MOV A,M ANA A RZ CALL SIOPUT INX H JMP SCMND ENDIF IF PMMI IN BASPRT+2 ; CHECK FOR CARRIER DET ANI CTSBT ; IF PRESENT ... RZ ; THEN ALREADY ONLINE SO EXIT MVI A,MAKEM ; GO OFF HOOK OUT BASPRT MVI A,DTDET ; SWITCH FILTERS TO DETECT DIAL TONE OUT BASPRT+3 MVI D,DTMSK ; WAIT FOR DIAL TONE CALL WAT15 LXI D,DIALMG MVI C,FN$PCB CALL BDOS LXI H,MNET ; POINT TO PHONE NBR DIAL: MOV A,M ; GET DIGIT ANA A JZ DTRON CALL DIALDGT INX H JMP DIAL DTRON: MVI A,TODTR ; TURN ON DATA TERMINAL READY OUT BASPRT+3 MVI B,1 ; WAIT FOR MODEM TO TURN ON DTR CALL TIMER MVI A,93 ; SET 8 DATA BITS, NO PARITY, 1 STOP BIT OUT BASPRT MVI D,CTSBT CALL WAT15 ; ALLOW 30 SEC FOR CTS CALL WAT15 MVI A,52 ; 300 baud OUT BASPRT+2 CALL PRTMENU CALL SIGNON RET ; ; DIALDGT - DIAL A DIGIT ; DIALDGT: CALL VIODSP ; SHOW CHARACTER CPI '0' ; CHAR < 0? RC ; YES CPI '9'+1 ; CHAR > 9? RNC ; YES SUI '0' ; REMOVE ASCII BIAS JNZ DIALS MVI A,10 ; CONVERT 0 TO 10 PULSES DIALS: MOV E,A MVI A,D20PP OUT BASPRT+2 DIALC: IN BASPRT+2 ; GET TIMER PULSE ANI TMPUL JNZ DIALC DIALB: IN BASPRT+2 ; GET TIMER PULSE ANI TMPUL JZ DIALB MAKEP: MVI A,MAKEM ; START WITH A MAKE OUT BASPRT TIMEM: IN BASPRT+2 ANI TMPUL ; WAIT FOR A MAKE INTERVAL JNZ TIMEM MVI A,BRKM ; NOW DO A BREAK OUT BASPRT TIMEB: IN BASPRT+2 ANI TMPUL ; WAIT FOR BREAK INTERVAL JZ TIMEB DCR E ; DONE WITH THIS DIGIT JNZ MAKEP ; NO MVI A,MAKEM OUT BASPRT MVI B,INTER JMP TIMER ; ; TIME OUT ROUTINE ; WAT15: MVI C,150 ; SET FOR 15 SECONDS T15: MVI B,1 ; .1 SEC TIME OUT CALL TIMER IN BASPRT+2 ; DIAL TONE REC'D? ANA D RZ ; OK, RETURN DCR C ; DONE? JNZ T15 LXI D,ABTMSG ; YES, SEND ABORT MESSAGE MVI C,FN$PCB CALL BDOS MVI A,3FH OUT BASPRT+3 XRA A ; HANGUP OUT BASPRT JMP BBASE ; BACK TO CP/M ENDIF IF APLCPM LDA SIO LDA CTL ; CHECK FOR CARRIER DET ANI 4 ; IF PRESENT ... RZ ; THEN ALREADY ONLINE SO EXIT LXI D,DIALMG MVI C,FN$PCB CALL BDOS DIAL: MVI A,15H ; SET 8 DATA BITS, NO PARITY, 1 STOP BIT STA CTL MVI A,8DH ; SET OFF HOOK, ORIGINATE, 300 BAUD STA CTL2 MVI B,30 ; WAIT 3 SEC FOR DIAL TONE CALL TIMER LXI H,MNET ; POINT TO PHONE NBR DIAL1: MOV A,M ; GET DIGIT ANA A JZ CDET CALL DIALDGT INX H JMP DIAL1 CDET: MVI D,30 ; ALLOW 30 SEC FOR CTS CDET1: MVI B,10 ; SET 1 SEC INTERVAL CALL TIMER LDA SIO LDA CTL ; CHECK FOR CD ANI 4 JZ CTS ; GOT CD DCR D ; NOT CD, TIMEOUT? JNZ CDET1 ; NO LXI D,ABTMSG ; YES, SEND ABORT MESSAGE MVI C,FN$PCB CALL BDOS XRA A ; HANGUP STA CTL2 JMP BBASE ; BACK TO CP/M CTS: MVI A,8FH ; ENABLE XMIT STA CTL2 CALL PRTMENU CALL SIGNON RET ; ; DIALDGT - DIAL A DIGIT ; DIALDGT: CALL VIODSP ; SHOW CHARACTER CPI '0' ; CHAR < 0? RC ; YES CPI '9'+1 ; CHAR > 9? RNC ; YES SUI '0' ; REMOVE ASCII BIAS JNZ DIALS MVI A,10 ; CONVERT 0 TO 10 PULSES DIALS: MOV E,A DIALC: MVI A,0DH ; GO ON HOOK FOR 61 MSEC PULSE STA CTL2 LXI B,61 CALL DELAY MVI A,8DH ; GO OFF HOOK FOR 39 MSEC INTERPULSE DELAY STA CTL2 LXI B,39 CALL DELAY DCR E ; DONE WITH THIS DIGIT JNZ DIALC ; NO LXI B,600 ; YES DO 600 MSEC INTERDIGIT DELAY JMP DELAY ENDIF IF PMMI OR APLCPM OR SMODEM ; ; TIMER - WAIT # OF .1 SEC IN REG B ; TIMER: PUSH B ; SAVE # OF .1 SEC INTERVALS LXI B,100 ; WAIT 100 MSEC CALL DELAY IF FSTCLK CALL DELAY call delay ENDIF POP B ; RECOVER COUNT DCR B ; DONE? JNZ TIMER ; NO RET ; ; DELAY - WAIT # OF MILLISECONDS IN REG BC ; DELAY: PUSH B PUSH D INR B ; BUMP B FOR LATER DCR DELAY1: MVI E,126 ; DELAY COUNT FOR 1 MSEC @ 2 MHZ. DELAY2: DCR E ; COUNT... JNZ DELAY2 ; ...DOWN DCR C ; MORE? JNZ DELAY1 ; YES DCR B ; NO, MORE IN HIGH BYTE? JNZ DELAY1 ; YES POP D ; NO POP B RET SIGNON: MVI B,10 ; WAIT 1 SEC. CALL TIMER MVI A,ETX ; SEND CONTROL-C CALL PUTSIO LXI H,USERID ; POINT TO USERID MVI B,UIDLEN SGNON1: CALL SGNRCV ; WAIT FOR USERID PROMPT JNZ SGNON1 SGNON2: MOV A,M CALL PUTSIO SGNON3: CALL GETSIN JZ SGNON3 CALL VIODSP INX H CPI CR JNZ SGNON2 LXI H,PASSWD ; POINT TO PASSWORD MVI B,PSWLEN SGNON4: CALL SGNRCV ; WAIT FOR PASSWORD PROMPT JNZ SGNON4 SGNON5: MOV A,M CALL PUTSIO INX H CPI CR ; IF THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV CALL VIODSP CMP M RNZ INX H DCR B JNZ SGNRCV RET ENDIF IF SHOXFR PRODSP: PUSH PSW ; save the character LDA SHOFLG ; if in protocol ORA A JZ PROTER ; then POP PSW PUSH PSW ANI 7FH ; remove high-order bit CPI ' ' ; if this is a control char JNC PROYES ; then LDA XFRTYP ; if doing a binary transfer CPI 'B' JZ PRONOT ; then "flag" all control characters POP PSW ; else flag only funny ones PUSH PSW CPI SHOLCC ; is it a normal control character? JC PRONOT ; (ie, thru , 08h - 0Dh) CPI SHOHCC+1 JC PROYES PRONOT: MVI A,'^' ; flag the control character CALL VIODSP POP PSW PUSH PSW ADI 40H ; map char to letter PROYES: CALL VIODSP PROTER: POP PSW RET ENDIF IF PMMI ; routine to disconnect pmmi modem DISCON: MVI A,03FH OUT BASPRT+3 XRA A OUT BASPRT LXI D,DMSG ; print disconnect msg MVI C,FN$PCB CALL BDOS JMP BBASE ; and exit ENDIF IF SMODEM DISCON: XRA A OUT CMND LXI D,DMSG ; print disconnect msg MVI C,FN$PCB CALL BDOS JMP BBASE ; and exit ENDIF IF APLCPM DISCON: XRA A STA CTL2 LXI D,DMSG ; print disconnect msg MVI C,FN$PCB CALL BDOS JMP BBASE ; and exit ENDIF ; RAM STORAGE AREA IF PMMI OR APLCPM OR SMODEM SDIAL: DB 'ATE0F1M1Q1DT5852730',CR,0 MNET: DB '585-2730',0 ; MicroNET phone nbr DIALMG: DB CR,LF,'Dialing... $' ABTMSG: DB CR,LF,'? CSEXEC - NO CARRIER DETECTED$' ENDIF USERID: DB 'User ID: ' UIDLEN EQU $-USERID ; ; NOTE: ONLY CHANGE THE DUMMY USER ID (99999,999) TO YOUR USER ID ; LENGTH DOES NOT MATTER BUT YOUR ID MUST BE FOLLOWED BY A ; CARRIAGE RETURN (CR). ; DB '99999,999',CR ; YOUR USER ID ; PASSWD: DB 'Password: ' PSWLEN EQU $-PASSWD ; ; NOTE: ONLY CHANGE THE DUMMY PASSWORD (XXXXXXXXX) TO YOUR PASSWORD ; LENGTH DOES NOT MATTER BUT YOUR PASSWORD MUST BE FOLLOWED BY A ; CARRIAGE RETURN (CR). ; DB 'XXXXXXXXX',CR ; YOUR PASSWORD ; SRCHFCB: DS 33 NAMECT: DS 1 IF SHOXFR SHOFLG: DS 1 ; 1 if in file transfer protocol ENDIF IF NOT SHOXFR XFRCTR: DS 1 ; counter for displaying +'s ENDIF CPMSTK: DS 2 ; SAVES CP/M'S STACK POINTER CPMDEF: DS 1 ; SAVES CP/M'S DEFAULT DISK DRIVE PRTFLG: DS 1 ; FF IF PRINTER ENABLED, 00 OTHERWISE SIFLAG: DS 1 ; NON-ZERO IMPLIES RECEIVED AND PROTOCOL ACTIVE APEOT: DS 1 ; NON ZERO IF SEEN IN GETCKS APFLG: DS 1 ; 00 IF MASKING CONTROL CHARACTERS, FF IF NOT XFRTYP: DS 1 ; 'A' if ASCII, 'B' if binary APADDR: DS 2 ; POINTER TO BUFFER APLEN: DB 0 ; LENGTH OF RECORD AS RECEIVED APBUF: DS 256 ; STORAGE FOR THE RECORD IBP: DS 1 ; BYTE POINTER APNXT: DS 1 ; EXPECTED RECORD NUMBER APCUR: DS 1 ; CURRENT (RECEIVED) RECORD NUMBER DS 256 ; STACK GOES HERE STACK: HEAD: DW PRTBUF TAIL: DW PRTBUF LINCNT: DB PAGLEN PRTBUF EQU $ END START RD NUMBER DS 256 ; STACK GOES HERE STACK: HEAD: DW PRTBUF TAIL: DW PRTBUF LINCNT: end a contribution (suggest $20). This will help me expand this program, and add even more features. I am currently working on a CP/M 86 version, and once that is running, I intend to port it to MSDOS. Suggestions for enhancement are also appreciated, and you may send them to: Dave Rand 10232 - 160 Street Edmonton, Alberta CANADA T5P 3E9 - 16 - ; *** COMPUSERVE INFORMATION SERVICE EXECUTIVE FOR CP/M (R) ; (CP/M IS A TRADEMARK OF DIGITAL RESEARCH) ; COPYRIGHT (C) 1980, 1981 COMPUSERVE INCORPORATED ; VERSION 2.3 ; WRITTEN BY: ; RUSS RANSHAW ; MODIFIED BY: ; DAVE STRNAD - 70170,115 ; ; MODIFIED FOR SMARTMODEM WITH OTHER THAN ONE OF THE ; SPECIAL COMPUTERS ; BY: ; MARC GEBAUER - 73105,603 ; NOTE: YOU MUST CHANGE THE FOLLOWING: ; 1) THE MICRONET PHONE NUMBER LOCATED AT THE TAG 'MNET' ; 2) THE USER ID LOCATED JUST BEYOND THE TAG 'USERID' ; 3) THE PASSWORD LOCATED JUST BEYOND THE TAG 'PASSWD' ; FALSE EQU 0 TRUE EQU NOT FALSE USEBIOS EQU TRUE ; TRUE TO USE DIRECT BIOS CALLS FOR ; CONSOLE OUTPUT ;*** NOTE: IF YOU CHOOSE TO USE BDOS CALL FOR CONSOLE ; WRITE, AND HAVE "SHOXFR" TRUE, YOU MAY NOT BE ABLE ; TO DO FILE TRANSFERS IF YOUR COMMUNICATION CHANNEL ; IS OPERATING AT GREATER THAN 300 BAUD! SHOXFR EQU TRUE ; TRUE TO SHOW DATA DURING FILE TRANSFER SHOLCC EQU 09H ; LOWEST DISPLAYABLE CONTROL CHARACTER FOR CONSOLE SHOHCC EQU 0DH ; HIGHEST "" (USED IN PRODSP TO MAP CTL CHARACTERS) PAGLEN EQU 60 ; PRINTER PAGE LENGTH RUBOUT EQU TRUE ; IF TERMINAL DOESN'T NORMALLY DELETE CHARACTER WHILE ; BACKSPACE OTHER EQU TRUE ; TRUE IF THE COMPUTER IS NOT ONE OF THE SPECIAL ONES HZ89 EQU FALSE ; TRUE IF THE COMPUTER IS A HEATH/ZENITH 88, 89, 8 HZ19 EQU FALSE ; CONSOLE IS A HEATH/ZENITH -19 PMMI EQU FALSE ; TRUE IF PMMI MODEM BOARD APLCPM EQU FALSE ; TRUE IF APPLE W/HAYES MODEM BOARD IF OTHER BBASE EQU 0000H ; "PAGE 0" ADDRESS CTL EQU 03H ; CONTROL PORT SIO EQU 02H ; SIO PORT SIOIR EQU 01H ; SIO PORT DATA INPUT READY FLAG SIOTR EQU 04H ; SIO PORT TRANSMITTER READY FLAG HITRUE EQU TRUE ; SIO FLAGS ARE "HI" (1) WHEN TRUE SMART EQU TRUE ; TRUE IF HAYES SMARTMODEM ENDIF IF HZ89 BBASE EQU 4200H ; "PAGE 0" ADDRESS CTL EQU 0DDH ; LINE CONTROL REGISTER SIO EQU 0D8H ; RECEIVE/TRANSMIT DATA REGISTER SIOIR EQU 01H ; RECEIVE DATA READY FLAG SIOTR EQU 20H ; TRANSMITTER BUFFER READY FLAG HITRUE EQU TRUE ENDIF IF PMMI BBASE EQU 0H ; "PAGE 0" ADDRESS BASPRT EQU 0C0H ; BASE I/O PORT ADDRESS FOR PMMI BOARD CTL EQU BASPRT ; PRIMARY CONTROL PORT SIO EQU BASPRT+1 ; SERIAL DATA PORT SIOIR EQU 02H ; DATA INPUT READY FLAG SIOTR EQU 01H ; TRANSMITTER READY FLAG HITRUE EQU TRUE ; FLAGS ARE HIGH WHEN TRUE ENDIF IF APLCPM BBASE EQU 0H ; "PAGE 0" ADDRESS BASPRT EQU 0E0A6H ; BASE ADDRESS FOR HAYES BOARD CTL EQU BASPRT ; PRIMARY CONTROL PORT CTL2 EQU BASPRT-1 ; SECONDARY CONTROL PORT SIO EQU BASPRT+1 ; SERIAL DATA PORT SIOIR EQU 01H ; DATA INPUT READY FLAG SIOTR EQU 02H ; TRANSMITTER READY FLAG HITRUE EQU TRUE ; FLAGS ARE HIGH WHEN TRUE ENDIF ; NOTE: SET ONLY 1 OF THE FOLLOWING PRINTER I/F CHOICES TRUE AND ALL OTHERS ; FALSE CCS7710 EQU TRUE ; PRINTER I/F IS CCS 7710A MX80 EQU FALSE ; PRINTER IS EPSON MX80 ASIO EQU FALSE ; PRINTER I/F IS SSM ASIO IF CCS7710 AND APLCPM PRDY EQU 02H ; PRINTER READY FLAG PCTL EQU 0E090H ; PRINTER CONTROL/STATUS PORT ENDIF IF MX80 AND APLCPM PRDY EQU 08H ; PRINTER READY FLAG PCTL EQU 0E1C1H ; PRINTER CONTROL/STATUS PORT ENDIF IF ASIO AND APLCPM PRDY EQU 03H ; PRINTER READY FLAG PCTL EQU 0E094H ; PRINTER CONTROL/STATUS PORT ENDIF ; SPECIAL CHARACTERS FOR DATA TRANSMISSION PROTOCOL SOH EQU 01H ; START OF TEXT ETX EQU 03H ; END OF TEXT EOT EQU 04H ; END OF TRANSMISSION ENQ EQU 05H ; ^E, USED FOR PMMI EXIT W/O DISCONNECT SI EQU 0FH ; = SHIFT INTO PROTOCOL MODE SO EQU 0EH ; = SHIFT OUT OF PROTOCOL MODE] ; PROTOCOL MODE IMPLIES THAT SEQUENCES ; ARE NOT SENT TO CONSOLE BUT ARE USED TO CONTROL ; THE UP/DOWN LOAD PROTOCOL BS EQU 08H ; CONTROL-H: BACKSPACE DC1 EQU 11H ; CONTROL-Q: RESUME TRANSMISSION DC2 EQU 12H ; CONTROL-R: PRINTER ON DC3 EQU 13H ; CONTROL-S: STOP TRANSMISSION DC4 EQU 14H ; CONTROL-T: PRINTER OFF KNAK EQU 15H ; DLE EQU 10H ; (TRANSPARACY FLAG) SPC EQU 20H ; SPACEBAR ESC EQU 1BH ; ESCAPE EOF EQU 1AH ; ^Z (CP/M END OF FILE) CR EQU 0DH  ; LF EQU 0AH ; FF EQU 0CH ; MON EQU 18H ; ^X (RETURN TO CP/M) (& DISCONNECT PMMI) ; CP/M EQUATES BDOS EQU BBASE+0005H ; MAIN ENTRY POINT FOR CP/M TFCB EQU BBASE+005CH ; DEFAULT FILE CONTROL BLOCK TBUFF EQU BBASE+0080H ; DEFAULT FILE BUFFER TBASE EQU BBASE+0100H ; TRANSIENT BASE ; DEFINE OFFSETS INTO FILE CONTROL BLOCK (FCB) FCB$ET EQU 0 ; ENTRY TYPE FCB$FN EQU 1 ; FILE NAME (8 BYTES) FCB$FT EQU 9 ; FILE TYPE (3 BYTES) FCB$RC EQU 15 ; RECORD COUNT (CURRENT EXTENT) FCB$DM EQU 16 ; DISK MAP FCB$NR EQU 32 ; NEXT RECORD NUMBER TO READ OR WRITE ; BDOS FUNCTIONS: FN$SR EQU 0 ; SYSTEM RESET FN$RC EQU 1 ; READ CONSOLE FN$WC EQU 2 ; WRITE CONSOLE FN$RR EQU 3 ; READ READER FN$WP EQU 4 ; WRITE PUNCH FN$WL EQU 5 ; WRITE LIST FN$IS EQU 7 ; INTERROGATE I/O STATUS FN$AS EQU 8 ; ALTER I/O STATUS FN$PCB EQU 9 ; PRINT CONSOLE BUFFER FN$RCB EQU 10 ; READ CONSOLE BUFFER FN$CCS EQU 11 ; CHECK CONSOLE STATUS FN$LDH EQU 12 ; LIFT DISK HEAD FN$RDS EQU 13 ; RESET DISK SYSTEM FN$SD EQU 14 ; SELECT DISK FN$OPN EQU 15 ; OPEN FILE FN$CLS EQU 16 ; CLOSE FILE FN$SF EQU 17 ; SEARCH FIRST FN$SN EQU 18 ; SEARCH NEXT FN$DEL EQU 19 ; DELETE FILE FN$RDR EQU 20 ; READ DISK RECORD FN$WDR EQU 21 ; WRITE DISK RECORD FN$CRE EQU 22 ; CREATE FILE FN$REN EQU 23 ; RENAME FILE FN$IL EQU 24 ; INTERROGATE LOGIN FN$ID EQU 25 ; INTERROGATE DISK FN$SDA EQU 26 ; SET DMA ADDRESS FN$IA EQU 27 ; INTERROGATE ALLOCATION ORG TBASE START: JMP START0 ; NORMAL START INISIO: JMP SIOINI ; INITIALIZE MODEM UART GETSIO: JMP  SIOGET ; GET CHAR FROM MODEM UART PUTSIO: JMP SIOPUT ; PUT A CHAR TO MODEM UART ; RESPONSE FOR THIS EXECUTIVE: IF OTHER SYSID: DB '#CPMTARBELL,CC,HC,PA,PL',CR,00 ENDIF IF HZ89 SYSID: DB '#CPMHEATH/ZENITH,CC,HC,PA,PL',CR,00 ENDIF IF PMMI SYSID: DB '#CPMPMMI,CC,HC,PA,PL',CR,00 ENDIF IF APLCPM SYSID: DB '#CPMAPPLE,HC,PA,PL',CR,00 ENDIF ; CC = CURSOR CONTROL ; IMPLIES FOLLOWING CURSOR CONTROLS: ; CURSOR UP ; CURSOR DOWN ; CURSOR RIGHT ; CURSOR LEFT ; CURSOR HOME (LINE 1, COLUMN 1) ; ERASE TO END OF SCREEN ; ERASE TO END OF LINE ; ERASE SCREEN AND HOME CURSOR (ALSO ) ; POSITION CURSOR TO LINE L COLUMN C ; HC = HARD COPY ; IMPLIES FOLLOWING: ; (^R, 022 OCTAL, 12 HEX) ENABLE PRINTER; SUBSEQUENT DATA ; WILL BE COPIED TO LOCAL PRINTER ; (^T, 024 OCTAL, 14 HEX) DISABLE PRINTER ; DISABLE TERMINAL DISPLAY ; ENABLE TERMINAL DISPLAY ; PA = A PROTOCOL ; IMPLIES FILE TRANSFER CAPABILITY USING THE COMPUSERVE A PROTOCOL ; PL = LOAD PROTOCOL ; IMPLIES ABILITY TO LOAD CODE SEGMENTS UNDER THE COMPUSERVE L PROTOCOL START0: LXI SP,STACK ; SET UP OUR OWN STACK MVI C,FN$ID ; GET CURRENT CP/M DISK DRIVE CALL BDOS STA CPMDEF LHLD BBASE+1 ; GET START OF BIOS XCHG LXI H,3 ; OFFSET TO CONSOLE CHECK DAD D SHLD TRMGET+1 ; STORE ADDRESS LXI H,6 ; OFFSET TO CONSOLE READ DAD D SHLD TERMRD+1 IF USEBIOS LXI H,9 ; OFFSET TO CONSOLE WRITE DAD D SHLD TERMWR+1 ENDIF IF NOT APLCPM LXI H,2AH ; OFFSET TO LIST STATUS DAD D ; MUST BE IMPLEMENTED IN BIOS SHLD LSTST+1 ; FOR PRINT BUFFERING TO WORK ENDIF XRA A ; DISABLE PRINTER OUTPUT STA PRTFLG STA SIFLAG ; NO SEEN IF SHOXFR STA SHOFLG ; DON'T COME UP IN "SHOW TRANSFER" ENDIF ; MODE! IF OTHER CALL PRTMENU ENDIF IF NOT OTHER CALL INISIO ENDIF ; TERMINAL EMULATOR LOOP TERM: CALL TRMGET JZ TSTSIN CPI MON ; IF USER WANTS TO RETURN TO CP/M IF PMMI JZ DISCON ; DISCONNECT MODEM CPI ENQ ; IF ^E ENDIF IF APLCPM JZ DISCON ; DISCONNECT MODEM CPI ENQ  ; IF ^E ENDIF JZ BBASE ; THEN JUST EXIT IF OTHER AND SMART CPI ENQ ; IF ^E JZ SIOINI ; THEN DIAL AND SIGN ON TO COMPUSERVE ENDIF IF OTHER AND NOT SMART CPI ENQ ; IF ^E JZ SIGNON ; THEN SIGN ON TO COMPUSERVE ENDIF CPI DC2 ; IF ^R JZ PRTON ; THEN TURN PRINTER ON CPI DC4 ; IF ^T JZ PRTOFF ; THEN TURN PRINTER OFF CPI ESC ; IF ESCAPE JZ LOCALP ; THEN GO DO LOCAL PROCESSING CALL PUTSIO ; ELSE PUT CHAR OUT TO SIO TSTSIN: CALL GETSIN ; ELSE GET A CHAR FROM SIO JZ TSTPRT CPI DLE ; IF JZ ISDLE ; THEN PROCESS CPI SI ; IF JZ ISSI ; THEN PROCESS CPI SO ; IF JZ ISSO ; THEN PROCESS  CPI ESC ; IF JZ ISESC ; THEN GO PROCESS ESCAPE SEQUENCE CPI DC2 ; IF ^R JZ PRTON ; THEN TURN PRINTER ON CPI DC4 ; ELSE IF ^T JZ PRTOFF ; THEN TURN PRINTER OFF IF RUBOUT ; IF CONSOLE DOESN'T DELETE CPI BS ; THEN IF CHAR IS <08> JZ DLT ; THEN JMP DLT TO ADD SPACE AND BACKSPACE ENDIF IF HZ19 ; IF RUNNING A H/Z-19 CONSOL CPI FF ; THEN IF CHAR IS JZ FFHZ19 ; THEN MAP IT TO ENDIF NOTSIM: CALL TERDSP ; DISPLAY/PRINT CHARACTER TSTPRT: LSTST: IF NOT APLCPM CALL 0000 ; MODIFIED TO LIST STATUS ORA A ENDIF IF APLCPM LDA PCTL ANI PRDY ENDIF IF NOT MX80 AND APLCPM JZ TERM ; IF PRINTER IS BUSY ENDIF  IF MX80 AND APLCPM JNZ TERM ; IF PRINTER IS BUSY ENDIF ; THEN CONTINUE TO SERVICE THE ; KEYBOARD & MODEM AT HIGH POLLING RATE LHLD HEAD ; GET HEAD POINTER XCHG LHLD TAIL ; AND TAIL POINTER CALL DEHLCMP ; SEE IF THEY ARE EQUAL JZ TERM ; IF SO, BUFFER IS EMPTY, SO EXIT PUSH H ; SAVE TAIL POINTER MOV A,M ; GET THE CHAR ANI 7FH ; STRIP PARITY LXI H,LINCNT ; POINT TO LINE COUNTER CPI FF ; IF FF JZ NEWPAGE ; RESET LINE COUNTER CPI LF ; IF LF JNZ OUTP ; DECREMENT LINE COUNTER DCR M ; IF ROOM LEFT ON PAGE JNZ OUTP ; OUTPUT THE LF NEWPAGE: MVI M,PAGLEN ; ELSE A FF MVI A,FF OUTP: MOV E,A MVI C,FN$WL ; CHAR TO LIST DEVICE CALL BDOS POP H ; RESTORE TAIL PTR INX H LDA BDOS+2 ; CHECK FOR MEMORY TOP DCR A CMP H JNC OUTP1 LXI H,PRTBUF ; WRAPAROUND OUTP1: SHLD TAIL ; UPDATE TAIL PTR JMP TERM DEHLCMP: ; TEST (DE)-(HL) COMPARISON MOV A,D CMP H RNZ MOV A,E CMP L RET ; GET A CHARACTER FROM LOCAL TERMINAL ; RETURN Z FLAG IF LOCAL NOT READY TRMGET: CALL 0000H ; **** MODIFIED ADDRESS!!! ANI 01 RZ ; RETURN IF NO LOCAL INPUT TERMRD: CALL 0000H ; **** MODIFIED ADDRESS!!! ANI 7FH ; RETURN WITH PARITY STRIPPED RET ; HERE IF (^R) RECEIVED FROM HOST OR CONSOLE PRTON: MVI A,0FFH  ; SET PRINTER FLAG STA PRTFLG JMP TERM ; HERE IF (^T) RECEIVED FROM HOST OR CONSOLE PRTOFF: XRA A ; CLEAR PRINTER FLAG STA PRTFLG JMP TERM ; HERE IF RECEIVED FROM CONSOLE - LOCAL PROCESSING LOCALP: MVI A,DC3 ; STOP TRAT CALL PUTSIO LOCLRD: CALL TERMRD ANI 7FH CPI 'H' ; (H)ELP FUNCTION JZ HELP CPI 'D' ; (D)IRECTORY FUNCTION JZ DIR CPI ESC ; (E)SCAPE FUNCTION JZ TRANSP LOCLXT: MVI A,DC1 ; RESUME TRANSMISSION CALL PUTSIO JMP TERM ; HERE ON ELP - DISPLAY MENU HELP: CALL PRTMENU ; DISPLAY MENU ON CONSOLE JMP LOCLXT PRTMENU: LXI D,MENU MVI C,FN$PCB ; DISPLAY MENU ON CONSOLE CALL BDOS RET ; HERE ON IRECTORY - DISPLAY DISK DIRECTORY DIR: LXI H,SRCHFCB CALL INIT LXI D,DIRMSG ;PROMPT FOR DRIVE MVI C,FN$PCB CALL BDOS MVI C,FN$RC ;GET DRIVE CALL BDOS CPI CR JZ DEFDRV ANI 7 ;MASK OFF DRIVE NUMBER JMP DIRNM DEFDRV: XRA A ;USE DEFAULT DRIVE DIRNM: STA SRCHFCB CALL QMARK CALL DRIVE LXI D,TBUFF MVI C,FN$SDA CALL BDOS XRA A STA NAMECT ;CR AFTER 4 NAMES LXI D,SRCHFCB MVI C,FN$SF ;DO FIRST SEARCH CALL BDOS CPI 0FFH JZ NOFILE DIRLP: CALL GETADD LXI D,15 ;OFFSET FOR RECORD COUNT DAD D MOV A,M ORA A JZ NEXTSR ;NO LIST IF FILE IS ZERO LENGTH LXI D,-5 DAD D ;POINT TO $SYS ATTRIB BYTE MOV A,M ANI 80H JNZ NEXTSR ;NO LIST IF $SYS FILE LXI D,-10 DAD D ;POINT TO BEGINNING OF NAME INX H ;POINT TO FIRST LETTER LXI D,PRNTNAME MVI B,8 CALL MOVE INX D MVI B,3 CALL MOVE CALL ILPRT PRNTNAME: DB ' ',' ',' ', ' | ', 0 ;8,1,3 SPACES LDA NAMECT INR A STA NAMECT ANI 03H ORA A CZ CRLF NEXTSR: LXI D,SRCHFCB MVI C,FN$SN ;DO NEXT SEARCH CALL BDOS CPI 0FFH JZ DIRDONE JMP DIRLP NOFILE: CALL ILPRT DB 'NOT FOUND',0 DIRDONE: CALL CRLF JMP LOCLXT QMARK: MVI A,'?' ;IF BLANK IN FCB, PUT IN 11 ?'S MVI B,11 LXI H,SRCHFCB+1 QSTLP: MOV  M,A INX H DCR B JNZ QSTLP RET GETADD: ANI 03H ;GET MOD4 FOR CP/M 1.4 ADD A ADD A ADD A ADD A ADD A MOV E,A MVI D,0 LXI H,80H ;ADD DMA OFFSET DAD D RET DRIVE: LDA SRCHFCB ;IF NO DRIVE, CAL ORA A ;LOGGED IN DRIVE JZ CALCDR ADI 40H JMP PRNTHD CALCDR: MVI C,FN$ID CALL BDOS ADI 41H PRNTHD: STA DRNAME CALL ILPRT DB CR,LF,LF,'DRIVE ' DRNAME: DB ' ',CR,LF,0 RET INIT: PUSH H ;INITIALIZES FCB WITH 1 NULL (FOR FIRST DRIVE),.. PUSH B ;..11 BLANKS, 4 NULLS, 1 NULL (FOR 2ND DRIVE),.. MVI M,0 ;..11 BLANKS, AND 4 NULLS. INX H MVI B,11 MVI A,20H CALL INITFILL MVI B,5 MVI A,0 CALL INITFILL MVI B,11 MVI A,20H CALL INITFILL MVI B,4 MVI A,0 CALL INITFILL POP B POP H RET INITFILL: MOV M,A INX H DCR B JNZ INITFILL RET ILPRT: XTHL ILPLP: MOV A,M ORA A JZ ILPRET CALL VIODSP INX H JMP ILPLP ILPRET: XTHL RET CRLF: MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP RET DLT: MVI A,SPC CALL VIODSP MVI A,BS CALL VIODSP JMP NOTSIM MOVE: MOV A,M STAX D INX H INX D DCR B JNZ MOVE RET ; HERE ON - TRANSMIT ESCAPE CHAR TRANSP: MVI A,DC1 ; RESUME TRANSMISSION CALL PUTSIO MVI A,ESC ; SEND ESC CHAR CALL PUTSIO JMP TSTSIN ; HERE IF RECEIVED FROM HOST ISDLE: CALL GETSIX ; GET CHARACTER FOLLOWING CALL TERDSP ; DISPLAY IT ON CONSOLE/PRINTER JMP TERM ISSO: XRA A ; DISABLES PROTOCOL MODE IF SHOXFR STA SHOFLG ENDIF LXI SP,STACK ; RESTORE STACK INCASE OF ABORT ISSI: STA SIFLAG ; ENABLES PROTOCOL MODE JMP TERM ; HERE ON ISESC: LDA SIFLAG ; IF NOT RECEIVED ORA A MVI A,ESC IF NOT HZ19 JZ NOTSIM ; THEN JUST DISPLAY IT ENDIF IF HZ19 JZ CK1061 ; THEN CHECK FOR SPECIAL MAPPINGS ENDIF ISESCN: CALL GETSIX ; ELSE GET CHARACTER FROLLOWING CPI 'I' ; IF JNZ ESC0 ; THEN LXI H,SYSID ; SEND THE ID STRING TO HOST SNDID: MOV A,M ; GET NEXT ID BYTE ORA A ; IF NULL JZ TERM ; THEN FINISHED CALL PUTSIO ; ELSE SEND TO HOST INX H JMP SNDID IF HZ19 ; IF WE HAVE A H/Z-19 AS CONSOLE CK1061: CALL GETSIX ; GET CHAR FOLLOWING CPI 'J' ; = JNZ NT1061 FFHZ19: MVI A,'E' NT1061: PUSH PSW MVI A,ESC CALL TERDSP POP PSW JMP NOTSIM ENDIF ; H/Z-19 MAPPING ESC0: CPI 'L' ; IF JNZ ESC1 ; THEN MVI E,0 ; PERFORM SYSTEM LOAD FUNCTION CALL GETCKS ; GET BYTE COUNT MOV B,A CALL GETCKS ; GET LOW ADDRESS BYTE MOV L,A CALL GETCKS MOV H,A ; AND HIGH-ORDER ESCL0: CALL GETCKS ; GET NEXT DATA BYTE MOV  M,A ; SAVE IT INX H ; BUMP MEMORY ADDRESS DCR B ; COUNT BYTES RECEIVED JNZ ESCL0 ; & LOOOP TILL ZERO MOV C,E ; SAVE CHECKSUM CALL GETCKS ; GET NEXT BYTE CMP C ; IF MATCH MVI A,'.' ; THEN SEND . JZ ESCL1 ; ELSE MVI A,'/' ; SEND / ESCL1: CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ; DISPLAY PROTOCOL MARK ENDIF JMP TERM IF NOT SHOXFR VIOMRK: PUSH PSW MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP MVI A,32 STA XFRCTR POP PSW CPI '.' CNZ VIODSP RET CTXFR: PUSH H PUSH PSW LXI H,XFRCTR ; DECREMENT COUNT OF XFR'D CHARACTERS DCR M JNZ CTXFR0 MVI M,32 MVI A,'+' ; DISPLAY '+' EVERY 32 BYTES CALL VIODSP CTXFR0: POP PSW POP H RET ENDIF ESC1: CPI 'A' ; IF JNZ TERM ; THEN ; INITIALIZE FOR DATA TRANSMISSION USING THE COMPUSERVE A-PROTOCOL ; THE PROTOCOL BEGINS WITH THE FOLLOWING BEING SENT FROM THE HOST: ; ; WHERE: ; U = UPLOAD, D = DOWNLOAD ; A = ASCII (FILE ENDS IN 1AH), B = BINARY ; FILESPEC = STANDARD CP/M FILE SPECIFICATION, INCLUDING OPTIONAL DRIVE ; CKSUM = CHECKSUM FOR THE RECORD MVI A,'0' ; INIT RECORD NUMBER STA APNXT CALL APRCVX ; GET COMMAND LINE FROM HOST LXI H,APBUF+2 ; POINT TO FILE SPEC FROM USER LXI D,TFCB ; POINT TO FILE CONTROL BLOCK MOV B,M ; GET POSSIBLE DISK DRIVE NAME INX H ; IF : NEXT MOV A,M CPI ':' JNZ NOCOL ; THEN INX H ; SKIP THE COLON MVI A,7 ; MASK OFF DRIVE NUMBER ANA B JMP FIRSTB NOCOL: DCX H ; POINT BACK TO FIRST FILE BYTE XRA A ; USE DEFAULT DRIVE NUMBER FIRSTB: STAX D ; STORE DRIVE NUMBER INX D ; POINT TO FIRST FILE NAME BYTE MVI B,8 ; MAX LENGTH OF NAME CALL NAAME ; GET FILE NAME MOV A,M ; GET NEXT BYTE CPI '.' ; IF . PRESENT JNZ EXT ; THEN INX H ; SKIP OVER IT EXT: MVI B,3 ; LENGTH OF EXTENSION CALL NAAME ; GET EXTENSION XRA A ; ZERO FILE EXTENT STAX D LDA TFCB ; SELECT THE DISK ORA A ; IF 0 THEN USE DEFAULT DISK JZ NODISK  SUI 1 ; MAP A INTO 0, B INTO 1, ETC. MOV E,A MVI D,0 MVI C,FN$SD CALL BDOS NODISK: LDA APBUF+1 ; STORE TRANSFER TYPE STA XFRTYP LDA APBUF ; CHECK DIRECTION CPI 'D' ; IF DOWN LOAD JNZ CHKUPL ; THEN LXI D,DNLOAD MVI C,FN$PCB CALL BDOS MVI C,FN$OPN ; IF THE FILE EXISTS CALL DSKOP CPI 0FFH JZ DLOKAY ; THEN LXI D,DLBOMB ; TELL THE USER ABOUT IT MVI C,FN$PCB CALL BDOS MVI C,FN$RC ; GET USER'S RESPONSE CALL BDOS ANI 7FH PUSH PSW MVI A,CR CALL VIODSP MVI A,LF CALL VIODSP POP PSW CPI 'Y' ; IF NOT 'Y' JZ DLDEL CPI  'Y' JNZ ABORT ; THEN ABORT THE DOWNLOAD ATTEMPT DLDEL: MVI C,FN$DEL ; ELSE DELETE THE FILE CALL DSKOP DLOKAY: CALL OPNOUT ; OPEN FOR OUTPUT IF SHOXFR MVI A,0FFH STA SHOFLG ENDIF ; THE FOLLOWING LOOP DOES THE DOWNLOAD FUNCTION DL0: CALL APRCV ; GET NEXT LINE OF DATA JNZ DLEOT ; HANDLE END OF TRANSMISSION LXI H,APBUF ; POINT TO BUFFER DL1: MOV A,M ; GET NEXT BYTE INX H ; POINT TO NEXT BYTE CALL PUTBYT ; PUT IT INTO OUTPUT BUFFER DCR B ; COUNT THE BYTE JNZ DL1 JMP DL0 ; GET NEXT RECORD FROM HOST ; HERE WHEN THE HOST'S MESSAGE HAS BEEN RECEIVED DLEOT: LDA XFRTYP ; IF BINARY TRANSFER CPI 'B' JZ DLEOTB ; THEN DON'T INSERT ^Z MVI  A,EOF ; PUT ^Z (END OF FILE MARK) CALL PUTBYT DLEOTB: MVI C,FN$WDR CALL DSKOP DLEOT0: MVI C,FN$CLS CALL DSKOP CALL RSTDEF MVI A,'.' ; TELL HOST WE GOT IT CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF IF SHOXFR XRA A STA SHOFLG ENDIF JMP TERM ; BACK TO TERMINAL MODE ; HERE IF NOT A DOWN LOAD - BETTER BE UP LOAD! CHKUPL: CPI 'U' JNZ ABORT ; SEND NAK TO HOST IF NOT . LXI D,UPLOAD MVI C,FN$PCB CALL BDOS CALL OPNINP ; OPEN THE FILE FOR INPUT MVI A,'.' ; TELL HOST WE'RE READY TO SEND DATA CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF ; THE UPLOAD FUNCTION IS DONE IN THE FOLLOWING LOOP: CALL GETSIX ; GET HOST'S PROMPT CPI '.' ; ABORT IF NOT '.' JNZ ABORT IF SHOXFR MVI A,0FFH STA SHOFLG ENDIF UPL1: MVI B,0 ; INIT COUNT LXI H,APBUF UPL2: CALL GETBYT ; GET DATA FROM FILE JP UPL3 ; JUMP IF OCCURED MOV M,A ; THEN PUT INTO BUFFER INX H ; BUMP POINTER INR B ; AND BYTE COUNT JNZ UPL2 ; GET NEXT BYTE IF BUFFER NOT FILLED UPL4: MOV A,B ; SAVE COUNT STA APLEN CALL APSND ; SEND THE DATA JMP UPL1 ; GO DO NEXT LINE UPL3: MOV A,B ; WRITE FINAL DATA BLOCK IF THERE IS ONE STA APLEN ORA A CNZ APSND MVI A,0FFH ; SEND MESSAGE WITHOUT MASKING LXI H,EOTMSG CALL APSND0 CALL RSTDEF ; RESTORE CP/M'S DEFAULT DISK DRIVE IF SHOXFR XRA A STA SHOFLG ENDIF JMP TERM ; RETURN TO TERMINAL MODE EOTMSG: DB 1,EOT ;*** ; ROUTINE TO INTERFACE TO CP/M'S CONSOLE OUTPUT DRIVER VIODSP: PUSH B ; SAVE REGISTER PUSH D PUSH H PUSH PSW IF USEBIOS MOV C,A TERMWR: CALL 0000H ; ***** MODIFIED TO CONOT IN BIOS ENDIF IF NOT USEBIOS MOV E,A ; CALL BDOS TO WRITE CHAR ON CONSOLE MVI C,FN$WC CALL BDOS ENDIF POP PSW POP H POP D POP B RET ; ROUTINE TO DISPLAY C(A) ON CP/M CONSOLE AND PRINTER IF NECESSARY TERDSP: PUSH PSW ; SAVE C(A) CALL VIODSP ; DISPLAY ON CONSOLE POP PSW ; GET CHARACTER BACK MOV E,A ; SAVE CHARACTER   LDA PRTFLG ; IF ^R RECEIVED ORA A RZ ; THEN ; STORE THE CHAR IN THE PRINTER BUFFER LHLD HEAD ; GET BUFFER PTR MOV M,E ; STORE THE CHAR INX H ; BUMP PTR LDA BDOS+2 ; CHECK FOR TOP OF MEMORY DCR A CMP H JNZ TERDS1 ; IF REACHED, WRAPAROUND LXI H,PRTBUF TERDS1: SHLD HEAD ; UPDATE PTR RET ; ROUTINE TO OPEN A FILE FOR OUTPUT OPNOUT: MVI C,FN$CRE ; CREATE FILE CALL DSKOP ; CALL CP/M CPI 0FFH ; IF OKAY JZ ERRCRE ; ERROR DURING CREATE (DIRECTOR FULL?) XRA A ; CLEAR NEXT RECORD COUNT STA TFCB+FCB$NR STA IBP ; INIT BUFFER POINTER RET ; ROUTINE TO OPEN FILE FOR INPUT OPNINP: MVI C,FN$OPN CALL DSKOP CPI 0FFH ; IF FILE NOT FOUND JZ ERROPN ; THEN ERROR MESSAGE TIME! XRA A STA TFCB+FCB$NR ; INIT TO FIRST RECORD MVI A,80H ; "EMPTY BUFFER" STA IBP RET ; ROUTINE TO PUT C(A) INTO DISK BUFFER PUTBYT: PUSH B ; SAVE REGS PUSH D PUSH H PUSH PSW ; SAVE BYTE LDA IBP ; IF BUFFER IS FULL CPI 80H JNZ PUT0 ; THEN MVI C,FN$WDR CALL DSKOP ORA A JNZ ERRWDR ; WRITE ERROR??? XRA A ; INIT IBP TO 0 PUT0: MOV E,A ; SAVE CUR BYTE POSITION MVI D,0 INR A ; BUMP POINTER STA IBP LXI H,TBUFF ; POINT TO BUFFER DAD D ; NOW POINT TO BYTE POP PSW ; GET BYTE MOV M,A ; STORE BYTE POP H ; RESTORE REGS POP D POP B  RET ; ROUTINE TO GET NEXT BYTE FROM A DISK RECORD GETBYT: PUSH B ; SAVE REGS PUSH D PUSH H MVI B,0 ; ASSUME NOT LDA IBP ; IF BUFFER IS EMPTY CPI 80H JNZ GET0 MVI C,FN$RDR CALL DSKOP MOV B,A ; SAVE RETURN CODE (0 IMPLIES OKAY) XRA A ; RESET BYTE POINTER GET0: MOV E,A ; SAVE BYTE POS MVI D,0 INR A ; BUMP BYTE POS STA IBP LXI H,TBUFF DAD D LDA XFRTYP ; IF BINARY TRANSFER CPI 'B' JZ GTBTBN ; THEN DON'T CHECK FOR ^Z MOV A,M ; GET THE BYTE CPI EOF ; IF ^Z JNZ GTRSTR ; THEN MVI B,1 ; WE WILL EXIT WITH N CLEARED GTRSTR: DCR B ; SET N IF NOT EOF POP H ; RESTORE REGS POP D POP B  RET GTBTBN: MOV A,M ; GET BINARY BYTE JMP GTRSTR ; SET N FLAG AND EXIT ; FATAL CP/M ERROR CONDITIONS PRINT A LOCAL MESSAGE ; THEN SEND A TO HOST ERRCRE: LXI D,CREMSG JMP DFATAL ERROPN: LXI D,OPNMSG JMP DFATAL ERRWDR: LXI D,WDRMSG JMP DFATAL DFATAL: FATAL: MVI C,FN$PCB ; WRITE ERROR MESSAGE CALL BDOS ABORT: LXI D,ABLOAD ; TELL USER WE ARE ABORTING MVI C,FN$PCB CALL BDOS MVI C,FN$CLS CALL DSKOP CALL RSTDEF ; RESTORE DEFAULD DISK MVI A,KNAK CALL PUTSIO ; TELL HOST WE HAVE BOMBED JMP ISSO ; DISABLE PROTOCOL MODE ; HERE TO DO A CP/M DISK OPERATION; CALLED WITH DESIRED FUNCTION CODE IN C DSKOP: LXI D,TFCB CALL BDOS PUSH PSW ; SAVE RETURN CODE XRA A  ; OUTPUT A NULL TO CONSOLE CALL VIODSP ; TO FLUSH DISK BUFFER POP PSW ; RESTORE DSK RETURN CODE RET ; ROUTINE TO RESTORE CP/M'S DEFAULT DISK DRIVE RSTDEF: LDA CPMDEF MOV E,A MVI D,0 MVI C,FN$SD CALL BDOS RET ; ROUTINE TO EXTRACT FILE NAME AND EXTENSION NAAME: MOV A,M ; GET NEXT BYTE CPI CR ; ENDS NAME JZ FILL ; FILL IF END OF STRING CPI '.' ; IF EXTENSION JZ FILL ; THEN FILL OUT WITH SPACES INX H ; SKIP THIS BYTE CPI 60H ; LOWER CASE A JC NAME1 ; JUMP IF NOT LOWER CASE SBI 20H ; CONVERT LOWER CASE TO UPPER NAME1: STAX D ; STORE BYTE IN FCB INX D DCR B ; COUNT THIS BYTE JNZ NAAME ; PROCESS NEXT IF MORET RET FILL: MVI A,' ' ; STORE A SPACE   JMP NAME1 ; THIS ROUTINE RECEIVES A RECORD USING THE ASCII PROTOCOL APRCV: MVI A,'.' ; PROMPT REMOTE FOR NEXT RECORD CALL PUTSIO IF NOT SHOXFR CALL VIOMRK ENDIF APRCVX: LDA APNXT ; BUMP EXPECTED RECORD ^UMBER INR A CPI '9'+1 ; WRAP-AROUND JC APRCVY ; JUMP IF LEQ 9 MVI A,'0' APRCVY: STA APNXT IF NOT SHOXFR CALL VIODSP ENDIF APRCV0: CALL TRMGET ; GET LOCAL KEYBOARD INPUT CPI ETX ; IF ^C JZ ABORT ; THEN ABORT THE TRANSFER CALL GETSIX ; GET NEXT CHARACTER CPI SOH ; STARTS THE RECORD JZ APRCV1 CPI ETX ; BY ITSELF IS QUESTIONABLE JNZ APRCV0 MVI A,'/' ; SEND A LOGICAL NAK CALL PUTSIO IF NOT SHOXFR CALL VIODSP ENDIF  JMP APRCV0 APRCV1: MVI E,0 ; INIT CHECKSUM MOV B,E ; INIT BYTE COUNT MOV A,E ; CLEAR FLAG STA APEOT LXI H,APBUF CALL GETCKS ; GET SENDER'S RECORD NUMBER STA APCUR APRCV2: CALL GETCKS ; GET A CHECKSUMMED CHARACTER JZ APRCV3 MOV M,A ; PUT BYTE IN BUFFER INR B ; COUNT THIS BYTE INX H IF NOT SHOXFR CALL CTXFR ; DISPLAY '+' EVERY 32 BYTES ENDIF JMP APRCV2 APRCV3: MOV C,E ; SAVE CHECKSUM CALL GETCKS ; GET REMOTE'S CHECKSUM CMP C ; IF SAME JNZ APRCV4 ; THEN LDA APNXT ; CHECK RECORD COUNT MOV C,A LDA APCUR CMP C JNZ APRCV8 ; JUMP IF NOT MATCHED MOV A,B ; STORE BYTE COUNT STA APLEN LDA APEOT ; RETURN WITH EOT FLAG STATUS ORA A RET APRCV4: MVI A,'/' ; ELSE REQUEST RETRANSMISSION CALL PUTSIO IF NOT SHOXFR CALL VIODSP ENDIF JMP APRCV0 APRCV8: JNC ABORT ; ABORT IF RCV GTR EXPECTED MVI A,'.' ; MUST HAVE RECEIVED A DUPLICATE RECORD CALL PUTSIO ; ACCEPT IT, AND TRY AGAIN IF NOT SHOXFR CALL VIOMRK ENDIF JMP APRCV0 ; ROUTINE TO SEND A MESSAGE APSND: XRA A ; FLAG FOR MASKING CONTROL CHARACTERS LXI H,APLEN ; BUFFER ADDRESS: LENGTH FOLLOWED BY DTA APSND0: STA APFLG ; STORE MASK FLAG SHLD APADDR ; STORE BUFFER ADDRESS LDA APNXT ; BUMP NEXT RECORD COUNT INR A CPI '9'+1 JC ASND0A MVI A,'0' ASND0A: STA APNXT IF NOT SHOXFR CALL VIODSP ENDIF APSND1: MVI E,0 ; CLEAR CHECKSUM LHLD APADDR MOV B,M ; GET LENGTH INX H ; POINT TO DATA MVI A,SOH ; START THE MESSAGE CALL APPUTS LDA APNXT ; SEND RECORD NUMBER CALL DOCKS ; UPDATE CHECKSUM CALL APPUTS APSND2: MOV A,M ; GET NEXT DATA BYTE CALL DOCKS ;UPDATE CHECKSUM CPI 20H ; IF CONTROL CHARACTER JNC ASND2A ; THEN LDA APFLG ; IF MASKING CONTROL CHARACTERS ORA A MOV A,M ; GET BYTE AGAIN JNZ ASND2A ; THEN CPI 05H ; FOR EFFICIENCY, ONLY MASK THE BADDIES JC ASND2B ; MASK 00H 01H 02H 03H 04H ; NUL SOH STX ETX EOT CPI DLE JZ ASND2B ; 10H DLE CPI  KNAK JNZ ASND2A ; 15H NAK ASND2B: MVI A,DLE ; SEND CALL APPUTS JMP ASND4A SND4B: IF SHOXFR CALL VIODSP ENDIF IF NOT SHOXFR CALL VIOMRK ENDIF CPI '.' RZ ; RETURN IF HOST GOT IT OKAY CPI '/' ; ELSE IF / JZ APSND1 ; THEN RETRANSMIT THE MESSAGE CPI KNAK ; ELSE IF JZ ISSO ; THEN ABORT JMP ASND4 ; ELSE KEEP WAITING APPUTS: PUSH PSW ; SAVE CHAR CALL GETSIN ; CHECK MODEM FIRST JZ APPUT4 ; THEN ANI 7FH CPI KNAK ; IF WE RECEIVE A JZ  ISSO ; THEN SHUT DOWN THE PROTOCOL CPI DC3 ; IF X-OFF JNZ APPUT4 ; THEN PUSH D ; DELAY A FEW SECONDS PUSH B MVI B,2 APPUT0: LXI D,8000H APPUT1: CALL GETSIN ; IF CHAR PRESENT JZ APPUT2 ; THEN ANI 7FH CPI DC1 ; IF ^Q (XON) JZ APPUT3 ; THEN EXIT APPUT2: DCX D MOV A,D ORA E JNZ APPUT1 DCR B JNZ APPUT0 APPUT3: POP B ; RESTORE REGS AND RETURN POP D APPUT4: POP PSW ; GET CHAR CALL PUTSIO ; SEND CHAR RET ; ROUTINE TO GET A CHARACTER FROM UART WITH WAIT GETSIN: CALL GETSIO ; RETURN SIO CHAR WITH BIT 7 = 0 RZ ANI 7FH RET GETSIX: CALL GETSIO ; GET SIO CHAR OR WAIT JZ GETSIX ; WAIT FOR A CHARACTER  CPI KNAK ; IF RECEIVED JZ ISSO ; THEN REVERT TO TERMINAL MODE RET ; RETURN GETCKS: CALL GETSIX ; GET NEXT SIO CHAR WITH CHECKSUMMING CPI ETX ; IF RZ ; THEN RETURN PUSH PSW CPI EOT JNZ NOTEOT ; THEN STA APEOT ; SET SEEN FLAG NOTEOT: CPI DLE ; IF JNZ GETCK0 ; THEN CALL GETSIX ; GET NEXT CHARACTER ANI 1FH ; MAKE CONTROL CHAR OF IT GETCK0: CALL DOCKS ; UPDATE CHECKSUM POP PSW ; RESTORE FLAGS MOV A,D ; RESTORE NEW CHAR RET ; RETURN DOCKS: MOV D,A ; SAVE BYTE MOV A,E ; GET OLD CHECKSUM RLC ; ROTATE ONE BIT LEFT ADD D ; ADD NEW BYTE ACI 0 ; ADD POSSIBLE CARRY MOV E,A ; REPLACE CHECKSUM WITH UPDATED ONE MOV  A,D ; RESTORE NEW BYTE RET ; VARIOUS MESSAGE STRINGS PROINI: DB CR,LF,'% CSEXEC - INITIALIZING FILE TRANSFER',CR,LF,'$' DNLOAD: DB CR,LF,'% CSEXEC - BEGINNING DOWNLOAD',CR,LF,'$' UPLOAD: DB CR,LF,'% CSEXEC - BEGINNING UPLOAD',CR,LF,'$' ABLOAD: DB CR,LF,'? CSEXEC - ABORTING FILE TRANSFER',CR,LF,'$' DLBOMB: DB CR,LF,'% CSEXEC - THAT FILE ALREADY EXISTS ON YOUR DISK.',CR,LF DB 'DO YOU WISH TO REPLACE IT (Y OR N) ? $' CREMSG: DB CR,LF,'? CSEXEC - DISKETTE IS FULL!',CR,LF,'$' OPNMSG: DB CR,LF,'? CSEXEC - THAT FILE IS NOT ON YOUR DISKETTE!',CR,LF,'$' WDRMSG: DB CR,LF,'? CSEXEC - YOUR DISKETTE IS FULL!',CR,LF,'$' DMSG: DB CR,LF,'++DISCONNECTED++',CR,LF,'$' DIRMSG: DB CR,LF,'DIRECTORY FOR WHAT DRIVE? $' MENU: DB ESC,'*' DB 'COMPUSERVE CP/M (R) EXECUTIVE VERSION 2.3',CR,LF IF OTHER DB '**** TARBELL/Z-80 ****',CR,LF ENDIF IF HZ89 DB '**** HEATH/ZENITH ****',CR,LF ENDIF IF PMMI DB '**** PMMI MODEM ****',CR,LF ENDIF IF APLCPM DB '**** APPLE CP/M ****',CR,LF ENDIF DB 'COPYRIGHT (C) 1980, 1981 COMPUSERVE INCORPORATED',CR,LF,LF DB ' ESC D - DISPLAY DISK DIRECTORY ' DB CR,LF DB ' ESC H - DISPLAY THIS SCREEN ' DB CR,LF DB ' ESC ESC - SEND ESCAPE CHARACTER ' DB CR,LF DB ' CTL A - SUSPENDS OUTPUT AT END OF CURRENT LINE ' DB CR,LF DB ' CTL C - STOP HOST PROGRAM EXECUTION ' DB CR,LF IF OTHER AND NOT SMART DB ' CTL E - LOGON TO COMPUSERVE ' DB CR,LF ENDIF IF OTHER AND SMART DB ' CTL E - DIAL AND LOGON TO COMPUSERVE ' DB CR,LF   ENDIF IF PMMI OR APLCPM DB ' CTL E - GO TO CPM WITHOUT DISCONNECT ' DB CR,LF ENDIF DB ' CTL H - BACKSPACES, DELETING A CHARACTER ' DB CR,LF DB ' CTL Q - RESUMES OUTPUT AFTER ^A OR ^S ' DB CR,LF DB ' CTL R - PRINTER (ON) ' DB CR,LF DB ' CTL S - SUSPENDS OUTPUT IMMEDIATELY ' DB CR,LF DB ' CTL T - PRINTER (OFF) ' DB CR,LF DB ' CTL U - DELETES LINE CURRENTLY BEING TYPED ' DB CR,LF DB ' CTL V - REDISPLAYS THE PARTIAL LINE YOU ARE TYPING ' DB CR,LF IF PMMI OR APLCPM DB ' CTL X - EXIT THIS PROGRAM AND DISCONNECT ' ENDIF IF NOT (PMMI OR APLCPM) DB ' CTL X - EXIT THIS PROGRAM ' ENDIF DB CR,LF,LF DB '$' ; I/O SUBROUTINES FOR SIO SIOGET: IF APLCPM LDA CTL ; GET STATUS FLAGS ENDIF IF NOT APLCPM IN CTL ; GET MIO STATUS FLAGS ENDIF ANI SIOIR ; ISOLATE INPUT READY FLAG IF NOT HITRUE XRI SIOIR ; INVERT IT ENDIF RZ ; RETURN IF NOW 0 IF APLCPM LDA SIO ; ELSE GET CHARACTER ENDIF IF NOT APLCPM IN SIO ; ELSE GET SIO CHARACTER ENDIF IF SHOXFR CALL PRODSP ENDIF RET ; AND RETURN (Z FLAG = 0) SIOPUT: PUSH PSW ; WRITE (A) TO SIO PUTSI1: IF APLCPM LDA CTL ; WAIT FOR FLAG TO = 0 ENDIF IF NOT APLCPM IN CTL ; WAIT FOR FLAG TO = 0  ENDIF ANI SIOTR IF NOT HITRUE JNZ PUTSI1 ENDIF IF HITRUE JZ PUTSI1 ENDIF POP PSW IF APLCPM STA SIO ENDIF IF NOT APLCPM OUT SIO ENDIF IF SHOXFR AND HZ19 PUSH PSW MVI A,ESC ; INVERT VIDEO FOR INCOMING CHARACTERS CALL VIODSP MVI A,'P' CALL VIODSP POP PSW PUSH PSW CALL PRODSP MVI A,ESC CALL VIODSP MVI A,'Q' ; RETURN TO NORMAL VIDEO CALL VIODSP POP PSW ENDIF IF SHOXFR AND NOT HZ19 CALL PRODSP ENDIF RET SIOINI: IF SMART INI: PUSH D LXI D,MDMINI ; POINT TO MODEM INITIATE CODE INI1: LDAX D CPI '$' JZ INI2 CALL PUTSIO ; SEND INITIATE TO MODEM PORT INX D JMP INI1 INI2: POP D DIAL: PUSH D LXI D,MNET ; POINT TO MICRONET PHONE NBR DIAL1: LDAX D CPI '$' JZ DIAL2 CALL PUTSIO ; DIAL MICRONET CALL VIODSP ; DISPLAY MICRONET PHONE NBR INX D JMP DIAL1 DIAL2: POP D MVI A,CR CALL PUTSIO MVI A,LF CALL VIODSP CD1: CALL GETSIN ; WAIT FOR CONNECT TO HOST BEFORE SIGN ON CPI '1' ; IF CONNECT THEN SIGN ON JZ CONCT CPI '3' ; IF NO CARRIER THEN TERM JZ NOCAR1 JMP CD1 NOCAR1: LXI D,NOCARR MVI C,FN$PCB CALL BDOS JMP TERM CONCT: MVI B,6 CONCT1: CALL GETSIN CALL VIODSP INR B JNZ CONCT1 CALL SIGNON ; START SIGN ON ROUTINE JMP TERM ENDIF IF HZ89 MVI A,3 ; INIT UART TO OUT SIO+3 ; 8 DATA BITS, 1 STOP BIT, NO PARITY ENDIF IF PMMI MVI A,93 ; 8 DATA BITS, 1 STOP BIT, NO PARITY OUT BASPRT MVI A,52 ; 300 BAUD OUT BASPRT+2 MVI A,127 ; ORIGINATE MODE OUT BASPRT+3 ENDIF IF APLCPM LDA SIO LDA CTL ; CHECK FOR CARRIER DET ANI 4 ; IF PRESENT ... RZ ; THEN ALREADY ONLINE SO EXIT LXI D,DIALMG MVI C,FN$PCB CALL BDOS DIAL: MVI A,15H ; SET 8 DATA BITS, NO PARITY, 1 STOP BIT STA CTL MVI A,8DH ; SET OFF HOOK, ORIGINATE, 300 BAUD STA CTL2 MVI B,30 ; WAIT 3 SEC FOR DIAL TONE CALL TIMER LXI H,MNET ; POINT TO PHONE NBR DIAL1: MOV A,M ; GET DIGIT ANA A JZ CDET CALL DIALDGT INX H JMP DIAL1 CDET: MVI D,30 ; ALLOW 30 SEC FOR CTS CDET1: MVI B,10 ; SET 1 SEC INTERVAL CALL TIMER LDA SIO LDA CTL ; CHECK FOR CD ANI 4  JZ CTS ; GOT CD DCR D ; NOT CD, TIMEOUT? JNZ CDET1 ; NO LXI D,ABTMSG ; YES, SEND ABORT MESSAGE MVI C,FN$PCB CALL BDOS XRA A ; HANGUP STA CTL2 JMP BBASE ; BACK TO CP/M CTS: MVI A,8FH ; ENABLE XMIT STA CTL2 CALL PRTMENU CALL SIGNON RET ; ; DIALDGT - DIAL A DIGIT DIALDGT: CALL VIODSP ; SHOW CHARACTER CPI '0' ; CHAR < 0? RC ; YES CPI '9'+1 ; CHAR > 9? RNC ; YES SUI '0' ; REMOVE ASCII BIAS JNZ DIALS MVI A,10 ; CONVERT 0 TO 10 PULSES DIALS: MOV E,A DIALC: MVI A,0DH ; GO ON HOOK FOR 61 MSEC PULSE STA CTL2 LXI B,61 CALL DELAY MVI A,8DH  ; GO OFF HOOK FOR 39 MSEC INTERPULSE DELAY STA CTL2 LXI B,39 CALL DELAY DCR E ; DONE WITH THIS DIGIT JNZ DIALC ; NO LXI B,600 ; YES DO 600 MSEC INTERDIGIT DELAY JMP DELAY ENDIF ; TIMER - WAIT # OF .1 SEC IN REG B ; TIMER: PUSH B ; SAVE # OF .1 SEC INTERVALS LXI B,100 ; WAIT 100 MSEC CALL DELAY POP B ; RECOVER COUNT DCR B ; DONE? JNZ TIMER ; NO RET ; ; DELAY - WAIT # OF MILLISECONDS IN REG BC ; DELAY: PUSH B PUSH D INR B ; BUMP B FOR LATER DCR DELAY1: MVI E,252 ; DELAY COUNT FOR 1 MSEC @ 4 MHZ. DELAY2: DCR E ; COUNT... JNZ DELAY2 ; ...DOWN DCR C ; MORE? JNZ DELAY1 ; YES DCR B  ; NO, MORE IN HIGH BYTE? JNZ DELAY1 ; YES POP D ; NO POP B RET SIGNON: MVI B,10 ; WAIT 1 SEC. CALL TIMER MVI A,ETX ; SEND CONTROL-C CALL PUTSIO LXI H,USERID ; POINT TO USERID MVI B,UIDLEN SGNON1: CALL SGNRCV ; WAIT FOR USERID PROMPT JNZ SGNON1 SGNON2: MOV A,M CALL PUTSIO SGNON3: CALL GETSIN JZ SGNON3 CALL VIODSP INX H CPI CR JNZ SGNON2 LXI H,PASSWD ; POINT TO PASSWORD MVI B,PSWLEN SGNON4: CALL SGNRCV ; WAIT FOR PASSWORD PROMPT JNZ SGNON4 SGNON5: MOV A,M CALL PUTSIO INX H CPI CR ; IF THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV  CALL VIODSP CMP M RNZ INX H DCR B JNZ SGNRCV RET IF SHOXFR PRODSP: PUSH PSW ; SAVE THE CHARACTER LDA SHOFLG ; IF IN PROTOCOL ORA A JZ PROTER ; THEN POP PSW PUSH PSW ANI 7FH ; REMOVE HIGH-ORDER BIT CPI ' ' ; IF THIS IS A CONTROL CHAR JNC PROYES ; THEN LDA XFRTYP ; IF DOING A BINARY TRANSFER CPI 'B' JZ PRONOT ; THEN "FLAG" ALL CONTROL CHARACTERS POP PSW ; ELSE FLAG ONLY FUNNY ONES PUSH PSW CPI SHOLCC ; IS IT A NORMAL CONTROL CHARACTER? JC PRONOT ; (IE, THRU , 08H - 0DH) CPI SHOHCC+1 JC PROYES PRONOT: MVI A,'^' ; FLAG THE CONTROL CHARACTER CALL VIODSP POP PSW PUSH PSW ADI 40H ; MAP CHAR TO LETTER PROYES: CALL VIODSP PROTER: POP PSW RET ENDIF IF PMMI ; ROUTINE TO DISCONNECT PMMI MODEM DISCON: MVI A,03FH OUT BASPRT+3 XRA A OUT BASPRT OUT BASPRT+2 LXI D,DMSG ; PRINT DISCONNECT MSG MVI C,FN$PCB CALL BDOS JMP BBASE ; AND EXIT ENDIF IF APLCPM DISCON: XRA A STA CTL2 LXI D,DMSG ; PRINT DISCONNECT MSG MVI C,FN$PCB CALL BDOS JMP BBASE ; AND EXIT ENDIF ; RAM STORAGE AREA IF APLCPM MNET: DB '739-8906',0 ; MICRONET PHONE NBR DIALMG: DB CR,LF,'DIALING... $' ABTMSG: DB CR,LF,'? CSEXEC - NO CARRIER DETECTED$' ENDIF IF SMART AND OTHER NOCARR DB ' NO CARRIER',CR,LF,'$' ; MESSAGE AFTER NO CARRIER RESU LT CODE ; FROM SMARTMODEM MDMINI: DB 'ATF1Q0V0E0DT','$' ; SMARTMDM SET FULL DPLX, ; RESULT CODE ON, DON'T ECHO CHARACTERS ; IN COMMAND STATE, NOW DIAL INIT. MNET: DB ' 739-8906',CR,'$' ; MICRONET PHONE NBR ENDIF USERID: DB 'User ID: ' UIDLEN EQU $-USERID DB 'NNNNN,NNN',CR ; USER ID PASSWD: DB 'Password: ' PSWLEN EQU $-PASSWD DB 'XXXXXXX/XXXX',CR ; PASSWORD SRCHFCB: DS 33 NAMECT: DS 1 IF SHOXFR SHOFLG: DS 1 ; 1 IF IN FILE TRANSFER PROTOCOL ENDIF IF NOT SHOXFR XFRCTR: DS 1 ; COUNTER FOR DISPLAYING +'S ENDIF CPMSTK: DS 2 ; SAVES CP/M'S STACK POINTER CPMDEF: DS 1 ; SAVES CP/M'S DEFAULT DISK DRIVE PRTFLG: DS 1 ; FF IF PRINTER ENABLED, 00 OTHERWISE SIFLAG: DS 1 ; NON-ZERO IMPLIES RECEIVED AND PROTOCOL ACTIVE APEOT: DS 1 ; NON ZERO IF SEEN IN GETCKS APFLG: DS 1 ; 00 IF MASKING CONTROL CHARACTERS, FF IF NOT XFRTYP: DS 1 ; 'A' IF ASCII, 'B' IF BINARY APADDR: DS 2 ; POINTER TO BUFFER APLEN: DB 0 ; LENGTH OF RECORD AS RECEIVED APBUF: DS 256 ; STORAGE FOR THE RECORD IBP: DS 1 ; BYTE POINTER APNXT: DS 1 ; EXPECTED RECORD NUMBER APCUR: DS 1 ; CURRENT (RECEIVED) RECORD NUMBER DS 256 ; STACK GOES HERE STACK: HEAD: DW PRTBUF TAIL: DW PRTBUF LINCNT: DB PAGLEN PRTBUF EQU $ END START E STACK: HEAD: DW PRTBUF TAIL: LXI H,PASSWD ; POINT TO PASSWORD MVI B,PSWLEN SGNON4: CALL SGNRCV ; WAIT FOR PASSWORD PROMPT JNZ SGNON4 SGNON5: MOV A,M CALL PUTSIO INX H CPI CR ; IF THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV P(>ӋۋӉۉ& Í Îç ,>/0Ð 2Hû ̓̓̓PMC-101 and SMARTMODEM  ] $̓Input baud rate (110, 300, 600, 1200) (2400,4800,9600,19200):͉͆110.͉300.͉600.͉1200.͉2400. ͉4800. ͉9600.͉19200. ]2m~w2u̓Allow ALL control characters on receive? Answer "Y" to use vi on unix (Y/N): ͉͆Y>Y<2ەo&}~2 ::w2I2I!"I!I~6Ow#!I0!OH"͛,HB"͛,H C>$bH O, Enter library code or phone number, Hit RET to abort this function now or CTL-X quits while dialing or ringing: I>/!I~ʜ2O ͯڙ:O i!I~A+ 0 + q!"{@~q 6"Ip͛,:Ģ!I^#~͝+#ʙ.uX:Ģ!I^#~q͈+ʪ͓+ª:ʙͤ, ” ͤ,> ͝+Ù#u, - try #*I#"Iͽ+> ͝+: ͤ,͌>]ͻ >]Z ү&:I‰:N B, Busy(, No answer, Redial? (Y)es, (N)o, (C)ontinuous, (Q)uiet continuous: ͪ+{+N2YʉCʄQ`>2I:˜2ͻ Ýͻ , :I2I:IW, CONNECTED - hit any key to stop the bellͻ ͈+͓+~ ͻ >͝+͝+R{P Gx,+0:0+> O:¤,:(WT9TA>ZTN>ZT[ I>Zû , ++ Bad library number called ++ &{+2I͌ңh2:->Z2 , ++ NO DIAL TONE ++ &7::Tx<! >! ~$Gͤ,#͈+͓+ʙ> ͝+:<Z] ͻ ͻ !ͻͻ > ͝+!ͻ(W:!ͻͻ 2:!ͻͻ 2ATM0 $ATM1 $+++$ATH $:2!ͻ͌ҮATDT $J~$~4͝+#û8͈+͓+ ͤ,Ü>GBB 01ʵCʵ3B NB 4,E,5ʵ  ͈+< ͓+<  ͤ,Ü͌ 2N ͌E :‰ :I2I=2I# ڷ ͻ Tͽ 2ͻ ʹS, ++ No ringback for autodial modem ++Ü{+x >?]Zͻ T͈+ ͓+ 7+:͏, Additional Subcommands for PMMI Modems Modem control: A - Answer tone for send or receive O - Originate tone for send or receive Parity option: 1 - Set and check for odd parity 0 - Set and check for even parity Both ends must be capable of these options which are available only in R and S modes. The parity checking will be part of the file transfer protocol. Speed Options: After entering your primary and secondary options, you can set the modem speed by placing a "." after the options followed by the speed e.g., 300, 600. EXAMPLE: SBO.600 will set the modem for 600 baud ͌ҽ ¼ {+ }0_.!~w+ *. xxxxxxx,,,,,,xxxxxxxx,,$xxxxxxx,,,,,,xxxxxxxx,,$ A=................................B=................................C=Cro's Nest..............595-0541D=dBase II............408-378-8733E=EBMMUG Lib.appoint.only 376-1611F=................................G=................................H=Humor & Wisdom..........674-0660I=................................J=................................K=................................L=................................M=Moraga RBBS.............376-3632N=................................O=................................P=Piconet.................965-4097Q=................................R=Rich & Famous...........552-9968S=................................T=................................U=................................V=................................W=................................X=................................Y=................................Z=................................0=................................1=................................2=................................3=................................4=................................5=................................6=................................7=................................8=................................9=................................^DIR DIR *.* $U0AD XMODEM S XMODEM R BYE RBBS (vacant)(vacant)(vacant) Nice chatting, see you again soon... !9"K1K!pʹ,".J!'ʹ,"0J, MDM730 - (type M for Menu) }]2͏ʹ:I!21Kͫ:3:B:ICb:O3+:ID+M3RSTk2I2IõEz2I2IõL‰2I2Iõ~?2*"+"+"+!"J ͟A2;J̀ k:2h> @2i3>^2h32i3]2I  !OI OG>xA>2I6#~?2:XI2UI:IDEMLTG:9:=xC:IHæ2xSXR’:PI:m ,++ Enter primary option plus file name ++ 2, ++ Bad option ++ 8>ë:PI>B2PIx?2I:I:] 2I2IͲ&!>J͐!!\>J ͛,>J>J!O"I>2I :I ͈+͓+G::::IQx0^:^ù:^2I2I:I>2I::'Õ:'Ž>2I:́:!+:%ʪ:ʴ:"T::#:I/2I{+{+͉{+: ʮ ::)n:$ :&:I 2I2Iͫ:PIt,Ready to send in batch mode t>2 ͝+|>B2PI><)):] <'ͪ'Ϳ'xh)F&'ڴͧ&>2zIF&%Q%:In%r%́%ژÇ><)́%ڴ):2It:PI>2B2PI):] <'#> ͝+͏!"{+͙"Ͳ&]':PI5&,File open, ready to receive :IT&,CRC in effect >Cn&,Checksum in effect >,Waiting.....<)ͫ"ژ:r(ͧ&ͤÃ͌(ͤ')><)!_J͐!!l͐!, File name to send? (CR to abort): I>/:I ~I!_J,_J::,Want to include time delays? (Y/N): ͪ+N:2I{+I_Jq=ʧ?,++ DISK READ ERROR ++$ʧH, (in Terminal-mode now) Jͫ, [Transfer completed]~, ++ FILE NAME ERROR ++ ö!IF~ ͈+͓+# :͝+:đA͝+4 :  L<:O: O:I_ W!:~!:I~:I~!ʹ,:đ{ƒ8>̠8®>͈+ʠ͓+ :PIU&>2zI, Multiple errors encountered. Type Q to quit, R to retry: ͓+{+ʹ+Rʫ"QU&:UI!]26J p# 1:UI*xI#, Received # ͽ+, : ,(+,H) :6J<26J ʃ~ ĝ+~ >.͝+|(͝+ҏ&,Awaiting name NAK xͅ)ͤ!5J5*9J\ ͛,"9J><)7( !]~<)(0#><)Q(   a> a> a>u<), ++ ERROR sending name ++ xͅ)ͤ><)!\͒!&,Awaiting file name Q͕ʓ7>2,J!](>2+J(2+J&,Time out receiving filename Iͤw#}à2,JyQ<)(I  !\͒!&, ** Checksum error ** 2,JQÖ2,J2,JF&><)(WU&>2I25Jͦ!!"9J!!\J,,0ڱ:fŒ*9J\ ͛,"9J!5J4Ì!8J5€!"9J:5JA>@25J, ** Memory buffer :I,open ** ;,closed ** , ** Memory buffer available ** {+͕æ2*HK*NQyAJ*`]J~4m#]͌܌Ý+͈+͓+G>/,Printer buffer is :Iʯ,ON ,OFF !#½]2Iͤ,:I:Ix͝+U> :I: 8>G:,x ,x͝+U:I@ͤ,> :IJ ,:I*Ip#"I> p> ͝+́!|!yJ>4!N>2I*I !ON w͝+G ́!#¢"IJ>4͌ w#:I*Ip#"I:7JJ>4!Nz24J:4JW!8 N w͝+GU ́!# "I!"IJ>4s ^#"I:7J s !"I"I*I*I|}::ʌ 27J!?ʹ,DM8¦ > xš 7: :I]ͻ :I]̀*I6}l&)>oO :IN!͆ !>J͆!ѷ!+| <)'?,++ DISK FULL, SAVING PARTIAL FILE ++$'',++ Nothing to save, erasing file ++ ÷*>;Ý+6# 6 #•!6#ž!!8J6!IN!I 6 !IF#!~ ¾!#!~ !")J+#!~ !:8J<28J#!~ !!6 *)JJ~ "#"#~ "")J!Jp \. ~N"#~+] ͛,!e~w#~w\!\l ͛,!u6B#6A#6Kl!l6\:\2zI (ڥ#O7>2-J2+J{y"(G"G2-Jx2+J$z":-Jʥ#:UI #{+x+,H received not SOH - $F&:I>:#:I>:#>C<):zI<2zI ڰ": U&ý1K'', ++ RECEIVED FILE CANCELLED ++ ++ UNFINISHED FILE DELETED ++ ÷*:UI#, ++ Timeout $# #:zI:I:I/2I2&,** Switching to Checksum mode **  >2I(ڥ#W(ڥ#/J$:UI #, ++ Bad record # in header #z2wI>2I!"I!(ڥ#w,^$2I:I”$Q(ڥ#$:wIG:xI$%,(+,H) ><):xI<):xI/<)>2I!"I!~<),a%2Iy<)*I|<)}<)>2-J2+J(GҘ%2-J2+Jxʰ%ƒ%:-J%&:I%:UI%,++ x%+,H%,NAK, received not ACK - $2I:zI<2zI ?, ++ SEND-FILE CANCELLED ++$, ++ TIMEOUT - no ACK - $%:UI͈+͓+1K(X&><)(e&> <)>B2PI2I2I:IRS#, ++ FILE CANCELLED ++ ÷**xI#"xI}!\ #~?'·&:PI'\<,File exists - erase? (Y/N): ͪ+Y2{+\,++ NO WILDCARDS ALLOWED FOR TEXT FILES ++ 2,++ NO FILE SPECIFIED ++ 2\2|Iy2I!O"}I'*}I!͙,"}I:I<2IO(:IOO\!! •(2I!O"}I:Iy(y: ͫ!+J^*0J(*.J8(z((F&7> ).)!,J^(͈2O:VI1):XI6):I6)F+F&:WIR):XIW):IW)F+͈2OA^)4,Waiting ready signal {+F&(U&Cʣ))…)U&&,CRC request received >2I:PI&,Got checksum request &,Name NAK received :PI—*:UIj* !I*>w#* !]I*>6*~ ,*#xD**~ D*>.*, , Transferred :\22J!\͐!:2J2\!iIwI͛,Jͫ:> h:e:eæ2!l\͛,2|2h n+ n+ n+ _+n+>(n++>)n+_> ͝+> ͝+O͓+ʹ+͝+a{_ + |Ľ+{0n+|+}++ ,0n+,CTL-@͝+,~$,n+#,~8,:UI~n+#', :,>͝+{+>2I:PI*U&:;J_͡A xl,͉,:IcG:*K É,~#›,Jx4I!\,:=º,5-#^#6 ^-p- !- , p- !- -, ^-p- !- p-#̈́- ̈́-6# > W-W- > W-W-w#W-:n-_@w# . p-w#p-~*ʔ-#†-×-ͩ-~*ʥ-#™-ͩ-6?#©-ͦAA2/25/- I!\,!_J͐!:l2_J:m ...: 28J_J<.,++ FILE NOT FOUND ++u..#5.00, . _J? !`Jw#.!m`J 0=ƀo&:_J/=_@2/25/,Drive : k bytes free on drive : $0կ͓+ʹ+ /ʉ/ʉ/ʿ//G#4+~#/px/ ԝ+#L/#G~wڨ/+xF6 ʯ/ʭ/L/4L/>͝+> ͝+>͝+L/>#͝+{+B/G>#͝+{+xL/͝+/L/>͝+5L/{+L/{+F##> w# 0~(0!0#0#"07#2h:Iy0>2I!\J 0:\2J!J\ 0\í0!J\ 0\!J\ 0\<7¶02I=Ɓo&J 0] 02h2|><0~# x0,File open: *Iͽ+: 1, (+,H), records Send time: :_!1^#V*I&2i`ͽ+, mins, !1:_~:2E2E2E2E2&ͽ+, secs at 1&,To cancel: use CTL-X  0`@J0(  !1:__ , bps 110$300$450$600$710$1200$2400$4800$9600$19200${/_z/W12 !<=?2}o|g>o*I|>!L!yg)x2>g>!ol2r$s%# b2*IO!L ~W$^"I:I2, ** File still open, use DEL, DIR, WRT, E, L or T ** 22I!iIwI͛,!\IOI ͛,2I2+J2,J2I=bH, Single Letter Commands ? - Display current settings ^ - Function key intercept character, then (0-9) M - Display the menu E - Terminal mode with echo L - Terminal mode with local echo T - Terminal mode For copying text to disk use T (E or L) FILENAME.TYP Start or Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol COMMAN D: R (or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g., *.*) D - Disconnect when done Q - Quiet mode (no messages to console) V - View or bytes on console X - When done, disconnect, go to CP/M The single letter commands may also be used on the command line when the program is initially executed. ͏, Three Letter Commands CPM - Exit from this program to CP/M DIR - List directory and space free (may specify drive) ERA - Erase file (may specify drive) LOG - Change default drive/user no. (specify drive/user) and reset disks. e.g. LOG A0: or LOG B: (user # unchanged) SPD - Set file output speed in terminal mode vDb8,TIM - Select Baud rate for "time-to-send" msg. :ʘ8,TCC - Toggle CRC/Checksum mode on receive :8,TLC - Toggle local command immediate or after :', :"9,TLF - Toggle LF after CR in "L" or "T" mode for a disk file :Z9,TRB - Toggle rubout to backspace conversion :ʝ9,TXO - Toggle XOFF testing in terminal mode file output :9:9,NUM - List remote systems : 9,SET - Set modem baud rate ,BYE - Disconnect, then return to CP/M :)::@:,CAL - Dial number ,DSC - Disconnect from the phone line The following are terminal text buffer commands: ,DEL - Delete memory buffer and file WRT - Write memory buffer to disk file 2H, Local Commands while in Terminal Mode : , - Send a break tone for 300 ms. :;:), - Change baud rate >, - Exit to command mode :;:", - Send log-on message :!, - Disconnect from the phone line :<:#, - Toggle printer > ͝+:&, - Start copy into buffer :$, - Stop copy into buffer Start & Stop may be toggled as often as desired. A ";" at start of line indicates buffer is copying. XOFF automatically used to stop input when writing full buffer to disk, XON sent to resume. :%, - Transfer ASCII file to remote ::'=, - Send local control character to remote =, - Next character will be used for local control z{+:I'>7I, Bytes of buffer free A͝+͟A>>&oͽ+>>͝+>>͝+,COMMAND: 2II>/:I'>^ʛ??zH >:I:#CI0CPMZ,{+0LOGA0DIRҤ@0ERAһ@0SPDB0TIM]C0TCC҄D0TRBD0TLCE0TLFnE0TXOE: ?: ?0NUMҕG: ?0SETF0WRTDG0DELG0BYEM@0DSC+:Q?:c?0CALc?> 2Io?:I!HI&Hx?ͫ,~?=,++ Invalid command ++ :bH, SPECIAL FUNCTION KEY TABLE ?,CTL-@͝+, current function key intercept character ! #~0͝+> ͝+#~@@ :@,$@͝+$@{+@{+=:h:{@h, << Exit to CP/M >> Z,ͻ !ͻͻ > ͝+!@ͻ(Җ@ATZ $23Jͱ-:3J_=I!\,3+:] x?\<@,++ File not found ++ =\,File erased =:I«A:I )AͦAAAx?23J͟AG:IdApA:IdArAA :3J_:=J_͡A= lA:IA͕AOxGxx?2=JI>/:I 0 x? ,++ Terminal mode file open ++ ++ Use WRT or DEL before LOG command ++ =,Delay between chars. (0-9): ͈+(B͓+͝+C0 x?2,Delay at end of line (0-9): ͈+aB͓+͝+C0 x?2 , Char. delay (terminal file mode) is: :Gxo&ͽ+,0 ms. per character Line delay (terminal file mode) is: : Go&ͽ+,00 ms. per character =, :IAx?_:I =0LC:I0XC&x?_͡A=>LCvDx?,Use 0-8 to give baud rate for 'S' mode time-to-send message, where 0=110, 1=300, 2=450, 3=600, 4=710, 5=1200, 6=2400, 7=4800 8=9600 and 9=19200 Baud. Enter value: ͉A x?2 D=vD`D,Rate for the S mode time-to-send message is set to sD,Modem speed is 1: G:::x?:/2͘D=,Mode: :ʳD,CRC ,CHECKSUM :x?:/2D=:D,Rub is backspace ,Rub is rub :x?:/2E=,Use ::'GE, before local command , to send local command to remote :x?:/2͂E=,LF :˜E,NOT ,sent after CR in "L" or "T" for a disk file :x?,Use XOFF testing? (Y/N): MFE2jF, Use XON waiting after (Y/N): MF+F2ͶF:=/2,Therefore jF=I>/:I ?GN>xY>x?,XOFF testing :ŠF,NOT ,used, in terminal mode file output ,XON :F,NOT ,automatically tested after CRÒF: x?Iw:=Aͤ,Tͤ, ͤ,=:IyG:?J yG>J2I2I!>J͐!!O"I=:IyGcG2I2I!>J͐!!O"I=:?J >J2I,++ No File Open ++ =bH, Library of Phone Numbers of Remote Systems!OH## ͛,H##B ͛,H G>$ O{+{+=> > > F#1H'H7,HIT any KEY to CONTINUE͈+MH͓+bH{+=: ž> ͝+ > ͝+rHbH, Current Settings ͘DD:ʴH͉ D,Terminal mode file buffer is :IH,in,active Unused portion of buffer is 7I, bytes E͂EjFͶFzB{+{+{+=*I믓o|gͽ+SRTELMABDJLOQRSVX01ABDJLOQRSVX01OOO4se XON waiting after (Y/N): MF+F2ͶF:=/2,Therefore jF=I>/:I ?GN>xY>x?,XOFF testing :ŠF,NOT ,used, in terminal mode file output ,XON :F,NOT ,automatically tested after CRÒF: x?Iw:=Aͤ,Tͤ, ͤ,=:IyG:?J yG>J2I2I!>J͐!!O"I=:IyGcG2I2I!>J͐!!O"I=:?J >J2I,++ No File Open ++ =bH, Library of Phone Numbers of Remote Systems!OH## ͛,H##B ͛,H G>$ O{+{+=> > > F#1H'H7,HIT any KEY to CONTINUE͈+MH͓+bH{+=: ž> ͝+ > ͝+rHbH, Current Settings ͘DD:ʴH͉ D,Terminal mode file buffer is :IH,in,active Unused portion o PROTOCOL NOTES: CIS A PROTOCOL by Bob Richardson, Carl Raff, and Scott Lowe Copyright (C) 1982 Performance Business Machines A Division of MicroPro International Corporation 101 Lucas Valley Road San Rafael, California 94903 Revised by Ken Brassler, 4/2/83 Note: this material was not prepared for or by CIS and they have no responsibility for the accuracy or completeness of the contents. We gratefully acknowlege their cooperation and the super job they are doing, and simply wish to help document the file transfer protocol. INTRODUCTION The information presented here is intended to provide an outline of the written specifications for the CIS A Protocol. It is designed to be used by programmers who may need to debug or write programs to interface with Compuserve Information Services (CIS) terminal programs. The PBM 1000 supports a communication subsystem based on the CIS protocol. One reason is that the CIS protocol is a step in the direction of software standardization and higher compatibility among different computer systems. The CIS protocol supports flexible file transfer and is practical for in-house use on a direct-connect medium speed network. PBM tests show that the protocol runs effectively at 19.2 KB and can transfer data at a rate of up to 50 KB. In transferring files from one system to another, one CP/M- based system (with a copy of any of the CIS executives that supports the A protocol) acts as a terminal. The other system, referred to as the "host," treats the "terminal" system both as a console and as the source or target of the file transfer protocol. The following is a brief description of the CIS A Protocol used by CIS. Also included is a list of Executives compatible with it, and two new files which allow anyone with a CP/M remote system to support this protocol between CP/M systems. Note: CP/M is a registered trademark of Digital Research. The Executives 1. MNEXEC [Old Executive] An older version of the Executive, MNEXEC supports ASCII transfer only . This executive is primarily useful for those who wish to buy programs from Softex, as its ESC I response is the only one that the Softex system currently recognizes as a file-xfer executive (see ESC I response). This program does not really support the A protocol, but rather a subset. 2. CSEXEC [The Compuserve Executive] CSEXEC was the first "vanilla" version with binary support. It is a good executive to start with for those wishing to heavily modify the source because it suffers less from "rampant equate-itis" than BUFEXEC (i.e, it accomplishes tasks in a more general fashion without presenting too many options to the user). The current version seems to be modified for the Apple computer. 3. BUFEXEC [Buffered CSEXEC] BUFEXEC adds memory buffered hard copy to CSEXEC, as well as many customization equates. The Osborne version is called "BUFEXO.ASM," and is identical to BUFEXEC except for modifications for the Osborne I. 4. IOBEXEC [IO/Byte Executive] This executive is identical to BUFEXEC, except that it uses IOBYTE dispatch to access the serial port. If your system is interrupt driven, you must use IOBEXEC or modify one of the other executives. In addition, IOBEXEC allows use of cursor positioning. Note: There are a number of customized protocols floating around; most are based on BUFEXEC and represent adaptation for particular hardware such as the Osborne, Kaypro, Apple, etc. PROTOCOLS Characteristics of the physical protocol: asynchronous; 8-bit; 8 bits to the byte; 1 stop bit; no parity. The protocol mode is turned "on" by an SI instruction (shift in) from the host and the terminal then functions in protocol mode until an SO (shift out) instruction is received. The ESC "I" Response: Each terminal responds to an ESC "I" with an ID string (see diagrams below). The ESC "A" Sequence: This initiates a file transfer. The ESC "L" Sequence: This starts a load sequence. Notes: The "." (period) is used to ACK a message (acknowledge and accept). The "/" (slash) is used to NAK a message (negative acknowledge; request retransmission). If Ack or Nak is not sent to CIS in a given period of time, CIS responds by re-sending ETX a total of 4 times, then aborts. A CTRL U sent to the host will abort the file transfer. A list of fields enclosed in [ ] marks indicate that 1 of the list will be transmitted, depending on the conditions at the time. ESC "I" Sequence Host Terminal "SI" (Protocol on) ------------------------------------> ESC I (Who are you?) ------------------------------------> ID String (see below) <----------------------------------- "SO" (Protocol off) [---------------------------------->] error; feature lock; end of function Continue in Protocol [----------------------------------->] Action: The terminal sends its ID string to the host. The host checks the features list, etc. ID String: A full sample of the ESC I response for the IOBEXEC protocol (assigned by CIS) is as follows: <#> , CC, HC, PA, PL, The first character is the protocol ID, followed by the OS name and the computer name (optional). The string of four pairs of characters are a series of features to be assigned if the system supports them: CC, HC, PA, and PL CC = full cursor control HC = hard copy PA = "A" protocol PL = "L" protocol See the comments in any version of the executive for a more detailed discussion of these fields. MNEXEC is an older version of the executive, and so the ID string is slightly different in format than the one for the CIS Executive. A sample response follows: <01>,,,<&CPM>, The first character is the page address of the lowest available page of memory in the terminal, followed by the page address of the highest available page in memory, the computer ID, OS name, and "D" for disk drives. ESC "L" Sequence Host Terminal SI ------------------------------------> ESC L ------------------------------------> ------------------------------------> "." = ACK (Received; OK) [<----------------------------------] "/" = NAK (Error; request retransmission) [<----------------------------------] ESC L ------------------------------------> Next record ------------------------------------> "." = ACK (Received; OK) [<----------------------------------- "/" = NAK (Error; request retransmission) [<----------------------------------- SO (Done) [-----------------------------------> Action: The terminal loads into memory starting at address for bytes. ESC "A" Sequence: File Transfer Host Terminal SI (Protocol on) ------------------------------------> ESC A (Start file transfer) ------------------------------------> <1-byte SOH> <1-byte rec #> ------------------------------------> "." ACK (Received; OK) [<----------------------------------] "/" NAK (Retransmit) [<----------------------------------] Action: The terminal sets up to read or write the file given in . ESC "A" Sequence: File Transfer Download Subsequence Host Terminal ------------------------------------> "." ACK (Accepted record) [<----------------------------------] "/" NAK (Rejected; retransmit) [<----------------------------------] ------------------------------------> "." ACK (Accepted record) [<----------------------------------] "/" NAK (Rejected; retransmit) [<----------------------------------] ------------------------------------> "." or "/" <------------------------------------ SO (Shift out; protocol off) [---------------------------------->] ESC A (Next file) [---------------------------------->] ^ | Note: This is currently unused by CIS. ESC "A" Sequence: File Transfer Upload Subsequence Host Terminal "." ACK ------------------------------------> <------------------------------------ "." ACK (Record accepted) [---------------------------------->] "/" NAK (Record rejected; retransmit) [---------------------------------->] <------------------------------------ "." ACK (Record accepted) [---------------------------------->] "/" NAK (Record rejected; retransmit) [---------------------------------->] <------------------------------------ "." ACK (Record accepted) [---------------------------------->] "/" NAK (Record rejected; retransmit) [---------------------------------->] SO (Shift out; exit protocol) [---------------------------------->] ESC A (Next file) [---------------------------------->] Field Definitions SI - Shift in (CTRL O). When received in the communications loop, the terminal software should jump to protocol mode. SI can be expected to include a parity bit, so ANI 7FH is necessary. Once in protocol, parity is disabled. SOH - Start of header (CTRL A). Each record begins with SOH. R/N - An Ascii character, starting with 1, and incremented by one ASCII number after each previous record is acknowledged (ACK). After 0, the R/N wraps back to 1. U/D - An Ascii character, the U/D instruction determines the direction of transfer. U = Upload, transfer to host; D = Download, transfer from host. A/B - An Ascii character, signifying an ascii or binary file. Careful consideration indicates that this is not necessary, since 8 data bits are received in either case. FILE SPEC - Standard CP/M file specification, with optional drive reference. This is a literal echo of what the terminal sends to CIS when a filename is requested. The terminal software should select the requested disk, Create the file for a download sequence, or Open the file for an upload sequence. CR - Carraige return, (CNTRL M). Signifies end of file spec in A Protocol header. LF - Linefeed, (CNTRL J). Inclusion of this character by the host MAY be determined by your personal DEFAULT settings. Although not mentioned in previous protocol definitions, it is transmitted by CIS in my case. (KCB) After CR is received, looping until ETX will cover either posibility. ETX - End of text, (CNTRL C). ETX ends each packet (a group or string of related characters), and is followed by CHKSUM. EOT - End of transmission, (CNTRL D). When EOT is encountered in the text field of a record, it ends the current file. CP/M end of file, 1AH (^Z) is not transmitted by the host, and should be inserted by the terminal software whenever EOT is received. A purist may elect to insert it only at the end of an Ascii file, but it does no harm at the end of a binary file also. For an upload sequence, EOT should be sent to the host in place of the 1AH Ascii end of file, or after the last sector in a binary file. Character Masking Data characters in the text field that would normally conflict with control characters (those less than 20h), are sent 'masked' by adding 40h to their value and preceeded by a DLE (unmasked). Control characters (those meant for control) are always sent unmasked. CHKSUM - Check sum on record calculated on all characters sent after (and not including) start of header (SOH) and until (and not including) ETX. Except that, DLE is not included in the checksum, and the following 'masked' character is checksumed in it's unmasked state. EOT, however, is included in the checksum. How other control characters in the text field are checksummed is unknown, however, these appear to be the only two used. 1. CHKSUM <--- (CHKSUM * 2) mod 256 2. CHKSUM <--- CHKSUM + character 3. CHKSUM <--- CHKSUM + carry If the check sum is less than hex '20', it is increased by hex '40' and sent masked (preceded by a DLE character). APPENDIX Since the heart of the CIS Protocol is the checksum routines, the following code is included to amplify the verbal description. There are better ways to do everything, so feel free to hack away. This particular sequence is for a download. ; ; ;a side effect of docks is that it returns with b=a. since etx is not ;included in the checksum, the calling program can recognize that etx ;has been received when a is not equal to b. ; CHARCKS: CALL CHARIN ;get a char from modem CPI ETX ;end of packet? JZ CHARETX ;yes, don't include in checksum CPI DLE ;is next char masked? JZ UNMASK ;dle not included in checksum CPI EOT ;end of xmission? JZ SETEOT ;yes, set flag, and replace with 1ah JMP DOCKS ;compute checksum and ret to caller ; UNMASK: CALL CHARIN ;get masked char SUI 40H ;unmask before checksum JMP DOCKS ;compute checksum and ret to caller ; SETEOT: STA EOTFLG ;make flag non zero CALL DOCKS ;include in checksum MVI A,1AH ;replace with eof MOV B,A ;set a = b for etx test RET ;to caller ; CHARETX: MVI B,0FFH ;tell packet etx received RET ;to caller ; DOCKS: MOV B,A ;save original char LDA CHKSUM ;get last check sum RLC ;do math ADD B ACI 0 STA CHKSUM ;replace new checksum MOV A,B ;replace orig char RET ; ; end of prtcol.cis  CHKSUM ;replace new checksum MOV A,B ;replace orig 1 ; CURRENT (RECEIVED) RECORD NUMBER DS 256 ; STACK GOES HERE STACK: HEAD: DW PRTBUF TAIL: DW PRTBUF LINCNT: DB PAGLEN PRTBUF EQU $ END START E STACK: HEAD: DW PRTBUF TAIL: LXI H,PASSWD ; POINT TO PASSWORD MVI B,PSWLEN SGNON4: CALL SGNRCV ; WAIT FOR PASSWORD PROMPT JNZ SGNON4 SGNON5: MOV A,M CALL PUTSIO INX H CPI CR ; IF THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV ×7#PATMDM04*Q*Q!4#    <CE!! "  Z*Q"^w#Vw*] }|"|~"!"Q>2QzW{_!Q5ʽ*Qҥ |g}o"Q*Q|g}o"QÐ*Q*QDM*Q0"QM*Q"QMBN|!>>!>)=0 ͝!"Q0p#z2 *Q "Q"Q}2QGQ*Q$ ~#>$*Q Q w#S2͔Q~#DF!*Qr+s"Q:Q=G|G!Q~@wG"Q)|ʤ>(>NF!|p~p#~#pG*Q#> 6 #=x:w#2Q .2Q |:QB./# (7*H:Q>*H>2Q6?#`T{T_:o*o?hw#:QwIF!>?c*Q*Q}O|Gr# x*Q*Q#{z"Q\ͫ:S00*Q|*Q!~w!*Q!^#V"Q|>d*Q)Qw#wQ^#f|OE!k\ͫ&+|ME!͔Q s#r͔Q ^#VzFU!"Q*Q)Q ^#V"Q2*Q"Q!9"QQ ڗ:QRB=5 RU5 |IR5 +DM*Qͅ*Q{o>g+{z_yW-!*Q s#r!Q~w"QG* s#ro+ s#ro:S0!A*Q!L#Dr+s-*Q*Qs#r*Q!.! ~#~!Q>w:Q2Q=i!Q5W:Q2Q|͖҆-"Q4:Q4*Q~Åt *Q|ʘRE5 A͖:Q…-"Q4:Q4*Qn&G!R͘ , Gy2 p#R!"Q 1͘"1!Q6,!Q6!R"Q`2Q!R"Q2Q:Q Qt `Å͘!Q{ {*Qw#"Q!Q~͙4͘ ʅ,x͙*Q:Q V#^s+r*Q|ʨV#^#*Q&##͝!"Qr#s#w x:QOR#w *Q|"*Q"Qj> s#rGj>" s#r*Q|Gt "G!Q~ЇwWR5 *Q*Q{_zW{zwG*Q*Q|DW5 *Q|ʣ*Q|ER5 +"Q͖Ҳ-*Q"Q:Q4*Q! N#F p+q*Qw!Q>wA}͋G:R>"͋a:R>"ԋa C :R>,ҋ:R0>"͋a:R>"ԋQa QC :R܎*Q|u++p> ͋+|h> ͋> ͎͋G*Q!.! w#w*Q+"Q!Q~wG*Q*Q|EF!͔Q ^w#VwzCU< "Q2-0Q w#wd! Q)~#foĹ*Q#"Q{z͔Q ^w#VwzDU< "Q&!9"Q!*Q "Qͫ <FR5 "Qͫ <ʃ  d!d!!>2Qͫ*Q 6?!"Q_*Q~ʿ =_]##FN # `*QO yŷ ~##   ~#  *Q"Q d2Q*Q). *Q!!"Q"R"Rh*R*Re "Q!9DM(!kR"R:R 2R:R’ NN!:R# $² H$ >$ͭ:RÕ * H* >*é . H#>.© 2RD - H# .>-© >2R2ROD >2R \HĭHÕ 2 R$ > 2 R H## ,9 >2R# !Rq.U >2RH#U I !Rq^h H[ !Rq-y >2 RH>2RR<:]ROµ 2R2R!^Rr#˜ :Rʦ =2 R:R> ĭÓ :R ͭ:R!R6( y@G /%ͭ2R2R2 RR(# :R2RGy@w:R! R>P >P 4!R5<2 R:R!RG:Ri :ROxGxғ lRW?< =v zz!lR~ʓ y : R : R!R  :R :R >-ͭ G: ROW* $ $ : R!R  O zͭ yͭ:Rʚ ˆ :Rˆ :\Rš È :]R# > ͭ>0í> 2ReR !R~2R6ͭ:]R@2R!R ] <\ w>c 6!Rp2R/O!eR #o } y2R=/2R:R>0̭Ú ͭͅ:R=!R5 :R͢2R!R~>.ܭ:R!R/:R :RG:R G 2Rx͢:R !R5ͭͅ :R͢:R>>Eͭ!R:R5~ #/<-Gyͭx/ + Gyͭx0ͭ: ROͭ2 R2R:R:R2R"Q|~W#^#:Rzʈ~#x~":RNS!"R" R:R/!&\HĭHç̀Hʖ/̀HÈulͭ@ ^ :R> !R4_:Q@ ^ ͋>2R> > @ 3^ :R:R;> Ag82Q!R~5*R~ҙ+"RÝ0G>0ͭã0:R:R:R>,*Q:\R> >-*R|*F!>2R~G#N#"R"R`i"R"R!#&@/>&>!>\@ x@UN!."R*R|\*R"R*Re+"R*R~#"R2R*R~#"R* R|+" Ru> lí"Q!R454!:R#/!&$¿H$>$ͭÝ*H*>*ù-H#.>-ù\HͭHà*R++!"R"'R}>>2,R!'-w# >@2]R2\R͸mR<( %*SQmR*pR"R>2R:]RWp(!\R:Rw ҊmR<(!\RÔmRO!mR:Rw:mRW!]RmR(r2~R͕dRo&G>Ow# q#:mR!\RnRp>͕dR !tReR!nR%7>' #ø+>'w#>'w #0:mR2\R͸!dR~P:~R6!]R~ +w# @ '6w{2RnR!eR~#!nR~#›v!^Rq#«!^R"~R~#GnR*~Rs#4?GuR*~R'w#s!R5*~R#´͸dR!lR~ȯw+6+w:]R<2]ROF!!\R 怮w _#~ȓAw>2R`i"~R2uReR*~R>'#>'#>'#>'#>'#>'#>'>'wX*~Rp#~'w!uR~w:R=2Ry!eRvVdRO͸dR DZ!A'2]Rx2\ROG>F2]R!eRr#i`)!iR~'w#/ (ø!]R +e #?_! !\Rk=>q#o pT]w+ ~~w!eRdRG# ž:kRз!dRy!]R5q!kRjRw+p!]R55pkR + + + + + + ' P'> ' o g"\R`ieRS*\R|Fɵ!eRS~#~#~#~#~#~#~#~#!eR'w#'w#'w#'w#'w#'w#'w!9~Aҫ6G>Mw|DM!xy))))))))|C|CJz$Vx)yOxGyx<GyO#=(ogeo$$)_#WOA `i!:]RAFFss*R! 9SL!zU|_0PY0yx:x::# x-ssOQ=ɯ>0:7:0:7?:N#Fywx+d|ʌ~~ws#r0ʢn&sAC!!͝!>q++*SzSS!0yxPY##͝!"R>BKFs*R|0++szSS!0yOxG9 ##͝!"R>BKFs*R|~DMxzʝ|~#+es!0yOxGڣyxҀPY͝!"R>BKFs*RSS!!"RÕ!R~2Rw2Ra *R&##͝!xw#q#RF:R2R !R4^w|~0a~ ~_w# x0! ͝!>BKF++|DM~G#N#zw#s#xXw# xMyw# [^#V*] }|"|~"|ʚF#N#Õ^# x‰ 8 "R2R {*S#"SҲ R  >2R:RT2R2RGW2R͆Ͳ~"2;͆#͆~")2R~,N͆B*R) :Ro&##͝!6#RGw#v*Rs#r:R#ʐ:R+~ʢ"§:R ò!Rq~!R w !Rrimproper input - reenter $) A |##͝!p#q#w x s#r) Wx2! w#wA DMWA DMW*SDM*S}|oOD!F#N# "S goo&ʎo&}2o&E{2xn&}!9O8 "R>2Ry2Rw# +2R2R +- >2R 0.8:Rھ/2Ry{ 0:R=2R&Eʁeʁ OyþGm :R2Rixm:R{:R<2R y ʁG-_ʚx  ھG  ڷOxG{¾G:R@*Rwɯ2Ry2R +->2R)DM)) O   :R z/W{/_s#r:R=2R~#0:?^#V*] }|"|~"!RN q!R ^!R!R n&.Tprogra" PR!"R *] d e ="a "_ 6#}|ڎ y!!"R "S!~G#~ ½ ñ +ph##͝!"Sp#w *S"S"S"S*S*S}!͝!6#6#q#p*S"S*S| !`i"S*a  h!Xq! Q!}Q!HZ!Ɛ'@'_ ERROR $ AT PC $"g DM6#6#!"i *{w#zw!g "c >2f "DM}|"*c !"c ^#V{"^#V{_zW!{z!*c w#ww#w###s#rq#p#!f 5#!OM!*{z*R!*] ##{z!+F+N*c }|B"!g "S~#foʉ"{zB" }|‰"~#~#~#O~G+++:c ":d "*S"c Ï"}|*S##^#V}|ҭ"s#r##q#pw#w#~w#~w7!g N#F#~#fo""}|"`i}"!9 # #~#fok####~##="`i   <CE!! "  Z*Q"^w#Vw*] }|"|~ . (C) s kluger1.04Change this value? (Y/N) 8Enter character to perform this function in term mode : []@ABDEFJKLNOPRTUVWXYZ0123456789ABCDEF0*PATMDM option patcher for MDM7xx.COM ver $ (C) S. F. Kluger 1983,1984(Enter the full name of the INPUT FILE : ERROR - * not found. It is safe to replace the diskand try again now.,Do you want to use another filename (Y/N) ? YNY.I seriously doubt that this is an MDM7xx file!Abort if something looks fishy!8You can change the following data by selecting a number:1 = change PMMI port address 5 = Change Smartmodem dial mode 0 = QUIT :3 = Enable/disable PMMI 4 = Enable/disable SMODEM86 = clock speed in MHz 7 = MSPEED byte defaultB8 = terminal mode xfer delay 9 = terminal mode xfer CRLF delay@10 = number of DIR columns 13 = resend after NAK or non-ACK914 = change same file to BAK 15 = CRC/checksum default=16 = allow CRC/CKSUM toggle 17 = convert backspace to RUBB18 = allow BSPC/RUB toggle 19 = send LF after CR in term xfer@20 = allow toggling LF/CR 21 = allow transmission of logonA22 = protect CCP 23 = local cmd if EXTCHR precedesB24 = allow toggling EXTCHR 25 = allow toggling printer on/offA26 = check XOFF in term xfer 27 = wait for XON after CR (xfer)A28 = allow toggling of XOFF 29 = display control chr above ^M732*= char to send BREAK 33*= char to disconnect;34*= char to send logon 35*= char to toggle printer@36*= char to close input buffer 37*= char to xmit file to remote;38*= char to open input buffer 39*= char to send next char:40 = PMMI pulse rate 41*= PMMI baud rate change42 = PORT OPTIONS ETC;For options with an asterisk(*), only the following controlcharacters can be used: Enter option (0=QUIT) YNYPress SPACEBAR to continue Current PMMI base port is YNN5You can change the high nybble of the base port only. Enter new base port hi nybble : 9"Smartmodem must be DISABLED first!PMMI modem is ENDISABLED.YNNPMMI must be DISABLED first!SMARTMODEM is ENDISABLED.YNNYou do not have a SmartmodemCurrent value is YNNCurrent clock speed is  MHz.YNNEnter new clock speed in MHz MSPEED = YNNEnter MSPEED value (0..9) 0123456789$Character delay in term xfer mode =  ms.YNN+The delay value is in TENS of MILLISECONDS.+Enter new delay (0=no delay, 255=2.55 sec) %Delay after CRLF in term xfer mode =  ms.YNN/The delay value is in HUNDREDS of MILLISECONDS.+Enter new delay (0=no delay, 255=25.5 sec) Directory displayed in columns.YNNType number of DIR columns 1234567Resending record after NON-ACK%Resending record after valid NAK onlyN$Changing file with same name to .BAK(NOT changing file with same name to .BAKN Default to CRC checkingCHECKSUMNAllow Do not allow toggling of CRC/CKSUMNCDo not convert backspace to RUBNAllow Do not allow toggling of backspace to RUBNSend Do not send LF after CR in term xfer modeNAllow Do not allow* toggling of LF-after-CR in term xfer modeNAllow Do not allow transmission of LOGONNPROTECT OVERWRITE the CCPNEXTCHR precedes LOCAL COMMANDEXTERNAL COMMANDNAllow Do not allow) toggling of local/external EXTCHR prefixNAllow Do not allow toggling printer on/offNCheck Do not check) for XOFF while sending file in term modeNWait Do not wait# for XON after CR in term xfer modeNAllow Do not allow toggling of XOFF checkingNDo not dD"isplay control characters above ^MNCharacter to send BREAK : ^YNNCharacter to DISCONNECT : ^YNNCharacter to send LOGON : ^YNNCharacter to toggle PRINTER : ^YNN#Character to close INPUT BUFFER : ^YNN$Character to XMIT FILE TO REMOTE : ^YNN"Character to OPEN INPUT BUFFER : ^YNN(Character to send next char (EXTCHR) : ^YNNPMMI pulse dialing rate = 20 pps10 ppsYNN3Character to change PMMI baud rate in term mode : ^YNNMODEM PORT OPTIONS:4 1 = input control port 2 = output data port5 3 = input data port 4 = bit for rcv ready6 5 = value of RR when ready 6 = bit for send ready4 7 = value of SR when ready 8 = output control 28 9 = output control 1 10 = clear to end of scrn411 = clear screen code 0 = RET TO MAIN MENUEnter option : INVALID !INPUT CONTROL YNN OUTPUT DATA YNN INPUT DATA YNNTest receive ready YNNValue receive ready YNNTest send ready YNNValue send ready YNNMODEM CONTROL 2 YNNMODEM CONTROL 1 YNNCLEAR TO END OF SCREEN YNN CLEAR SCREEN YNNEnter code in HEX (.=UNCHGD):OLD:  NEW = ?. code : But you don't have a PMMI modem!)Are all changes complete (Y/N/A=abort) ? YNAANo changes madeNSave - sure? YNN& now modified and ready for execution.$Select from the following functions:X - EXIT programR - RECONFIGURE same fileN - CONFIGURE NEW fileSelect: X,R,N : XRNRNQk !#"S"S!#"S!!!!SS!#kS!#kS!#kS!#kS!$k!"S8!"S8*S#"S*S}|7!SR8>!S"*S{ozB8!h!S6N8!h!S6!S8>!S"*SSkT!$k*S^͎ͩTk*TTk*TM!"T8*S*T!C*T ½88*T#"T*S*T{z8!ͩ^t8*TSk*S9>!T"*T{z9!" T9*T{oz69*T$Tk*T!!C͒0}o|g" T* T {zo9* T}o|g" T*T!!C͒0}o|g"T*T {z9*T}o|g"T* T*T" T* T{z*T{z9!" T* T"T*TK:>!T"*T! #"T*S*T!CTk*T!g#"T*S*T!C*TTk*TTk*T7!$^*SM!H$M!n$|>ͥ!T*TTk*T͊ |ʑ::R!$^*T^!$M!$M!$!%U8Tk*T!% :f:Ã:*T!!!ͧ!"S ;*S*S)!ͬs#r*S#"S:!͹*S^#V!{oz>4;*S^#Vz>H;Q;c;!%M!G%M=7!h%M*S^#V!{oz;T!%kØ;T!%k!%^*TM!&M!A&M!{&M!&M!'M!<'M!{'M!'M!(M!D(M!(M!(M!)M!G)M!)M!)M*S^#V!{oz!ͥ!TG*T|X??a@@AAA5B1=1=BB!CgCCC9DDD EQEEE#FiFFF1=1=;GGHHIuIIYJJpKK*S!*U8Tk*T!* =*S*T)*S*T)^#V8(͆s#r!ͩM!*!*U8Tkc;*S^#V!{ozN=;P*S+^#V"T!*^*T9M*S!+U8Tk*T! + Ž==!+M!E+*SU8Tk*T͒0}o|g"T*T!g+ =*T}o|g"T*T"T*S+*Ts#r*S5*T#s#r*S?*T#s#r*SU*T##s#r*SX*T##s#r*S[*Ts#r*S^*T###s#r4=*S^#Vzv>Å>!j+M=!+^*S^#V!{oz«>!+^ñ>!+^!+M*S!+U8Tk*T!+ >=*S^#V!{oz>*S6#6 ?*S6#6Å>*S^#Vz%?4?!+M=!+^*S^#V!{ozZ?!+^`?!+^!+M*S!+U8Tk*T!+ ‡?=*S^#V!{oz®?*S6#6û?*S6#64?*S^#V!{oz??!+M=!,^*S*T)^#VͩM*S!-,U8Tk*T!1, $@=*S*T)^#V!T{ozM@*S*T)6P#6[@*S*T)6T#6?!4,^*S*T)^#V! !M,M*S!T,U8Tk*T!X, £@=![,|>ͥ!T7*S*T)! h!T͆͜s#ra@!z,^*S*T)^#V*S!,U8Tk*T!, A=!,!,U8Tk*S*T)*Tͻ͆s#r@!,^*S*T)^#V! !,M*S!,U8Tk*T!, ƒA=!,M!-|>ͥ!&TG*S*T)*&T{ozgs#rAA!@-^*S*T)^#V!d!g-M*S!m-U8Tk*T!q- A=!t-M!-|>ͥ!&TG*S*T)*&T{ozgs#rûA!-^*S*T)^#V!-M*S!-U8Tk*T!- rB=!-!.U8Tk*S*T)*Tͻ͆s#r5B*S*T)^#V!{ozB!#.MB!C.M<*T!j. B=áB*S*T)^#V!{ozC!m.MC!.M<*T!. C=B!.^*S*T)^#V!{ozHC!.MNC!.M<*T!. aC=!C*S*T)^#V!{ozˆC!.^ÎC!.^!.M<*T!/ §C=gC*S*T)^#V!{ozC!/^C!/^!%/M<*T!>/ C=íC*S*T)^#V!{ozD!A/^D!H/^!V/M<*T!u/ 3D=C*S*T)^#V!{ozZD!x/^`D!~/^!/M<*T!/ yD=9D*S*T)^#V!{oz D!/^æD!/^!/M<*T!/ ¿D=D*S*T)^#V!{ozD!/^D!/^!0M<*T!0 E=D*S*T)^#V!{oz,E!"0^2E!+0^!60M<*T!@0 KE= E!C0^*S*T)^#V!{ozxE!U0M~E!d0M<*T!v0 ‘E=QE*S*T)^#V!{oz¸E!y0^þE!0^!0M<*T!0 E=×E*S*T)^#V!{ozE!0^F!0^!0M<*T!0 F=E*S*T)^#V!{ozDF!0^JF!0^!1M<*T!.1 cF=#F*S*T)^#V!{ozŠF!11^ÐF!71^!D1M<*T!i1 ©F=iF*S*T)^#V!{ozF!l1^F!s1^!1M<*T!1 F=ïF*S*T)^#V!{ozG!1^G!1^!1M<*T!1 5G=F!1^*S*T)^#V!@ͩM*S!1U8Tk*T!1 xG=*S*SU8Tk*S*T)*T͒@}o|gs#r;G!1^*S*T)^#V!@ͩM*S!2U8Tk*T!2 G=*S*SU8Tk*S*T)*T͒@}o|gs#ríG!2^*S*T)^#V!@ͩM*S!92U8Tk*T!=2 \H=*S*SU8Tk*S*T)*T͒@}o|gs#rH!@2^*S*T)^#V!@ͩM*S!a2U8Tk*T!e2 H=*S*SU8Tk*S*T)*T͒@}o|gs#rÑH!h2^*S*T)^#V!@ͩM*S!2U8Tk*T!2 @I=*S*SU8Tk*S*T)*T͒@}o|gs#rI!2^*S*T)^#V!@ͩM*S!2U8Tk*T!2 ²I=*S*SU8Tk*S*T)*T͒@}o|gs#ruI!2^*S*T)^#V!@ͩM*S!2U8Tk*T!2 $J=*S*SU8Tk*S*T)*T͒@}o|gs#rI!2^*S*T)^#V!@ͩM*S!3U8Tk*T!3 –J=*S*SU8Tk*S*T)*T͒@}o|gs#rYJ*S^#V!{ozJ;P!3^*S*T)^#V!}{oz K!93MK!A3M*S!I3U8Tk*T!M3 3K=*S*T)^#V!}{oz\K*S*T)6#6jK*S*T)6}#6J*S^#V!{ozʊK;P!P3^*S*T)^#V!@ͩM*S!3U8Tk*T!3 K=*S*SU8Tk*S*T)*T͒@}o|gs#rpK7!3M!3M!3M!4M!F4M!|4M!4M!4|>ͥ!TG*T|QL=*T {zjL!4MK*T+)xL~#foLLMTMMMN\NNN"O!5^! "(T!*"*TO*S!5U8Tk*T!5 LKdOÎL!5^! "(T!4"*TO*S!-5U8Tk*T!15  MKdOL!45^! "(T!>"*TO*S!A5U8Tk*T!E5 NMKdOM!H5^!"(T!H"*TO*S!]5U8Tk*T!a5 MKdOTM!d5^!"(T!K"*TO*S!z5U8Tk*T!~5 MKdOÖM!5^!"(T!N"*TO*S!5U8Tk*T!5 NKdOM!5^!"(T!Q"*TO*S!5U8Tk*T!5 VNKdON!5^!"(T!Z"*TO*S!5U8Tk*T!5 ˜NKdO\N!5^!"(T!]"*TO*S!5U8Tk*T!5 NKdOÞN!5^!"(T!"*TO*S!5U8Tk*T!6 OKdON!6^!"(T!"*TO*S!6U8Tk*T!6 ^OKdO"O!6M**T"TO!;6^*S*T)^#V9^!B6^!K6|>ͥ!,T*,T,Tk*,T!N6 ¿OO*S*T)*,T8s#r*T#"T**T*(T+*T{zsO!Q6M**T"T#P*S*T)^#V9^!Z6^*T#"T**T*(T+*T{zP!]6M=!6!6U8Tk*T!6 }P!6MQ*T!6 Pc;*T6!6!6U8Tk*T!6 ¾P=*T!!!ͧ!"SP!*S*S)^#V*S#"SP!͹*T^!6M!7M!.7M!B7M!_7M!y7!7U8Tk*T!7 [Qc;*T!7 kQK:  >?c*Q ADD B ACI 0 STA CHKSUM ;replace new checksum MOV A,B ;replace orig char RET ; ; end of prtcol.cis  CHKSUM ;replace new checksum MOV A,B ;replace orig 1 ; CURRENT (RECEIVED) RECORD NUMBER DS 256 ; STACK GOES HERE STACK: HEAD: DW PRTBUF TAIL: DW PRTBUF LINCNT: DB PAGLEN PRTBUF EQU $ END START E STACK: HEAD: DW PRTBUF TAIL: LXI H,PASSWD ; POINT TO PASSWORD MVI B,PSWLEN SGNON4: CALL SGNRCV ; WAIT FOR PASSWORD PROMPT JNZ SGNON4 SGNON5: MOV A,M CALL PUTSIO INX H CPI CR ; IF THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV !9"12/\!Vd2vl!zd2!W~ =ï!{~ Xz ͶͶͶͶ!Bͣ €"~¬~Ͷ#¬_> Ͷ> Ͷ !5#6#  3!5` ))))0 o4͞## 6 #3>2/4 ʔ͞22x##o:2Ͷ>=Ͷ5:4ʔ ^5Gw#†:R70ڰ:_Aڰ[7*+|g}Ɛ'@'Ͷ:+A"!)*+"-> Ͷzz<*a7! "'zQzï*)*'|b}i-zï>2x>27:/ʲ_YN—ò* M7LIB program for changing MDM7xx phone library - 04/06/84$  M7LIB lets the user change the MDM7xx phone number library. EXAMPLES: M7LIB MDM7.COM (1) M7LIB MDM7.COM MDM77.COM (2) (1) changes the original file (named MDM7.COM) (2) changes the 2nd file, leaving original intact $ ++ UNABLE TO OPEN SOURCE FILE ++$ ++ OUTPUT FILE ALREADY EXISTS ++$ ++ NO DIRECTORY SPACE ++$ loading file...$ [Exiting program] $ ++ PHONE LIBRARY NOT FOUND ++$ PHONE LIBRARY LOCATED AT: $ DOES LIBRARY LOOK RIGHT? $ CTL-C abort, hange, elete,

rint lib, ead, rite : $ ABORTING...NO CHANGES MADE$ DESC..............1-XXX-XXX-XXXX THEN LEAVE JNZ SGNON5 ; ELSE GET NEXT RET SGNRCV: CALL GETSIN JZ SGNRCV P(>ӋۋӉۉ& Í Îç ,>/0Ð 2Hû ̓̓̓PMC-101  ] $̓Input baud rate (110, 300, 600, 1200) (2400,4800,9600,19200):͉͆110.͉300.͉600.͉1200.͉2400. ͉4800. ͉9600.͉19200. ]2m~w2u̓Allow ALL control characters on receive? Answer "Y" to use vi on unix (Y/N): ͉͆Y>Y<2ەo&}~2 ::w2I2I!"I!I~6Ow#!I0!OH"͛,HB"͛,H C>$bH O, Enter library code or phone number, Hit RET to abort this function now or CTL-X quits while dialing or ringing: I>/!I~ʜ2O ͯڙ:O i!I~A+ 0 + q!"{@~q 6"Ip͛,:Ģ!I^#~͝+#ʙ.uX:Ģ!I^#~q͈+ʪ͓+ª:ʙͤ, ” ͤ,> ͝+Ù#u, - try #*I#"Iͽ+> ͝+: ͤ,͌>]ͻ >]Z ү&:I‰:N B, Busy(, No answer, Redial? (Y)es, (N)o, (C)ontinuous, (Q)uiet continuous: ͪ+{+N2YʉCʄQ`>2I:˜2ͻ Ýͻ , :I2I:IW, CONNECTED - hit any key to stop the bellͻ ͈+͓+~ ͻ >͝+͝+R{P Gx,+0:0+> O:¤,:(WT9TA>ZTN>ZT[ I>Zû , ++ Bad library number called ++ &{+2I͌ңh2:->Z2 , ++ NO DIAL TONE ++ &7::Tx<! >! ~$Gͤ,#͈+͓+ʙ> ͝+:<Z] ͻ ͻ !ͻͻ > ͝+!ͻ(W:!ͻͻ 2:!ͻͻ 2ATM0 $ATM1 $+++$ATH $:2!ͻ͌ҮATDT $J~$~4͝+#û8͈+͓+ ͤ,Ü>GBB 01ʵCʵ3B NB 4,E,5ʵ  ͈+< ͓+<  ͤ,Ü͌ 2N ͌E :‰ :I2I=2I# ڷ ͻ Tͽ 2ͻ ʹS, ++ No ringback for autodial modem ++Ü{+x >?]Zͻ T͈+ ͓+ 7+:͏, Additional Subcommands for PMMI Modems Modem control: A - Answer tone for send or receive O - Originate tone for send or receive Parity option: 1 - Set and check for odd parity 0 - Set and check for even parity Both ends must be capable of these options which are available only in R and S modes. The parity checking will be part of the file transfer protocol. Speed Options: After entering your primary and secondary options, you can set the modem speed by placing a "." after the options followed by the speed e.g., 300, 600. EXAMPLE: SBO.600 will set the modem for 600 baud ͌ҽ ¼ {+ }0_.!~w+ *.xxxxxxx,,,,,,xxxxxxxx,,$xxxxxxx,,,,,,xxxxxxxx,,$ A=................................B=................................C=Cro's Nest..............595-0541D=dBase II............408-378-8733E=EBMMUG Lib.appoint.only 376-1611F=................................G=................................H=Humor & Wisdom..........674-0660I=................................J=................................K=................................L=................................M=Moraga RBBS.............376-3632N=................................O=................................P=Piconet.................965-4097Q=................................R=Rich & Famous...........552-9968S=................................T=................................U=................................V=................................W=................................X=................................Y=................................Z=................................0=................................1=................................2=................................3=................................4=................................5=................................6=................................7=................................8=................................9=................................^DIR DIR *.* $U0AD XMODEM S XMODEM R BYE RBBS (vacant)(vacant)(vacant) Nice chatting, see you again soon... !9"K1K!pʹ,".J!'ʹ,"0J, MDM730 - (type M for Menu) }]2͏ʹ:I!21Kͫ:3:B:ICb:O3+:ID+M3RSTk2I2IõEz2I2IõL‰2I2Iõ~?2*"+"+"+!"J ͟A2;J̀ k:2h> @2i3>^2h32i3]2I  !OI OG>xA>2I6#~?2:XI2UI:IDEMLTG:9:=xC:IHæ2xSXR’:PI:m ,++ Enter primary option plus file name ++ 2, ++ Bad option ++ 8>ë:PI>B2PIx?2I:I:] 2I2IͲ&!>J͐!!\>J ͛,>J>J!O"I>2I :I ͈+͓+G::::IQx0^:^ù:^2I2I:I>2I::'Õ:'Ž>2I:́:!+:%ʪ:ʴ:"T::#:I/2I{+{+͉{+: ʮ ::)n:$ :&:I 2I2Iͫ:PIt,Ready to send in batch mode t>2 ͝+|>B2PI><)):] <'ͪ'Ϳ'xh)F&'ڴͧ&>2zIF&%Q%:In%r%́%ژÇ><)́%ڴ):2It:PI>2B2PI):] <'#> ͝+͏!"{+͙"Ͳ&]':PI5&,File open, ready to receive :IT&,CRC in effect >Cn&,Checksum in effect >,Waiting.....<)ͫ"ژ:r(ͧ&ͤÃ͌(ͤ')><)!_J͐!!l͐!, File name to send? (CR to abort): I>/:I ~I!_J,_J::,Want to include time delays? (Y/N): ͪ+N:2I{+I_Jq=ʧ?,++ DISK READ ERROR ++$ʧH, (in Terminal-mode now) Jͫ, [Transfer completed]~, ++ FILE NAME ERROR ++ ö!IF~ ͈+͓+# :͝+:đA͝+4 :  L<:O: O:I_ W!:~!:I~:I~!ʹ,:đ{ƒ8>̠8®>͈+ʠ͓+ :PIU&>2zI, Multiple errors encountered. Type Q to quit, R to retry: ͓+{+ʹ+Rʫ"QU&:UI!]26J p# 1:UI*xI#, Received # ͽ+, : ,(+,H) :6J<26J ʃ~ ĝ+~ >.͝+|(͝+ҏ&,Awaiting name NAK xͅ)ͤ!5J5*9J\ ͛,"9J><)7( !]~<)(0#><)Q(   a> a> a>u<), ++ ERROR sending name ++ xͅ)ͤ><)!\͒!&,Awaiting file name Q͕ʓ7>2,J!](>2+J(2+J&,Time out receiving filename Iͤw#}à2,JyQ<)(I  !\͒!&, ** Checksum error ** 2,JQÖ2,J2,JF&><)(WU&>2I25Jͦ!!"9J!!\J,,0ڱ:fŒ*9J\ ͛,"9J!5J4Ì!8J5€!"9J:5JA>@25J, ** Memory buffer :I,open ** ;,closed ** , ** Memory buffer available ** {+͕æ2*HK*NQyAJ*`]J~4m#]͌܌Ý+͈+͓+G>/,Printer buffer is :Iʯ,ON ,OFF !#½]2Iͤ,:I:Ix͝+U> :I: 8>G:,x ,x͝+U:I@ͤ,> :IJ ,:I*Ip#"I> p> ͝+́!|!yJ>4!N>2I*I !ON w͝+G ́!#¢"IJ>4͌ w#:I*Ip#"I:7JJ>4!Nz24J:4JW!8 N w͝+GU ́!# "I!"IJ>4s ^#"I:7J s !"I"I*I*I|}::ʌ 27J!?ʹ,DM8¦ > xš 7: :I]ͻ :I]̀*I6}l&)>oO :IN!͆!>J͆!ѷ!+| <)'?,++ DISK FULL, SAVING PARTIAL FILE ++$'',++ Nothing to save, erasing file ++ ÷*>;Ý+6# 6 #•!6#ž!!8J6!IN!I 6 !IF#!~ ¾!#!~ !")J+#!~ !:8J<28J#!~ !!6 *)JJ~ "#"#~ "")J!Jp \. ~N"#~+] ͛,!e~w#~w\!\l ͛,!u6B#6A#6Kl!l6\:\2zI (ڥ#O7>2-J2+J{y"(G"G2-Jx2+J$z":-Jʥ#:UI #{+x+,H received not SOH - $F&:I>:#:I>:#>C<):zI<2zI ڰ": U&ý1K'', ++ RECEIVED FILE CANCELLED ++ ++ UNFINISHED FILE DELETED ++ ÷*:UI#, ++ Timeout $# #:zI:I:I/2I2&,** Switching to Checksum mode **  >2I(ڥ#W(ڥ#/J$:UI #, ++ Bad record # in header #z2wI>2I!"I!(ڥ#w,^$2I:I”$Q(ڥ#$:wIG:xI$%,(+,H) ><):xI<):xI/<)>2I!"I!~<),a%2Iy<)*I|<)}<)>2-J2+J(GҘ%2-J2+Jxʰ%ƒ%:-J%&:I%:UI%,++ x%+,H%,NAK, received not ACK - $2I:zI<2zI ?, ++ SEND-FILE CANCELLED ++$, ++ TIMEOUT - no ACK - $%:UI͈+͓+1K(X&><)(e&> <)>B2PI2I2I:IRS#, ++ FILE CANCELLED ++ ÷**xI#"xI}!\ #~?'·&:PI'\<,File exists - erase? (Y/N): ͪ+Y2{+\,++ NO WILDCARDS ALLOWED FOR TEXT FILES ++ 2,++ NO FILE SPECIFIED ++ 2\2|Iy2I!O"}I'*}I!͙,"}I:I<2IO(:IOO\!! •(2I!O"}I:Iy(y: ͫ!+J^*0J(*.J8(z((F&7> ).)!,J^(͈2O:VI1):XI6):I6)F+F&:WIR):XIW):IW)F+͈2OA^)4,Waiting ready signal {+F&(U&Cʣ))…)U&&,CRC request received >2I:PI&,Got checksum request &,Name NAK received :PI—*:UIj* !I*>w#* !]I*>6*~ ,*#xD**~ D*>.*, , Transferred :\22J!\͐!:2J2\!iIwI͛,Jͫ:> h:e:eæ2!l\͛,2|2h n+ n+ n+ _+n+>(n++>)n+_> ͝+> ͝+O͓+ʹ+͝+a{_ + |Ľ+{0n+|+}++ ,0n+,CTL-@͝+,~$,n+#,~8,:UI~n+#', :,>͝+{+>2I:PI*U&:;J_͡A xl,͉,:IcG:*K É,~#›,Jx4I!\,:=º,5-#^#6 ^-p- !- , p- !- -, ^-p- !- p-#̈́- ̈́-6# > W-W- > W-W-w#W-:n-_@w# . p-w#p-~*ʔ-#†-×-ͩ-~*ʥ-#™-ͩ-6?#©-ͦAA2/25/- I!\,!_J͐!:l2_J:m ...: 28J_J<.,++ FILE NOT FOUND ++u..#5.00, . _J? !`Jw#.!m`J 0=ƀo&:_J/=_@2/25/,Drive : k bytes free on drive : $0կ͓+ʹ+ /ʉ/ʉ/ʿ//G#4+~#/px/ ԝ+#L/#G~wڨ/+xF6 ʯ/ʭ/L/4L/>͝+> ͝+>͝+L/>#͝+{+B/G>#͝+{+xL/͝+/L/>͝+5L/{+L/{+F##> w# 0~(0!0#0#"07#2h:Iy0>2I!\J 0:\2J!J\ 0\í0!J\ 0\!J\ 0\<7¶02I=Ɓo&J 0] 02h2|><0~# x0,File open: *Iͽ+: 1, (+,H), records Send time: :_!1^#V*I&2i`ͽ+, mins, !1:_~:2E2E2E2E2&ͽ+, secs at 1&,To cancel: use CTL-X  0`@J0(  !1:__ , bps 110$300$450$600$710$1200$2400$4800$9600$19200${/_z/W12 !<=?2}o|g>o*I|>!L!yg)x2>g>!ol2r$s%# b2*IO!L ~W$^"I:I2, ** File still open, use DEL, DIR, WRT, E, L or T ** 22I!iIwI͛,!\IOI ͛,2I2+J2,J2I=bH, Single Letter Commands ? - Display current settings ^ - Function key intercept character, then (0-9) M - Display the menu E - Terminal mode with echo L - Terminal mode with local echo T - Terminal mode For copying text to disk use T (E or L) FILENAME.TYP Start or Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol COMMAND: R (or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g., *.*) D - Disconnect when done Q - Quiet mode (no messages to console) V - View or bytes on console X - When done, disconnect, go to CP/M The single letter commands may also be used on the command line when the program is initially executed. ͏, Three Letter Commands CPM - Exit from this program to CP/M DIR - List directory and space free (may specify drive) ERA - Erase file (may specify drive) LOG - Change default drive/user no. (specify drive/user) and reset disks. e.g. LOG A0: or LOG B: (user # unchanged) SPD - Set file output speed in terminal mode vDb8,TIM - Select Baud rate for "time-to-send" msg. :ʘ8,TCC - Toggle CRC/Checksum mode on receive :8,TLC - Toggle local command immediate or after :', :"9,TLF - Toggle LF after CR in "L" or "T" mode for a disk file :Z9,TRB - Toggle rubout to backspace conversion :ʝ9,TXO - Toggle XOFF testing in terminal mode file output :9:9,NUM - List remote systems : 9,SET - Set modem baud rate ,BYE - Disconnect, then return to CP/M :)::@:,CAL - Dial number ,DSC - Disconnect from the phone line The following are terminal text buffer commands: ,DEL - Delete memory buffer and file WRT - Write memory buffer to disk file 2H, Local Commands while in Terminal Mode : , - Send a break tone for 300 ms. :;:), - Change baud rate >, - Exit to command mode :;:", - Send log-on message :!, - Disconnect from the phone line :<:#, - Toggle printer > ͝+:&, - Start copy into buffer :$, - Stop copy into buffer Start & Stop may be toggled as often as desired. A ";" at start of line indicates buffer is copying. XOFF automatically used to stop input when writing full buffer to disk, XON sent to resume. :%, - Transfer ASCII file to remote ::'=, - Send local control character to remote =, - Next character will be used for local control z{+:I'>7I, Bytes of buffer free A͝+͟A>>&oͽ+>>͝+>>͝+,COMMAND: 2II>/:I'>^ʛ??zH >:I:#CI0CPMZ,{+0LOGA0DIRҤ@0ERAһ@0SPDB0TIM]C0TCC҄D0TRBD0TLCE0TLFnE0TXOE: ?: ?0NUMҕG: ?0SETF0WRTDG0DELG0BYEM@0DSC+:Q?:c?0CALc?> 2Io?:I!HI&Hx?ͫ,~?=,++ Invalid command ++ :bH, SPECIAL FUNCTION KEY TABLE ?,CTL-@͝+, current function key intercept character ! #~0͝+> ͝+#~@@ :@,$@͝+$@{+@{+=:h:{@h, << Exit to CP/M >> Z,ͻ !ͻͻ > ͝+!@ͻ(Җ@ATZ $23Jͱ-:3J_=I!\,3+:] x?\<@,++ File not found ++ =\,File erased =:I«A:I )AͦAAAx?23J͟AG:IdApA:IdArAA :3J_:=J_͡A= lA:IA͕AOxGxx?2=JI>/:I 0 x? ,++ Terminal mode file open ++ ++ Use WRT or DEL before LOG command ++ =,Delay between chars. (0-9): ͈+(B͓+͝+C0 x?2,Delay at end of line (0-9): ͈+aB͓+͝+C0 x?2 , Char. delay (terminal file mode) is: :Gxo&ͽ+,0 ms. per character Line delay (terminal file mode) is: : Go&ͽ+,00 ms. per character =, :IAx?_:I =0LC:I0XC&x?_͡A=>LCvDx?,Use 0-8 to give baud rate for 'S' mode time-to-send message, where 0=110, 1=300, 2=450, 3=600, 4=710, 5=1200, 6=2400, 7=4800 8=9600 and 9=19200 Baud. Enter value: ͉A x?2 D=vD`D,Rate for the S mode time-to-send message is set to sD,Modem speed is 1: G:::x?:/2͘D=,Mode: :ʳD,CRC ,CHECKSUM :x?:/2D=:D,Rub is backspace ,Rub is rub :x?:/2E=,Use ::'GE, before local command , to send local command to remote :x?:/2͂E=,LF :˜E,NOT ,sent after CR in "L" or "T" for a disk file :x?,Use XOFF testing? (Y/N): MFE2jF, Use XON waiting after (Y/N): MF+F2ͶF:=/2,Therefore jF=I>/:I ?GN>xY>x?,XOFF testing :ŠF,NOT ,used, in terminal mode file output ,XON :F,NOT ,automatically tested after CRÒF: x?Iw:=Aͤ,Tͤ, ͤ,=:IyG:?J yG>J2I2I!>J͐!!O"I=:IyGcG2I2I!>J͐!!O"I=:?J >J2I,++ No File Open ++ =bH, Library of Phone Numbers of Remote Systems!OH## ͛,H##B ͛,H G>$ O{+{+=> > > F#1H'H7,HIT any KEY to CONTINUE͈+MH͓+bH{+=: ž> ͝+ > ͝+rHbH, Current Settings ͘DD:ʴH͉ D,Terminal mode file buffer is :IH,in,active Unused portion of buffer is 7I, bytes E͂EjFͶFzB{+{+{+=*I믓o|gͽ+SRTELMABDJLOQRSVX01ABDJLOQRSVX01OOO4se XON waiting after (Y/N): MF+F2ͶF:=/2,Therefore jF=I>/:I ?GN>xY>x?,XOFF testing :ŠF,NOT ,used, in terminal mode file output ,XON :F,NOT ,automatically tested after CRÒF: x?Iw:=Aͤ,Tͤ, ͤ,=:IyG:?J yG>J2I2I!>J͐!!O"I=:IyGcG2I2I!>J͐!!O"I=:?J >J2I,++ No File Open ++ =bH, Library of Phone Numbers of Remote Systems!OH## ͛,H##B ͛,H G>$ O{+{+=> > > F#1H'H7,HIT any KEY to CONTINUE͈+MH͓+bH{+=: ž> ͝+ > ͝+rHbH, Current Settings ͘DD:ʴH͉ D,Terminal mode file buffer is :IH,in,active Unused portion oTOPIC: MDM730.ASM MODEM PROGRAM DATE : 22 MAR 84 NOTE: This program when assembled is 73 sectors long. Use this figure when merging the appropriate overlay file for your computer via DDT, etc. (Most of the overlays were written when MDM7xx.COM was only 66 sectors and the example included in each says to store 66 sectors.) For MDM730 use: B>SAVE 73 MDM730.COM NOTE: Use M7FNK.COM to easily and quickly change any of the 10 function key assignments. You can read the M7FNK.DOC file for additional information. (by Sigi Kluger.) The log-on key (CTL-L can be changed in the overlay. NOTE: M7LIB.COM is a rapid and surprisingly easy way to quickly change any entries in the phone number library. See M7LIB.DOC if instructions are needed. M7NM-6.ASM is necessary for setting or altering numbers for 'SPRINT', 'MCI', etc. It would also be better if making a lot of changes such as adding or deleting '1-' required for long distance dialing in some areas. NOTE: If using the phone number overlay to change the phone library numbers, be sure to use: M7NM-6.ASM The phone number library contains 36 numbers (A-Z plus 0-9) Most users will not need the lengthy (158k) source code at all. Just get MDM730.COM and then check one of the associated over- lay programs to obtain the overlay for your particular computer. Merge that with MDM730.COM according to the instructions near the start of the overlay file, using DDT.COM, etc. (See above note relative to saving 73 sectors. STAT.COM would then show 146 records for 20k.) The following bytes can be changed easily with DDT, then SAVE 73 0DFEH - HEXSHOW 00 = do not show hex record count FF = show both hex and decimal count 0DFFH - SAVSIZ 20 = 4k file transfer buffer size (see table below for other options) 0E00H - NUMBLIB (start of telephone number library) To change the file transfer buffer size via DDT, change byte 0DFFH: 20 (hex) = 32 records = 4k 40 (hex) = 64 records = 8K 60 (hex) = 96 records = 12k 80 (hex) = 128 records = 16k (Use the largest value that does not give errors during file tranfers when the disk activates. You have about 10 seconds before a timeout error would occur. 8" systems can easily handle 16k per transfer in 3-4-5 seconds. 5-1/4" systems are usually much slower. In that case try 8k or 12k. Default is set for 4k as that is known to work satisfactorily on all disk systems.) - Irv Hoff RECENT CHANGES: -------------- MDM730 - After a file transfer, now automatically returns to the last terminal mode used (E, L or T). This makes it extremely easy to use modem-to-modem communications in addition to normal file transfers. Added a 'J' option in the event a return to command mode is desired. Example: COMMAND: RJ FILENAME.Ext Changed max. timing delays to optimize use with satellite al- ternate dialing systems. (Submitted by Bob Plouffe.) MDM728 - changed RCVRECD routine to move the test for EOT outside the SOH loop. MDM727 - function key character shown in menu. Typing that character on command line shows all function key definitions. MDM726 - 'T' no longer needed to return to terminal mode after a file transfer, i.e., 'RT' or 'ST' no longer used, just 'R' or 'S'. MDM724 - added 10 function keys for auto-typing preselected messages MDM722 - phone number library now has 36 entries rather than 26 (has A-Z as usual plus 0-9). MDM716 - Robust addition to minimize problems due to intermittent noise. Gives added protection against timeouts on mainframes. Batch mode transfer improved. CREDITS: ------- MDM730 - Irv Hoff MDM728 - Bob Plouffe MDM727 - Irv Hoff MDM726 - Irv Hoff MDM724 - Sigi Kluger MDM722 - Bill Brehm with routines developed by Fred Viles MDM716 - Bob Plouffe off MDM726 - Irv Hoff MDM724 - Sig TOPIC : MDM730 RECENT CHANGES FROM : IRV HOFF W6FFC DATE : 22 MAR 84 COPYRIGHTED 1984 BY IRVIN M. HOFF This program may be used freely for any non-commercial purpose, provided that the user does not remove or alter this notice or the copyright statement. It is not covered by a warranty either express or implied. No changes or alterations are authorized. If desirious of modifying the program for national release, it may be used for such purposes only if the name is changed and credit given where appropriate. *********************************************************************** NOTE: ALTHOUGH THIS PROGRAM IS BEING PLACED IN THE PUBLIC DOMAIN, IT IS NOW IN A FINAL VERSION THAT HAS BEEN THOROUGHLY TESTED ON A WIDE VARIETY OF SYSTEMS. NO FURTHER CHANGES OR UPDATES ARE EITHER ANTICIPATED OR AUTHORIZED. IF ANY ALTERATIONS ARE MADE, A DIFFERENT NAME SHOULD BE SELECTED AND A NEW SERIES COMMENCED. THIS PROGRAM HAS RECEIVED A NEW UPDATE AN AVERAGE OF EVERY TWO WEEKS SINCE IT WAS STARTED. IT MUST BE ALLOWED TO STABILIZE. THE NAME MDM7xx IS COPYRIGHTED, SO PLEASE OB- SERVE THE REQUEST TO SELECT A DIFFERENT NAME IF CHANGES ARE MADE. (SYSOPs ARE BEING ADVISED TO NOT ACCEPT ANY FURTHER MDM7xx VERSIONS WITHOUT MY APPROVAL. IT IS ONLY WITH THIS AGREEMENT THAT I AM RELEASING THE SOURCE CODE.) THIS ALSO ALLOWS THE PROGRAM TO BE MADE GENERALLY AVAILABLE THROUGH SIG/M; ALSO OTHER SOURCES. - Irv Hoff W6FFC *********************************************************************** 03/22/84 1. Automatically returns to "E", "L" or "T" mode after a MDM730 file transfer, whichever one was last used. This now makes modem-to-modem use really convenient as either end can immediately type to the other after a file transfer, where one is using "E" and the other using "T" mode. It also adapts particularly well to new verions of XMODEM. 2. 'J' option added. Allows return to command mode with 'RJ' or 'RS'. The normal user will never need this fea- ture, but was requested for some unusual applications. 3. RETRY in place of ACKNAK. If YES, after 10 errors, asks if you want to reset the error counter and try again. if NO, aborts after 10 consecutive errors. RCPM systems using XMODEM and other modem-to-modem transfers have al- ready aborted, but can be used on mainframes where busy conditions are more prevelant than poor tranmsissions. (Set no if only using RCPM or modem-to-modem, YES for file transfer on TYM-SHAR mainframes such as Arpanet.) 4. Maximum wait for control responses increased (10 places) to properly handle delayed transmission times resulting from satellite alternate dialing systems. (Submitted by Bob Plouffe.) 5. If Xon-Xoff selected, no longer asks if you want delays. 6. Maximum time to wait for an echo character now 200 ms. 7. Trap rubout (delete) chars. received in terminal mode. 8. Numerous other changes. Read MDM730.DOC for assistance. 01/01/83 First version. Can be assembled with ASM.COM. (Previously MDM700 it was necessary to have the MODEM7.LIB file and use MAC.COM to assemble the program.) Selected MDM700 as a new program to allow me to make changes that I felt might be beneficial. This would not hinder others from updating existing programs to their own satisfaction. The name was also selected so it would fit on databanks limiting file names to 6 characters. - Irv Hoff *********************************************************************** iting file names to 6 characters. - Irv Hoff *****************on to minimize problems due to intermittent noise. Gives added protection against timeouts on mainframes. Batch mode transfer improved. CREDITS: ------- MDM730 - Irv Hoff MDM728 - Bob Plouffe MDM727 - Irv Hoff MDM726 - Irv Hoff MDM724 - Sigi Kluger MDM722 - Bill Brehm with routines developed by Fred Viles MDM716 - Bob Plouffe off MDM726 - Irv Hoff MDM724 - Sig Files: 26 space used: 356k (30k free) -EBMMUG .003 2k : M7LIB .COM 2k : MDM730S .COM 20k : PRTCOL .CIS 16k @README .003 4k : M7LIB .DOC 4k : NEWSWEEP.COM 12k : RCPM49 .LST 40k DISKNAME.COM 2k : M7RUB .MSG 2k : NSWP205 .DOC 28k : SMARTE .ASM 56k EBMDIR03.TXT 2k : MDM730 .MSG 4k : NSWP205 .UPD 2k : SMEXEC .ASM 44k M7FNK .COM 4k : MDM730 .UPD 4k : PAT730 .V5 8k : STATUS .MEX 8k M7FNK .DOC 2k : MDM73040.DOC 40k : PATMD4 .COM 22k : M7FNK .NOT 4k : MDM730D .COM 20k : PATMD4 .DOC 4k : !ڈp~<2k5>24!vi.>2vC!p ̀ʾp!p ̀p!8"J6×-!v.!6.292F2I2[[-*7"v"7p*7*7R|<2 72 7|D!"7>2 7%q)"7,q2 7!5wȷ!  .>2%!:C6!4̗!:~ͣwv:Jtqw::ʀq>26_7 !p ~87!p  :4=q!CS!7v!4:8:6q6 #:v+!4v8!5~8:4=r!SCM "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*= ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*= ^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% DMf KK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! '= :/ = : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *& VOLUME 003 DESCRIPTION: COMMUNICATIONS FILES,NEWSWEEP, DISKNAME, RCPM LIST & COMPUSERVE NUMBER SIZE NAME COMMENTS 003.1 2K -EBMMUG .003 DISK NAME & CONTENTS OF VOLUME 003 (JUN 7,'84) 003.2 4K @README .003 EXPANSIVE DESCRIPTION OF FILES ON EBMMUG 003 003.3 2K DISKNAME.COM WRITES 0K FILE FROM NAME ON COMMAND LINE 003.4 2K EBMDIR03.TXT DISK DIRECTORY OF EBMMUG.003 003.5 4K M7FNK .COM MODEM7 FUNCTION KEY MODIFIER 003.6 2K M7FNK .DOC DOC FILE FOR M7FNK 003.7 4K M7FNK .NOT MORE DOC FOR M7FNK 003.8 2K M7LIB .COM MODEM7 PHONE NUMBER LIBRARIAN 003.9 4K M7LIB .DOC DOC FILE FOR M7LIB 003.10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILE FOR NEWSWEEP 003.18 2K NSWP205 .UPD MORE DOCS FOR NEWSWEEP 003.19 8K PAT730 .V5 OPTIONAL MODS TO ASM FILE OF MDM730 003.20 22K PATMD4 .COM OPTIONAL MODS TO COM FILE OF MDM730 003.21 4K PATMD4 .DOC DOC FILE FOR PATMD4 003.22 16K PRTCOL .CIS COMPUSERVE FILE TRANSFER PROTOCOL 003.23 40K RCPM49 .LST BULLETIN BOARDS AS OF 4/84 003.24 56K SMARTE .ASM COMPUSERVE EXEC - NOT MODIFIED FOR PMC 003.25 44K SMEXEC .ASM COMPUSEVER EXEC - NOT MODIFIED FOR PMC 003.26 8K STATUS .MEX STATUS OF MEX .10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILE >>> Remote CP/M Software Exchange Systems List # 49 <<< >>> 04/18/84 revision by Jud Newell <<< A summary of all operating Remote CP/M software exchange systems which use Christensen protocol, (XMODEM), for file transfers and are available to the general public for the exchange of public domain software. Some of these systems charge access fees, indicated by a $ after the telephone number. ---------------------------------------------------------------------- SPECIAL NOTICE TO SYSOPS: Please inform Kim, Jud or Steve of any changes in your system to avoid being removed from the list, which is verified periodically. If your system is no longer functioning, please have a friend modem a message so your system can be deleted. ---------------------------------------------------------------------- Send update information to: Kim Levitt - MBBS HEADQUARTERS RCP/M - (213) 653-6398 [Leave msg on MBBS and/or upload file using XMODEM] or Jud Newell - TORONTO RCP/M SYSTEMS - (416) 232-0442 (416) 232-0269, (416) 231-1262, (416) 231-0538 [Leave comments on exiting system] or Steve Sanders - PRO-COM DATABASE - (813) 937-3608 [Leave comments on exiting system] (See file NEW-SYS.OPS on most RCP/M Systems for required information.) Unless indicated: All systems are 24 hours, 7 days with no callback. Local times of operation are listed after sysop's name. Callback systems have a "cb" before phone number. Systems charging fees have a dollar sign "$" after phone number. Some systems may restrict "first-time" users, be sure to read the opening info files when accessing a new system. Baud Rates: (shown after sysop name(s) or hours) (PMMI=1-7) 1=110 / 3=300 / 4=450 / 6=600 / 7=710 B=Bell 212A 1200 / V=Vadic 1200 Disk Capacity: (total disk space shown after baud rates) K=Kilobytes / M=Megabytes (See notes at end of list for more information) ========= NORTHEAST [Connecticut] Xerox East RCP/M RBBS ............................... (203) 232-3180 Dave Shefelbine; (3B;10M); General Interest and Xerox 820-II programs. (Hartford) Connecticut Micro Decision UG ....................... (203) 445-5019 Steven Landers; (3;800K). CP/M Software, CPMUG,Osborne,Morrow technical help [Maine] Programmer's Anonymous RCP/M ........................ (207) 839-2337 Ralph Trynor; (3B;180K); Osborne Software; (Gorham) [Massachusetts] BINEX Boston Information Exchange ................... (617) 423-6985 Glenn Meader,Andrew Moore; (3B;10M). M-TREE Message System Andover Cnode ....................................... (617) 470-2548 Layne DuBose; (1-7;18M); All C User's Group volumes on-line, plus best of CPMUG. Also some Osborne, RS M100, 8088/8086 software; (Andover) Milford S-100 User's System ......................... (617) 478-6062 Howard Moulton, Jr.; (no answer when in use); (3B;1.1M); access password = "PDBIN" (must be upper case only); IMSAI S-100 w/Z80; Bellingham RBBS ..................................... (617) 966-0416 Jim Devoid; (no answer when in use); (3;180K); Heath H8 system [New York] C U R A RCP/M ...................................... (212) 625-5931 Brian Callahan; (3B;10M); Kaypro, Osborne, Zram, Softbox; (Fort Greene, Brooklyn) Remote CP/M Facility of Dolgeville, NY ........... cb (315) 429-8185 Peter A. Polansky; (346B;500K); 8086, 68000; (Upstate NY) CNY Technical RCP/M ................................. (315) 437-4890 Mark Howard; 5P-8A M-F, 24 hrs wknd (3B;52M); now 1200 capable; CP/M Plus Users' Group (CP-PLUG) host system; Also Apple and Kaypro applications; Technical assistance RBBS. (Syracuse) Connection-80 TPM (RTPM) ............................ (516) 567-8267 Tom Vande-Stouwe; (3B;20M); Epson QX-10 and Osborne software (FOG Library on line); also the message base for the Long Island Osborne Network; (Long Island) Connection-80 TPM (RTPM) ............................ (516) 567-8995 Tom Vande-Stouwe; 6P-9A; (3B;20M); (Long Island) Mid-Suffolk RCP/M ................................... (516) 751-5639 Al Klein; 5P-9A daily, 24 hours weekends;(3B;5M); Telecom, utilities, APple, IBM-PC, Kaypro (Long Island) Johnson City, NY SJBBS .............................. (607) 797-6416 Charles; Eves, etc.; (3;2M); (Upstate NY) Bearsville Town SJBBS ............................... (914) 679-6559 Hank Szyszka; (1-7;4M); (Upstate NY) Woodstock RCP/M RBBS ................................ (914) 679-8734 John Doak; (134B;4.8M); (answers after 3rd ring), CP/M, RCP/M, and some osborne software available. S.D.V. RBBS RCP/M ................................... (914) 769-2970 Richie Cawley; (3B;20M); Logical Drives A-F, user areas 0-5 available. (Osborne 1 w/external 20MB disk.) (Downstate NY) [Ontario, Canada] Willowdale CBBS ..................................... (416) 226-9260 $ Vic Kass; (3BV;50M); SIG/M, CP/M UG Library; (Toronto) Toronto Ontario RCP/M Systems ..... (416) 232-0442 232-0269 231-1262 $ 231-0538, 232-1449 Jud Newell; (3BV;71M); allow limited access without registration; (five systems available); (Systems 1-3,5 for CP/ users, System 4 for IBM PC-DOS users, System 3 is a Kaypro network system); Annual $30 fee allows access to all five. >>> THESE SYSTEMS ALSO COLLECTION POINTS FOR UPDATES TO THIS LIST. PLEASE SEND THE INFO. AS A COMMENT ON LEAVING SYSTEM. (SYSOPS: See NEW-SYS.OPS for information on to obtain access to these systems at no charge.) E-MX RCP/M........................................... (416) 484-9663 Simon Ewins; (3B;360K); Osborne Software. Distribution point for e-mx mail system series of programs.(Toronto) [Quebec, Canada] Montreal RCP/M....................................... (514) 481-6329 Pierre Benard; M-F 6P-8A, wknd 24 hrs; (3;1.M) [Rhode Island] Providence RCP/M ................................. cb (401) 751-5025 Mark Rippe; 10A Sat-10P Sun; (3;1.2M); Msg system down ============ EAST CENTRAL [Maryland] Cambridge, Maryland RBBS/RCPM........................ (301) 228-4621 Al Waller; (3;5M); Software Exchange,Ham Radio, Communications; (Maryland's Eastern Shore) Pikesville RBBS/RCPM ................................ (301) 484-2831 John Madill; (3?;??); DEC, Rainbow, IBM-PC; Sponsored by local Computerland store; (Baltimore) BHEC RBBS/RCPM ...................................... (301) 661-2175 Walt Jung, Charlie Schnepf, Harry Barley; (34B;10M); (Baltimore) Baltimore Heath Users Group (BHUG) .................. (301) 768-1499 Allan McClure/Ricky Litofsky (34B;3M) If no answer after 2nd ring, system is down for maintenance. (Baltimore) St. Mary's College RCP/M ............................ (301) 863-7165 Jonathan Crawford; (3B;20M); Epson QX10 system; Features special interest sections for different computers, educational programs; (St. Mary's City) Microcomputer Electronic Information Exchange ....... (301) 948-5718 John Junod, Lynne Rosenthal; (3;64K); (Gaithersburg) [New Jersey] CP/M-NET(tm) EAST [the only one] .................... (201) 249-0691 IMSW (SYSOP's = Harry & Al); (3B*;40M); Otrona, S-100, Kaypro, DEC, IBM , Osborne, Apple; Modem PGM's, Sig/m, CP/Mug, Cug, Utilities, etc.; When database is full, the system will take new callers at 1200 baud only! (Piscataway, NJ) RIBBS of Cranford, New Jersey ....................... (201) 272-1874 Bruce Ratoff; (1-7,B on request;3M); bulletin board of SIG/M, (Special Interest Group/Microcomputers, ACGNJ) KUGNJ1 RBBS Atlantic Highlands, NJ .................. (201) 291-8319 George Frankle; (3B;400K,(10M soon)); RBBS of Kaypro User Group of New Jersey; (Password="KUGNJ1"); (Atlantic Highlands, NJ) Flanders, NJ RCPM ................................... (201) 584-9227 Ken Stritzel; (3B,1-7 on request;26M) Latest SIG/M releases The C-Line .......................................... (201) 625-1797 David Fiedler; M-F 8P-9A, wknd 24 hrs; (1-7;2M); UNIX/UNIX-like systems, C software; (Northwest NJ) Metroplex RCP/M ..................................... (201) 722-8297 Steve Holtzclaw; (3B;20M); Newly relocated from Dallas; Latest SIG/M-CPMUG releases; (Somerville) Paul Bogdanovich's RBBS ............................. (201) 747-7301 Paul Bogdanovich; M-F 6P-11P, wknd 8A-11P; (1-7;1M) [Pennsylvania] Allentown RBBS/RCPM System .......................... (215) 398-3937 Bill Earnest; (1-7BV;10M) Compusers RCP/M/BBS ................................. (215) 666-5381 Mark Rodenhausen, George Ligowski; (3B;10M) Part of Compusers Users Group of Valley Forge, PA. (Valley Forge) ChurchBoard BBS ..................................... (215) 932-8829 Byl Levering; (3B;??); Church related messages Greensburg RBBS-RCP/M ............................... (412) 836-8407 Doug Borko; (3;??); Kaypro related files; (Greensburg) State College, PA. CUG-NODE ......................... (814) 238-4857 Joe Shannon; (3;3M) [Virginia] Arlington RCPM/DBBS of Virginia ..................... (703) 536-3769 $ Eliot Ramey; M-F 10P-3P, wknd random; (1-7;800K); (Washington DC area); (Minimum $5.00 subscription fee.) Springfield RCP/M ................................... (703) 644-2299 Roger Donais; (3B;10M), Kaypro, Osborne, Morrow Interests The Flying Circus RCP/M ............................. (703) 759-6627 Mike Levy; (3B;10M); Interest in Kaypro; SIG/M CPMUG (Great Falls) OxGate-007 Grafton VA ............................... (804) 898-7493 Dave Holmes; (1-7;5.2M); CP/M, TRS-80 & Apple software; (Tidewater) ======= MIDWEST [Illinois] Logan Square RCPM ................................... (312) 252-2136 Earl Bockenfeld; (1-7;1M); Special interest databases. Daily change on B; (Chicago) RCPM PLUS ........................................... (312) 326-4392 Dick Lieber; (3B;??M); ???? Palatine RCPM ....................................... (312) 359-8080 Tim Cannon; (3B;4.8M); Disks on B, C & D are changed daily; (Chicago area) Xerox Midwest RCPM/RBBS ............................. (312) 384-0013 David Lowy; (12A-6P, other hrs no answer if in use); (3B;980K); Mainly for Xerox PC users, but all welcome. Password required for system access; (Xerox 820-II system); (Chicago) C.A.S.A.T. CBBS ..................................... (312) 443-3744 John Manning; (3;2.5M); Art, sound synthesis, video, analog & digital image processing, telecommunications, robotics; Located at the Center for Advanced Studies in Art and Technology at the School of the Art Institute of Chicago, this CBBS has been created to promote exchange between artists and all interested parties in the use of technology in art.; (Chicago) Glen Ellyn West Suburban RCP/M ...................... (312) 469-2597 Jim Mills; (36B;3.6M); (Chicago area) Prairie View RCP/M .................................. (312) 537-7888 Don Castella; 6P-8A Mon-Fri, 24 hrs wknd; (1-6B;3.6M) Heath H89 3 sets of disks changed daily (Chicago area) AIMS, Hinsdale, Ill ................................. (312) 789-0499 Mark Pulver; (1-7B;10M); Running both PMMI and Hayes 1200 modems, 1200 detect at second c/r then 3 sec delay to switch modems. (Chicago) Chicago RCP/M ..................................... (312) 941-0049 John Sojak; (3B;35M); Running both PMMI and 1200 Baud (Chicago) [Indiana] Bloomington RCPM/RBBS ............................... (812) 334-0609 Bob Jacobs; (3B;2M); (four carriage returns to bring up sys); current public domain software, amateur radio (satellite). [Kansas] Wichita RBBS/RCPM ................................... (316) 682-9093 George Winters; (8P Fri-11P Sun); (3B;300K); member of FOG OPEK (Osborne Portable Enthusiasts of Kansas) chapter. Mission, KA RCPM .................................... (913) 362-9583 Bill Parrott; (3B;7M); Heath/DG Super 89 system AlphaNet RCP/M RBBS ................................. (913) 843-4259 Larry Miller; 6P-9A daily; (3;700K); B drive changes daily; (Lawrence) [Michigan] Schooner Cove (Ypsilanti) RCP/M ..................... (313) 483-0070 Michael Wesley; (3;644K); B: changed daily, sysop will mount any disk on request. (Ann Arbor-Detroit area) MINICBBS/Sorcerer's Apprentice Group ................ (313) 535-9186 Bob Hageman; (1-7;500K); Sorcerer software and hardware; (Detroit area) Southfield, MI, RBBS/RCPM ........................... (313) 559-5326 Howard Booker; (3;2.7M); BDS C programs, doc. files. Tony's Corner RBBS .................................. (313) 754-1131 Tony Bauman; (3B;???K); TRS-80 Model I system Royal Oak CP/M ...................................... (313) 759-6569 Keith Petersen; (1-7;26M); MiniCBBS available but main purpose is file transfer; (Detroit area) XEROX CORP RBBS .................................. cb (313) 827-2266 Brad Harper; (3?;???K); If calling during working hours - call by voice first, after 5P call, hang up after recorder starts and call back immediately. Technical CBBS ...................................... (313) 846-6127 Dave Hardy; (1-7;3M); RCPM sysops desiring access to passworded RCPM Clearing House system should leave msg on TCBBS; (Detroit) OPTEC RBBS .......................................... (616) 897-8628 Jerry Persha; baud/disk unknown; Open system; interests in prof and amateur astronomy relating to photometry. (Lowell, MI) Grand Traverse RCP/M ................................ (616) 947-1246 Bill Jungers; (3B;10M); Kaypro, Franklin/Apple, Televideo; A member of the Kaypro Network; (Grand Traverse) [Minnesota] TCRCP/M Twin Cities RCP/M ........................... (612) 333-5947 Larry Linde; (3B;5M); RBBS written in 'C'; (5 Mhz Big Board); (Minneapolis) [Missouri] St Louis HUG RBBS ................................... (314) 291-1854 John Griffith; 1A-9A daily, 24 hrs on Sunday; baudrate and disk size unknown; H-89 system KAY-PER NET.......................................... (816) 734-2717 Ron Smith; (3B;10M). If no answer, voice call to SYSOP at (816) 4987 should correct the problem. [Ohio] Dayton RCPM/RBBS .................................... (513) 256-7227 Dave Robling; (1-7;1M); (Dayton) Cincinnatti RBBS .................................... (513) 489-0149 Henry Deutsch; 6P-6A daily; (1-7;1.8M) Columbus CBBS ....................................... (614) 272-2227 John Walpole; (1-7;300K); BDS-C programs Pickerton RBBS ...................................... (614) 837-3269 Greg Bridgewater; (3;1M); Running TRS-80 with Omikron [Wisconsin] CHANL-3 RCP/M MYBBS ................................. (414) 353-1667 Bill Ganley: (36B;5.5M); CB-80, Communications, S-100 system running USR S-100 modem; (Milwaukee) Fort Fone File Folder ............................... (414) 563-9932 Al Jewer, Shawn Everson, Ron Fowler; (1-7;20M); (Ft. Atkinson) Milwaukee Heath Users Group RBBS (MHUG) ............. (414) 873-7564 Mike Wesolowski; (3;15M); PRIVATE system maintained by Milwaukee Heath Users; running on Heathkit H89. ===== SOUTH [Alabama] NACS/UAH RBBS/RCPM ............................... cb (205) 895-6749 Don Wilkes; (1-7;700K); (Huntsville) [Florida] Astronomer's RBBS & RCPM ............................ (305) 268-8576 Chuck Cole; (no answer when in use); (3B;492K); Astronomy & science special interests: CFAS, AAVSO, ISRG, IAPPP, SERAL, and CANDL; (will have 2.4MB on-line soon); (Titusville) SIMMS 002: Silicon Beach RCP/M ...................... (305) 439-5754 Steve Sanacore; (3;256K); Apple CP/M; Multiple Message Bases; (West Palm Beach) Melbourne RCP/M OXGATE .............................. (305) 676-3573 Alex Soya; (3B;20M); new releases of CPMUG and SIG/M software; Information exchange re: hardware problems & fixes, especially S-100 machines; Interest in CPM86 & CPM68K software; (Melbourne) Orlando, Florida RCPM System I....................... (305) 677-8086 $ Larry Snyder; (3BV;24M) Special interests in Compupro hardware, communications, spreadsheets, dBase II, C-86, CPM816 and MPM816. $30 annual membership, limited amount of users. Second system soon on-line supporting software compatable under MPM 8/16. Sysops, leave message on Detroit Sysop System for Complimentary membership.(Compupro 816 CP/M-80); (Suburb of Orlando) Miami Bulletin and Exchange Board ................... (305) 854-7274 Jack Lamont, Kevin Killey, Calvin Thompson; (3B;6M); Kaypro 10 or at times a Kaypro II. Atari section, community involvement promoted. CCPB-RCP/M Computer Club of the Palm Beaches ....... (305) 967-0344 Mark Fay; (system I: TU & TH 9P-12P; SU 12A-12P); (1-7;1.8M); Interest in libraries of recent and classic CP/M software. Jim Flora; (system II: M, W & F 9P-12P); (1-7;1.2M); Interest in ASCII printer graphics, CB80, and general CP/M software; (NOTE: Phone answered voice other hours.) (West Palm Beach) Sanyo RCP/M ......................................... (813) ??????? Scott Holtzman; (3B;30M); Sanyo USA BBS/RCPM; System is down and will be coming back online with a new number; (Tampa) Tampa RCP/M ......................................... (813) 831-7276 Charlie Hoffman; (3B;20M); New 20MB hard disk; Interest in 'C'; SIG/M-CPMUG releases; Tampa Bay CP/M User's Group PRO-COM DATABASE .................................... (813) 937-3608 $ >> (Formerly known as: The Tampa Bay Bandit Board RCP/M) Steve Sanders; (3B;10M); Private system; $25/yr fee; monthly newsletter; 2nd system soon; Headquarters of the Kaypro-Network; new users may log on to leave message for info/application; Latest SIG/M-CPMUG; Turn-Key K-NET 84 (tm) RBBS-RCPM Systems available. (Tampa Bay) >>> THIS SYSTEM ALSO A COLLECTION POINT FOR UPDATES TO THIS LIST  PLEASE LEAVE INFO AS A COMMENT BEFORE EXITING SYSTEM. [Georgia] Atlanta RCP/M-RBBS .................................. (404) 627-7127 Jim Altman; (3B;4M); Soon to be 200 Mbyte; Interest in 'C', SIG/M, CPMUG releases; no answer when in use. (Atlanta) Acropolis RBBS/RCPM ................................. (912) 929-8728 $ Tony Stanley; (3B;10M); Support system for K-NET 84 (tm) RCPM-RBBS software; Kaypro, Heath/Zenith, CPMUG and SIG/M software; New users must be verified before accessing the system; (Warner Robins, GA) [Kentucky] Ovation Network RCP/M................................ (606) 273-8634 Jay Denebeim; 6P-9A M-F, 24 hrs wknd; (3B;5M); Kaypro Lexington User's Group (KLUG); a KayPro-Network system; (Lexington) (NEW NUMBER as of 1/20/84.) [Louisiana] Bossier RCP/M ....................................... (318) 742-1772 Tom Chandler; (3;2.6M) Interest in CP/M, Utilities, Games, 16 bit. (Bossier City, LA) Redstick RCPM ....................................... (504) 275-7846 Ken Shutt; (3;1.6M); CP/M+, Operating systems; (Baton Rouge) [Tennessee] Physician's Responsive Information System ........... (615) 967-6889 Dudley Fort; 5P-9A M-F; (3B;800K); Kaypro RBBS; major interest in medical software and information; on-line articles on topics excerpted from medical journals. (Mail address: Rt. 3, Box 289A, Winchester, TN 37398) ========== CALIFORNIA [Northern California] OxGate-005 Fresno Micro Fone ........................ (209) 787-3511 Bob Robesky; M-F 7P-7A, wknd 24 hrs; (3BV;25m); Standard and new CP/M 80/86, 'C', dBASE II, IBM-PC DOS [no answer if in use] Merced HUG CBBS/RCPM ................................ (209) 383-6417 Clinton Cook; M-Th 6P-12P, wknd 24 hrs; (B2;2M); System powered down until modem lock; Interest in CP/M, modem, Basic programs; (Merced, CA) San Jose DataTech Node 007 / Piconet Node 003 ....... (408) 238-9621 Al Mehr; (3B;20M); ZCPR2, CP/MUG, SIG/M software Santa Clara RBBS/RCPM ............................... (408) 247-2853 Jeff King; 8A-11P M-F, 24 hrs wknd; (3;20M) Oxgate-002 RCP/M Milpitas ........................... (408) 263-2588 Mel Cruts; (system hrs may be erratic due to heat); (1-7;12M); (south SF bay area) PicoNet #4 Wizard's Keep RBBS-RCP/M ................. (408) 281-7059 Rick Hobbs; (3;20M); Will answer technical questions on Osborne 1; (San Jose) Skyhouse Systems..................................... (408) 296-5078 Kirk De Haan; (no answer if in use); (3B;30M); NEW number and format; (Santa Clara) OxGate-001 Monte Sereno, CA ......................... (408) 354-5934 Chuck Metz & Paul Traina; (3B;20M); (San Jose area) POTPOURRI BBS & RCP/M Oxgate-012, San Jose, CA ...... (408) 378-7474 Wayne Masters; (3B;20M); Engineering Applications, Compilers, Assemblers, disassemblers & free JRT Pascal. Special software for sysops on A10; leave name and system phone #. OxGate-dBASE II RCP/M Campbell, Ca. ................. (408) 378-8733 Roger D. Brown; (3B;4M); dBASE II is available on this system to demonstrate software from independent software developers. System will soon be converting from OxGate to a BBS written in dBASE II. (San Jose area) Atlas Micro Associates "MCI" RCP/M-RBBS ............. (408) 379-8086 Bill Spoolhoff; 7P-10P M-F, 24 hrs wknd; (1-7;2.4M); Investment software, Dbase II, CB-80; NOTE: When system unavailable, you will receive short VOICE message and be disconnected; (San Jose) COMP-NET RCPM-RBBS .................................. (408) 637-1404 Curtis Elliott; (3;10M); soon to be 1200 bps also; member of the K-Net and running K-NET 84 (tm) system on Kaypro 10. SIMMS 003: "BAYLIST" System ..................... cb (408) 730-8733 Eric Sarti; (3;256k); Multiple message base. (south SF bay area) SIMMS 001: Network Headquarters ..................... (408) 732-9190 $ Ed Svoboda; (3B;44M); Silicon Multiple Message System; 1000's of files online. Annual membership donation is $25. Send to SIMMS HQ, Box 532, Cupertino, CA 95015. (South SF Bay) CrosNest II (DataTech Node 014) ..................... (415) 341-9336 Wilbur H. Smith; (3;2.8M); (Box 962, San Mateo, Ca. 94403) CDOS, CP/M hardware/software tipes/bulletins/educational utilities and communications software (SF Bay area) RBBS of Marin County ................................ (415) 383-0473 Jim Ayers; M-F 5P-8:30A, wknd 24 hrs; (1-7;10M); Now up with 10 meg drives A:-E:, user areas 1-2 w/ SIGM and CP/MUG pgms; (SF bay area) Rich & Famous RCP/M ................................. (415) 552-9968 Stephen Price, Ralph Nishimi; (3B;760K); games, communications; (San Francisco) DataTech Network Headquarters System ................ (415) 595-0541 Edward Huang; (3BV;1M); (Box 290, San Carlos, CA 94070) Hub of DataTech Network. Heath/Zenith/TRS-80, utilities and communications software. (SF Bay Area) Humor and Wisdom .................................... (415) 674-0660  Wayne Webber; (3B;1.5M); Humor, jokes, poetry, insights, etc; also supports software download/upload. (SF Bay Area) Napa Valley RBBS/RCPM ............................... (707) 257-6502 Dave Austin; (1-7;1.2M); Features: Apple, Atari, Compupro, Morrows, Osborne, TRS, CP/M software; interest in BDS/Aztec C, dBase II, Ham Radio; (Napa) Fairfield RBBS/RCPM ................................. (707) 422-7256 Mark Bournival; (3(1200 soon);3M); CPMUG & SIG/M, general CP/M software; (Northstar w/ 8" drives); (Sacramento area) XEROX NORTH COAST RCPM .............................. (707) 725-5230 Michael Mayfield; (3;644K); No answer when in use; Approx 1000 public domain files, B drive changed every 2 days; XEROX 820-II PC Based; (Fortuna) Critical Mass RBBS/RCPM ............................. (707) 884-4221 Ken Mobert; (3;26M); Oxgate system; (Gualala) CBBS/Sacramento ..................................... (916) 483-8718 Joe Bergin; (3?;??); (Need more info!!) Orangevale RCP/M .................................... (916) 988-2660 Ken Benedict; (3B;??); No answer if in use. (E. of Sacramento) [Southern California] Los Angeles RCP/M ................................... (213) 296-5927 Bob McCown; (1-7;2.5M); System features catalog of the latest CP/M, Apple, Atari, TRS-80 and IBM PC software; (west LA) PatVac .............................................. (213) 306-1172 "Pavlov's Cat", (Harris Boldt Edelman); (3B;366K); a magazine for the Real Programmer whose defenses are down. Expect to find various flaky logon and menu programs running that are in test phase. System has lacked a bbs program since Nov.'83; this seems to confuse novices. Do Not Be Deterred. (Venice) ThreePalms MAX BS RCP/M ............................. (213) 430-0079 Rick Edwards; (3B;1.5M);Lobo Max 80 Bulletin System running CP/M Software. Member of MAXIML (MAX-80 Users) (Seal Beach) Bankers & Hackers BBS/RCPM .......................... (213) 498-6581 Don Appleby; (3B;1.8M); N* system with NZCPR G.F.R.N. Data Exchange (RBBS) ....................... (213) 541-2503 Skip Hansen; (3BV;2.4M); ham radio-related pgms; (Palos Verdes) Catholic Information Centre (R)BBS .................. (213) 545-2146 Father John Higgins (3,10M); 8AM-10PMPST. Information on the Catholic Church, question/answer forum for all. (South Bay Area) ComputerFood Press MBBS/RCPM ........................ (213) 559-9033 Tom Tucker; (3B;382K); Interests include small business systems. The MAX BS RCP/M ................................. cb (213) 598-7412 Rick Edwards; (3B;1.5M); Lobo Max-80 Bulletin System; TRS-80 and CP/M software; member of MAXIMUL (MAX-80 User's League); callback implemented; (Seal Beach) El Segundo BBS ...................................... (213) 640-2545 Larry Chafe; (3?;???); Games, software demos; (need more info!) MBBS Headquarters RCP/M ............................. (213) 653-6398 Kim Levitt; (no answer if in use); (3B;382K); System running under ZCPR2; Headquarters for Micro Bulletin Board System (tm) >>> THIS SYSTEM IS ALSO A COLLECTION POINT FOR UPDATES TO THIS LIST. PLEASE SEND THE INFO. AS A FILE AND/OR MESSAGE TO SYSOP. Southern California Computer Facility ............... (213) 746-7427 Gene C. Brown;(3,780K;CALL BACK); Unlimited BBS Use, membership required to access RCP/M software. Some software on line. XANADU .............................................. (213) 906-1636 Rick; (3B;4M); CP/M access granted after first call. 9 different interest sub-boards. (Sherman Oaks, CA) Los Angeles Communication System..................... (213) 935-7570 Steve Huntley; (3B;780k); Kaypro based system. Kaypro utilities, CP/M Utilities and communications. Barstow RCP/M ....................................... (619) 256-3914 Bill Wood; (34BV;5.5M); H89 system. (does not see CR's for 8 secs after carrier detect, while system auto boots) San Diego RCPM ...................................... (619) 273-4354 Brian Kantor; (3BV;2.4M); (San Diego) SABA-HOM-LINE CBBS .................................. (619) 692-1961 Don Saba; (3B;2M); Special interest in Apple CP/M ASCII ATTIC ......................................... (714) 381-2083 Bob Ward; (3B;10M); Kaypro 10 system; (San Bernardino) Mission Viejo RCPM/CBBS.............................. (714) 495-9384 Bob Mathias; Tue-Sat 7:30P-5A, Sun-Mon 24 hrs; (3B;10M); hobby computing, Ada, and Pascal; Zenith Z100 G.F.R.N. Data Exchange (RBBS) Garden Grove .......... (714) 534-1547 Doug Laing; (3BV;5M); amateur radio, Apple/CPM; (Garden Grove) San Dimas RBBS/RCPM ................................. (714) 599-2109 Stu Anthony; M-F 8A-7P, wknd 24 hrs, (try anytime); (3B;964K); Xerox 820-II AnaHug RCPM/CBBS .................................... (714) 774-7860 John Secor; (3B;10M); hobby computing, ham, electronics hobbyists; Now has 300/1200 212A baud; (Anaheim) Sit Back and Wackit ................................. (714) 995-2428 Robert Collins; (3B;655K); IBM-PC utilities, 8087 source code; modem programs; APL utilities and hotline; COMPAQ system with 2 RAM disks, 8087 co-processor and Hayes 1200B modem. Thousand Oaks Technical RCP/M (RIOS) System 1 ....... (805) 492-5472 Trevor Marshall; (3,36B;66M); Use CHAT to request noise resistant 300 baud modem; active bulletin board, all software released by SIG/M, PC-Blue & Capitol-PC Users Groups on-line. Most C-UG vols. 7900+ files on line. Use SYSTAT & MOUNT to access subdirectories. TIME LIMIT now 1 hr/session (multiple sessions OK), increased by 2 for 1 for uploads. New modems. Couldn't get in before? Try now. Thousand Oaks Technical RCP/M (RIOS) System 2 ....... (805) 493-1495 Trevor Marshall; (3B;65M); No bulletin board, unlimited upload time, download time limited to 15 mins/day, (increased by 2 for 1 for uploads); additional time allocated for program contrib- utors and sysops (policy will evolve as system loading becomes known). (Networked to same 64MB hard disk as system 1.) Simi RCP/M .......................................... (805) 527-2219 Pete Mack; (M-F 7P-7A, wknd 24 hrs); (3-6,B;20M); General interest programs plus special interest in 'C'; Also interested in 88/86 PC software; (Simi Valley) Gil Berry's Simi RBBS ............................... (805) 527-8668 Gil Berry; (no answer if in use); (3;270K); Apple ][ system; engineering, robotics, science, music; (Simi Valley) SIMIAPPLE/RCPM ...................................... (805) 584-6054 John Damico; M-F 7P-11P, wknd 24 hrs; (3;6M); interest in modem, rcpm and amateur radio software; (Simi Valley) LOBO MAX-80 RBBS .................................... (805) 964-6626 Tom Marazita; 24hrs (more or less); (3B;2.4M); MAXIMUL (Max-80 User's League) software, CP/MUG, SIG/M, dBase, PASCAL, 'C'; (Goleta) Granada Engineering Group RCP/M ..................... (818) 360-5053 Webber Hall; (3;1M); CP/M assembly language programming and technical information; (Granada Hills) The MOG-UR'S HBBS ................................... (818) 366-1238 Tom Tcimpidis; (34B;19M); 11 different boards, varied interests. Database use welcome to all systems, operating systems and users; (San Fernando valley, LA area) Pasadena RBBS ....................................... (818) 577-9947 Rich Berg; (1-73BV;3.98M); Note: system power off until modem carrier lock. (does not recognize CR's for 15 secs after lock, while system auto boots), Heath H89; (LA area) Woolf Software BBS .................................. (818) 704-1871 Jeff Woolf; (3;600K); soon 1200 baud & 2M; "MOVE-IT" as well as XMODEM protocol supported; Communications; all welcome. Northridge RCPM-XBBS ................................ (818) 708-3284 Robert Crump; (3?;???); La Canada RCPM/RBBS ................................. (818) 790-3014 Chris Hays; (no answer if in use; allow 4 rings for autoboot); (3B;1.3M); electronics, communications software; (LA area) Altadena RCPM/RBBS .................................. (818) 798-9673 Mark Heriot; (3B;360K); No answer if in use; Osborne 1, TRS-80 PC-2, general CP/M prgms, typesetting interfacing; will help with tech questions about Osborne (ROM or BIOS or actual hardware); (Altadena) Pasadena CBBS ....................................... (818) 799-1632 Dick Mead; (1-7;8.3M); (LA area); (down??) Xanadu RCP/M ........................................ (818) 906-1636 Rick Gaitley; (3B;3.1M); Heathkit H/89 system Litearia RBBS ....................................... (818) 956-6164 Abel Iwaz; (3B;400K); Forum for exchange of ideas on literary topics; Support for Kaypro II owners. ========= SOUTHWEST [Arizona] Valley Technical RCPM ............................... (602) 938-7480 Ed Richardson; (3B;40M); need more info; (Phoenix) [Colorado] The World Peace RCP/M ............................... (303) 320-4822 Alfred K. Carr, Archbishop; (3B;16M); sponsored by the Church of World Peace, Inc.; newest public domain software; MAILBOX message system; legal tax planning; church related info for member churches of the World Peace Convention and church members; no religious affiliation required to use this system; (Denver) Boulder, Colorado RCPM .............................. (303) 499-9169 Jack Riley; daily 12P-6A, hard disk up 7P-12A thursday; Keyword-based bulletin board, high-level language software, graphics, numerical analysis & UNIX info,MX-80 graphics, typesetting; (1-7BV;32M) Colorado Springs RCP/M .............................. (303) 591-8756 Bruce McDaniels; (3B;?). 1pm-11pm, Monday-Saturday only. Colorado Springs Computer Communications Service .... (303) 598-4500 $ Thom Foulks; (3B;2.1M). Members of Colorado Spring User Group only. Online application available. Pinecliffe RMP/M RBBS ............................... (303) 642-3034 Craig Baker; Irregular hrs, 24 hrs. soon, (try anytime);  (3B;16M); Login by using "LOGIN" program. On-line databases on such topics as nuclear power, Retrieval system, MP/M-II mods, interest in active discussions; (Pinecliffe) Denver CUG-NODE ..................................... (303) 781-4937 ? Sysop; (1-7;1M) Lakewood RCPM/RBBS .................................. (303) 985-1108 $ Gary Shaffstall; (3B;38.4M); (300 baud restricted-send SASE to P.O. Box 28146, Sta 16, Lakewood, CO 80228 with up to 6 char password); (Denver area) [Nevada] Reno International (RIBBS) RCP/M.................... (702) 826-2337 Ron Stevenson & Mike Mcbride; (13;2.4M); EXO noBUS-8 system; Soon (13B;15M); Special sections and nights for different computers; Hotels, Entertainment and Restaurant data base for Reno, Carson and S. Lake Tahoe w/toll free #s for reservations; say ENT; (Reno) [New Mexico] Four Corners RCP/M .................................. (505) 327-2344 Jack Cribbs (?;?)...new system,more info needed. Mesilla Valley RCP/M ................................ (505) 522-8856 Phil Cary; (34B;10M); special interest in CB80; (Las Cruces) [Texas] Dallas RCP/M CBBS ................................... (214) 931-8274 $ Dave Crane; (3B;28M); public domain software and information exchange, CP/M-80 and 86, PC-DOS, Forth, dBase. Special interest in science and engineering. Annual $30 fee, limited membership. Ft Worth RCPM/Metroplex KUG BBS ..................... (817) 467-5110 Gary Spencer; (3B;10M); 7P-7A M-F, 24 hrs on weekends; SIG/M- CPMUG releases; now on Kaypro 10; a Kaypro-Network system; running K-NET 84 (tm) RCPM-RBBS System software; Users must be verified before accessing; (Arlington) Computers Unlimited RBBS/RCPM ....................... (817) 547-8890 Jack Kinn; (3B;20M); Full XMODEM; (Copperas Cove TX) SENECA (El Paso RCP/M) .............................. (915) 598-1668 $ Sigi Kluger; (3B;12M); Interest in N* and latest releases; $25 per year membership fee. ========= NORTHWEST [Alaska] Anchorage Remote CP/M (ARCPM) ....................... (907) 349-7996 $ Rodger Ellis; (3B;15M); By paid subscription, $6.50/month. Limited to 100 members. Several memberships still vacant. Call (907) 349-6882 voice. Or write ARCPM, 740 W. 71st Ave., Anchorage, AK 99502 for membership application. [Alberta, Canada] Edmonton RCPM ....................................... (403) 454-6093 Dave McCrady; (no answer when in use); (3BV;3.8M) Stadium RCP/M ....................................... (403) 471-8080 $ Gary McCallum; (3;20M); (Edmonton) Meadowlark RCP/M .................................... (403) 484-5981 Jim Lopushinski; (3B;3M); Origination point for NSQueeze, LBRDISK, and other machine language programs. [British Columbia, Canada] Frog Hollow CBBS/RCPM ............................... (604) 937-0906 David Bowerman; (1-7;1.2M); (Vancouver) [Montana] Helena Valley RBBS/RCPM ............................. (406) 443-2768 Marion Thompson; (no answer when in use); (3B;5M); Photo- typesetting service, special interest in S-100; (Helena) [Oregon] Chuck Forsberg's RCPM ............................... (503) 621-3193 Chuck Forsberg; (3BV;??K) Beaverton, Oregon RCPM .............................. (503) 642-7028 Dave Morgan; (3B;26M); Special Interest in Computer Art and newest releases of software. [Washington] Olympia RCPM ........................................ (206) 357-7400 Tim Linehan; (3B;18M); Interest in 'C', database pgms, & string manipulation; Most CUG software on-line. Yelm RBBS & CP/M .................................... (206) 458-3086 Dave Stanhope; (3B;80M); S-100 UNIX system; CP/M programs; interest in 'C'; Running BBSC for UNIX-C; (Olympia) Northwest Computer Society RCP/M .................... (206) 621-8665 George Blat, Wayne Campeau, Jim Mitchell; (3B;34M); SMUG RCPM/RBBS ...................................... (509) 255-6324 Bruce Jorgens, David Schmidt; (3B;26.5M); Spokane Microcomputer Users' Group; Interest: Kaypro, Osborne, 'C', dBase II and CP/M 86 software, also ZCPR2; (Liberty Lake) ====== HAWAII Kauai RCP/M RBBS .................................... (808) 245-2080 Gene Clayton; (no answer if in use); (3B;800K); (Lihue) Hawaiian Shell RCP/M ................................ (808) 422-8406 George Sofaly; (3B;800K); Network system; interests in Kaypro; RCP/M for Hawaii Portable Computer Users Assocn. (Honolulu) ========== COMPUSERVE CP-MIG ................. on MicroNet, type 'R CP-MIG' or 'GO PCS-47' $ Dave Kozinn, Tom Jorgenson, Charlie Strom arranging to have MN carry much new CPMUG and SIG/M software, plus a newsletter and a CP/M-oriented CBBS. COMPUSERVE users have full access to CP-MIG. (Fees required to join CompuServe.) ====== NOTES: 1. Call-back systems are those where a computer and real people share the same telephone line. To contact the people, just dial & let the phone ring until you get an answer. To contact the computer: (1) dial, (2) let the phone ring once, (3) hang up just before the 2nd ring, & (4) re-dial. 2. Note that the 212A/Vadic 1200 baud modems may not be compatable with yours. Some of the above systems are using Vadic 3451 Triple modems, compatable with both Bell and Vadic Standard. Sign on the first time at 300 baud to determine the system capabilities. Note also that PMMI's can sometimes be used over 300 baud with 1200 baud systems. PMMI baud rates are: 110, 300, 450, 600, 710 and are indicated above as "1-7". 3. Use of an alternative long-distance service should be considered when planning to modem over long programs. Charges on ITT Longer Distance, MCI, Sprint and Western Union are 50-60% of AT & T's regular long distance rates. These services and many others are available in many areas of the country and many of them can now call anywhere in the U.S. and will work fine at 300 and 1200 baud most of the time... (Note, however, that you might not be able to dial a system in Alaska, Hawaii or Canada depending on the service you get and sometimes you may have trouble connecting at 1200 baud.) 4. Total on-line disk capacity is shown for reference. Check the system documentation for exact details when logging on. 5. All times listed are local time, please observe operating hours for systems with scheduled availability. ogging on. 5. All times listed are local time, please observe operating hours _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # UPDATE: PATMDM v1.04 04/08/84 CHANGES: 04/08 Added code to allow changing of modem ports and related areas (hex code to be inserted must be known) 11/19 Added option to enable/disable PMMI and Smartmodem. 10/22 Renamed PATMDM with minor revision number (now PATMDM02). Changed to allow installation of MDM711 and higher with minimum initial effort - program now asks for MDM7 version number to be entered; will no longer assume current MDM7xx. El Paso, TX, 04/08/84 This is version 1.04 of PATMDM, an MDM7xx patch program. What can it do? PATMDM is able to change almost all options in the MDM option area. It was not designed to replace any of the patch files - if you are using any one of the multitude of non-PMMI modems, you MAY have to patch your I/O routines in manually. PATMDM is, however, able to change all general-purpose options, such as tone/pulse dialing for Smartmodem, terminal modem control characters, PMMI pulse rate and PMMI ports (!) just to name a few. A future version of PATMDM will allow you to install some of the most common non-PMMI I/O environments. Those features are not to be expected for a few weeks, tho. Operation: Operation of PATMDM is very straightforward and should not pose any problems to anyone capable of bringing up MDM7xx. After typing it's name, the program will clear the screen, identify itself and ask for the full file name to be used for patching (eg B:MDM730.COM). If the file is not found, you have an option to either switch disks using the same file name or you can change the file name. Next, the patch area is read into RAM and the option menu is displayed. Simply enter the option number you wish to examine or modify, and PATMDM will display it's contents and ask whether you want to change it. Some options are toggles and will be set to their inverse state if you answer positively, other options require a second input. Single-letter responses never need a , whereas numeric values do. Three special functions are included in the menu: 0 to quit and either make the changes permanent or discard all changes, 1 to change the PMMI modem ports and 42 to allow modification of I/O routines. Function 0 allows you to save the changes, overwriting the patch area of the MDM file you selected previously. It also allows you to return to the option menu, or to abort. Quit/modify will ask for verification, but abort will not, so be careful! Function 1 displays the current PMMI port in hex and allows you to change it. This function would ordinarily only be needed in computers where an address conflict makes a change necessary (North Star HORIZON for example). Function 42 allows you to make changes in the port configuration provided you know the hex code to be inserted there. A sub-menu allows you to select the area to be changed. Operation of PATMDM is best learned by using it. Be sure to keep a backup copy of your MDM7 file! Please send any bug reports, complaints, wishes to: S. Kluger c/o El Paso RCPM (a private system 915-598-1668) or c/o CTA RCPM 915-544-1432 or CP-MIG 72766,1544 (EMAIL will NOT be answered) l Pasomes you may have trouble connecting at 1200 baud.) 4. Total on-line disk capacity is shown for reference. Check the system documentation for exact details when logging on. 5. All times listed are local time, please observe operating hours for systems with scheduled availability. ogging on. 5. All times listed are local time, please observe operating hours _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # TOPIC : M7LIB program for changing MDM7xx phone numbers FROM : IRV HOFF W6FFC DATE : 17 FEB 84 M7LIB permits the user to quickly and very easily change the telephone numbers in the MDM7xx phone library. It automatically finds the phone library in MDM7xx.COM, lists the library and then (after asking it if looks normal) displays a command line: CTL-C abort, hange, elete,

rint lib, ead, rite : To change or alter any line (such as the "F" line), you would then type: CTL-C abort, hange, elete,

rint lib, ead, rite : CF The "C" would select "Change" and the "F" selects the line you wish to change. This same technique would be used to delete any line that is no longer needed. Using "DH" for example leaves the "D=" but clears the rest of the line. Whenever you change any line, you must go completely to the last column prior to the < at which time the new line is then added automatically and the new listing displayed. This sets a flag so if you hit CTL-C to abort it will ask if you want to update the file or abort with no changes. You can also use "W" to write the file to disk when finished with any changes. USING THE PROGRAM: ----------------- This program works directly with the MDM7xx.COM file. It does not use or need the .ASM file at all. EXAMPLES: A>M7LIB MDM7.COM (1) A>M7LIB B:MDM7.COM (2) B>A:M7LIB MDM7.COM (3) A>M7LIB MDM7.COM ABC.COM (4) B>A:M7LIB B:MDM7.COM C:ABC.COM (5) 1) works only with the original file, altering it 2) the file can be on any selected disk 3) similar to (2) but M7LIB.COM is on another disk 4) if a 2nd file is named, it receives the changes 5) any of the files can be on any selected disk NOTE: Using M7LIB.COM to alter the telephone number library is surprisingly simple and fast. It does not however allow setting or resetting codes for SPRINT, MCI, etc. To do that you would need to use M7NM-x.ASM. This program is a highly modified version of CHGLIB written Jan 82 version 1.0 by Tony Ribeiro for MODEM7. - Irv Hoff s program is a highly modified version of CHGLIB system documentation for exact details when logging on. 5. All times listed are local time, please observe operating hours for systems with scheduled availability. ogging on. 5. All times listed are local time, please observe operating hours _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) #  Hello! Anybody know what day it is? I've been hacking on the modem program for the last several days, pausing only to sleep and eat. Thought I'd fill you in on what I've got to date. 1) I think I mentioned this, but MEX now does Compuserve protocol transfers. I structured it internally such that the transfer status information looks much more like a normal MODEM7 transfer (e.g., "Receiving #107") rather than retain the BUFEXEC silliness of printing all those plus signs. Besides which, the [GLOBAL] VIEW option, when on, allows you to see the characters as they come in. 2) The ID command allows you to change not only the prompt, but also the ID that is optionally printed in error messages. The prompt is made up of the ID string plus drive-user->->. The default ID string is "[MEX] ", so the initial prompt looks like [MEX] B3>> The ID syntax is: ID so if you do ID "[MEX-AT-WORK]" the prompt will look like [MEX-AT-WORK] B3>> (The argument to ID can contain imbedded control codes, so if for some reason you want multiple-line ID's, or cursor-addressed prompts, they'll be available). The nice thing about this is that most of the error messages have an indirect that prints the ID with the error message, so you won't get confused about which end printed what error. This function can be turned on and off with the STAT command (when it gets finished, see #5). Also, the overlay can change the default ID by overlaying an address. It can also set a boolean that prevents the ID command from working. 3) Terminal mode interface is completely rewritten. There is no longer a local-command-immediate; you must always type the escape character (re-definable), followed by the command name (not con- trollified). E.g., to turn on the capture buffer, you'd do escape-S, while escape-U turns it off. 4) Keystrings are alive and well (just today). Works like this:  you use the KEY command to define a keystring, KEY A="Hi. This is key A" KEY &="MODEM SBINQ " The defined key then becomes an added terminal-mode command function that sends its string to the modem (to send the first example string, you'd do escape-A). You can define a key for every key on the keyboard. If you re- define a key, the old one goes away. To erase a key, you'd do this: KEY A= (no argument). To save all your current keys into a file, you use the KSAVE command KSAVE DDNLOGIN.KEY and to re-load, the KLOAD command KLOAD RBBS.KEY Keys may contain imbedded control characters, e.g., KEY A="LOGIN RFOWLER^MSYSTAT^MBABYL" and may be up to 255 characters long. Total keyspace is defined in a word-location, and may be arbitrarily long (default is cur- rently set to 400 characters, allocated out of the free memory area -- ie, not in the COM file). There are no "built-in" keys, but I plan to add a function where MEX, upon startup, will read in a default READ file (no longer USE, READ seemed more logical) called INI.MEX, which may contain KLOAD commands. Thus, MEX will come up and read its key file (and any other things that might want to go in INI.MEX), without the user having to take any specific action. 5) I'm working on the STAT command -- I ripped out all of the toggle commands (I don't like toggle commands; they don't seem positive enuf to me). The stat command will serve a dual function: dis- playing some piece of variable information, and changing that in- formation (if it's allowed to be changed). E.g., STAT BAKFIL will tell whether auto-BAK file creation is on, while STAT BAKFIL ON STAT BAKFIL OFF allows you to change that state. Note that STAT BUFFER is a read-only, since you can't change the amount of free buffer space. I'm still writing STAT; the program can't go into beta-test without it. 6) I'm also working on the HELP command. I ripped out the built-in menu stuff (I did a lot of ripping) to get back space; the new HELP function will work like this: if you type HELP without and arguments, the prog- ram will print out a list of all the keywords that it knows, and tell you that you can do HELP . When it sees HELP with an argument, it will open HELP.MEX, a random-access file, and seek the record con- taining the information on the requested keyword, and print it out via the TYPE command. This idea is taken from Frank Wancho's MTN. ------ Of these, #1 - #4 are complete and #5 and #6 are both still in the design stages. I hope to have them done sometime this week, along with the INI.MEX initialization function. This is the minimum I feel the program needs before it can go back into beta-test. In addition, I have a few more things to add, but not before beta-test (e.g, PLOAD, PSAVE, and ENTER for phone-library management, an append- ode for memory-saved files, parameter-passing to READ files, teach the TYPE program about SQ'ed files, and maybe LBR file support), and perhaps not before the first release. My edit/compile/load turn-around time is presently about 20 minutes...with debug time, I'm lucky if I can whip through 2 lousy revs in an hour. If only I had a 1mb ramdisk... ------ Side note: I had planned to modify the parser to allow command-completion (where if you typed the keyword to the length of its uniqueness, the system would recognize it). Problem is, this allows a lot of ambiguouity insofar as the single-character commands are concerned (eg, STAT BAKFIL, abbreviated, might be ST BAKFIL, which is confused with a file send. Even worse is S BAKFIL). The solution might be to jettison the single-character commands (which might be justified, with the new GLOBAL command, which will set the secondary options until the next GLOBAL). Then add SEND, RECEIVE, and TERM commands (and perhaps ECHO). Does anybody object to the removal of single-character commands? Will the program suffer with the user community with this loss of familiarity? If so, I g written Jan 82 version 1.0 by Tony Ribeiro for MODEM7. - Irv Hoff s program is a highly modified version of CHGLIB system documentation for exact details when logging on. 5. All times listed are local time, please observe operating hours for systems with scheduled availability. ogging on. 5. All times listed are local time, please observe operating hours _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # TOPIC : RUB TO BACKSPACE FROM : IRV HOFF W6FFC DATE : 22 MAR 84 Several people were having trouble getting normal backspace with their rub (delete) key. MDM730 offers the option of changing rub to backspace. 1) Can preset the default option so rub comes up as backspace (or preset the default to it comes up as normal rub) 2) At any time use the menu option to change it temporarily to the opposite configuration. Some mainframes will not accept a normal backspace and require a rub (delete) character to provide a type of "forward backspace". If you need this feature and your terminal does not have a rub (delete) key, or if inconvenient to use, change these two bytes on MDM730.COM: 1629 FE 7F CPI RUB .... 1635 06 08 MVI A,BCKSP change: 162A 7F to 08 RUB to BCKSP 1636 08 to 7F BCKSP to RUB (The menu will still indicate you are changing rub to backspace, ignore this statment and realize just the opposite is happening with this change.) - Irv Hoff ing rub to backspace, ignore this statment and realize just the oppo written Jan 82 version 1.0 by Tony Ribeiro for MODEM7. - Irv Hoff s program is a highly modified version of CHGLIB system documentation for exact details when logging on. 5. All times listed are local time, please observe operating hours for systems with scheduled availability. ogging on. 5. All times listed are local time, please observe operating hours _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) #  MDM730 (NOTES ON HOW TO USE) Copyright 1983,1984 Irvin M. Hoff W6FFC 22 Mar 1984 NOTE: MDM730 SUPPORTS AUTO-DIALING AND AUTOMATIC CONTINUOUS REDIALING FOR THE FOLLOWING MODEMS: SIGNALMAN ANCHOR MARK XII HAYES SMARTMODEM 300 OR 1200 MODEMS U. S. ROBOTICS 300/1200 MODEM PMMI 103 S-100 PLUG-IN MODEM IT CAN STILL BE EASILY USED WITH OTHER EXTERNAL MODEMS ITH MANUAL DIALING SUCH AS THE BELL 212A, RACAL-VADIC, ETC. IT SUPPORTS UP TO TWO LONG-DISTANCE DIALING SYSTEMS (SUCH AS 'MCI', 'SPRINT', 'TYMNET', ETC. FOR TOUCH-TONE DIALING SYSTEMS. INTRODUCTION: ------------ MDM730 enables a computer to communicate with another computer. This is normally done by using standard telephone lines but with special audio tones sending serial data. Two common speeds are used, depending on the facilities available -- 300 Baud or 1200 Baud. A "modem" is used which provides these audio tones. This is an acronym for "modulator and demodulator". The one section (modulator) provides the audio tones for sending over the telephone line and the other section (demodulator) then converts those audio tones back to digital pulses the computer uses to receive the incoming data. The modem itself is a hardware utility, usually costing around $75 to $200 for a typical 300 Baud device and from $250 to $800 for a system offering 1200 Baud as well as 300 Baud. Some of these (such as the PMMI S-100 modem board) plug directly into the computer itself, while others are totally independent of the computer and use an interconnect cable (usually a RS-232 type) to control the external modem. A Bell 212A is an excellent example of this type modem. Other examples would include the Racal-Vadic, Hayes Smartmodem, U. S. Robotics, Signalman Anchor, etc. The program discussed in this guide allows each computer involved to directly control its own modem, converting DC pulses into audio tones which are sent to (or received from) the telephone line. (The standard 1200 baud transmissions use "DPSK" (dibit phase shift keying) instead of "AFSK" (audio frequency shift keying). For short distances, no modems are required as the computer can provide the necessary digital voltages. This discussion is centered around systems intended for use over distances ranging from several miles to literally around the world. FEATURES: -------- A program to communicate with another computer can range from very simple to very complex. MDM730 is one of the more complex such programs available today. It started in 1977 as a relatively simple program. It was called MODEM at that time. It was intended to be used primarily as a means of exchanging programs with other people in other cities. Since that time a number of other (very useful) features have been added, in addition to improved methods of program transfer. A list of some of the features offered by this particular program include: 1) Ability to talk with another computer via keyboard at each end. (Called the "terminal mode".) 2) Ability to operate a remote mainframe computer such as TYM-SHAR, or special data bank systems now commonplace. This includes "bulletin board" systems for receiving, sending or just read- ing messges or other types of information. 3) Ability to upload (send) or download (receive) programs from other computers whether TYM-SHAR, data banks, remote hobby systems or just another individual in another location. 4) Ability to copy incoming information on a printer. If the print- er is too slow to copy the data directly, the extra characters back into a large storage buffer until they can be printed. 5) Ability to copy incoming data into memory for automatic transfer to a disk file. 6) Accomodates any computer clock speed up to 25.5 MHz. in 0.1 Mhz. increments for uniform results. (The clock speed is actually of modest interest, it is only used for setting timing loops.) 7) Advanced type of error detection (CRC or Cyclic Redundancy Check) using automatically generated high-speed lookup tables. 8) Ability to send any of 11 different pre-programmed function keys. (These keys are very easy to reset, using a special external program.) 9) Automatic disconnect from the telephone line when using CTL-N, or "X" as an option during file transfer. Two other disconnect commands with the PMMI modem. 10) Additional features of special interest to those using the PMMI 103 S-100 plug-in modem, the U. S. Robotics 300/1200, the Anchor Signalman Mark XII, the Hayes Smartmodem 300 or 1200 or other "Hayes-compatible" modems. Those features basically include automatic dialing and redialing (if requested) until the other computer finally answers. a) Automatic selection of a particular phone number from a library of names and numbers. (These phone numbers can be very easily changed by using a special external program.) b) Automatic dialing for alternate long-distance systems (where auto-dialing touch-tone modems are used). c) Entry of a hand-typed number. Although it might be as simple to manually dial the number as hand-type it, it can then be automatically redialed indefinitely. USING THE PROGRAM THE FIRST TIME: -------------------------------- For now, we shall assume the program is ready to use on your equip- ment. (Normally the user must make some modest changes to the program before it can be used. This includes changing the port numbers and some other personal options. These will be covered later in the section that describes how to adapt it to your equipment.) When the program is brought up is shows this display (if using the PMMI modem): MDM730 - (type M for Menu) Version for PMMI S-100 modem starting at port: C0H B>>COMMAND: x The cursor stops at point "x:" waiting for some sort of command. Typing a "M" followed immediately by a RETURN, shows the first page of a 4-page help guide. If you do not have a PMMI modem, you would have seen this (or a customized heading for your particular equipment): MDM730 - (type M for Menu) Version for Non-Pmmi modem B>> COMMAND: In this case only a 3-page help guide is used, since the 4th page is used to assist those with the PMMI modem. It tells them a little about changing from originate to answer mode, how to change Baud rates, how to disconnect, etc. Several commands are similar to those already used for CP/M, such as 'ERA', 'DIR' and the ability to change disk drives and user areas. This adds tremendous flexibility while remaining in the modem command mode. To change disk drives, just say: B>>COMMAND: A: and you are in the same user area on the A: drive. You can also say: A>>COMMAND: A: 12 to change user areas. When finished (using this example), say: A12>>COMMAND: CPM and you will go back to CP/M with the original driver and user area. OPTIONS: ------- There are 6 primary options and 13 secondary options that may be typed on the command line. In additon there are over 35 commands ranging from single character to three characters that can be used (such as DIR, ERA, LOG, etc.) Those are listed on the menu. (The exact number varies depending on whether you have the PMMI modem, etc.) Primary Options: E, L, M, R, S, T E = Echo mode (special type of full duplex) L = Local modem (no remote echo, half duplex) M = Menu display showing features that are available R = Receive a file from remote facility S = Send a file to a remote facility T = Terminal mode (full duplex, echo provived remotely) Secondary Options: A, B, D, J, O, Q, R, S, V, X, 0, 1 A = Answer mode (used only by PMMI modems) B = Batch mode -- allows automatic multiple file transfer (This is normally only used from modem-to-modem as no RCP/M system supports batch mode file transfers.) D = Disconnect when done, stay in MDM730 J = Command mode when finished with a file transfer O = Originate mode (used only by PMMI modems) Q = Quiet mode, special purpose feature rarely used except if operating through a "BYE" program. R = Receive data shown on CRT during file transfer S = Send data shown on CRT during file transfer V = Visual inspection of an ASCII file being transferred. Not often used as most ASCII files are now "squeezed" for minimum transfer time and disk space. X = Exit to CP/M when finished, disconnect from phone line 0 = Odd parity (PMMI modem) 1 = Even parity (PMMI modem) Although you can get the following information from the help guide in MDM730 itself, showing it here will allow us to discuss the various features in somewhat better detail. (*) INDICATES PMMI, ANCHOR, HAYES AND US ROBOTICS ALL APPLY. - - - - - - - - - - - - - - - - - - THE HELP GUIDE, PAGE 1: ---------------------- Single Letter Commands ? - Display current settings ^ - Function key intercept character, then (0-9) M - Display the menu E - Terminal mode with echo L - Terminal mode with local echo T - Terminal mode For copying text to disk use T (or E or L) FILENAME.TYP Start or Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol COMMAND: R (or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g., *.*) D - Disconnect when done, return to command mode Q - Quiet mode (no messages to console) V - View or bytes on console X - When done, disconnect, go to CP/M The single letter commands may also be used on the command line when the program is initially executed. Hit any KEY to CONTINUE - - - - - - - - - - - - - - - - - - DISCUSSION OF HELP GUIDE PAGE 1: ------------------------------- There are basically three types of commands that may be used with this program: 1) Single-letter commands shown on page one. 2) Three-letter commands shown on page 2, and 3) Control- commands shown on page 3. Going down the list: ? - shows current parameters. As these are closely tied in with some of the other options, we shall show a typical example later in this discussion. ^ - shows the function key intercept character. This may be easily changed using an external program. (You may prefer 'escape' or some seldom used control-character.) NOTE: typing this character while in the command mode will display all the programmable function key definitions with the exception of the log-on string which uses CTL-L. M - shows the menu a page at a time. You may abort after any page is shown with a control-C. E - terminal mode with echo. When talking with another terminal also also using MDM730 (or a comparable program), one of you must send an "echo-back" so you can both see what the other person is typing. This is needed for full-duplex operation. Usually the person originating the call will type "E" instead of "T". However either may do this. If "both" use the echo mode, the program usually starts typing a string of feedback characters since both computers are re-sending the same character over and over. You can stop this by just returning to command mode (type control-E) and then retyping "T" rather than "E". L - terminal mode with local echo. Shows what you are typing but does not send an echo of the other person's typing back to him. Can be used at both ends, in place of one person using "E". Both "E" and "L" are useful at times for some types of modems that do not use full-duplex, or for some main frame units that run half-duplex. The combination of "T", "E" and "L" gives an excellent choice to use on various systems. Normally the "T" mode is sufficient except when talking with another person and then the "E" mode at one end or "L" mode at both ends will provide normal results. If the remote system does not supply a LF after a CR, you can get that from the 'TLF' command. T - puts the program directly into "terminal mode", allowing it to send from the keyboard to the other computer, and to copy any- thing coming from the other computer with the exception of file transfers (use "R" to receive those). R - used only for receiving files from the other computer. These are usually sent in binary form with either checksum verification or more commonly, CRC (Cyclic Redundancy Checking). If ready to receive another file, you have several choices, depending on the program used by the other computer. After notifying him you are ready (or will be very shortly), you can type: B>>COMMAND: R HELLO.DOC  and when he starts to send, you will receive the program which then goes directly to the disk. You could also have said: B>>COMMAND: RB This is called the "Batch mode" and is an extremely useful way to receive programs automatically, from another computer using a similar program. He will use the batch mode for sending the programs and that automatically provides the file names at the receiving end. In this manner, large numbers of programs can be transferred completely automatically, including full disks. (Assuming you care to pay the toll calls for the time it will take!) NOTE: The ideal way to receive batch mode would be: B>>COMMAND: RB since you may not know in advance how many programs he will be sending. NOTE: While receiving a file, any errors will be shown on the console CRT, indicating that portion of the program is being repeated. If the file finishes transferring normally, it will have been received error-free. Those error notices are merely to let the user know a momentary problem caused a resend. The error messages indicate phone line quality. S - used only to end programs. Similar to "R" but sends instead of receives. If the other system is ready to receive, you could then type: B>>COMMAND: S HELLO.DOC It will tell you how many records are involved and how many minutes and seconds it will take to send the program. If the other system is ready to receive, it starts the transfer, showing how many records have been sent. If any errors occur during transmission, it shows what they are and counts them. It will resend any records not correctly received at the other computer. If too many consecutive errors occur (normally set at 10), the transfer is terminated. The 'batch mode' may also be used for sending: B>>COMMAND: SB HELLO.* (sending batch mode)  will send all files starting with HELLO, or can send just one file, or can send several non-related files in this manner: B>>COMMAND: SB HELLO.DOC XDIR.COM TERM.* etc. Be sure to put a space between the various files. You can include the 'X' option: B>>COMMAND: SBX HELLO.* MDM730.LBR MDM730.AQM When the file transfer is completed it disconnects from the phone line and reverts to CP/M. This allows you to be absent when the file is finished, offering an advantage when sending lengthy files. - - - - - - - - - - - - - - - - - - THE HELP GUIDE, PAGE 2: ---------------------- Three Letter Commands CPM - Exit from this program to CP/M DIR - List directory and space free (may specify drive) ERA - Erase file (may specify drive) LOG - Change default drive/user no. (specify drive/user) and reset disks. e.g. LOG A0: or LOG B: (user # unchanged) SPD - Set speed of file output in terminal mode TIM - Select Baud rate for "time-to-send" message TCC - Toggle CRC/Checksum mode on receive TLC - Toggle local command immediate or after CTL- TLF - Toggle LF after CR in "L" or "T" mode for a disk file TRB - Toggle rubout to backspace conversion TXO - Toggle XOFF testing in terminal mode file output NUM - List remote systems SET - Set modem baud rate BYE - Disconnect, then return to CP/M CAL - Dial number DSC - Disconnect from the phone line The following are terminal text buffer commands: DEL - Delete memory buffer and file WRT - Write memory buffer to disk file Hit any KEY to CONTINUE - - - - - - - - - - - - - - - - - - DISCUSSION OF HELP GUIDE, PAGE 2: -------------------------------- CPM - This returns to normal CP/M use, abandoning MDM730. It does not do a warm reboot unless selected on your overlay, saving time. CAUTION: It does not disconnect the modem from the phone line, which allows intentional return to CP/M temporarily. DIR - Enables the user to see the library of any disk without needing to return to CP/M first. Can be adjusted when installing the program to show 3, 4, or 5 groups depending on the width of your CRT display. Normally set to 5 for 80-column displays. Shows the amount of disk spacing remaining on the logged-in default drive. (You must log in any drive you wish to write on, or to see the correct free disk space remaining.) See the LOG feature below. ERA - Enables the user to erase any files from any disk without the need to return to CP/M first. Wild cards (* and ?) accepted. LOG - When a new disk is inserted, you can see the directory and read files from it but cannot write to it without getting a "BDOS ERR". This command allows you to log in a new disk so you can immediately write on it without first returning to CP/M for a warm boot. You can select drive and user number. (This also enables DIR to show the correct free disk space remaining.) You can say: LOG for same drive, user area, new disk LOG A LOG A: LOG A14 (user areas are 0-15) LOG A11: SPD - Sets the delay between characters and/or delay between lines in the "T" mode when using control-T to upload a pre-typed file. Since most bulletin boards and TYM-SHAR systems normally use line editors that require a delay after they have received a line, you can add delay between characters (in increments of 10 ms.) and/or enter delay between lines (in increments of 100 ms.). This is preset for most systems at 50 and 500 ms. They can be changed at any time. Current values can be checked by using the " ? " command. TIM - This option lets you set the file transfer time from 110 Baud to 9600 Baud. You can preset it (when installing the program) to the value normally used, but at times it is nice to be able to conveniently change the time shown to a different rate. Some initialization routines (discussed in the install section) can make this change automatically. This command does not show if using the PMMI* board as the speed is automatically changed to agree with the current Baud rate selection. It also does not show if the custom overlay uses the SET command to choose var- ious Baud rates as the transfer time is changed automatically. TCC - Most modem programs originally used simple checksum verification of received sectors. Most now use Cyclic Redundancy Checking which finds certain transmission errors the simple checksum system might overlook. This toggle allows the user to select checksum for those systems known to not offer CRC. When set normally to CRC, the program automatically switches to check- sum after trying several times to use CRC. TLC - Nearly all computers use "control-characters" to do various tasks such as move the cursor around, clear the screen, reboot the system, etc. You might want to send a control-E character to the local computer and not have it go to the remote system at the same time. Say a moment later you would like to send a control-E only to the remote computer. You would do this: control-E (goes to local computer only) control-^ control-E (goes to the remote computer only) You can reverse the TLC toggle causing this response: control-E (goes to remote computer only) control-^ control-E (goes to the local computer only) All other control-chars. would operate in a similar manner. This gives extra flexibility in using this program for special systems like TYM-SHAR, etc. NOTE: If using control-^ is awkward, you can pick a different character when installing the program initially. TLF - If sending a file while in terminal mode (via CTL-T option) most mainframe computers will not want you to send a line feed. As all editors include the LF after CR, you have the option with this toggle of sending or not sending a line feed. If typing manually in the "T" mode, you can get a line feed with CTL-J. It is automatically included after CR with "L" or "E" modes. TRB - Allows the rubout char. to be changed to backspace if desired. TXO - Used when uploading pre-typed text files to other systems such as TYM-SHAR or bulletin boards, etc. Most of those have line editors that take a moment to move the line you just finished from their edit buffer into memory. The XOFF character halts your system from sending until it is ready for a new line. Used only in the terminal mode. NUM - Not shown if using PMMI*. This shows the non-PMMI* people the phone library numbers which can be used for manual dialing. SET - Not shown if using PMMI, or if SETUPR is set to "NO" (indicating no user routine in the overlay for choosing different speeds.) BYE - Disconnects the modem from the phone line, closes any file that may be open and returns to CP/M. CAL - PMMI* command, shows the phone library for auto-dialing. If not using a PMMI*, this will not be shown, instead NUM is shown. It displays the telephone library. (Non-PMMI users will find the NUM display beneficial as it can display useful phone num- bers for manual dialing.) NOTE: Use the phone number overlay to easily change the numbers that are stored. This overlay also accesses up to two alternate long distance dialing systems for the touch- tone auto-dialing modems. You can also use an external program called M7LIB to rapidly change any phone numbers. DSC - Disconnects the modem from the phone line whenever selected. DEL - If copying incoming information into memory, and you decide you do not want to bother saving it to disk after all, this closes (and then deletes) the disk file you had opened. WRT - saves what you have been copying to the disk file already opened for that purpose. When returning from the "T" mode to command mode, a warning is shown that you may lose what has been saved unless you use WRT (write to disk). - - - - - - - - - - - - - - - - - - THE HELP GUIDE, PAGE 3: ---------------------- Local Commands while in Terminal Mode CTL-@ - Send a break tone for 300 ms. CTL-B - Change Baud rate (PMMI only) CTL-E - Exit to command mode CTL-L - Send log-on message CTL-N - Disconnect from the phone line CTL-P - Toggle printer CTL-Y - Start copy into buffer CTL-R - Stop copy into buffer Start & Stop may be toggled as often as desired. A ":" at start of line indicates buffer is copying. XOFF automatically used to stop input when writing full buffer to disk, XON sent to resume. CTL-T - Transfer ASCII file to remote CTL-^ - Send local control character to remote - - - - - - - - - - - - - - - - - - DISCUSSION OF HELP GUIDE, PAGE 3: -------------------------------- CTL-@ - Sends a break character to the other computer. Used in some TYM-SHAR systems, etc. (Used only in PMMI mode) CTL-B - PMMI command, changes the Baud rate from 110-710, in addition changes the file transfer time accordingly. CTL-E - Returns to command modem from "T", "L", "E" modes. CTL-L - Will send the log-on message if TRANLOGON is set YES and a message has been included in the LOGON area. Can use this feature to sign on various bulletin board systems, although that would require an identical password on each. CTL-N - Disconnect the modem from the phone line. (CTL-D had been used for this command, but it was too easy to accidently type CTL-D when expecting to hit CTL-S or CTL-E or CTL-X. You can easily change this to whatever you like in the overlay you use for your equipment.) CTL-P - Toggles the printer on-off. Very useful feature. Similar to normal control-P but in this case if the modem is running faster than normal printer speed, the characters just back into a special buffer while the printer tries to catch up. Most dot matrix printers are considerably faster than most telephone modems, however. Can be toggled at any time you are in the "T", "L" or "E" modes. Often used to copy items from bulletin boards, etc. that are not worth permanently saving on disk. CTL-Y - Used only in terminal mode. If a file was opened prior to going to "T" (terminal) mode, nothing will be saved until control-Y is typed. This places a ";" (semicolon) at the start of each new line, indicating the memory is "hot" and is now copying for saving to a file. You can toggle this off by using control-R. NOTE: To open a file use: COMMAND: T FILENAME.EXT and then CTL-Y and CTL-R will control what is copied to be placed in that file. CTL-R - Stops the copy into memory, shuts off the ";" at start of each line. These two commands (CTL-Y to start, and CTL-R to stop) control what is being saved. When returning to command (via CTL-E), you will then be warned to save the information to disk via the WRT command or it will likely be lost. (You may never use CTL-R although CTL-Y is re- quired to commence saving to memory for the disk file you previously opened.) (These commands -- CTL-P, CTL-Y and CTL-R give MDM730 tremendous versatility. You can copy incoming data either to disk or to printer (or both). My own printer is a 300 Baud Teletype Corporation Model 43, yet it works great when I am using the Bell 212A at 1200 Baud. The printer falls behind, but misses nothing as it eventually catches up with the contents of the large buffer.) - - - - - - - - - - - - - - - - - - THE HELP GUIDE, SPECIAL PMMI PAGE: --------------------------------- Additional Subcommands for PMMI Modems Modem control: A - Answer tone for send or receive O - Originate tone for send or receive Parity options: 1 - Set and check for odd parity 0 - Set and check for even parity Both ends must be capable of these options which are available only in R and S modes. The parity checking will be part of the file transfer protocol. Speed Options: After entering your primary and secondary options, you can set the modem speed by placing a "." after the options followed by the speed e.g., 300, 1200. EXAMPLE: SBOT.600 will set the modem for 600 baud Hit any KEY to CONTINUE - - - - - - - - - - - - - - - - - - DISCUSSION OF HELP GUIDE, SPECIAL PMMI PAGE: ------------------------------------------- When using MDM730 with the PMMI board, you will either dial out or (far less likely) answer some incoming call. Since the unit will be in "originate mode" about 98% of the time, it is set to automatically come up in the originate mode at default speed (300 Baud) whenever a call has been completed. If you want to use answer mode, you need to use the "A" command. If a speed is not included, it will stay at the default speed. Until a connection has been made, there are no tones applied to the line. Originate tones at 300 Baud are automatically added at that time. In addition to telling the PMMI modem if it should use originate or answer tones, you can tell it what Baud rate to use. A typical command (once connection is made to another modem) would be: B>>COMMAND: O.600 This puts the tones on the phone line for originate and at the same time sets the PMMI board for 600 Baud. Another typical response might be: B>>COMMAND: RAB.450 This places the answer tones on the phone line, sets the program for receiving batch mode at 450 Baud. It returns to the terminal mode when the transfer is completed. Other optional PMMI commands seem self-explanatory, such as dis- connect, etc. - - - - - - - - - - - - - - - - - - PMMI, ANCHOR, HAYES AND ROBOTICS AUTO-DIALING AND AUTO-REDIALING: ---------------------------------------------------------------- There are several very useful and versatile features offered for the PMMI, Anchor, Hayes and Robotics users. These include alternate long distance dialing systems. There are several ways to auto-dial. 1) from the command line 2) from the phone number library line In addition you can auto-redial from either of these lines. Once the number has auto-dialed and there is no answer, it will ask you if you want it to continuously auto-redial until it does receive an answer (or you decide to abort). To get the phone library, type CAL on the command line. You then normally just type the alphabetic character at the start of the ap- propriate line. It will show the number being dialed. You can also do this from the main command line if you know in advance what alphabetic character is associated with that particular number:  B>>COMMAND: CAL P This calls up the "P" line in the library and dials that number, then if busy asks if you want it to continue redialing. You can use: B>>COMMAND: CAL 313-749-6569 and it will dial the number specified. You can then do either of these on the library command line, as well. This gives a tremendous versatility. NOTE: To access the alternate long distance dialing systems (up to two are offered), use the phone number overlay and fill in the infor- mation regarding your access number, billing number, etc. It will then show how to enter a special character ahead of each phone number where alternate long distance system is desired. This only works where touch-tone systems are in use. - - - - - - - - - - - - - - - - - - CASCADING COMMANDS: ------------------ Several commands may be used on the same line. Ones normally used are: A, B, D, E, J, L, O, Q, R, S, T, V, X (and Baud rate if PMMI). A typical PMMI selection might be: RABQJ.300 The commands have been listed previously but will be listed here again: A) answer tones for PMMI S-100 modem, puts tones online. B) batch mode (must be used at both ends if used at all) (usually only available modem-to-modem with operators present at each end.) E) echo mode for conversing with a system not offering echo. J) will return you to the command mode after a file transfer. L) local echo shows what you are sending if no remote echo. O) originate tones for PMMI S-100 modem, puts tones online. Q) quiet mode, suppresses messages on local console. R) receive file transfers with CRC or checksum protocol. S) send file transfers, also shows transfer time. T) terminal mode - operates computer at other end like a remote terminal. Also stands for "text mode". When in "T" mode you can copy incoming to printer or to disk, and send pre- typed ASCII text files via CTL-T. V) visual -- lets you see incoming ASCII files while being sent to the disk system. NOTE: The Baud rate is only used for the PMMI S-100 modem. Many of the custom overlays allow use of the SET command to change Baud rate with non-PMMI modems. - - - - - - - - - - - - - - - - - - TYPICAL PARAMETERS SHOWN BY THE "?" COMMAND: ------------------------------------------- B>>COMMAND: ? Mode: CRC Rub is backspace Printer buffer is OFF Modem speed is 300 baud Terminal mode file buffer is inactive Unused portion of buffer is 16384 bytes Use CTL-^ to send local command to remote LF NOT sent after CR in "L" or "T" for a disk file XOFF testing NOT used in terminal mode file output XON NOT automatically tested after CR in terminal mode file output Char. delay (terminal file mode) is: 50 ms. per character Line delay (terminal file mode) is: 500 ms. per character - - - - - - - - - - - - - - - - - - DISCUSSION OF TYPICAL PARMETERS SHOWN BY THE "?" COMMAND: -------------------------------------------------------- By this time, most of these parameters are self-explanatory. They primarily show how the options and toggles have been set. The user can check on any of the major parameters at any time by: 1) Typing control-E to return to command mode and 2) Typing ? to see the list of current parameters. - - - - - - - - - - - - - - - - - - FUNCTION KEYS: ------------- There are 10 function keys which may be easily programmed with an external file called M7FNK.COM in just a few moments. It makes the changes directly to the MDM730.COM file. (There is an additional CTL-L log-on selection that is programmable in your overlay.) To view the contents of the function keys, type 'M' for menu while on the command line and it will show the character currently used for the function key intercept. (It will be '^' unless you select another.) You could then type that character (followed by ) on the command  line and it will display the entire contents of the function keys. - - - - - - - - - - - - - - - - - - CHANGING THE PHONE NUMBER LIBRARY: --------------------------------- The phone numbers in the library may be easily changed using an external file called M7LIB.COM. This permits any of the 36 phone num- bers to be changed in only a few seconds. It works directly on the MDM730.COM file. If extensive changes are to be made, you may prefer to use an overlay file called M7NM-6.ASM. This permits using your editor to make quick and selective changes, or to substitute an entire new library. (You may need to add or remove things like '1-' for long distance dialing in your area.) That file also is used to set the alternate long-distance dialing routines for SPRINT, MCI, TYMNET, etc. - - - - - - - - - - - - - - - - - - RETRY OPTION: ------------ The consecutive error limit has been set to 10. When transferring files from RCPM systems their XMODEM program aborts should this limit be reached. Each overlay has an option previously called ACKNAK. This has bee renamed to RETRY. It should be set NO if working RCPM systems or other computers with a program similar to MDM7. If using large mainframe computers (such as ARPANET), they do get busy at times and will not accept additional information. This may give timeout errors at your end, but not at the mainframe. If RETRY is set YES, after 10 consecutive errors it then asks if you wish to reset the error counter and keep trying. It should take some 100 seconds to get 10 consecutive errors in this situation. - - - - - - - - - - - - - - - - - - INSTALLING THE PROGRAM: ---------------------- Although this is obviously the very first thing that needs to be done, it was saved until last for several reasons. The most important of these was the need to first explain what some of the options will do when selected. By this time the user should have a fairly good idea what options would work best for him. When looking at the beginning of the program where the these are selected, it should now be rather easy to pick the ones that are most useful. There are various ways to change the program to suit a specific user. You are offered several methods. The "easy way" is to get the MDM730.COM file plus the appropriate overlay for your computer. You then edit the overlay (if needed) to suit your local needs, assemble it to get a .HEX file then use the simple instruction and DDT.COM to com- bine the standard MDM730.COM file with your overlay. The front end of each overlay contains all the information in the front of the MDM730 source code itself. (Read the special message that gives the latest information and tells how many sectors to SAVE, the illustration says 66 sectors, but the program has grown since that time.) Generally no changes need to be made in specific overlays unless you have some particular requirement different from others using the same equipment. (Such as the log-on message, for example.) You may also wish to say "YES" to the AUTODIAL question, which might be cur- rently set "NO". The "hard way" would be to get the 158k MDM730.ASM source code and then edit it to suit. This is likely to be quite unsatisfactory for most users as it will not contain the information peculiar to your computer (which is in the individual overlay you select otherwise.) Thus various methods are available, one of which should provide the easiest method for your system. NOTE: Although designed with special emphasis on the auto-dialing and redialing capability of the PMMI, Anchor, Hayes or Robotics, it works quite well on non-PMMI modems. In the author's system a stock Bell 212A Dataphone is used together with a normal serial I/O that can be programmed to easily switch from 300 to 1200 bps. A great variety of other computers and modems can use this same program quite easily. This is likely the most versatile phone modem programs currently available for CP/M users. OUR THANKS TO: ------------- A great number of people have contributed to the growth of this program since 1977. Two people have been particularly helpful to me in developing the MDM700 series modem programs: Keith Petersen (W8SDZ) and Frank Gaude' (ex-K6IBE). Their help and interest have been greatly appreciated. We hope this verstile program will give you hours of enjoyment and fulfill your modem needs. - Irv Hoff W6FFC  We hope this verstile program will give you hours of enjoyment and fulfill your mode : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # !9"13 MDMFNK v1.10 (c) ESKAY 02-19-84 MDM7 installation program for function keys. NOTE: the version of MDM7 must be 24 or higher! Please enter the file name (and optional DU:) of the file to be installed/inspected : >ͷ3#PY  BK a{!2ͣA:<2 w# 7&!~A´#K"#v* You can now change the INTERCEPT CHARACTER (key prefix), any of the ten function keys, or you can exit to CP/M. A - INT CHAR: ~#{ B - FNK 0 : W C - FNK 1 : W D - FNK 2 : W E - FNK 3 : W F - FNK 4 : W G - FNK 5 : W H - FNK 6 : W I - FNK 7 : W J - FNK 8 : W K - FNK 9 : W*$ }2' characters free. Q - abort program S - save and quit YOUR CHOICE? >ͷ~QʮS*ABXLX==G > ͷ_ Keep trailing ? ͨ _Y‡6 #6*~#~# ʵy=“*w#«X~# ¶~#ß ERROR - new string won't fit!X Type the new INTERCEPT CHARACTER > ͨ *wXLa!~# 9ͭO:=26͓î#~ hq͹ W #n # ERROR - key definition table not found - aborting.  ERROR - NUMLIB not found at 0E00H - might not be a valid MDM7 file (MDM724 or higher). Aborting...  ERROR - drive/user spec invalid Ö DISK WRITE ERROR - FILE TRASHED  ERROR - file not found. Please restart.  *** END OF EXECUTION *** *>2%2&$կ@~#:\,ʷ!ڷH~, AuAp<2%#~:ʸ?2&#~:ʸmG~#:ʫ0m mOxGÏx m2&ø~:¿#~,! >?:%G:&O>~.#'*>?#'#> ~, !J=_.:;,<>ɾw 7 $ t>u$ t$ tn$ ʠ$ $ Æ 2  !~#o|g6: ʷ !~ʷ , w#ê !: ~#  {    y yG>GO> ͹  2B . >2B dC  C 0͹ M E yb :B b > ͹ ɯ2B y0͹ > ͹ > ͹ ҹ ʹ ʹ ʹ ʹ ʹ >^͹ @͹ *.  O*.  x2 y2 : _$ : _ $ Y $ X$ $  $ OGa{_H@ Wa HV Wa r# xa ́ H ͊ H͊ |ڪ › }ڪ ~# x› ~+ x° å {ozg 7}o|g }o|g}o}|g}o}o|g |g}o }o|g}o|g}o|g3 #}/o|/gկ2 !"  i * }o|g" h >2 M * : !" | › }  *  " }o|gھ " }oÿ  ! Documentation for M7FNK.COM v1.10 - by Sigi Kluger 02/19/84 NOTE: This program depends on NUMLIB being at 0E00H! ---- --------------------------------------------- M7FNK.COM is a program used to alter the function key assignments for MDM724 and later versions. M7MFNK takes no arguments on the command line. You will be prompted for the full file name to be installed. Drive/user spec is ok. Next, the intercept character, the function key assignments and free memory are displayed. Command options are prefixed with a character (A..K, Q and S). Enter an "A" to change the intercept character. It can be set to almost anything, but should be a rarely used character (such as ^). It can also be a rarely used control character, such as an 'escape' or CTL-A. Enter a "B", "C", etc to change the respective key definition. The key can be as long as free memory allows. After entering the key definition you have a chance to retain or delete the trailing RETURN, and then the key will be inserted into the table, provided it fits. To totally blank a key, enter a null string and answer "N" to the trailing CR question. When you are finished, you can use the "S" comamnd to save the file back to disk. As an alternative, you can also abort without update. NOTE: a ^C aborts to CP/M anywhere except when entering a new INTERCEPT CHARACTER. ve, you can aʹ ʹ ʹ ʹ ʹ >^͹ @͹ *.  O*.  x2 y2 : _$ : _ $ Y $ X$ $  $ OGa{_H@ Wa HV Wa r# xa ́ H ͊ H͊ |ڪ › }ڪ ~# x› ~+ x° å {ozg 7}o|g }o|g}o}|g}o}o|g |g}o }o|g}o|g}o|g3 #}/o|/gկ2 !"  i * }o|g" h >2 M * : !" | › }  *  " }o|gھ " }oÿ  ! MDM7 update information 02/17/84 Sigi Kluger, El Paso TX 02-17-84 Being used to a great non-public modem program with a number of function keys, I decided to add ten function keys to MDM7. Great for things you do most, like DIR *.* $U0AD, or XMODEM S, or you could even save your name in a function key for logon. 1. HOW TO ACCESS (transmit) THE FUNCTION KEYS. You transmit the contents of a function key by typing first the INTERCEPT CHARACTER, then a digit 0..9. The INTERCEPT CHARACTER is an unique char- acter which tells MDM7 that a function key command follows. The INTERCEPT CHARACTER is set to ^ (circumflex). It could as easily be set to CTL-A or 'escape', for example. In the distribution version, the following keys are defined: ^A0 DIR ^A1 DIR *.* $U0AD ^A2 XMODEM S ^A3 XMODEM R ^A4 BYE ^A5 CBBS (Function keys 2 and 3 have no trailing CR). 2. HOW MUCH ROOM? A total of 256 bytes are reserved for the function key definition. Each definition takes up the number of bytes in the string, PLUS 2. Note that you must not enclose any control characters in the definitions (CR is allowed and is optional). 3. HOW TO CHANGE THE FUNCTION KEYS In order to not increase the size of MDM7 considerably, I have written the M7FNK utility. M7FNK.COM is virtually self-explanatory and it is covered by its own short DOC file. (M7FNK.COM v1.10 is current.) 4. WHAT WILL NOT WORK Do not attempt to use DDT to modify the function keys. Especially, do not force any control characters into the definitions. There can only be three non-printing characters in each definition, the start byte, an optional CR at the end, and the end byte. 5. DEFINITION FORMAT This is an example of the definition for function key 1: DB 1,'THIS IS A FUNCTION KEY',CR,0 | | | | | |__stop character | |________________key definition plus CR |________________________________start character Each key definition string starts with the key num ber in binary. The function key processor searches for that number. Those numbers must be unique throughout the key definitions. EMPTY key definitions are en- coded thusly: DB 9,0 ;empty function key #9 st be unique throughout the key definitilso abort without update. NOTE: a ^C aborts to CP/M anywhere except when entering a new INTERCEPT CHARACTER. ve, you can aʹ ʹ ʹ ʹ ʹ >^͹ @͹ *.  O*.  x2 y2 : _$ : _ $ Y $ X$ $  $ OGa{_H@ Wa HV Wa r# xa ́ H ͊ H͊ |ڪ › }ڪ ~# x› ~+ x° å {ozg 7}o|g }o|g}o}|g}o}o|g |g}o }o|g}o|g}o|g3 #}/o|/gկ2 !"  i * }o|g" h >2 M * : !" | › }  *  " }o|gھ " }oÿ  ! \\:j2j\ESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!ppJܴlso abort without update. NOTE: a ^C aborts to CP/M anywhere except when entering a new INTERCEPT CHARACTER. ve, you can aʹ ʹ ʹ ʹ ʹ >^͹ @͹ *.  O*.  x2 y2 : _$ : _ $ Y $ X$ $  $ OGa{_H@ Wa HV Wa r# xa ́ H ͊ H͊ |ڪ › }ڪ ~# x› ~+ x° å {ozg 7}o|g }o|g}o}|g}o}o|g |g}o }o|g}o|g}o|g3 #}/o|/gկ2 !"  i * }o|g" h >2 M * : !" | › }  *  " }o|gھ " }oÿ  !  VOLUME 003 DESCRIPTION: COMMUNICATIONS FILES,NEWSWEEP, DISKNAME, RCPM LIST & COMPUSERVE NUMBER SIZE NAME COMMENTS 003.1 2K -EBMMUG .003 DISK NAME & CONTENTS OF EBMMUG.003 (JUN 7,'84) 003.2 4K @README .003 DESCRIPTION OF FILES ON EBMMUG 003 003.3 2K DISKNAME.COM WRITES 0K FILE FROM NAME ON COMMAND LINE 003.4 2K EBMDIR03.TXT DISK DIRECTORY OF EBMMUG.003 003.5 4K M7FNK .COM MODEM7 FUNCTION KEY MODIFIER 003.6 2K M7FNK .DOC DOC FILE FOR M7FNK 003.7 4K M7FNK .NOT MORE DOC FOR M7FNK 003.8 2K M7LIB .COM MODEM7 PHONE NUMBER LIBRARIAN 003.9 4K M7LIB .DOC DOC FILE FOR M7LIB 003.10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILE FOR NEWSW EEP 003.18 2K NSWP205 .UPD MORE DOCS FOR NEWSWEEP 003.19 8K PAT730 .V5 OPTIONAL MODS TO ASM FILE OF MDM730 003.20 22K PATMD4 .COM OPTIONAL MODS TO COM FILE OF MDM730 003.21 4K PATMD4 .DOC DOC FILE FOR PATMD4 003.22 16K PRTCOL .CIS COMPUSERVE FILE TRANSFER PROTOCOL 003.23 40K RCPM49 .LST BULLETIN BOARDS AS OF 4/84 003.24 56K SMARTE .ASM COMPUSERVE EXEC - NOT MODIFIED FOR PMC 003.25 44K SMEXEC .ASM COMPUSEVER EXEC - NOT MODIFIED FOR PMC 003.26 8K STATUS .MEX STATUS OF MEX MORE DOC FOR M7FNK 003.8 2K M7LIB .COM MODEM7 PHONE NUMBER LIBRARIAN 003.9 4K M7LIB .DOC DOC FILE FOR M7LIB 003.10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILE FOR NEWSW VOLUME 003 DESCRIPTION: COMMUNICATIONS FILES,NEWSWEEP, DISKNAME, RCPM LIST & COMPUSERVE NUMBER SIZE NAME COMMENTS 003.1 2K -EBMMUG .003 DISK NAME & CONTENTS OF EBMMUG.003 (JUN 7,'84) 003.2 4K @README .003 EXPANSIVE DESCRIPTION OF FILES ON EBMMUG 003 003.3 2K DISKNAME.COM WRITES 0K FILE FROM NAME ON COMMAND LINE 003.4 2K EBMDIR03.TXT DISK DIRECTORY OF EBMMUG.003 003.5 4K M7FNK .COM MODEM7 FUNCTION KEY MODIFIER 003.6 2K M7FNK .DOC DOC FILE FOR M7FNK 003.7 4K M7FNK .NOT MORE DOC FOR M7FNK 003.8 2K M7LIB .COM MODEM7 PHONE NUMBER LIBRARIAN 003.9 4K M7LIB .DOC DOC FILE FOR M7LIB 003.10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILE FOR NEWSWEEP 003.18 2K NSWP205 .UPD MORE DOCS FOR NEWSWEEP 003.19 8K PAT730 .V5 OPTIONAL MODS TO ASM FILE OF MDM730 003.20 22K PATMD4 .COM OPTIONAL MODS TO COM FILE OF MDM730 003.21 4K PATMD4 .DOC DOC FILE FOR PATMD4 003.22 16K PRTCOL .CIS COMPUSERVE FILE TRANSFER PROTOCOL 003.23 40K RCPM49 .LST BULLETIN BOARDS AS OF 4/84 003.24 56K SMARTE .ASM COMPUSERVE EXEC - NOT MODIFIED FOR PMC 003.25 44K SMEXEC .ASM COMPUSEVER EXEC - NOT MODIFIED FOR PMC 003.26 8K STATUS .MEX STATUS OF MEX .10 2K M7RUB .MSG HOW TO CHANGE DEL/RUB/BKSPCE KEY FOR MODEM7 003.11 4K MDM730 .MSG MESSAGE FILE FOR MDM730 003.12 4K MDM730 .UPD MORE DOC FILE FOR MDM730 003.13 20K MDM730D .COM MDM730 FOR DUMB MODEMS 003.14 20K MDM730S .COM MDM730 FOR SMART MODEMS 003.15 40K MDM730 .DOC DOC FILE FOR MDM730 003.16 12K NEWSWEEP.COM MUCH BETTER THAN PIP 003.17 28K NSWP205 .DOC DOC FILEkNSWP is copyright (c) 1983 by Dave Rand 10232-160 Street Edmonton, Alberta (403) 484-4114!9"1;*."6,2,2, 2,2,!], >>?!" ,",Ͷ ͖PDrive :,A+:,<>*+>?=_o&12,: !" ,#"*,",,U!;,J}+5#" ,C*,+" ,#b",!",".,"0,1;:,29,* ,#}ˆ No files.͈XʱLSwM*,b͈G!M!~ȸ#ʬ##ß^#V:,_:,_1ͷ*,,K in # files. **,K free. B BB_XSwDgTUVyPnE8LCM A R#FEWY?wQE *,#",* , M!",M*,|+",M* ,",M Which drive? :AMQM :,GA2,PU**,K remaining on drive A+>:+x2,PM Which flags (1-4,R,S,A)? !k, 6#!~M#"=,*=,ͬ#"=,W!\k, Q#D,>,>Ï 1234zzzzRSA Delete file? ͈YM*,͋Mb]2\ >6>_^:e R/O. Delete? ͈Y:e2e\\* ,*,{ozg))))x#~# x* ,+" ,*, +", Erase Tagged or Untagged files (T/U)? ͈TqUMT>y2 , Do you wish to be prompted (Y/N/A)? ͈MAMNY>|23,!",b~G: ,3 Deleting ---> :3,$ Delete (Y/N/A)? ͈AGY3͘P͋5#* ,#}G+ !",M!",U ~6v#*0,"0,*.,".,*.,K (*0,K).ͧ*,bYB Tagged files = ͧ*,bvB~6#*0,>"0,*.,>"., New drive/user/mask? !~M#"=,ͬ:\,:,<=2,::,E:*>E:,2,:] ]!]^ 6?>!\, >ü2,~ʄV#v2, Illegal drive code.Mq:,2:,:,28,~0چ:AچQ҆A28,#~:ȷ*0:'G#~:0602:,x 2:,>2:, !^#6#p#~Gw" Copy to drive/user? !~M P#͢:C,:9,G::,s:8,G:, Can't copy to same drive and user.M*,b2D,E, >~29, Copy to (filespec)? !~M#"=,ͬ*=,q:] !E,] !~# :\=28,!E,] e!]E, 怶w#( !\j, >ʹ M Squeeze, Unsqueeze or Reverse (S,U,R)? ͈2,Sʉ Uʉ RM>Ï 2C,:,29,ʥ -!b~+F< x29,:C, :,G:8, :9,G::,  Skipping, same drive & user --> < :C,, C  Copying --> W  SQ/USQ --> W  Setting -->  to :C, !k, ~ģ #t !s, ~̺  ~ĺ #‘  ~+#© è 1 2 3 4 R/W R/O SYS ARC :8,A+::, :9,o&  >:+:,  with CRC.:C,3 m ͺ 6 3 6͘U #* , Ҩ j  --- Aborted ---MD, >~6>29,!E,k, ~ww#” D,!E, >6 !b~  Retagging --> > +Y#* , Ҹ M(~# + )~ +## ",͸n *,"!,*,¬ v f *,:,U R ì *,:,Rv Uʬ !.`!*,¬ !D,j, 6>!s,~ £ 6Q#6Q#6Q(!k,# >.+# )%*,͸!D,v%9!.  Not a SQ file."=,"A,::,͜2:,!\j,6 >%!ͺ 5 _! *A, 9 ERROR - Checksum error in file ssgon  Premature EOF on file... aborted.Mú ͸ :8,G:, :9,G::,ȸ͸!D,j, >2j,!"?,%*,"4,D,"4,*6,  :, Verifying --> !v,w,6>j, b> +Yý#* ,  b]> ~?#*,b ~29, New name, or *? !"=,!lͯ#~ M ?ʶ#a::,v:9,w*,b͹. P*,* ,#" ,C*,+" ,", M!",M:,28,\2\ >:e:e2e:u2u\::,_:9,_!mE, >2D,ͫD,*,J}R Destination file exists! PM::,bG:9,Š:9,_\_!m >:9,_!\D, >ͫ2D,>?2P,*,D,J}}",ͫD,!mE, >ͫD,!)))))*, P,>D,<0P,>:R,2R,D,*,+",}#>.} Directory full.M<h!=!o >*6, Ҟ OUT OF MEMORY?  ~29, to Ͳ!m͹G:t2t#* , >. PÍ~ʯ F: ,ʜ?ʨG># œɯ/k,m> ?~#=º::,:9,:,A+ n&}  >:+y > +`>.+`*,#. #~#> +K : [*[#y+~+#`>2<,2<,<22,Press ^X to abort, L to advance a line, cr to advance a page. >2;,*,b͸{ v !s*,"!,!. ! *,"!,"ͤuu{suu_ 4:2,<22,:;,O:<,:2,G:͐Lklkuu22,:2,=22,M͐ Gͤʐ́GX!P,Q,6>D,2D, >~ͫ29,*,"!,",D,< Can't open file!M_:8,_::,_ :,_:9,*,"%,"#,"',j,:s,2s,Ͳ<~:s,w:s,2s,ͲͲ< Destination disk directory full.M!v,w,6>D,< Can't close file!MͲj,j,<:M,:s,2s,j,*',*#,G x1w#"#,9*#,*%, j,*#, I*%,"#,*,*!, ʇ~#"!,*,"!,", D,º*,",•s*!,*, s=* ,!;;:\=2,:m?>2,!,~ ,6? >~4# >~##~#~  x>9'* ,",+|*,|ȯ|g}o",b#",* ,+}o|g",!",*,",*,*,",ʰڰ*,*,}o|g",ʰ*,#",*, My*,b" ,*,b", ~O##* ,*,Fwx# |}!",",#",* ,",]/}F*,",#",*,+",|#*,b* ,>*,#",*,b" ,*,b", #s* ,~ʵ F, xҵ:,ʢ?ʮG># ¢ɷ!",,* ,#}!;*,,",, x'  d } y00> +=% ; |1{0+ }0ҟ*.#*.~.vg xʇ|-q#m}o|g:),ʛ)=Ó"*,:,_.*:GxG|g}o ¹Û^)))))#~&o))))o$#:),8)}>o}}o}}o}#~#>a{_:,_.>:.2),".k&&* ,ͧvk&*=,ͬ!\w=&!\*=,ͬ:, O0O::,&xy"py2:,͑L#*<6?>w+͑SB#6 L.|͑|#*l6?nw[͑ʃr#6 |#6…"=, =_.:;<> ì!,!yg)>g>!or$s%# »:,~# *?,O!,! ~W$^"?,  ~#+ _{>F>L_!O! ~#G~>#T)))); NSWEEP - Version 2.05 04/11/1984 (c) Dave Rand, 1983, 1984 Edmonton, Alberta $ A - Retag files | Q - Squeeze/Unsqueeze tagged files B - Back one file | R - Rename file(s) C - Copy file | S - Check remaining space D - Delete file | T - Tag file for transfer E - Erase T/U files | U - Untag file F - Find file | V - View file L - Log new disk/user | W - Wildcard tag of files M - Mass file copy | Y - Set file status. P - Print file | ? - Display this help X - Exit to CP/M | cr, sp - Forward one file $"V!"X!!9"k A!v;!>2R!2U!A!"\!*V!s{ Gp#j  A!"^!;!A >*X!"Z!|q A!s#r#A!s#r#*Z!+F 1>*V!*\!a{_USQ section (C) 1983, 1984 by Dave Rand (403) 484-4114!9"k :U! =2U!:T! >==2U!:T!2T!:S!O:R! !sj O>=2R!yO*X!!##^#Vz y2S!z>8!{/|}sj sj go>2)" *!9"`*1`** *}o>k)")"*"*)2)5)¡!>n%v͆)¯!>n%}2)(|!A)"!)!#45"~6!G+~(!">(<(""#4~¼!>(~6(:)2)(ü!:)/">(<(**^#V#N#zJ"#4">n%~**w#s#r#q#")>2)#^#V#N#~#2*{":)G**#͌)ڔ"####}"y2*ð"*)y2* }O|GT]+͵)+:*w#s#r#:*w*)####"):)<2)b":)!`("45"""#"!_(p2*2*J(g2)2)<2*2*$>2*!))͙)ڰ$2*!):*k):*Nw:*/<$G:*$4x2*$!*)ͪ)!):*k)~2*:*$w:*#!))ͪ)#>2*:_(!*4$>2*#~!)k)~2*ü$!)b*2)*)))>k))")!")!)p)~w6#w#w#wp)b*!)b**)*)͆)>n%*`**):)%""*!9"`*1`*!v&*)&!)")*"*#~ ʶ%&#¨%>.&xk)~ %&#%&*)&))*)~&#z%2)2)>2)A)T&A)]&!)7-T&~6(&G+~ͣ&&T&>ͬ&<ͬ&T&T~%>ͬ&~6ͬ&:)2)ͣ&%:)o&>ͬ&<ͬ&>_)###ͱ&:)ʎ&G:)†&&>2)*)|>ž&*`*¬&ͬ&_)F#^#V:)O{_zW:) &&2)»&y2)}&|:*'':)*)*)G:)Os#r#}' z'>''")")y2)!)4~>'2)!)~w:_(=GN'>n%:*\':*‚$!_(p:*#2*2*#_):)w#*)+2))͵)!")"))!)C+)!)p):)!*k)4!)5:*'*)6:)O}'7zW{_~'A+~+}' '~''s#r*)/w#6#")}!)4>_)###!'(u'*)>+w+)կͪ))Â*((x!)4#4#4#4(((o&))**4#4#4ɯGO**w#w#w#q#  )!)w#w#w#w#!))ͪ)!")A)oA)gsI)*)k)")!)4#4#4**Gk)xk)xo$շ#s)}o|g|}##~+~+~H + Ÿ)x ~#ê)x ~+õ)yxX+G]T~w+r*kb n*x%+"*+",+Hi&)))#"2+!5+<+Aw#¡*!5+".+!<+"0+*,+A#º*!+A**+~w#*!2+5*#5%+*.+A~w#*y24+*0+DM*.+*,+#:4+=24+*?**.+*0+".+"0+*7&+*.+xH "+!+ "+i`)))#"+A!+6#b+A*++~wn+kbA+~wy+Ҙ+*+!+Aw#Ž+!+5j+#455j+ |g}o }o|g}o|g}o|g3 #}/o|/gկ2 !"  i * }o|g" h >2 M * : !" | › }  *  " }o|gھ " }oÿ  ! " NSWP - A disk maintenance utility. Dave Rand 10232 - 160 Street Edmonton, Alberta Canada T5P 3E9 - 1 - NSWP 2 - A disk maintenance utility I N D E X Page Introduction ........................ 3 Overview of NSWP ............... 4 Invoking NSWP .................. 5 Single file commands ................ 6 Help ........................... 7 Forward and Backward ........... 7 Exiting ........................ 8 Finding a file ................. 8 Viewing and Printing ........... 8 Deleting a file ................ 8 Copying ........................ 9 Renaming ....................... 9 The Space command .............. 11 The Log command ................ 11 Introduction to Multifile Commands .. 12 The Tag command ................ 12 Wildcard tagging ............... 13 The Untag command .............. 13 The Mass copy command .......... 13 After the mass (Again) ......... 14 Erasing files .................. 14 Squeezing and Unsqueezing files. 14 Setting file status ............ 15 Epilogue ............................ 16 Credits ............................. 16 Contributions ....................... 16 - 2 - NSWP 2 - A disk maintenance utility Introduction NSWP is a new disk utility than can replace many of the more common utilities that are used, such as DISK7, PIP, PRINT, PROT, SQ, STAT, SWEEP, TYPE, USQ and others. In only 12K of disk space it replaces over 100K of utilities! NSWP is written entirely in assembly language, and will run on any CP/M 2.x, 3.x or MP/M based system with no changes. Since it is coded in 8080 assembler, any 8080, 8085 or Z80 compatible processor will work. Note that this program WILL NOT run on CP/M 1.4. When NSWP was conceived, the dominant file utility was SWEEP, and thus NSWP is syntax compatible with SWEEP, but with many extensions. This allows you to directly rename NSWP to SWEEP, if you so desire, with no retraining period. I hope that you enjoy this program, and use it well. Any problems, or suggestions may be directed to myself at the address on the first page, or on one of the following RCP/Ms: Edmonton RCP/M - (403) 454-6093 (300 or 1200 baud) Stadium RCP/M - (403) 479-3450 (300 baud only) or voice at: (403) 484-4114 Disclaimer and warning While this program has been tested on many systems, I will have no liability or responsibilty to the user or any other person or entity with respect to any liability, loss or damage caused, or alledged to be caused directly or indirectly by this program, including, but not limited to, any interruption of service, loss of business, anticipatory profits or consequential damages resulting from the use of this program. Furthermore, although this program has been placed into the public domain, I retain all copyrights to this program, both in the U.S.A and in Canada, and pursuant to this, this program MAY NOT BE SOLD BY ANY PARTY unless specifically authorized by the author, Dave Rand, in writing, previous to the first copy being sold. As well, this program MAY NOT BE INCLUDED IN ANY OTHER PACKAGE FOR SALE, even if this program is indicated as being 'in the public domain'. All of the above applies to both the original as well as derived, or modified copies of the original. Any modified copies of this program MUST NOT have the copyright notice violated, changed or altered. Please report any copyright violations to the author, at one of the above telephone numbers. Thank you. - 3 - NSWP 2 - A disk maintenance utility NSWP Overview NSWP is a directory and file manipulation program. With it, you can copy, delete, rename, unsqueeze and squeeze files. The documentation following is split into two major sections: A tutorial for the inexperienced, and a reference section. The reference normally will be used in conjunction with the program to answer specific questions regarding NSWP. The tutorial is a broad coverage of all of the functions, and should be read through at least once. The most important thing to remember when using NSWP is that it provides a list of your files in ALPHABETICAL order. Moving around in this list is quite easy, and will soon become second nature. In this documentation, all user input is underlined. As well, when the"current" file is referenced in this documentation, it means the file just to the left of your input. This"current" file is often referred to as the file you are "on". " - 4 - NSWP 2 - A disk maintenance utility Invoking NSWP To make effective use of NSWP, you must know the various options available to you when you invoke NSWP. Here are some of the options: A>NSWP This format simply loads NSWP, and scans the default drive and user for filenames. Once inside NSWP, you may change to a different drive and/or user, but when you exit you will be returned to the drive/user that you called NSWP from. A>NSWP *.COM This format loads NSWP and scans the current drive and user for all filenames with the extension '.COM'. Note that NSWP can find system files as well, so no additional information need be given. A>NSWP B:*.COM * The presence of the second asterisk indicates to NSWP that you wish to scan all user areas of the indicated disk drive. In this case, all '.COM files on all user areas on drive B. Combinations of the above are acceptable, and you may even log to all user areas, and find all files with the specification '*.* *'. Once inside NSWP you are presented with a menu, then a report of which drive and user you are logged to, how much space is taken by the files you have specified, how many files have been found with the specifications given, and how much space is left on the disk. A sample follows: Drive A0: 596K in 36 files. 735K free. A special format of this line shows that you are logged to all user areas: Drive B*: 950K in 234 files. 2956K free. From this point, you may execute any of the menu options. A special display occurs if no files are found with the specification you have given, or if there are no files in the given drive/user area(s): No files. This display may also occur if you delete all the files out of a given specification. When this occurs, your menu choices are limited to ONLY 'S', 'L' or 'X'. This allows you to see the free Space on a drive, to Log to another drive/user, or to eXit. No other choices are valid, nor will they be accepted. - 5 - NSWP 2 - A disk maintenance utility Command Structure There are two primary types of commands in NSWP: those that act on one file and those that act on many files. We will go through them both. Before doing that though, let's try moving around in NSWP first. To move in NSWP, you must first understand that the files on your selected drive/user will be presented to you in a sorted manner. The files are sorted in this order: Filename, File extension, user area: 1. B0: -WORK .001 0K : 2. B0: ARCADD .COM 4K : 3. B0: ARCCOPY .COM 2K : As you can see, the files are numbered for your convenience. You may not directly use these numbers. As you can see, the file size is also shown (rounded to the nearest block size). Note that if you have enabled the reverse video sequence (see Epilog), you may see some of the letters in the filename printed in reverse video. The chart below shows how to decode this information. FFFFFFFF RSA 12345678 /YR |||||||| OSC 4. B0: ARCDEL .COM 2K : As you can see, this looks confusing. Really, though, it is not. The tags F1-F8 normally are not used, but NSWP allows you set F1-F4 for your own use. The R/O tag means that the file may be read, but not written to. The SYS tag means that the file does not appear in normal DIR listings, and in CP/M 3, MPM and CP/M 86 also means that this file is avaiable to all user areas. The ARC tag means that, if set, the file has been backed up since it was last accessed. Now that you understand how files are presented, we can go through a sample session. Remember, user input is underlined. - 6 - NSWP 2 - A disk maintenance utility A>NSWP B: NSWEEP - Version 2.05 04/11/1984 (c) Dave Rand, 1983, 1984 Edmonton, Alberta Drive B0: 850K in 64 files. 118K free. 1. B0: -WORK .001 0K : 2. B0: ARCADD .COM 4K : 3. B0: ARCCOPY .COM 2K : 4. B0: ARCDEL .COM 2K : 5. B0: ARCDIR .COM 2K : B 4. B0: ARCDEL .COM 2K : B 3. B0: ARCCOPY .COM 2K : B 2. B0: ARCADD .COM 4K : B 1. B0: -WORK .001 0K : X A> Help At any point, you may request the main help menu by pressing '?'. 1. B0: -WORK .001 0K : ? NSWEEP - Version 2.05 04/11/1984 (c) Dave Rand, 1983, 1984 Edmonton, Alberta A - Retag files : Q - Squeeze/Unsqeeze tagged files B - Back one file : R - Rename file(s) C - Copy file : S - Check remaining space D - Delete file : T - Tag file for transfer E - Erase T/U files : U - Untag file F - Find file : V - View file L - Log new disk/user : W - Wildcard tag of files M - Mass file copy : Y - Set file status. P - Print file : ? - Display this help# X - Exit to CP/M : cr, sp - Forward one file Moving forward and backward As you can see, the two most common commands will be moving forward and backwards through the directory. Either the SPACE bar (), or the RETURN key () may be used to move forward. To move backwards simply use the 'B' key. Note that all commands in NSWP can be either in upper or lowercase. Internally, lowercase will be converted to uppercase. If you reach the end of the directory with either command, you will be "wrapped around" to the other end automatically. - 7 - NSWP 2 - A disk maintenance utility Exiting To exit, just use the 'X' command as shown above. This will return you to the same drive and user area that you invoked NSWP from, regardless of anything you may have done in NSWP. Finding a file Since you may have many hundreds of files selected, you may wish to move rapidly to a particular file. You may do this through the 'F', or FIND command. 1. B0: -WORK .001 0K : F Which file? BASCOM 8. B0: BASCOM .COM 32K : The Find command always starts looking from entry number one. You may use the standard CP/M syntax for wildcarding (eg: to find the first .HEX file, you may use *.HEX), and also note that the Find command will fill all blank spaces with question marks. This makes the search strings 'B*.*', 'B', and 'B??????.' all find the first file beginning with 'B'. As you experiment, you will find other interesting uses for this command. At this point, you now know how to move through your directory, both rapidly and one step at a time. Let's move on to some more useful commands. Viewing and Printing a file The View command, invoked with a 'V', will type the current file onto the screen unsqueezing the file if required. Note that this command will NOT prevent you from listing ANY type of file, so you must use your own judgement on what can and cannot be listed. At the end of each page on the screen, view will stop, and allow you to abort the viewing with a ^C or a ^X. To get one more line from the file, hit the space bar. To get another page, hit the or RETURN key. The Print command, invoked with a 'P', will send the current file, with no modifications or paging, to the current LST: device. You may abort the print with a ^C or ^X. All other features of the View command apply. Deleting a file You can delete the current file just by hitting the 'D' key. Before deletion occurs, you will be prompted. 12. B0: CDP1 . 40K : D Delete file? Y 12. B0: DEAD .DAT 100K : - 8 - NSWP 2 - A disk maintenance utility If any reply other than 'y' or 'Y' is given, the file is not deleted. If the file is deleted, it is removed from the list and the next file is given the current file's number. If the file is a Read Only file, you will be prompted again: 12. B0: CDP1 . 40K : D Delete file? Y R/O. Delete? Y 12. B0: DEAD .DAT 100K : Copying a file While on any file, you may copy that file to: A) Another name, on the same drive/user B) Another name, on a different drive/user C) The same name, on a different drive/user NSWP will prevent you from copying a file to the same drive/user that the source file resides on. Other than that, there are no restrictions on where you wish the file to be. If a file exists on the same drive/user that you wish to place the destination file, the existing file is deleted automatically, even if it is Read Only. When NSWP copies a file, all the attributes of the original file are passed on to the destination file. Thus, if a file is a SYS, R/O file, NSWP will cause the destination file to be SYS, R/O after the file copy has taken place. 12. B0: CDP1 . 40K : C Copy to (filespec)? C9:BACK.CDP If you wish to preserve the name of the file, you may just enter the destination drive/user part of the filespec (eg. C9: in the preceding example would have copied the file to drive C user 9, retaining the name CDP1). Just entering the drive part of the filespec causes NSWP to retain the user number of the source file. If the filename is followed by a space, then a 'V', the file will be verify read after it is written. NSWP maintains a CRC of the file as it is writing the file, and verifies this CRC. Renaming files The Rename command ('R') may be used to: A) Change the name of one file B) Change the names of many files C) Change the user number of one file D) Change the user number of many files To just change the name of one file, the syntax is simple: 12. B0: CDP1 . 40K : R New name, or *? CDP2 12. B0: CDP2 . 40K : - 9 - NSWP 2 - A disk maintenance utility You may also change the user number of the file, as follows: 12. B0: CDP1 . 40K #: R New name, or *? B1:CDP2 12. B1: CDP1 . 40K : Note that if all user areas are not specified in the logon of NSWP, the file may not be shown on your list when renaming to another user area. To change a group of files from one name to another, you may enter the following command at any file: 9. B0: BASIC .COM 24K : R New name, or *? * Old name? *.HEX New name? *.BAK At this point all files with the extension .HEX will be renamed to the same filename but with the extension .BAK. You will see a running display on the screen as each file is renamed. Any valid wildcard may be used to select the source files, and the destination files will take one character from the source for each '?' in the name. An asterisk qualifies as filling the remainder of the field with '?'. If the destination file exists, the rename is not made. - 10 - NSWP 2 - A disk maintenance utility You may also choose to rename a group of files to another user area, optionally changing their names as well: 9. B0: BASIC .COM 24K : R New name, or *? * Old name? *.HEX New name? B1:*.BAK This command will rename all .HEX files on drive B user 0 to the same filename, but with the extension .BAK, and place the resultant file in user 1. You may want to try this command a few times to get the hang of it, but it is extremely powerful. The Space command The Space command ('S') simply asks you for a drive code, then tells you the remaining space on the drive you specify. Before doing the space check, a drive reset is performed, so feel free to change disks. The Log Command The Log command ('L') allows you to change your directory to another drive or user. Additionally, it allows you to re-specify the wildcard mask just like entering the NSWP program from CP/M. As well, the drive system is reset, so again you should be able to change to a different diskette at this point or to another part of the same diskette. When the Log command is used, the instructions are reprinted for review. 16. B0: DD .COM 4K : L New drive/user/mask? A14:*.HEX NSWEEP - Version 2.05 04/11/1984 (c) Dave Rand, 1983, 1984 Edmonton, Alberta Drive A14: 44K in 2 files. 1118K free. 1. A14:NSWP .HEX 22K: - 11 - NSWP 2 - A disk maintenance utility Introduction to Multifile commands Now that all the commands that affect single files have been described, it is time to introduce the concept of Multifile com- mands. These commands are ones that affect as few as one or as many as all of the files on a single disk. To affect these files, though, we must have some way of describing which files need to be affected. CP/M has a way to do this, using "wildcards". This program, on the other hand, uses the concept of a file"tag". The Tag command Tagging a file, in its simplest form, can be accomplished just by depressing the 'T' key when the file to be tagged appears. What exactly is a tag? A tagged file is a file in the list of filenames that has an asterisk next to the colon after the name of the file, as shown below. 9. B0: BASIC .COM 24K :* A tagged file is different from an untagged file in that you may now request an operation that deals with several unrelated files (eg., Files that will not match using only one wildcard). A sample"tag" session is shown: 9. B0: BASIC .COM 24K : T Tagged files = 24K ( 23K). 10. B0: BRUN .COM 16K : T Tagged files = 40K ( 39K). Note that the 'T' command automatically performs a "move forward" operation. To the right of the 'Tagged files' message two numbers are displayed. The numbers are the total size in K, of the files you have tagged so far. This is useful if, for example, you are moving files from one size of diskette to another, smaller, size diskette. If the source disk holds 500K, and the destination holds 256K, you can stop the tagging operation when your size is just less than 256K. The tag function in itself does not perform any operation, other than to mark the file for a future"mass" operation. By now the astute reader will notice that I have cleverly skipped over the function of the second number display, the one in parenthesis. This number is the combined size of the tagged files, IN 1K BLOCKS. If you are using a computer system that supports many different disk sizes/formats, or a system with a hard disk attached, you may already know that CP/M can allocate storage only in "BLOCKS", and that these "BLOCKS" may be up to 16k in length. This means that NSWP would show a file containing say, 512 bytes in information, as being up to 16k long, depending on your computer. The second number in the tag display shows how much storage the$ cumulative files would take if they were stored on a single-sided, single-density, 8" diskette. - 12 - NSWP 2 - A disk maintenance utility Wildcard tagging Another way to tag files is the wildcard tag function. This function accepts a CP/M type wildcard and proceeds to tag all the files that match the wildcard. To invoke this, just hit 'W' and you will be prompted with the message 'Which files? ' Enter any CP/M wildcard, right down to a unique filename, and if that file exists it will be tagged and displayed. Untagging files If you can tag a file, you must be able to Untag a file as well. 9. B0: BASIC .COM 24K :*U Tagged files = 16K ( 16K). 10. B0: BRUN .COM 16K :* As you can see, the untag function subtracts the current file's size from the total then displays the total of the remain- ing files. The mass copy command Now that we have a number of files "tagged", what do we do with them? Well the Mass copy function is one of those that acts on many files. Its purpose is to copy the tagged file(s) from one drive/user area to another drive/user area. 12. B0: CDP1 . 40K : M Copy to drive/user? A14: V Copying --> B0: BRUN .COM to A14: with verify Verifying --> file ok. The 'V' is optional, and it indicates that you wish to have the file verified after it is written. As you can see, the files have been sent to drive A, user 14. If you wish the tagged files to reside in the same user area as the source files after the copy, do not specify a user area in the Mass command. This will cause NSWP to put the file in the same user area as the source file. NSWP will not allow you to copy a file to the same drive and user area as the source. The copy is simply not made. - 13 - NSWP 2 - A disk maintenance utility After the mass After any mass file operation, the tags are "reset" as each file is copied. Visually, they change from a '*' to a '#'. The files are logically untagged, and will respond as such. But, since NSWP remembers them, you can automatically retag these files. This is useful if, for example, you need to copy the same files to a number of different diskettes or user areas on a drive. To invoke this, use the 'A' command. 12. B0: CDP1 . 40K : A Retagging--> B0: BRUN .COM Tagged files = 16K ( 16K) Erasing files You may want to copy a group of files, then delete them from the source disk after the copy has been made. To do this, you can use either the 'C' command to copy, followed by the 'D' command, which is tedious, or a combination of the 'T', 'M', 'A', and the 'E' commands. The 'E' command Erases tagged or untagged files at your option, on a global scale. 12. B0: CDP1 . 40K : E Erase Tagged or Untagged files (T/U)? T Do you wish to be prompted (Y/N/A)? N Deleting --> B0: BRUN .COM If you specify Untagged files, the untagged files will be erased. You may wish to be prompted before each file is to be deleted, and you can do this via the second question. Squeezing and Unsqueezing files The 'Q' command allows you to Squeeze and Unsqueeze tagged files. This file squeeze program is compatible with the original squeeze/unsqueeze programs written in the 'C' language by Richard Greenlaw. After hitting Q, you will see the prompt: Squeeze, Unsqueeze or Reverse (S/U/R)? After answering this skill-testing question, you will be asked which drive/user you wish to place the destination files. The syntax here is the same as for the Move command, except it is permissible to 'Q' the files back to the same drive/user that they originated. - 14 - NSWP 2 - A disk maintenance utility When 'Q' is invoked, you are asked if you wish to Squeeze, Unsqueeze or Reverse. A carriage return here will return you to the command line of NSWP. If you select 'S' for Squeeze, all tagged files will be examined to see if it is "worth" squeezing them. Files that exibit ANY space reduction, even if it is only one sector, will be squeezed. If the files is not "worth" squeezing the file will simply be copied to the destination drive/user. If you select 'U' for Unsqueeze, all tagged files will be examined to see if they are squeezed. If they are, they will be unsqueezed, and moved to the destination drive/user. If they are not squeezed, then they are simply copied. If you select 'R' for Reverse, all files that are squeezed will be unsqueezed, and all files that are unsqueezed will be squeezed (if it is worth it), and moved to the destination drive/user. The most attractive feature of the 'Q' command in general is the ability to Squeeze files ONLY if it is "worth" it. This means that by using NSWP, you can archive data into the absolute minimum amount of space possibl$e. The SQ algorithm used in NSWP is better than the one in the original 'C' squeezer, and produces the smallest output file possible with current technology. The file squeezer section was done by Jim Lopushinsky, and is copyrighted separately by him. He also has a public domain standalone squeezer. Setting the tagged files status You may set the attributes of a group of tagged files just like STAT, or PROT. To do this, tag the files and select the 'Y' command. 12. B0: CDP1 . 40K : Y Which flags (1-4,R,S,A)? R,S Setting ---> B0: BRUN .COM to R/O SYS The flags you may set are the F1-F4 flags, as well as the Read Only, System, and Archive (MP/M, CP/M 3 only) flags. Any flags you do not specify will be reset. To reset all the flags (i.e., Change to R/W, DIR and no "Sysop tag") just enter a single comma or space at the "Which flags" prompt. Note that the flags in the "Which flags" question do not have to be entered with a comma between them, as anything (or nothing at all!) will do. As far as the program is concerned 'RSA', 'R S A', and 'R,S A' are all valid. - 15 - NSWP 2 - A disk maintenance utility Epilogue All the functions of NSWP have now been described. The best way to get more familiar with the program is to actually USE it. I think it will be one of your most frequently used programs. There are several things in this version that you will want to alter: 103H This byte controls the screen length used in the 'V'iew command. It is currently set to 23D (17H). 104H-10AH - Turn reverse video on The first byte in this sequence of seven shows the length of the reverse video on sequence, which follows at location 105H. All seven bytes are currently set to zero. 10BH-111H - Turn reverse video off The first byte in this seqence of seven shows the length of the reverse video off sequence, which follows at location 10DH. All seven bytes are currently set to zero. Credits My thanks to all who made this program possible and particu- larly to Dave Mccrady for his help in composing the documentation and .HLP files for NSWP. Thanks also goes to Jim Lopushinsky, also of Edmonton, since without him the SQ section of NSWP might never have been completed! Thanks to the use of his SQ section, NSWP can produce the smallest possible SQ'ed files. Contributions If you like, use and enjoy this program, feel free to send a contribution (suggest $20). This will help me expand this program, and add even more features. I am currently working on a CP/M 86 version, and once that is running, I intend to port it to MSDOS. Suggestions for enhancement are also appreciated, and you may send them to: Dave Rand 10232 - 160 Street Edmonton, Alberta CANADA T5P 3E9 - 16 -  Notes on NSWP 205 - 04/11/84 ---------------------------- NSWP 204 introduced a bug that would not allow you to copy a file if that file was set to R/O, unless you had a destination that was ALSO R/O! Notes on NSWP 204 - 04/04/84 ---------------------------- NSWP 204 has a few new features! First, limited CPM 3 has been estab- lished, in that if you have BDOS version over 3.0 (which may include MPM), you may now run with ALV banked. NSWP will use the BDOS call to obtain the ALV information. This also applies to the 16 bit version. Before 204, if you attempted to delete a file that was currently tagged, it was not removed from the tagged file size. It is correctly handled in all cases now. NSWP now saves the SP, rather than (SP), in order to support totally non-standard implementations of BDOS and CCP. When using the '?' function, the current disk information, along with the tagged file size. The copy file speed has been further optimized by elimination of a re- dundant BDOS call (deleting a file, when we know it ain't there!). NSWP has been modified to better support MPM and MPM86 by doing a rename after a copy operation. This will drop the copy speed slightly, nullify- ing the effect of the above change. If you find anything else, please drop me a line... Dave Rand 10232 - 160 St. Edmonton, Alberta Canada T5P 3E9 (403) 484-4114 end a contribution (suggest $20). This will help me expand this program, and add even more features. I am currently working on a CP/M 86 version, and once that is running, I intend to port it to MSDOS. Suggestions for enhancement are also appreciated, and you may send them to: Dave Rand 10232 - 160 Street Edmonton, Alberta CANADA T5P 3E9 - 16 - % EastBay MicroMate User's Group - Disk issue EBMMUG.003 - June 7, 1984 This disk contains communications files which have been updated from the March 1984 Modem program MDM730 which is the last (sic) upgrade of Ward Christensen's MODEM according to Irv Hoff et. al. The "S" suffix is for smartmodems while the "D" suffix is for "un"smartmodems aka dumbmodems, i.e., MDM730S & MDM730D. In addition the modem programs, i.e., MDM730 has been configured to the PMC MicroMate-101 for smartmodems by Bill Hammond of the EBMMUG. Irv Hoff indicates that with MDM730 this is it!!! We think you will agree that this program exemplifies the encapsulation of the best works of many. Something which will not surprise many is that the program is better than most if not all the commercial programs available for $$$$$. Bill Wells has made available a modification of the program for use with a MicroMate with UNIX hooks. Those having a need for this program please let the librarian know so it can be made available for your use. Also on this disk are three programs SMARTE.ASM, SMEXEC.ASM & STATUS.MEX which are executive programs for the CompuServe Information Service using smartmodems. One needs to be configured to the MicroMate...anyone having the capability and time please have a go for the benefit of the EBMMUG with all of our thanks. There are about 100 K of MEX programs, i.e., .DOC, .NWS (NEWS), BUF. (BUFFERING), HELP, PAT. (PATCHES), LOAD, OVERLAYS, etc. A separate disk has been generated (.007) which contains only MEX programs. CONTENTS OF EBMMUG.003 -README.003 This file D.COM Directory utility M7FNK.COM These files provide a means of altering the M7FNK.DOC function keys for MODEM programs-NUMLIB must M7FNK.NOT be at 0E00H. .NOT is additional documentation for implementation (an update). M7LIB.COM Program to change MDM7xx phone numbers. M7LIB.DOC Documentation for implementation. M7RUB.MSG Regarding MDM730 & changing "rub" (delete) key to the backspace key. MDM730.DOC The supposedly final and last MODEM program MDM730.MSG from the Ward Christensen protocol via Irv Hoff. MDM730.UPD As noted above D is for dumb modems & S is for MDM730D.COM smartmodems. MDM730S.COM Configuration is for the PMC MicroMate-101 PAT730.V5 PATCH-The conditional assembly equates are de- faulted to give a plain vanilla MDM730 as distri- buted. They can be set as you wish with the options provided with this patch. PATMD4.COM Patching .COM file (see PATMD4.DOC) PATMD4.DOC Documention for use of the MODEM patch .COM file. PRTCOL.CIS  CIS (CompuServe Information Services) file transfer protocol. RCPM49.LST A listing of the Remote CP/M Systems throughout the U.S. as of April 18, 1984. SMARTE.ASM Smartmodem executive programs for the CompuServe SMEXEC.ASM Information Services system. In source code & STATUS.MEX needing configuration to the MicoMate. And an information file on the current status of MEX. Ed Miller, Librarian EBMMUG (415) 376-1611 (msg) Box 402, Moraga, CA 94556 May 27, 1984 t as you wish with the options provided with this patch. PATMD4.COM Patching .COM file (see PATMD4.DOC) PATMD4.DOC Documention for use of the MODEM patch .COM file. PRTCOL.CIS ..............X=................................Y=................................Z=................................0=................................1=................................2=................................3=................................4=................................5=................................6=................................7=................................8=................................9=................................^DIR DIR *.* $U0AD XMODEM S XMODEM R BYE RBBS (vacant)(vacant)(vacant) Nice chatting, see you again soon... !9"K1K!pʹ,".J!'ʹ,"0J, MDM730 - (type M for Menu) }]2͏ʹ:I!21Kͫ:3:B:ICb:O3+:ID+M3RSTk2I2IõEz2I2IõL‰2I2Iõ~?2*"+"+"+!"J ͟A2;J̀ k:2h> @2i3>^2h32i3]2I  !OI OG>xA>2I6%#~?2:XI2UI:IDEMLTG:9:=xC:IHæ2xSXR’:PI:m ,++ Enter primary option plus file name ++ 2, ++ Bad option ++ 8>ë:PI>B2PIx?2I:I:] 2I2IͲ&!>J͐!!\>J ͛,>J>J!O"I>2I :I ͈+͓+G::::IQx0^:^ù:^2I2I:I>2I::'Õ:'Ž>2I:́:!+:%ʪ:ʴ:"T::#:I/2I{+{+͉{+: ʮ ::)n:$ :&:I 2I2Iͫ:PIt,Ready to send in batch mode t>2 ͝+|>B2PI><)):] <'ͪ'Ϳ'xh)F&'ڴͧ&>2zIF&%Q%:In%r%́%ژÇ><)́%ڴ):2It:PI>2B2PI):] <'#> ͝+͏!"{+͙"Ͳ&]':PI5&,File open, ready to receive :IT&,CRC in effect >Cn&,Checksum in effect >,Waiting.....<)ͫ"ژ:r(ͧ&ͤÃ͌(ͤ')><)!_J͐!!l͐!, File name to send? (CR to abort): I>/:I ~I!_J,_J::,Want to include time delays? (Y/N): ͪ+N:2I{+I_Jq=ʧ?,++ DISK READ ERROR ++$ʧH, (in Terminal-mode now) Jͫ, [Transfer completed]~, ++ FILE NAME ERROR ++ ö!IF~ ͈+͓+# :͝+:đA͝+4 :  L<:O: O:I_ W!:~!:I~:I~!ʹ,:đ{ƒ8>̠8®>͈+ʠ͓+ :PIU&>2zI, Multiple errors encountered. Type Q to quit, R to retry: ͓+{+ʹ+Rʫ"QU&:UI!]26J p# 1:UI*xI#, Received # ͽ+, : ,(+,H) :6J<26J ʃ~ ĝ+~ >.͝+|(͝+ҏ&,Awaiting name NAK xͅ)ͤ!5J5*9J\ ͛,"9J><)7( !]~<)(0#><)Q(   a> a> a>u<), ++ ERROR sending name ++ xͅ)ͤ><)!\͒!&,Awaiting file name Q͕ʓ7>2,J!](>2+J(2+J&,Time out receiving filename Iͤw#}à2,JyQ<)(I  !\͒!&, ** Checksum error ** 2,JQÖ2,J2,JF&><)(WU&>2I25Jͦ!!"9J!!\J,,0ڱ:fŒ*9J\ ͛,"9J!5J4Ì!8J5€!"9J:5JA>@25J, ** Memory buffer :I,open ** ;,closed ** , ** Memory buffer available ** {+͕æ2*HK*NQyAJ*`]J~4m#]͌܌Ý+͈+͓+G>/,Printer buffer is :Iʯ,ON ,OFF !#½]2Iͤ,:I:Ix͝+U> :I: 8>G:,x ,x͝+U:I@ͤ,> :IJ ,:I*Ip#"I> p> ͝+́!|!yJ>4!N>2I*I !ON w͝+G ́!#¢"IJ>4͌ w#:I*Ip#"I:7JJ>4!Nz24J:4JW!8 N w͝+GU ́!# "I!"IJ>4s ^#"I:7J s !"I"I*I*I|}::ʌ 27J!?ʹ,DM8¦ > xš 7: :I]ͻ :I]̀*I6}l&)>oO :IN!͆!>J͆!ѷ!+| <)'?,++ DISK FULL, SAVING PARTIAL FILE ++$'',++ Nothing to save, erasing file ++ ÷*>;Ý+6# 6 #•!6#ž!!8J6!IN!I 6 !IF#!~ ¾!#!~ !")J+#!~ !:8J<28J#!~ !!6 *)JJ~ "#"#~ "")J!Jp \. ~N"#~+] ͛,!e~w#~w\!\l ͛,!u6B#6A#6Kl!l6\:\2zI (ڥ#O7>2-J2+J{y"(G"G2-Jx2+J$z":-Jʥ#:UI #{+x+,H received not SOH - $F&:I>:#:I>:#>C<):zI<2zI ڰ": U&ý1K'', ++ RECEIVED FILE CANCELLED ++ ++ UNFINISHED FILE DELETED ++ ÷*:UI#, ++ Timeout $# #:zI:I:I/2I2&,** Switching to Checksum mode **  >2I(ڥ#W(ڥ#/J$:UI #, ++ Bad record # in header #z2wI>2I!"I!(ڥ#w,^$2I:I”$Q(ڥ#$:wIG:xI$%,(+,H) ><):xI<):xI/<)>2I!"I!~<),a%2Iy<)*I|<)}<)>2-J2+J(GҘ%2-J2+Jxʰ%ƒ%:-J%&:I%:UI%,++ x%+,H%,NAK, received not ACK - $2I:zI<2zI ?, ++ SEND-FILE CANCELLED ++$, ++ TIMEOUT - no ACK - $%:UI͈+͓+1K(X&><)(e&> <)>B2PI2I2I:IRS#, ++ FILE CANCELLED ++ ÷**xI#"xI}!\ #~?'·&:PI'\<,File exists - erase? (Y/N): ͪ+Y2{+\,++ NO WILDCARDS ALLOWED FOR TEXT FILES ++ 2,++ NO FILE SPECIFIED ++ 2\2|Iy2I!O"}I'*}I!͙,"}I:I<2IO(:IOO\!! •(2I!O"}I:Iy(y: ͫ!+J^*0J(*.J8(z((F&7>& ).)!,J^(͈2O:VI1):XI6):I6)F+F&:WIR):XIW):IW)F+͈2OA^)4,Waiting ready signal {+F&(U&Cʣ))…)U&&,CRC request received >2I:PI&,Got checksum request &,Name NAK received :PI—*:UIj* !I*>w#* !]I*>6*~ ,*#xD**~ D*>.*, , Transferred :\22J!\͐!:2J2\!iIwI͛,Jͫ:> h:e:eæ2!l\͛,2|2h n+ n+ n+ _+n+>(n++>)n+_> ͝+> ͝+O͓+ʹ+͝+a{_ + |Ľ+{0n+|+}++ ,0n+,CTL-@͝+,~$,n+#,~8,:UI~n+#', :,>͝+{+>2I:PI*U&:;J_͡A xl,͉,:IcG:*K É,~#›,Jx4I!\,:=º,5-#^#6 ^-p- !- , p- !- -, ^-p- !- p-#̈́- ̈́-6# > W-W- > W-W-w#W-:n-_@w# . p-w#p-~*ʔ-#†-×-ͩ-~*ʥ-#™-ͩ-6?#©-ͦAA2/25/- I!\,!_J͐!:l2_J:m ...: 28J_J<.,++ FILE NOT FOUND ++u..#5.00, . _J? !`Jw#.!m`J 0=ƀo&:_J/=_@2/25/,Drive : k bytes free on drive : $0կ͓+ʹ+ /ʉ/ʉ/ʿ//G#4+~#/px/ ԝ+#L/#G~wڨ/+xF6 ʯ/ʭ/L/4L/>͝+> ͝+>͝+L/>#͝+{+B/G>#͝+{+xL/͝+/L/>͝+5L/{+L/{+F##> w# 0~(0!0#0#"07#2h:Iy0>2I!\J 0:\2J!J\ 0\í0!J\ 0\!J\ 0\<7¶02I=Ɓo&J 0] 02h2|><0~# x0,File open: *Iͽ+: 1, (+,H), records Send time: :_!1^#V*I&2i`ͽ+, mins, !1:_~:2E2E2E2E2&ͽ+, secs at 1&,To cancel: use CTL-X  0`@J0(  !1:__ , bps 110$300$450$600$710$1200$2400$4800$9600$19200${/_z/W12 !<=?2}o|g>o*I|>!L!yg)x2>g>!ol2r$s%# b2*IO!L ~W$^"I:I2, ** File still open, use DEL, DIR, WRT, E, L or T ** 22I!iIwI͛,!\IOI ͛,2I2+J2,J2I=bH, Single Letter Commands ? - Display current settings ^ - Function key intercept character, then (0-9) M - Display the menu E - Terminal mode with echo L - Terminal mode with local echo T - Terminal mode For copying text to disk use T (E or L) FILENAME.TYP Start or Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol COMMAND: R (or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g., *.*) D - Disconnect when done Q - Quiet mode (no messages to console) V - View or bytes on console X - When done, disconnect, go to CP/M The single letter commands may also be used on the command line when the program is initially executed. ͏, Three Letter Commands CPM - Exit from this program to CP/M DIR - List directory and space free (may specify drive) ERA - Erase file (may specify drive) LOG - Change default drive/user no. (specify drive/user) and reset disks. e.g. LOG A0: or LOG B: (user # unchanged) SPD - Set file output speed in terminal mode vDb8,TIM - Select Baud rate for "time-to-send" msg. :ʘ8,TCC - Toggle CRC/Checksum mode on receive :8,TLC - Toggle local command immediate or after :', :"9,TLF - Toggle LF after CR in "L" or "T" mode for a disk file :Z9,TRB - Toggle rubout to backspace conversion :ʝ9,TXO - Toggle XOFF testing in terminal mode file output :9:9,NUM - List remote systems : 9,SET - Set modem baud rate ,BYE - Disconnect, then return to CP/M :)::@:,CAL - Dial number ,DSC - Disconnect from the phone line The following are terminal text buffer commands: ,DEL - Delete memory buffer and file WRT - Write memory buffer to disk file 2H, Local Commands while in Terminal Mode : , - Send a break tone for 300 ms. :;:), - Change baud rate >, - Exit to command mode :;:", - Send log-on message :!, - Disconnect from the phone line :<:#, - Toggle printer > ͝+:&, - Start copy into buffer :$, - Stop copy into buffer Start & Stop may be toggled as often as desired. A ";" at start of line indicates buffer is copying. XOFF automatically us&ed to stop input when writing full buffer to disk, XON sent to resume. :%, - Transfer ASCII file to remote ::'=, - Send local control character to remote =, - Next character will be used for local control z{+:I'>7I, Bytes of buffer free A͝+͟A>>&oͽ+>>͝+>>͝+,COMMAND: 2II>/:I'>^ʛ??zH >:I:#CI0CPMZ,{+0LOGA0DIRҤ@0ERAһ@0SPDB0TIM]C0TCC҄D0TRBD0TLCE0TLFnE0TXOE: ?: ?0NUMҕG: ?0SETF0WRTDG0DELG0BYEM@0DSC+:Q?:c?0CALc?> 2Io?:I!HI&Hx?ͫ,~?=,++ Invalid command ++ :bH, SPECIAL FUNCTION KEY TABLE ?,CTL-@͝+, current function key intercept character ! #~0͝+> ͝+#~@@ :@,$@͝+$@{+@{+=:h:{@h, << Exit to CP/M >> Z,ͻ !ͻͻ > ͝+!@ͻ(Җ@ATZ $23Jͱ-:3J_=I!\,3+:] x?\<@,++ File not found ++ =\,File erased =:I«A:I )AͦAAAx?23J͟AG:IdApA:IdArAA :3J_:=J_͡A= lA:IA͕AOxGxx?2=JI>/:I 0 x? ,++ Terminal mode file open ++ ++ Use WRT or DEL before LOG command ++ =,Delay between chars. (0-9): ͈+(B͓+͝+C0 x?2,Delay at end of line (0-9): ͈+aB͓+͝+C0 x?2 , Char. delay (terminal file mode) is: :Gxo&ͽ+,0 ms. per character Line delay (terminal file mode) is: : Go&ͽ+,00 ms. per character =, :IAx?_:I =0LC:I0XC&x?_͡A=>LCvDx?,Use 0-8 to give baud rate for 'S' mode time-to-send message, where 0=110, 1=300, 2=450, 3=600, 4=710, 5=1200, 6=2400, 7=4800 8=9600 and 9=19200 Baud. Enter value: ͉A x?2 D=vD`D,Rate for the S mode time-to-send message is set to sD,Modem speed is 1: G:::x?:/2͘D=,Mode: :ʳD,CRC ,CHECKSUM :x?:/2D=:D,Rub is backspace ,Rub is rub :x?:/2E=,Use ::'GE, before local command , to send local command to remote :x?:/2͂E=,LF :˜E,NOT ,sent after CR in "L" or "T" for a disk file :x?,Use XOFF testing? (Y/N): MFE2jF, Use XON waiting after (Y/N): MF+F2ͶF:=/2,Therefore jF=I>/:I ?GN>xY>x?,XOFF testing :ŠF,NOT ,used, in terminal mode file output ,XON :F,NOT ,automatically tested after CRÒF: x?Iw:=Aͤ,Tͤ, ͤ,=:IyG:?J yG>J2I2I!>J͐!!O"I=:IyGcG2I2I!>J͐!!O"I=:?J >J2I,++ No File Open ++ =bH, Library of Phone Numbers of Remote Systems!OH## ͛,H##B ͛,H G>$ O{+{+=> > > F#1H'H7,HIT any KEY to CONTINUE͈+MH͓+bH{+=: ž> ͝+ > ͝+rHbH, Current Settings ͘DD:ʴH͉ D,Terminal mode file buffer is :IH,in,active Unused portion of buffer is 7I, bytes E͂EjFͶFzB{+{+{+=*I믓o|gͽ+SRTELMABDJLOQRSVX01ABDJLOQRSVX01OOO4on. Sorry about that, we attempted to immediately correct this obviously awkward situation. Just a few people should be involved. rry about that, we attempted to immediately correct this obviously awkward situation. Just a few people should be inv who may have gotten that initial version that lasted less than one day should take DDT and check the following bytes. If different, change to those shown: 1782 1E 78 1BB2 1E 78 1C56 1E 78 1D51 1E B4 1D5F 06 01 1E4A CD 79 1E CD 41 1E C2 4A 1E C9 240A 06 05 2413 06 05 245E 06 05 2477 06 05 2496 06 05 2988 06 01 The original source code was only placed on Compuserve as MDM730.ASM. It w''