IMD 1.16: 28/05/2007 16:13:03 -FOG/UTL001         -FOG/UTL001CONFIGURDOC CRCK4 ASMVCRCK4 COM DISK DOC MDM7OS COM: MDMOS ASM$MODEM DOC7MODEM7 DOCyOSFIG COM OSMODN COM& !MODEM714COM&"#$MODEM714DOC%&CK-FIX COM'CK-FIX DOC(UMPIRE COM )INDEX DOC*WASH COM+,UMPIRE DOC - Modem 7 and the Osborne 01 T us th Mode progra wit you Osborn 0 pleas firs rea al th file marke [filename].DOC....thes file contai the pertinent commands and data for the Modem 7 program. Th ide her i t us th printe por a you mode port Th progra ha bee teste o th 0 usin Novatio Ca acousti couple an th D-Ca direc connec modem Ther shoul b n proble runnin eithe th Microconnectio   o th Auto-Ca mode a well Thi fi i temporar unti th mode por i finished!! Thi progra wil not..repea not. wor o the existing modem port without lots of modification!!! Th sourc file an al necessar documentatio wil b discussed in a file called INDEX.DOC read this file next!! I orde t hoo i th cabl fo mos modem yo wil ru th cabl i suc manne tha pi goe t pi 1 pi o th 0 goe t pi o th modem pi o; ; CRCK.ASM version 4.2B ; by Keith Petersen, W8SDZ ; (REVISED 4/27/ BY BRK) ; ;----> NOTE: MUST BE ASSEMBLED BY MAC <---- ; ;CRCK is a program to read any CP/M file and print ;a CYCLIC-REDUNDANCY-CHECK number based on the ;CCITT standard th 0 goe t pi o th mode an pi goe t pi 7 Thes pi configuration wor wit al th Novatio Modems Handshakin i no implemente du to the slow baud rates used. Speakin o bau rates...Mode wil automaticall se polynominal: ; X^16 + X^15 + X^13 + X^7 + X^4 + X^2 + X + 1 ; ;Useful for checking accuracy of file transfers. ;More accurate than a simple checksum. ; ;Optionally will write an output file to the default ;drive, listing the CRC's of all files ch th baud rate for your Osborne. Happy Modeming!!! Byron McKay Digital Deli Computer Store ecked in a ;single session. ; ;COMMANDS: CRCK [drive:] [F] ; ;Examples: ; CRCK MYFILE.ASM ;CHECK ONLY MYFILE.ASM ; CRCK *.ASM ;CHECK ALL .ASM FILES ; CRCK *.* F ;CHECK ALL FILES, MAKE FILE OF RESULTS ; ;Program updates/fixes (these are written in reverse ;order to minimize reading time to find latest update): ; ;4/27/81 ADDED SUM OF CRC PRINTOUT AT END OF EXECUTION (BRK) ; ;10/06/80 FIX TO ERASE TEMPORARY FILE WHEN OUTPUT FILE IS ; REQUESTED AND NAME NOT FOUND IN DIRE  CTORY. (KBP) ; ;10/05/80 FIX ABORT ROUTINE TO CHECK FOR FILE REQUEST ; AND TO CLOSE INCOMPLETE FILE BEFORE ERASING ; IT. ADDED TESTS FOR NO FILE NAME AND FILE ; READ ERROR. (KBP) ; ;10/04/80 ADD ROUTINE TO GIVE OPTION TO MAKE ; DISK FILE OBEXT EQU FCB+12 FCBRNO EQU FCB+32 FCB2 EQU BASE+6CH ; ;Program starts here ; ORG BASE+100H ; MACLIB SEQIO ;DEFINE MACRO LIBRARY USED ; CRCK: JMP BEGIN ;JUMP AROUND IDENTIFICATION DB 'CRCK.COM 4.2B 4/27/81' ; BEGIN: LXI H,0 ;GET STACK... SF CRC's. FIXED MFA ROUTINE ; SO FIRST-TIME FLAG NOW SHOWS IF NO FILE ; FOUND. (KBP) ; ;04/21/80 ADD MULTIPLE FILENAME FEATURE, PRINT ; NAME OF CURRENT FILE BEING READ, AND ; ALLOW OPERATOR ABORT. (KBP) ; ;08/20/79 FIX BUG IN READIT ROUTINEHLD SUM ; INIT CRC SUM COUNTER DAD SP ;POINTER SO WE CAN... SHLD STACK ;SAVE IT LXI SP,STACK ;INITIALIZE LOCAL STACK CALL CRLF ;TURN UP A NEW LINE LDA FCB+1 CPI ' ' ;SEE IF NAME THERE JNZ BEGIN2 ;YES, CONTINUE CALL ERXIT ;PRINT MSG, THEN EX WHICH ; SHOWED UP ONLY ON ALTCPM OPTION. (KBP) ; ;08/19/79 ADD CONDITIONAL ASSEMBLY FOR CP/M ; ON H8 OR TRS-80. (KBP) ; ;06/27/79 FIRST WRITTEN BY KEITH PETERSEN, W8SDZ ; ;Define true and false ; FALSE EQU 0 TRUE EQU NOT FALSE ; ;ConditiIT DB '++NO FILE NAME SPECIFIED++',CR,LF,'$' ; BEGIN2: CALL ILPRT ;PRINT: DB 'CRCK ver 4.2B',CR,LF DB 'CTL-S pauses, CTL-C aborts',CR,LF,0 LDA FCB2+1 ;GET OPTION STA FFLAG ;SAVE IT FOR LATER CPI 'F' ;FILE WANTED? JNZ AGAIN ;NO, SKIP FILE INonal assembly switches ; STDCPM EQU TRUE ;TRUE IS STANDARD CP/M ALTCPM EQU FALSE ;TRUE IS H8 OR TRS-80 NOSYS EQU FALSE ;TRUE IF SYS FILES NOT WANTED ; ;System equates ; BASE SET 0 IF ALTCPM BASE SET 4200H ENDIF ;ALTCPM ; ;Define write buffeIT ; ;'Declare' FCB for output file ;(temporarily named CRCKLIST.$$$) ; FILE OUTFILE,CRCFILE,,CRCKLIST,$$$,BSIZE ; AGAIN: LXI SP,STACK ;RE-INIT STACK POINTER CALL MFNAME ;SEARCH FOR NAMES JNC NAMTST ;ANOTHER FOUND, PRINT NAME LDA MFFLG1 ;NOTHr size (presently set for 8k) ; BSIZE EQU 8*1024 ;DISK WRITE BUFFER SIZE ; ;BDOS equates ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 CSTAT EQU 11 OPEN EQU 15 SRCHF EQU 17 SRCHN EQU 18 READ EQU 20 STDMA EQU 26 BDOS EQU BASE+5 FCB EQU BASE+5CH FCING FOUND, CHECK... ORA A ;... FIRST TIME FLAG JZ DONE ;AT LEAST ONE WAS FOUND CALL ABEXIT ;PRINT MSG, THEN EXIT DB '++FILE NOT FOUND++$' ; DONE: CALL ILPRT ;PRINT "SUM OF CRC:" DB CR,LF,' ---------------------> SUM OF CRCS = ',0 LDA SUM+1   ; GET MSB CALL HEXO MVI A,' ' CALL TYPE LDA SUM ; GET LSB CALL HEXO CALL CRLF LDA FFLAG ;SEE IF WE'RE MAKING FILE CPI 'F' JNZ DONE2 ;NO, SKIP THE FILE STUFF ; ;Close CRCKLIST.$$$ FINIS CRCFILE ; ;Build FCB for final name of CRCKLISTLL BDOS INR A JNZ RDINIT CALL ABEXIT DB '++OPEN FAILED++$' ; ;Initialize CRC to zero and set BUFAD to cause initial read RDINIT: LXI H,0 SHLD REM ;INIT REMAINDER TO ZERO LXI H,BASE+100H SHLD BUFAD ;INIT BUFFER ADRS ; ;This is the read lo.CRC FILE SETFILE,FINAL,,CRCKLIST,CRC ; ;Erase any existing old file ERASE FINAL ; ;Rename CRCKLIST.$$$ to CRCKLIST.CRC RENAME FINAL,CRCFILE ; ;Now exit to CP/M DONE2: CALL MSGEXIT ;PRINT DONE, THEN EXIT DB CR,LF,'DONE$' ; ;Test for names op READIT: LHLD BUFAD MOV A,H ;TIME TO READ? CPI BASE SHR 8 JZ NORD ;NO READ MVI C,CSTAT CALL BDOS ;CHECK FOR OPERATOR ABORT ORA A JZ READ2 ;NOTHING FROM OPERATOR MVI C,RDCON CALL BDOS ;GET CHARACTER INPUTTED CPI 'C'-40H ;CONTROL C? to ignore ; NAMTST: IF NOSYS LDA FCB+10 ;GET SYS ATTRIBUTE ANI 80H ;IS IT SYS? JNZ AGAIN ;YES, IGNORE THIS FILE ENDIF ;NOSYS ; ;Ignore files with .$$$ filetype (they are usually ;zero-length and clutter up our display. We also ;want to ignoJZ ABEXT2 ;YES EXIT ; READ2: LXI D,FCB MVI C,READ ;READ ANOTHER SECTOR OF FILE CALL BDOS ORA A ;CHECK RETURN CODE JNZ FINISH ;ERROR OR EOF LXI H,BASE+80H ;BUFFER LOCATION ; NORD: MOV A,M ;GET FILE CHARACTER STA MESS ;SAVE FOR DIVP INX H re our own CRCKLIST.$$$ temporary file). ; LXI H,FCB+9 ;POINT TO FILETYPE IN FCB CALL TSTBAD ;CHECK FOR .$$$ FILES JZ AGAIN ;IF ZERO FLAG, IGNORE THEM ; ;Move 8 characters from FCB+1 to FNAME LXI H,FCB+1 LXI D,FNAME LXI B,8 CALL MOVER ;Mo SHLD BUFAD ;UPDATE BUFFER ADR CALL DIVP ;CALCULATE NEW CRC JMP READIT ;GO READ MORE CHARACTERS ; FINISH: CPI 1 ;NORMAL END-OF-FILE? JNZ FILERR ;NO, IT WAS A READ ERROR LDA REM+1 ;GET MSP OF CRC CALL HEXO ;PRINT IT MVI A,' ' CALL TYPE ;TYPEve 3 characters from FCB+9 to FNAME+9 LXI H,FCB+9 LXI D,FNAME+9 LXI B,3 CALL MOVER ;Now print filename.type CALL ILPRT ;PRINT: DB CR,LF,'--> FILE: ' FNAME: DB 'XXXXXXXX.XXX',TAB,TAB,'CRC = ',0 ; ;Open the file LXI D,FCB MVI C,OPEN CA A SPACE LDA REM ;GET LSP OF CRC CALL HEXO ;PRINT IT CALL CRLF ;TURN UP NEW LINE LHLD REM ; GET PRESENT CRC XCHG LHLD SUM ; GET RUNNING SUM DAD D ; ADD THEM SHLD SUM ; SAVE BACK IN BUFFER JMP AGAIN ;SEE IF MORE FILES TO DO ; FILERR: CAL  L ABEXIT ;ABORT BECAUSE OF FILE READ ERROR DB '++FILE READ ERROR++$' ; ;--------------------------------------------- ;An 8080 routine for generating a CYCLIC- ;REDUNDANCY-CHECK. Character leaves that ;character in location REM. By Fred Gutman. ;Send carriage return, line feed to output ; CRLF: MVI A,CR ;CARRIAGE RETURN CALL TYPE MVI A,LF ;LINE FEED, FALL INTO 'TYPE' ; ;Send character in A register to output ; TYPE: PUSH B PUSH D PUSH H ANI 7FH ;STRIP PARITY BIT MOV E,A PUSH D From 'EDN' magazine, June 5, 1979 issue, page 84. ; DIVP: LHLD REM ;GET REMAINDER MOV A,H ANI 128 ;Q-BIT MASK PUSH PSW ;SAVE STATUS DAD H ;2 X R(X) LDA MESS ;MESSAGE BIT IN LSB ADD L MOV L,A POP PSW JZ QB2 ;IF Q-BIT IS ZERO ; QB: MOV  CALL WRFILE ;WRITE TO FILE IF REQUESTED POP D MVI C,WRCON ;SEND CHARACTER TO CONSOLE CALL BDOS POP H POP D POP B RET ; ;Write character in E register to output file ; WRFILE: LDA FFLAG ;GET FILE TRIGGER CPI 'F' ;IS IT SET? RNZ ;NO,A,H XRI 0A0H ;MS HALF OF GEN. POLY MOV H,A MOV A,L XRI 97H ;LS HALF OF GEN. POLY MOV L,A ; QB2: SHLD REM RET ;-------------------------------------------- ; ;Hex output ; HEXO: PUSH PSW ;SAVE FOR RIGHT DIGIT RAR ;RIGHT.. RAR ;..JUS RETURN MOV A,E ;GET CHARACTER BACK PUT CRCFILE ;SEND IT TO THE FILE RET ; ;Multi-file access subroutine. Allows processing ;of multiple files (i.e. *.ASM) from disk. This ;routine builds the proper name in the FCB each ;time it is called. CarTIFY.. RAR ;..LEFT.. RAR ;..DIGIT.. CALL NIBBL ;PRINT LEFT DIGIT POP PSW ;RESTORE RIGHT ; NIBBL: ANI 0FH ;ISOLATE DIGIT CPI 10 ;IS IS <10? JC ISNUM ;YES, NOT ALPHA ADI 7 ;ADD ALPHA BIAS ; ISNUM: ADI '0' ;MAKE PRINTABLE JMP TYPE ;PRINTry is set if no more names ;can be found. The routine is commented in Pseudo ;code, each Pseudo code statement is in <<...>> ; MFNAME: ;<> MVI C,STDMA LXI D,BASE+80H CALL BDOS XRA A STA FCBEXT STA FCBRNO ;<> LDA MFFLG1 ORA A JZ MFN01 ;<> ;Save orig request LXI H,FCB LXI D,MFREQ LXI B,12 CALL MOVER LDA FCB STA MFCUR ;SAVE DISK IN CURR FCB ;<> LXI H,MFREQ LXI D,FCB LXI B,12 CALL M  OVER MVI C,SRCHF LXI D,FCB CALL BDOS ;<> JMP MFN02 ; MFN01: ;<> LXI H,MFCUR LXI D,FCB LXI B,12 CALL MOVER MVI C,SRCHF LXI D,FCB CALL BDOS ;<> LXI H,MFREQ LXI D,FCB LXI B,12 Cte file to update CP/M's bit map, ;then erase it. ; ABEXIT: POP D ;GET MSG ADRS MVI C,PRINT CALL BDOS ;PRINT MSG ; ABEXT2: LDA FFLAG ;SEE IF WE ARE MAKING FILE CPI 'F' JNZ ABEXT3 ;NO FILE, SKIP FILE STUFF FINIS CRCFILE ;CLOSE INCOMPLETE FILEALL MOVER MVI C,SRCHN LXI D,FCB CALL BDOS ;<> MFN02: ;<> INR A STC RZ ;<> DCR A ANI 3 ADD A ADD A ADD A ADD A ADD A ADI 81H MOV L,A MVI H,BASE SHR 8 PUS ERASE CRCFILE ;ERASE INCOMPLETE FILE ; ABEXT3: CALL ERXIT ;PRINT MSG, EXIT DB CR,LF,CR,LF,'++ABORTED++$' ; ;Exit with message ; MSGEXIT:EQU $ ;EXIT W/"INFORMATIONAL" MSG ERXIT: POP D ;GET MSG MVI C,PRINT CALL BDOS ; ;Exit, restoring stackH H ;SAVE NAME POINTER LXI D,MFCUR+1 LXI B,11 CALL MOVER ;<> POP H LXI D,FCB+1 LXI B,11 CALL MOVER ;<> XRA A STA FCBEXT STA FCBRNO STA MFFLG1 ;TURN OFF 1ST TIME SW ;<> RET ;------------ and return to CCP ; EXIT: LHLD STACK SPHL RET ;TO CCP ; ;Program storage area ; SUM: DW 0 ;BUFFER FOR SUM OF CRC'S FFLAG: DB 0 ;FILE WRITE REQUEST FLAG REM: DW 0 ;CRC REMAINDER STORAGE MESS: DB 0 ;CRC MESSAGE CHAR GOES HERE MFFLG1: DB 1 ;1S------------------------------------ ; ;Check for .$$$ files ; TSTBAD: CALL TESTIT ;CHECK FIRST ONE FOR '$' RNZ ;NO, RETURN CALL TESTIT ;CHECK SECOND ONE RNZ ;NO, RETURN ;FALL INTO TESTIT TO CHECK THIRD ; TESTIT: MOV A,M ANI 7FH ;STRIP T TIME SWITCH MFREQ: DS 12 ;REQUESTED NAME MFCUR: DS 12 ;CURRENT NAME BUFAD: DS 2 ;READ BUFFER ADDRESS DS 60 ;STACK AREA STACK: EQU $ OLDSTK: DS 2 ;OLD STACK POINTER SAVED HERE ; ;Define location of file write buffer BUFFERS:EQU $ ; END CRCK ATTRIBUTE CPI '$' ;CHECK FOR $ FILETYPE INX H RET ; ;Move (BC) bytes from (HL) to (DE) ; MOVER: MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ; ;Aborted - print reason. If making output file, ;close the incomple  \ DISK FULL: CRCFILE$!"**#"ɯ22! "!"<ƒ k\ NO DIR SPACE: CRCFILE$1_ҋ:ʩ͊++FILE NOT FOUND++$ͧ ---------------------> SUM OF CRCS = :͐> ͻ:͐ʹ:F*}">ͷ<5 5 CANNOT CLOSE CRCFILE$YCRCKLISTCRC!"8x w# i!8d DONE$!epʃ!]!eͧ --> FILE: XXXXXXXX.XXX CRC = \<͊++OPEN FAILED++$!"!"!*!|' ʐ\5!~2#"!s\:͐> ͻ:͐ʹ**"Ã͊++FILE READ ERROR++$*|):oʌ|g}o"͙ ڢ0û~ͻ#~¨> ͻ> _:F{ͷ2h2|:!\  :\2! \ \A!\ \! \ \<7=Ɓo& ] 2h2|2xx~$#~# x :F*}¤">ͷ˜<  CANNOT CLOSE CRCFILE$ ++ABORTED++$ *_CRCK.COM 4.2B 4/27/81!"9"_1_ʹ:] P++NO FILE NAME SPECIFIED++ $ͧCRCK ver 4.2B CTL-S pauses, CTL-C aborts :m2FƒôCRCKLIST$$$ ͖ Ăy0 ͖a 9**}|)!"*{z**" # x :F*}¤">ͷ˜<  CANNOT CLOSE CRCFILE$ ++ABORTED++$ *_  and examples are available. Place MODEM714.COM in drive A. At the A> prompt, type MODEM714 When reading the documentation, substitute the command MODEM714 in place of MODEM. OSMODN appears to be the same as MODEM714; however, its .COM file is not identical. Since a complete test of the differences between each program was not possible, I decided to include both. Run OSMODN in the same manner as MODEM714. OSMODN and OSFIG were obtained from the Osborne Users Group (OUG) of th DISK.DOC -FOG/UTL.001 First Osborne Group (FOG) Utilities Disk This disk contains the MODEM7 terminal program and related files previously found on -FOG.001. The .DOC files CONFIGUR, INDEX, MODEe Washington D.C. area. OSFIG configures RS232 transmission speed and protocol for the current operating session. Place OSFIG.COM in drive A. At the A> prompt, type OSFIG The program is self-prompting. CRCK4, previously found on -FOG.003M, & MODEM7 describe use of MODEM7. They should be read in the order listed. When reading the documentation, substitute MDM7OS (MODEM7-Osborne) where the command MODEM or MODEM7 is used. To run MODEM7, place MDM7OS.COM in drive A. At the A> p, and CK-FIX, from -CPMUG.040, permit verification of file transfer activities. Refer to their .DOC files. UMPIRE, previously found on -FOG.016, provides hardware diagnostics for the Osborne. Refer to its .DOC file. WASH (version 1.0) is a rompt, type (for example) MDM7OS T.300 MODEM714 is another version of MODEM7. Its origin is unclear to me, but D. Slaughter has provided good documentation in MODEM714.DOC. I suspect he also configured the program. Built-in documentation versatile file maintenance utility previously found on -FOG.016. It is self- prompting. Place WASH.COM in drive A. At the A> prompt, type WASH Also, refer to -FOG/UTL.005. Jim Woolley FOG Disk Librari  an August, 1982 A> prompt, type WASH Also, refer to -FOG/UTL.005. Jim Woolley FOG Disk Librari5!%-âáu *#*s#r"" "" "&". SETUP FOR RS232 PORT ON OSBORN O-1 $U~1ʺ3ʸ ʸ7V*.<:*2*:*  !9"t1t MODEM7 as of 12/18/80 Originally Written by Ward Christensen Revisions by Mark M. Zeiger, Jim Mills THIS VERSION OF 8/15/81 HAS BEEN CUT UP TO SIMPLIFY INTERFACE TO SIMPLE MODEMS $ q͸>2 /2 ̈́: X>2: G  e:2>2:EĖ :>B2>ñ:] ZP2a͡2'vͤͻOB>añ:‰>2ͪ Ҕ>B2ñ:] Úl ͩ:: FILE OPEN, READY TO RECEIVE O͡pgpͳñ: AWAITING M͸>2   : ET:S RoD*: z:] Y>2 /2 zͩvv!'">2 rʾ}*zG̠ʾ»: ʾ:/2þz ze:w#"G:x/  >:e:=NAME NAK PZ>!5/ *\ ͫ"6 >7 !]~:~e;v L #> >:XQ;ʣ >u:ʖ CHECKSUM ERROR PZ>7 >!\: AWAITING FILE NAME   7!]; : TIME OUzz:>W2W2̀͒!'Q:w#eQ:w#e>:d gt xg 6#}l&)>o'ͼvͼ+|•v!v!\v ͫ!!l):H kuuT RECEIVING FILENAME S } > w:~e>#}S :Xy;} !\:t CHECKSUM ERROR  t >N;d7>2E2 !&"H !\ :f³ *\ ͫ"!4ó !5§ !&":A>@2!6!GN!H  ++FILE DOES NOT EXIST++ TYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME: }͇eXAR~ʚ͇ʚ}  ++FILE TRANSFER COMPLETED++   ++FILE TRANSFER UNSUCCESSFUL++   ++ TRANSFER CA 6 !GF#D ~ #D ~  "+#D ~ $ :<2#D ~ 6 $ 6 *~ ] #P #~ ] "!p \ȇ!o ~  #~+] ͫ!e~w#~w\!\l ͫ!u6B#6A#6Kl!l6\:\< NCELLED ++ 6# 6 #6#!  ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: FXF!!~ͦrʠ}#Œ§er}G̠e2h: K >2 !\  :\2 ! \ \ ! \ \! \ \<7ˆ 2 =Ɓo&  ] 2h2|~# x ɯ2': AWAITING #:&<͐X;ښ   d 7G:! :9 x͐ H RCD, NOT SOH ;9 >:'<2' :` :f ͧ ͳ++ UNABLE TO RECEIVE BLOCK -- ABORTING ++ $:ʨ :9 ++ TIMEOUT ++ :'͐X9 ;ښ W;ښ / : :9 ++ BAD SECTOR # I#::#:,##O':@:Z AWAITING INITIAL NAK N;ddZ*"v""k]2  ʨ!   6Ë#—-:2::!]ͫͫ  TRANSFERRED :\2!\:N HDR 9 z2%>2,!;ښ w,Q2,;ښ H:%G:&j:ʑ SEND # :&͐X>:&:&/>2,!~,®2,y͸0dG:x͐ H RCD, NOT ACK :'<2' :2\!%ͫ: o>2E2 / 2:5:U  ALL TRANSFERS COMPLETED : «  ++PRESS RETURN TO DISCONNECT++  \  ++DISCONNECTED++ ʹ5:Xz!6:e > 2e!e  ++ INVALID BAUD : ͧ7CAN'T SEND SECTOR -- ABORTING $: TIMEOUT ON ACK :Z:r}1t;g>;t>  ROUTINE CANCELLED >B2ë:&<2&:\< FILES EXISTS -- TYPE 'Y' TO ERASE: }e͇YX\ RATE ++ 1t!l\ͫ2|2h K K K <K>(K͐>)K_> e> eOa{_͙ ڢ0e:°<ɯ2' MULTIPLE ERRORS ENCOUNTERED. TYPE Q TO QUIT, R TO RETRY: }X͇ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $\HeX\<CAN'T CLOSE FILE$:+=2+*)ͩ"):(7\RQ§~K#   :«>Q2d: ʂ:w ʂ  OUTPUT FILE IS STILL OPEN, WRITE IT OUT (Y/N) ?͍X}͇OYʟNeF!\&=5++ FILE READ ERROR ++$! y;>2(y2+!")*)!ͩ"):+<2+:+O\›! p2+!")ERROR WRITING FILE $  :xG:N7 O:::,̈́:]EMGTʃSAR(:A  ++Bad Option++ G:m  Re-enter PRIMARY option and file name only: F:m š>2>2 / >2  Enter New Baudrate: !e6} Xø0ڽ:ҽwOe#ý!%ͫ!  ͫ>2 /2E:  ”  WRT - Write file to disk (from terminal mode) DEL - Erase present file (from terminal mode) RET - Return to terminal mode with no loss of data XPR - Toggle expert mode (Menu on/off) DIR - List directory (may specify drive) CPMl2:m ̘Ħ2ʇͲ~w~w#Zͫͫ  | :<2Xʔ. NOT FOUNDX>? !w#Ÿ!m ͫ_!:@A2  DRIVE  - Exit to CP/M S - Send CP/M file R - Receive CP/M file T - Terminal mode (optional file name) E - Terminal mode with echo  DEFAULT DRIVE: Ae  Command: FXHͤCPM5ͤDIR-ͤRET*zͤWRTXADOQRSVTADOQRSVTB INVALID OPTION  ++BAD LIBRARY NUMBER CALLED++ $ͤXPR҉ͤDEL3:H!͓Ô:w vͼ>2 /2 !v: :w *y͒ͳ>2 /2 !v:/2F#ʞ”7SRTE~ʽµ#æ>#·7#͜կͬ ʍ  ?Qʀ G#4+~#vpx##G~w*+xF6 /x4> >>#> > G>#> > xj>5> > > > F##> w#¥ʯa{_*** Or#^#6 ͯ͝ ^ 0 ͯ ^ @0 ^ ͯ͝ ^ ͯ# 6# > ͖>͖ > ͖>͖w#–:­_@w# . w#ï~*#~*#6?#F!\!:  ; --- THIS IS AN OVERLAY TO THE FRONT TO THE MODEM --- ; PROGRAM TO ALLOW EASY CHANGING THE MODEM ; INTERFACE SECTION. ; ; --- THIS VERSION FOR RS232C PORT ON OSBORN O-1 COMPUTER --- ; THIS VERSION WILL ALLOW SELECTION OF 300 OR 1200 BAUD ; WITH THEOF THE MODEM ROUTINES MAY ONLY CHANGE --- ; THE A-REGISTER AND THE FLAGS. NO OTHER ; REGISTERS MAY BE CHANGED. ; ; --- INPUT DATA FROM MODEM --- ; MXIN CALL 0 ; PATCHED TO CALL INPUT ROUTINE RET ; ; --- OUTPUT DATA TO MODEM --- ; MXOUT CALL 0  USUAL BAUDRATE COMMAND STRING ; ;THESE ROUTINES ARE AT THE BEGINNING OF THE PROGRAM SO ;THEY CAN BE PATCHED BY A MONITER WITHOUT RE-ASSEMBLING ;THE PROGRAM. FALSE EQU 0 TRUE EQU 0FFH ; ORG 104H ; IMSAIBYTE DB FALSE ;true=imsai front panel ; PATCHED TO CALL OUTPUT ROUTINE RET ; ; --- TEST IF DATA IS AVAILABLE FROM MODEM --- ; MXISTAT CALL 0 ; PATCHED TO CALL STATUS ROUTINE ANI MODRCVB CPI MODRCVR RET ; RETURN WITH Z SET IF DATA IS READY ; ; --- TEST MODEM IS READY TO BE SENT  FASTCLK DB FALSE ;4 MHz or greater BAKUPBYTE DB TRUE ;true=make .BAK file XPRFLG DB FALSE ;true=no menu, false=print menu ; ; --- CUSTOM MODEM DRIVER --- ; JMP MXINIT ; INIT MODEM ROUTINES (NOT HARDWARE) IN$MODDATP JMP MXIN ; GET DATA FROM NEXT CHAR. --- ; MXOSTAT CALL 0 ; PATCHED TO CALL STATUS ROUTINE ANI MODSNDB CPI MODSNDR RET ; RETURN WITH Z SET IF MODEM IS READY ; ; --- INIT MODEM ROUTINES (NOT HARDWARE) --- ; THIS ROUTINE NEED NOT PRESERVE ANY ; OF THE REGISTERS. ; MXINMODEM OUT$MODDATP JMP MXOUT ; OUTPUT DATA TO MODEM IN$STAT JMP MXISTAT ; TEST FOR INPUT DATA OUT$STAT JMP MXOSTAT ; TEST IF OK TO OUTPUT DATA SET$BAUD JMP MXSETBAUD ; SETUP BAUDRATE JMP$INITMOD JMP MXINITH ; INIT MODEM HARDWARE ; MODCTLP EQU 2A00H IT LXI D,MSG ; POINT TO MESSAGE MVI C,9 CALL 05H ; USE BDOS CALL TO PRINT STRING ; LHLD 6 ; FIND TOP OF USER RAM LXI D,-100H ; STEP DOWN A LITTLE DAD D PUSH H ; SAVE IT LXI D,BDJ ; POINT TO SOURCE OF CODE LXI B,CDLEN+2 ; SET LENGTH OF CODE;ALTERNATE PAGE DATA PORT MODSNDB EQU 02H ;YOUR BIT TO TEST FOR SEND MODSNDR EQU 02H ;YOUR VALUE WHEN READY MODRCVB EQU 01H ;YOUR BIT TO TEST FOR RECEIVE MODRCVR EQU 01H ;YOUR VALUE WHEN READY MODDATP EQU 2A01H ;ALTERNATE PAGE DATA PORT ; ; --- ALL  XCHG DB 0EDH,0B0H ; --- FAKE LDIR ; LHLD 6 ; GET BDOS ADDRESS BACK POP D PUSH D INX D ; POINT TO ADDRESS POSITION XCHG MOV M,E ; PATCH IN ADDRESS INX H MOV M,D ; POP H SHLD 6 ; TRANSFER BDOS JUMP ; LXI D,OSIN-BDJ DAD D ; COM  PUTE ADDRESS OF OSIN ROUTINE SHLD MXIN+1 ; PATCH CALL LXI D,OSOUT-OSIN DAD D SHLD MXOUT+1 ; PATCH CALL LXI D,OSTAT-OSOUT DAD D SHLD MXISTAT+1 SHLD MXOSTAT+1 RET ; CR EQU 0DH LF EQU 0AH MSG: DB CR,LF,CR,LF DB ' SETUP FOR RS232 PORT O BDOS ; BDJ JMP 0 ; THIS GETS PATCHED TO JUMP TO BDOS ENTRY ; OSIN DI ; DISABLE INTERRUPTS OUT 0 ; SWITCH TO ALTERNATE PAGE LDA MODDATP ; GET DATA BYTE OUT 1 ; SWITCH BACK PAGES EI ; RE-ENABLE INTERRUPTS RET ; OSOUT DI ; DISABLE INTERRUPN OSBORN O-1' DB CR,LF,CR,LF,'$' ; ; --- INIT MODEM HARDWARE IF NECESSARY --- ; THIS ROUTINE MAY BE CALLED SEVERAL TIMES, SO BE ; SURE THAT THIS WILL NOT HANG UP THE HARDWARE. ; MXINITH RET ; ; --- SET HARDWARE BAUDRATE FROM STRING POINTED TO BY-TS OUT 0 ; SWITCH TO ALTERNATE PAGE STA MODDATP ; SEND DATA BYTE OUT 1 ; SWITCH BACK PAGES EI ; RE-ENABLE INTERRUPTS RET ; OSTAT DI ; DISABLE INTERRUPTS OUT 0 ; SWITCH TO ALTERNATE PAGE LDA MODCTLP ; GET STATUS BYTE OUT 1 ; SWITCH BACK -- ; (H,L). IF THE STRING STARTS WITH AN ASCII SPACE, ; SET THE BAUDRATE TO THE DEFAULT VALUE. IF THE ; REQUEST IS NOT VALID, RETURN WITH CARRY SET. ; ; --- THIS WILL EITHER SETUP FOR 300 OR 1200 BAUD, 300 IF ERROR MXSETBAUD: PUSH B MVI C,55H ;PAGES EI ; RE-ENABLE INTERRUPTS RET CDLEN EQU $-BDJ ; LENGTH OF CODE TO COPY ; ; ORG 300H ; START OF PROGRAM ; ----------------------------------------------------  FOR 1200 BAUD MOV A,M ; GET FIRST STRING CHAR. CPI '1' ; IF 1200 BAUD JZ STBAUD CPI '3' ; TEST IF 300 JZ SET300 CPI ' ' ; IF SPACE (SET TO DEFAULT) JZ SET300 POP B STC ; OTHERWISE ERROR RET SET300: MVI C,56H ; FOR 300 BAUD STBAUD PUSH H PUSH D CALL OSET POP D POP H POP B XRA A ; CLEAR CARRY RET ; OSET: LHLD 1 ; GET BIOS+3 ADDRESS MVI L,3CH ; SPECIAL OSBORN ROUTINE PCHL ; BRANCH TO IT ; ; ; --- ROUTINES THAT GET COPIED UP TO TOP OF MEMORY --- ; JUST UNDER THE   accomplished via a block mode, with headers and checksums to ensure data validity. Automatic retry, up to 10 times, is attempted for every sector transmitted. The user is given an option to quit, or retry after 10 consecutive errors occur. Also supported is a terminal mode which allows the computer to function as a terminal to a time sharing system, CBBS, etc, and a similar program, but which echos all received characters, such that two people running MODEM can com- municate keyboard-to-keyboard, one running in terminal mode, and one running in echo mode. This is frequently done to "test the line" or to see how high a baud rate can be supported before beginning file transfers. Planned future enhancements include the ability to place data received (while in terminal mode) into memory, and write it out to a disk file. As "delivered" the program supports a PMMI S-100 modem at primary address 0C0H, and will run unmodified if this is what you have. Keith Peterson added equates for the DOCUMENTATION ON THE MODEM PROGRAM AS OF 01/12/80 V4 ---------------- MODEM.ASM is a multi-function communications program for use with the CP/M operating system. Its primary function is the transfer of files between CP/M systems. The transfer is Hayes, and a serial modem. ---------------- The program is named MODEM4.ASM (or COM) on the disk, to indicate that it is an extension of the MODEM.ASM which was distributed on the CP/M user's group disk 25, and the MODEM2 which is/was distribut  ed by PMMI itself. It is expected that the user will rename it back to MODEM once any earlier versions of this program are erased. COMMAND FORMAT: MODEM option or MODEM option.baudrate or MODEM option fn.ft or MODEM option.baudrate fn.ft  T, C, (or Q) may be followed by the following if your MODEM is capable of supporting these: (the program currently supports the PMMI). If anyone adds the IDS or HAYES, please send me a list of equates and changes. (address in MODEM.asm file)  "option" consists of a single character PRIMARY OPTION, and 0, 1, or more characters of SECONDARY OPTIONS. fn.ft is the filename to be received or sent PRIMARY OPTIONS: S: To send a file R: To receive a file T: Terminal - i.e. the system beO: go to originate mode A: go to answer mode D: disconnect (otherwise, keeps the line) note 'O' and 'A' are n-o-t defaulted (i.e. send to originate), etc. When using MODEM to send files under a remote console program, use the Q option, but O-M-ing communicated with must echo E: Terminal mode but with echo - this would be used when 2 people using the MODEM program are talking keyboard to keyboard - one uses MODEM t, the other, MODEM E. D: Disconnect the phone (if your MODEM supports this)I-T the O or A - this will leave the modem (if PMMI) in the same mode as before. Otherwise, the ability of the modem to hang up on loss of carrier will be lost, since the MODEM program grabs the line and doesn't leave it able to hang up on loss  H: Help (prints usage documentation) X: Prints usage examples SUB-OPTIONS: Q: A 'Q' may be appended to either 'S' or 'R' to transfer 'quietly' i.e. w/ no console I/O. This is for several purposes: 1) if you have a slow terminal (such of carrier. This is because MODEM was written as an ATTENDED program, and only by proper use will work adequately under a remote console program (such as BYE). Ex: MODEM sq.600 b:foo.asm Note the baud rate defaults to 300, so if you want tas a tty), you must use the q option; 2) if you are using this program on a "remote" CP/M system, in which the "remote console" is the same as the line for sending a file, then you must use MODEM sq or rq to suppress the console msgs. S, R,o transfer at another rate, don't forget the .600 or whatever. R: Show characters as received S: Show characters as sent V: View the file (suppresses non-error status messages) T: Go to terminal mode after file transfer E: Go to echo mode aft  er file transfer D: Disconnect after program execution EXAMPLES: send 'test.fil' in originate mode, 'quietly', disconnect after transfer MODEM SOQD test.fil receive 'test.fil' in answer mode at 450 baud, and don't disconnect after. MOnd wait for ack time to 8 sec. for slower disk systems. Add control-X abort so receiving station can stop send. Add abort test to send and receive for local cancel. By Keith Petersen, W8SDZ 12/03/78 Add 16-sector buffer for less disk activity. DEM RA.450 test.fil Suppose you have sent 1 or more files already, did not 'D' (disconnect) and want to send or receive another, just: MODEM S test.fil (note this defaults to 300, so s.450 or whatever if that is the rate you were going at) This version typed by keith petersen, from information supplied by Jim Bell, K4FUP 01/05/79 Correct error in receive file routine which did 'ACK' when sector number was wrong. Add wait routine to hold sending of file until receive end is ready. After transferring the last file, use the D sub-option (MODEM sod.450 name) or re-type the MODEM command with the D primary option MODEM D to disconnect the phone. ------------------------------------------------ In the process of re-writin by Keith Petersen, W8SDZ 02/19/79 Change receive wait time to 8 seconds to allow for slower disk systems. Climinate multiple cancel on aborting. Add conditional assembly for clock frequency > 2.0 mhz. by Keith Petersen 04/11/79 Change send,g the MODEM program for the variable-baud-rate PMMI (and adding the functions for answer, orig, disconnect, view, etc), the following "historical" prolog was deleted. (..and the file was > 32K). It is reproduced here to give credit where credit due:  receive, and eof ack wait times to 10 seconds to allow for slower disk systems. Change send wait time to 80 seconds to allow receiving end more time to come up. By Keith Petersen, W8SDZ. 04/23/79 By Ward Christensen: put in PMMI variable baud  09/23/77 First written by Ward Christensen 09/26/77 Add error$limit equ (WLC) 10/01/77 Change exit$char from ctl-c to ctl-e for use w/timesharing computers (WLC) 10/10/77 Correct to send any length file (WLC) 11/20/78 Change serate select, originate, answer, quiet, disconnect; delete sense sw codes; add view, help, examples, etc. Change garbage char collection to "in" instr. not "recv". Add quit/retry from 12/78 vers which Keith didn't have. Un-do the 1/5/79 correction,    allowing the receiver to ack if a duplicate block is sent, such as might happen if the receiver's original ack was garbaged. 04/25/79 From Keith Petersen W8SDZ: add technique of de- leting garbage characters to avoid problems with line glitches.  04/28/79 Re-write program, making it more structured, and better commented. Ward C.  04/25/79 From Keith Petersen W8SDZ: add technique of de- leting garbage characters to avoid problems with line glitches.  CP/M MODEM PROGRAM DOCUMENTATION by Mark M. Zeiger and James K. Mills 11/04/80 This program uses the file transfer routines written by Ward Christensen in his CP/M file transfer program (V2.0 as of 8/6/79) and is  compatable with his program in single file transfer mode. Multi-file transfers are only possible between two systems running the program described below. This program has three functions: 1. Communication 2. Program transfer 3. Modem control (for PMMI Modem) COMMUNICATIONS The program may emulate a terminal or echo data back to sender (act as a computer). Terminal Mode - 'T' Option The terminal mode may be called with or without a file name. If a file is specified (it should be a new file), then anything received by the modem may be saved in memory and later written on disk. The save feature is toggled ON/OFF by Control-Y. On an IMSAI   the front panel LEDs will indicated that memory save is toggled on by showing the binary value of the ASCII character received. For those with no front panel, a colon (:) will be printed at the beginning of each line wheautomatically since there will be times when you leave terminal mode and then decide to re-enter. This may be done while in the Menu by using the 'RET' command. You may re-enter Terminal mode and save in the same file as mn memory save is active. The colon will not be transmitted over the modem nor will it be saved in memory. If a file is not specified, then memory save can not be activated. If the memory buffer iany times as you wish as long as you have not closed the file with the 'WRT' command. While in Terminal mode, Control-T will put you in File Transfer mode. This will allow you to send the contents of an s full (the buffer is from the top of the program to the bottom of BDOS), the contents are automatically written to disk (but the file is not yet closed). Communications may then continue with the buff ASCII file over the modem. This routine does no error checking and there are no protocols specified between this program and the receiving computer other than that it should be ready to receive data via the moder reinitialized. The computer with which you are communicating must accept the X-ON and X-OFF (Control-Q and Control-S) conventions or data will be lost. When communications are over, use Control-E to exiem. Control-X will cancel the transfer. Computer mode - 'E' Option This mode echos data received by other computer. Only one computer may be in this mode at one time. There is no save feature in t from the Terminal mode and enter the Menu. The file to which you are writing must then be closed by using the 'WRT' command. If this is not done, all data will be lost. I decided not to close the file this mode. Useful if you wish to communicate with somebody running the terminal portion of the program. File transfer - 'S' and 'R' Options These features are the same as in the CP/M Modem program written by Ward Ch  ristensen except that upon completion of the transfer, control returns to the Menu unless the secondary 'T' option has been selected. In the latter case, control returns to Terminal mode. Remember that if you are operating acreate a backup file if a file on the disk has the same name as the file being received in multi-file transfer (see MODEM.SET). If this byte is set to 0FFH, a backup file will be created. If it is zero the file on the di remote computer using a timesharing program (such as Ward Christensen's "BYE"), the remote should be instructed to send or receive in the quiet (Q) mode as a secondary option. Examples of commask will be deleted before the new file is received. If you are running CP/M 2 and a file on the disk is designated R/O or SYS, a backup will be created whether the byte at 106H is set or not. Be careful - if you nds for sending and receiving are listed below. Multi-file transfers Using the B (batch) secondary option, more than one file and ambiguous filenames may be transferred. To send files, use the primary optioare running CP/M 1 and the drive on which you are receiving has an R/O file with the same name created by CP/M 2, the R/O file can not be accessed (found, changed, erased, etc.) by CP/M 1. You will therefore have two fn "S" and the secondary option "B" (along with any other secondary options and baudrate). To receive the files being sent, use the "R" primary option and the "B" secondary option. Files may not be named since fiiles with the same name when you are running CP/M 2. To fix this problem, use CP/M 1 to change the name of the file that is not R/O. Then use CP/M 2 to do what you want with the R/O file. Examples: Thelenames are sent by the sending program, but a disk drive may be specified (or else the files are written to the default drive). Backup option There is a byte at the beginning of the program (106H) that will  sender enters SBOT.600 B:*.COM to send all the COM files on disk B. Also specified were originate mode 600 baud (PMMI modem) and return to terminal mode when done. The receiver enters RBA.600 to receive all   the files being sent on the default drive (also answer mode at 600 baud for PMMI). The sender enters the command SB.600 ASM.COM *.HEX B:M*.* which will send ASM.COM from the default drive, all the HEX  (but NOT the secondary options). If you want multi-file transfers, then the "R" option does not need a filename. RET - You may also enter terminal mode using the 'RET' command, but no data will be saved since  files from the default drive, and all the files starting with "M" from the B drive. [note that neither 'A' or 'O' were specified: default is to whatever mode the PMMI is in currently] Multifile transfers may only be donea file may not be named with 'RET'. Use the 'RET' command to RE-ENTER Terminal mode after it has first been entered with the 'T' option. If this is done, you will still be able to save the communications if you  from the menu. It may not be specified when the MODEM program is called. In other words A>MODEM SAB *.COM will result in an INVALID OPTION error message. Return to Menu - 'M' option When asked to sel were doing so before you exitted the terminal mode. WRT - The 'WRT' command must be used after leaving Terminal mode. This writes the last buffer to disk and closes the file. Failure to use the 'WRT' command results ect an option, 'M' returns to Menu. The MENU If the Modem program is entered with no option, the Menu is called. The Menu gives the choice of selecting the standard options as defined by Ward Christensen (T, E, R, in loss of all data and a file of length zero. DEL - The 'DEL' command erases the most recent file accessed in Terminal mode. Useful if you decide after communications that you don't want to save information just gand S). The Terminal mode has been greatly expanded as described above. The "R" and "S" commands must be called with a filename or you will be required to enter the primary command (S or R) and the filename againathered. CPM - The 'CPM' command reboots and returns to CP/M. XPR - The 'XPR' command is a toggle which causes the menu to be printed or not printed. Initially the menu is on unless the program is called with the "X" o  ption (ie. A>MODEM X ). DIR - The 'DIR' command lists the directory of a CP/M disk. A drive may be specified (ie. DIR B:) or the default drive will be listed. After the directory is listed, the menu will not be pf number. If a connection to a computer is established, you will be able to select options (usually TO.xxx). If no connection is made after 15 seconds, [changed to 25 seconds in distributed version] then you will rinted whether XPR mode is on or off. If XPR mode is on and you wish to see the menu, hit return. FOR THE PMMI MODEM DSC - To disconnect you must use the 'DSC' command in the Menu. The original secondary options for the PMMI  be informed and be given the option of redialing or returning to the menu. The dial routine may also be specified when the Modem program is called by entering A>MODEM C. No secondary options will be accepted whModem (as defined by Ward Christensen) are "A" (answer mode), "O" (originate mode), and baudrate selection. See examples below. Once answer or originate and a baudrate have been selected (ie. SO.450 NAME.en the "C" option is used. [Note: you cannot type: CAL 312-545-8086 -- well, you can, but the number will be ignored and you will have to retype it when the program asks for it -- in the latest version (11/4/80) there is a 'library' feTYP), any subsequent options will use the same mode and buadrate. If you want to change the baudrate, it may be done without changing the mode. For instance, if you are in originate mode at 450 baud, then the command ature such as in DIAL.ASM. To use the CAL function, type CAL and a return at the menu. You will see a message 'WAITING FOR DIAL TONE' then a lot of stuff about entering the number. At this point you may type in a number, or you may type 'R.600 NAME.TYP' will allow you to receive a file at 600 baud in ORIGINATE mode. If you want to change the ans/orig mode, then you MUST select the baudrate again or it will default to 300. CAL - Allows dialing o a letter which will designate one of the library numbers (which you must insert at assembly time). ^B - Control-B while in Terminal (or Echo) mode allows change of baudrate "on-the-fly." A carriage return gives 300 baud; all    other rates (110-600) must be explicitely stated. LISTING OF COMMANDS AND OPTIONS Primary options S - send a CP/M file (must specify file/s) R - receive a CP/M file (must name file unless B sec opt used) T - tbaud, ans mode, view what is being received, return to terminal mode RART.600 B:fn.ft Send all COM files, no messages on console, same baud and mode as last transfer erminal mode (specify file if memory save wanted) E - terminal mode with echo M - return to menu X - used only when program is called to initially toggle menu off Secondary options B - multi-file mo SBQ *.COM Send two files from two different drives SB A:fn1.ft1 B:fn2.ft2 Receive files being sent by above on drive A (baudrate must be same and modes opposite) de for sending and receiving files T - return to terminal mode after transfer (memory save off) R - view what is received in file transfer S - view what is being sent in file transfer V - view what is being sent or recei RB A: Terminal mode, save communication in file, 300 baud (default rate), originate mode (in terminal must type CTRL-Y to start save, in menu must type "WRT" to close file) ved in file transfer T - Terminal mode (used with remotely controlled computer) O - originate mode (PMMI modem) A - answer mode (PMMI modem) .xxx - baud rate xxx (xxx = 110-600 PMMI modem) EXAMPLES (fn = filen TO fn.ft ASSEMBLING THE PROGRAM You must use Digital Researches' MAC to assemble the program. The files required are MODEM.ASM and MODEM.LIB. MACROS.LIB does not actually contain any macros in the trueame, ft = filetype) Send file, originate mode, 300 baud SO fn.ft Send another file, same mode and baudrate S fn.ft Receive file on B drive, 600  sense, but it does contain routines that are necessary for the program to run (MFACCESS however does use nested macros as real macros). If you have a PMMI and an IMSAI, you may assemble the file as is. If you do not   have an IMSAI with a front panel, change IMSAIBYTE to 'FALSE' (near the beginning of the program). If you wish another character instead of the colon to indicate when memory save is active, change "MVI A,':' " to  You should also note the comment in the INBUFF routine near the end of the program. Any problems or bugs, please call me: Or latest revisor: Mark M. Zeiger James K. Mills 198-01B 67th Ave. 824 Jo "MVI A,'char' " in the "TERM" routine where 'char' is the printing character you would like at the beginning of each line when memory save is active. If you do not have a PMMI, change the byte to 'FALSE' and prdan Place Flushing, N.Y. 11365 Rockford, IL 61108 (212) 454-6985 (815) 398-0579 ems or bugs, please call me: Or latest revisor: Mark M. Zeiger James K. Mills 198-01B 67th Ave. 824 Jout your modem status and data ports in the appropriate equates. The labels 'MODRCVR' and 'MODSNDR' should be the same as MODRCVB and MODSNDB (the bits tested) if your UART uses positive logic (JZ) and should be zero if your UART uses negative logic. If you have a Z-80 (or maybe a fast 8085), change the 'FASTCLK' byte to 'TRUE'. If any port or modem initialization must be done, put the initialization routine in the area labeled INITMOD (replacing the PMMI initialization routine). See MODEM.SET for more details. If you have a D.C. Hayes Modem, you may incorporate the routines from MODEM.ASM V2.0 (as of 8/6/79).    2*s!@ . F>[>  12>% Sz4Y  1''G:@2>~_Y>@:@{   2 :=2 Osborne-1 Users Group $ Washington DC Area$ Serial Port Configuration$and Intelligent Terminal Program Version 1.0$ by $ Jack Bicer$ Baud Rate Selection Menu$ 1. 19,200 Baud$ 2. 1,200 Baud$ 3. 300 Baud$*** ENTER YOUR SELECTION ***$ Word Length, Parity, Stop Bit Selection Menu$ 1. 7 bits + Even Parity + 2 Stop Bits$ 2. 7 " + Odd " + 2 " " $ 3. 7 " + Even " + 1 " "$ 4. 7 " + Odd " + 1 " "$ 5. 8 " + No "  + 2 " "$ 6. 8 " + No " + 1 " "$ 7. 8 " + Even " + 1 " "$ 8. 8 " + Odd " + 1 " "$*** DO YOU WISH TO MAKE ANY CHANGES ? ***$*** TERMINAL MODE ? ***$You are in the Intelligent Terminal Mode$ ^L Load !9" 1 MODEM ver 2.16 $ !#@K  :]Hb Xʌ&  @@: CETD SR In terminal mode, Ctl-E to start SEND  In terminal mode, Ctl-E to start RECEIVE b m  @@@U : <Memory Switch$ For a later SAVE command$ < Up to 39K of Data >$ ^C Return to CP/M$*** DO YOU WISH LOCAL ECHO ? ***$$ For a later SAVE command$ < Up to 39K of Data >$ ^C Return to CP/M$*** DO YOU WISH LOCAL ECHO ?2 ™ : SJRÙ @<b m ʙ  @U @ @U Z͌dPͩ  ~2 ͭ:  eX>x ~b >?2h>2 \<9 ++File not found++$\<: o&T: _)))))))" =!oF+++: Ҹx2 ~2   øZ! File open, ready to receive : >9>Cx ͶN͉ ͧ<͡ ͧb !]~ ƒ9 ++No file name specified++ $ ~?ʑ#…9 ++Can't use wild card options++ $2 2 :  Awaiting #: : C2 >x ö   ʝ7G: j: ʃxy H rcvd, not SOH  ҃: <2 ګ: ʥ: ʳ͐ ³>x ú9 ++Unable to receive block ++ABORTING++$: : ʃ ++Timeout++ 't close file$: =2 % * K " : 7 \` =o 9 ++File read error$! yu 1 >2 y2 ! "  * !K " : <2 : O \ ! ª 2 ! "  ++Error writing file Ö: y N Ã: 7: (: ʃ: K ++Framing error++ ͓: n ++Overrun error++ ͓: @@ ++Parity error++ ͓Ã: y N   W  /: : ʃ ++Bad sector # in HDR Ãz2 >2 V !@@xGP@$    7@W5 : 2 z C : 2 z@Q : @2 @_ O: p : u : u  W: ʏ : “ : ʓ z z_ O@™ z @: ʷ : Awaiting initial NAK or CRC request  C ʖ CRC reque  w,: >Q2   |: G: ʡ<–  @͘ -: g: ʃ ++CRC error++ : ʊ: ʃ ++CKSUM error++ ͧö>x :  Send # : y : y N >x : x : /x >2 V !~x ,2 yx st received 2 *"f "q "[ ]2  J !  B 6- #9 : Y : R : 2 : p : ʋ  Transfer complete : : : @ Press RETURN to disconnect:m N ™ ++Disconnected++@ ͇ zx {x  xG: 9xy H rcvd, not ACK : <2 : Q: V͐ 79 Can't send sector - ABORTING $: 9 Timeout on ACK 91  ҙ>x MODEM program cancelled Ù : <2 : <2 \< ++File exists, type Y to er!l\M 2|2h A A A 2 A >(A y >)A _> U > O͂  ڋ 0U 2 Multiple errors encountered. Type Q to quit, R to retry: m U N _RQ ~2  ! A #   Press RETURN to continue: m @  4 ͙ * ~#M !" O* yO}o|g| |g}!oh " _ _ * T]* |>ADEOQRSTVC quit, R to retry: m U N _RQ ~2  ! A # at 450 baud and disconnect: MODEM SD.450 fn.ft Act as a terminal, originate mode, at 110 baud: MODEM TO.110 (Use ctl-D to disconnect) Receive file, answer mode, view it, 600 baud: MODEM RAV.600 fn.ft Receive file, use cyclic redundancy check, 6N ++'U ' is an invalid MODEM command option++ Press RETURN for help, Ctl-C to exit:  (T)erminal and (E)cho mode commands: Ctl-E = Exit to CP/M Ctl-D = Disconnect Phone Format for command is: MODEM # Filename Where # is a 1 00 baud: MODEM RC.600 fn,ft @ G:*G2*x:*2*ʲ#^#V:D!ʫ*!{«z«"!!~62 !ò#w6 }1!1!*!*!!V!~4#~#F#x~#s#r#w>character primary option, which may be followed by sub-options, and by ".xxx" to set baud rate to xxx Primary Options: S to send a file R to receive a file T to act as a terminal E to act as a computer (echo data) D to disconnect the phone H to print this help file Secondary options: A answer mode O originate mode D disconnect after execution T go to terminal mode after file xfer E go to echo mode after file xfer Q quiet mode - no status msgs R show chars received S show chars sent V view file sent/received (no status) C use cyclic redundancy check for file xfers For examples, type: MODEM X @ Send file, originate mode, 300 baud: MODEM SO fn.ft Send another file: MODEM S fn/ft Then send a third file  : @ H ++Switching to CHECKSUM MODE++ >C2 >x ö   ʝ7G: j: ʃxy H rcvd, not SOH  ҃: <2 ګ: ʥ: ʳ͐ ³>x ú9 ++Unable to receive block ++ABORTING++$: : ʃ ++Timeout++ : y N Ã: 7: (: ʃ: K ++Framing error++ ͓: n ++Overrun error++ ͓: @@ ++Parity error++ ͓Ã: y N   W  /: : ʃ ++Bad sector # in HDR Ãz2 >2 V !!9" 1 MODEM ver 2.16 $ !#@K  :]Hb Xʌ&  @@: CETD SR In terminal mode, Ctl-E to start SEND  In terminal mode, Ctl-E to start RECEIVE b m  @@@U : <  w,: >Q2   |: G: ʡ<–  @͘ -: g: ʃ ++CRC error++ : ʊ: ʃ ++CKSUM error++ ͧö>x :  Send # : y : y N >x : x : /x >2 V !~x ,2 yx 2 ™ : SJRÙ @<b m ʙ  @U @ @U Z͌dPͩ  ~2 ͭ:  eX>x ~b >?2h>2 \<9 ++File not found++$\<: o&T: _)))))))" =!oF+++: Ҹx2 ~2͇ zx {x  xG: 9xy H rcvd, not ACK : <2 : Q: V͐ 79 Can't send sector - ABORTING $: 9 Timeout on ACK 91  ҙ>x MODEM program cancelled Ù : <2 : <2 \< ++File exists, type Y to er øZ! File open, ready to receive : >9>Cx ͶN͉ ͧ<͡ ͧb !]~ ƒ9 ++No file name specified++ $ ~?ʑ#…9 ++Can't use wild card options++ $2 2 :  Awaiting #: : 2 y2 ! "  * !K " : <2 : O \ ! ª 2 ! "  ++Error writing file ÖN ++'U ' is an invalid MODEM command option++ Press RETURN for help, Ctl-C to exit:  (T)erminal and (E)cho mode commands: Ctl-E = Exit to CP/M Ctl-D = Disconnect Phone Format for command is: MODEM # Filename Where # is a 1 @@xGP@$    7@W5 : 2 z C : 2 z@Q : @2 @_ O: p : u : u  W: ʏ : “ : ʓ z z_ O@™ z @: ʷ : Awaiting initial NAK or CRC request  C ʖ CRC requecharacter primary option, which may be followed by sub-options, and by ".xxx" to set baud rate to xxx Primary Options: S to send a file R to receive a file T to act as a terminal E to act as a computer (echo data) D to disconnect the phst received 2 *"f "q "[ ]2  J !  B 6- #9 : Y : R : 2 : p : ʋ  Transfer complete : : : @ Press RETURN to disconnect:m N ™ ++Disconnected++@ >!@>V!@>!@one H to print this help file Secondary options: A answer mode O originate mode D disconnect after execution T go to terminal mode after file xfer E go to echo mode after file xfer Q quiet mode - no status msgs R show chars received S>V!@!l\M 2|2h A A A 2 A >(A y >)A _> U > O͂  ڋ 0U 2 Multiple errors encountered. Type Q to quit, R to retry: m U N _RQ ~2  ! A # show chars sent V view file sent/received (no status) C use cyclic redundancy check for file xfers For examples, type: MODEM X @ Send file, originate mode, 300 baud: MODEM SO fn.ft Send another file: MODEM S fn/ft Then send a third file Press RETURN to continue: m @  4 ͙ * ~#M !" O* yO}o|g| |g}!oh " _ _ * T]* |>ADEOQRSTVC quit, R to retry: m U N _RQ ~2  ! A # at 450 baud and disconnect: MODEM SD.450 fn.ft Act as a terminal, originate mode, at 110 baud: MODEM TO.110 (Use ctl-D to disconnect) Receive file, answer mode, view it, 600 baud: MODEM RAV.600 fn.ft Receive file, use cyclic redundancy check, 6  00 baud: MODEM RC.600 fn,ft @ G:*G2*x:*2*.OP DOCUMENTATION ON MODEM 714, A CP/M USERS TERMINAL AND FILE TRANSFER PROGRAM RE-WRITTEN FOR OSBORNE OWNERS BY D. SLAUGHTER Comman Format (Wha yo typ o CP/͠ comman lin afte a A prompt or a B prompt to invoke MODEM 7) --type "MODEM (option)" or --type "MODEM (option).(baudrate)" or --type "MODEM (option) (filename).(ext)" or --type "MODEM (option).(baudrate) (filename).(ext)" Yo mus giv singl "primary o mai option an  yo ma the giv secondar option a yo choose Th primary options are as follows: PRIMARY OPTIONS: S: To send a file; R: To recieve a file; T T ac a ful duple termina whic  suppresse you typin fro appearin o you scree unles i i echoe bac fro tim sharing computer; E T ac a hal duple terminal wher whe yo typ o you compute i appear o yo!  u scree withou echoe fro anothe compute bein necessary Thi i use fo talkin t othe computer bein manne b person rathe than by sophisticated time sharing programs; D: Discoif your modem can support them: O: Go to originate mode; A: Go to answer mode; (NOTE Ϡ an ar no defaul values i yo don' specif them yo won' ge thei functions however onc specified i ther i n brea i th cnnects the phone if the modem allows it H: Help (gives you help on commands) X: Prints examples of using MODEM SUBOPTIONS Q 'Q ma b use t modif eithe a 'S o a 'R fo "quiet omman lin they remain in effect until a disconnect) D Disconnec (i i doesn' work you'r stil o th line) R: Show characters as received S: Show characters as sent V: View the file (suppresses non-error status messages) T: transfer whic d no caus consol inpu an output Thi i usefu fo slo terminal lik ttys an i necessar o remot CP/ system i whic th remot consol  Go to terminal mode (full duplex) after file transfer E: Go to echo mode (half duplex) after file transfer D: Disconnect after program execution EXAMPLES: Objectiv 1 T sen tes fil i originat mod quietly i th sam a th "line fo purpose o sendin files t suppres th consol mes- sages e.g MODE S or MODEM R. -1- NOTE Som remot CBB o C, and to disconnect after your transfer. --type "MODEM SOQD (filename.ext)" Objectiv 2 T receiv tes fil i answe mod at 450 baud, and not disconnect after reception: --type "MODEM RA.450 (filename.ext)" P/ systme mak us o th "FUNNY conditiona equat patc ou fo an possibl output t modem vi CBIOSs Fo thes system th option is not necessary. S R T C (o Q ma b followe b th followin further modifiers Objectiv 3 T sen fil whe o lin an no disconnected automatically: --type "MODEM S filename.ext" NOTE Th progra default t 30 bau i anothe bau rat isn' specified However chec t mak sur you syste track"   i you setu progra ar consisten o th bau rate o yo ma hav troubl (especiall yo Osborne users! DBS) Afte you'r finished us th Ġ sub-optio (MODE D) to disconnect the phone. CK AS OF 10/29/78 $ !9"1:m2m] ʝ<_T++FILE NOT FOUND$ *b!,m.*ko|g"ka:m _> U> U_»T++MUST CK A: OR CK B:$=G*0"!xT++DONE++$=T *++DISK READ ERROR$> U> U:l8:k8T= FILE CKSUM $:m ,JJ> U S0_\=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ#  Documentation of various original programs written by Ward Christensen ----CK-FIX.COM---- OVERVIEW: Program to print a checksum of a file - used to tell if two files are the same. N-O-T-E the previous version distributed with the CP/M UG had a BUG whereby it didn't really work. Something like an ADD M instead of an ADD L (??). USAGE: Suggest renaming this back to just CK.COM after you have properly disposed of any earlier versions. CK fn.ft to produce a total file cksum. CK fn.ft d to see a detailed (sector-by- sector) cksum and the total. to just CK.COM after you have properly disposed of any earlier versions. CK fn.ft to produce a total file cksum. CK fn1ͮ&6`i"*-ͭ[ͮ͢c>2C!"@*@N#F#"@!C5>>O=~c>sy/w>sq>{++#{^=      ͮy!"@L>!3N#F#=>:@:A>>~c>y/w#{ͮ*@͑;*@)"@*!}¸¸      ͮL!C6@*%.~,{s >7`o. X,{ nͮL**|¹}!C6@*%=~,~,,y >7`o= X,X,,y$   !C5*# *+****##}&1yq#{OV1JfͮK͑ͮV͖;͉ͮ|͖}O͟y0:ڪ_ͷ> ^#V#ͮ User Maintenance Problem Identification & Reliability Enhancement COPYRIGHT (C) 1979, 1980 by Mel Cruts $ADDRESS: $ BAD BITS: $ROUTINE 1-BOOMERANG $ROUTINE 2-HALF SLOW $ADDRESS BIT $ROUTINE 4-SCRAMBLE $ROUTINE 8-SPIRAL $$O:%<2%> > 1. MDM7OS.COM THIS VERSION IS SETUP TO USE THE RS232 PORT ON THE OSBORN O-1 COMPUTER. IT WILL ALSO SETUP THE BAUDRATE AT EITHER 300 OR 1200 BAUD WITH THE USUAL BAUDRATE SYNTAX (IE THE COMMAND: MDM7OS T.1200 WILL SELECT T >* ' 2-HALF SLOW $ADDRESS BIT $ROUTINE 4-SCRAMBLE $ROUTINE 8-SPIRAL $$O:%<2%> >ERMINAL MODE AT 1200 BAUD). NOTE: SOME OF THE COMPUTERS SHIPPED WERE SHIPPED WITHOUT A JUMPER INSTALLED ON THE JUMPER PINS (ON THE CPU BOARD NEAR THE RS232 PLUG). WITHOUT THESE PINS BEING JUMPERED, THE BAUDRATES WILL BE 600 AND 2400 BAUD. 2. MDMOS.ASM THIS IS THE I/O OVERLAY FOR THE MODEM PROGRAM THAT ALLOWS IT TO RESPOND TO THE OSBORN I/O PORTS. THIS IS CONFIGURED INTO THE PROGRAM BY OVERLAYING ITS .HEX FILE ONTO THE PROGRAM WITH DDT. NOTE: THE BAUDRATE SETTING ROUTINE IS QUITE PRIMITIVE (BUT ADEQUATE). IT ONLY LOOKS AT THE FIRST CHARACTER OF THE BAUDRATE STRING AND LOOKS FOR A 1 ( FOR 1200 BAUD) OR 3 ( FOR 300 BAUD). 3. MODEM7.DOC THIS IS THE ORIGINAL DOCUMENTATION FIL%  E THE CAME WITH THE ORIGINAL VERSION OF THE MODEM7 PROGRAM ( ON CP/M USER'S GROUP DISC # 47). 4. MODEM.DOC THIS IS THE ORIGINAL DOCUMEMTATION FILE FOR AN EARLYIER VERSION OF THE MODEM PROGRAM (MODEM4) WHICH EXPLAINS SOME OF TH Print file to List Device P Send file to Punch Device C Copy file to another Disk R Rename file D Delete file X Exit to CP/M B Backup oE COMMAND SYNTAX AND USAGE SOMEWHAT BETTER THAN MODEM7.DOC. 5. CRCK4.COM THIS IS A USEFUL PROGRAM THAT CAN CHECKSUM ONE OR MORE PROGRAMS ON A DISC. IT IS OCCASIONALLY USEFUL TO VERIFY THAT A FILE SENT OVER THE PHONE WAS CORRECTLY ne file in List S Restart on another Drive sp or cr Forward to next file in List :] Ÿ:e Ÿ!] ß???????????2h2|\ ++ Not Found ++À! " ƀo&:\:CRCK4 NAME WHERE NAME IS THE NAME OF A FILE. THIS MAY I\* " " ( Ͷ m! "  " * *     *  " * Ͷ ,*  " " * Ͷ ,! " *    " :@2 X: XXXXXXXX.XXX :  I IBXʀRʃDVsLxP}CSʁ ? Ù* ( NCLUDE A DRIVE DESIGNATOR SUCH AS B: (FOR DRIVE B) AS WELL AS THE WILD CARD CHARACTERS: '*' AND '?'.  CORRECT TRANSMISSION). THE COMMAND SYNTAX IS: A>CRCK4 NAME WHERE NAME IS THE NAME OF A FILE. THIS MAY IͶ 1 Beginning of List *  " < * ͼ " s * * Ͷ s End of List ! " s*  ͼ   New Name ?   ! FI#~ w¶! 6# 6 #! N#  i&6   @.1 MICRO RESOURCES DIRECTORY "WASH UTILITY" Ver 1.0 FROM THE DIGITAL DELI COMPUTER STORE Command Function ------- ---------------------------- V View file at Console Lw# @ @.! 4 4.4w#! 6#9 !  G>w# H: 2  !  ! 6#m ʦ ++ Name Already Exists ++ Ù*  ͼ !   I ++ Not Found ++I*  ͼ     ++&   Not Found ++I Deleted*  ͼ " * Ͷ B -"  Ͷ I* Ͷ I List EmptyÀ>>>2 *  ͼ   ! 6#   ++ File Cannot Be Opened ++I2  I!~I_: O I#*  ͼ   ! 6#(2 !!   w ++ Source File Cannot Be Opened ++I Destination Drive ?  A<2 G:  ++ Cannot Select Same Disk as Source ++ Ù  Replace ?  YI  H ++ Destination Directory Full ++I*+* Ͷ S x™ ++ No Memory Available for Copy Buffer ++Ii`" 2 !" * " *   * " * #" * Ͷ ® >2 * " * |F +" * "   ++ Disk or Directory Full on Write ++I: ʢ  I ++ Destination Close Error ++I New Drive ?  IA<2\> 2]2ez{}o|g~# ~_#  `_ _ = : ; < > 7# Nwy# Directory Full on Write ++I: ʢ  I ++ Destination Close Error ++I New Drive ?  IA<2\> 2]2ez{}o|g~# ~_#  `_'  UMPIRŠ i comprehensiv memor tes progra implementin tw tes algorithm develope a th Universit o Illinois Th algorithm wer publishe i Jun 197 'IEEŠ TRANSACTIONӠ O COMPUTERS' Th Universit o Illinoi tes algorithm ar th 'BOOMERANG an th 'HAL SLOW tes routines Als include ar two test routines I devised. Th tes wil automaticall siz th TP an tes al o memor u th star o BDOS Ther ar onl thre contro codes ^ wil caus th tes t restart ^ wil caus jum t addres zer (i.e war boot) an ^ wil caus th progra t sto o start Th ^ functio i particularll usefu i th 'SCRAMBLE an 'SPIRAL routin t sto t tes causin refres verificatio o dynami memories Anothe ^ wil caus th tes t star u again Bot th 'SCRAMBLE an 'SPIRAL tes routine us rando dat s thi i fai tes o memor arra fo patter sensitivity. Send any comments or suggestions to: Mel Cruts DIGITAL DELI COMPUTER STORE 80 WEST EL CAMINO REAL MOUNTAIN VIEW, CA. 94040utine us rando dat s thi i fai tes o memor arra fo patter sensitivity. Send any comments or sug