IMD 1.17: 29/05/2011 18:24:22 com files, turboslave par & gen files boot tracks on disk >o:~W!{> " OC > S>O31! >2|N#Fx2CN#FC$#^#V^#VS#~2#~2<2###~2#^#VSN#FCC*KB0KC:( [0!' #"* (,*#"+))[R%! !!Cy͏qput+[[R8 uty7?R#|(/ sr +utwwNFqpnf^:(#~W#:G)[7?K R0!!=NFx(ENF C$7?KnfB8C[0MD!'  |:o!=!NFnfB#>,(0W}_nfRut=RDM!C7*![3*:G*!w0͘!4͘ !͙>O3F#Nů  SYS: Which .SYS file to load 0 = CPM 1 = OSLOAD ? SelectReadFile not found error: file C3>L~~ÃG3x(OxAG:>G~ > 2<:4O y~ 8 q *@~(͙8ͺ{ͣ:72:>2>2?7O> 2<> :?G /_~(!& *1::{  _ O(  :<= L{((glrZwZ:4hZ::hZ:>hZZ>2< ~ ( w:728F8 <2:y2>:7W:0*3K5B(7:8Gz?"B*3"5:7G28xG![120G!> z:(8 DZP>w(>>w~Can't recognize density of disk in$Read$Write$Seek$ error on track $ sector $ side $ drive $ $~Can't recognize density of disk in$Read$Write$Seek$ error on2,...,VALN ) x;2 Where Y (Y e;G ) ;\Top of memor ;q}P9xon disk in drive:  Unable to open source file Unable to create destination file Unable to read source file Unable to write destination file Unable to close source file Unable to close destination file Unable to set attributes on source file Unable to set attributes on destination file Insufficient memory for copy  Non-privileged user Insufficient memory not found ~#9 (_ H A:*.* B: ;N ]b.VERIFY CMVERIF CM@$EE`  T`   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Unable to write destination file Unable to close source file Unable to close destination file Unable to set attributes on source file Unable to set attributes on destination file Insufficient memory for copy  Non-privileged user Insufficient memory not found AUTOLOADCMBANK CMBNKMGR RELBNKREQ RELBOOTF CMBOOTH CMBUFFERS CMCHANGE CMCONDR RELCONREM RELCOPY CMCPMSUP RELDELETE CMDIR CMDMA5F RELDMA5R RELDO CMDREQUATEIBDRIVE CMDSKTBL MACDSPOOL RELEQUATE IBFASLOD RELFDSKDR RELFDST RELFIXDIR CMFORMAT8 CMGEN CMIOMEGA RELLSTCTS RELLSTETX RELLSTPAR RELLSTXON RELMAPDIR CMMASTER CMMCDSS RELMODCON RELMODEMCONDOCMONITOR CMMPMSUP RELMSGFMT RELNETFWD RELNETLOD RELNETREQ RELNETSVC RELNW COMNW OVRNWCLEAN COMNWMSGS OVRNWPRINT OVROSBOOT RELOSLOAD COMOSLOAD SYSOSMASTERSYSOSSLAVEASYSOSSLAVEBSYSOSSLAVECSYSOSSLAVEDSYSOSSLAVEESYSOSSLAVEFSYSOSSLAVEGSYSPARK MACPATCH RELPRINT CMPRINTER COMPROJECT LSTQUEMGR RELRENAME CMRTCNUL RELS6BNK RELS6DSK RELS6DST58FPATS6DST58FRELS6LDR48 GENS6LDR8 GENS6LDR8 PARS6LOAD RELS6MLT48 GENS6MLT5 GENS6MLT8 GENS6MLT8 PARS6NIT RELS6RTC RELS6SIO RELS6SOM RELSCOMDR RELSEND CMSET CMSHOW CMSLAVELSTPARSLVRES RELSSBNK RELSSBOOT RELSSCKTDR RELSSLAVBK4DO SSLAVBKAGENSSLAVBKAPARSSLAVBKBGENSSLAVBKBPARSSLAVBKCGENSSLAVBKCPARSSLAVBKDGENSSLAVBKDPARSSLAVBKEGENSSLAVBKEPARSSLAVBKFGENSSLAVBKFPARSSLAVBNKGENSSLOAD RELSSLSTPARRELSSNIT RELSSRTC RELSSSIO2 RELSSSIO4 RELSSSOM RELSTDLOADRRELSTDMASTRRELSTDSINGLRELSTDSLAVERELSTDSPOOLRELSUBMIT RELTERMDR RELTRK0BDOSMACTRK0BIOSMACTRK0BOOTRELTRK0DSDDLDRTSBNK RELTSBOOT RELTSCKTDR RELTSCONDR RELTSDUART RELTSINIT RELTSINT RELTSLSTCTSRELTSLSTETXRELTSLSTXONRELTSLVB14MDO TSLVB14MGENTSLVB14MPARTSMCKTDRRELTSMST14MDO TSMST14MGENTSMST14MPARTSNOBNK RELTSSOM RELTYPE CMVECINT RELVERIFY CM:COPYRIGHT 1983, SOFTWARE 2000, INC. (VERSION 06/30/83) 1  Pxʙ+Pž:\=2L_<22'Pѷ¨PPP͎:LA@͸ ( ͱͱ >2K!Y"Uʭ*Z+|2f!"g!l"i!1* BR8 *^B C2K! "U*`[bSMR"d:LAͱ ͱ!"O*|ʳ1* BR0 *+"*^[OR[R8!"O!(o*M[bR*OK^z( :]O:Y(<=:\o&+R*iKgx(+:f(~+ngR(yʸCgs#:f(r#"i*O#"O[^Rډ*O[Q"O:(  *M#"M*d+"d|0*gJ*|E :(:O:: q!l"i! ˾ ½'½2½½2k!"H:k '!½*H#"Ho&)))))<2k  #6#*i~#:f(~#"i*g+"g|(*H+"H'"½*H#"HYNRͱ Insert disk to be verified in driveͱ Enter to begin verifyingͱ Verifying blocks on drive:ͱ Verify aborteͱ Verify completed -ͱ bad blocks encountereͱ Mark bad blocks in directory (y/n) ?ͱ Marking bad blocks in directorͱ Non-privileged userͱ No verify drive specifiedͱ Unable to lockout verify driveͱ Verify drive not ready ͱ Insufficient memory for verifyͱ Excessive bad blocksͱ Error marking bad blocksͱ Bad directory blockͱ Unable to execute from bank 1ͷ~# (_ BLOCKSBAD$ DIRT CIRCUIT) THAT IS WHY WE SUGGEST PUTTING OURS AFTER THEIR'S. ; REMEMBER SUPPORT IS A PHONE CALL AWAY (714) 964-5784 . ; ; FOLLOWING PATCHES ARE NEEDED IN 1.4 BUT FIXED IN 1.41 ; 1.4 program termination patch (NON-BANKED) ;cintry+14f=patch ;patch=32,memres+10,0c3,cintry ; 1.4 coldstart.aut autoload patch (NON-BANKED) ;warmst+84=0,0,0 ;warmst+27=patch+0f ;patch+0f=0cd,warmst+0c6,0c3,otntry ;warmst-1d=patch+1d ;patch+1d=0cd,warmst+7b,0c3,warmst+0c6 ; 1.4 chain to program patch (ALL CONFIGURATIONS) ;chnfcn+3c=patch+17 ;patch+17=0cd,enadsp,0c3,warmst UEAST = 80,(0100), ;QUEUE A ON REMOTE CIRCUIT 1 ; 81,(0100), ;QUEUE B ON REMOTE CIRCUIT 1 ; 82,(0100), ;QUEUE C ON REMOTE CIRCUIT 1 ; 83,(0100), ;QUEUE D ON REMOTE CIRCUIT 1 ; 84,(0100) ;QUEUE E ON REMOTE CIRCUIT 1 ;DSPPAT = 1, ;ASSIGN PRINTER A TO QUEUE A ; 2 ;ASSIG PRINTE T QUEU B ; 3, ;ASSIG PRINTE C T QUEU C ; 4, ;ASSIG PRINTE D T QUEU D ; ;ASSIG PRINTE E T QUEU E ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ;** BUT REMEMBER THIS SLAVE IS ON CIRCUIT (010'Z') NOT (000'Z') ** ; .o* /j/.*/*://n*K n./n*O+.*//n*+-n++.*../n*/ n./nj-nꂷc⢓Ӄу‚ÊӁ悓; This routine gives the user a detailed error report ; herrors:: push AF ;save error indication ld DE,herrst CALL pmsg ; First the error code IN A,(HDCERR) CALL phex ld DE,errhd CALL pmsg ; then the head IN A,(SDH) push AF ;save drive no AND 7 CALL hex1 ; Print single digit ld DE,errcyl CALL pmsg ; the cylinder IN A,(CYLHI) ; Report CYLHI first CALL phex IN A,(CYLLO) ; then CYLLO CALL phex ld DE,errsec CALL pmsg ; and finally the sector IN A,(SECNO) CALL phex ld DE,errdr ;send drive mess call pmsg pop AF rlca ;get drive rlca rlca and 3 call hex1 ld A,crest ;restore drive out (comnd),A herrlp:: in A,(status) rlca jr c,herrlp ;wait until done pop AF RET page ; ; hsidselc is the read/write preparation for hard disk ; hsidselc computes the correct physical sector and side ; hsidselc:: ld HL,(hdiosec) ld E,L ;save L ld A,L and not(31) ;compute first cp/m sector in buffer ld L,A ld (hblksec),HL ;save it ld L,E ;restore sector to HL hflsdsc:: ;called to set up for a flush or a ;clear carry ld C,-1 ;set up head count ld DE,secs*4 ;set up number cpm sectors per head sdsclp: inc C ;increment head count sbc HL,DE ;subtract out one heads worth of sectors jp p,sdsclp ;if not negitive do more add HL,DE ;restore sector number to HL ld A,L srl A ;find physical sector srl A ld (hpsec),A ld A,C ld (hhead),A ;set head control byte ret page ; ; hinbuf returns carry flag set if sector not in buffer ; if sector is in buffer, returns offset (0 - hdstcnt-1) in A ; hinbuf:: ld A,(bufvalid) ;0 if contains valid data, else 255 rra ret c hinbu2f:: ld A,(hiodrvtrk) ;check for right drive ld B,A ld A,(hblkdrvtrk) sub B jr z,rthdd ;skip if right drive scf ret ;wrong drive return with carry set rthdd:: ld HL,(hiodrvtrk+1) ;check for right track ld BC,(hblkdrvtrk+1) sbc HL,BC ;same drive and track scf ret nz ;not a match ld DE,(hblksec) ld HL,(hdiosec) ld A,D ;high bytes = cp H scf ;set failure flag ret nz ;exit if not equal ccf ;clear carry sbc HL,DE ret C ;sector lower # than buffer ld A,L cp hdstcnt ;carry set if in buffer ccf ret ; ; stores drive, track, sector of contents of buffer for use by flush ; also sets buffer valid flag ; returns HL=start of sector in buffer, DE=DMA address, BC=128, A=0 ; hmkbfad:: ld A,(hiodrvtrk) ld (hblkdrvtrk),a ld HL,(hiodrvtrk+1) ld (hblkdrvtrk+1),HL ld HL,(hdiosec) ld B,L ld A,L and not(hdstcnt-1) ld L,A ld (hblksec),HL ld A,B and hdstcnt-1 ld B,A ;B=relative sector in buffer inc B ld HL,hstbuf-128 ld DE,128 hshft2:: add HL,DE djnz hshft2 ld BC,128 ;make ready for sector LDIR ld DE,(iodma) xor A ld (bufvalid),A ret endif SUBTTL Floppy disk storage page ; ; Floppy disk driver storage ; bufvalid:: db 0ffh ;buffer contains valid data for (blksec) ;0 = valid data iodma:: ds 2,0 ;dma storage .sfcond iff hard ;if not hard .lfcond iodrvtrk:: curfpy:: db 0 ;current selected physical floppy drive iotrk:: ds 1,0 ;current track for current disk blkdrvtrk:: ds 2,0 ;drive and track for deblocking buffer iosec:: ds 1,0 ;current logical sector for DD, physical for SD blksec:: ds 1,0 ;first logical sector in current host blk2sec:: ds 1,0 ;8th CP/M sector in an unallocated 2K block psec:: ds 1,0 ;current physical sector wrtpend:: db 0 ;write pending from buffer retryc:: db 0 ;number of retries left newfpy:: db 0 ;new floppy to be selected head:: db 0 ;head control = 0 or 1 oper:: db 0 ;operation (read/write) to be performed next hwptr:: dw dskparm ;storage for pointer to current hw parameters blkptr:: dw dskparm ;pointer to paramters for block drive SUBTTL Hard disk storage page ; ; Hard disk driver storage ; else .lfcond hiodrvtrk:: curhdsk:: db 0 ;current selected physical hard disk drive hdiotrk:: ds 2,0 ;current track for current disk hblkdrvtrk:: ds 3,0 ;drive and track for deblocking buffer hdiosec:: ds 2,0 ;current logical sector hblksec:: dw 0 ;first logical sector in host buffer hunalsec:: dw 0 ;first logical sector in current host unallocated block unalcv:: db 0 ;unallocated block vector hpsec:: ds 1,0 ;current physical sector hwrtpnd:: db 0 ;write pending from buffer hhead:: db 0 ;head control endif SUBTTL Error messages page .sfcond iff hard .lfcond ; ; Floppy error me (SAVE ME)AM80INITMAUTOLOADMBACKUP M BANK MBATCH MBNKTST M BOOTF M BUFFERS M CHANGE M COPY CM$ CRCKLISTCRCDATE M DBASE COMDBASE COMDBASEAPPOVRDBASEBROOVR DBASEJOIOVRDBASEMAIOVR7 !"DBASEMODOVR#$DBASEMSCOVR%&DBASEMSGCOM>'()*DBASERPGOVR+,DBASESRTOVR -DBASETTLOVR.DBASEUPDOVR/DBASIC COM01234567DBASIC COM_89:;<=DBERR MSGf>?@ABCDDBREF MSGEFGHIJKLDBREF MSGAMNOPQDELETE MRDIR MSTDO M UDRIVE M VDUMP MWERASEDIRMXF5 COMYZFIFO M [FIXDIR M\FIXMAP M]FMT548 COM^_FORMAT5 M`aFORMAT8 MbcGEN M3defgHDU MhiINDEXR COMjkINSTALDBCOMPlmnopINSTALWSCOMqrstuvwxINSTALWSCOM]yz{|}~KAYM COMKAYM COMKAYM DOCKAYM DOCKAYM DOCdKMDM795 COMlLABEL MLANG1985BAKLANG1985BAKLANG1985LSTLANG1985RSTLANG1985RSTLOGOFF M LOGON MMAINMENUBASMAPDIR MMASTER MMDM730 COMMDM730 COMMDM730 DOCMDM730 DOCMDM730 DOC5MDM730 MSG MDM730 NOTMDM730 UPDMODEM7TUCOM<MODEM7TUDOC\MODEM7TUMACMODEM7TUMACMODEM7TUMACMODEM7TUMAC@   MONITOR M!  OSBOOT RELOSLOAD COMgOSLOAD SYSgOSMASTERSYS !"#$%OSMASTERSYSf&'()*+,OSSLAVEASYS-./01234OSSLAVEASYS5OSSLAVEHSYSv6789:;<=OSSLAVEISYSv>PARK OM?PDRIVE COM@APORTTESTBASBPRINT MCPRINTER OMDPRLTOCOMMEREAD ME FGRECEIVE MHRELCVT MIJRENAME MKLSEND MMSET MNOSHOW MPSLAVELSTBAK!QRSSLAVELSTPAR!TUVTS LIBWTSASM DO XTSBNK MAC YTSBNK RELZTSBOOT MAC+[\]TSBOOT REL^TSCKTDR MAC"_`aTSCKTDR RELbTSCONDR MACcdTSCONDR RELeTSCRC CMfgTSCRC DOChTSDOC ijklmnopTSDOC qrstuvwxTSDOC yz{|}~TSDOC ZTSDUART MACTSDUART REL TSINIT MACTSINIT RELTSINT MACTSINT RELTSLAVB14DO TSLAVB14GENTSLAVB14PAR TSLAVE DO TSLAVE GENTSLAVE PARTSLAVE14DO TSLAVE14GENTSLAVE14PARTSLAVEB DO TSLAVEB GENTSLAVEB PAR TSLSTCTSMAC TSLSTCTSRELTSLSTETXMACTSLSTETXRELTSLSTXONMACTSLSTXONRELTSLVB14MDO TSLVB14MGENTSLVB14MPARTSMASTERDO TSMASTERGENTSMASTERPAR TSMCKTDRMACTSMCKTDRMAC,TSMCKTDRREL TSMST14MDO TSMST14MGENTSMST14MPARTSNOBNK MACTSNOBNK RELTSREAD DOC5TSSOM MACTSSOM RELTSDUART MACHOSSLAVEBSYSOSSLAVEBSYSOSSLAVECSYSOSSLAVECSYSOSSLAVEDSYSOSSLAVEDSYSOSSLAVEESYSOSSLAVEESYSOSSLAVEFSYSOSSLAVEFSYSOSSLAVEGSYSvOSSLAVEJSYSv     OSSLAVEKSYSvOSSLAVELSYSv OSSLAVEMSYSv!"#$%&'(OSSLAVENSYSv)*+,-./0:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/17/84) 1!]~#(# (08z 0vGy8q8n8k8h8e8bOy([ 0WG+ ?9!4~:860#4 "G G     Invalid number of users requested $ Unable to create queues $ Queues created $Am80 Am8Usr/ SAm80 AM80AM80AM80͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !<|\COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1!~(/G#:O: q#~  #y( O:D~(*"8!""*|ͤ*BR0 *+"*[R(O[R8""ͤ""(g:_(( q:_8w(*[""J( V |S*#""*+"|͎8ͣ.)ͽ$'Q{p{͔{͵!ˆ8 :G{G;(!O: _PѷPP>22!"!"*"2<2!""!""As*ͳ8bO: 7(:( : ٷ8 ))))))):=)'d  R0x  0s a{ JVR8 Insert source disk in drive8 Insert destination disk in drive8 Enter to begin copying8 Rea8 Writ8 Copy aborte8 Successful cop8 Non-privileged user8 No source drive specified8 No destination drive specified8 Unable to lockout source drive8 Unable to lockout destination drive8 Source drive not ready 8 Destination drive not ready 8 Disk types not identical 8 Insufficient memory for copy8 error, Drive:8, Track:8 (Retry, Ignore, Abort)8 Unable to execute from bank 1>~#s? (_O: 7(:( : ٷ8 ))))))):=)'d  R0x  0s a{ JVR8 Insert source disk in drive8 Insert destination disk in drive8 Enter to begin copying8 Rea8 Writ8 Copy aborte8 Successful cop8 Non-privileged user8 No source drive specified8 No destination drive specified:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/22/84) 1 Px(B!]~ (V~#(# (085 01Gy8,8)8&8#8 8Oy0_+P   2  +P 0:y(0__  $ Current bank number: $ Invalid bank number requested $ Non-privileged user $ Insufficient memory in bank 0 $O: 7(:( : ٷ8 ))))))):=)'d  R0x  0s a{ JVR8 Insert source disk in drive8 Insert destination disk in drive8 Enter to begin copying8 Rea8 Writ8 Copy aborte8 Successful cop8 Non-privileged user8 No source drive specified8 No destination drive specified=|\COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/16/84) 1:2 P:<2!~ / 0:2y2A2!!~(##~( (:Oy~#( :~> >  " Ebw͖ ͖ Message sent to FIF͖ BATCH.DO FIFO file not found͖ BATCH.DO File not FIFO͖ FIFO file full͖ Excessive command length͜~#ͪ_BATCH DO :\MODEM7TUCOM<MODEM7TUDOC\MODEM7TUMACMODEM7TUMAC! >.>~/w>~/wy4çy|iO :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/14/84) 1D Px(g+P² 22:\ :] (L:l :m (D:] ( 8Q ;ͬ8H 7:m (< 0 .ͧ` <8Ur͕ͳ!\:k(:i2pw2D* R`pw!(S!l:{(:y2pw2D`pwѷ!*+R0pw:\29*":l!>29=2>2!"P(C:!@)=KCe"Kx(eDS*R!""`P*#"*["*+"| !x :̀:̀_͟ѻ ͟ѻ`  ` Operation successfu` Non-privileged user` No source drive or filename specified` No destination drive or filename specified` Can't find source file` Can't read boot tracks` Can't write destination file` Can't write boot tracks` Not enough memory` Reading source file:` Writing destination file:` Reading boot tracks:` Writing boot tracks:` Unable to execute from bank 1f~#rg_wѷ!*+R0pw:\29*":l!>29=2>2!"P(C:!@)=KCe"Kx(eDS*R!""`P*#"*["*+"| !x :̀:̀_͟ѻ ͟ѻ`  ` Operation successfu` Non-privileged user` No source drive or filename specified` No destination drive or filename specified` Can't find source file` Can't read boot tracks` Can't write destination file` Can't write boot tracks` Not enough memory` Reading source file:` Writing destination f:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/21/84) 1T*"#^#V!T6#s#r++"P"20!F( Px[PP":o&͛:G7g.<͛:? >@o&͛+P !F "*%͛; O:(,:(F A8[0:7=2*~#"h| }82!Ʒ͡UhR( 8<0)2!Ʒ{!  ( 08 0 )))_!4*+"'͹͹d͹ ͹ R0x  0 NS Number of Buffers: Length of Buffers: Local System Size: Memory Available : Non-privileged user Minimum number of buffers = 2  Invalid buffer size requested  Maximum number of buffers = 255 ~#_te destination file` Can't write boot tracks` Not enough memory` Reading source file:` Writing destination f:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/04/84) 1X!~(G#~!8 xH  :ʧG!"!~#;(H (;,(7:(3*('A8,0(A0;<a{ N͏ Enter drive(s) to be changed:͏ Invalid drive(s) requested ͏ Following drive(s) in use: ͏ Change drive(s)͏ Enter when change complete͏ Unable to free drive(s): ͕~#;(_$:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1 22M2N:\ 3:] ,:e %:k :l :m :u :{ !J!~( 2OO :P(:Q{ O: { (: { ( !K!K!"͉ # 6#!m? *͉ # ~w#y 86#:\2:l2G:=QxO:=Zx 4:MO:N *! O~#  !:MO c :KG O U:JW(Nl !:M !:N͋ >2OO :P(:Q{ O: { (: { :±ͬ  :K !:N2 !:N͙ :_!~ X!~:Kw¥G OͰ >2OO :P(:Q{ O: { : { /   !:M !:M !:N (1: !:MF^ Ͳ :KW( !ͨ  E!:N:Kg!~ oG O’ !:MW>2OO :P(:Q{ O: { (: { M !:M  (1:" !:M 1:, (  *+"|*#~/ 0:y0 > 99~#=&A9>>~#9*%[R R0x C!J˞!"*"t ~ :J_ *#"[R8*"*|(t ~ ~ *+":J_(* 4 0 U :K( Ê l =( :KoX !~X * k A d Y ͓u ͼ( ( k O 00  !:Ml = !J4 u 4 c k A9͊ :K( 4 !Kn( !Ͳ  p A  Y *! ͼ( ( p O E U :Ko 0 * !J˞!" !:M:Ko͊ ! * c p A94 ͧ 2222=2 :2ͬ 2!""Yͧ !*#"| !4ͬ "*#"| !4ͧ ͬ :2!Xc * yc ͡c c * 4 4 c c 2c `c ͓ͧ ͬ ͧ ͬ _P_PP! (#˾[*"͠ ~#fo͙ K ))) )K :M:N:_ ѻ  ѻ͸c   8 \ 2M͌ c  8 l 2Nͥ c !!~! ~*R|7"6 #6 7"R| *T !U^#"R6 !Jæ:\:l=a{ YNABCERX Invalid filename 1 Invalid filename 2 Ambiguous filename not permitted with option B Destination drive read only Ambiguous filename: confirm individual files (y/n)? copy to same filename Ok to copy  to  (y/n)? already exists,ok to delete? (y/n) not copiedread only FIFO file, not copiedFIFO file, not deleted  not copiednot delete copied to  Ok to delete source file? (y/n) File not found Insert next source disk in drive:  Enter when change complete Unable to lock out destination drive  Unable to free drive  Insert next destination disk in drive:  Unable to open source file Unable to create destination file Unable to read source file Unable to write destination file Unable to close source file Unable to close destination file Unable to set attributes on source file Unable to set attributes on destination file Insufficient memory for copy  Non-privileged user Insufficient memory not found ~#9 (_VHation drive  Unable to free drive  Insert next destination disk in drive:  Unable to open source file Unable to create destination file Unable to read source file Unable to write destination file Unable to close source file Unable to close destination file Unable to set attributes on source file Unable to set attributes on destination file Insufficient memory for copy  Non-privileged user Insufficient memory not found  --> FILE: SLAVELST.PAR CRC = 60 F4 --> FILE: TS .LIB CRC = 75 78 --> FILE: TSASM .DO CRC = 3F CA --> FILE: TSBNK .MAC CRC = 87 F5 --> FILE: TSBNK .REL CRC = A6 10 --> FILE: TSBOOT .MAC CRC = 0E D9 --> FILE: TSBOOT .REL CRC = 12 98 --> FILE: TSCKTDR .MAC CRC = 6F 2E --> FILE: TSCKTDR .REL CRC = C6 C6 --> FILE: TSCONDR .MAC CRC = 74 6F --> FILE: TSCONDR .REL CRC = 5D F6 --> FILE: TSCRC .COM CRC = B2 07 --> FILE: TSCRC .DOC CRC = E5 81 --> FILE: TSDOC . CRC = AD 52 --> FILE: TSDUART .MAC CRC = 10 30 --> FILE: TSDUART .REL CRC = 28 2B --> FILE: TSINIT .MAC CRC = 8C 60 --> FILE: TSINIT .REL CRC = 1F 5F --> FILE: TSINT .MAC CRC = D2 54 --> FILE: TSINT .REL CRC = A0 43 --> FILE: TSLAVB14.DO CRC = 71 66 --> FILE: TSLAVB14.GEN CRC = 43 A2 --> FILE: TSLAVB14.PAR CRC = B6 7A --> FILE: TSLAVE .DO CRC = 1B E1 --> FILE: TSLAVE .GEN CRC = 96 A3 --> FILE: TSLAVE .PAR CRC = 66 06 --> FILE: TSLAVE14.DO CRC = 06 6F --> FILE: TSLAVE14.GEN CRC = FD 8D --> FILE: TSLAVE14.PAR CRC = DB 9F --> FILE: TSLAVEB .DO CRC = 4C 68 --> FILE: TSLAVEB .GEN CRC = F5 9F --> FILE: TSLAVEB .PAR CRC = 85 C7 --> FILE: TSREAD .DOC CRC = 00 1A --> FILE: TSLVB14M.PAR CRC = 83 35 --> FILE: TSLVB14M.DO CRC = E6 B3 --> FILE: TSLVB14M.GEN CRC = AC DF --> FILE: TSMASTER.DO CRC = 81 55 --> FILE: TSMASTER.GEN CRC = 3E 34 --> FILE: TSMASTER.PAR CRC = 16 64 --> FILE: TSMCKTDR.MAC CRC = C2 19 --> FILE: TSMCKTDR.REL CRC = 6A 61 --> FILE: TSMST14M.DO CRC = 25 6A --> FILE: TSMST14M.GEN CRC = 3B C3 --> FILE: TSMST14M.PAR CRC = 90 23 --> FILE: TSNOBNK .MAC CRC = 0A 11 --> FILE: TSNOBNK .REL CRC = D0 F5 --> FILE: TSSOM .MAC CRC = D6 42 --> FILE: TSSOM .REL CRC = AB 6E --> FILE: TSLSTCTS.MAC CRC = 11 E2 --> FILE: TSLSTXON.MAC CRC = DB F3 --> FILE: TSLSTETX.MAC CRC = FB 2C9COPYRIGHT 1984, SOFTWARE 2000 INC. (VERSION 01/04/84) 1X!~Q͐w!N#*ͯ .͐ͯ   > ͸ ͐"!w* ͗!>>͸ ͗!6#!N#!>!:(rͪ:G ":O x2{2z2*:W:_:G P<͐w* ͗!>ͪ"ͪ *x2{2z2 PR!w : "A!6T]ʁ08Y (3!:0o:g2::8bA8-[0)!R8w#:0o:gd2:(,  !կ(b#( y2(*b: :2: :2:(a: x2lj*&:=0C:*&!k=(^#!:= 0;;!b:('S6 #*&+T]6 #:S 6*#2{2z2ßb:W:_:!R!|D)0)0>J2 2 ! A uß99ʑ ¶9!W9!Xr#ʟ#I#ʳuW6uI7WIruImuubrp8$uuuuu>J: |* * " ͭ* ~#" O9ͤ: =2 22 99* " " ͭu͕: =c: f: J2 uß2 * * e6I-:T=o%" ͭur* * e6ͤͻͭuß:D:Dʳ9ó* " ͭ:Du9>2 uy :D9u>2 : $* wO9ß* : `6* " N: 2 ͻ* e6XyX* ~qO<: 2 * " wO9n ß: 2 ʁ! Ä! !Au* +* e6uʮͻu* -" :T=o%" ͭ>2 : O* * y`6+" : 2 * " * * e6!ͻ:RECEIVE M3RELCVT M45RENAME M67SEND M8SET M9:SHOW M;SLAVELSTBAK!<=>SLAVELSTPAR!?@ATYPE MBVERIFY MCDWORDSTARATEFWS COMnGHIJKLMWSMSGS OVRNOPQRSTUWSMSGS OVRCVWXYZWSOVLY1 OVR[\]^_`abWSOVLY1 OVR^cdefghWSU COMpijklmnoLANG1985BAK_Y T 662 ́~A : Y  ~. > O͆ #ͤ' \ * |\  ͆ ͤ: I ^* |:Dq :9ͤu* * x6" *  ~Y* - :To%* x6* x6* x6" ́:D :9ͤ! 4ɯ2 ̈́" " 2 }6" }6" s6" *  ~O2 #~ <2 #}6yN M N ͖4* |5 nx2 y2 > : G2 O!" " 2X #" 2 " ͭ* |g ~j ͐ 2 : 2 * " * " >2 9: N >9L>XTFYNtfyn.+- #9AXL!DELETED INSERT ""!j"!j"*~#"1Ҙ W6RftDMVbktH 1j ^9    *+": g~*~#~#"" }6" F#N#s6xC L x D2*͉4 *7N *x #y7 N x ~*w1 ~*_T/ Y/ 61 6N OG"gxq ~@X 2W +~ W + F yj yj >2 y/<2ɯ22*6!j"Ϳ5N#~2#^#V#~#F#"x2:/<.Qx2 :ͽ :_:<2*~ /6=T}6}6"! N#}6> `6~#s6҄O7 }6" ~CʴL##s6g7 #NgFxH)WDp#q#s6x6+N͌6x#s6q#7 ##s6g~ }6" ~CKLf#F#}6N~@2 ͎6#7 ##}6g~6T 6F 4M4E*p#2H N 4M4E|JgxJy1=4~O#x`6*q#7 N >w:Ø *w# XN g~w] Ͷ͓1ڃ >v:Ø Ͷ@1 Ͷ61 ͶZ0 DIIDIIDDIDIDDI*N#7y`6F#7y*w*wN DIIDIIDDIDIDDI*wN *wN g~ʮï/w] Ͱ4 .,ͼ3 gN#D2 gn&ͼ3 *NͧDI*N.,DIN#F#x'DI͇6"xʘ†yʒi&Û!ͼ3;2Þ!Û!ͼ3 4n&ͼ3 gͣ4g͖4gg*͉4NͶ61*]͉4#"+~:+D.N#~N#6*]#"+x7F#N#6*]#"+6 6 *]i&"*x6"*+V+^"`i"8͚ژ960#q#p#60*DM7xxʺ7>áѷ.OR. x x7>ѷ.AND.%7%7-%7'3x+>37.NOT.ڈxW͊2xʈ:ɱ͊m~$>i#2xˆʈ:7~=•>#Ÿ><¿#~=ʺ>µ>> > >#~=>> #ɯ͠.xF~+#͠-x-1>-#͠-x-1>7xG|;GyBMxGɱM~+s#͠ڜxœʜyO> M-˜#͠ڜxœʜyO>M7x¯~*#xyxGOxG>ï/#xx=|GGy Mxï7A~+<-@#IG>#IGevEͲ ~!Ϳ8s7#ͥ- xG>> > A>~(#͚~,#͚~)#>~( %66$#͂6 x>%~(#x~,#s7چ~)ʂ,†{È>2x~)ʾ,#x~)>#:O>.~(#͚~,#x~)I,#s7"~)"{$>2x~)#:O>/#>>/ > x> ~(#~)#>! *>'x66#x6Ny6C6L#" >">> >#7~(>#͚>~)>#7͍xtD2*>'x6͉4*>`6"7~C6¯x#*ʹ6ʮO>'x6y`6#"#7~TYFN7>*w6'#x6#"#o ~N#F###N>&x6*7oB ~CA#N6*7ol ~Lk6*7͓*ʊ"͗Š722~+ʤ-¦#~0ڰ:.2:¤ä >2ä:O:Hyx<ɯ~  #.F..T.CDEFILPSTV#@$!*INT#VALLEN@TESTPEEK4STRK$!ZCHRmDATETYPETRIM*EOFFILEM()!d!`*/~**/*/"/͉,*/#"/2/2/l6DM*/> `67 6x2q/y2n/2o/_!|x2p/!"j/#"l/J$2/!ͯ#>$/R=F1:/Fw" Pկ2z/.,"={ͅ$a#2/!";{"{*/"/*j/"x/}#:/»*t/!={:n/O7*t/:n/`66#6*/#6#6>2/2~/#ͬ#>2~/*t/>2}/!?{:n/O͠$t$++}6z#"x/}#û#*/"{/#"r/:~/O:/0<͐$DM:/<$+:/$+8*r/!={:n/O7*r/:n/`6*{x6!/4:p/mͬ#:/J$*{/"/~2/<g:z/}%|2/*x/";{ͯ#:/g:z/ʖ$|2z/2/$={:n/7:/2/O:/2/͐$DM:/<$++*t/++7*l/"{ͯ#:/O:~/2~/*l/"x/##*l/#"l/>2/*/*/e6q*/#!;{:o/O7*t/:n/`6*{x6>2/*l/ͯ#*l/"j/#"l/J$*/*{/l6DM*{/+T]8#"/*j/*/x66#z#$>$͙"á>$ ͅ$!?{:d/7B |ʵe6ʵ͌!ҡ!>$a##> z#:~/O:/O͐$DM$++:~/<$++7!/5#ͬ#!~/5!/5ͬ#:/$={:n/O7#> z#$!={:n/O7ͬ#:~/O:/ ɷO2}/"r/a#*/"/*j/"x/}#:/ >2~/*/*r/͠$ʞ ڄ t$r ++}6z #"x/}#e ++}6zʸ #"x/}#e #s62/*/"/!>$*/ 9u!`i"v/#}6z>C+++6, !>N6*2c/{2d/#X/x6>$/P!6!?!*!:/?!w".,}N!O ͅ$a##}!#z#$?{:n/O>2}/͠$!͸P>a##!z#t$!#!z#:~/O:/ڠ!:~/<2~/$++}6#"x/>2~/#z#*/#}6z!!#$s6!>2/7ɷa##j"z#:~/=2~/^"#j"z#:~/"=2~/*/#4"$}6#"x/}#:/2~/#:/<$++}6z:"a"#$s6s">2/7ɷ2/ͅ;Å-:/*/nͅ;Å->2~/*/"/a#*j/"x/}##:/"*/#s6|ª"*/###s6!*/"/a#*j/"x/}#:/<2~/#:/#<$++s6|":/$7D!>$/+#ͅ;Å-#2/>$a###z#$x6ͬ#O!/~Z##Q#q:/*/h/ 7*/###"t/*x/"/://ͅ; Å-:/*/ͅ;Å-*/~2/*x/"/://ͅ; Å-*/:/w:/ͅ;Å-*x/*/x6:~/w#"/*/*/e6$7+~2~/+V+^"x/"/ѷ:~/*t/=O:o/W yO:$x5$G)$ E$33:/:/ͅ;Å-*/!h/ 7*/:/ͅ;Å-:o/`6!~/4:/*v/! O:o/_! š$##:q/$ͣ4:}/ھ$D2$͖461͉47:+D$6A:n/O6:/O:/ %:/ %t.2/2/:/ͅ;2//ͅ;(% ą-7! "/~ [% ~#*/x6`6"/#;%*/}o|gx6ͅ;{%ą-7ͅ; Å-!P/͌68ʼ%/ͥ-»%9!%ҝ%ü%K&>2P/K&>2S/%K&>2T/8s7zWD9"/>2W/%>2R/!wvu`i"/>2V/>2Q/:T/'&͉,+:V/2&m,:Q/E$D&*/ͅ'"ͅ':U/£&=2U/"/:P/d&Ù&:S/q&*/ß&:T/ʄ&͉,+!ß&:R/™&:W/œ&*/|:8"/!95WD͕'͂+-)'#-m,*/9>:WD*/"/*/> `6xv)yl)6A##}6z§)+pí)6#6})6#6 #}6zʭ)ҧ))ھ)p#N͌6x6ú)##ú))ڿ)p#x6q)6>:WD͓*)x))## `&ɯ:WD*/)ʐ*!`~ʇ* t*>:WD*/7~56*_w #~.* #P¶**S**M** +*~56*_w*P6*:*# *yͳ5*/+"/}E$++:1DL+-+?+-<͌!G+ͅ':1DL+-͌!?+ͅ'-<"-7"7ɯ<!wvu~+##~~+++6#6#60PY!v 47/!ͅ;Ø+2/ą-7"/͉,x~³+> ͈5# y¬+*/"/>2/*/*/DM:/ͅ;+*/#"/2/<,ą->2/7:m,7:/ͅ;%,,,ą-7*/:/!/7/ͅ; Y,ͅ-!"/͉,E$~,͙"ͅ'2/ɯ2/!ͅ'!/͌6*/|,+*/e6,"/"/*/"/! "/!/ -,/!/,!/,*/|º,/:/ͅ; Å->Å-w# ,~w# -~w+ -:/ͅ;Å--:/ */ͅ;Å-*/DM*/~j-#s6"/*/0%*/++s6"/$'>ͅ-*/DM*/> ͎6:WD!wvuڢ-PY!v %7-#¯-##~<§-=~0-:-A-í--s6:/ͅ; -ɯ2/:/://<2/:/*/#"/"/- */6#*/x6: Dw#: Dw#: Dw:/ͅ;Å-*/6#"//ͅ; Å-!z"/*/:/w#:/w#:/w#:/w#"/*/+~."/G*/ze6/+~</"/xͅ; Å-ALL%NEXT%RECORD%FOR%TOP &BOTTOM&WHILE%KEY C?{.DBF.CMD.FRM.MEM.TXT.NDX.FMTz0-0~|{Njl~|{Njl~|upr!j~w0!j~/1A4,1G.~,1ʿ00/< ڜ0~,1jf0~ڪ0WXî0P_i,l4z®0i~怲w.Fj0.'w- 0,1.>m4.4,1.7>'w- 0)1.ƙw- 1.7~'w- 1.~w4.6,1!j~wZ0!jjA4.J4 .l4l1GZ0e1.4 V1.~GO.~WIwx1~w4!j~2j.~722j.6@.6> 2jZ0.~1 1õ161.~=wy.R4:j=°12y 1.R4:j=22j.R41> .R4:j=22j1:jG.N@._y怳wjA447:j2j!j J4 ]2 2O2.6?+n2-t26 20ʯ22:2.6G.~4ڜ2ƶoxwâ2ƶo~w.~n2.4n2.~2.4.~n2.4n2.~n2.5n2.2.~26n2.~2.wy2x=G!j~.60 36-@T3/<.w> #33.~yʹ3>..F>0C3 63ù3.R40 C3ù3<.q/  x3d3.~3Ä3.~-ʂ3> .R40„3.~ʹ3O>..R40  3ù3>*±3!j J4'33d3 33>I2j4}o|g3 z!jR4!j~,,,,,<4!j~O,~44 <4.R4. 4.~怱w.w~#A4ɯw,K4_~Wwz+U4ɯ_~Wwz,t4!jA4jA4jA4!j~@5 4 /#͈5Ϳ55y 5>͈5+ 5w͈56y29ͳ5:9::9ʬ59ͅ;v29͢9:*DWD> ͈5> ͈5Ϳ5~͈5#55&o6&o5'66d6 66/}o|g6 z͈5/6/6/6/6> ͈5A[?a{?G'"[]0:?`6s6o$z{}o|g~#fos#r#^#V#q#p#N#F#>Wxʜ6r# Ñ6> #á6žʲ6# ¨6 G~66# ¹6y6# 6x66x296y29H66"7x"7 7:9O~ 7# 7"7xO~a07_q7m7S7O~AI7_g7#87~0m7;o7Am7o7xo7DM! ƒ7y7 0گ7:ү70e6ڬ7zT])))o҃7$ƒ77 `i9_7͈5> ͈5N Y7ɷ7Ϳ5>?͈5ö7H77y8~# 7x8~+ 8x8t8͢8t8W`i͢8c8O8G͢8c8OT]x`6Ͳ8c8/ 1::B:1:G::CM:xI:a>_d:O9 Z:!B4d: d:!B6O:?CyY }:!B4 !B6!B4:` =Ì::?Cʰ:  2B2B:B:B2:C::C9:?C2?C2Bͼ>:B2CB!:B;!5ͼ>B:_/;:C /;CC7! C6!C7ͼ>C<};";C!D"=CCy;*=CZ;*;C>x:WD29C"B"B`i"B!9"B~#W6;;Y<<<<=:=<>ͼ>͵>;> uB͵>\B> uB>!QC"MC~;B@;< y <*MC;ͼ>͵><>uB:j2j;@<2B*MC!\$7YBy<2B!"HC"JC2LC*MC6#"FCYB>!QC"MC~suBͼ>͵><>uB͵>\B͇@>2DC*B"@CD>YB͇@2DC*B"@CD>YB͇@>2DC*B"@CD>YB͇@>2DC*B#"@CD>YB͇@z=X@?YB!"JC"HCYB͇@2DC!"@C*B!5C"BD>*HC+"HC"BYB͇@2DCX@@A?*FC+6YB͇@*HC}|*JC}|\B͇@*BxN#F#^#Vʈ="JC`i"HCYBixg"HCz{gxo"JCYBͼ> _!QC"MC2B*MC~=^#V=*MC6:B<=2B*MC"MC=:9C͊@\B*B>!\7*BLD͵><(>> uB!\7<\B>uB28C:8C*@C| A*@Ce6a>DM*JCͤ?*HC*OC*B:DCҔ>B"B*OCl6"HCè>B"B*OCl6"HCXA*@Cl6"@CH>\!\6# > ͎6͌6:D2\!]w#:>+~@2\. ??w#>!e?w# ?:LC@'?:_ͼ>*MC:LC@2LC)):ECQ?*MC! x6}G)L*MC yʖ??qͼ>*MC<•?:DCڟ?*MC uB*MC p>uB!C"6C~ʿ??:9C? ë?#s6e6¿?###}6"OC6*BC "BC~?!C"BC#####~?5?#~@6LB*BC~)A:9C͊@*BC###s6"OC*JCdA*JC*BC"6C:9Cw#x6##6#6^#V!\ #N@:9CG!C~ȸ€@#####6#~@6x)A_@:9Cշ@ҹ@=!QCʥ@= @~ʹ@#"FCHC7>uB!QC~@@!QC~@@> uB6#"FCHC7!"HC"JC2LC>*HC!l6|*JC#"JC!"HC!͊@#}6s6"OCALB:9CG!C~ȸTA6JA*6C######6uB*OC:ECAA͌B*MC:EC$B"GBBB*MC!}6++x65BBBGBA:LC@2LC> uB> uB*FC!HC7LB*B###*BDM*B*B:B2B*BeB:DCBʗBx~# ÌB~ £B# x~­B>uBx~ B BB# íB#>28Cx~ # BB>28CDBASEMSGCOMDBASE OVRCʒ6Z~Ɠ2Vz”s6#!~/5#>ü>2D2-D>'>26D!pDD;MAI19*e6nEnE!D5INSUFFICIENT MEMORY IN SYSTEM, dBASE REQUIRES AT LEAST 41984 BYTES (0A400 HEX) OF MEMORY IN IN ADDITION TO THE SIZE OF THE OPERATING SYSTEM dBASE WILL OPERATE ON MOST 48K CP/M (tm) SYSTEMS THAT HAVE A STANDARD BIOS (2k:E!9`66>͕'͂+E:D!D`6'w2D!D4ͫ.;¯F!E5;F!E5MESSAGE FILE (DBASEMSG.COM) CANNOT BE OPENED2 D>r: 98ʯFs7{EE E2 D98s7zF{F: DqFqF qF qFzF{ FÀF{FÀF{F2 D98gGs7zE{2 DʯF: D¯F: DFͿ5Ϳ5!FFTTT@@Ȅ@@@@@@@d\~F:#F!G5:D[DWDͿ5!F5EThirty days hath September April, June and November All the rest have thirty one Except February ... ERROR!xG!GERRORG~@@ʑG:#~G##~#fo5ERROR3B 22 FEB 82s6#!~/5#>ü>2D2-D>'>26D!pDD;MAI19*e6nEnE!D5INSUFFICIENT MEMORY IN SYSTEM, dBASE REQUIRES AT LEAST 41984 BYTES (0A400 HEX) OF MEMORY IN IN ADDITION TO THÒDHHKMÍN(2xS2uS2vS͐%8D͜%ډR8D0S%7D9"S͕'G>2xSâD@S%7D9>2uSâDS%7‰R9>2uS2vSâDͿ+|Eͅ'+E:xSeF!"S!d"S :uSʃF*S9>͕'͂+G'2rS>'u-:vSF!9:rS'm%ھGͮ"S*S~ %F ~NE#F#}68'‘EÖE"¡EO8EèE,E,ʻE8%F¨EE8%FE,»EE#F#}6N8dD2928,Ey,E8%F,E8%F*S"SkEͧ#:rS'm%ھG>'X'EEH.$*S#"S*S+"S|EE:6DEE*SͿ55>:!d"SEE QtF$hFͦ&Ϳ+ͅ'+ÑR͂+G'2rS ,:G!0%!"S!"S~ NG"nSM(AG"pS ~NF*S6(#*nSx6*pSx660"SAG*nS ~N G*S6&#*nSx66#6,#*pSx660"SAG*S6&#*nSx66,#*pSx660"SAG*S"SõFu- *DM:rS',ھG: TG>'ͧ6 ! X'TGH.$*S#"S*S+"S|TG:6DTG*SͿ55>:!d"STG$:6DG*SͿ55>:>'ͦ&Ϳ+ͅ'+ÑR>$:>2)DÑR>:>2)DÑR(͐%2wS8ʗH͜%ډR8ʗH*S%74H>S:>2)DÑR>2wS9!"Sx68͓*^H>:>2)DÑR8M(uH>N:>2)DÑR*Sx6"Sx698, H8HH:wS«H>D:>2)DÑR!W&X'HͧHͿ5>]:.,5Ϳ5!"S*S}6"SzHOHHͲH.*HұHÑR$'#'8I>[: 9ʑR͕'%گK͂+2rS8=I0S%7‰RpJ>:> :ͮ͌6!"SͿ5/6`i+))))ͮy!2J5#6 982Jbk͌68͓*~,‡K8>,ʹ6ʇK ҇K9! 8_CINILK>J88s7ڗK{ʗKz—K{<ʗK=98J,ŸK8s7ڟK98ŸK{*S`6e6ڧK"SYI> !+t.ͦ&$>!:Ͷ7ʑR͂+#-ͦ&m,u-Q^Jͦ&t.$ÑR98͕'K͂+K#-ͮ7ͮ"S ͌6!"S*S+aKͧ~ ¤J#98͓* 8 J8 J8_CJNJLK>>K8jS79!jSs7K{ʟKzŸK{8jS79!jSs7K{*S`6e6K"S*S"SäJ$*S6 !+:rS'-t.ͦ&#-m,ÑR>:ZI>:ZI>:ZI>:ZI>u:ZI>:Ͷ7ʑR%I>:ÁR>:ÁR>:ÁR>:ÁR>u:ÁR>$:ÁR>:Ͷ7ʑR%I(.,"Sͮ"}S>2yS8LL2yS: %L>*::yS‘R: ;L>V:@L>y: 9LL͍ÑR8 ڑRs7Ϳ+e6M98|qL*S"Sͅ'*S͊: /Mͮ"S*S*SQ>%LGҧL%Mx%LxLxLE$L!%LqL*S+"S|%LqLE$M͌!%LqLxMͮ*Se6ҹL"SÊL*fS~ L*fS"SÊL+%L*S#"SqLͲH.!8ʺM,%L8,ʕM:{M0ڕMs79%Lz%L{!%L+))))ͮ~%L %L"}SÕM8͓*%L8M("}S%L98ʺM8ͧ6l6M8*}S͙O%LM*}SOڑR%LͲH.%L>:ÑR(2tS2sS8NS%7M>2sS9MS%7‰R>2tS9M.,:sSN#"S"S͡+=)DM,ڂN*S͡+:tSGNu-H.JNQͧ7,*S#"S͡+H.JNͿ+#+ͦ&m,*Sͅ'ÑR>1:m,ÑR8ʉR2zS2wS8O5S%7N98"SuډR8~N+"S#~O#F>2wSÚNNS%7‰R#98>͕'N>$:ÁR>2zSÚN:wS>P~R:zS>D~R%͂+'L#*S*S'>'!ͅ'ږO !"S!d"S$*S#"S*S+"S|{O:6D{O*SͿ55>t:!d"S+JO:6DʖO*SͿ55>t:ÑR ~NO#y=ON#s6T]> ͎67D2#F#}6N2>:7"S V#~2S#s6"SzCPP!!S5 9PO8*S͙OOP!͌62S:SG7!"SP!S5!5ʠP:PʀP!QS5!5!8P>2S>P!͌6!QS5!5ʠP>2S>P:SP:SGʾPw#¯PP6 #¾PP*SͿ55>:͈5/6*S:S_~͈5#P7>ɯ> :>Pͮ"S:DQu-: ʎQ2Sͮ"S.,#*SQ>QGO:S2Sx|QxjQͮ*Se6|Q"S&Q*fS~ |Q*fS"S&Q:SҊQH.7Ϳ5!8S5.,#5Ϳ5*SͿ5 ͨ+>:͈5/6 9O8QQxQQ*S͙OڣQ*S"S~ ¦QH.7"fS͊!DS55!"{S*fS N! :T_ l6#Ry2S*{SO:U![S > ͎6*fS[S~TR#IR[S*{SDM!fSh*{S:Sg"{S*fS"fS~ R:>2)DÑR>2)DÑR!RD;MAI[!W&5)"/DX'R*RҤR:6DʀD>2:ÀD:6DʀD>3:ÀD:6DʀD>]:.,5ÀD!9͐%͜%ڝ[*/D9)BEFOREBLANKCHANGE? DELIMITEDTO: FIELDFROMONRECORD SDFRECORD # TOTO dSͿ5gS8*_uڝ[`i"_6-#͇6x–SyNKCHANGE? DELIMITEDTO: FIELDFROMONRECORD SDFRECORD # TOTO dSͿ5gS8*_uڝ[`i"_6-#P!!S5 9PO8*S͙OOP!͌62S:SG7!"SP!S5!5ʠP:PʀP!QS5!5!8P>2S>P͐%!W&.,"I"I2I͊:D2I2D2I2I2I2I2I͊!"I*Iͅ'H"I2I>2I*I~ D͆GD!I4*I"ID:IG:I2IE*I:Ig."I!I4*D!"IH"I2I*I~ JE@HJE!I4*I"I*E:IO:IG!y=aEOxgUE"I*IIHI!Ih*Iͅ'͊H"I2I*I~ ʬEGڬE!I4*I"IÌE:I!IڻE~=2I:IG>2Ix2I͍2IH"I2I*I~ E͆GE!I4*I"IE:IFI2I:I9FͲH.E$9F!2I9F.,"I"I͊2I:I:G:IF!I6#:I/2I:I2IîDm,.,"I*I"I2IêD!I6#:IwE$ G͌!-G"I:I-G:IG:IO:I2I-GdE*-G*I#"I:IG:IO:I2I-GdE*I"I2IêD:I0ʃGXG:I=vG2I!I4vGH~ vG:I<2I:I=vG2I*I"I2IêDI ~PҙG:IPڿG:IʢG7~/2I7 H?~2I*IDMI!Ih*I:I-!I͎62J7~2IÉH?~2IO>-!I͎6I~ʛH#ÐH!I:I`66*IDMI!Ih*I:I2)DI͊:I2D!$ID;MAIGF#:7ªF#*7*76 ª:7G*7"7:6ă"7 :7m#:6ĩ:8ȯ28 ʤ#3>G27<2RECORD # :00000;MAIGF#:7ªF#*7*76 ª:7G*7"7:6ă"7 :7m#:6ĩ:8ȯ28 ʤFI2I:I9FͲH.E$9F!2I9F.,"I"I͊2I:I:G:IF!I6#:I/2I:I2IîDm,.,"I*I"I2IêD!I6#:IwE$ G͌!-G"I:I-G:IG:IO:I2I-GdE*-G*I#"I:IG:IO:I2I-GdE*I"I2IêD:I0ʃGXG:I=vG2I!I4vGH~ vG:I<2I:I=vG2I*I"I2IêDI ~PҙG:IPڿG:IʢG7~/2I7 H?~2I*IDMI!Ih*I:I-!I͎62J7~2IÉH?~2IO(-(-2G2G2G8,E:GDG%7D98͕'/G>2G×D:GDG%7D98ubG`i"G>2G×D:GbGG%7bG9>2G8bG"G8͓*OG98,—D8E:G7G:G?G%͂+'2G>'-:GFͮ"G!"G!G"G*G~ ʩE*G7*G6(#*Gx6*Gx660"G*G "G*G "GfE>-ͮ"G*G~ yF&F*G*G7*G6(#*Gx6*Gx660"G*G "Ge6yF*G "GôE!"G!G"G*G98͓*"G8M(OG"G*G7*G6(#*Gx6*Gx660"G*G"G*G98,yF8 F*G6 !0%> 2:G' 9.>'>-m,-m,!"-*G! F*G!G :G'*DM9.>'*#"|-*FóFm,-*GóF:G'ͦ&-> 9.$>'mG>$:WG>D:WG>h:WG>i:WG>:bG>'>2)DmG>'>2)DmG!vGD;MAI :8Ī Ī*8:8 ʣ!y Ī:8O*7"7*8{!z̘zB"|G|!|"!"|/G}/O!FIELDSFORTOmG!vGD;MAI :8 H:IPH:IH7>2I7 H?~2I*IDMI!Ih*I:I-!I͎62J7~2IÉH?~2IO1:)D•[2_:DE͢9ʢD:*DGK:4DD:DD:2_>::2_:>`:Ͷ7:DD:_::_:GKE:D͵.:D>9ڕV8E#~E/wDͿ5>.͈5/6 998ʀDʀD*ʀD:-DʍE8AE_^%7HE!_4ÀD8YE:^%7gE:_€D2-DÀD8xE^%7€D:_†E2-DÀD=2_ÀD:_EE^%7E9!"_DM͋-ڝ[8[ʀD2_ÀD^%7E2_ÀD^%7€D2_ÀD:(DF:DF:2_>::2_:r9:DF:_::_::\G8ʗF2F#~%F!͌6!͌6#͓*~.UF 7!)‘F ~C?G##s6N#798IGF8F98F<\ͥ-¯F9~P6:G(BQ8W6sQPDOPKPKYGSCVV8WHNGG)KGKKKKKLL4MRPPP0QPQQQR]RiRuRPSSSiTTTTUVUV\WXYZZZZ6[>Ï[>"Ï[>Ï[>4Ï[Ϳ58C6yG8~ʝ[#^G9l6DM ͨ+8^%7>R#98Q*>:͈5 98GK阯ʹ6¬G> >O!6'#x66*#x660A)ڀD! ÀD(81^%7G!GD;APPͿ+|Gͅ'+Gu-H.ͦ& $Ϳ+ͅ'+ÀD͙H:5DʇH:2_>::2_:*_DM͸:/2_8uڝ[`i"__6,#Ns#Frx/I2_y2_>N2_MI2_yCIA2_>C2_MI2_>L2_!x`668^%7I98C6[8xʹ6ʝ[#9!`662>2_8V^%7I98K͓*K͗"_ʽI>NÏ[98Iv^%7K98C6[8xuʹ6ʝ[9!u"_`662t:_*_! :_!:_NJ~(J.(J#J"_!~ #wDJDJ DJʘJwCJ6 DJ*_*_~KJ#J~K#J9¯JwîJ~K#J9J#J60#J!~KXJKw#J#J6 #J!"_>RÏ[: ʀD(!&KD;BRO8:>'ÀD>2_ÀD(!GD;8K$'#-$'#-: D'ͦ&$(2k2 Dͯ5-ÀDV^%7KZ^%7[͍ÀD(!ZD;(͐%2_͜%ڝ[89L^%7[98ʝ[**"_>2_89L +LKͿ+|]L!W&X'TL]L*]LJL:6DnL>:`i5:_ʀD`iͼ3*_ }6͉4ÀD!GD;͐%8?^%7L9͕'&L>':6DʀD>.:ÀD:>'ÀD(>*2_L:6DʀD>':ÀD͜%ڝ[8[!W&:_WͿ+|&MX'M&MͧMrͲH.*&MM`i:6DͿ55!"_!"_^8%7N(>c:>'T'5>n:Ϳ+5>s:ͮ+++++5>/͈55>/͈55-ʞM>l:ãM>m:>b:ͮ Ϳ5y5#6 ͨ+)6 ~͈5&6#~5&6###F~)6xM5)6~ ­MͿ5>\:#6#6)6=)5ÀD9h^%7ʰOD^%7ʹO(2_2_͐%!"_!"_8ʻN͜%ڝ[8ʻNo^%7jN>2_9DN*_DM*_uڝ[>2_`i"_6-#͇6xŸNyšN6àN6áNp4#6#60"_8ʻN,DN8DN:2D-O:_-Oͮ"_*_~ -O*_6f-# ~#N###FNOCO6#6#6O6#p#6Op#q#q4#6#60"_*_"_N*_W&.,|ʀDX'ʤOڀD*_+"_|cO!"_>a:9ʀDͿ5:_|O.,5/6͈ͧ5:_šO:2DʚO=)DMͧ #ͨ+äO*_! *ʀD;OÀD!ZD;9!ZD;8^%7ʍP^%7 P8>͕'P8[͂+P:DP!D`6'w2D!D4ͫ.>'ÀD>%P>&:GK:DʅP9͋-ڝ[P2_:D>98NP7^%7dP98^%77P!_47P8uP^%77P!_57PÀD.ÀD>%:ÀD>2_ÀD(!GD;>2-D2_ÀD2_ÀD2_:DʀD.ÀD:G:5DP>:͛::ÀD͊ÀD(E$+Q88C6QQ8xʹ68A ͅ'|€D:6DʀD> :ÀD>oÏ[(͐%͜%BQ&ÀDO+ڝ[|iQͿ+e6DGT]ͅ'͊|nQÀD>/Ï[>zÏ[!"_DM͋-ڝ[€D>2-D2_ÀD(!GD;Ϳ58C6Q8~ʝ[#¬Q9l6DM ͨ+88^%7>R988Q*>:͈5 98GK!"_DMuFR`i"_6*#͇6++x6A)CR:6D1R6+#x660Ϳ5*_! ÀD>DÏ[ÀD>0:Ϳ5Q(!GD;!fRD;JOI!"_"_@M(8~ʉR#~R!9͐%͜%ڝ[8[!W&5)"/DX'R*RҤR:6DʀD>2:ÀD:6DʀD>3:ÀD:6DʀD>]:.,5ÀD!9͐%͜%ڝ[*/D9)ðRD! S;MOD!ZD;O+ڝ["_8,[8O+ڝ[}*_w#"_8,*SÀD!"_!"_8ʿS?dSͿ5gS8*_DM*_uڝ[`i"_6-#͇6x–Sy‘S6×S6ØSp4#6#60"_8ʲS,[8gS*_! ÀDͿ5ÀD$#-$#>(:: D'ͦ&$8&!ZD;: ʀD:,DAT'-͊:,D>9>T8T*T@8͙H>*_DM*_!_hT>'>DҀD'ʀD.,|ʀDͲH.!ÀD(͐%> 2_L:6DʀD>7:ÀD85ÀD8ʝ[͕'6,8ʝ[^%7[98͕'G,ÀD(.,|U͐%!"_!"_8ʐU͜%ڝ[8ʐU8͓*T>Ï[8M(U"_^8y`698%7U98*_DM*_uڝ[`i"_N##~JUC+~JUL*_ ~\U>OÏ[*_6,#x660"_>2_8ʐU,U8T-^%7T9T:_U!W&X'UUͧU*_! ͳ&ͲH.!ͺ&*UҠU:6DʀD`iͿ55>::ÀD>=Ï[>>Ï[D!U;RPG8ʝ[J^%7[9>͕'͂+!V>TÏ[ͣM*#DM,͟&*DM,$>'ÀD8)^%7UV(ÀD8ʀD͓*fV>Ï[8)sV1*98ʀD,[8UV'm,-ÀD:DʀD'$>'.:DV=VV2D=!D`6~2D2-DÀD2D2D2-DÀD>):ÀD8.W^%7.W9>͕'3W%͂+.W'2_ͣM*#DM9.͟&*DM9.ͦ&$>'ÀD>DÏ[>$Ï[8~^%7KW-ÀD^%7[>-ÀD8^ͥ-tW9XwÀDX_ͥ-[9X:ÀD8^%7W9>͕': DʯW'ͦ&$%͂+'2 D>'ÀDXW: Dͯ5ÀDX:ÀD8^%7W9<!k͌68kʹ62ÀDXO+ڝ["DÀD:,D%X'$2,D>'X^%7]XO^%7VX>͕'͂+JX>UÏ['2,D>'ÀD25DÀD>25DÀDX8ʝ[~_@2DÀDXs7{2 D98s7{2 D98s7{2 DÀDXO+ڝ[}2`ÀDX#8ʀDZÀD8^%7[988s^%7Xo^%7[>(8-Y8 Y+ Y88ʣYO+ڝ[|ʀDyfYE$QY.,"_!HY"_z0Y*_ͅ'øY͙"ͅ'øY.,l6`Yͅ'øYm,øYE$ʙY.,"_͌!ڊY"_zrY*_ͅ'øYͳ&"ͅ'ͺ&øY.,ͅ'øYE$ʵY͌!ڊYͅ'øY+:6DʀD>]:.,5ÀD!YD;SRT!"_DMuڝ["_`i"_8^%7|Z9*_#N#F8***_6*#x6"_"_8͓*98LZ,[*_*_6"_8 Z:6DcZ*_*_6+#x6"_*_60*_:6DĿ5! ÀD>DÏ[!ZD;MSC!ZD;TTL!ZD;UPD$'#8ʀD͕''[͂+"['#-m,8ʀDb^%7[98ZÀD>͕''[͂+,['L#8,[8 Z>pÏ[]#w" 1[>'m,>Ï[>$Ï[>MÏ[>{Ï[>a:9GK8ʋ[^%7[98ʝ[)f[1*** s66# [> w͈5> ͈5ÀDÀD:[:)D[>I:Ϳ589l6M [/6ñ[>?͈52)Dr9:]GK>W:Ͷ7GKʀD>X:!5ʀD>Y:!598[r9>Z:Ͷ7GK[19E6S6y6Ϳ6_~6{„6{STOREY?GSELSEPENDDOPENDIFD*DDOONOTEDLOOPPRELEASECVRETURNVSELECT8W@HACCEPTNGAPPENDGBROWSEKCALL)KCANCELGKCHANGEKCLEARKCOPYKCOUNTKCREATELDELETELDISPLAY4MCONTINUEREDITPEJECTPERASEPGOTO0QGO0QIFsQFINDPINDEXQINPUTQINSERTQRJOIN]RLISTiRLOCATEuRMODIFYSPACKSPOKESQUITSREADSRECALLiTREMARKTRENAMETREPLACETREPORTURESETVRESTOREUSAVEVSET\WSKIPXSORTYSUMZTOTALZUPDATEZUSEZWAIT6[CASEKENDCASEPOTHERWISEKALLANDBLANKDOELSEFILEFILESFROMSCREENGETGETSIFINDEXMEMORYOFFONPICTUREPRIMARYPRINTSAYSECONDARYSTRUCTURETOUSINGWHILEWITHENDDOENDIFCASEENDCASEOTHERWISEBELLDCARRYDCOLONDCONFIRMDDEBUGDECHO(DEJECT3DESCAPE*DEXACT+DINTENSITY.DLINKAGE1DRAW2DSTEP4DSCREEN TALK6DALTERNATEWCALLXCONSOLEWDATEyXDEFAULTeXFORMATXHEADINGWINDEXXMARGINXPRINTW.EDBASE DBASEXCONSOLEWDATEyXDEFA8[r9>Z:Ͷ7GK[19E6S6y6Ϳ6_~6{„6{STOREY?GSELSEPENDDOPENDIFD*DDOONOTEDLOOPPRELEASECV8M%7ʛDM%7L9öG>q:Ͷ7LL(!O > ͎6!P w Dͮ7!"M!M"M!"M*M~ *E*M s6 ~E#D~L###~L*M"M*M"MD!M"M͊!"M M!Mh*M"M!"M*MDM*M"M!Mh*M"M~ ʀE*M$"M|QE:MGx2MGELCF:M_:M!OʵE=°E"M!Sl6|EDMS!S~+ xE*M> ͎6+60ExʇF2Mx"F*M"MMe6F!M"M2M0E:M2M0E*M"MyOe68FÇF:M2M0E:M_:M!OZF=UF"M!Sl6|vFDM*M!7!S> ͎6+60E!͌6!"M!"M!M"M*M~ gG s698ZG*M8͓*~8> ʹ6ʎG ҎG9! 8_CFNFL–G>:G88s7ڦG{ʦGz¦G{98:Gs7ڞG98žG{*M`6e6ڮG"M*M"M*M"MâF*M6 ͮ!7!+t.ͦ&#-m,L>:õL>:õL>:õL>:õL>u:õL8G>[: 9L>͕'J͂+G!cM5>2MG'2MMK%͂+'2M:D2M2D:TPH> 2M!N6O#x6! N6 #6 #"M"M"M"M#"M2M*M!`l6DM*M>͎6K͊!"M!"M*M"M*MJښH##"M&o62!Mh:M ҔHxjH͍!M"M*MJ"M:MGM!MhGG8IʤJI7KRK*M*Ml6DM*M+T]8#"M*M6 #6 5LRH*M##*Ml6DM*M*M##7 "M*M~RH6 #6 #6#"MRHx6JxʰI7KRK*M*Me6ҚHJ"M!M5:M jI5~H2M*M"M*M*Me6ҧIJ"M:M<2MG:M ҡIx2Mx yI*M"MRHxI7KRK*MJ##"M~I6 #6 #6#"M5L!M4:M I4~ښH2M*M"MRHRK:M > J>2M*MJ##~)J"M:M=2MJ*M"M2MRHRK:MLJ*M"MK9J*M*Ml6DM:M'9.ͦ&$:MJ'$MK&MK6,MKG,MK6,MKG,ýJ:MJ'$:M'$&>':M2D͊L++~ J#T' >.ͧ6#"MM7O> !͎66"M*M+e6K*M~.K 1K 'K> # K7y!"M:MG!Mh*M> ͢8G!P +~ bKy2M2MK*M*Ml6"MҪKy*M`6*MDM*M7:M_*M"MK*M+`6*MDM*M+8#"M*M:MO75L*M7:M"L*M^e6K?LKT] "M:M',xL L*M+6 #6 #6#"M*M_e6*M*Ml6e6ҦL*M:M'9.*MT] *Ml6DM7*M"M*M"M*M"M*M"M*M> ͧ6#"M!qM5Ͷ7ʤJ9J>a:9*E&odL LL/}o|gL z!LD;MAI>2)DL2 7 2 7 2 7 >2 7 >2 7 2 7 >2 7 >26 26 >26%26zt:7 {=tt NEW FILEBUFFER FULL, TYPE Y TO SAVE, OR N TO ABORTNAME TYP LEN DECCOMMANDSTRUCTURE$$$BAK+F'͑Gö=2 7*#7~#"#7!{ (t FIELD 01 COFIELD 02 CPFIELD 03 C,PFIELD 04 CEPFIELD 05 C^PFIELD 06 CwPFIELD 07 CPFIELD 08 CPFIELD 09 CPFIELD 10 CPFIELD 11 CPFIELD 12 C QFIELD 13 C&QFIELD 14 C?QFIELD 15 CXQFIELD 16 CqQFIELD 17 CQFIELD 18 CQFIELD 19 CQFIELD 20 CQFIELD 21 CQFIELD 22 CRFIELD 23 C RFIELD 24 C9RFIELD 25 CRRFIELD 26 CkRFIELD 27 CRFIELD 28 CRFIELD 29 CRFIELD 30 CRFIELD 31 CRFIELD 32 CS +ELD 2 "M:M',xL L*M+6 #6 #6#"M*M_e6*M*Ml6e6ҦL*M:M'9.*MT] *Ml6DM7*M"ÒDÅIKLANN͐%2rQ2pQ2qQ2mQ2nQ2oQͮ7!"Q8E͜%ڥO8EP%7D"tQ9͕'sI>2rQúD|P%7[E>2pQ9!6 "Q8͓*E>zI8M(!E>NzI*Q7!6 "Q*Q6(#x6x660"Q98,ºD8EP%7ƒE>2qQ98sP%7ºD>2oQ9úDP%7—E>2mQ9úDKP%7¥O>2mQ2nQ98P%7ºD98ʥO2#Q8úD:rQxI*tQ9:mQEE>͕'%͂+'2"Q:mQ)F!6#w#w#ͮ+++++7:oQ°H 9.:qQ3I>'!0%!W&!"Q!d"Q.,|IX'ʤHIͧʤH*Q#"Q*Q+"Q|ŒF:6DʌF*QͿ55>#:!d"Q:pQʍG:nQ³F*DM!> ͎6! ÑG!"Q!"Q*Q~0sG#}6##"Q ~N%G#F#}6*QyF6,#:#Q,Fw#7x`6:#Q,Gw#"QoG+~ G+G#"QoG#F#}6*Qy6G6,#:#Q,MG7x`6"QoG~# [GhGMGMG"QoG60#"Q F*Q6 #6 #l6DM:"Q̈́%äHͧ:mQ¬G*DM:"Q'9.>'äH:nQG*6 #6 :"Q*DM̈́%äH!"Qͮ"Q*Q~ ʍH ~N5H#F#}6*QyG6,#:#Q, Hw#7x`6:#Q,"Hw#"QH+~ .H+#H#"QH#F#}6*QyFH6,#:#Q,]H7x`6"QH~# kHxH]H]H"QH60#"Q*Q"Q G*Q6 #6 #l6DM:"Q̈́%*IOFI!+QA7 9.ͮ"wQ!"Q*wQ~ I>  ~H> #H#~#~ͼO###~ͼO*wQ"wQ9.*Q#"QH:6D3I*QͿ55>#::"Q'ͦ&:oQQI:qQjI:mQjI-*Q!6#x69.$>'ðO>$zI>D>'>2)DðO(͐%!"|Q!"Q>A2P2Q2Q2sQ!Q"Q8͜%ڥO8ʓJP%7BJ:Q<2QK*|QDM*QuڥO>2sQ`i"|Q"Q#͇6xJ!P4**! s6͌6*Q6f#6*#x660"Q*Q6+#x660"Q8ʓJ,¬I8ìI9>2Q!Q"Q8ʓJ)_J1**Q~ʰO#}6"Qbk ͌68͓*8798,¬I8VJ:sQJ!W&X'ʹJJͧʹJ*|Q! *JҠJ:6DJ!QͿ5 >A2P:Q°O!Q~0ʰO#}61*J>FzI>GzI>HzI8P%7¥O98C6¥Ox68ʥO%K88FK,¥O88K"Q!"Q*Q++"Qe6dK҅K}6C6*Q~{K#pK#"QPK*Q6!͓K& |ʪK02QQQ~K #Ky2Q#~KQ |LO 6:D2\2lQ8LP%7KL98ʥO_@2\8:L8LP%7¥O98ʥO!P>  ͎6P8*ʐLL L.ʡLaڈL_8sL>?͎68.L8P*LL LaڼL_8ìL>?8>2lQLͿ5:lQL!P5!P] 7MͿ5ðO!P] 7MͿ5ðO!Q"Q6 \N0M!P5*Q7 "Q6 N0M!Q"QͿ5*Q~ ]7"Q2h!]ͨ+/6ͨ+#62|\\Mog5#65>/͈55>/͈55Ϳ5O>:Ϳ5O\NM!P5Ϳ5ͨ+>.͈5ͨ+N#6)6 NͿ5NMͿ5"N\1N7(͈5 ~͈5>)͈5,6~NʙN#~2(Q2vQ2)QêN#~2)Q###~2(Q>2vQ!$Q :vQ*zQ`6"zQ~ NNͿ5>\:#6:yQ5!UP5*zQ5!gP5ðO(!"~Q"QͿ+|}O!d"QͿ+*~Qe6qOͅ'͊*~Q#"~QͧkO*Q͡+H.*Q0#*Q#"Q:6D O*Q+"Q| OͿ5*Q+5>6:!d"Q O͸ O*Q͡+ͦ&m,:6DʉO>5:*Q+"Q+:6DʰO5>6:ðO>'>2)DðO!OD;MAI&odO OO/}o|gO z\QMs6"SzCPP!!S5 9PO8*S͙OOP!͌62S:SG7!"SP!S5!DELIMITED VARIABLES USED BYTES USEDEXTENDEDFIELDSA:::::::::ALIKECOMMAND FILESDATABASE FILES # RCDS LAST UPDATE NoneONSDFSTRUCTURETO ????????DBFWITH$$$ SUB'&S),#0FIELD:NAMEC FIELD:TYPEC FIELD:LENN FIELD:DECN ????????DBFWITH\\Mog5#65>/͈55>/͈55Ϳ5O>:Ϳ5O\NM!P5Ϳ5ͨ+>.͈5ͨ+N#6)6 NͿ5NMͿ5"N\1N7(͈5 ~͈5>)͈5,6~NʙN#~2(Q2vQ2)QêN#~2)Q###~2(Q>2vQ!$Q :vQ*zQ`6"zQ~ NNͿ5>\:#6:yQ5!UP5*zQ5!gP5ðO(!"~Q"QͿ+|}O!d"QͿ+*~Qe6qOͅ'͊*~Q#"~QͧkO*Q͡+H.*Q0#*Q#"Q:6D O*Q+"Q| OͿ5*Q+5>6:!d"Q O͸ O*Q͡+ͦ&m,:6DʉO>5:*Q+"Q+:6DʰO5>6:ðO>'>2)DðO!OD;MAI&odO OO/}o|gO z\QMs6"SzCPP!!S5 9PO8*S͙OOP!͌62S:SG7!"SP!S5!DELIMITED VARIABLES USED BYTES USEDEXTENDEDFIELdBASE IICOPYRIGHT (C) 1980 BY SOFTWARE CONSULTATION, DESIGN, AND PRODUCTION (SCDP) 6542 GREELEY ST, TUJUNGA, CA 910427 *** dBASE II Ver 2. FILE DOES NOT EXIST UNASSIGNED FILE NUMBER FILE IS CURRENTLY OPEN END OF FILE FOUND UNEXPECTEDLY" RECORD OUT OF RANGE TOO MANY FILES ARE OPEN DISK IS FULL DIRECTORY IS FULL FILE ALREADY EXISTS NO FIND TOO MANY MEMORY VARIABLES OUT OF MEMORY FOR MEMORY VARIABLES ILLEGAL VARIABLE NAME TOO MANY CHARACTERS NO DATABASE FILE IN USE, ENTER FILENAME: NOT A dBASE II DATABASE RECORDS ADDED DO CANCELLED BAD NAME FIELD BAD TYPE FIELD BAD DECIMAL WIDTH FIELD BAD WIDTH FIELD DESTROY EXISTING FILE? (Y/N) *** UNKNOWN COMMAND COUNT = ENTER RECORD STRUCTURE AS FOLLOWS:: FIELD NAME,TYPE,WIDTH,DECIMAL PLACES INPUT DATA NOW? & MACRO IS NOT A CHARACTER STRING RECORDS COPIED BAD FILE NAME COMMAND FILE CANNOT BE FOUND7 NESTING LIMIT VIOLATION EXCEEDED DELETION(S)t *** END RUN dBASE II *** TO MANY RETURNS ENCOUNTERED ENTER RECORD #,FIELD (# OR NAME),NEW VALUE+ ILLEGAL DATA TYPE SORTER INTERNAL ERROR, NOTIFY SCDP CORRECT AND RETRY? FILE HAS BEEN DELETED ILLEGAL GOTO VALUE2 SYNTAX ERROR, RE-ENTER CANNOT INSERT - THERE ARE NO RECORDS IN DATABASE FILE END OF FILE ENCOUNTERED END OF LOCATE SCOPE MACRO NOT FOUND PACK COMPLETE, RECORDS COPIED RECALL(S)~ COL WIDTH,CONTENTS DOUBLE SPACE REPORT? (Y/N) REPLACEMENT(S) ENTER REPORT FORM NAME: ENTER HEADING: DATA ITEM NOT FOUND "WITH" PHRASE NOT FOUND ENTER SUBTOTALS FIELD:  SUBTOTALS IN REPORT? (Y/N) PAGE HEADING? (Y/N) > ENTER PAGE HEADING:  SORT COMPLETE "TO" PHRASE NOT FOUND** SUBTOTAL ** NO EXPRESSION TO SUM: NON-NUMERIC EXPRESSION> MORE THAN 5 FIELDS TO SUM *** SYNTAX ERROR *** ARE TOTALS REQUIRED? (Y/N) NONEXISTENT FILE2 SUMMARY REPORT ONLY? (Y/N) INDEX FILE CANNOT BE OPENED VARIABLE CANNOT BE FOUND SOURCE AND DESTINATION DATA TYPES ARE DIFFERENT "ON" PHRASE NOT FOUND FORMAT FILE HAS NOT BEEN SET SYNTAX ERROR IN FORMAT SPECIFICATION "FIELD" PHRASE NOT FOUND3 CANNOT OPEN FILE FORMAT FILE CANNOT BE OPENEDQ COORD: CORRECT AND RETRY (Y/N)? CHANGE FROM : CHANGE TO : MORE CORRECTIONS (Y/N)? O ENTER FILENAME: ** TOTAL ** RECORD: NO FINDPAGE NO.  SINGLE STEP Y:=STEP, N:=KEYBOARD CMD, ESC:=CANCEL WAITING 7 FLD NAME TYPE WIDTH DECE STRUCTURE FOR FILE: ENTER OPTIONS, M=LEFT MARGIN, L=LINES/PAGE, W=PAGE WIDTH ENTER SUBTOTAL HEADING: 0 ENTER SUBTOTAL FOOTING: EJECT PAGE AFTER SUBTOTALS? (Y/N) NO "FOR" PHRASE JOIN ATTEMPTED TO GENERATE MORE THAN 65,534 RECORDS NO "FROM" PHRASEG KEYS ARE NOT THE SAME LENGTH PRIMARY USE DATABASEY SECONDARY USE DATABASE NUMBER OF RECORDS: DATABASE IN USE IS NOT INDEXED MORE THAN 7 INDEX FILES SELECTED MODIFY ERASES ALL DATA RECORDS ... PROCEED? (Y/N) & ENTER TODAYS DATE AS MM/DD/YY OR RETURN FOR NONE : DATE OF LAST UPDATE: RECORDS INDEXED RECORD LENGTH EXCEEDS MAXIMUM SIZE (OF 1000) *** ZERO DIVIDE *** BEYOND STRING *** OVERLAY CANNOT BE OPENED ENTER RECORD # : RECORD NOT IN INDEX INDEX DOES NOT MATCH DATABASE PRIMARY USE DATABASEY SECONDARY USE DATABASE NUMBER OF RECORDS: DATABASE IN USE IS NOT INDEXED(2P2P2P2P2P!Y ͌6>2P2P>92P>P2P:2P2P͐%8E͜%IM8EM%7D9>͕'>2PúDM%7 E98IMM%7IM9>2PúDM%7IM9>2PúD:P;E>;: 98=M>͕'>2P͂+PE%͂+2P'2P2P:PfE>d:L M8E E_M™E8=IM8s7{2P2P9EL¶E8=IM8s7{2P9EWE8=IM8s7{2P9E8,E8lE:PE>A:L M8_YgF>2P:PF>B:L!T#8<'F>/F4F8>4F8>@2Pʹ6F2TO M!T6'#x66-#q#:Pw#:PG:Pw#p#602P:PwF>9:L8_Y‰F>2P M2Q:PœF>J:L8_Y¾F>2Q!M**"P2P M:QG:PF>@:L8_YF>2P M:PG:PF>?:L MQiQuڱL:PG>L:L8_Y,G>2P M2P:P?G>g:L8YOG>2P M:P^G>e:L jGvGX> >âGX8<ʋG>ʓGØG8>ØG8>@2Pʹ6RGO2X M!Y6'#x66-#q#:Pw#q#:Pw#60:PG>8:!"P!"P60!Q"Q60!U"Q60!U"P60!R"P60>2P:PHͿ5:P5#6L8aJs7{2P9~,±L8*PDM*PuڱL8±L`i"P:PzH6-#N#FxgHw#:Pw#:Pw#60"PÁH"P#͇6 M:P‘H><:L ʝH®H*Q> 2P>H*Q#8HH8>H8>@2Pʹ6ʅHO M*P6'#x66-#q#:Pw#:Pw#:Pw#60"P*Qqy`6#"QxBJ:QBJ:P'I>J:L M8_YBJ*P6*#x6:P_I6f-#͂6:Pw#:Pw#6*M"P!"M! p!q6f#6*#x6:PI*P6*M"P!"M! p!q6f#6*#x660"P*P*Q6f-#͂6:P_:Pw#6#60"Q:P(J*P*P6f-#͂6:PG:Pw#6#6#6*#x660"P2P:P<2P:P_:P<2PH:P_:P<2P:P<2P:P<2PH:PqJ:P'ͦ&:P'$>':P:!"P!W&:PK!iQR~0ʨJ#ÜJ#N#F!M4**"P6*#x6606&#*Px66xJ6#60!R6+#*Px660ͧJX'KfL*fLfLJ*P!iQ Ͱ::3D)KͿ5͛:)KͿ5͛:2P:PxKͿ5,M>_:*P#"P5#6!k5,M: DxK5>/͈5: D5>/͈5: D5Ϳ5,M:PʋK!TT Ϳ5,M*P!U ,M:PK,M>*͈5/6*P!Y *P!R ͧL:P#K͸:O:P#KX'LfL:P,M*P! :PL,M*fLfLͧLX'L:PK*P!R KL:PK͸:O:P#KͿ5,M>*͈5/6*P!Y *P!R KL:QʥL:Q0ʥL,M>\:,M*P!Q !M)™L1*!M5~AҐL6AͿ5:P:=M:PIM>0:H:P:R0L,M>E:,M*P!R *P!iQ :PL>2PͿ5:PM 98:P'$=M:P>9:P:Py9Ϳ5:POy/6 3M!FMD;MAI>2)D=M:>'T'5>n:Ϳ+5>s:ͮ+++++5>/͈55>/͈55-ʞM>l:ãM>m:>b:ͮ Ϳ5yA::::::::AFORMPLAINPRINTTOM5&6###FYxM5)6"Y~ ­MͿ5>\(Y6#6)6=).Y9h^%7ʰ4Y%7ʹO(2:Y%!"_!@Y8ʻN͜%ڝ[FYo^%7jN>LY9DN*_DM*RYڝ[>2_`iXY-#͇6xŸNy^YàN6áNp4dY0"_8ʻNjY8DN:2D-pY-Oͮ"_*vY-O*_6&#x|Y ~#N###FYOCO6#6YO6#p#6OY4#6#60"_*Y"_N*_Y|ʀDX'ʤOY_+"_|cO!Y>a:9Y:_|O.,Y͈ͧ5:_YʚO=)DMͧY+äO*_!Y*ʀD;OÀD!Y;9!ZY8^%7ʍPY7 P8>͕Y8[͂+PYP!D`6Y!D4ͫ.>'YP>&:GK:YP9͋-ڝ[Y_:D>98Z7^%7dP9Z^%77P!_4 Z8uP^%Z_57PÀDZ%:ÀD>2Z(!GD;$Z2_ÀD2_*Z_:DʀD0Z:G:5DP6Z%77P!_4 Z8uP^%Z_57PÀDͷM 98:P'$=M:P>9:P:Py9Ϳ5:POy/6 3M!FMD;MAI>2)D=M:>'T'5>n:Ϳ+5>s:ͮ+++++5>/͈55>/͈55-ʞM>l:ãM>m:>b:ͮ Ϳ5yA::::::::AFORMPLAINPRINTTOM5&6###FYxM5)6"Y~ ­MͿ5>\(Y6#6)6=).Y9h^%7ʰ4Y%7ʹO(2:Y%!"_!@Y8ʻN͜%ڝ[FYo^%7jN>LY9DN*_DM*RYڝ[>2_`iXY-#͇6xŸNy^YàN6áNp4dY0"_8ʻNjY8DN:2D-pY-Oͮ"_*vY-O*_6&#x|Y ~#N###FYOCO6#6YO6#p#6OY4#6#60"_*Y"_N*_Y|ʀDX'ʤOY_+"_|cO!Y>a:9Y:_|O.,Y͈ͧ5:_YʚO=)DMͧY+äO*_!Y*ʀD;OÀD!Y;9!ZY8^%7ʍPY7 P8>͕Y8[͂+PYP!D`6Y!D4ͫ.>'YP>&:GK:YP9͋-ڝ[Y_:D>98Z7^%7dP9Z^%77P!_4 Z8uP^%Z_57PÀD(> 2I2I> 2I!"I2I8E~I%7D98͓*HM(H"I9ÚDI%7DD9ÚDI%7DD9> 2I2I>2IÚDI%7H9͕'H>2IÚD*I|H:IH*+l6=)|;EGE xPERE>2I*I ~LH2I2I2ICƒE:I2I2I:I2I#~2I2I2I#}6~2I2I2Iͧl6"I:IG:IO!sI**"I"Im,&'2I%͂+'2It.!"I>2I2I%F2I:I'ͦ&&*I+t.#-͂+'2I>2I:I_*Il6"I|G:IG2I:IKF*I&:Iol6KF{2I2I2I=)DM!"I:I'_,:I'_,:IʏF,F yF*I#"IÕF,H*I*Ix6"I`i!I4:IrFH*"I!I"I*I"I:IF:I_*Il6|HʱG"I"IF:I2IHñG:I':IG+ڱGͧG*I#"I#G+H:I2I!I HG:I'H.*I͕HÞG:I'*I*l6=)DM9.*I͕Hͧ7*!:I=O7y!`6x6:IOH*"I*I"I:IF*I+"I|F:I'=)DM!"I:I*I}6"I*Il69.=G:IE%F:I'$:I'$>'*I1*:6DI>C:I:IOH H:I2I:IGyH==H!I"I!I"I!`6}6s6"I"I!I |H*Ix6*Ix6ÇH:IʇHÐHʐH=AHx:I"I:IʶH!I ʶH>2I!I >2I>,:WD>+:H>:H>N:H>D:H>$:H>2)DI>2)DI! ID;MAI~("x ʶ27xGF#:7ªF#*7*76 ª:7G*7"7:6ă"7 :7m#:6ĩ:8A::::::::AONASCENDINGDESCENDINGTO3>28G27*7J##3&& 07COPYRIGHT 771978 SCDP ^#V*C.W.RATLIFF27&&I 0&I*0$:AON#-͂+'2I>2I:I_*Il6"I|G:IG2I:IKF*I&:Iol6KF{2I2I2I=)DM!"I:I'_,:I'_,:IʏF,F yF*I#"IÕF,H*I*Ix6"I`i!I4:IrFH*"I!I"I*I"I:IF:I_*Il6|HʱG"I"IF:I2IHñG:I':IG+ڱGͧG*I#"I#G+H:I2I!I HG:I'H.*I͕HÞG:I'*I*l6=)DM9.*I͕Hͧ7*!:I=O7y!`6x6:IOH*"I*I"I:IF*I+"I|F:I'=)DM!"I:I*I}6"I*Il69.=G:IE%F:I'$:I'$>'*I1*:6DI>C:I:IOH H:I2I:IGyH==H!I"I!I"I!`6}6s6"I"I!I |H*Ix6*Ix6ÇH:I(͐%2uH2vH2tH87E͜%G87E:vHDpH%7D9͕'ڸG>2vHÐD:tHDfH%7D>2tH9"wH8͓*G98,D8D:uHGmH%7G>2uH98G"~H͓*G2{H8M(G"|H9ÐD:vHG͂+VE'2sH ,uE%͂+'2sHͮ 79.>'!0%!"H60:tHE*wH98͓*"wH8M(G! ~NE*H6"H8&G*H6f#6,#x660"H*wH98,IF8ÖE!"H*H~ IF ~N ͎6m,ͧ~*GX' G*uGFuG*HH !"HcG:uH3G*yHH ?G!H cG:sH'*DM9.>'*H#"H*HH *uGuGX'cGG*H":sH'*DM9.:sH'ͦ&- 9.$>'*HͿ55>#:G>$:G>N:G>:G>D:G>N:G>'>2)DG>'>2)DG!GD;MAIg}oɯO_yW{!z,"|,"|ͪ!">OFGÿ|"6 X"|"6 ?X"|"6 W_ |"q"FIELDSONTO6G!GD;M(2H2H2H2 H8^E:H»DG%7»D98͕'2HÐD:HDG%7D98"H͓*DG2 H9>2HÐD:H#EG%7#E98wG"H8͓*DG9>2H8,D8E: HwGG%7wG98wG" H8͓*DG9>2 H8,D8?E:HLG:HTG͂+'2H ,!0%*HM(\G F#s6"H*H: HO&\G N#s6" HxdG2 H!"H"H:HGF*H"H*H98"HM(\G"H*H͓*"H*H&\G*H6f&#*Hx66#6,#*Hx6"H*H98~,>F8"HE*H60#"H: HʰF*H"H* H98" HM(\G"H* H͓*"H* H&\G*H6(#x6*Hx6"H*H98~,«F8" HTF*H60>'!W&:H'*DM,*H* H: HO6!GF G:HF*H : HG*H >'ͲH.:H'*DM,-GF>'*-GF:H'$>'G>$:lG>:wG>j:lG>P:lG>N:wG>k:lG>'>2)DG>2)DG!GD;MAI:8 ʣ!y Ī:8O*7"7*8{!z̘zB"|G|!|"!"|/G}/O!>! !7>{ADDFROMONREPLACED;MAI:8 ʣ!y Ī:8O*7"7*8{!z̘zB"|G|!|"!"|/G}/O!>! !7>{ADDFROMONREPLAâã $^@ABCDEFGHIJ`abcdB@P @Terminal: Televideo 925 !29!79:I}lg!<9:AS:Bh<:CS!DC!9!9*ʜ:J_*p}R*o >=ڜÓ!K w *pڅ wà}2m7?ÜŒ:J7x ҉ ʉ:uʉÜ  !uG* 7?x7C~###x%7y7 *#~ G::Kh<~h<#Co:b}h<&d}iox0h<& f}0hh<>Gh<>0h<>h<>(h<-.P%>h<>Ghh<>)h<>h<>(h< >h<>Gh<>0h<>h<>(h<%iO:%1>9yx x 0w#y> <2*Ʌo$/|E!"fo*o}0IJ1|IJ1*o|̟1)>J#qo*0<̙1DMqoB1‚!xN#F !xaDMqoB1‚ F"pqo*0!"=n >ԯ1ͯ1qo*0͒1*m"Nn2m*Jn|*p̨("Ln ),)һ*Ln"p ))*Rn"=nPY>2m͍:mı1*=n<"o>JPY@,ij1͔ã*=n!qo<w#s#r*=n!qo<~#+,F   ; k1 ?: +,  ; k1! ?F >k1>C@ :ȹQ Q ~w!!>%g >%g >%g !! >%g >&g >& ~>&g >&g ͲC=`1C@,  *=n!qo"=nͰ0"=n>+ͲC=`1QLͿD q#p>' >) ͲC=`1QLͿD"?nɗ2GnͲC>7 >2GnͲC=`1`fKG:oĚ1!orC6C@`fK̴1 Դ1O! pwy| 6 # r ї2m>K >I >G >E >? ͲC>M! >O >Q >S >U >W >Y >2AnC@`f>2FnQLͿD"Dn!poo$ͲC#`1!"mBK-  d?:mĶ1!"=n >͚̳1:mK ͲC:`1 :oq :ro ʑ > ѷh 2m*7=‘ :'p>2'p> ::P2'p*՗2m*Jn| F#N+x  DM2m- à d?:mĶ1+ !"?n"Dn2Gn2o2mͲC#`1BK͚̳1 ͲC:`1R  *o}0̲1}¹ }?@2o| ګ _ :o̔1>! ̍1̒1ͯ1!> ̒1̎1į1:Gn̎12o> ʝ ̎1̎1͒1:o0 $ *?n}̷1ͼ ܎1 *obH*o#ͼ ܎1> ͒1>2'pGuڡ ͒ ܨ1 ͲC, ͓ʯ *ooͲCC. ͼgl1xĤ1w ͨ1ͲCNM ͼgl1x̥1͸ ͨ1:o ħ1ͲCZ{ ͲCDĨ1ͼgl1x̥1 ͨ1ͲCPĨ1ͲCDĨ1ͼgl1x̥1V ͨ1C@, ͓a12'p! }̸1}?@2o>2m *fo|̸1:m2Gn2m~ʚVz#~W:m<2m:Gn =2Gn##~:Gn2Gn#~++nb"jo##*jo:Gn  N*m "m:Gn^/*mArC"m:GnyÍ:m   *fo2m2Gn  ^# ʾ y*m"m*m"m *o"o!"o :m2m' pz\::m>' *fo< *o"m*o"mɗ2m 68z1 , ™z,zy_xn+~w^ x0ʂp#yͭ]҅~h<#x‹,©͆]86 8´ͭ]8 ¿^8 ,82m> 2mA 8y7z@:o0+-. owh<# zWz8x8D:m DzDxDoziz ͭ]P~ c^Vxoͭ]i>h<8>2pMAڈ}2pͿD#F:pOxڱ#qyʱ ڴ~>ÚñM ܨ1̨1m:p=2p~.2p>.>> m{CͺJ:pO~weCM ܨ1̨1m:p<=2pS~4>-~>m{CSͺJ:pO~weCM :pG:p=ܨ1:pÁ!mͤH:m>@¯O:pG:m=2m!mL!m͓CeCͲCXQLͿD},MD*o "o"oͲC7QLͿD},*obH"o!"?n"Dn2Gn2Fn2o2mͲC#`1BK͚̳1 ͲC:`1R  *o}0 ̲1}?2o}}0ʍ|ʸ̲1Ҹ|ʸIJ1*?n}̹1> ʂį1;*o#> ʂį1;*Dn}̺1>2'pl*o"ho*o)"do"bo"fo*fo! p[# *foN#F*bo "fo*m*mbH3*obHܢ1*o"m"m!"o!"o;*fo ~#+̩1Gu=͒ʄ ܨ1oͲC,ʑ͓K*ooͲCC³*iĤ1`foͨ1ͲCN*i̥1J%oͨ1ͲC*i̥1Jͥoͨ1:o ħ1ͲCPͲCDĨ1*i̥1Jjoͨ1ͲCZĨ1ͲCDĨ1*i̥1Joͨ1C@,u͓a1:oŒ:od:m$*o> ʂ̒1̌1̓1ͯ12'p! į1:m›':FnKMD*do_dԋ1~ 7?7¸w#õw*fo#~ ##~G*do #_~x w#^#~*fo<2'p!"=n >~#~ ~2ko#~2jo##:mj~t~t*joʠ1~O̪1##~†# <#X<~O»̪1H*m "m##<*m~#"m ##<*m*m~#"m"m ##<#~ yO##F+:m'y'y.h2noMAͤ2noͲC*`1ͲC# %͚̳1C@$ :oIJ1:o ̲1:o̲1̲1>2'pBK͚̳1ͲC,ͲC:`1 ͅ[C@,ʖ;:o̼1̼1> W>:C@,ʖ;ͅa1?2'pͅڽK>xC@:77?*o&ͧD*2pͧD=D!ͧDC*2pͧDCͿDE:oO:o> ::o½ͅq/šͲC(g1*o"BnQLͲC,QLͿDͿD|u1}<2CnͿD|u1}% K;m!o:Bn܄1[> 2mͧ;Âԅ1*iJ!m"!pDmAC@;[> :`fKGx[~:#ͲCĺ1MA`1"DnͲC:`1 GuX͒ ͲCXRQLͿD}",MD:o =|u1> : 1*o "o:"o:ͲC‡:o 7:> :QLͿD}u!|u1E> :{:ͲCQLͿD}š,:o |u1:oҴ?::o> :>2og}:O:o  x: :*obH:"o:ͲC:o 7:ͲC(g1QLͪ7QLͲC)g1ͿDͿD|3!|>:oo&}D,:oLo:o`:o`Խ1|i!|t:oo&}z,:o҂o:oʖ}g::oG}Gʩ> : :oG}E> :> :¹::ùͲC"ͮ :7:ͲC'7:ͽ :7:ͲC,͓f*ooͲCC*ib1`fܨ1ͲCN;*i̥1J%ܨ1ͲCħ1*i̥1Jͥܨ1C@,͓a1?2'p>~ʎ #w~#ƒyɗ*oo~CNPZL2m!"m"m"m> 2m!o) s#Z$+-.x  :m2m xw#:m=2m76s+-RB2:m2m2 x2#Ly<2pxB<2pͺJ~O~w#~_:m0:m2m*!p!m"!p͍ ͦJ"\nͻF"!p:m o:p=G!moLyʻs.Z+-$#ʕxʰ~#Õs+-$~ "m#Õ~ "m~ "msZ#)~ 0> ~ >0> Õ!o:p==2p6 #:p82p]:ms+6 +6 !o~p:o#`7*m|ʋ:m>+‡>-w]*m|ʣ:m>-ʟ> w]*m|]6$]+-ʿ7:m]6 ]:m]6-]>2pMAͤ2pKG:pO x~: # y > :   M ̨1ܨ1*!p!m"!p͍ ͦJ"\nͻF"!p:m*7h:p!mG~:g#ZM :pO:p=̨1ܨ1!m:p6#=†͍ ͦJ~@O:p<O :p=O!m Gw+²:p2m:p2p!mͤH:m2p/!mwSM ̨1ܨ1͍ *!p!m"!pͦJN:pw2p"\n:p<2pͻF:p=2pO"!p!mm/Gw# I w# @ SMAܨ1|u1}u1 u12p2pͲC.:p‡ MAܨ1|u1}u12pG:pͺJ~@O!C͓CͺJ:pGyw#6P}G ":î  ':ý :o IJ1:o?2oC@: Õ :o> <2m!!;"y!ʩ$*'0!!*oDM*o:oGOW_Ͷ!!*=n&^#V"m#^#V"m!*mDM*m*o|M$+c$!"oɧʤ%d!|$:oE$!Ͷ!:oʅ##ʩ! ©!!!$*=n*o*=n"=n"=n͚"7ȯ2m:m2m!>O"*o &"o &"o &*o|bH>"o &"o &"o͚"y"2o:oȯ2o#+d!"#!0"!"oÎ$͚"͂"*{"m"͑"o!mrCqo!omÈ":m<=!͚"!͡"÷"!O""!͚"*o*o&*o&*o&*o&*o&#͚"͂"+͎$͑"*oÎ$!o>Jqo"#"W"!"m*o|v'"m*m*mbHv'|g}oV#R##"m-#+*#$:oO*o$ox#*o ++++# x#V#^*o#*obH>ԙ#é!*o|#*o*o"oD#D#*o a$>*o#"o*o*o+$++++^+V#bH#*o#$#͡"*o#*obH#"o"oM$i&"o!"oa$>"qo͎$@$^$)$>>>*o'"o2o*o":!l$c$*o#"o|}$!o4qoy!c"y"":o$*o$*obH>"oý"r!M$^$)$:o%Ͷ!!*oV#!!>ñ$*o*o*o+$:oG!orC$Ͷ!͡"!#"m"m8% >•%*o#$•%*o$o:oGrC*o|}$•%*o#"o*o#"o*m|ʕ%$*m*o&*m$!ͽ"!ñ$!*=n͸%"=n!}o>J"!o~%vo~1&&I$͎$qo͎$!> &:Ana&2Ank'V&.&:o2oø%qo*o)|G!o&*p;.*=n{ozg"o*=n:o&"m*p"=n!zo6K#6E#6Y>J:o&:vo2vo:o2o*p<"o;.!"o":o '&*m*o++++++}|*o}|a&*o######"o*o"o!"o"oä%*=n>'"=n:o0 :oW'Ͷ!^'!^'>d!:o̡""qo:oڬ'*o|ʩ'*mbHک'$:oO*o $V#^'>*o|7'*o#V#>'##V#^+|¹'*o><>>̓(' )}D'{:(:n=(7|((3(x/Gy/O3(xGyO/(|g}o(DM|g}o&x@J($|(=(|2m2n}o|g`( a(7o(:m=2mR({_zW}o|gyOxGDM!>2mzW{_Ҙ( |g}o:m=‹(u("Jn!"m>6#=µ(6 #w#w#6:#w#*Jn{_zW*Jn"Rn)>),)>)*Ln*NnbH>)> A[?*Jn)͉)))####V#^*Jn"Rn>͉)*m(*Ln(|}r#s*Jn *)c)"Ln(r#s#("m*Jn7|7Ù)|7(######## *)³)#¦))ڽ)##V#^+Ð)33 :Qn) A)[)0)::Qnȗ2Qn:Pn $*(*):Qn2Qn :Pn*>2Qn!**Jn͉)))"m"m##Vz#^A*++^+V*mr#sg*|]**JnV#^+K**m~#~*m######V#^z*(yoxg*p+`i"p*m(*Jn****+^+Vzʺ*(*pbHš**m "m`i"p*JnT]######~#ngx*y*6#6+("m +#+yw+xw##z#{bH+*p}`1͛ C@~1!9p"m*p+"mMAX+ZA"m~#<ʊ=#~oU+$"mͲC,}+MAڤ+ZAz+~#<}+#~oz+$"m*m*mbH`1ʞ+BK*p#+`i+"p?Ê=*p+"m}+*p|`1ͲCʬLMA+_*m|<*m"p]=C@:!\"=n!6 # +͜0ͪ7!l"=n͜0\*0ѷĬ1*p}>Ê=2m#,>2m!40\e0!"Hn!\"=n͜0:m],ͲC,],ͲCS`1!e6S#6R#6C\*0.:m\B1:mʇ,ͲC,.:m,>t/*p!9p{ozg̜1#|t/}t/9p|ʿ,+t/ñ,>t/\1\<̗12'pÊ=t/ĝ1:mz?t/gt/o9p"9p+"p*mbH-z?v1:m\-?*9p9p|6-t/ܒ1+%-]/ї2'p:mŠ=*Jn|=?<>2m#,*Jn|-ͲC,s-ͲCx-͛ ͕-*p#*JnDM*p͛.*p#"Jn-*Jn"m*m*p"mͨ("Ln;.z."m-*m"Jn*m"p*m"m..)-*Jn*p*m"Jn*m"p**p"m"p"Jn*m%.-*m"p*m######V#^z*m"m*mbH DM @.*mbHv1"p L.A_.[M.0i.:Z.$[.( )g1ͲC,C@*pBK(;.M.PYͲC,ʂ.bH.+`i"p}_|W*Jn"Jn}o|g"pbH w+ .ø.:mĜ1\*0͛1:m/>2'pÊ=!9p"m*p+bH,"m7>2'pÁb$6#*/ #w4/ ???????????t/]/>\*0:m:mG:mx\*Hn 1,1"Hn!\H/'/o02\bk>2m*0\*0//ù/?>:m/:\/*0<@:>::> :񇇇O  #~:0> ::m<2m'0>2m? BAS `i>6 #=]0~#e0C@ ʓ0:ʓ0Aܮ1FԮ1@͕0ͲC:ɗ*=nwC@ ̭1:̭1-LKG#~:+>0o02IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"y3"w3++~`1*p"6po&#"4p+3}1-y O112'p2Pn*Jn|<*JnDM####V#^# ++~###2~wgo 2! ~2m+~2m2??>(:*m&}A>):> :& o2%d2 :%o2}3„23B3B*p|"m23B}A2<1??*mZA"mTc"m!"m"m*=n}ʊ=!"=nÊ=:4p*m*y3"m*p"m?Ê=3Bá2*=n}53*p|*o}53ZA|1go"p`1 *p|:m!o=O3G3^#V}ZA|1*m*m"p*m"0p!"=n0=Stop at Error RequestIn{Ready}DeltaSoft BASIC Ver 3.01 Copyright (C) 1984 by DeltaSoft, Inc. DirectLine SYNTAXSYN EOSSTR EXPUDF ARYARY EXPINV VARUDF VARPAR MISREL EXP INV CFN CFN NAM INV NFN VAR EXP SYN EOLDUP VARDIM SZEON RNGE NUM DTAFOR LEVFOR RNGOUT DTA NUM RNGOUT MEMINV STMSTK OVFSTK UNF ATTNLNE RNGUNK LNESUB STR INV ARGDIR STM INV UFN!SUB LVL"INV RET#MIS FOR$ TAB% INV FNC&UNK UFN' (FLT OVR) FLT UND* DIV ZER+STR LEN, DUP KEY- NO KEY. EOF/ 0 1 2PER I/O3CHG KEY4INC KEY5INC DTA6 NO DTA7DSK FUL8FLE EXS9NO FILE:KEY L/P;DIR FUL<NO PRGM=FLE TYP>PRGM LD?REC LEN@ OP SYSAPTR MDEBFRM LENC INV PRTD STR EXPE NUM EXPF DTA LENG FRM PRTH FRM SPCI INV FRMJ FRM MDEK LFLE RENMFLE NAMNDRV SELOUNKNOWNPHLP ERRQFLE OPNRFLE MODSINV FLETFLE NAMUFLE NAVVFLE CLSWINV RECX PR WRTYMIS RECZMIS USI[PR READ\INV DEV] PR LIN^ _ ` a b c dQLͪ7QLͿDͿD|~1M|~1}y>LQLͿD|~1MhK#LC@,`1MAq1|u1}LEPRINIFORLISELSTHEGOTSTOGOSUFOTSTENEXOREWRITWRITEXAREADATRETURINPULINPURURESTORRENOANOSAVLOADIENOPEFILERESEDEFREAUTCLEACLOSOFLISTOPTIOHELDEGEXICHAIRENAMOUEXAEXAEXAROUNINLEVAABRNSQSGSIATLOEXPOASERLINCMDKESTATUINEXBEXBFCHSTCNVRTIMDATEXCEXCINPUOUTIOUTPUBEGIKEYERELATIVWNAMNEKEYKEYRANDOSHRECNEWPAGTAINDIFORMAUSINREKEDUPKEEXIIOERCONSOFLONOKEEOSKICUPIPRTZLPRESPREPTRSEATTERROOFLOUFLOZDIIGNOREXDEXDB _K7bK%_A[lXRYod2#eK[``:m m;b b<>2o:oG:o b<—;!"oҺ;> m;> K;ç;>:mb<:o =;:m ;h ;> ;<>:mh<:mh<:m >E<:(p<2(p?>2(p:m*!pw#"!pk<_ɗ2'p2m>2(p23n!"6p"4p"=n!9p"m"m*%"m!n6#6 #6ªJ>2Xn!9p"#pB2%p2/pgo"p ڄ=!9"m*p"m*0p"m6]=z1C@l= x=>w1 ?L?*p|0=æ=!"m2Pn2[n2m!"p?3B?\:[n>*YnO "Yn!l"!p*Yn|<ʊ=>2'p{A!l"!p*YnZA>!l6 #6 "!p2'pA!l:[n>\>b=\yƒ>xZ>*m*mbHʣ=ڣ=G<ʣ=_@>bHJ>,>+"m'?Áb*m͞cʣ=*m"m~#+<ʣ=b?A?=lC@ ʣ=?>*p|>*m>"m*m>"m͛ ͯc*mZA"m*mZA"m?ã=~#ng!9p"m"m??!lY@A=C@:?C@`1A=a1A=!9=O F#fh|`1*p#;.!"Jn"m<1k2Pn!"p!k"p!bn"0pz??:O! 6 C@ʊ=!"JnT-z??Ê=!?p"~#ƒ?!"9p:p;pkl9pbnG:'p?xh :> :> :lC@!:@"p!@"p"\n7!8@ DM)) )u1O !@0:0 B@|Q@  Q@)A!7y@A{@ "@_@yw@@Aڙ@“@#Á@ʪ@~#ڙ@~@b@xʻ@@Aҙ@p#x@@w #@AY@@_@y/Ow #@+az @AA[A@ "@A#AA[ABA bkw# 4A)A0:BAC@:?0@9p hAoAi` eA O]A]A>7ڈA !'ͨA!ͨA!dͨA! ͨA{;A{_zWҪA{_zWx 0:l*!pyA :A!l"!p*m"m??{3B*p"m{A?Ê= B:Bր:*#p~#<5B#N#~ $B2[nMAں="YnͲC,º=MAں=}2[nú=ͼgl1xʰBͲC=`1JeC>ͲC(BͲC=`1`fQLͲC:`1QL#LͲC=`1ͿD|u1M ͿD|u1}BͦJͿDrCw#rCC@ ʆC+:?/7^E{KA ʳC#C7?ͿD> C͙D>-:}AͿDDMͿD çDͿD͙DDMͿD çDͿD|DͿD|DD̙DçDÙDDM!>2mxGyO,D|g}o:m=D`iͿD|DͿD|D|̊1]D D|@kD)`Dx2mDM!{_zWҔD{_zW):m=;D2m)tD)#ÄD|/g}/o#ͿD͙DDM*pp#q#"plDx1*p+N+"pFkDy1|}ͦJ~GA:pD<2p>>6E>F6E:uN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:ÒͤHy#w+ vI ,IͤH#w+HAIͤH#w+ DI =W~@܉1Ԉ1 dIͦJ!C͓CG H҄I {IyOͦJ#~̊1ͺJ#~+I:pnOII>2mIJI II/JJI:pO#I I?J5~̊1:pO 6H:p_~w+JyOJxJ:m=GJ2mGþIw-¹IGO~AԈ1Ox>́Jw:p<nO# ~J wtJ>ͺJ#~+~w*p:pýK*0pͧD"0pçDͿDDMͿDy"0p:'p>2'p*!p!m"!pͧDC*!p6m^E"!p2'pGC@(g1C@)g1C@:m"g""g*0p,K Kw#@LJͦJ~~FԈ1A!ڍL2n͡L͖LʍL͡L͖LpL̙DçD:n=2n2Pn[g܀12PnͿD:Wn<2Wnw#xw#(Ls#rýK:PnGM:mMx2mBK>2Pn)Ć1PY*Rn~1w2Pn2m#~2Xn#~#fo:XnAM$b1(–M:Xn:m2Pn[gl1x2Xn:m2Pn:mͩK2mͳKC@,MC@,~1NM2Xn#LͲC=`1:m2PnͩK~w2Pn)͛hl1n1ͲC$>M<2nͲC*MͿDNͲC,ʷM>QLͿDNEͿD6#p#6N;.M*p"n:n!}2n###"N:p<&oͧDͲC(d1QLC@,.N6#p#ͲC)f1ͲC*yN:nb1*p*n"p@N2n###ͧD"pxO/<_*p~# ‰NC’NͿD|o1r#s#O"p:nN:pOA6#xN6NbH¿N:nOA6#q#6NbHN#x6N|ċ1}͋1*mbHv1LBKQLͿD|SO%~1}AO*p*m}o|gK#L~1 o&9O}cO:mo2m9OŠO*=nͼ‚O*=n-^"=n9O*=n͚̳1ͲC,`1QLͿD|~1}~1O> OO> `iOO> `iO~1> K"=n#LL`fͪ7`fKOKG+͙DͧDͧDͲC,!,PQLͿD|u1}7P,xڕP2n#LͦJͿD͓C#L6eC!n8QS3WDJ:p2m*pʬQ+++"p> 2p>6#=®QãQL͏Q*pͺJ~R#~"R͍R")n͍R"+n~<@w:p͓C͏I*+n͓C}G!|R͓C͏I="R*+n"p͍RͦJ*)n͓C*+nQ"p,R#LͺJ:pGN#~RRy!C͓CͺJw#6P}G:mfR*p+"p2p*p+6#6#6#6#"paR :m2p~1ͺJ*p:pR͍R"4n͓CHڷS!S"1n S*4n͓CHGSͺJ~w!S"1n SæS@p6t9%P'Ui1e=fA"333vU@ffffd2xV@:'RF8C $@dV>AfffG3@Ip$%L͏Q=S!S͓C}G]S!QTÓC1AY&SYL͏QͺJ~wAҔTTG~w:3n&R;;!KS͓CH&R*p͍RͦJ!C͓C͓C͏IT̈́JͺJ~!S͓CT̈́J}G"psT*p͍R"6n͓C!QU͓CHͦJ~U͍R"6n͓CH!YU"1n S*6n͓CH"p!AU͓C}G!IU͓CH!C͓CH!IU͓C*6n͓C}GÏIR5wU02V&yI$1?7q$Rq0iwe(I ?7X5SGH@(S5Tb"t@3333'&(L͏QͨU&R*p͍R"8nͦJ#~̄R+~6&ր܄R@oU%K!\V͓C}G!lV͓C*8n͓CH͍R"8n!dV͓C}G*8n͓C!C͓C}G͏I͍R͓C͓CH͍R"8n!tV"1n S*8n͓C!V"1n S͏IH}G"pL͏QͨU!wW͓CH&R@PA1b'v``cP%A92c p$A%haA5BY!(xFSA0 CbL͏QV&R*pͺJ~w!wW͓C͏I͍R":nTLͿDK̈́J*:n͓C}G!wW͓CH2:nͺJ~W!C͓CH::nWcW"p͍RͦJ!C͓C͓CÏI#XP7BP P3 80W'`Affg&fqYB1%%'((EL͏QW&R*pͺJ~w͍R":nTLͿDK̈́J*:n͓C}G!+X"1n SͺJ͓CHͺJ~wcW"pɽ&Bg%Ty`Br6f%CWH@f'0BQ)'vͼgl1*p++:/pͿD:/pʖX0YbHXâX" n2/p"p* nͧDͲC=`1JeCͲC`1JͺJ"nͲCXJX!C͓CͺJ"n~X*n͓C* nX* n͓C*n͓CHͦJ~s1C@:Y a1bkͧD* nͧD:/p< r12/p>ͿD" nͿD"nͦJ"nͦJ"n:/p=2/pͼgl1ͿD:/p̃10YbH]Y*p####"p͑J͑J* nͧD* n͓C*n~͓C}GeC* n͓C°Y*n͓CHüŸ́J*n͓C}GͦJ~Y:/p<2/p*n>"p>LY#LJͺJ~~@"ZG:pO#x-Zx9Z ZKy!C͓C}GͦJ!CÓC~Wwz~WwzLJͺJ~w#Ln[QLͲC,pZQLͿD|u1EͿDM*0pxʂZq#wZK#Ln[J*!p!m"!pD!m*0p:!pG{ʳZw#çZK"!p#LͲC$j1*0p*0p KͲC$j1*0pZn[`fͪ7K̩1> :'p>2'p:m>2mJ#L~#N:[%m:pG*0prCK2m2'pZL[~Dĩ1# [Pĩ1~D^[#j [Iĩ1##ͥo#[ͲC$j1LL`fKo&K#LL`fKʘ[~o&K#LL`f*0p6K^E#LC@@ZA|1:%p<́12%pC@:*p[ [go0=:%p=̂12%p"pA=C@\G\o\2\?>(:*4p}A>):?d\:4p2m?z\İ1]\?Ê=0]\:]\QLͿD"4p\o\2\DBERR MSGDBREF MSG!\'/\*0*0:m2}\!*0\!~~7\~~\h<# ±\~#fo"}Ù\\!}!l6 #6 =\!l ~# \!l}o\$]]: *]<]<]<]<]^N]2&p:'p:]?*p|]G*][]^ ^>Ÿ]ͭ] ^ DM#~ v]> Ͷ?k]]]x7y7+> h<^ͭ] ^]x7+xP]]7?]SxQ]P]ob:'pyPyy{]]]>h<]x7# -^^ ^] U^:'p]xP ^F^ ^G>PoO^$]] q^xQ ^PG}Pok^%]]€^:&p/2&p]ž^x!l‘^AxoҘ^$]] ^ ^:&p^~ ^w#Ͷ?]> ö?y ^ ]Ͷ?Nw#y ^w#yP^y^y^]]2'p1?Ê=e_ͿD|6_C_C@:]=C@@ZA|10=C@_`1N_C_Z_xC_ C_7CͲC~_͝_ͿD|/g}/oͧDÁ_͝_ͲC͝_ͿDDMͿD|g}oͧDÁ_ͼ_ͲCͼ_ͿDDMͿD|g}oͧDà_C@e_ͲC(_e_ͲC)g1*i`J_`h1JHͦJF#N!_!ʧD!çD`f_``fK2nK2n:nGP`:n~C`D`#:n=2n:n=2n`?L`_:n~D`_ͲC=ʃ`ͲC<ʔ`ͲC>ͲC=ʻ`ͲC<ʱ`ö`ͲC<ʬ`ͲC>ʻ`ç`ͲC=ʬ`ͲC>ʱ`!`!`!`!`!`!`yxy`y`2m`2mͲC"a `1" a:`ͲC:`1a>?:?͏a*p|1!lͼgl1x{a{CkaeCͲC,„aͲC,-a>?:>?:͏a*a?ͿD>R:`-L!l6 : ¼axʖa+6 >Ͷ?> Ͷ?>Ͷ?Öa ږawͶ?#6 Öa>2m!9p"m*p+9pbH>"mMA$bZA~#+<ʊ="mͪ7MAq1ZA|#<$b##~ b#"mbH{1͚̱1>2'p7Áb!9p"m*p+9pbH>"mMAځbZA~#<ʊ=##~ ab#"mTcxbnb"m'?*mDM!l"!p*mób?6ʨb>¨b>blA}’b|’b?=?:'pb> ::P*2'pÊ=ʿ, ,:'p>2'pV#^##{A?)c:  c*!p+"!p2'p7G>c4c0cKc:>c:c++9pbHʓcړc~ Yc###Nyښc #~ ʚc yc#~ Yc#>!9pÐcYc~#<+ʭc##N Y@{*\n<2m*pDM!9p~cc##}oc$c#~:dc++*p:m`1oc$:mG| dgo"pv1"pDM~+ |d}d*pr#s:m<#w#w /d+###~ #?d*p#DMw#zNd{Nd+"p:m8d*\nýcC@dJTLͲCŠdͤd%_ͲC—dͤdø[ͲC`1ͤd?fͿD|p1}p1-}:d d,µdñd>dd`1`1 ?C@d`1!> >ʹ7u1Qu1"2p>2p>2pͲC+e2m7eͲCZe>2mͪ7ʹ7Ce2ͪ7ʹ7Oe2ͪ7ʹ72C@.Uve,Dve,Sve,Cġ1ͪ7&`fK̡1~Uʙe@ܡ1ԡ1gͪ7`fK̡1~Uʻe@ܡ1ԡ1G:e:O*L?ɗ2mC@# ͼgl1*#p|e-L:>QfyfͲC&yfKKKcfC@fͼg"gxb1ͲC(f*0pͿD##~2m#fʼf¤f#fʼf ¯fKQLͲC:`1QLͲC)g1ͿDNMͿDNGy}12TnC@A[?ͪhOͲC$yʩg*‹g@NOͿD6#q #6 ”g#;.ͧD>,ʸg)ʸgég͛hOxêh:Tnh:Pnh2Tn2Pn):Tn2Pnf1ôh2TnC@ͲCRiͼg?iͿDxC@Ki"ͲC$ALiRiMSGThe DeltaSoft HELP facility is invoked by entering HELP followed by one of the following parameters: a command, stae SYNTAX ERROR: An unrecognizable command/statement was encountered. SYNTAX ERROR AT END OF STATEMENT: Colon or line end expected. CHARACTER VARIABLE EXPECTED: Type mismatch. NUMERIC VARIABLE EXPECTED: Type mismatch. ARRAY VARIABLE EXPECTED: Type mismatch. INVALID VARIABLE: An array variable was expected. UNDEFINED VARIABLE: The variable referenced does not exist.  PARENTHESIS MISSING: An open or close parenthesis is missing. RELATIONA OPERATO EXPECTED: relationa operato wa expected. INVALID CHARACTER FUNCTION: A character function was expected. CHARACTE FUNCTIO NAME: Th i missin fro th functio name INVALID NUMERIC FUNCTION: A numeric function was expected. VARIABLE EXPECTED: A variable was expected. SYNTAX ERROR AT END OF LINE: Line end expected. DUPLICATE VARIABLE: Variable already defined.  DIMENSION SIZE: Array dimension exceeds maximum. ON RANGE: Range of ON value exceeds maximum. NUMERIC DATA: Numeric data was expected. FOR LEVEL: Exceeds maximum allowed nesting (8 max). FOR RANGE: Limits and step incompatible. OUT OF DATA: Attempt was made to READ past last data value. NUMERI RANGE Intege valu maximu exceede (25 max) OU O MEMORY Progra need mor memor t execute  INVALI STATEMENT Statemen no recognizable STAC OVERFLOW Expressio to complex STAC UNDERFLOW (Syste error) ATTN REQUEST: The ATTN key was pressed to interrupt program execution. LIN RANGE Beginnin lin numbe exceed endin lin number UNKNOWN LINE: Line referenced does not exist. SUBSTRING: Cannot be formed as specified. INVALID ARGUMENT: Type mismatch or value excessive.   DIRECT STATEMENT: Not allowed in direct execution. INVALI USER-DEFINE FUNCTION: No vali user-define function SUBROUTINE LEVEL: Exceeds maximum (20 max). INVALID RETURN: Encountered without a corresponding GOSUB. MISSING FOR: a NEXT was encountered without a corresponding FOR. TAB: argument is invalid. INVALID INTRINSIC FUNCTION: Not a valid intrinsic function. UNKNOWN USER-DEFINED FUNCTION: Was encountered.  NUMERIC OVERFLOW: Floating point value exceeds maximum. NUMERIC UNDERFLOW: Floating point value smaller than minimum. DIVISION BY ZERO: Expression contains a division by zero. STRIN LENGTH: Characte strin lengt exceed maximu fo variable. DUPLICATE KEY: Index file already contains this key. NO KEY: Key specified not in index file. END OF FILE: Cannot READ/INPUT past end of file.  PERMANENT I/O: Error encountered in disk input/output operation. CHANG KEY: Attemp wa mad t chang th ke portio o th record. INCORRECT KEY: INCORRECT DATA: NO DATA:  DISK FULL: The disk is full. FIL EXISTS: Attemp wa mad t creat fil tha alread exists. NO FILE: Attempt was made to access a file that does not exist. KEY LENGTH/POSITION: Specified incorrectly. DIRECTORY FULL: Disk directory is full. NO PROGRAM: Program file specified does not exist. FILE TYPE: Mismatch. PROGRAM LOAD: An error was detected during program load.  RECORD LENGTH: Is 0 or exceeds 2048. PRINT MODE: Print mode selection must be D, S, C, or U. FORMA BUFFER: Workstatio forma buffe lengt exceed recor length specified in OPEN statement. INVALI PRINT: Operatio CUR TAB o SKI no allowe i dis o workstation files. CHARACTE VARIABL INPUT/OUTPUT: Characte variabl expecte i I/ operation NUMERI VARIABL INPUT/OUTPUT: Numeri variabl expecte i I/ operation. FIEL LENGTH: Attemp wa mad t writ dat int fiel tha i too small.  FORM PRINT: Wrong FORM specification for PRINT statement. FORM SPECIFICATION: Incorrect FORM specification. INVALID FORMAT: Invalid workstation format. FORMAT MODE: Format mode error. FIL RENAME: Fil mus exis an no b i us b anothe process FILE NAME: Must be 8 characters or less plus optional type. DRIV SELECT: Canno selec specifie dis drive  UNKNOWN: System error. HEL FILE: DBXERR.MS an DBXREF.MS mus b o defaul dis drive. FILE OPEN: File specified already open. FIL MODE: Ope mod (o parameter incorrec fo acces attempted. INVALID FILE: File specified not open. FILE NOT AVAILABLE: In use by a NOSHR process. CANNOT CLOSE FILE:  INVALID RECORD NUMBER: Zero not allowed. Last access must have been a write. MISSING RECORD NUMBER: Record number must be specified. MISSING USING: USING statement missing. Last access must have been a read. INVALID DEVICE: Not a valid device. PREVIOUS LINE:   tement, or function name an error number or nothing in which case the last error number is assumed. PREVIOUS LINE: The statement, command, or function entered with HELP is not valid. {LET} num-var=num-expr {LET} char-var {(num-expr 1:num-expr 2)}=char-expr The LET statement assigns the value of an arit~ PRINT { The unformatted PRINT statement outputs the specified list to the display terminal or optionally to the printer ( IF log-expr THEN line-num or statement {ELSE line-num or statement} The IF statement branches or executes a state FORM specification list The FORM statement gives the format specification for PRINT,READ,and WRITE state LIST {line-num} The LIST command lists the program beginning at the first line and continuing through the last li ~ ~ GOTO lin-num The GOTO statement branches to the specified line number. STOP The STOP statement stops the program. All files remain open and a stop message is printed. GOSUB line-num The GOSUB statement branches to a subroutine at the specified line number. A RETURN in the subro FOR var=expr 1 TO expr 2 {STEP expr 3} ... included BASIC statements ... NEXT var The FOR/NEXT statements set up a TO Please enter HELP FOR for more information. Please enter HELP FOR for more information. Please enter HELP FOR for more information. ON Error Condition GOTO line-num Error Condition can be ATTN,CONV,ERROR,OFLOW,UFLOW,SOFLOW, or ZDIV. ON num-expr GO REWRITE for a disk file. REWRITE {EXIT line-num} The REWRITE statement rew WRITE for a disk file. WRITE {DUPKEY line-num} ~ READ var-list The READ statement assigns a data value from the current position of the data pointer to the named variab DATA cnst-list The DATA statement creates a data list within a program. RETURN The RETURN statement branches back from a subroutine to the statement following the calling GOSUB. INPUT {"message":} var-list The INPUT statement assigns data values from the keyboard to the variables in the variabl LINPUT {"message":} char-var The LINPUT statement assigns data values from the keyboard to the specified character va RUN The RUN command executes the BASIC program residing in memory. The data area of memory is cleared and any RESTORE {line-num} The RESTORE statement moves the data pointer to the first data value of the first DATA statement REM Non-executing statement permitting program documentation. ~ ~ ~ SAVE {drv:}name{.typ}{,S} The SAVE command saves the specified BASIC program to disk. The S option is used to save a LOAD {drv:}name{.typ} {,S} The LOAD command loads the specified BASIC program from disk. The S option is used to l DIM var(m{n,...}) {,...} var$(m{,n,...}){*L} var$*L The DIM statement is used to assign space in the da END The END statement is used to terminate a BASIC program and should be the last line of the program. All files are OPEN for a disk file. OPEN {EXIT line-num} The OPEN statement activates the FILES {drv:} The FILES command displays the directory of the default disk drive or the specified drive. RESET The RESET statement performs a disk reset. DEF FNname{$}({var-list})=expr The DEF statement defines a user function that can be referenced in the program using F FREE {drv:}name.typ The FREE command removes the given file from the disk. The file name and type are both require AUTO {line-num,num-cnst} The AUTO command automatically generates line numbers beginning with line number 10 or opti#B#R#N#!<! ü͞ cڼ / !!> w#?y>͞ > ͞ >͞ !!r#h!<! 7j=!!͑/ ~G£!=&o>,͞ > ͞ ê! ͅ S YÑw#H#!>=> !~EG J# P|Py8bV} xw@!5\!=\!=\=!!͑/ !j*2o$n |+}+> ͞ ~#+ž> ͞ ~# >.͞ µ> ͞ C ~+w#> ͞ ~#  >.͞ ÄXu/ 40:?͞ ͅ Xʶxʶ. 'Ž{'ʾxʄ!>>'͞ _GO{'y ҫ!>~ھ!>O{'y͞ S +!>͞ SGzx!>> S 7x!I?>͞ > ͞ >͞ C!ͅ >XO0F BFF _yy7 !H>]!>d! ͅ S ͞ Y/ !r>>%2 ! :ʬGw#ž6 #6 #6I!"!"!!~<!a7!7o&! ͅ S Yu!7>   EXIT {IOERR line-num} {,IOERR line-num} {,...} {DUPKEY line-num} {,DUPKEY line-num} {NOKEY line-num} {,NOKEY CHAIN char-expr,FILES}{,var-list} The CHAIN statement provides a way to link the current program to a program on disk w ~ ~ ~ ~ ~ ROUND(num-expr 1,num-expr 2) The value given by num-expr 1 is rounded to the number of decimal places given by the valu INT(num-expr) Gives the largest integer less than/equal to the numeric expression. LEN(char-expr) Gives the number of characters in the value associated with the string expression. VAL(char-expr) Gives the numeric value of the character expression. ABS(num-expr) Gives the absolute value of the numeric expression. RND(num-expr) Gives a pseudorandom number between 0 and 1 with the following variations: num-expr<0 pseudorando SQR(num-expr) Gives the square root of the numeric expression. SGN(num-expr) Gives the value 1 if num-expr > 0. 0 if num-expr = 0. -1 if num-expr < 0. SIN(num-expr) Gives the sine of the numeric expression in radians. ATN(num-expr) Gives the angle in radians whose tangent is given by the numeric expression. LOG(num-expr) Gives the natural logarithm (base e) of the numeric expression. EXP(num-expr) Gives the value of e raised to power given by the numeric expression. POS(char-expr 1,char-expr 2 {,num-expr}) Gives the character position within the value associated with char-expr 1, ASC(char-expr) Gives the ASCII numeric value of the first character of the expression. ERR Gives the number of the last error. See section X for a list of error numbers and messages. LINE Gives the line number of the last error. CMDKEY Gives one of the following values depending on which key was pressed to leave a work station screen read:  STATUS(num-cnst 1 {,num-cnst 2}) Gives the status of certain system parameters depending on num-cnst 1. num-cnst 1 ~ ~ ~ ~ CHR$(num-expr 1{,num-expr 2}) Gives the ASCII character with value of the numeric expression 1 or the ASCII charact STR$(num-expr) Converts the value of the numeric expression to a character string. CNVRT$(char-expr,num-expr) Converts the value of the numeric expression to a character string using the format  TIME$ Gives the time in character string representation HH:MM:YY. DATE$ Gives the date in character string representation YYYYMMDD. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~hmetic or character expression to the specified variable. PRINT { The formatted PRINT statement outputs the expression list to the display terminal or optionally to the printer (specifications given by the FORM statement at the USING line number.ment depending on whether the logical expression evaluates to True or False.ments. The specification list can consist of any combination of the following specifications separated by commas: N w{.d} C w ZD w.d PD w.d PIC(char-list) POS n X n SKIP {n} CUR(m,n)ne or optionally through the specified line number.utine branches back to the statement immediately following the GOSUB.n iteration loop that performs the included BASIC statements one or more times depending on beginning value (expr 1) and ending value (expr 2) and the step size. The step size is one or optionally the given value (expr 3).SUB line-num 1, line-num 2,... The ON...GOSUB statement branches to a subroutine at one of several lines depending on the value of the numeric expression. ON num-expr GOTO line-num 1, line-num 2,... The ON...GOTO statement branches to one of several lines depending on the value of the numeric expreesion. ON num-expr RESTORE line-num 1, line-num 2,... The ON...RESTORE statement sets the data pointer to one of several lines depending on the value of the numeric expression.rites a disk record that has previously been read. REWRITE for a work station file. REWRITE {EXIT line-num} The REWRITE statement rewrites data and attributes to a work station record that has previously been read. {EXIT line-num} The WRITE statement writes data to the disk file specified by file reference number. WRITE for a work station file. WRITE The WRITE statement writes data to a work station file specified by file reference number.le. READ for a disk file. READ {,KEY>=char-expr} {NOKEY line-num} {,REC=num-expr} {EOF line-num} {EXIT line-num} The READ statement reads data from the disk file specified by file reference number. READ for a work station file. READ The READ statement reads data from a work station file specified by file reference number.e list.riable. Upon execution, the entire line entered on the keyboard is assigned to the character variable.open files are closed.in the program or optionally to the first data value of the the DATA statement following the given line number.source (ASCII) file.oad a source (ASCII) file.ta area of memory for numeric and character arrays and to fix the maximum length of character variables.closed and BASIC returns to the command/program edit mode.file reference for a disk file. OPEN for a work station file. OPEN The OPEN statement activates the file reference for a work station file.Nname.d.onally with the specified line number and incrementing by 5 or optionally by num-cnst.ce given.pression can be a command string to be executed after return to the operating system. All open files are closed.n its entirety or over the optional line number range, line number 1 to line number 2.he user the choice of certain options: PRTZO n -- print zone width SPREC -- short numeric precision (8 digits) LPREC -- long numeric precision (16 digits) PTRSET s,l,n,o -- printer forms control s=ON or OFF form feed on page overflow l=line length n=page length o=page overflow line PTRSET s,char-expr 1,char-expr 2 -- print mode s=D direct, S spool, C console, or U unchanged char-expr 1= A-P printer of spool file or U unchanged char-expr 2= A-P spool drive or U unchanged command, statement, function, or error code.d line number 2.pressed or STOP executed. line-num} {EOF line-num} {,EOF line-num} The EXIT statement can be used with OPEN,READ,WRITE and CLOSE stat ements to provide branching when the specified errors occur.ithout halting execution.e of num-expr 2.m number generator reseeded. num-expr=0 previous pseudorandom number repeated. num-expr>0 new pseudorandom number generated. of the first character of the first occurance of the value associated with char-expr 2 starting with the first position of char-expr1 or optionally with the position given by the value of num-expr. 0 return key 1 function key F1 2 function key F2  ... Function Gives 0 Last keyboard key pressed. 1-254 file information - see below. 255 Current printer line. 256 Number of bytes of unused memory. 257 Current user number (0-31) For file reference numbers 1-254 then num-cnst 2 determines which additional file parameters are given. num-cnst 2 Function Gives 0 Record length - all BASIC files 1 End-of-file record number - all BASIC files 2 Number of sorted keys - keyed files only 3 Number of unsorted keys - keyed files onlyer repeated the number of times given by numeric expression 2.specified by the character expression. The N,ZD,PD, and PIC specifications can be used. Function Gives 0 Last keyboard key pressed. 1-254 file information - see below. 255 Current printer line. 256 Number of bytes of unused memory. 257 Current user number (0-31) For file reference numbers 1-254 then num-cnst 2 determines which additional file parameters are given. num-cnst 2 Function Gives 0 Record length - all BASIC files 1 End-of-file record number - all BASIC files 2 Number of sorted keys - keyed files only 3 Number of unsorted keys - keyed files onlyer repeated the number of times given by numeric expression 2.:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1 222:] :e !!~( 2 :(:͜O:͜(:͜(!ˎ!ˆ!" ͊*! ~ P!~ M:G O0:O(G>2 :(:͜O:͜(:͜(F;/6 ͊*#w:\ < MW(  *+"|*#ôd:/ 0:y0 > :\=A*#~#~#foK ))) )K ::_ ѻ  ѻ;Ô J8\!c:k:i2yÔ*|7"ssg#g7"| * !^#"6 !Ìa{ YN Destination drive read only Ambiguous filename: confirm individual files (y/n)? Ok to delete (y/n)? read only FIFO file, not deleted not delete File not found Invalid filename Insufficient memory Network error Non-privileged user~# _Hc#ôd:/ 0:y0 > :\=A*#~#~#foK ))) )K ::< COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/15/84) 1$  2l 2m ^͈ͲOG;(iO:~i !k :k(:i2m :] :e !] 6?#>?2h6P(~2s ==G72u "n Sp y2r +|2t 6K <(: :< ![ _ P x2 {2 z2 " :\=B_!k ˎ !" " " *$ Sx R "v :S \ȇ_!~"  !A^#:t (V#z(#" !"z "| * |(b"~ *~ [| R<"z ͺ[  O~# *z ͺ ^#VK r+sê*z 8"~ "| #"z *~ [| R * |(+" * *R8h* [z R()* ]T+* *  [ s#r*z [ s#rS * K " K B8" Ñ!k ˎ<<<  %* |" !" !k ˆ[ :u !8 = R8!k :k G>(=2 !k N != K B8: O* +B0S * " " " (: G!   :k G(    * |* +" | 6 ( :G%:k G* (* " ^#Vr+s[ R06ͺ#^#V:u G!2 0<O:k Gy(Ni͖* +" ##(!\   !!g ~(  (H)     *p |<(͛ͨ  (2 * V;* +|    :m o&2 q:\=A !]  *   :u G!2 0<N͖ * a: (* * &+T]~# :   >*!R!|D)0)0>2 x0~#foKv )) ))Kx :m :l _ѻ ѻ/  ~#!k N 0(__a{ L  to Continue  REMAININ  DISK READ ONL  FIL  DISPLAYE  Insufficient memory JanFebMarAp rMayJunJulAugSepOctNovDec  Network error  Non-privileged user ? AB02 } : =<<:  x2s !r^R#8( 2 2 2 y2 }2 :  :  : / :x ~(   ~#:k O:G ͓@B͓͓̀'͓͓̀d͓ ͓}0: (  R0x : >2 x0~#foKv )) ))Kx :m :l _ѻ ѻ/  ~#!k N 0(__a{ L  to Continue  REMAININ  DISK READ ONL  FIL  DISPLAYE  Insufficient memory JanFebMarAp<{}COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1B 22:k(:i2}͌͛*|( _̈́1@:\<2\!e~ 6D#6O!"!~_#6!#~ (#~ #~ (O#'("( +*#")@s#r+#~ȹ 6!\ w#MTR!"!e#~ ($R6$!hw#M\\TR!">:G:Oȸ(!!808:00T])))_|( *R8)@^#V~( ~#(_ȹ__ȹ_!5 6MT> !>[R~!>5 6@M\TR![>Rw:]:]_|ѻ |ѻ}  ! ~#: 0:y(0!\~#@>:>.> > ~#! DELETE >>M\TR!~: Px!fM\TRMTM\PT]  Unable to activate DO file $ Non-privileged user $--> FILE: TSMASTER.GEN CRC = 3E 34 --> FILE: TSMASTER.PAR CRC = 16 64 --> FILE: TSMCKTDR.MAC CRC = C2 19 --> FILE: TSMCKTDR.REL CRC = 6A 61 --> FILE: TSMST14M.DO CRC = 25 6A --> FILE: TSMST14M.GEN CRC = 3B C3 --> FILE: TSMST14M.PAR CRC = 90 23 --> FILE: TSNOBNK .MAC CRC = 0A 11 --> FILE: TSNOBNK .REL CRC = D0 F5 --> FILE: TSSOM .MAC CRC = D6 42 --> FILE: TSSOM .REL CRC = AB 6E --> FILE: TSLSTCTS.MAC CRC = 11 E2 --> FILE: TSLSTXON.MAC CRC = DB F3 --> FILE: TSLSTETX.MAC CRC = FB 2C:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1Iu G;(!&ˆ͛O:͛ 2'P(z2-==G72."(S*y2,P(S"/S1C325<(: :< !_:\=_ͥ:'Ap^!^^ *(:,_R!:.G260<:-!7j= 26*!:,o&:-)= 26^ G!@:5)=26m*/26͓*126͹*326^ :-(^ ~#p9@B99'99d9 9}0pR0x :6  >26x0pd~#pe!&F __a{ L^ Disk drive characteristics, drive^ Maximum data capacity :^^ Allocation block size :^ Number of directory entries:^ Physical sector size :^ Physical sectors per track :^ Physical tracks per disk :^ Number of reserved tracks :^ medi^Fixe^Removabl^ Network error ? _ͥ:'Ap^!^^ *(:,_R!:.G260<:-!7j= 26*!:,o&:-)= 26^ G!@:5)=26m*/26͓*126͹*326^ :-(^ ~#p9@B99'99d9 9}0pR0x :6  >26x0pd~#pe!&F __a{ L^ Disk drive characteristics, drive^ Maximum data capacity :^^ Allocation block size :^ Number of directory entries:^ Physical sector size :^ Physical sectors per track :^ Physical tracks per disk :^ Number of reserved tracks :^ medi^Fixe^Removabl:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 05/10/84) 1 2J2K($G;(( O:  !I:k(:i2K͑\͘ˆ!"|"~͑\!͘w:IG( ::~:}!:IG( }ƀ: ~#}  R~#( 0>.} } U*}#"}|¨!4è ( ( ͑\͘:K͡:J͡_;ѻ ;ѻ1 0:8 ~~#(_:IG(a{ LRecordFile not foundNon-privileged user Allocation block size :^ Number of directory entries:^ Physical sector size :^ Physical sectors per track :^ Physical tracks per disk :^ Number of reserved tracks :^ medi^Fixe^Removabl :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1@ Pxʯ:\2=2_Pѷ¹P :(:O:(:(!:A_  :(:O:(:ʿ¹!q#"*#"(¹!F(P:_ P r g!"! V: O:< I!" 9 .:_ P "!F sx )@V  a{ $YN Ok to erase directory on drive $ (Y/N)? $ Directory erased, $ Non-privileged user$ No drive specified$ Unable to erase directory$non-$hashed$ Hashed directory desired (Y/N)? $ Erasing directory $$ DIR H:IPH:IH7>2I7 H?~2I*IDMI!Ih*I:I-!I͎62J7~2IÉH?~2IO1 Px r@x b+P(S:\ Q @=2o!`(!G;((R V N _Wѷ(ÇP[ A870 02nUg( o n(:`!K"aON>2nU<(Ã!|2()"q*R0 %:`O¸2c2ego"p"i!"x"o:~(/G%O~("F%L2( >%R>%R*o"mF%F%>2(G%"k~2tGFOFL!2 !s7>Kg kb>*q"vC7RMDbk[m*kR[g,2 "i!2("r:eG(#~O##^:tGW*k:cw#s#q#:fw~O82nfV !c4!p4!e~w++ 4!p~  4~/N!~=Fv( w<#~FP(x 2t!"p"r2c2n:"v!"x͒2rf!p4~!c4 :`G(b[v=(~2fG!@)"g!S"anP2nU( <W=:cWdͮ ͮ z0Wxx0 [a  ͒D!e>F(͞> _ `_< 0H*o "o^~#G~#R>N2>ɯC:o_P N  $Not in Bank 0$Not attached to MASTER$Drive?$Incompatable drive$Non-priveleged user$Drive not ready$Can't lockout drive$Successful $Aborted$Error$Insufficient memory to $Track $ Side $FORMAT $VERIFY $Next$ 0. Kaypro 2 SSDD I. NEC PC-8001a SSDD 1. Kaypro 4/10 DSDD J. Ampro little board DSDD 2. IBM PC SSDD K. Gnat 10 96-tpi DSDD 3. IBM PC DSDD L. Wangwriter DSDD 4. Zenith 89 SSSD M. Epson QX-10 DSDD 5. Zenith 89 SSDD N. Olivetti M20 DSDD 6. Zenith 89 SSXD O. Osborne I SSSD 7. Zenith 89 DSDD P. Osborne II & Exec SSDD 8. Zenith 89 DSXD Q. Advanced Digital DSDD 9. Zenith 100 SSDD R. Xerox 820-I SSSD A. Zenith 100 DSDD S. Xerox 820-II SSDD B. TRS-80 model I SSSD T. DEC VT180 SSDD C. HP 87/125 DSDD U. DEC Rainbow SSDD D. Otrona DSDD V. Cromemco SSDD E. Morrow MD2 SSDD W. Altos DSDD F. Morrow MD3 DSDD X. Eagle SSDD G. Sanyo 1000/1100 DSDD Y. NCR decision mate DSDD H. Televideo 802/803 DSDD Z. User defined format ???? WHICH?$ (  P   w(  w(  3(   3(   B(  3(  B(  ~(  ~(  (  3( 7 (  k(  k(  3(  (  ( # (  7 P  3( 7 '(   3(   (   k(  B(  (  (  P(  :7 'P  7 '(   P(   k(  ~( BPk(  B(  (  (  6. Zenith 89 SSXD O. Osborne I SSSD 7. Zenith 89 DSDD P. Osborne II & Exec SSDD 8. Zenith 89 DSXD Q. Advanced Digital DSDD 9. Zenith 100 SSDD R. Xerox 820-I SSSD A. Zenith 100 DSDD S. Xerox 820-II SSDD B. TRS-80 model I SSSD T. DEC :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/14/84) 1c 22:k(:i2:] :e \ ʋ!6#>  :ͼO:ͼ(:ͼ >2>  :ͼO:ͼ(:ͼ >2T: (1-127>(1-65535>:  K8(: | }0"\ 2|\ \ !]\ zx!]~(d!"|"~\!  T\ ͑: ͦͮ͟: *͇:(*͇< ^r͓  ::):)_Cѻ Cѻ͹ !y8 (08 0)) )O y0|:7=2'ͥͥdͥ ͥ R0x  0 a{ RDYN FIFO file not found, creating new fil Enter FIFO type (Ram/Disk): Suspend processing on full/empty conditions? (Yes/No): Enter maximum number of records FIFO file create FIFO isRaDis resident FIFO doesnotsuspend processing on full/empty conditions Maximum number of records: Current number of records: No FIFO file name specified File not FIFO Unable to create FIFO file Unable to read FIFO file header Non-privileged user ~#_~ IF ~N ͎6m,ͧ~*GX' G*uGFuG*HH !"HcG:uH3G*yHH ?G!H cG:sH'*DM9.>'*H#"H*HH *uGuGX'cGG*H":sH'*DM9.:sH'ͦ&- 9.$>'*HͿ55>#:G>$:G>N:G>:G>D:G>N:G>'>2)DG>'>2)DG!GD;MAIg}oɯO_yW{!z,"|,"|ͪ!">OFGÿ|"6 X"|"6 ?X"|"6 W_ |"q"FIELDSONTO6G!GD;M :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1 Pxʱ:\2<=2a_Pѷ»P(:E9(:F9( !`G:aA_n(:E9(:F9»»: :<('»»»»:»:<»!:`(˾:`(»»» z  u p D!`˶!  !~0 !` 6# !`v( 0*]#"] "w!`~  B <<<!<":a_ P:a_*P+b :d9O:c a{ $YN Ok to reorganize directory on drive $ (Y/N)? $ Directory reorganized, $ Non-privileged user$ No drive specified$ Unable to reorganize directory$non-$hashed$ Hashed directory desired (Y/N)? $ Reorganizing directory - DO NOT INTERRUPT $$ DIR:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1 Px:\=2y_PѷP:yA_6(:d[(:e[:y_PSz Pѷ ?Pg*zR(1!RT,͚́ͤ !;ͬT 'd  R0x  0h M| :~[O:} a{ YNT Disk map regenerateT Allocation block(s)TgaineTlosT Unable to regenerate disk mapT Ok to regenerate disk map on driveT (Y/N)?T Regenerating disk mapT Non-privileged useT No drive specifieZ~#h\_GD;MAI:8 ʣ!y Ī:8O*7"7*8{!z̘zB"|G|!|"!"|/G}/O!>! !7>{ADDFROMONREPLACED;MAI:8 ʣ!y Ī:8O*7"7*8{!z̘zB"|G|!|"!"|/G}/O!>! !7>{ADDFROMONREPLA1e`r`:0802U>2R:R >`:S >D >2Q`:N(Y :R >2L2O"`:N(Y >2=:Q(>>2T:O >(2L>2M! "D!"F!"H"JN`:U0Yk` Y> YfW2P͔> ͥK`z$! ~ #(! ͽ 2Nµ:= :Q( :P(82P͔ ( ʦB:L(=z>ͥ*D*F>2P͔z *H*J *D*F t```:C 2S`:ʃN :MO"B^#~f(# *BF#~# w#r#:Pw#s#w# :P=G:S:T+w#2Sɯ23  1 >P:3 aX{X__ := `)`K` g`K`z$ DISK ERROR: $  `> "@:M2>2?~:P(>> ( 2N :>=(2>#:?f:?<2? 8`:N`:P1`z$`~$`:N$`:ʦSʆR f2P͔*@%f2P͔S:PG:UX WRITE ERROR: $"@`.G(`Lx@(`?x (6`2x(B`%x(S`x(]` x(g`????1Ɛ'@'Y FORMATTING $FMT548 3.2 $ Enter Disk Drive To Be Formatted (0-3) : $ Enter Density, Single or Double (S,D) : $ Format Single or Double Sided (S,D) : $ Format System Tracks only (Y,N) : $ Supress Format Verification (Y,N) : $ Insert Diskett Into Drive $ And Press The Return Key $ Formatting Complete$ Option (CR to Exit, C to Continue) : $ Option (CR for Same Parameters, N for New Parameters) : $ FORMATTING & VERIFYING$ TRACK $ $ FORMATTING TRACK $ SIDE= $, TRACK= $, SECTOR= $, STATUS= $ FATAL READ VERIFY ERROR DETECTED: $ OPTION (CR to Exit, S to Skip, R to Retry) ? $DRIVE NOT READY$DISK IS WRITE PROTECTED$WRITE FAULT$RECORD NOT FOUND$CRC ERROR$LOST DATA$DATA REQUEST$ FORMATTING ABORTED$   ( fPN 2N N BNfNN|2>:f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3 2N N BNfNN|2>:f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3ystem Tracks only (Y,N) : $ Supress Format Verification (Y,N) : $ Insert Diskett Into Drive $ And Press The Return Key $ Formatting Complete$ Option (CR to Exit, C to Continue) : $ Option (CR for Same Parameters, N for New Parameters) : $ FORMATTING & VERIFYING$ TRACK $ $ FORMATTING TRACK $ SIDE= $, TRACK= $, SECTOR= $, STATUS= $ FATAL READ VERIFY ERROR DETECTED: $ OPTION (CR to Exit, S to Skip, R to Retry) ? $DRIVE NOT READY$DISK IS WRITE PROTECTED$WRITE FAULT$RECORD NOT FOUND$CRC ERROR$LOST DATA$DATA REQUEST$ FORMATTING ABORTED$   ( f :COPYRIGHT 1983, SOFTWARE 2000, INC. (VERSION 06/30/83) 1=  Px)+PE:\k=2 i: O°: ͓͊ h Insert disk to be formatted in drive: Aͣ)h Enter to begin formatting͒ ( Oh>2 ͨʴh Starting format pass *` " !" h:\ 2 2 ͽ>2 ͨ(h FormaͲT(z(͆ h Format aborteT! 4! 5 * #" * +" | h Successful format Starting verify pasih Insert disk to be verified in drive: Aͣ)h Enter to begin verifying͒ ( Ohh >2 ! " ͨ&!*j BR8 * B C 2 !" !j " * " h!" * |*j BR0 * +" * [ R(9[ R8" " ͨ(h VerifͲT(* [ " z(͆ h Verify aborteT* #" * +" |jh Successful verifTh Non-privileged userOh Unable to execute from bank 1Oh No format drive specifiedOh Unable to lockout format driveOh Format drive not ready qh Insufficient memory to formatUh Insufficient memory to verify: O +.h Verify drive not ready : Oqð! ˆh : GOqðG;(! ʹR V _PѷP Ph error, Drive:: Aͣh, Track:* 3h (Retry, Ignore, Abort))h͒ʹA7( R(I h ))))))): =)z͆'QQdQ Q R0x  0ͣ n~#ͣo (_a{ :[ |(*!j *R>!j T]6:[ (6N := _:^ 2 GO !> 8zw#p:] _!:[ (!^#V#^#VSY j !> /N#F#F#~#: : ~#*Y ~!j " R" :[ :] (2 : :_ (2 ɪ.:z" 2 ?(?????NTZ??? ?????_?(?????NTZ??? ??????_?(?????NTZ??? ???????? _?PN? ???2N? ??NTZ???N? ??????N_?PN? ???2N? ??NTZ???N? ????????"N_?PN? ???2N? ??NTZ???N? ????????????BN_2b 2c 2d 2e 2f  :c ?!b ͑ Enter density (Single/Double):̀ ( ʹ S( D(͑ S(![ 6:d :!b ͑ Enter number of sides (1/2):̀ (1( 2(͑ 02\ :e L!b ͑ Enter number of tracks (3=35, 4=40, 8=80):̀ ( 3(4( 8(͑ #3((4(Py2` :f B!b ͑ Enter format type (TurboDOS/Cpm):̀ ( ʹ T( C(͑ !] 6C(44:[ (4!w :] _:[ (+~2^ !z :] (+~2_ :b G͑ G;(ʹ S D 2c 1 2 2d 3  4 8 2e T C 2f  6*T:tg  :h :i ͗ ~#ͣ _a{  ???2N? ??NTZ???N? ??????N_?PN? ???2N? ??NTZ???N? :COPYRIGHT 1983, SOFTWARE 2000, INC. (VERSION 06/30/83) 1  Px)+PE:\k=2E i:] O°:E ͓͊ h Insert disk to be formatted in drive:E Aͣ)h Enter to begin formatting͒ ( Oh>2D ͨʴh Starting format pass * "^ !"F h: 2` 2A ͽ>2D ͨ(h FormaͲT(z(͆ h Format aborteT!A 4!` 5 *F #"F *^ +"^ | h Successful format Starting verify pasih Insert disk to be verified in drive:E Aͣ)h Enter to begin verifying͒ ( Ohh >2D !R "N ͨ&!* BR8 *W B CB 2D !"F ! "N *Y "^ h!"H *B |* BR0 *B +"B *W [H R(9[B R8"J "L ͨ(h VerifͲT(*H [J "H z(͆ h Verify aborteT*F #"F *^ +"^ |jh Successful verifTh Non-privileged userOh Unable to execute from bank 1Oh No format drive specifiedOh Unable to lockout format driveOh Format drive not ready qh Insufficient memory to formatUh Insufficient memory to verify:] O +.h Verify drive not ready :] Oqð!] ˆh :] GOqðG;(!] ʹR V _PѷPD Ph error, Drive::E Aͣh, Track:*F 3h (Retry, Ignore, Abort))h͒ʹA7( R(I h ))))))):V =)z͆'QQdQ Q R0x  0ͣ n~#ͣo (_a{ : |(*! *R>! T]6: (6N : _: 2J GO ! 8zw#p: _!: (!^#V#^#VS  ! /N#F#F#~#:F :A ~#* ~! "N R"L : : (2H :A : (2I ɪ.:z" 2 ?(?????NTZ??? ?????_?(?????NTZ??? ??????_?(?????NTZ??? ???????? _?PN? ???2N? ??NTZ???N? ??????N_?PN? ???2N? ??NTZ???N? ????????"N_?PN? ???2N? ??NTZ???N? ????????????BN_2 2 2 2 ͷ : ?!  Enter density (Single/Double): ( 8 S( D( S(! 6: :!  Enter number of sides (1/2): (1( 2( 02 : B!  Enter format type (TurboDOS/Cpm): ( 8 T( C( ! 6C(44: (4! : _: (+~2 ! : (+~2 : G G;(8 S D 2 1 2 2 T C 2 6*T:t  : :  ~#'  _a{ MNTZ??? ??????_?(?????NTZ??? ???????? _?PN? ???2N? ??NTZ???N? ??????N_?PN? ???2N? ??NTZ???N?  :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/20/84) !1d͑Z$ L ;͋kCopyright 1984, Software 2000, Inck  2222!:o(!!"q(%(ͣͿ͆Ϳ!\~#~!n?n:k( :i222:{(:y2!0 !l~ :#~!0!!u~!0!e~!8!k#!SYS(!F;(B9O!:*9(0:+9(-:,9(":-9(+:.9(:/9(%""˞"!(08 8  8 0))))o9:!\( ( ( 8!%R8#w#6+R}w#"!\5 6:> !\[\R~k *!^#"6{k !F#^~ 6 *|8:p!!x!o[S(~!!REL*|7"!#7"|^#V#~#fo6!_6 !`I8B( ($87(!.(?:(@!h8!(/ $8 $kb $8 !!_!>(G!`~#08:030O:n<(>2n:lG88888 0 2lx=("A8Q0@O:_ y2_:n= =2n7$(:.*(w#6?# ;7,Q6#IK6#6 #a{ 0>2*"  :b8:2b((#(((?(  ʼ͚2t!͌(![)t?SYM? ͚8!n[cRt!n[cs#rt!Zt!br+6t*c"pt*c"nt!͌(3!͌(E[o&~@(p0O#"c͚t4p0![;Rp8t!p8^#V*cRt2<![)>2t?ORIG??UNIT?!F(Nˆˎ*| *c| :b= *b|(!>!nDM6+6!b r+s= tUnB!^¸*":W(###[bS"b"V"z"m[dS"d"X"|[xS"l"`"[fSz(+$."f"Z"~"[hS"h"\"[jS"j"^"""w"*#"[hSR"h"\[fSz(R."f"Z"":g( [R8"w"~"[\[ZR"["[xSR"l"`"[dSR"d"X"|[bSR"b"V"z"m[jSSR""z(!!"j"^"*[R"(.*[R( [*"*"!:W(+++"!e[(S*[R(&".*R",[R8 bk 6\pU>2W*"  !"T>2S>2!n6#6= :b8:2b(6(_(d({ \ v  C ʎ ʗ  :X :cw*T#"Ts#r*T##"T\ ͚2\ ! ͌(![)\ ?SYM? ͚8!n[cR\ !n[cs#r\ :W(p02a![)>2_DM|\ ^#Vp+q*q#p#s#r#"\ *c"p\ :b*c2S"T\ *c"n\ |([z( >2" >!nDM!b  r+s= > U8 *| *V"[,:_(! g(! W( [6#s#r*[R0^#V#N#F#^#V r+s*"z:!͏ :o(:͜:͜:.͜:/͜*,[.~͜#z / 0:{0_~#= A_: .~# (_U ͔!W˞Nf + *T'(=(:WG (s#r#s#:WOf _ "T̓ 2W] :WW( ˗2W!R:V+(-!W:WO ,o (((> (08: ' " !W!WN(>=2V!![6#6 O![~04^qo )(> :\?(p_Ͷ!W!!0))))oo > 08:8A8G0G*T͋ !W^ ͋ !WN (w#"To > >'2V (=( ,(+(-2V!"\:0<:0͋ (;( a{ ͋ !\5 6:0 !\[\R~(_ 8!W> ɯ2b2c2d2[=2Z!\> w#W2X 2bW2c`W2Y( 2bW"cHW2Z808W2bW"c:Z(%0W2[(O!\Ww# :Z:^(i* [R?͌![F#![[ S*T]0 [R#  Nwy#:O:O![͑+:O; ![͑*c͠:bo&P^ '"^+`#:G7Nͣ ====== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ===:G ![͑ :G!͠>!nZ  !b͠͠ :OͭT* [R; ͑~#^#V( !V͠#^#|ͧ}Ͱ 80_:@0 : <: 2  2:<2^˻~#(~#!~98 6k 4k^#!4!ij}lg!^5 6!\5 6: !\[\R~wÈ!*[*Rw!*5 6: ç::<ö:*(͜:*"[R*[R?":(:29!w#<2^2\:<:p0!z[p?8 7!?UND? ~#^#V( !V!͌>!͌>!͌>>?PAGE??BANK??INIT?:b*c:S*T!b^#Vo&+)>!VR8'!ѷR8!z[R[,= a{ |S}S\ 80_w^˻~#(k w_ͥ:ͥ_ͼѻ ͼѻ=  !4͕͕͕͕͕͕͜͜͜͜͜͜XMSLUKk Pass k Duplicate symbol:k Pass k Undefined symbol:k Writing output filek Processing parameter file: k Last Symbol is Undefined k Sorting symbol tabl MODULE-RELATIVE SYMBOL TABLE Symbols defined in module ABSOLUTE LOAD MAP MODULE PROG SEG DATA SEG PAGE SEG BANK SEG INIT SEG COMM SEG TOTA NAME BASE SIZE BASE SIZE BASE SIZE BASE SIZE BASE SIZE SIZ ABSOLUTE SYMBOL TABLEͅFile name missing from commanͅInvalid input file namͅSerial number violatioͅNot enough memorͅVacuous input file(sͅUnexpected EOF in input filͅDisk is fulͅCan't make output filͅNo input fileͅCan't open input filͅLoad address out-of-boundk Multiple defined starting addresͅNon-privileged use!! GENo COM~ PAR ?BEG? ?END? ?BBEG??BEND? file(sͅUnexpected EOF in input filͅDisk is fulͅCan't make output filͅNo input fileͅCan't open input filͅLoad address out-of-boundk Multiple defined starting addresͅNon-privileged use!! GENo COM~1"q HDC1001 Hard Disk Utility Progra>2>2!"*R"1"q ̓͌(G!~( #(##^#Vq Command unknown GSRZ WF M I O D GgA3 Q?̓T Hʍ Sʄ Dʪ AWP R/Zʱ ^ʌ q̓Fʔ S Cʮ qʹ͌q Exit abandoneGq A ;Adjust phase lock loop S(Function) ;Set function A(dma address) ;I/O address (return sets default) D(drive no 0-3) ;Drive H(head no 0-15) ;head P(steprate 0-15) ;step rate R(Hex,Dec,Octal,Bin) ;Radix S(0-255) ;Sector T(0-65535) ;Track Z(0-7) ;set sector size and ecc D(Start) ;dump memory (return sets default) F(Start,Count,Fillchar) ;fill G ;Get status I(portno.) ;input port M(Start,Destination,Count) ;move O(portno.,data) ;output port Q  ;Quit R ;Read sector W(function) ;Write function S ;Sector F(interleave) ;Format Track C ;continous write sector ? ;Command listG̓H( D(O( B(qx2G } !"GH q Step rate:#q Radix:H( D (O(B(qUndefinexq Next address for disk I/O*q Status -->‰q Board not present, or port decoding defective, or port not set to E0 hex Make sure dip switch is set to |on|on|on|off|off|off|off|offE w qDRIVE NOT READY q*** DRIVE IS READY *** ( q, BUSg q, Incomplete see_(qData request pending o(q Write Fault!!! W(q, Corrected datGE q erroq Error register contains..G( q Data address mark not founO(q track 0 never founW(q Hardware failure, ABORTEg(#q Identification field incorreco(q Cyclic rendundancy errow(q Uncorrectable dat(q BAD block detecteGq Trackog<q Head&o:G(<q Sector&o<q Drive0q bit defintions |ECC|SZ1|SZ0| 0=256, 1=512, 2=none, 3=256 %%%%%G }2G }( }|p:y G>> y (q*o(ͨ(G>> y (q Bad rea*o(q next address<"[R80 G>>0*o({ (qͨ(G>>0*o({ (q Bad writq next address<"[R80 Gq CAUTION the next read or write will munch your operating system reset the dma register firs "q Ok to format Trackgo<q ̓YGo@( H*6#y?2G_*}/o|/g#"x/o&#"[* *   x*: *o> (>>Po( { (q format track faileG G }G }OY>(=2˙G }'''oG G s# y G Mxq y#q =#G M }yG } !} q >= q ͨ( ʹG (q ~#q#͇ q  80 ͇ (>. yqCreated by Kevin Aguilar for Advanced Digital Corp, 3/13/8G! :GO͌80 _q̓0:8 AG?0|#}#00Ɛ'@''ZZdZ Z R0x  0 w~#xA[ G(( , ɷ7 (_ ɷ7 (_ dma register firs "q Ok to format Trackgo<q ̓YGo@( H*6#y?2G_*}/o|/g#"x/o&#"[* *   x*: *o> (>>Po( { (q format track faileG G }G }OY>(=2˙G }'''oG G s# y G Mxq y#q843| SD v9.1 - 07/25/8MAXUSR TBL>!9"L1L!{Dw# I`w# U }2e  ԓ 2Y2U2?!~#‚w\ xʏyʛ2U2?͓ 2X<2!\~¶:X<ý>2w!F#~$+~#  !z # !6DA:!\>w:>2U2?Uii &0i i2U2?>20 o:Ug2U2?Ͳ U U !~ʊ #~>? Ͳ H :|¨>2>2:}»>2>2:~>2>2: ̓ :̘ :̌ :\=3 _!(~2T!U3 !]~$  6?#>?2h !\^͓ X##~2C#~2B##^#V"@#^#Vw*.;^#~2C#~2B#^"@æ"F:e0ڦ:\=_.͓ !~w+” Ž**@#ڼW+}z·ói`:C)="H*F#)N"]"V*{zҮ :U_ ԓ >?!hw#w#w!"D"a"c &\͓ <ʽ=! o:K~$} o:U$#*V w#]o&ͷo|gͷo|gr#s#"V*D#"D! *{z$3 Memor)÷Ͳ *D}x2\*]!N s#r# +}*D"Z+}^*Z|g}o^}o"J#"M*J{ozg"O*J"Q>  I*O*Q *O*J{ozgII*Z*M#{z*J:!5͓ <‘͓ <3 Ope3 Writ͓ <ʂ:ڸ!4͓ <š5͓ :=2͓ 3 Appen!~#!5!5͓ <:=22":#>2:# U Ͳ *D"!""!N""V*D.*]" " *D+"D|m*V> m##"VL*V^#V#"V*  "  7Ͱ*c"c*a#"a|}*D|xLV#^:B_zW/_zW{_ɯ2S2S:\2\2\>0 0x0(:S>0 :\ 2S T])))Dļ *~K >. K n V#^>k *a+"a| ɯ2\*a|2:IJ U :\@ ڦ͓ U :U  U *cU : *a  y22\o&."* >w#-!a4Ͳ :O:\@ ԓ >: * 6ʝ* 6ʝ:ʅʅ* 6ʝÆ:œ* 6Ý*  " *a|ʶ!57:*a| :{ n :T!U4:?w!~6 !~6 *6#=͓ ‰͓ !~6f !5U :D D U J U :\@ [ ͓ U 4:} n >!\4} :H  ͓  ͓ H :U ڭ / Ҟ Gy x0 > > : > E G: *: Ͳ ͓ ‰!>p#"=2x_:̓ { A :A :  c ʆ  2_~ #K  U *. ͒ *.͒ c _ c _  ͓ G:e0xڮ ® | x :Y_ ԓ  Ó 'U *H(U ^#V#N#F_~W #  L) ) Nq#NqL) ) N#F^#V_~W ## >2Ͳ U U Ͳ :_ n >!\4_ Ͳ  ͓ ē :e0 -͓ Æ :̘ ::X_̓ *L:e0ڨ -͓ *}ʶ >D2. \>FNpq#=½ :e 1LH >2 2 $կ ~#: ,Z !Z ~ A A <2 #~:[ ?0 2 #~:[  G~#:N 0  OxG2 x  2 [ ~:b #~,m !҅  >?r : G: O>͟ ~.™ #͟ x Ϳ x ʿ *± >?ó #Ÿ #÷ > ¿ ~ ! =_.:;,<>ɾa{ !N"2*+"|Z n *> Z ##" *|2\!:IJ Z0U @U *QU *^#V#"!@!:IJ :ʐ ʐ U Ö gU :\@ ͓ >: K >. K Ͱ>k Ͳ :\f 76# 6f͓ f͓ Ͳ !~K!K -*|&  ++ Not a LIBRARY file ++ f͓ :U_ ԓ ͓  > # #P^#~ #^#Vz "*#":2!ã*}+"6f͓ Ͳ !~ʳ £Än !:>* > #K >. K ##^#V*"!{_j)))))>k *#":=2ļ ¨:2Ͳ è~#7!V# I>* >* ** Library Directory for ** Lbr Members inLBRDrive/Use [more] $ $ Erro - >> No detectable file(s) on>> No file(s) on: Drive space used:k : files:k free) *** There are member files in library(s A468DFLNPRSVSD DIR>͟ ~.™ #͟ x Ϳ x ʿ *± >?ó #Ÿ #÷ > ¿ ~ ! =_.:;,<>ɾa{ !N"21)!< ! $ OdBASE II INSTALLATION PROGRAM VER 2.7$( ] $Z k $h àARE FULL SCREEN OPERATIONS WANTED (Y/N)? $v _Yʻ2>2 $ SELECT TERMINAL TYPE$  $ (A -HAZELTINE 1500 B -SOROC, TELEVIDEO $ ]C -HEATH 89 D -PERKIN ELMER 1100 $3 ÇE -ADM-3A F -ADM-31 $h ôG -VDP-80 H -INTECOLOR $ I -GNAT-SYSTEM 10 J -TRS-80 II (P&T) $ K -APPLE L -VECTOR GRAPHICS $ HM -SUPERBRAIN N -VISUAL 100 $% {O -OSBORNE P -HP 2621, HP-125 $S ëQ -CROMEMCO 3102 R -TRS-80 (FMG) $ S -ADDS VIEWPOINT T -XEROX 820 $ U -NEC $  $ - Y - MODIFY PREVIOUS INSTALLATION $ c Z - USER SUPPLIED TERMINAL COMMANDS $8 q $n _YʵZʼ Aڲ !!_~#foéx~# ÞR͞>2! $ MODIFY EXISTING SPECS ROUTINE $ 0FOR THIS METHOD, YOU WILL NEED THE HEX OR $ fDECIMAL CODES THAT CAN BE SENT FROM YOUR $; àCOMPUTER TO THE VIDEO TERMINAL TO CONTROL IT $q î $ TYPE "Y" IF YOU WISH TO CONTINUE $ _Y²  $  $ LWILL YOU BE ENTERING COMMANDS AS HEX OR DECIMAL?$ Z $W ÕTYPE "D" FOR DECIMAL OR "H" FOR HEXADECIMAL $e _DʳHT>2! $ COMMANDS ARE ENTERED AS A SEQUENCE OF NUMBERS $ 8TYPE A CARRIAGE RETURN TO END A SEQUENCE $  F $C r1 - DELETE A CHAR SEQUENCE $Q ê2 - DIRECT CURSOR POSITIONING SEQUENCE $} 3 - CLEAR AND HOME SCREEN COMMAND $  4 - BRIGHT/STD VIDEO COMMANDS $ <5 - DIM/REVERSE VIDEO COMMANDS $ i6 - INITIALIZATION SEQUENCE $G Ì7 - EXIT SEQUENCE $t þ8 - RESET TO STANDARD VIDEO MODE $ 9 - ALTER SCREEN SIZE $  $  SELECT ITEM TO CHANGE $ R ANY CHAR OTHER THAN 1 - 9 TERMINATES SESSION $"  ` $]  1:1__!  @͐@͜@@@@͙@@@ $   USER SUPPLIED SPECS ROUTINE $  0 FOR THIS METHOD, YOU WILL NEED THE HEX OR $  f DECIMAL CODES THAT CAN BE SENT FROM YOUR $;  à COMPUTER TO THE VIDEO TERMINAL TO CONTROL IT $q  î $   THE CODES (OR SEQUENCES) THAT YOU WILL NEED ARE:$   $   $  / DELETE A CHAR SEQUENCE $  d DIRECT CURSOR POSITIONING SEQUENCE $:  Ë CLEAR SCREEN COMMAND $o  ñ HOME CURSOR COMMAND $   (CLEAR AND HOME CAN BE COMBINED) $   OPTIONAL: BRIGHT/DIM COMMANDS OR $  O VIDEO/REVERSE COMMANDS $'  ] $Z  Ë TYPE "Y" IF YOU WISH TO CONTINUE $h  _Y² å $  ÿ $   WILL YOU BE ENTERING COMMANDS AS HEX OR DECIMAL?$   $  D TYPE "D" FOR DECIMAL OR "H" FOR HEXADECIMAL $  _Db H >2!t $e  ï COMMANDS ARE ENTERED AS A SEQUENCE OF NUMBERS $   TYPE A CARRIAGE RETURN TO END A SEQUENCE $   ͙͐͜=NOW ENTER THE CODES FOR CHARACTER DELETION $ :![!A  ÑTHIS IS THE SEQUENCE "BACKSPACE,SPACE,BACKSPACE" $^ ON MOST TERMINALS IF THIS IS TRUE FOR YOUR $ TERMINAL, THEN TYPE "Y" $  $ _Y!s# . $ _ENTER THE CHARACTER DELETE SEQUENCE $9 y(3 BYTE MAX) $j >!] Eâ $ --- DIRECT CURSOR POSITIONING --- $  THE CURSOR CONTROL SEQUENCE IS USUALLY A 3 $ BTO 4 BYTE SEQUENCE. THE FIRST ONE OR TWO $ yBYTES ARE USUALLY FIXED AND THE REMAINING $M ðBYTES CONTAIN THE LINE AND COLUMN NUMBERS $ þ $ FIRST, ENTER THE POSITION IN THE SEQUENCE $ THAT HOLDS THE COLUMN NUMBER $ :!_BCURRENT VALUE = $1 :<̓ W $T 1=2l $i âNEXT, ENTER THE POSITION IN THE SEQUENCE $w THAT HOLDS THE LINE NUMBER $ :! CURRENT VALUE = $ :<̓  $ 1=2 $ ) $" `MANY TERMINALS ADD A CONSTANT TO THE LINE $4 ÙAND COLUMN NUMBERS. ENTER THE CONSTANT BIAS $k øFOR YOUR TERMINAL $ :!CURRENT VALUE = $ :̓  $ 12 $ ANOW ENTER THE SKELETON FOR THE DIRECT CURSOR $ xCOMMAND. ENTER A ZERO IN THE PLACES WHERE $L àCOLUMN AND LINE NUMBERS GO $ û(11 BYTE MAX) $ :!!F#A  > !]:!2  $ .---- DIM/BRIGHT VIDEO/REVERSE VIDEO ---- $ @ $9 sENTER THE COMMAND THAT WILL SWITCH TO $K ßHIGH INTENSITY OR NORMAL VIDEO $~ ù(5 BYTE MAX) $ :!!F#A  >!]:!2  $ &ENTER THE COMMAND THAT WILL SWITCH TO $ RLOW INTENSITY OR REVERSE VIDEO $1 l(5 BYTE MAX) $] :!ʇ!F#A  >!]:!2 æ $ ---- CLEAR AND HOME COMMAND(S) ---- $  $ ENTER THE COMMAND(S) THAT WILL CLEAR THE $ USCREEN AND PLACE THE CURSOR IN THE UPPER $* ~LEFT CORNER OF THE TERMINAL $` Ù(11 BYTE MAX) $ :!ʴ!F#A  > !]:!2 œ $ ENTER THE COMMANDS TO BE ISSUED WHEN $ 8ENTERING THE FULL-SCREEN EDITING MODE $ N(IF ANY) $C i(11 BYTE MAX) $Y :!ʄ!F#A  > !]:!2 ã $ ENTER THE COMMANDS TO BE ISSUED WHEN $ LEAVING THE FULL-SCREEN EDITING MODE $  $ LSUGGESTION: USE DIRECT CURSOR POSITIONING $  ÈTO PUT CURSOR ON THE BOTTOM LINE OF THE SCREEN $W ã(11 BYTE MAX) $ :!ʾ!F#A  > !]:!2 ™ $ ENTER THE COMMAND THAT WILL SWITCH TO $ @STANDARD INTENSITY OR NORMAL VIDEO $ ~TO RESET THE SCREEN AFTER FULL SCREEN OPERATIONS $K Ø(5 BYTE MAX) $ :!ʳ!F#A  >!]:!2  $ ENTER THE SCREEN WIDTH $ :!1CURRENT VALUE = $ :̓ ) $& 12= $: xNEXT, ENTER THE NUMBER OF LINES ON THE SCREEN $H :!ʷÛCURRENT VALUE = $ :̓ ï $ 12 $ >&2>222 $  $ ENTER A CHARACTER TO BE USED FOR $ NINDICATING MACROS OR A RETURN FOR $* ~DEFAULT CHARACTER OF AMPERSAND (&) :$Y  ʕ2Û $ é $ TYPE A RETURN IF THE ERROR CORRECTION $  DIALOGUE IS TO BE USED OR ANY OTHER $ 8KEY IF NO DIALOGUE IS WANTED :$  P2V $S d $a r $o ÔENTER OPERATING SYSTEM$} â $  A - CP/M 1.4 OR CP/M 2.2 $  B - CDOS SYSTEM $   C - CROMIX SYSTEM $ 0 D - MP/M II SYSTEM $ > $; L $I _AʊBrCzDʅP>2Ê>22Ê>2Ö $ TYPE "Y" TO SAVE, ANY OTHER KEY TO ABORT INSTALL $ _Y5 SAVING INSTALLATION PARAMETERS $ :!2!21!!!R ABORTING INSTALLATION $8 "!2!2!m $j ÒENTER CONTROL CODE BYTE $x :!:4! :5!Y:!ʜÊ!Gm_0{ O)))) c5!`}|<}ú0 ?))) O ã!5!͟}|<} $ ERROR IN INPUT, RE-ENTER $ 1!7 $  / IS THIS CORRECT (Y/N) $  _Y[ CURRENT SEQUENCE : $F  x~̓ t $q  #e :!ʪ æ ͘ Ɛ'@'_͏ o&ͤ ILLEGAL PARAMETER$  ! DBASE.COM FILE IS NOT ON THE DEFAULT DRIVE $  DBASE COM _Y[ CURRENT SEQUENCE : $F  x~̓ t $q  #e :!ʪ æ ͘ Ɛ'@'_͏ o&ͤ I!5"""+#}##!$s$$%i%% &_&&'U'''K( ~~~~~~~PP   =()(*(=7 PPHLKJ  XYKHX7Y PP   YpqqEqY7 PP  ==7 PP   =()((=7 PP   ==7 PP   .P0P   ="!""=7 PP   Y Y7 PP   =())=7 (P PP   Y Y7 PP     PP   =()((=7 P P &a000y000C&dB&d@&d@ HJH &a23y1CPP   YEY7 PP  ((?PP   Y0A Y7 PPHLKJ  ==7 PP   =C0 C4 C0 *C0 =7 PP R ÎQ Î  COPYRIGHT (C) 1980 MicroPro International Corporation  MicroPro WordStar release 2.10 serial # WS500108  no terminal yet selected  I/O Master / O.E.M. Printer   "TPP=   @B@ @..Y[]{}AEIOU.:+-JP  *P ^  ͑ UNEXPECTED END OF FILE DURING READó Gzg {x*N + s ʪ ʙ ʪ > *P ^ m ͑ DISK FULL ͑ DISKETTE DIRECTORY FULL+ s ó ~#z + s s ê *N %)|! w#6Ʌo|g!"N !"P  , ! 6#w#/ s f > > ͐<==k g | N#͑ ͜ ͊ ~̊ Q ~#Ü ͑ !͜ 5 !p! ͜ * " * * | }͑ This version of INSTALL is incompatable with theversion of WordStar you are trying to install.!S͜ ͊ ! ͜ ó ͑ Do you want a normal first-time INSTALLation of WordStar?(Y = yes; N = display other options): gNʞY  ͧ͑ Y͑ This will INSTALL the WSU.COM on the current drive, savethe result on file WS.COM on the current drive, and thenrun the INSTALLed WordStar. OK (Y/N):gYU P PNħ„͑  ***** WordStar INSTALLATION OPTIONS MENU *****A INSTALLation of a distributed WordStar, INSTALLing WSU.COM, producing WS.COM, and then running the INSTALLed WordStar.B INSTALLation or re-INSTALLation of a WordStar COM file of your choice, placing the newly INSTALLed WordStar in a file of your choice, and then exiting to the operating system.C Same as B except run the INSTALLed WordStar.D Modification of the INSTALLation of a WordStar COM file of your choice. The modified WordStar replaces the original file. The modified WordStar is then run.͑ PLEASE ENTER SELECTION (A, B, C, or D):g H HAUBʸCDʲ ͑ AU͑ Y>2|  WSU.COM!  M 8 ¢͑ WSU.COM NOT FOUND ON CURRENT DISKÞ  WS.COM! + M>2| >2| ͊ ͑ Filename of WordStar to be INSTALLed? $ !  M'͑ INCORECTLY FORMED FILENAME 8 P͑ THAT FILE DOES NOT EXIST͊ ͑ Filename for saving INSTALLed WordStar? $ ! + M͑ INCORECTLY FORMED FILENAMES͊ >2| ͑ Filename of WordStar to modify? $ !  M͑ INCORECTLY FORMED FILENAMEõ 8 <͑ THAT FILE DOES NOT EXISTõ5 ! + Mկ S͎.!̍ ʆ7COM#ͬʡ Žͬš>  ¢~ͷ# .:*? п[A?~ ##~+:~@##| <7 ~# Ü>2->2-22^#V#N#3333;;;;g    C:ʧ0 G A: :ʺ0 : x=CCCCQ ûCQ x͑ Q ͧCC^#V#~#=(^#V#N#F#3333;;;;UJ>> {YYʳ ͜ Q :ʉ>Ë>2O> > a{ >Q > Q >Q 1 +&!S͜ ͑  ***** WordStar TERMINAL MENU #1 *****A Lear-Siegler ADM-3A C Lear-Siegler ADM-31D Hazeltine 1500 E Microterm ACT-IVF Beehive 150/Cromemco 3100 G Imsai VIOH Hewlett-Packard 2621 A/P I Infoton I-100J Processor Tech Sol / VDM K Soroc IQ-120L Perkin-Elmer 550 (Bantam) Z none of the above2 Terminal Menu #2 :6T͑ U no change͑ PLEASE ENTER SELECTION (1 LETTER):!:6‰!͟$>26$ڼ7&U:#A1%CDfEIFGI2"J!K L"Hq"M NOPQ RGSVT~ 2ZL#͑  ***** WordStar TERMINAL MENU #2 *****M Microterm ACT-V N Televideo 912O Visual 200 P Flashwriter IQ Flashwriter II R SWTPC CT-82S Compucolor 8001G V TEC Model 5711 original menu Z none of the aboveT%Lear-Siegler ADM-3A termina͑  The CLEAR SCREEN and CURSOR CONTROL switches inside the ADM-3A terminal must be ON&%= 2m2t2{22222222go"d>2f22>22!P"H%Lear-Seigler ADM-31 terminà*Tf%Rl%Er%'̈́%)x%(~%%TEC Model 571 termina͑ Make sure the AUTO ROLL UP, ROLL UP and AUTO LINE FEEDswitches are off for proper WordStar operation͋&%=` f%l% r%>2>222%Televideo 912 terminà*Tf%Rl%Er%)x%(~%\%qwC,!* "%Microterm ACT-V termina&%͋\%C\%B%SWTPC CT-82 termina&%͋! "m."tr%x%~%͊%>2H>R2I%Compucolor 8001G termina&%͋>02H>P2I\%\%\%%Visual 2000 termina͑ The AUTO LF switch must be OFF for proper operation.&%Y͋YKf%Ml%Lr%4x%3~%%Hazeltine 1500 termina͑  The AUTO LF switch (under the little cover above the keyboard) must be OFF for proper WordStar operation.&%~͋~f%l%r%x%͊%~%Ä%%Soroc IQ-120 terminà*(x%)~%%MicroTerm ACT-IV termina͋ &%!"m&""""%Beehive 150 / Cromemco 3100&%F ͋E%Imsai VIO displa͑  For IMSAI VDP-40, VDP-80, & other systems with IMSAI VIO-C or VIO-D (with firmware) at F000. Accesses Video RAM directly. 24 * 80 format must be selected before WordStar is invoked.̀!">22222%Vector Graphics Flashwriter ͑  Flashwriter must be addressed at D000H.̀!">22222>@2I%Vector Graphics Flashwriter I͑ Flashwriter must be addressed at D000H.̀!">22222%Imsai-VIO-used-as-a-termina͑  This version accesses Imsai VIO through the operating system and the VIO firmware, as though it was a terminal, to demonstrate WordStar operation on a terminal with line insert, line delete, and erase to end line. Normally use selection "G" instead.̀!"m&"{&"t&"">2%SOL / VDM versio͑  This version may not work on all CP/M to VDM adaptations͋!@"H&%! & "m%INFOTON I-100 termina&%f ͋! Ml%Lr%4x%3~%%HEWLETT-PACKARD 2621 termina͋&%&yCKf%%Perkin-Elmer Bantam termina͋&%XY KIf%>2͑  We have not tested this terminal or printer type. Please report any problems.!͔%͊ ͊ ͜ Ê ͑ For other terminals and video boards, Wordstar must be"patched". Determine your terminal's control sequencesfrom the manufacturer's manual; refer to the MODIFICATIONsection of the WordStar manual. Once these codes are determinedanswer "N" to the "ARE THE MODIFICATIONS TO WORDSTARCOMPLETE ?" question towards the end of INSTALL.>Uʹ$®$á$33$ %++##45Ⱦ#¹$^#V͊ $.&͑ OK (Y/N):>YGx %B%N7$Y$Q Q .&$üGY  % %xʳ JN%SN%XN%~#2]~#2^~#2_2d~#O ~#S%^#V#N%!mÍ%!tÍ%!{Í%!Í%!Í%!Í%!6#r#s͑ Previous selection kept unchanged&%&%%bk:56 #=%F#~%~#%bk:56 #=&F#~#&~#&+&.&.&͊ ͊ qO+&͑ ***** PRINTER MENU *****(More specific info is displayed after choice is entered)A Any "Teletype-like" printer (ie almost any printer)C "Teletype-like" printer that can BACKSPACED DIABLO 1610/1620 daisy wheel printerE DIABLO 1640/1650 daisy wheel printerF QUME Sprint 5 daisy wheel printerG NEC Spinwriter 5510/5520 thimble printerI "Half-Line-Feed" PrintersM I/O Master / O.E.M. Printer CombinationU no changeZ none of the abov͑ PLEASE ENTER SELECTION (1 LETTER):!T(͟$$7&:7Sc7;1=&(A*B%C#,D3Eh4F4G#5I.L9M7Q0Ur)Zx)+&͑ ***** PRINTER MENU 2 *****L DIABLO 1200 Hy-Type I OEM daisy wheel printerM DIABLO 1300 Hy-type II OEM daisy wheel printerQ Fancy TTY-like printer simulated on Diablo 1610-50 for demo1 return to printer menu (!=#͑ Are you sure you mean "none of the above"? Almost any printerwill work with choice A, "Teletype-like".If your printer really is different, refer to the MODIFICATIONsection of the WordStar manual for information on patching ina custom printer driver subroutine, and enter S at the DRIVERMENU (coming up soon).>,%Teletype-like printe͑ This selection will drive almost any printer. The printermust be capable of responding to ASCII printing characters,carriage return, and line feed only.:͑  If your printer is capable of backspacing, use CHOICE Cinstead for faster output.,>2>2\% \% ! "!"""""""">27!~6%Backspacing TTY-like printe͑  This choice is for any printer that will respond to anAscii BACKSPACE character (code 08) as well as carriagereturn, line feed, and printing characters.:͊ ,!"+͑ If you have a DAISY WHEEL or thimble printer shown on themenu, use the appropriate choice in order to obtain "Micro-justified" output and additional formatting capabilities.o͑ Refer to manual for instructions on patching in optionalcontrol sequences for ribbon color change, character pitchchange, and half-line roll (for subscripts and superscripts)if your printer has these capabilities.%"Half line feed" printer͑  This choice is for printers that can advance in half?units but cannot roll carriage upward, such as a Selectricwith a half-line ratchet. Use of this choice causes subscripts and superscripts tobe printed offset by half a line. Backspacing capability is also assumed. Patching of control sequences may be necessary to tailorthis choice to your printer; see manual. If run for demo purposes on TTY-like printer, this choicewill double-space and otherwise function correctly.:,\% \% %Fancy TTY-like demo on Diabl͑  This choice tests and demonstrates WordStar's abililityto print subscripts, superscripts, two character pitches,and red and black ribbon on a Teletype-like (non-Daisy)printer that has control sequences to roll the carriage up anddown partial lines, change pitch, and/or change ribbon color. This demonstration runs on a Diablo 1610-50 but treats itlike a Teletype-like printer with additional control sequences. To make use of these capabilities on a real non-daisyprinter, select choice A or C as appropriate, then patch inthe specific printer's control strings. See the"Modification" section of the WordStar manual.+\%  \%   \% \% \% \% \% \%A\%Bc4%Diablo 1610/1620 printe͊ x6)7͊ >+>2\% 4B  !3N%!>"2>"2>5"2>6"2> "2>A"2>B"2222<22>~22>N2>,%Diablo 1640/1650 printe͊ x6)7͊ 3\% P\% B S\%  >2!>Y"2>Z"2>2%Qume Sprint 5 printe͊ x6)7͊ 3\%I\%I!> "2>/"2>o2%NEC Spinwriter 1510/20 printe͊ x6͑ To prevent buffer overflow with these printers at 1200 baudwithout using a cable adapter, specify "ETX/ACK" or "XON/XOFF"protocol at the next menu, and configure the printerappropriately.:͊ 3\% 4KO@ \%= >]22>O2>2>@2>2>>2><2>92>32>4222>2>,͑ This choice is for the indicated daisy printers only. The serial versions of these printers should be interfacedat 1200 baud, otherwise printout will be very slow.͑ To prevent buffer overflow with these printersinterfaced at 1200 baud, specify "ETX/ACK" protocolat the next menu.:%I/O Master / O.E.M. Printerͦ9͑ This selection supports the following "OEM" printers: NEC Spinwriter 5500 Qume Sprint 3 (with cable adaptor) Diablo Hy-Type II 1345, 1355, 1355WPUsing the Micropro "I/O Master" interface board and cable(or an IMSAI PIO-4 board or equivalent; see also selection L).92>22<2<2<2>27͑ This selection activates a driver which accesses parellelports F8 thru FA directly. This selection applies to noserial printers.!ͳ9!ͳ9:5==6 #=¸9%Diablo Hy-Type I O.E.M. printeͦ9͑  This selection supports a Diablo 1200 Hy-Type I OEMprinter on an IMSAI PIO-4 board or a Micropro I/O Master. It is also appropriate for a Hy-Type II (or compatibleequivalent) if the "data 1/2" bit is not connected, e.g. ifan unmodified IMSAI cable is used.9>8͑ Make sure any AUTO LF or LOCAL LF switch is OFF+&:7¼;͑ FOR DIABLO / QUME AT 1200 BAUD, SPECIFY ETX/ACK PROTOCOL(NEXT), AND MAKE SURE DRIVER CAN INPUT CHARACTERS (BELOW).t<¥<͑ FOR NEC AT 1200 BAUD, SPECIFY ETX/ACK OR X-ON/X-OFF PROTOCOL,SET UP PRINTER TO MATCH, AND MAKE SURE DRIVER CAN INPUT (BELOW);OR SPECIFY NO PROTOCOL AND MAKE A CABLE ADAPTER.͑ At 300 baud or less, no protocol is required.<<͑ Most Teletype-like printers use no communications protocol.͑  ***** COMMUNICATIONS PROTOCOL MENU *****A "Communications Protocol" is necessary with some printersto prevent printer buffer overflow and character loss.E "ETX/ACK" ProtocolX "X-ON/X-OFF" ProtocolN NONE required (or handled outside of WordStar)U no changePLEASE ENTER SELECTION (E, X, N, B, or U):!?͟$2?ͺ%͊ $7;e?͔%.&:ɯ>>2%"ETX/ACK" protocol:7>͑ For ETX/ACK protocol, you must patch in your printer's buffersize, ESPECIALLY IF IT IS SMALLER THAN 256 BYTES -- see manua<>B%UH>EW>XT>NR>:!>?!_>=!(?=!X?"X-ON/X-OFF" protocolNo communications protocoINVALID PATC+&:¯?͑ With no protocol, the usual driver selection (below) is LG@͑ With a protocol, the driver must be able to input as well asoutput characters (such as T or C). If you use selection L,patching will be required.͑  ***** DRIVER MENU *****Or, how should WordStar send characters to your printer?L CP/M "List" device (LST:)T CP/M primary console device (TTY:)C CP/M secondary console device (CRT:)P Port Driver (direct I/O to 8-bit ports)S User-installed driver subroutinesU no changePLEASE ENTER SELECTION (L, T, C, P, S, B or U):!=c͟$x2y2$e?:fcJJ:fc>23fcc:G=#y=$e?:A:32͑  In most systems this is a "physical" device that is theprimary console device and is capable of Input and Output.Thus it is suitable for use with communication protocols ifit is not being used for the actual console. You need onlyset the Baud rate to match the printer (usualy 1200 baud).| ͑ **** WARNING **** TTY: is currenty the console. You maywant C (CRT:) unless you are INSTALLing for another system.%CP/M Console driver (CRT:>2͑  In most systems this is a "physical" device that is thesecondary console device and is capable of Input and Output.Thus it is suitable for use with communication protocols ifit is not being used for the actual console. You need onlyset the Baud rate to match the printer (usualy 1200 baud).| ͑ **** WARNING **** CRT: is currenty the console. You maywant T (TTY:) unless you are INSTALLing for another system).%WordStar's Port Drive͑  The port driver directly acceses hardware port(s) to controlprinter. This driver is normally used with serial printersand a protocol. As hardware ports are very non-standard withrespect to location and status information, you may have toprovide data (Note that WordStar will try to determine the dataall by itself) so WordStar can modify the port driver. Notethat the port driver contains a "busy test", resulting in thebest response when editing and printing simultaneously.\NMY͑ *************************************************************WHAT IS THE OUTPUT PORT FOR YOUR PRINTER?ͱNܭWJ`VJRSJܭW͑ *************************************************************WHAT IS THE OUTPUT STATUS PORT FOR YOUR PRINTER?ͱNX`kKWkKRJX:͑ *************************************************************WHAT IS THE INPUT PORT FOR YOUR PRINTER?ͱN@YK]KRpK@Y͑ *************************************************************WHAT IS THE INPUT STATUS PORT FOR YOUR PRINTER?ͱN܃YڃL#_҃LRK܃Y͑ *************************************************************WHAT ARE THE INPUT STATUS PORT BITS FOR YOUR PRINTER?ͱNaM \MR҃LaY%ZpZ:-MZ [͑ *************************************************************WHAT ARE THE OUTPUT STATUS PORT BITS FOR YOUR PRINTER?ͱN`Mh[MR-M`:͑ *************************************************************WHAT ARE THE INPUT STATUS PORT BITS FOR YOUR PRINTER?ͱNaYN \YNRMa͑ Are the printer ports "I/O" or "Memory Mapped" (I or M):$ZN:ZNBʼIM7ÙN͑ DO YOU WISH WORDSTAR TO DETERMINE THE VALUES OR SHOULDWORDSTAR ACCEPT THEM FROM YOU (D OR A): >A %Bʼ͑ D;O͑ A7͑  O:R̡PHOñN0:\OQ 0:lOQ :(‚O>IÄO>M2ZN!00"W"X"=Y"Y" Z""Z"kZ"mZ"Z"Z"[" ["`"`"a"a`,8P`.8Pa;8Pa=8P:(P Z4[PkZ)[PZA[P[8[PW48PX)8P=YA8PY88P 0:IP0:WP 0:lP0:zP 0:P0:P͑  *************** CAUTION *****************THE FOLLOWING PROCEDURE WILL NOT WORK ON ALL HARDWARE ANDMAY HAVE UNUSUAL RESULTS SOMETIMES. PLEASE REMOVE YOURDISKS FROM THE DRIVES AND REPLACE THEM ONLY WHEN TOLD TO.DT>2R͑ ****************************************************************************************************************************YOU MAY NOW REPLACE THE DISKS YOU REMOVED EARLER.****************************************************************************************************************************$د2R͑  **************** FAILURE *******************WORDSTAR HAS FAILED IN THE DETERMINATION IT WAS ATTEMPTING.PLEASE CHECK YOUR PRINTER AND IT CONECTION TO YOUR SYSTEM.IF ALL ELSE FAILS RESET YOUR SYSTEM AND TRY INSTALLING AGAINoDT͑ IF YOU WISH TO RETRY THIS OPERATION ANSWER "Y" TO THE "OK Y/N"QUESTION BELOW. YOU MAY ABORT INSTALATION WITH A CONTROL C.$͑ IN ORDER TO USE WORDSTAR'S AID TO DETERMINE THE OUTPUT PORTTHE PRINTER MUST BE CONNECT AND TURNED ON WITH PAPER, A PRINTWHEEL AND A RIBBON INSTALLED AND WITH THE COVER CLOSED. THESERIAL PORT THAT THE PRINTER IS ATTACHED TO MUST BE SET TO THESAME BAUD RATE AS THE PRINTER.$͑ WordStar will now attempt to output to a number of ports and willask each time if anything printed on the printer. You answer "Y"to the "OK Y/N" question when something is printed on the printer>8W<\͑ Now OUTPUTing to PORT #: LO͑ Hex 2a[͑ OK (Y/N)> |W>Y$3W24͑ What is the OUTPUT port number in HEX: WW_242a[!`U>2e[>2d[w=W# 3d["Xx͑ THE OUTPUT STATUS FOR THE PRINTER IS: LO͑ H2,͑ THE OUTPUT STATUS BIT MASK FOR THE PRINTER IS: LO͑ H2.͑ THE OUTPUT STATUS ONES MASK FOR THE PRINTER IS: LO͑ H7?͑ What is the OUTPUT STATUS port number in HEX: XX_2)2e[͑ What is the INPUT port number in HEX: =Y=Y_2A2Y[͑ What is the INPUT STATUS port number in HEX: YY_282][:(Y23>2X[2\[2d[2(272@>2`[23:X[:Z23>:2X[2\[2d[2(272@>22`[23*4 ZNg͑ What is the OUTPUT address in HEX:  Z Z_"4"a[*)kZNg͑ What is the OUTPUT STATUS address in HEX: kZkZ_")"e[*AZNg͑ What is the INPUT address in HEX: ZZ_"A"Y[*8[Ng͑ What is the INPUT STATUS address in HEX: [[_"8"][d[G2 \> 3d[o[2,͑ THE OUTPUT STATUS BIT MASK FOR THE PRINTER IS: LO͑ H2.͑ THE OUTPUT STATUS ONES MASK FOR THE PRINTER IS: LO͑ H7?7:=+]d2X[ \(*\\\\[Gx!\~?\ 0\\(?\~#3(J\\[3\gX[|3\2;͑ THE INPUT STATUS BIT MASK FOR THE PRINTER IS: LO͑ HO2=͑ THE INPUT STATUS ONES MASK FOR THE PRINTER IS: LO͑ H7?TEST ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz d2X[ /](C]\/]\[G2 \(M]>3(X]\[I]gX[|I]2;͑ THE INPUT STATUS BIT MASK FOR THE PRINTER IS: LO͑ HO2=͑ THE INPUT STATUS ONES MASK FOR THE PRINTER IS: LO͑ H7?:=ʙ^> ^<^2Y[2X[ ^^(^x!\~5^ &^\(5^~#3(@^>Q^=\2Y[X[L^2A͑ THE INPUT PORT FOR THE PRINTER IS: LO͑ H7?>â^<ʳ^2Y[2X[ ¨^Þ^(ڙ^2 \(ڿ^>3(^>^<ʻ^2Y[X[^2A͑ THE INPUT PORT FOR THE PRINTER IS: LO͑ H7?!`U>2][>2\[w=/_#<)_!`UL_\#ͮ_x282][2 G__\\[Z_:8͑ THE INPUT STATUS PORT FOR THE PRINTER IS: LO͑ H7?.:=_>.2_!@"_>2_!2"_*_+"_}\:_3(_7?! ` `)))) _}0 ??͑ What are the bit(s) that change at the OUTPUT STATUS portwhen the OUTPUT port becomes ready to accept a characterfor OUTPUT (enter HEX value): ``_2,͑ Which bit(s) change(s) from a 0 to a 1 (enter HEX value): ``_2.͑ What are the bit(s) that change at the INPUT STATUS portwhen the INPUT port has a chracter availiable for INPUT.(enter HEX value): aa_2;͑ Which bit(s) change(s) from a 0 to a 1 (enter HEX value): aa_2=%User-installed printer drive͑  See manual and listing in appendix re coding and instal-ling your custom printer busy test, printer output, andprinter input subroutines (the input subroutine is needed onlywhen a communications protocol is in use).:O!B!BH! b:c:!D!bF#?B%UALBTDC_FP?HS b:Rpc͐Q͑ ARE THE MODIFICATIONS TO WORDSTAR NOW COMPLETE? IF THEY ARE ANSWER YES TO THE NEXT QUESTION. IF YOU WISH TO MAKE ADDITIONAL PATCHES TO WORDSTAR'S USER AREAS, ANSWER NO TO THE NEXT QUESTION.$һn͑ YOU MAY NOW MODIFY ANY LOCATION DESCRIBED IN THE LISTINGAT THE END OF THE USER MANUAL OR THE CUSTOMIZATION NOTES.YOU MAY USE EITHER THE LABEL OR THE HEX ADDRESS TO SPECIFYTHE LOCATIONS YOU WISH TO CHANGE. IF YOU USE A LABEL THENYOU MAY APPEND AN OFFSET TO THE LABEL (I.E. LABEL:+31). THELABEL ALWAYS HAS A ":" APPENDED (LABEL:). YOU MAY SPECIFYTHE NEW VALUE ONLY AS A HEX NUMBER. A LOCATION OF ZERO (0)WILL CAUSE THE END OF THE MODIFICATIONSÅf͑  OFFSET IS NOT A HEX NUMBERÅf͑  ADDRESS IS NOT HEX OR : MISSINGÅf͑  NO SUCH LABEL ?!?!?!͑ LOCATION TO BE CHANGED (0=END): $Sc̀gf_f"Yg͵gfffSc_9f|ʻn͑  ADDRESS : |LO}LO͑ H OLD VALUE: ~LOcc8P͑ H NEW VALUE: cccc_ẁg[g*Yg#NgÅf|cg}cgSc#HgGrgxrg {g0Sc>ʰg:ʛg+ʛgÇg>++ʬg77?!gScg g gg####g gSc#gg#^#V#F#N7?7OUTCHPATVE MSGVEWSVECOPRISIGNOSIDTE؏PROTTPDRVTWFLAG WRAP JUST!VTAB"HYP$SHOWD%SHOWM&PAGDI(LSPAC)DISDI+AUPA4MSGLE5INSTL6PCLA7SAVEN8HITHWIICLEADJCLEADRROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ] FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ EģDBA˨DSЭDLƷDRLƼDPHSPDNPRODMJWPSTAMORPADELDELDELDELIVOFƋSWISWOUUCNSTUCONɽUCONDECCHҒFDTCHҴFNMRG FNOVLFNWSCHZONřITBIITMINOUFRVELISOFHY÷RVQUOVARCHVARCHVAROPFPTAbPFPTA{PNFTAwPVTAyXTA=ACFInACSTAoACSTAwSOCH ULCH DBӲITPOPNITHLa+&͑ CONFIRM TERMINAL AND PRINTER SELECTIONS:!͜ !͜ : o!͜ !͜ $ڼÞ$:H͑ PRESS ANY KEY FOR NEXT SCREENFUL OF TEXT: %> Q AL AND PRINTER SELECTIONS:!͜ !͜ : o! d͔  ͔ 0T  Җ Wyʩ 0T 0ztiil# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ EO,|KQUeJJJJJJJJJJV!s ~# jD*K͡.Ҟ,͡.ͱ͠ͱ"7>6Ӈ2}ӄ|ӄ"!/) /`iɾ #  ɯ<: O=_f ! F! V#fjQ͏ O,|KQUeJJJJJJJJJJV!s ~# jD*K͡.Ҟ,͡.ͱ͠ͱ"7>6Ӈ2}ӄ|ӄ"!/) /`i*%]͡.ͬ4LOAD ERROR - SYSTEM SIZE TOO SMALL TO RUN AMODEM1QL!)Z.ͬ4 AMODEM AS OF 29 JULY 1982 BY MICHAEL DAY͸42cJ }2>J>2 2 2K!]"K>2~J2dJ2K!K-$>B2(J:"J O:ʩ: ®>2#J::~J>2(J)".:"J?ʧ?SR::"JCP::"JTn ͬ4*-> INVALID FUNCTION REQUEST <-*:~JOZ.ͬ4*--> INVALID COMMAND <--*͸4Z.ͬ4>>> TYPE "HELP" TO SEE AVAILABLE COMMANDS <<2dJ>2KZ.:cJ_N,5::K ͟5Z.͸4:cJ_N,`76ͬ4COMMAND : }J(1͸4J 1CPM| 1NEW&:0 1ERAV' 1REN':C 1BAUDҋ:_ 1ORG 1ANS 1BATCH] 1COM  1VIEW3 1SEND:/ 1EXIT 1CHATP 1REMOTE:/ 1QUIET4 1SAVE[ 1TERMҋ 1TCMDҷ 1DEL 1MAKE 1OPEN 1CLOSEҐ 1CLEAR_ 1RECOV҆ 1FILES 1DIRSҚ; 1DIRҏ; 1STATҧ; 1TYPEҺ8 1DUMPC: 1HELPқ? 1LOST 1BELL:ʤ&:J!Jc.Ҳ:~Jʫ,}J!\72OÑ]2"J !#J6#ͬ4*-> INVALID OPTION <-*7:&J2#J: /2 ͬ4*-- COM -- : 4ͬ4 --*Ã:/2ͬ4*-- VIEW -- :4ͬ4 --*Ã:K : /2 ͬ4*-- SAVE -- : 4ͬ4 --*Ã:/2ͬ4*-- TERMINAL -- :4ͬ4 --*Ã:/2ͬ4*-- TCMD -- :4ͬ4 --*Ã: /2 ͬ4*-- BELL -- : 4ͬ4 --*Ã>3:/2ͬ4*-- REMOTE -- :4ͬ4 --*Ã: /2 ͬ4*-- QUIET -- : 4ͬ4 --*Ã:/2ͬ4*-- BATCH MODE -- :4ͬ4 --*Ã}J!\72".:] ,!]o.,*"K",҃*K",>O2ͬ4*- ORIGINATE MODE SELECTED -*2Ã>A2ͬ4*- ANSWER MODE SELECTED -*/Ã:K ʂ ͱA e e ͱA e e *K^6"K ͱ_ _ "Ks>2 2 !K-!]"K ^5ڃ: ͬ4 *-- CANNOT RETURN TO CPM WHEN UNDER REMOTE CONTROL --*Ã:cJ_N,ͬ4I AM LOST TOO, PLEASE TYPE HELP.Ã}J!\72".:]Rh *KP͡.; //y2K@h 2Kͬ4>>-- CANNOT RECOVER FILES --<< Ã/à ,>2KC.:K   :] ʒ *Ҙ !K->2 2K ,ͬ4- TERMINAL MODE SELECTED -2_J!"`J:K 5͸4͟56͸4͠35 Ϳ3G:K :x" :x" :x2 >2K >2Kxʃ  x& P : c !"`J2_J #G: h x2bJͧ :bJ xŒ  † x3>:x3xÓ >:x3xͧ G: xʩ ! ! G*++*K͡. ͬ4 - >> MEMORY OVERFLOW << -͝ Å  /*K͡. ͬ4 - >> * MEMORY FULL * << -*Kx2bJw#"K"Kͱ *%#*K͡.C 2_J!"`J !_J4~̝ ̝ (̝ ҅ !"`J :_J *`J#"`J : ͡. 2_J!"`J >& >&G:xM3G:$JxM3:&JxM3x3:K : /2  :::K8+ ]KN,+ + *ZJ#"ZJ!!*K͡. M M :KF  >2K >2K!]͡.o ]*K͡.j ~#] `i"KK+5͸4͟5ͬ4 TYPE "A" TO ABORT SAVE, OR INSERT NEW DISK IN DRIVE > :K5ͬ4 < AND TYPE "C" TO CONTINUE : 4x3͸4͸4AC "' !"ZJK) !K6&,*\J"ZJ>2 ͬ4++ FILE SAVE ABORTED ++7ͬ4> CHAT MODE SELECTED < C.!'"K͠3ʮ!'"KͿ3 “ͧ &> ͧ &ʨʨuQ.Ã*K|+"K u#u u#Æ^5ڃ}J!\72".:] *Ã^5ڃ: 1ͬ4*-- CANNOT REOPEN A FILE IN COM MODE --*Ã}J!\72".:] V8ڃ͟8vͬ4*- CANNOT REOPEN COM FILES -*Ãͱͬ4DATA PRESENT IN MEMORY BUFFER, TYPE "A" TO APPEND TO FILE : 4x3͸4Aƒ*%#*K͡.T!K-!\6&T*\J"ZJ\ͯ+ڃ!"KK -!~!y2K!# *KT] "KDi]͡.=~+ 0]!:KGxʃ~#G!K-ͬ4*- ERROR - CANNOT APPEND TO THE FILE - SORRY -*Ã:K ͱڶ ڃͱڶÃ*K^6"K ͱ7"Ksڃ>2 2 !K-!]"KÃͬ4++ MEMORY SAVE INCOMPLETE ++7:K K(ڃʋ'ͱKK)K!"ZJÃ>2K2 2 !K-Ã!]"Kͬ4**--> MEMORY CLEARED <--**Ã}J!\72".:] ] 1ALLz!]~+o.,ͱ *%] /͡.z*K"K]#o.,*K*%͡.z*K͡.z"K]ͱ9ͬ4**-- DATA NOT RECOVERABLE -- SORRY --**Ã]*K͡.  * /͡. "Kͬ4*- DATA RECOVERED -*Ã*%"Kͬ4*-- ENTIRE MEMORY SAVE AREA RECOVERED --*Ã]*K͡.]͡.ͬ4++ NO T FILE PRESENT ++Ãͬ4++ NO FILE SPECIFIED ++Ã}J!\72".:] V8: J͟8Jͬ4++ COM FILE MODE NOT ON ++Ã:>J"'ڃ!"K>2K\*ڃ!\6&ڦ'ͬ4- USE CONTROL "Q" TO START SEND -!\o+5.Ϳ3Q.-¤\N,P-ùͬ4 ++ FILE TRANSFER COMPLETED ++ͬ4 ++ FILE TRANSFER UNSUCCESSFUL ++ͬ4 ++ TRANSFER CANCELLED ++!5.͓4Q.~v: o~#U&C.::*K}²:K0x3:K<2K ڲ>2K#"K͡.!"KM3Q.>2dJ2K!"K!P"K:>J"'ڝͫ":] ʳ$!J"K##ͫ">3:(J=V8ڝlڝ\*ڝ!\o+ C.ZC.$\/+ڝ2K͠ʝCnZ2K2Kڝʖ$tuʝÃ2K>k#ʝš>2K*\J*K+6S+r+^ $:(J$ =2K:#J1ͬ4- SENDING --> ͠a>k#:#J*ͬ4FILE #:K94ͬ4 = :\ͪ02K!]ͨa:#JQz>.x3#~5z2K>k#:#Jĸ4!#>k#>uk#:#JJ͸4"ͬ4++ CHECKSUM ++J~k#zҺ~ :#J~x3m4!#:#J1ͬ4- SEND DONE - CLOSING TRANSFER -͠>k#>k#:#J;͸4"ͬ4++ SENDING NAME ++>k#!#>uk#*K#"K:K<2K >7>k#!#>uk#>7:#Jʼ:Kʒ> x3:x3> x3ͬ4SENDING # *K#4"0:ʼG:K >k#:Kk#:K/k#>2K!"K!~k#,2K:KC--*K|k#}k#yk#1ͬ4- SENDING --> FILE #:K94ͬ4 = #͸42KsJ#=:f= } l G:K=!K4~A!\6&!h-!l6 #*\JͰ.!KF#-6R#6 #*\JI/Ͱ.!KF#-6M#6!\dK!-:|*K!\-"K+6A!K54:#J7͸4ͬ4++ FILE COUNT OVERFLOW, ABORTING TRANSFER ++7!~J~7#O 6 #6 J!\"K72:] 7ȯ*K$K~ c 7#R#~ c"K!#Kp2h:dJ¯>2dJ!\qJ -!\eJ -\N,!qJ\ -\N,!eJ\ -\N,<72dJ=_!~2K#rJ -] -2h2|:K=2K0*K-"K:KT\N,Ww=ʆ1ͬ4++ FILE READ ERROR ++7! yʌ;>2Ky2K!T"K>3m4!#C£:#J͸4"ͬ4++ TIMEOUT ON NAK ++F>>3m4 !#:#JF"ͬ4++ TIMEOUT ON ACK ++FG:#JF"x4ͬ4H RCD, NOT ACK*K#"K:K<2K >د2K:&Jk:#J>͒#>1ͬ4++ CANNOT SEND FILE -- ABORTING ++>#1ͬ4* ++ SEND ABORTED ++ *$ͫ"!"K!P"K>2K:(J9:] ʳ$V8dK!\-6> 2KA:#J]\)ͬ4> FILE OPEN, READY TO RECEIVE C2K2^J͊ʕ3"+$>2^JrO"+\+>k#*K+6R>2K $:(J9:#J$1ͬ4- FILE RECEIVE DONE - CLOSING TRANSFER -$#1ͬ4*++RECEIVE ABORTED++*$!#>2^JrO"\+2K2K:#JZͬ4- RECEIVING --> -—:K@m!dK-:\2dK!eK!#ڗʗ:#Jʻͬ4FILE #:K<94ͬ4 = :\ͪ0m4!#ڗ" ڗG>k#K͡.җp:#Jz~ ~x3lK͡.>.x3#ÿz2K:#Jĸ4yk#!#ڗ—!K4!\-!eK] -*K!\-"K+6A>:#J1ͬ4++ FILE COUNT OVERFLOW ++>:#Jʾ"ͬ4++ RECEIVING FILE NAME ++*K#"K:K<2K ;>>3>k#m4!#> \N,ȇ!o ~)#~+] -!e~w#~w\N,!\l -!u6B#6A#6KlN,!l6\N,:\N, x3:x3> x3ͬ4AWAITING # *K##4"0: G:K ͬ4- RECEIVING --> FILE #:K94ͬ4 = #͸4>2KD ڏ! G:&J( :#J&!"x4ͬ4H RCD, NOT SOH&!m4!#J :^Jk#Ce !#t !#D >2^J2KD !#ڏ!W!#ڏ!/!2K>2K!"K!!#ڏ!w,¨ Q2K!#ڏ!G:KC x! !#ڏ!*K|!:KG:K<!:#J&!"ͬ4++ SECTOR NUMBERS MISMATCHED ++&!>2^J*K#"K:K<2K ?!>2^J:&JM!:#JZ!͒#Z!2K9!1ͬ4 ++ UNABLE TO RECEIVE BLOCK -- ABORTING ++>:&Jʝ!:#J&!"ͬ4++ TIMEOUT RECEVING SECTOR ++&!:&J!:#J&!"ͬ4++ BAD SECTOR # IN HDR ++&!:&J":#J&!":KC"ͬ4++ CRC ++&!ͬ4++ CHECKSUM ++&!*K!-"K:K<2KO":KOT\N,چ"†"! X"!T"K2K1ͬ4 ++ ERROR WRITING FILE ++7!"K!T"K>2K>2K2K2K2K2K2K:KCͬ4 *1ͬ4 ++ ERROR #*K#.4> x3!dK7!tK:KW~x3##:,#xG: D#/#/#,#7#-O:$Jc#:&Jh#:Kh#M3:%Jʁ#:&J†#:Kʆ#M3-O&:(J›#7ͬ4> MULTIPLE ERRORS ENCOUNTERED. > TYPE Q TO QUIT, R TO RETRY : 4x3͸4͸4RQ›#7!##>k#>k#7:K<2K*K#"K!\6&*\J*K++r+s:#J1ͬ4FILE #:K94ͬ4 = !\7> x3*\J.4ͬ4 RECORDS (/.4!\-:K™$ͬ4K -TRANSFERRED- ͬ4K --> ABORTED <-- >B2(J#ͬ4 *- NO FILE SPECIFIED -*:~J| $>B2(J>k#>k#:#J$͸4/Z.:'J%:~J| :ƒ ʃ͸4à M%͜%"LJ*JJ%DM*LJ%*LJ*JJ /% |e%/J-*.:^#"/J^#"6J~#21J~#22J^#"4J^#"8J^"?2OK!"\JCKN,t&q&CKN,t&`&<7=͕& ~7~*\J_"\J_!> A,_N,ڦ'2cJ}J!\72".:] ʃ^5ڃ*Ã^5ڃͬ4--> INSERT NEW DISK AND HIT ANY KEY : 4͸4͸4"'à N,O'_N,P' }2>J7}J!\72".\(ڃʋ':K ʃKN,ڦ'ƒ3ͬ4++ FILE NOT FOUND ++Ãͬ4*-- DISK ERROR -- FUNCTION TERMINATED --*Ã}J!\72".V8ڃ:] \!K ?(#'ͬ4*-- CANNOT RENAME "T" FILE -- CLOSE IT TO RENAME --*Ã\N,ڦ'ʋ':\8ڮ(!\"K-ͬ4NEW FILENAME : }J(1͸4}J!\72>2\!\2K-"KN,ڦ'Ãͬ4*-- DISK IS R/O, CANNOT CHANGE FILE NAME --*Ã8ڦ)N,چ)ͬ4> 7ͬ4 -- EXISTS -- TYPE "Y" TO ERASE: 4x3Y\)4x3͸4͸4 \)N,چ)ͬ4 *-- 7ͬ4 -- NOT ERASED --*7ͬ4*-- ERASE DISK ERROR --*7ͬ4*-- FILE IS READ ONLY, CANNOT ERASE IT --*7)<! -(*8ڦ*! -N,w*N,w*<*N,w*w*ͬ4> ++ CANNOT MAKE FILE - DIRECTORY MUST BE FULL ++ <7ͬ4 *-- DISK ERROR -- CANNOT MAKE FILE --*7ͬ4 *-- CANNOT MAKE FILE -- DISK IS READ ONLY --*7!K-\)!\K -!"ZJ/++ͬ4*-- CANNOT FIND -- 7ͬ4 --*7N,ͬ4*-- DISK ERROR -- CANNOT OPEN FILE --*77ͬ4 -- OPEN -- FILE SIZE = *\J.4ͬ4 RECORDS (/.4ͬ4K*"K!-N,A+ʿ+A+N,,+ͬ4++ CANNOT CLOSE - 7ͬ4 ++7ͬ4*-- DISK ERROR -- CANNOT CLOSE FILE --*7k,~,!9"GJ*GJG-͵-2K2K2K2K2K:, |,}ʬ,* ,^q#Vp"EJ*,^q#Vp#"?J"-^q#Vp#"AJ6-^q#Vp"CJk,ͬ4 FILE R/O 2K^,ͬ4 BAD SECTOR :>J-:K>2K2K^,ͬ4 SELECT 2K^,ͬ4 R/O 2K^,*###^#V!,͡.g-*?Jr+s#^#V!"-͡.-*AJr+s#^#V!6-͡.—-*CJr+s#^#V!,͡.¯-*EJr+s:K-:K-:K-:K-7?76# 6 #-6#-~#-*KOyO}o|g.|g}!o."K!l\-2|2h:K2K>2K:K2K>2K:K2K:2KF#n.d.7~͗.~kb͗.ڑ.)))_#w.|}:ҟ.07|}o&Ͱ.2K!K"K'././d./ ./}/6 /.x { //}o|g0*Kw#"K:K<2K}2/#(/}o|o|g*'͡.^/͍/{/ /)͡.o/`i͍/`i)) )/|ʈ/`i)T]):_/)͡.ڦ/PY!7!G{_zW/xG// »/ѯ!ѯ7:K 0ͬ4>> ++ NO FILES TRANSFERED ++ <<G!Pͬ4 >>> FILE TRANSFER STATUS <<< ͓47x0yh0> x3:x3> x3k0͸4 D0yĸ4~ͪ0#0> x3#^#V##4ͬ4R(/#4ͬ4K ~#x3@@¼0Ax3>:x3 ~#x3x>.x30:K<2K:G:K͸4:K<2K2K:Kĸ42K~$11#1#~17#'2կ: D14M1͠3D1Ϳ323 2ʛ1ʛ111122 61G#4+~#1pxx3#61#G~wڹ1+xF6 ʾ1xx361461x3> x3>x361>#x3͸4,1G>#x3͸4x61x3161>x3561͸461͸4: /2 61>22K2K1F##> w#02ͱ2#^#6 22 ʝ2 o2 2 ʝ2 2o2 ʝ2 22 ʝ2 2#3 36# > 2>2 > 2>2w#2:2N,(x34>)x3O:Ky& 3:  33º3:K>º3 33:K3 3#33*a{_|4} 4 40x3ͧ.>D4Ͱ.>D4Ͱ.>D4ͧ.>D4!KFO\4\4> x3 S4#~i4#x3]4:&J|4:ʂ4͠3„4Ϳ377ȷ|4ª4Ϳ377ȯ44րȯͬ4 ~#x34ͬ4(OFF)ͬ4(ON )P͠34 x4>x34Ϳ33 5<@x3!"XJ:K N5:K=E5_N,E5#%"XJ"VJ`i"TJ_N,#%"RJ"PJ`i"NJ:K :K8o5ͬ4*-- T FILE -- !K7ͬ4 -- NOT CLOSED --*7ͬ4T FILE= :K 5ͬ4 --> NONACTIVE <--:K8C8> x3!K7> x3*ZJ.4ͬ4 RECS (/.4ͬ4K SAVED *XJ.4ͬ4K FREE͸4:K 06ͱ06: š6ͬ4--F:*K*% /Z6*% />-x3Ͱ.:KG.4ͬ4--U:*K] /Ͱ.:KG.4> 6>Gxʲ6>-x3Ì6ͬ4--------------------ͬ4B:*Ͱ.!KF#7x6>-x36ͬ4--: PJ7:MJ7:VJ7: CJ7: SJ7: QJ7: BJ7:RJ7:TJ7:GJ7:87:G>J7ͬ4----------Y7xx3>-x3ͬ4--ͬ4DEFAULT DRIVE=Ax3ͬ4:8C8ͬ4 USED:*PJ.4ͬ4K FREE:*RJ.4ͬ4K TOTAL:*NJ.4ͬ4K͸4~@@7Ax3>:x3#7>.x3 7~# x37!=#8ѷ,8)=#8}=8|=87?7N8ͬ4R/Wͬ4R/O!] ~#?m8*m8[8ͬ4 ++ NO WILD CARDS ALLOWED IN FILE NAME ++7!e~C¸8#~O¸8#~M¸87ɯ>2K}J!\72".:] ʰ9:>J"'ڃ\*ڃ!\6&ڦ'!\o+98ʃ!B9ܸ4ڃ8\N,ͬ4 **-- ERROR READING FILE --**7͓4: T9~i9~ k9͐9~ͧ ,B97:{99c9\9> ͧ ͐9:K9 Ÿ9>2K ڝ9ʝ9:K<Ú9::ͱ:!]: 9~̸4ʃ :͐9~ͧ ͓4ܸ4ڃ#*K͡.9͸4Ã::999ͬ4**-- NO MEMORY AVAILABLE TO TYPE --**Ã!"K}J!\72".:] =;:>J"'ڃ\*ڃ!\6&ڦ'!\o+9:ʃ!"K͟:ܸ4ڃ:*K"K*K"K͸43> x3͓4*K~#"K4*K#}> x3}"K:*K͡.ڶ:*K};#"K}> x3x3x3:*K~#"K3 ;;>.x3*K#}"K3;*K͡.;*K͡.ڟ:::ͱc;*K!]"K͟:Ãͬ4**-- NO MEMORY AVAILABLE TO DUMP --**Ã>2K2Kï;>2K>2Kï;>2K2K}J!\72".2K:] ;>? !]w#;:K;>?2h2K } < 2K:\<<2\=_N,ڦ'#%"K!L"K!"K"K"KA<\N,ڦ'<!_~?< /:K?<#*K w#v<w#"K*K#"K@͡.?<ͬ4MEMORY OVERFLOW - READING DIRECTORY*K}ʪ>L!SL s#r# +}<*K"K+}d=:Kd=*K|g}od=}o"K#"K*K{ozg"K*K"K> ?O=*K*Kj?*K*K{ozgO=O==*K*K#{z=*K S?=##"KÝ=*K^#V#"K:K= ~=*K|ʪ>Ý=:K>:\5>:x30^#~))))kb)))_"K!2Jo&:2J/o*K"K*K#"K:Kp>#4>Kx3*K#4>Rx3I/#4>Mx3*K|ʪ>:K=2Kʝ>:Kʝ>> x3:x3> x3Ý=:<2K͸4Ý=*K|*?:K?ͬ4 DRIVE :\@x3>:x3ͬ4 CONTAINS *K.4ͬ4K IN *K.4ͬ4 FILES WITH *K.4ͬ4K FREE:K_N,#%͸4ͬ4 FILE NOT FOUND ON :\@x3ͬ4: ?^#V#N#F_ #h?]?QL) ) Nq#NqQL) ) N#F^#V_ #‘?}J!\72".] Aͬ4*--> AVAILABLE HELP COMMANDS <--* RET - RETURN TO COMMAND MODE SYS - SYSTEM COMMANDS FIL - FILE CONTROL COMMANDS TGL - TOGGLE CONTROL COMMANDS XFR - TRANSFER COMMANDS :ʋ@ͬ4MOD - MODEM CONTROL COMMANDS:@:@ͬ4TRM - TERMINAL CONTROL COMMANDS MEM - MEMORY CONTROL COMMANDS ͬ4 HELP COMMAND : >2"J}J(14J 1?қ? 1HELPқ? 1SYSғA 1FIL C 1TGLNE 1RET҃ 1XFRD:\A 1MODҺI:ʀA:ʀA 1TRMF 1MEMVH:"J?,:~Jʃ,ͬ4*--> SYSTEM COMMANDS <--* CPM - RETURN TO CPM A: - SELECT NEW DEFAULT DRIVE NEW - LOG IN NEW DISK(S) HELP - PRINT AVAILABLE COMMANDS FILES - PRINT CURRENT FILE TRANSFER STATUS DIR (A:) - PRINT CURRENT DISK DIRECTORY DIRS (A:) - PRINT SORTED DIRECTORY STATUS (A:) - PRINT STATUS OF FILES ON DISK :ͬ4BAUD 300 - SET BAUD RATE ͬ4*--> FILE CONTROL COMMANDS <--* TYPE A:FILENAME.TYP - TYPE OUT A FILE AT CONSOLE DUMP A:FILENAME.TYP - TYPE OUT HEX DUMP OF FILE :ͬ4ERASE A:FILENAME.TYP - ERASE A FILE (FILES) RENAME A:FILENAME.TYP - RENAME A FILE ͬ4*--> TRANSFER COMMANDS <--* SEND A:FILENAME.TYP - SEND A FILE (BLIND) S A:FILENAME.TYP - SEND FILE(S) R A:FILENAME.TYP - RECEIVE A FILE R (A:) - RECEIVE NAMED FILE(S) :ͬ4CHAT - CHAT WITH OTHER OPERATOR :ͬ4T (A:FILENAME.TYP) - TERMINAL MODE SELECT ͬ4*--> TOGGLE CONTROL COMMANDS <--* ͬ4BATCH - :4ͬ4 - TOGGLE BATCH MODEͬ4BELL - : 4ͬ4 - TOGGLE BELLͬ4VIEW - :4ͬ4 - TOGGLE VIEW:ʡF:ʡFͬ4QUIET - : 4ͬ4 - TOGGLE QUIETͬ4SAVE - : 4ͬ4 - TOGGLE SAVEͬ4TERMINAL - :4ͬ4 - TOGGLE TERMINALͬ4TCMD - :4ͬ4 - TOGGLE TCMDͬ4COM - : 4ͬ4 - TOGGLE COM:ͬ4REMOTE - :4ͬ4 - TOGGLE REMOTEͬ4*--> TERMINAL CONTROL COMMANDS <--* ͬ4T (A:FILENAME.TYP) - TERMINAL MODE MAKE A:FILENAME.TYP - MAKE A "T" RECEIVE FILE OPEN A:FILENAME.TYP - REOPEN A "T" RECEIVE FILE EXIT - CLOSE "T" FILE AND RETURN TO CPM CLOSE - CLOSE CURRENT "T" RECEIVE FILE DELETE - CLEAR CURRENT "T" RECEIVE FILE ͬ4*--> MEMORY CONTROL COMMANDS <--* TYPE - TYPE OUT THE CURRENT MEMORY BUFFER DUMP - TYPE OUT A HEX DUMP OF MEMORY BUFFER CLEAR - CLEAR THE MEMORY BUFFER RECOVER - RECOVER THE MEMORY BUFFER RECOVER 123 - RECOVER THE FIRST 123 BYTES RECOVER +12 - RECOVER 12 ADDITIONAL BYTES RECOVER ALL - RECOVER ALL OF MEMORY BUFFER ͬ4*--> MODEM CONTROL COMMANDS <--* ORG - SELECT ORIGINATE MODE ANS - SELECT ANSWER MODE SRTC?QRSVTBQRSVTBFER RECOVER 12R +12 - RECOVER 12 ADDITD - :4ͬ4 - TOGGLE TCMDͬ4COM - : 4ͬ4 - TOGGLE COM:ͬ4REMOTE - :4ͬ4 - TOGGLE REMOTEͬ4*--> TERMINAL CONTROL COMMANDS <--* ͬ4T (A:FILENAME.TYP) - TERMINAL MODE MAKE A:FILENAME.TYP - MAKE A "T" RECEIVE FILE OPEN A:FILENAME.TYP - REOPEN A "T" RECEIVE FILE EXIT - CLOSE "T" FILE AND RETURN TO CPM CLOSE - CLOSE CURRENT "T" RECEIVE FILE DELETE - CLEAR CURRENT "T" RECEIVE FILE ͬ4*--> MEMORY CONTROL COMMANDS <--* TYPE - TYPE OUT THE CURRENT MEMORY BUFFER DUMP - TYPE OUT A HEX DUMP OF MEMORY BUFFER CLEAR - CLEAR THE MEMO AMODEM VER 1.04 Documentation as of 20 July 1982 Modified to work with the Kaypro II Hereby renamed KAYM By Michael E. Day Chief Engineer Edge Technology 2735 S.E. Raymond Portland, Oregon 97202 KAYM wa develope a fil transfe progra t be use wit CP t transfe CP file t anothe CP system. Th progra wa writte t allo us wit th PCS-10 modem, bu an othe acousti couple a wel a man direc connect modem ma als us thi program KAYM wa writte t be compatabl wit th origina MODE progra (writte b Ward Cristensen a wel a th late version upt an including MODEM76 Man o th routine use i KAYM wer derive from CPM users group library programs as well as from various other sources. Some of them are even original for this application. I would like to thank those who provided the programs to the users group as it made my work much easier. If you recognize a routine from the users group here that might be yours, it probably is, and I thank you for it. If you see anything in the program that strikes your fancy, feel free to steal... err borrow it for your own use. Some things of note in the program are the assembler version of the multi-file access routine from the CPM users group. (It normally is provided in psuedo-code which requires MAC to assemble it. There is an entirly new terminal routine provided, which as far as I know is unique and not done befor, that you may find interesting if your are into that sort of thing. The directory/status is a modified version of the super directory from the users group (Thanks guys, it saved me untold hours of work.) Anouther interesting set of routines is the CPM error modification routines, which prevent accidently returning to CPM on an error condition. The routines are my own, but the idea was derived from various sources. If you need this sort of thing, you might take a look at them. And of course there are a bunch of misc utility subroutines that you might want to scan to see if any of them may be usefull to you. Ok, now that the opening stuff is over with here's the info on using this here program. Hope ya like it. The 'HELP' command: The HELP command provides a quick summary of all of the available commands in KAYM. The HELP command is subdivided into sections. These sections are of related commands. There are a number of ways to access the help section. The HELP command may be called from the KAYM command mode by typing 'HELP'. A short form of this is to type a question mark '?'. The HELP command may also be called directly from CPM upon start-up by giving the command 'KAYM ?' when in cpm command mode. Upon being given the HELP command, KAYM will provide a menu of available subsections of help commands and the command required to access them. You may type in the subsection command at this point, or type 'RET' to return to the regular KAYM command mode. (Typing a carrage return with out giving a HELP command performs the same function as typing 'RET'.) The HELP command may be followed with the subsection command to bypass the menu and go directly to the desired help section. 'HELP SYS' or '? SYS'. The available HELP subsections are as follows: RET - Return to command mode Returns to KAYM command mode without performing a help command. SYS - System commands Summary of available system commands FIL - File control commands Summary of available file control commands TGL - Toggle control commands Summary of available system control toggles XFR - Transfer commands Summary of available file transfer commands TRM - Terminal control commands Summary of available terminal control commands MEM - Memory control commands Summary of available memory control commands. When a subsection command has been given to the HELP command, a quick summary list of the available commands concerned in that subsection will be listed. The subsection commands and the command listings of those subsections follows: RET - No commands are listed, this command returns directly to the KAYM command section without listing any help commands. SYS - CPM - RETURN TO CPM A: - SELECT NEW DEFAULT DRIVE NEW - LOG IN NEW DISK(S) HELP - PRINT AVAILABLE COMMANDS FILES - PRINT CURRENT FILE TRANSFER STATUS DIR (A:) - PRINT CURRENT DISK DIRECTORY DIRS (A:) - PRINT SORTED DIRECTORY STATUS (A:) - PRINT STATUS OF FILES ON DISK FIL - TYPE A:FILENAME.TYP - TYPE OUT A FILE AT CONSOLE DUMP A:FILENAME.TYP - TYPE OUT HEX DUMP OF FILE ERASE A:FILENAME.TYP - ERASE A FILE RENAME A:FILENAME.TYP - RENAME A FILE XFR - SEND A:FILENAME.TYP - SEND A FILE (BLIND) S A:FILENAME.TYP - SEND FILE(S) R A:FILENAME.TYP - RECEIVE A FILE R (A:) - RECEIVE NAMED FILE(S) CHAT - CHAT WITH OTHER OPERATOR T (A:FILENAME.TYP) - TERMINAL MODE SELECT TGL - BATCH - (ON ) - TOGGLE BATCH MODE BELL - (OFF) - TOGGLE BELL VIEW - (OFF) - TOGGLE VIEW QUIET - (OFF) - TOGGLE QUIET SAVE - (OFF) - TOGGLE SAVE TERMINAL - (OFF) - TOGGLE TERMINAL TCMD - (OFF) - TOGGLE TCMD COM - (OFF) - TOGGLE COM REMOTE - (OFF) - TOGGLE REMOTE TRM - T (A:FILENAME.TYP) - TERMINAL MODE MAKE A:FILENAME.TYP - MAKE A RECEIVE "T" FILE OPEN A:FILENAME.TYP - REOPEN A "T" RECEIVE FILE EXIT - CLOSE "T" FILE AND RETURN TO CPM CLOSE - CLOSE CURRENT "T" RECEIVE FILE DELETE - DELETE CURRENT "T" RECEIVE FILE MEM - TYPE - TYPE OUT THE CURRENT MEMORY BUFFER DUMP - TYPE OUT A HEX DUMP OF MEMORY BUFFER CLEAR - CLEAR THE MEMORY BUFFER RECOVER - RECOVER THE MEMORY BUFFER RECOVER 123 - RECOVER THE FIRST 123 BYTES RECOVER +12 - RECOVER 12 ADDITIONAL BYTES RECOVER ALL - RECOVER ALL OF MEMORY BUFFER -> SYS <- SYSTEM commands are those commands which affect the operation of the system. These commands are listed in the SYStem help command. Return to CPM: CPM To return to CPM simply type 'CPM' while in the KAYM command mode. If the remote control function is enabled, then this is not allowed, the remote control must be turned off befor the return to CPM is allowed. If a 'T' receive file is open, the return to CPM is also not allowed until the 'T' file is closed. Default drive selection: A: The default drive may be changed by simply typing in the drive name followed by a colon ':'. Typing 'A:' will cause drive 'A' to become the current default drive. KAYM requires that a disk be present in drive 'A' at all times for proper operation, even when operating from a default drive that is not 'A'. (Note: See MAKE command for a special extention of this command.) Logging in new disks: NEW When a new disk is installed in the system, it is necessary to inform the system of this. After installing a new disk simply type 'NEW' to do this. Command help: HELP (sub) or ? (sub) The system supports a quick command summary of the available commands. To access the help listings, type 'HELP' or this will cause the available help listings to be printed. The particlar help listing may be called directly by following the help command with the subsection command such as 'HELP SYS'. The help command supports a short form command as the question mark '?' all help commands may use this short form. I.E. '?' or '? SYS'. The help command may also be called directly from CPM on start-up by typing 'KAYM HELP (sub)' or 'KAYM ? (sub)'. File transfer status: FILES The current file transfer status information can be listed by using the FILES command. The files command will list out the status of the files that were transferred via the 'S' or 'R' function commands. Only the last transfer operation status is listed. The maximum number of files listed is based on the maximum number allowed in the 'S' or 'R' functions. Currently this is limited to 64 in a single batch transfer. If the file transfer status information has been lost (due to return to CPM which causes the transfer status to be reset.) It can sometimes be recovered by typing 'FILES RECOVER' or simply 'FILES R'. This causes the file status to be reset to the last known status. If the status information has been overwritten (due to runing another program while in CPM) the status will not be recovered. The file status is provided in the form of: D:FILENAME.TYP 12345R 1234K C Where D: is the name of the drive that the transfer occurred on. FILENAME.TYP is the filename that was transfered, 12345R is the number of records that were transfered, 1234K is the size of the transfered file in kilobytes, and C is the completion code indicating the transfer status. An R completion code indicates that the file was received. An S completion code indicates that the file was sent. While an A completion code indicates that the file was aborted, and therefor incomplete. Unsorted directory listing: DIR (A:FILENAME.TYP) An unsorted directory listing can be obtained by using the DIR command. If the optional drive name and or filename is added to the DIR command, then the directory will be restricted to the given information. This command works the same as the CPM directory command. All wild cards are valid (question marks or astricks) if no file name is provided it is assumed that all files are to be listed. This command is usefull in that if the disk was previously clear, then all files received to that disk will be listed in the order of reception when listed via the DIR command. Sorted directory listing: DIRS (A:FILENAME.TYP) A sorted directory listing can be obtained by useing the DIRS command. If the optional drive name and or filename is added to the DIRS command, then the directory listing will be restricted to the given information. All wild cards are valid (question marks or astricks) if no file name is provided it is assumed that all files are to be listed. File status: STATUS (A:FILENAME.TYP) Information on the files of a particular disk can be obtained by using the STATUS command. A short form of this command is 'STAT'. If the optional drive name and or filename is added to the STATUS command, then the status information will be restricted to the given information. All wild cards are valid (question marks or astricks) if no file name is provided, it is assumed that all files are to be listed. This command can be used to find out how the size of a file and the length of time it will take to transmit it. The status information is provided as follows: D:FILENAME.TYP 1234K 12345R 12345M Where D: is the drive name the file is on, FILENAME.TYP is the name of the file, 1234K is the size of the file in kilobytes, 12345R is the number of records in the file, and 12345M is the length of time to transmit the file at the current baud rate in minutes. -> FIL <- File control commands are those commands which directly control files from the KAYM command mode. Typing out a file from the disk: TYPE A:FILENAME.TYP The contents of a file can be listed at the consol by using the TYPE command. If the VIEW flag is off, then tabs will be expanded. (assumes tabs at every 8 positions) If the VIEW flag is on any control characters will be printed inside para's. I.E. (00) for a null character. If the COM flag is on, then the listing will continue past any control Z's encountered. A control S will cause the listing to pause while a control C will abort the listing. No wild cards are allowed in TYPE. The drive name is optional, but a filename must be given. (Note: See memory typing for additional functionality of the TYPE command.) Dumping a file from the disk: DUMP A:FILENAME.TYP A hex dump of the contents of a file can be listed at the consol with the DUMP command. A control S causes the listing to pause, while a control C will abort it. No wild cards are allowed in the DUMP command. The drive name is optional, but the filename must be given. (NOte: see memory dumping for additional functionality of the DUMP command.) Erasing a file: ERASE A:FILENAME.TYP A file may be erased by using the erase command. A short form of the erase command is 'ERA'. The drive name is optional. All wild cards are valid. (question marks or astricks) Renaming a file RENAME A:FILENAME.TYP A file may be renamed by using the rename command. A short form of the rename command is 'REN'. The drive name is optional. No wild cards are allowed. After involking the rename function you will be asked for the new filename (NEW FILENAME : ) Enter the new name for the file at this time. No wild cards are allowed, nor is a new drive name allowed (It will be ignored if given). -> XFR <- Transfer control commands are those commands which initiate the sending or receiving of data files. Blind send of a file: SEND A:FILENAME.TYP Blind send of a file means that no error checking is performed on the file, it is simply sent out the modem directly from the disk. This is usefull when sending a file to a system that cannot handle the normal file transfer from KAYM. No wild cards are allowed in the name. The drive name is optional. Transmission may be paused with an XON (control S) from the consol or the line. A CAN (control X) will abort the send. If the VIEW flag is off, then a number will be printed at the consol after every 1024 bytes of transfer. If the VIEW flag is on, then the data that is being sent will also be printed at the consol. The COM flag must be on to send COM type files. Normal file send: S A:FILENAME.TYP The normal file send is performed via this function. The file is sent via the standard MODEM transfer format as layed out in the MODEM and MODEM7 programs of the CPM users group. The drive name is optional. If the batch mode is not on, then no wild cards are allowed in the name, and the name is not sent. (It is assumed that the file is prenamed at the receiver.) This is to maintain compatiblity with MODEM. This can be temporarily overcome by using the 'B' secondary option in the command. (SB A:FILENAME.TYP) This will cause a standard batch mode transfer to take place on this command only. This provides compatability with MODEM7. In the batch mode transfer, as many names as are specified in the command are sent. If wild cards are used in the name, then all files that match will be sent. A maximum number of names can be sent (currently set to 64) this is to limit transfer due to something going wrong. (most systems limit the number of files in the directory to 64) If the batch flag is set, then all transfers will be done in the batch mode (even if only a single name is given.) Batch mode transfer is disallowed when calling from CPM. (KAYM S A:FILENAME.TYP) When the send is completed, KAYM will normally return to the KAYM command mode except as follows: When calling from CPM, KAYM will return to CPM upon completion of the send. If the 'T' secondary option (Return to Terminal mode) is set, then control will be returned to the terminal mode instead. If the terminal return flag is set, then all transfers will return to the terminal mode (Unless called from CPM in which case the 'T' secondary option must be given.) If the 'Q' secondary option is used, then status information is not printed during the send. The quiet mode is automatically selected when operating as a remote CPM system to prevent transfer conflicts. If the Quiet flag is on, then all transfers will be performed in the quiet mode and the 'Q' secondary option is ignored. Three additional secondary options are provided for debuging purposes. They are 'R' which causes all received data to be printed at the consol. 'S' which causes all sent data to be printed at the consol. And 'V' which causes all transfered data to be printed at the consol. (Note: If the 'R','S',or 'V' secondary option is used, the consol must be at least four times faster then the line, or data may be lost. The secondary options may be given in any order behind the primary 'S' command (SBQTRSV KAYM.ASM is the same as (SVSBRTQ KAYM.ASM) There should be no intervening spaces or other seperations between the primary 'S' command and any secondary options if they are used. During the file send if batch mode is selected, and the quiet mode has not been set, then status information will be printed during the transfer. At the start of the transfer, the transfer heading will be printed. The heading consists of the mode designator followed by the drive name followed by the filename which is followed by the number of records that will be transfered, and that is followed by the length of time to transfer the file. While the file is being transfered, the number of the record that is being transfered will be printed. If CRC type error checking is in effect, then the record number will be followed with an astrik. (MODEM76 compatibility) If checksum type error checking is in effect, then no astrik will be printed. (MODEM and MODEM7 compatibility) Upon completion of all transfers requested by the 'S' command, the file transfer status table will be printed. This shows the files that were transfered, the number of records that were transfered, and the completion code which indicates if the file was properly transfered or not. The send can be aborted at any time by typing a control X at the consol. (ASCII CAN) Single file Receive: R A:FILENAME.TYP Batch file receive : R A: The normal file receive is performed via this function. The file is sent via the standard MODEM transfer format as layed out in the MODEM and MODEM7 programs of the CPM users group. The drive name is optional. If the batch mode is not on, then no wild cards are allowed in the name, and the name is not sent. (It is assumed that the file is prenamed.) This is to maintain compatiblity with MODEM. This can be temporarily overcome by using the 'B' secondary option in the command. (RB A:FILENAME.TYP) This will cause a standard batch mode transfer to take place on this command only. This provides compatability with MODEM7. In the batch mode transfer, multiple files can be received. No wild cards may be used in the name, on named receive. (non batch mode) A maximum number of names can be received (currently set to 64) this is to limit transfer due to something going wrong. (most systems limit the number of files in the directory to 64) If the batch flag is set, then all transfers will be done in the batch mode. Batch mode transfer is disallowed when calling from CPM. (KAYM R A:FILENAME.TYP) When the receive is completed, KAYM will normally return to the KAYM command mode except as follows: When calling from CPM, KAYM will return to CPM upon completion of the receive. If the 'T' secondary option (Return to Terminal mode) is set, then control will be returned to the terminal mode instead. If the terminal return flag is set, then all transfers will return to the terminal mode (Unless called from CPM in which case the 'T' secondary option must be given.) If the 'Q' secondary option is used, then status information is not printed during the receive. The quiet mode is automatically selected when operating as a remote CPM system to prevent transfer conflicts. If the Quiet flag is on, then all transfers will be performed in the quiet mode and the 'Q' secondary option is ignored. Three additional secondary options are provided for debuging purposes. They are 'R' which causes all received data to be printed at the consol. 'S' which causes all sent data to be printed at the consol. And 'V' which causes all transfered data to be printed at the consol. (Note: If the 'R','S',or 'V' secondary option is used, the consol must be at least four times faster then the line, or data may be lost. The secondary options may be given in any order behind the primary 'R' command (RBQTRSV KAYM.ASM is the same as (RVSBRTQ KAYM.ASM) There should be no intervening spaces or other seperations between the primary 'R' command and any secondary options if they are used. During the file receive if batch mode is selected, and the quiet mode has not been set, then status information will be printed during the transfer. At the start of the transfer, the transfer heading will be printed. The heading consists of the mode designator followed by the drive name followed by the filename which, if it has been sent (assuming we are communicating with another KAYM machine) then the name is followed by the number of records that will be transfered, followed by the length of time to transfer the file. While the file is being transfered, the number of the record that is being transfered will be printed. If CRC type error checking is in effect, then the record number will be followed with an astrik. (MODEM76 compatibility) If checksum type error checking is in effect, then no astrik will be printed. (MODEM and MODEM7 compatibility) The first record number will always indicate a CRC attempt, as it asks the other end if it can handle CRC's. Upon completion of all transfers requested by the 'R' command, the file transfer status table will be printed. This shows the files that were transfered, the number of records that were transfered, and the completion code which indicates if the file was properly transfered or not. The receive can be aborted at any time by typing a control X at the consol. (ASCII CAN) Chat with other operator: CHAT This allows you to talk with the other operator.(assuming you are on line and can communicate via your computer) Only simple communications are allowed here, no files can be transferred from the CHAT mode. If the other computer (or terminal) does not have KAYM, then it should be set to terminal mode or otherwise emulate a terminal. CHAT will provide the proper echoplexing. Additionally chat will provide an automatic line feed after any carrage returns. This function is not available on remote CPM configured machines. Typing a control E will return you to the normal KAYM command mode. This will also occur if a control E is received from the other operator. Alternatly, a control X (CAN) or escape (ESC) may be used instead to exit the chat mode. Terminal mode communications: T (A:FILENAME.TYP) This mode allows your computer to act as a standard terminal with the additional capability of saving the received data to disk. Typing a 'T' while in KAYM command mode will cause the program to go into the terminal emulation mode. If the TCMD flag is off, typing a control E will return you to command mode. If the TCMD flag is on, then the control E must be preceeded by the terminal command toggle. ESC (ASCII escape character) is provided in the current program release. The terminal command toggle character (ESC) can be sent by typing it twice, which will send one character. If the 'T' command is followed by a file name, (the drive name is optional) then a file by that name will be opened for receiving data to disk while in the terminal mode. Wild cards are not allowed in the file name.(referred to as the 'T' file) COM type files are normally not allowed (or any binary type files) this can be bypassed by turning on the COM flag which allows binary data to be saved. While in terminal mode, typing a control T (or ESC control T if TCMD toggle is on) will cause the system status information to be printed at the consol. The status information is not sent, nor is it saved in memory or on disk. Typing a control E (or ESC control E if TCMD toggle is on) will return you to the normal KAYM command mode. While in terminal mode, typing a control Y (or ESC contol Y if TCMD toggle is on) will cause all data received to be saved. Typing the control Y (or ESC control Y if TCMD is on) again will stop the save. This function can also be controlled while in the command mode thru the SAVE command. The SAVE mode is indicated by a colon ':' being printed at the consol after each carrage return. The colon is only printed at the consol, and is not saved nor is it transmitted. All data that is received while the save is on will be temporarily saved in the memory buffer. The memory buffer consists of all of the free memory available behind the KAYM program upto the CPM BDOS routines.(The CCP is overwritten) If the buffer is full, an XOFF (control S) is sent. The program then waits for the received data to stop if it does not stop after 20 characters, then another XOFF is sent. If the received data has not stopped after an additional 20 characters, then one more XOFF is sent, and the save to disk process begins anyway. If for some reason the disk save process does not get initiated, then 'MEMORY FULL' will be printed at the consol after an additional 152 characters have been received. If after all this, data is still being received to the buffer, then after an additional 64 characters the buffer will be completly full, and 'MEMORY OVERFLOW' will be printed at the consol. No more data will be allowed to be received to memory, and a disk save will be attempted to clear the memory. No saving of the received data will be allowed until the memory has been cleared either thru a CLEAR command, or by saving the data to disk. When the receive data has stopped, or a disk save function has been initiated anyway, all data that has been saved in the memory buffer will be saved to the disk. The data is saved to disk in 128 character blocks, so any data left that is less then 128 characters in length will be retained in the memory buffer. If the disk becomes full, the 'T' file will be closed and another disk will be requested from the operator.(The save may optionally be stopped at this point instead.) A 'T' file may be closed (save all data in memory to disk) from the command mode by typing 'CLOSE'. If the close is sucssesfull, then the 'T' file name will be removed as being active and the save function will be turned off. A new 'T' file will have to be opened to begin saving again after the file has been closed. If the View flag is on all unprintable control characters will be printed at the consol inside para's. I.E. (00)=NULL The 'T' function is not available on remote CPM configured machines. The 'T' function is also disabled when the REMOTE control function is enabled. (CHAT is still available however) See the terminal control commands for additional information on 'T' files. -> TGL <- System control toggles are those commands which change the operation of the program. These commands are available while in the KAYM command mode. Change the batch mode flag: BATCH Typing 'BATCH' will toggle the batch mode flag to the opposite condition. If it was on previously, it will be turned off. When batch mode is on, file transfers via the 'S' or 'R' commands will be named file trnasfers. That is the file name will be sent with the file. If the batch mode is off, then the file name will not be sent with the file, and it must be provided by the operator at each computer. This has the side effect of only allowing single file transfers per command. This function can be temporarily performed (On the given command only) by using the 'B' secondary option when calling the 'S' or 'R' function. When the batch mode is on it will be indicated by a 'M' appearing in the status line. If the batch mode is off, then the 'M' will not appear in the status line. Change the bell control flag: BELL Typing 'BELL' will toggle the bell control flag to the opposite condition. If it was on previously, it will be turned off. When the bell mode flag is on, the consol bell will be rung aproximatly every four seconds when KAYM is waiting for another command. If the bell flag is off, then the consol bell will not be rung. When the bell flag is on, it will be indicated by a 'B' appearing in the status line. If the bell flag is not on, then the 'B' will not appear. Change the view control flag: VIEW Typing 'VIEW' will toggle the view control flag to the opposite condition. If it was on previously, it will be turned off. When the view mode flag is on, data sent during a blind send (SEND command) will be printed at the consol also. If the view flag is off, then a number will be printed instead after each 1024 characters transmitted. Additionally, non-printable control characters received from the line will be printed inside para's. I.E. (00)=NULL This will also occur in any other mode of operation where received data is printed at the consol. When the view flag is on, it will be indicated by a 'V' appearing in the status line. If the view flag is not on, then the 'V' will not appear. Change the quiet control flag: QUIET Typing 'QUIET' will toggle the QUIET control flag to the opposite condition. If it was on previously, it will be turned off. When the QUIET mode flag is on, no status information will be printed during file transfers using the 'S' or 'R' command. If it is off, then the status information will be printed. This function can be temporarily performed (On the given command only) by using the 'Q' secondary option when calling the 'S' or 'R' function. When the quiet flag is on, it will be indicated by a 'Q' appearing in the status line. If the quiet flag is not on, then the 'Q' will not appear. The quiet toggle is not available under remote CPM configured programs since quiet is always automaticlly set (Initializing the quiet control on will cause the 'Q' to always show in the status line, while setting it off will cause the 'Q' to not Change the save control flag: SAVE Typing 'SAVE' will toggle the save control flag to the opposite condition. If it was on previously, it will be turned off. When the save mode flag is on, any data received while in the terminal mode will be saved to disk. If it is off, then the received information will not be saved. The save can also be controlled while in the terminal mode by typing control 'Y'. (or ESC control Y if the TCMD toggle is on) When the save flag is on, it will be indicated by a 'S' appearing in the status line. If the save flag is not on, then it will not appear. The save command is not available under remote CPM configured systems since no terminal commands can be allowed due to data conflicts. The command is not available when the remote control is enabled for the same reason. When the command is made not available, the status information will reflect the last known condition. Change the TERMINAL control flag: TERMINAL Typing 'TERMINAL' will toggle the terminal control flag to the opposite condition. If it was on previously, it will be turned off. A short form of the TERMINAL command, is 'TERM'. When the terminal mode flag is on, KAYM will go directly to the terminal mode upon completing a 'S' or 'R' function. This function can be temporarily performed (On the given command only) by using the 'T' secondary option when calling the 'S' or 'R' function. When the terminal control flag is on, it will be indicated by a 'T' appearing in the status line. If it is off, then the 'T' will not appear. The terminal control command is not available under remote CPM configured systems due to data conflicts which prevent this mode being used. The terminal control command is also not available when the remote control function is enabled due to data conflicts in this mode also. When the command is made not available the status will reflect the last known condtion. Change the TCMD control flag: TCMD Typing 'TCMD' will toggle the TCMD control flag to the opposite condition. If it was on previously, it will be turned off. When the TCMD mode flag is on, system control characters in the terminal mode must be preceeded by the TCMD toggle character. (currently provided with KAYM as the ESC character) Typing the ESC (escape) character twice while the TCMD toggle is on will cause a single ESC character to be sent. Any character following the TCMD toggle character will be transmitted if it is not a system command character. The TCMD toggle character itself will not be sent however. This command is not available on remote CPM configured programs as the terminal mode is not available and therefor it would be superflurious to have this command. This also is not available when the remote control function is enabled for the same reason. When the function is made not available, the status information will reflect the last known condition. If the TCMD toggle is on, it will be indicated by a 'G' appearing in the status line. If it is off the 'G' will not appear. Change the COM control flag: COM Typing 'COM' will toggle the COM control flag to the opposite condition. If it was on previously, it will be turned off. When the COM mode flag is on, binary transfers are allowed in the blind send mode, and the terminal mode. Due to the increased possiblity of errors, and reduced file handling control this function is normally not desirable. When the COM control flag is on, it will be indicated by a 'C' appearing in the status line. If it is off the 'C' will not appear. Change the remote control flag: REMOTE Typing 'REMOTE' will toggle the remote control flag to the opposite condition. If it was on previously, it will be turned off. When the remote control flag is on, KAYM will accept commands from either the local consol or from the remote communicating device via the modem port. When the remote control flag is off, the commands are only accepted from the local consol. The remote control flag can also be turned off at the local consol only while in the KAYM command mode by typing ESC (ASCII escape character) This has a side effect of clearing the command buffer of any entered commands. (Simular to typing a control U or control X) This command is not available on remote CPM configured programs as it would be superflurious to have this command. When configuring KAYM, the REMOTE toggle should be set to off if configuring for remote CPM, since the status will reflect the default condition of the toggle. If the REMOTE toggle is on, it will be indicated by a 'R' appearing in the status line. If it is off the 'R' will not appear. -> TRM <- The terminal control commands are those commands which affect operation of the terminal emulation function of KAYM. Since the terminal function is not available when KAYM is configured for remote CPM or operating under remote control, these commands are not available when operating under those conditions. Terminal mode communications: T (A:FILENAME.TYP) This mode was previously defined under the transfer control conmands. Make a new 'T' receive file: MAKE A:FILENAME.TYP To save the received data to disk, a file must be created on the disk to save the data to. The file may be created in several different ways, one way is to use the make command which creates the file and returns you to the normal KAYM command mode. (MAKE A:FILENAME.TYP) The drive name is optional in this command, the default drive will be used if it is not specified. Another way would be to involk the name when going into the terminal mode. (T A:FILENAME.TYP) Again in this case the drive name is optional, and the default drive will be used if the drive is not specified. If a 'T' file already exists, then any file name request will be ignored. An extension of the default drive change command can be used to both change the default drive and create a 'T' file at the same time. (A:FILENAME.TYP In this case the drive name is not optional since it is used to determin that a file name is being specified.) Finally, an old 'T' file can be reopened for reception by using the open command. (OPEN A:FILENAME.TYP) If a 'T' file is already in existance, then an error indication will be printed at the consol. To create the new 'T' file the old one will have to be closed, and then the new one can be created. Wild cards are not allowed in the 'T' file name, and the COM flag must be on to create a binary COM type 'T' file. When a 'T' type file is in existance, or if any data is still in the memory receive buffer, then the 'T' file status will be added to the system information when it is printed. The 'T' file status line will be printed as follows: T FILE= R/W A:FILENAME.TYP 0 RECS 0K SAVED 70K FREE Where R/W is the current condition of the 'T' file disk (it should be always be R/W since we are trying to write to the file, but if the disk was changed, or a write error occured CPM will set thekdisk to R/O indicating that the file cannot be written to. A:FILENAME.TYP is the name of the 'T' we are currently using. 0 RECS is the current number of records that have been save to disk. 0K SAVED is the amount of data saved to the 'T' file on disk in kilobytes. 70K FREE is the amount of free space left on the disk in kilobytes. Additionally, the system status line will contain the memory buffer status in the form of : -F:28678--U:0- Where F:28678 is the amount of free buffer space in characters, and U:0 is the amount of buffer space that is currently used. Reopen an old 'T' file for receiving: OPEN A: FILENAME.TYP This will reopen an old 'T' file for receiving data to. The drive name is optional, and the default drive will be selected if it is not given. An error will be printed at the consol if a 'T' file already exists, the old 'T' file will have to be closed befor the requested 'T' file can be opened. Binary type COM files cannot be reopened, and an error will be printed at the consol if this is attempted. This is done because we have no way to really know where the end of a binary file truly is as it is saved in 128 byte blocks, and no end of file indicator is saved with the file. (The last 128 byte block saved is the end of the binary file even if only one byte is used of the whole 128 bytes. Return to CPM after closing any existing 'T' file: EXIT This will cause KAYM to return to CPM after attempting to close the 'T' file if it is in use. If the 'T' file is not in use then the return to CPM will take place without attempting the close. If the 'T' file for some reason cannot be closed, then an error will be printed at the consol, and KAYM will return to CPM anyway. This is as opposed to the 'CPM' command which requires that the 'T' file be properly saved befor the return to CPM is allowed. This command is not available under remote CPM configured programs since the 'T' mode is not available. It is also not available when the remote control function is enabled as once control is returned to CPM the remote control feature is lost. Close the 'T' file: CLOSE This will close any existing 'T' file. The close will save any data still in the memory buffer, and clear the 'T' file status information. Delete current 'T' file data from disk: DELETE This will clear any 'T' file data currently saved on the disk. If there is no data currently saved in the memory buffer, then the 'T' file name will additionally be removed from the disk directory. If there is still data in the buffer, then the data will be cleared from the disk, but the file will not be closed, it will instead be reset to zero. This same action will occur if the 'T' file is erased with the ERASE command. To completly remove a 'T' file from the system, type 'CLEAR' and then 'DELETE'. -> MEM <- These commands control the various 'T' file memory buffer functions. Type out the data in the memory buffer: TYPE This command will print any data in the 'T' file memory buffer at the consol. Any tabs encountered will be expanded based on the CPM standard tabing at every eight positions. If the view flag is on, then any non-printable control characters will be printed inside para's. I.E. (00) = NULL character. The print out may be paused with a XOFF (control S) and any characer will restart it. The print out may be aborted with a CAN (control X). Do a hex dump of the data in the memory buffer: DUMP This command will do a hex dump of any data in the memory buffer. The data will be printed at the consol. The print out may be paused with an XOFF (control S) and any character will restart it. The print out may be aborted with a CAN (control X). Clear the memory buffer: CLEAR This command will clear any data currently in the 'T' file memory buffer. The recover commands can be used to restore the data if you found that you didn't really want it cleared. Any data saved to disk will not be cleared, only the data in the memory buffer is affected. Recover the data in the memory buffer: RECOVER RECOVER 123 RECOVER +12 RECOVER ALL This command allows you to recover any data that may have been lost in the 'T' file memory buffer. Usually this is the result of exiting to CPM for some reason and returning back to KAYM, or clearing the buffer and then deciding you didn't really want it cleared. The short form of the recover command is 'RECOV'. Typing 'RECOVER' will restore the buffer to the last known active position. Typing 'RECOVER 123' will recover the first 123 characters in the memory buffer. Typing 'RECOVER +12' will recover an additional 12 characters in the buffer. Typing 'RECOVER ALL' will recover the entire buffer area. Care should be used in recovering anything specifically (using the last three recover commands) as invalid data may be recovered which may cause difficulties if you later try to edit it since some editors require that the data they work with be within specific formats. --------> This is the end of the commands listed in the help files, there are some additional commands which are not listed that we will provide here. -- EDIT COMMANDS -- These are some additional editting commands that are available while entering a command in the KAYM command mode. Carrage Return - This indicates the end of the command, and (Return) causes it to be performed. (Enter) Delete - Deletes last character in the command buffer and (Rubout) reprints it to indicate that it has been deleted.  (For printing consols) Backspace - Backs up and erases the last character in the (Control H) command buffer and erases it from the screen to indicate that it has been erased. (For video consols) Control U - Prints a '#' and cancels the command. Control X - Same function as control U. Control R - Retypes the current command as is is in the command buffer. Control E - This performs a logical carrage return without performing the command yet so that more command data can be entered on another line. Control P - This toggles the print control flag such that if the print flag is on (indicated by a 'P' appearing in the status line) then anything printed at the consol will also be sent to the printer. Note: Be careful as so systems are setup with the modem port using the printer port if this is true, the data conflicts may occur due to the consol data being sent out the modem at improper times. Escape - This causes the remote control to be turned of if (ESC) it was on. It causes the command buffer to be cleared in either case. (As per the Control U command) All other control characters will be ignored if they are typed in the command mode. The character will not be put into the command buffer, nor will it be echoed to the consol. -- TERMINAL MODE COMMANDS -- If the TCMD toggle is on (indicated by a 'G' appearing in the status line) then all of these commands must be preceeded with the terminal command toggle character which is currently provided as the ASCII escape character (ESC). Control E - Return to the KAYM command mode. Control T - Print the 'T' file status information. Control Y - Toggle the save flag (when the save flag is on, it will be indicated by an 'S' appearing in the status line as well as a colon ':' being printed after each carrage return that is received. -- MISC COMMANDS -- Control X - Typing this in any mode (Except terminal mode and (CAN) chat mode) will return you to the KAYM command mode. Control S - Typing this during commands which print data at (XOFF) the consol will cause the printing to pause. Typing any character will cause it to continue. Control E - Typing this while in the chat mode will return you to the KAYM command mode. *************************************************************************** inal command toggle character which is currently provided as the ASCII escape character (ESC). Control E - Return to the KAYM command mode. Control T - Print the 'T' file status information. Control Y - Toggle the save flag (when the save flag is on, it will be indicated by an 'S' appearing in the status line as well as a colon ':' being printed after each carrage return that is received. -- MISC COMMANDS -- Control X - Typing this in any mode (Except terminal mode and (CAq}2d6*aa/T_G1:ʰaVersion for: PMMI S-100 MODEM Starting at Port E0H aVersion for: Kaypro II Computer >>D>>>>:>>> > %>>A=Amrad 1-703-734-1387B=Ben Bronson 1-312-955-4493C=CBBS Pasadena 1-213-799-1632D=PMMI 1-703-379-0303E=Tech. CBBS 1-313-846-6127F=Ron Fowler 1-313-729-1905RG=Gasnet NASA 1-301-344-9156H=Dave Hardy 1-313-846-6127I=Wayne Hammerly 1-301-953-3753J=RBBS Pasadena 1-213-356-1034K=David Kozinn 1-216-334-4604L=Program Store 1-202-337-4694M=Kelly Smith 1-805-527-9321N=SuperBrain Sys 1-617-862-0781O=R.L.Plouffe 1-703-524-2549P=K.Petersen 1-313-759-6569RQ=Bruce Ratoff 1-201-272-1874R=Mark Pulver 1-312-789-0499S= T= U= V= W=  X= Y= Z= !9"_71_7/ MODEM 7.95 - 12/04/82 pb>2.6/2͔:c6>2d6»>2d6:/6G:xC.D) ^HʀK++2f62g6:/6E>2f6 L >2g6 T Sʄ R ͫ)^:] 4>2.6/2UK a7a7!8"l6>2.6:c626>2d6i>2d6TV_ -G‰: ʉ>-:e6>2e6ʨ:x-:x-÷::x-:ʆ: i::ʭ:::i6/2i6:::V::$):" :#+V:9:x-:.6V>;>2DV/ ** Memory buffer :t/open ** :/closed ** :Qÿ%.1͏¤> -҆Ù*I͏~#(ññVÆT_G:7?7>2e6V%47:i6/Printer is on /Printer is off (G:g6?:f6FxG͎> V: VÙi+iGG͎:f6vx(> i: i:f6™> d:i6ʟX:xw#"l6 µ>:GͿ:::=>(͠ 2͠ 2 !8 :w#G :w#G>(:b6@:, ͭ \ , G:X w#"l6 , >:G, , :b6@*l6:u :x :=i/ Memory save buffer full i:ʭ  ʺ x­ +6#}l&)>o8 a7 +| a7!a7X !\a7 q!c X !lX n :p6 e Ͱ ͺ » / ++File does not exist++ /Type "R" to return to modem Type "A" to re-enter name: _iG:A0 RS e     1 / ++File transfer completed++ S / ++File transfer unsuccessful++ S / ++ Transfer cancelled ++ 6# 6 #] 6#f / Enter file name to be transferred - C/R TO QUIT: n601:n6!c j2c c ! ~ T _# ͏ (G:G :O: yO  :9 J:f6G:g69 :G {9 +T T +T >2h62:;6² >26:j6ě Һ >B2;6>ͧ:] ʟP\ @>2X69:h6XSe >ͧe :2h62:;6 >26͏( >B2;6:] ʟ. qKͼ:36c :;6c /File open, ready to receive :h6>n >Cͧ:36ʭ :h6• /CRC in effect í /Checksum in effect ڿ @í >:36 /Awaiting name NAK P>ͧ!65 *6\ q"6>ͧ7 y26!]~ͧ:36~1)K[1# >ͧ:36:QKʈ>uͧ:36{/Checksum error P>ͧ>ͧ!\Z :36ʴ/Awaiting file name ͉ڴ7y26!]K:36/Time out receiving filename ]ʇHw:36)>ͧ#}]:6<26 <~ G~ >.G5:36:yͧKʇ!\Z :36~/Checksum error ͉~>ͧK7>2j626!w"6M!\7j2:f¸*6\ q"6!64ø!65¬!w"6:6A>@26!66!o6N!p6 6 !o6F#I~ #I~ "6+#I~ ):6<26#I~ ;)6 *67~ b#U#~ b"6!7p \ȇ!o ~¥#~+] q!e~w#~w\!\l q!u6B#6A#6Kl!l6\:\<2h:P>2!\ :\2!\ \Ä!\ \!\ \<72=Ɓo& ] 2h2|~# x>2X62Y6:36/ Awaiting # *V6#r/ (͖/H)} KڿWd7G:36Tx:ͣ/H recv'd, not SOH KT:h6>p:k6>p>Cͧ:X6<2X6 :36ʌͺ>C ++ Unable to receive block - Aborting ++ $:36/ ++ Timeout ++ :X6&or:T:X6:k6:h6/2h62:36/++ Switching to Checksum mode ++ ++ Sender may not be CRC capable ++ :Y6b7:36T/ :Y6 ʔ/++ Framing error ++ :Y6ʷ/++ Overrun error ++ :Y6/++ Parity error ++ T:X6&or:ɯ2k6KڿWdWKڿWd/::36T/ ++ Bad sector # in Hdr Tz2U6>2a6p!KڿWdw,K:h6ʍQ2a6KڿWd:U6G:V6<KڿWdͲ|:36T/ ++ CRC error ++:36T/ ++ Checksum error ++ >ͧ:36&/ Sending # *V6r/ (͖/H)>ͧ:V6ͧ:V6/ͧ>2a6p!~ͧ,F2a6yͧ͡zͧ{ͧ EG:36ʖx:ͣ/H Recv'd, not ACK :X6<2X6= :36ʭͺ7C Can't send sector -- Aborting $:36ʖ/ Timeout on ACK Ö:36T_1_7K>ͧK> ͧ/ Routine cancelled >B2;6*V6#"V6}:;6ʖ\2Z6y2]6!7"[6\*[6!o"[6:]6<2]6:]6O7\&! 2]6!7"[6ͧC Error writing file $++:VxG:q\\V7:ʀ%82Y6+yO:46ʟ:66¤:a6ʤ:56ʽ:66:a6yO͏(:36/Awaiting initial NAK KC :36-/CRC request received 2h6:::6F:d6R:96:d6 C::d6C*"X"c"M:K:&2D<2)2,<2;2><2A]2/6 !06 Oµ2c6ÿA¿>2c66Û#¥ͫ)^:;6e:36> !>w# !]> ~ #x~ >./ / Transferred :\26!\X :62\!H6U6 q:6‰ / All transfers completed :16/ Press RETURN to disconnect  Œ/ Disconnected /[U>2k62j62.6/2:76^:U!l\q2|2h - - - ->(-ͣ>)-_> G> GOa{_ | |r{0-|ͣ}ͣͬ ڵ0G:;6<>2X6/ Multiple errors encountered. Type Q to quit, R to retry: _:iRQº/ctrl-@G~<-#0 >>G:;6>Q236*_7:~#qn6!\j2͔:]EHLG:xʞCTSRµ:;6/ ++ Bad Option ++ :m / Re-enter PRIMARY option and file name only: n601z:m %>2>2.6>2.6:/ Enter New Baudrate: !e6_ ]:0O:OwOG#O!"O*yO}o|gҖ|g}!o‚"yy*T]*|>:.6^/ ** There may be text in the memory buffer ** ** It will be lost unless NOL or WRT commands are used ** :o:G}oM{K H>GG!H6U6 q!<606 q>2/2j6(!0/ Single Letter Commands H - Display this information ? - Display current settings T - Terminal mode E - Terminal mode with echo L - Terminal mode with local echo For capturing text use T(or E or L) FILENAME.TYP and Start & Stop toggles described on subsequent screen. R - Receive CP/M file using Christensen Protocol S - Send CP/M file using Christensen Protocol Command is: R(or S) FILENAME.TYP R and S can use the following subcommands: B - Bulk transfer using wildcards (e.g. *.*) Q - Quiet mode (no messages to console) T - Return to terminal mode after transfer V - View bytes transferred on console 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, LOG B (user # unchanged) TIM - Set serial port baud rate : F#/TCC - Toggle Checksum/CRC mode on receive : {#/TBR - Toggle backspace to rub conversion :#/TLC - Toggle 1) local command immediate 2) local command after : : $/TLF - Toggle send linefeed after carriage return :^$/TXO - Toggle XOFF testing in terminal mode file output è$/CAL - Dial number DSC - Disconnect BYE - Disconnect and reboot / The following are terminal text buffer commands: DEL - Delete memory buffer and file NOL - Return to terminal mode - no loss of data in buffer WRT - Write memory buffer to disk file // Local Commands while in Terminal Mode : - Exit to command mode :&:$ - Disconnect :" - Send break :# - Change baud rate :7&: - Transmit logon :Y&: - Toggle printer > G: - 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 open. 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 / Default Drive: AG  M( >1G0G::.6z(0/ bytes of buffer free /COMMAND (H for Help): n601:p61CPM[1LOG*1DIR*1ERA!+1?=01TIM9,1TCC+-1TBRn-1TLCҺ-1TLF#.1TXOt.:)1NUMa/:.)1SET.1NOLN):.6E/:6226D*l6U1WRT/1DEL.:ʏ)1DSC)1BYE)1CALڏ)> 2r6Ý):p6! 1/ڥ)zûͫ)(/++ Invalid Command ++ // << Disconnected >> Æ/ Goodbye... C@* 26b3:6_(:.6*/ Insert disk for drive :t6 O*AAҥ)_G/ Hit return when ready_ ]*: :u6 ʽ*0«*:v6 G>ʫ*x&G ʽ*X:(/++ Terminal mode file open ++ ++ Use WRT or DEL before LOG command ++ (n6!\j2:] ʥ)\<_+/++ File not found ++ (\/File erased (/Enter speed from 0 (slowest) to 9 (fastest): Tʬ+_G/,0 ҥ)G> 2+(/Terminal mode file output delay is 0.:G G ,>0Gxo&r/ seconds per character / /Use 0-5 to give baud rate where:, 0=300, 1=1200, 2=2400, 3=4800, 4=96000, and 5=19.2k Baud. Enter value: Tʩ,_G/,0ҥ)2,("- -/Rate for the S mode time-to-send message is set to -/Modem speed is 5:G:: ʥ):/2?-(V-/CRC mode set /Checksum mode set : ʥ): /2 ͂-(ʝ-/Backspace is rub /Backspace is backspace :ʥ):/2-(/Use ::- before local command  to send local command to remote : ʥ): /2 7.(/Linefeed : S./NOT /sent after carriage return :ʥ):/2͈.(:/XOFF testing :­./NOT /used in terminal mode file output :ʥ)N(:.6E/:b7 E/a7 >2.6/2!a7X !8"l6(:.6E/:b7 E/*l6Ϳ >2.6/2!a7X !8"l6(/++ No File Open ++ (!0/ Library of Phone Numbers of Remote Systems !07/##q/##q/ /ë/> > > >$ 7::(F#//7/HIT any KEY to CONTINUET0_!0:,0Y> G > G50!0/ Current Settings :?-:x0,: ͂-7.-/Terminal mode file buffer is :.6ʵ0/in/active Unused portion of buffer is 0/ bytes ͈.+:(ͿG*l67?>oxgrSRTEHL~,1$1#1>#&17#2կ2 1{1{1ʱ111 >1G#4+~#1pxU2#>1#G~wښ1+xF6 ʡ1ʟ1>14>1>U2> U2>U2>1>#U2> U2> U241G>#U2> U2> U2x>1U21>1>U25>1> U2> U2>1> U2> U2F##> w#2C2!2;2a72{72_*M2*a2* O2#^#6 3!3 2 ʢ2 !3 2 ²2â2 2 3!3 2 !3#53 536# > 3>3 > 3>3w#3:3_@w# . !3w#!3~*E3#73H3Z3~*V3#J3Z36?#Z3n6!\j2!4X :l24:m ̺442525444~3~3#3qq/ . >2544:5ʡ3:5<25:ij4>25á3/NO FILE:4'4=_##~2 5#~25##^#V"5*5#V4W+}g4zQ4M4i`: 5w4)=r4:4…4<@24/ DRIVE HAS r/K BYTES FREE /| >? !4w#4!m4 q_!/FILE OPEN - *_6r/ (͖/ HEX) RECORDS SEND TIME: :_!5~*_65&r/ MINS, !5:_~55555&r/ SECS AT 5/USE CTL-X TO CANCEL F" O)|5g}o5G\l&5}o|g>o!6:_ /0 BAUD 30$120$240$480$960$19,20$ADOQRSVTL01ADOQRSVTL01B778VI A,0CH OUT 0H RET NX4: CPI 4H ;9600 ? JNZ NX5 MVI A,0EH OUT 0H RET NX5: MVI A,0FH ;DEFAULT TO 19,200 OUT 0>3w#3:3_@w# . !3w#!3~*E3#73H3Z3~*V3#J3Z36?#Z3n6!\j2!4X :l24:m ̺442525444~3~3#3qq/ . >2544:5ʡ3:5<25:ij4>25á3/NO FILE:4'4=_##~2 5#~25##^#V"5*5#V4W+}g4zQ4M4i`: 5w4)=r4:4…4<@24/ DRIVE HAS r/K BYTES FREE /| >? !4w#4!m4 q_!:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1:\ :] :e :\ <2:=_Pѷ eP:\=_ P I: >:! 3: ,:< &!] :" :  $   $ Disk label written$ Unable to label disk$ Invalid disk label$$ DIR>3w#3:3_@w# . !3w#!3~*E3#73H3Z3~*V3#J3Z36?#Z3n6!\j2!4X :l24:m ̺442525444~3~3#3qq/ . >2544:5ʡ3:5<25:ij4>25á3/NO FILE:4'4=_##~2 5#~25##^#V"5*5#V4W+}g4zQ4M4i`: 5w4)=r4:4…4<@24/ DRIVE HAS r/K BYTES FREE /| >? !4w#4!m4 q_! 1985 LANGLAUFER SKI CLUB ROSTER (AS OF 2/4/86) 106 MARCIE ALCANTRA 213-436-6957 1837 EAST 3RD STREET #1 213-498-7766 WORK LONG BEACH, CA 90802 DECEMBER 24 37 BO AMES 714-447-0295 81 No EUCLI ST. FULLERTON, CA 9263 MA 2 3 JUD AN AMES (SAME JUN 2 6 ALA ANDERSO 818-963-7055 122 LOP LANE GLENDORA C 9174 SEP 15 6 DIAN ANDERSO (SAME NO 26 110 ART ANDERSON 714-827-9510 4312 JADE AVENUE 714-995-0477 WORK CYPRESS, CA 90630 SEPTEMBER 4 111 VERNA ANDERSON (SAME) JUNE 17 7 RICHAR ANDERSO 818-961-4560 1490 ANSFOR ST 714-521-139 WORK HACIEND HTS C 9174 JUL 1 7 SA (ANWAR ANSAR 213-920-1598 1011 WASHINGTO ST 213-564-816 WORK BELLFLOWER C 9070 SEP 7 7 JI ARMSHA 21-597-8063 1086 CHERR #201 213-430353 WORK LO ALAMITOS C 9072 DE 2 3 LIL ARMSHA 714-821-6328 754 KATELL AVE #7 STANTON C OC 23 8 ROBER (DEAN BEACH 714-529-0951 20 SIEVER #1 714-777-378 WORK BREA C JA 18 8 ROBI BEAC (SAME SEP 10 7 RA BOLDU  213-926-3604 1720 PARKVALL AVE 213-485-366 WORK CERRITOS C 9070 DE 14 6 JOLYN BOSWEL 71-739-1661 668 KNOT AVE 714-525-352 WORK BUEN PARK C 9062 JUL 8 3 SHELDO BOXE 213-431-5665 124 MARLI AVE 213-992-553 WORK SEA BEACH C 9074 JA 27 GISEL BOXE (SAME AUGUS 20 SCOT BOXLE 714-962-5134 1858 COTTONWOO ST 213-724-222 WORK FOUNTAI VALLEY C 9270 JUN 21 1 LIND BOXLEY (SAME AUGUS 28 2 RA BRACKLESBER 714-525-4885 133 WES OAK FULLERTON C 9263 FEBRUAR 24 2 LARR BROOK 213-863-5664  1230 STUDEBAKE ROA #17 800-523-5726 NORWALK C 9065 OCTOBE 30 100 DAVID BULL, III 619-377-4631 WORK 7255 CACTUS AVE. 619-377-4098 HOME INYOKERN, CA 93527 OCTOBER 3 96 GEORGE CAMPBELL 714-527-5321 9091 HOLDER AVE. 213-594-1992 WORK CYPRESS, CA 90630 JANUARY 18 5 DUAN CARMON 714-534-1419 1162 ROBER LANE GARDE GROVE C 9264 NOVEMBE 13 4 LYN CARON-LAN 213-745-1934 P.O BO 502 213-727-407 WORK WHITTIER C 9060 NOVEMBE 6 1 MIK CHARA 714-995-9343 583 STRATMOR AVE 213-922-285 WORK CYPRESS C 9063 AUGUS 30  AN CHARAT (SAME SEPTEMBE 20 95 DODI CORONA 213-402-3661 21600 BLOOMFIELD #16 HAWAIIAN GARDENS, CA 90716 NOV. 7TH 6 DIC CROUS 714-963-3454 869 ANCHORAG DRIV HUNTINGTO BEACH C 9264 OCTOBE 4 6 CIND CROUS (SAME JUN 3 8 STEPHE CURR 213-598-1407 1810 SO PIONEE BLVD 21-92-169 ARTESIA C 9070 APRI 22 108 TAD DILLARD AUGUST 16 5 MART DRUR 213-869-1709 922 BROOKSHIR #1 213-803-431 WORK DOWNEY C 9024 DECEMBE 20 102 DAVID ESKEW 714-970-8085 21345 VIA DEL PARQUE 714-636-6621  YORBA LINDA, CA 92686 SEPTEMBER 30 103 MICALA ESKEW FEBRUARY 23 94 BARBARA FERNELL 714-855-1284 27672 DURAZNO 213-268-5252 WORK MISSION VIEJO, CA 92692 FEBRUARY 1 97 ROBERT FLANAGAN 714-898-8131 15832 QUARTZ WESTMINSTER, CA 92683 OCTOBER 8 3 ELL GALLE 818-365-7336 41 MA NEI STREE 213-581-882 WORK SA FERNANDO C 9134 MARC 17 7 MICHAEL GEORGE BO 7 818-768-221 WORK TUJUNGA C 9104 OCTOBE 5 4 ROBER GRIFFIT 714-539-1735 914 ROSANN AVE GARDE GROVE C 9264 OCTOBE 11 5 JOH GRUC 714-737-0508 5940 DANIGER AVE. 714-671-099 WORK RIVERSIDE,CA 92505 SEPTEMBE 13 5 KATH HALSTEAD 213-559-6504 911 CATTARAUGU AVE LO ANGELES C 9003 FEBRUAR 17 4 MARTI HARBARGE 213-945-6639 7818 SO. BROADWAY AVE. WHITTIER C 9060 JUL 21 RICHAR HARTMA 213-862-5101 730 QUIL DR #19 213-564-595 WORK DOWNEY C 9024 MA 18 2 DO HOLTE 213-928-6229 884 LOWMA DOWNEY C 9024 JUN 28 2 DOREE HINS 714-522-7695 608 FREMON WA BUEN PARK C 9062 SEPTEMBE 27 DEBBI HOR 714-557-2498 282 SO FAIRVIE # 714-542-679 WORK SANT ANA C 9270 JUL 14 8 GRE HUNDTOF US VANDERGRIF FFG-4 213-883-201 WORK FP SA FRANCISCO C 9668 JANUAR 2 7 RICHAR JENSE 714-970-7341 519 WAGO WHEE DRIV YORB LINDA C 9268 DECEMBE 6 3 RIC JONE 213-941-124 1355 TELEGRAP ROA WHITTIER C 9060 AUGUS 25 1 SU JOTBLA 213-860-4224 1275 CENTRALI #22 213-827-711 WORK LAKEWOOD C 9071 AUGUS 23 8 CAMERO KEYE 714-774-6186 70 PYTHIA 213-321-645 WORK ANAHEIM C 9280 JANUAR 27 8 LIND KEYES (SAME JANUAR 23 101 JIM KERSWELL 213-256-7019 6315 ELGIN ST. 213-948-8621 WORK  LOS ANGELES, CA 90042 OCTOBER 5 2 PHI KIE 714-870-7179 63 LAKESID DR FULLERTON C 9263 AUGUS 13 6 BE L RUSS 818-281-2148 52 NϮ E MOLIN ST. ALHAMBRA C 9180 JANUAR 22 6 JANE L RUSSA (SAME JUN 5 2 LONNI LE 714-642-1531 269 CLU MES PLAC 71-642-160 WORK COST MESA CA 9262 AUGUS 1 2 JA LE 714-642-490 WORK (SAME JUL 1 4 DIAN LEJIN 818-579-7980 354 NO BALDWI AVE #23 E MONTE C 9173 JANUAR 28 3 SUSA LESLI 714-994-3536 1474 STANTO AVE 213-414-704 WORK L MIRADA C 9063 JANUAR 16 5 MAR AN MAC 818-336-0028 1530 AMELOXEN AVE. 818-359-668 WORK HACIEND HEIGHTS C 9174 JUN 21 6 SHANNO MAGOLSK 213-944-2438 1182 LOM DRIV #10 213-948-735 WORK WHITTIER C 9060 SEPTEMBE 26 7 JOH MAZURE 714-535-1757 41 SO EMPIR ST 213-922-710 WORK ANAHEIM C 9280 JUN 7 7 SYBO MAZURE (SAME UNKNOWN 8 JO MONTAN 714-661-1675 2454 PRISCILL DR 714-771-814 WORK DAN POINT C 9262 APRI 28 8 LUCI MONTAN (SAME MA 29 6 GRE MURRA 213-433-6116 424 COLORAD  213-922-305 WORK LON BEACH C 9081 JANUAR 25 5 NANC M ANALL 714-830-4072 23251- L GLORIET 714-722-311 WORK MISSIO VIEJO C 9269 AUGUS 22 2 BO M CRACKE 714-956-9712 125 E SOUT ST ANAHEIM C 9280 FEBRUAR 16 CARO M CRACKE 800-443-310 WORK (SAME AUGUS 6 109 BONNIE MC CRACKEN (SAME) AUGUST 23 5 KIMBERL M CO 714-974-8535 31 N TUSTI AVE 714-630-299 WORK ANAHEIM C 9280 JUN 6 4 LESLI NIELSON 213-861-0591 19519 RAY ST. 714-842-666 WORK CERRITOS,CA 90701 FEBRUAR 17 1 TO OEFTERIN 714-731-8560  2233 W. SYCAMORE AVE. 714-532-331 WORK ORANGE, CA 92668 OCTOBE 26 4 KEITHLYN PARTE 213-941-1248 1355 E TELEGRAP RD WHITTIER C 9060 DECEMBE 19 3 CHARLI PETRILL 714-847-5872 624 WARNE AV #13 213-922-326 WORK HUNTINGTO BEACH C 9264 JUL 10 8 CHERY PHILLIP 714-826-3832 4 LINCOL COUR 213-922-293 WORK BUEN PARK C 9062 SEPTEMBE 24 1 RONAL PHILLIP 213-941-1139 1386 REI ST 213-322-852 WORK WHITTIER C 9060 JANUAR 1 6 MAR SU PIERC 714-523-2722 1460 FONSEC AVE L MIRADA C 9063 JUL 20 7 MIK QUA 714-772-6164 121 W CRON AVE  213-922-594 WORK ANAHEIM C 9280 JUN 26 93 HERSCHEL RAHMANIZAD 213-828-3508 P.O. BOX 67657 LOS ANGELES, CA 90067 AUGUST 23 4 JAC REICHER 714-846-2664 1651 BLACKBEAR LAN #30 213-922-520 WORK HUNTINGTO BEACH C 9264 OCTOBE 31 JOH RIDGEL 213-869-3723 923 SHELLEYFIEL ROA 213-562-330 WORK DOWNEY C 90240-293 MA 20 BREND "SAM RIDGEL (SAME AUGUS 12 105 PAUL RIOLES 213-436-6957 1837 EAST THIRD STREET #1 213-924-4444 LONG BEACH, CA 90802 JULY 11 1 DAVI RUTKOWSK 714-768-7538 2172 CRIPTAN 714-642-490 WORK MISSIO VIEJO C 9269 APRI 15  3 BIL SAMUE 213-867-0941 1370 CORNUT 213-634-470 WORK BELLFLOWER,C 9070 JANUAR 29 3 VIVIE SAMUE 213-605-450 WORK (SAME OCTOBE 18 ALISO SANDER 213-862-8878 941 STAMP AVE 213-927-263 WORK DOWNEY C 9024 JUL 24 9 JOH SCATTO 213-434-1213 76 GLADY AVE 213-532-355 WORK LON BEACH C 9080 AUGUS 2 9 KATH SCATTO (SAME MARC 1 2 JAC SCHLEMME 213-862-0650 1204 RIVE ROA 714-851-384 WORK DOWNEY C 9024 NOVEMBE 11 1 LANC SEME 714-594-9359 53 NO GOLDE SPRING DRIV 71-64-5800  DIAMON BAҬ C 9176 JUL 17 2 V SOLI 213-928-2322 932 SAMOLIN DOWNEY C 9024 SEP 13 5 JI STAGNE 818-369-9493 1530 AMELOXEN AVE. 213-536-678 WORK HACIEND HEIGHTS C 9174 AUGUS 12 1 ROBER STAR 818-368-3914 651 SO GARFIEL AVE 213-927-263 WORK BEL GARDENS CA 9020 MARC 22 9 BIL STEI 213-421-7372 433 LAKEWOO BLVD 213-245-939 WORK LON BEACH C 9080 AUGUS 10 104 ROBERT TELLES 714-543-0162 714-550-6883 WORK JANUARY 11 107 JOE TOTURO 213-924-5928 4 PHILLI TREJ 213-945-7850 1410 CHESTNU WHITTIER C 9060 SEP 13 5 LIS TREJ (SAME OCTOBE 14 1 RUD TREJ 213-695-2818 1104 E DORLAN 21-69-092 EX29 WORK WHITTIER C 9060 SEPTEMBE 17 8 ROBER VERDERBE 213-869-3971 1282 VERDUR ST 213-970-316 WORK DOWNEY C 9024 JUN 14 4 JO WELC 714-528-5698 193 KILME DRIV PLACENTIA, C 9267 SEPTEMBE 21 4 SU WELC 213-926-664 WORK (SAME NOVEMBE 11 7 DENNI WHIPPERMA 714-842-0341 810 WIND SAND 714-842-666 WORK HUNTINGTO BEACH C 9264 DECEMBE 31 1 KYL WILLIAM  213-927-0214 961 PARRO AVE 213-637-545 WORK DOWNEY C 9024 AUGUS 15 ORLAN 21-69-092 EX29 WORK WHITTIER C 9060 SEPTEMBE 17 8 ROBER VERDERBE 213-869-3971 1282 VERDUR ST 213-970-316 WORK DOWNEY C 9024 JUN 14 4 JO WELC 714-528-5698 193 KILME DRIV PLACENTIA, C 9267 SEPTEMBE 21 4 SU WELC 213-926-664 WORK (SAME NOVEMBE 11 7 DENNI WHIPPERMA 714-842-0341 810 WIND SAND 714-842-666 WORK HUNTINGTO BEACH C 9264 DECEMBE 31 1 KYL WILLIAM  1 ALISO SANDERS 2 BREND "SAM RIDGELY 3 AN CHARA 4 GISEL BOXER 5 RICHAR HARTMAN 6 DEBBI HOR 7 JOH RIDGEL 8 CARO M CRACKEN 9 SCOT BOXLEY 10 RUD TREJ 11 TO OEFTERING 12 MIK CHARAT 13 SU JOTBLA 14 DAVI RUTKOWSK 15 LIND BOXLE 16 RONAL PHILLIPS 17 ROBER STAR 18 KYL WILLIAM 19 LANC SEME 20 BO M CRACKE 21 LONNI LE 22 JANE LE 23 JAC SCHLEMME 24 DOREE HIN 25 PHI KIE 26 RA BRACKELSBERG 27 DONAL HOLTE 28 VIOLE SOLI 29 LARR BROOKS 30 SUSA LESLI 31 RIC JONE 32 ELL GALLEK 33 BIL SAMUE 34 VIVIE SAMUE 35 SHELDO BOXE 36 LIL ARMSHA 37 BO AME 38 JUD AME 39 CHARLI PETRILLA 40 JAC REICHERT 41 LYN CARON-LAN 42 KEITHLYN PARTEE 43 SU WELCH 44 JO WELC 45 DIAN LEJIN 46 ROBER GRIFFIT 47 MARTI HARBARGER 48 LESLI NIELSO 49 PHILLI TREJ 50 LIS TREJ 51 MART DRURY 52 MAR AN MAC 53 JI STAGNE 54 NANC M ANALL 55 JOH GRUC 56 KATH HALSTEA 57 DA COLLIN 58 DUAN CARMOUN 59 KIMBERLE M CO 60 SHANNO MAGOLSK 61 JOLYN BOSWEL 62 ALA ANDERSO 63 DIAN ANDERSO 64 GREGOR MURRA 65 DIC CROUS 66 CIND CROUS 67 BE L RUSS 68 JANE L RUSSA 69 MAR SU PIERCE 70 JI ARMSHA 71 JOH MAZURE 72 SYBO MAZURE 73 MICHAE GEORG 74 RA BOLDU 75 RICHAR JENSE 76 MICHAE QUA 77 RICHAR ANDERSO 78 DENNI WHIPPERMAN 79 SA ANSAR 80 CAMERO KEY 81 LIND KEY 82 LUCI MONTAN 83 JO MONTAN 84 CHERY PHILLIP 85 DEA BEAC 86 ROBI BEAC 8 STEPHE CURRY 8 GRE HUNDTOFT 8 ROBER VERDERBER 9 JOH SCATTON 9 KATH SCATTON 9 WILLIA STEIN 93 HERSCHEL RAHMANIZAD 94 BARBARA FERNELL 95 DODI CORONA 96 GEORGE CAMPBELL 97 ROBERT FLANAGAN 98 CHARLES BILL, JR. 99 TAWNA BILL 100 DAVID BULL, III 101 JIM KERSWELL 102 DAVID ESKEW 103 MICALA ESKEW 104 ROBERT TELLES  65 DIC CROUS 66 CIND CROUS 67 BE L RUSS 68 JANE L RUSSA 69 MAR SU PIERCE 70 JI ARMSHA 71 JOH MAZURE 72 SYBO MAZURE 73 MICHAE GEORG 74 RA BOLDU 75 RICHAR JENSE 76 MICHAE QUA 77 RICHAR ANDERSO 78 DENNI WHIPPERMAN 79 SA ANSAR 80 CAMERO KEY 81 LIND KEY 82 LUCI MONTAN 83 JO MONTAN 84 CHERY PHILLIP 85 DEA BEAC 86 ROBI BEAC 8 STEPHE CURRY 8 GRE HUNDTOFT 8 ROBER VERDERBER 9 JOH SCATTON 9 KATH SCATTON 9 WILLIA STEIN 93 HERSCHEL RAHMANIZAD 94 BARBARA FERNELL 95 DODI CORONA 96 GEORGE CAMPBELL 1985 LANGLAUFER SKI CLUB ROSTER (AS OF 2/4/86) 106 MARCIE ALCANTRA 213-436-6957 1837 EAST 3RD STREET #1 213-498-7766 WORK LONG BEACH, CA 90802 DECEMBER 24 37 BO AMES 714-447-0295 81 No EUCLI ST. FULLERTON, CA 9263 MA 2 3 JUD AN AMES (SAME JUN 2 6 ALA ANDERSO 818-963-7055 122 LOP LANE GLENDORA C 9174 SEP 15 6 DIAN ANDERSO (SAME NO 26 110 ART ANDERSON 714-827-9510 4312 JADE AVENUE 714-995-0477 WORK CYPRESS, CA 90630 SEPTEMBER 4 111 VERNA ANDERSON (SAME) JUNE 17 7 RICHAR ANDERSO 818-961-4560 1490 ANSFOR ST 714-521-139 WORK HACIEND HTS C 9174 JUL 1 7 SA (ANWAR ANSAR 213-920-1598 1011 WASHINGTO ST 213-564-816 WORK BELLFLOWER C 9070 SEP 7 7 JI ARMSHA 21-597-8063 1086 CHERR #201 213-430353 WORK LO ALAMITOS C 9072 DE 2 3 LIL ARMSHA 714-821-6328 754 KATELL AVE #7 STANTON C OC 23 8 ROBER (DEAN BEACH 714-529-0951 20 SIEVER #1 714-777-378 WORK BREA C JA 18 8 ROBI BEAC (SAME SEP 10 7 RA BOLDU  213-926-3604 1720 PARKVALL AVE 213-485-366 WORK CERRITOS C 9070 DE 14 6 JOLYN BOSWEL 71-739-1661 668 KNOT AVE 714-525-352 WORK BUEN PARK C 9062 JUL 8 3 SHELDO BOXE 213-431-5665 124 MARLI AVE 213-992-553 WORK SEA BEACH C 9074 JA 27 GISEL BOXE (SAME AUGUS 20 SCOT BOXLE 714-962-5134 1858 COTTONWOO ST 213-724-222 WORK FOUNTAI VALLEY C 9270 JUN 21 1 LIND BOXLEY (SAME AUGUS 28 2 RA BRACKLESBER 714-525-4885 133 WES OAK FULLERTON C 9263 FEBRUAR 24 2 LARR BROOK 213-863-5664  1230 STUDEBAKE ROA #17 800-523-5726 NORWALK C 9065 OCTOBE 30 100 DAVID BULL, III 619-377-4631 WORK 7255 CACTUS AVE. 619-377-4098 HOME INYOKERN, CA 93527 OCTOBER 3 96 GEORGE CAMPBELL 714-527-5321 9091 HOLDER AVE. 213-594-1992 WORK CYPRESS, CA 90630 JANUARY 18 5 DUAN CARMON 714-534-1419 1162 ROBER LANE GARDE GROVE C 9264 NOVEMBE 13 4 LYN CARON-LAN 213-745-1934 P.O BO 502 213-727-407 WORK WHITTIER C 9060 NOVEMBE 6 1 MIK CHARA 714-995-9343 583 STRATMOR AVE 213-922-285 WORK CYPRESS C 9063 AUGUS 30  AN CHARAT (SAME SEPTEMBE 20 95 DODI CORONA 213-402-3661 21600 BLOOMFIELD #16 HAWAIIAN GARDENS, CA 90716 NOV. 7TH 6 DIC CROUS 714-963-3454 869 ANCHORAG DRIV HUNTINGTO BEACH C 9264 OCTOBE 4 6 CIND CROUS (SAME JUN 3 8 STEPHE CURR 213-598-1407 1810 SO PIONEE BLVD 21-92-169 ARTESIA C 9070 APRI 22 108 TAD DILLARD AUGUST 16 5 MART DRUR 213-869-1709 922 BROOKSHIR #1 213-803-431 WORK DOWNEY C 9024 DECEMBE 20 102 DAVID ESKEW 714-970-8085 21345 VIA DEL PARQUE 714-636-6621  YORBA LINDA, CA 92686 SEPTEMBER 30 103 MICALA ESKEW FEBRUARY 23 94 BARBARA FERNELL 714-855-1284 27672 DURAZNO 213-268-5252 WORK MISSION VIEJO, CA 92692 FEBRUARY 1 97 ROBERT FLANAGAN 714-898-8131 15832 QUARTZ WESTMINSTER, CA 92683 OCTOBER 8 3 ELL GALLE 818-365-7336 41 MA NEI STREE 213-581-882 WORK SA FERNANDO C 9134 MARC 17 7 MICHAEL GEORGE BO 7 818-768-221 WORK TUJUNGA C 9104 OCTOBE 5 4 ROBER GRIFFIT 714-539-1735 914 ROSANN AVE GARDE GROVE C 9264 OCTOBE 11 5 JOH GRUC 714-737-0508 5940 DANIGER AVE. 714-671-099 WORK RIVERSIDE,CA 92505 SEPTEMBE 13 5 KATH HALSTEAD 213-559-6504 911 CATTARAUGU AVE LO ANGELES C 9003 FEBRUAR 17 4 MARTI HARBARGE 213-945-6639 7818 SO. BROADWAY AVE. WHITTIER C 9060 JUL 21 RICHAR HARTMA 213-862-5101 730 QUIL DR #19 213-564-595 WORK DOWNEY C 9024 MA 18 2 DO HOLTE 213-928-6229 884 LOWMA DOWNEY C 9024 JUN 28 2 DOREE HINS 714-522-7695 608 FREMON WA BUEN PARK C 9062 SEPTEMBE 27 DEBBI HOR 714-557-2498 282 SO FAIRVIE # 714-542-679 WORK SANT ANA C 9270 JUL 14 8 GRE HUNDTOF US VANDERGRIF FFG-4 213-883-201 WORK FP SA FRANCISCO C 9668 JANUAR 2 7 RICHAR JENSE 714-970-7341 519 WAGO WHEE DRIV YORB LINDA C 9268 DECEMBE 6 3 RIC JONE 213-941-124 1355 TELEGRAP ROA WHITTIER C 9060 AUGUS 25 1 SU JOTBLA 213-860-4224 1275 CENTRALI #22 213-827-711 WORK LAKEWOOD C 9071 AUGUS 23 8 CAMERO KEYE 714-774-6186 70 PYTHIA 213-321-645 WORK ANAHEIM C 9280 JANUAR 27 8 LIND KEYES (SAME JANUAR 23 101 JIM KERSWELL 213-256-7019 6315 ELGIN ST. 213-948-8621 WORK  LOS ANGELES, CA 90042 OCTOBER 5 2 PHI KIE 714-870-7179 63 LAKESID DR FULLERTON C 9263 AUGUS 13 6 BE L RUSS 818-281-2148 52 NϮ E MOLIN ST. ALHAMBRA C 9180 JANUAR 22 6 JANE L RUSSA (SAME JUN 5 2 LONNI LE 714-642-1531 269 CLU MES PLAC 71-642-160 WORK COST MESA CA 9262 AUGUS 1 2 JA LE 714-642-490 WORK (SAME JUL 1 4 DIAN LEJIN 818-579-7980 354 NO BALDWI AVE #23 E MONTE C 9173 JANUAR 28 3 SUSA LESLI 714-994-3536 1474 STANTO AVE 213-414-704 WORK L MIRADA C 9063 JANUAR 16 5 MAR AN MAC 818-336-0028 1530 AMELOXEN AVE. 818-359-668 WORK HACIEND HEIGHTS C 9174 JUN 21 6 SHANNO MAGOLSK 213-944-2438 1182 LOM DRIV #10 213-948-735 WORK WHITTIER C 9060 SEPTEMBE 26 7 JOH MAZURE 714-535-1757 41 SO EMPIR ST 213-922-710 WORK ANAHEIM C 9280 JUN 7 7 SYBO MAZURE (SAME UNKNOWN 8 JO MONTAN 714-661-1675 2454 PRISCILL DR 714-771-814 WORK DAN POINT C 9262 APRI 28 8 LUCI MONTAN (SAME MA 29 6 GRE MURRA 213-433-6116 424 COLORAD  213-922-305 WORK LON BEACH C 9081 JANUAR 25 5 NANC M ANALL 714-830-4072 23251- L GLORIET 714-722-311 WORK MISSIO VIEJO C 9269 AUGUS 22 2 BO M CRACKE 714-956-9712 125 E SOUT ST ANAHEIM C 9280 FEBRUAR 16 CARO M CRACKE 800-443-310 WORK (SAME AUGUS 6 109 BONNIE MC CRACKEN (SAME) AUGUST 23 5 KIMBERL M CO 714-974-8535 31 N TUSTI AVE 714-630-299 WORK ANAHEIM C 9280 JUN 6 4 LESLI NIELSON 213-861-0591 19519 RAY ST. 714-842-666 WORK CERRITOS,CA 90701 FEBRUAR 17 1 TO OEFTERIN 714-731-8560  2233 W. SYCAMORE AVE. 714-532-331 WORK ORANGE, CA 92668 OCTOBE 26 4 KEITHLYN PARTE 213-941-1248 1355 E TELEGRAP RD WHITTIER C 9060 DECEMBE 19 3 CHARLI PETRILL 714-847-5872 624 WARNE AV #13 213-922-326 WORK HUNTINGTO BEACH C 9264 JUL 10 8 CHERY PHILLIP 714-826-3832 4 LINCOL COUR 213-922-293 WORK BUEN PARK C 9062 SEPTEMBE 24 1 RONAL PHILLIP 213-941-1139 1386 REI ST 213-322-852 WORK WHITTIER C 9060 JANUAR 1 6 MAR SU PIERC 714-523-2722 1460 FONSEC AVE L MIRADA C 9063 JUL 20 7 MIK QUA 714-772-6164 121 W CRON AVE  213-922-594 WORK ANAHEIM C 9280 JUN 26 93 HERSCHEL RAHMANIZAD 213-828-3508 P.O. BOX 67657 LOS ANGELES, CA 90067 AUGUST 23 4 JAC REICHER 714-846-2664 1651 BLACKBEAR LAN #30 213-922-520 WORK HUNTINGTO BEACH C 9264 OCTOBE 31 JOH RIDGEL 213-869-3723 923 SHELLEYFIEL ROA 213-562-330 WORK DOWNEY C 90240-293 MA 20 BREND "SAM RIDGEL (SAME AUGUS 12 105 PAUL RIOLES 213-436-6957 1837 EAST THIRD STREET #1 213-924-4444 LONG BEACH, CA 90802 JULY 11 1 DAVI RUTKOWSK 714-768-7538 2172 CRIPTAN 714-642-490 WORK MISSIO VIEJO C 9269 APRI 15  3 BIL SAMUE 213-867-0941 1370 CORNUT 213-634-470 WORK BELLFLOWER,C 9070 JANUAR 29 3 VIVIE SAMUE 213-605-450 WORK (SAME OCTOBE 18 ALISO SANDER 213-862-8878 941 STAMP AVE 213-927-263 WORK DOWNEY C 9024 JUL 24 9 JOH SCATTO 213-434-1213 76 GLADY AVE 213-532-355 WORK LON BEACH C 9080 AUGUS 2 9 KATH SCATTO (SAME MARC 1 2 JAC SCHLEMME 213-862-0650 1204 RIVE ROA 714-851-384 WORK DOWNEY C 9024 NOVEMBE 11 1 LANC SEME 714-594-9359 53 NO GOLDE SPRING DRIV 71-64-5800  DIAMON BAҬ C 9176 JUL 17 2 V SOLI 213-928-2322 932 SAMOLIN DOWNEY C 9024 SEP 13 5 JI STAGNE 818-369-9493 1530 AMELOXEN AVE. 213-536-678 WORK HACIEND HEIGHTS C 9174 AUGUS 12 1 ROBER STAR 818-368-3914 651 SO GARFIEL AVE 213-927-263 WORK BEL GARDENS CA 9020 MARC 22 9 BIL STEI 213-421-7372 433 LAKEWOO BLVD 213-245-939 WORK LON BEACH C 9080 AUGUS 10 104 ROBERT TELLES 714-543-0162 714-550-6883 WORK JANUARY 11 107 JOE TOTURO 213-924-5928 4 PHILLI TREJ 213-945-7850 1410 CHESTNU WHITTIER C 9060 SEP 13 5 LIS TREJ (SAME OCTOBE 14 1 RUD TREJ 213-695-2818 1104 E DORLAN 21-69-092 EX29 WORK WHITTIER C 9060 SEPTEMBE 17 8 ROBER VERDERBE 213-869-3971 1282 VERDUR ST 213-970-316 WORK DOWNEY C 9024 JUN 14 4 JO WELC 714-528-5698 193 KILME DRIV PLACENTIA, C 9267 SEPTEMBE 21 4 SU WELC 213-926-664 WORK (SAME NOVEMBE 11 7 DENNI WHIPPERMA 714-842-0341 810 WIND SAND 714-842-666 WORK HUNTINGTO BEACH C 9264 DECEMBE 31 1 KYL WILLIAM  213-927-0214 961 PARRO AVE 213-637-545 WORK DOWNEY C 9024 AUGUS 15 LAN 21-69-092 EX29 WORK WHITTIER C 9060 SEPTEMBE 17 8 ROBER VERDERBE 213-869-3971 1282 VERDUR ST 213-970-316 WORK DOWNEY C 9024 JUN 14 4 JO WELC 714-528-5698 193 KILME DRIV PLACENTIA, C 9267 SEPTEMBE 21 4 SU WELC 213-926-664 WORK (SAME NOVEMBE 11 7 DENNI WHIPPERMA 714-842-0341 810 WIND SAND 714-842-666 WORK HUNTINGTO BEACH C 9264 DECEMBE 31 1 KYL WILLIAM :COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1 PP 2P:!  Pz2{2x2ͪ! !-4*:( +"|< !5M O_(=( ?!6#(#(((V*#"| !4!@hVD.PP# ! 6<*+!""A!6T] 08Y (!:0o: g2 ::8A8-[0)! R8w#:0o: gdҥ2 :(, F !կ(#( åy2 (*:  :2 :  :2 : (a:  x2#!* &: =0C: * &!"=(^#!: = 0;;!:(' 6 #*&+T]F6 #:   6*#6$2 {2 z2 >: W:_:!Ri!|D)0)0>: W:_:!Ri!|D)0)0>; v ͩ|0 ͪ!O  X8:_ ! ͯ06P͜8P81v 2 ; v !W (! 4~8Ê PR‘Pv  >;ʑO/ !!R   P P O  Pv  >;(+O/ # P:! W:" _:# G P ͒  ͢\P$ >;!/  \͹\* : ( +" |< ! 5(Y( =( j (#(((* #" | ! 4 Pz2! {2" x2#  O͒!   !  ! @:_ _:` WP :a ( a PP( ; P v   "!" ! 6  ! 6 #<   * + ! "!!O / #!W : ( 7 0!O 6 #7!8,(Sw#x?7 (*!8,()P(0 ?Gy؇؁؇؀ ?O* +" y2_ 2`  (!8,A?2` * +" !a 6 #w:a <2a 8* }  !(6~j(#" !6#" A! 6T]08Y (w! :0o: g2 ::8jA8-[0)! R8w#:0o: gdJ2 : (, R  ! կ(j#( Jy2 (* ͨ: : 2 : : 2 : (a:  x2tr* &: =0C: * &!s=(^#!: =7 0;;!ͨ: ('ͯ6 #* &+T]R 6 #: ͯ 6*#6$2 {2 z2 ͨ: W: _: !R!|D)0)0>^͔ >͔ H͔ H ~( ^+~ ^5:N v  a{ v System log on v Enter user id:v Invalid user idv Enter password:v Incorrect passwordv Enter date:v Invalid datev Enter time:v Enter activity:v Unable to log onJanFebMarAprMayJunJulAugSepOctNovDec| ~#͔ } _USERI SYSSYSLG SYSDD MMM YYHH:MM:SS-USERID-NN ON -----------ACTIVITY------------ (4 (5(6(2~0q#4:N (y 0 @>^͔ >͔ H͔ H ~( ^+~ ^5:N v  a{ v System log on v Enter user id:v Invalid user idv Enter password:v Incorrect passwordv Enter date: ; MAIN MENU FOR DAILY OPERATIONS....VERSION 1.00 12/11/84  $(27);$(65);$(51);$(49)  $(26): " "; [ $(27);$(41);" MAIN MENU FOR DAILY OPERATIONS -- SELECTIONS AVALIABLE: ";$(27);$(40) (x: $(27);$(41);" 1. ORDER ENTRY AND ORDER WRITING PROGRAMS ";$(27);$(40) 2: $(27);$(41);" 2. PARTS FILE PROGRAMS - INVENTORY CONTROL ";$(27);$(40) 9 S<1 130 @ S 160,170,180,190,200,210,220,300,305  OEMENU.BAS  PARTMENU.BAS  CUSTMENU.BAS  SALEMENU.BAS  A/RMENU.BAS  A/PMENU.BAS > PRINT:PRINT " ENTER PASSWORD TO ACCESS PAYROLL SYSTEM : ";  "PAYMENU.BAS" = $(27);$(71);$(53);: PASSWORD$: $(27);$(71);$(52) ! PASSWORD$="LAURIE RICE" 270 + "SORRY-ONLY AUTHORIZED USERS ALLOWED " , I = 1 2000 : $(7); : I : 10  " PASSWORD O.K. " ) I = 1 1000: : NEXT I " PAYMENU.BAS , STARTUP.BAS 1 UTILMENU.BAS 6   " PASSWORD O.K. " )PAYABLE PROGRAMS - VENDORS, ETC. "; $(27);$(40) dT: $(27);$(41);" 7. PAYROLL PROGRAMS - CHECKS, REPORTS, W2'S "; $(27);$(40) nT: $(27);$(41);" 8. STARTUP SYSTEM AND ENTER TODAY'S DATE "; $(27);$(40) sT: $(27);$(41);" 9. UTILITYc:!o~: +~2@2=  =< >2a=Y!c #~2b+~(|ͤI.:b eͤI:a<2a@>2a:  No drive specified (as in "MAPDIR A:") $ Map of directory on drive ("|" = active entry, "e" = unused, "." = erased) $ $$ DIR $ Map of directory on dri PAYROLL SYSTEM : ";  "PAYMENU.BAS" = $(27);$(71);$(53);: PASSWORD$: $(27);$(71);$(52) ! PASSWORD$="LAURIE RICE" 270 + "SORRY-ONLY AUTHORIZED USERS ALLOWED " , I = 1 2000 : $(7); : I : 10  " PASSWORD O.K. " ) I = 1 1000: : NEXT I " PAYMENU.BAS , STARTUP.BAS 1 UTILMENU.BAS 6   " PASSWORD O.K. " )PAYABLE PROGRAMS - VENDORS, ETC. "; $(27);$(40) dT: $(27);$(41);" 7. PAYROLL PROGRAMS - CHECKS, REPORTS, W2'S "; $(27);$(40) nT: $(27);$(41);" 8. STARTUP SYSTEM AND ENTER TODAY'S DATE "; $(27);$(40) sT: $(27);$(41);" 9. UTILITY>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $T( &&L sMM çN,>/0Ð 2Hû ,y,::,Version for PMMI S-100 modem starting at port: :++,H ,Version for Non-PMMI modem  :OI[:TI͊W4>_m>]2I!L-v%v:IZy2:e :I:e:Ie! ʡ0:0DM)) )o${h¡|/W}/_! =xy2I?,++ INVALID BAUDRATE ++$d (   :, Enter new Baudrate: !e6 ͓+ {+[00:0w͝+#0::[Ia:Im:ZI:I 2IZ::IZIZy2:e :I:e:Ie! ʡ0:0DM)) )o${h¡|/W}/_! =xy2I?,++ INVALID BAUDRATE ++$d ::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+ *.ptions, 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 ͌ҽ ¼ {+xxxxxxx,,,,,,xxxxxxxx,,$xxxxxxx,,,,,,xxxxxxxx,,$ A=Bob Robesky.......1-209-227-2083B=Byron McKay.......1-415-965-4097C=Bruce Jorgens.....1-509-255-6324D=Phil Cary.........1-505-522-8856E=Bill Earnest......1-215-398-3937F=Chuck Forsberg....1-503-621-3193G=Ron Fowler........1-414-563-9932H=Charlie Hoffman...1-813-831-7276I=Jack Kinn.........1-817-547-8890J=Walt Jung.........1-301-661-2175K=Sigi Kluger.......1-915-598-1668L=Keith Petersen....1-313-759-6569M=Wayne Masters.....1-408-378-7474N=Dick Mead.........1-213-799-1632O=Al Mehr...........1-408-238-9621P=Pasadena RBBS.....1-213-577-9947Q=Mark Pulver.......1-312-789-0499R=Bruce Ratoff......1-201-272-1874S=Ken Stritzel......1-201-584-9227T=TCBBS, Dearborn...1-313-846-6127U=AnaHUG RCPM.......1-714-774-7860V=Dave Austin.......1-707-257-6502W=Paul Bagdonovich..1-201-747-7301X=Kirk De Haan......1-408-296-5078Y=Byron Kantor......1-619-273-4354Z=Chuck Metz........1-408-354-59340=Bill Parrott......1-913-682-33281=Larry Snyder......1-305-671-23302=Alex Soya.........1-305-676-35733=Tony Stanley......1-912-929-87284=Ed Svoboda........1-408-732-91905=Tampa Bay Bandit..1-813-937-36086=Thousand Oaks.....1-805-492-54727=Bill Wood.........1-619-256-39148=Spare.............1-xxx-xxx-xxxx9=Spare.............1-xxx-xxx-xxxx^DIR DIR *.* $U0AD XMODEM S XMODEM R BYE RBBS (vacant)(vacant)(vacant) Nice chatting, see you again soon... ks.....1-805-492-54727=Bill Wood.........1-619-256-39148=Spare.............1-xxx-xxx-xxxx9=Spare.............1-xxx-xxx-xxxx^!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*>.*, W):IW), 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 o 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 ba>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $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 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 likTOPIC: 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 TOPIC : MDM730 LAST IN THE SERIES FROM : IRV HOFF W6FFC DATE : 22 MAR 84 NOTICE TO SYSOPS: PLEASE DO NOT ACCEPT ANY FURTHER UPDATES PAST MDM730. IT IS THE LAST AUTHORIZED VERSION OF THIS EX- CELLENT MODEM PROGAM. IT MUST BE GIVEN A CHANCE TO STABILIZE. - Irv Hoff NOTE1: I am trying to review all the overlays that are currently available, and change them to indicate "SAVE 73 sectors", etc. Those will all be dated 03/22/83, but the original names will be left intact. Several are quite ver- sion dependent and will require an update. NOTE2: (Since there are a significant number of changes to MDM730 from previous versions, and in the expectation it is the final version in this series, there will be no .DIF file offered. The full source code is available - 158k.) MDM730 is the last in the MDM7xx series. Although it is being released to the public domain, it is copyrighted in my name. No further updates or alterations are planned or are authorized. Only with this understanding do I release the source code to MDM730. A great many people have helped make this program what it is, and have assisted in the development and thorough testing. It now seems to be bug-free, although there are ALWAYS changes that can be made to any program to make it more useful for individual needs. Such changes sometimes ruin other features that person has no way to evaluate. This program has been updated an average of every two weeks since its inception. Since it is so hardware-dependent, it could be continually updated from "Here to Eternity". Several overlays are totally dependent on the version number, (for the Racal-Vadic, the Hayes Micromodem ][ and possibly 1-2 others.) Each new update totally obsoletes the previous update. Obviously this is an intolerable situation. I have spent more time promulgating this program than virtually anybody would imagine or anticipate. I am unable to continue de- voting the MANY hours of time it has taken to constantly modify and update new features. Therefore, I request all concerned to accept MDM730 as a final version in this series, and not update it further, or accept any updates from any source. I retain copyright benefits to the name MDM7xx. NOTE: IF YOU WISH TO MAKE ANY ALTERATIONS OR CHANGES YOU THINK SHOULD RECEIVE NATIONAL ATTENTION, PLEASE SELECT A DIFFERNT NAME AND START A "NEW THREAD". NEW MODEMS WILL ALWAYS BE MADE, REQUIRING DIFFERENT SOFT- WARE HANDLING. PERHAPS MDM100 OR MDM800, OR MODM100 OR MODM800, (ETC.) MIGHT MAKE GOOD SELECTIONS SHOULD SOMEBODY WANT TO START A NEW SERIES. - Irv Hoff ntolerable situation. I have spent more time promulgating this program than virtually anybody would imagine or anti 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 *********************************************************************** le 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!9"1r MODEM - 7 TRANSFER PROGRAM as of 04/20/84 FOR SOFTWARE 2000 TURBODOS 1.30 OPERATING SYSTEM $ ͈>2/2͛:X—>2:G Mrͧ>2s:E+TSQRʾD::] >2/2͊&!">2_G:0>20x\T8\:_:/2_>20_y͊:ʓw#" ˆ>::=̚>yͦ2ͦ2!:w#:w#>y6#}l&)>o+|!t!\ ! t!lt͊:5 } ++FILE DOES NOT EXIST++ TYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME: AHRo} K ++FILE TRANSFER COMPLETED++ o ++FILE TRANSFER UNSUCCESSFUL++ o ++ TRANSFER CANCELLED ++ 6# 6 #y6#‚ ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: 3Z3! b  !~y#͊H+y+y+: w>2:1'̓>B2 >:] ;PP*ڰ2&9 w :̖ đ ͣ ڗÊ>ͣ ڰ2: >2@>B2 :] d ͊:": "FILE OPEN, READY TO RECEIVE :>->C:MCRC in effect eChecksum in effect = wL3 ed3 Ͱ:ʡAWAITING NAME NAK PR>!5*\ ">7 !]~:~͸ #>:Q͸9>u:,CHECKSUM ERROR PR>>!\v:eAWAITING FILE NAME ewu7!]͸Ұ:ʭTIME OUT RECEIVING FILENAME w:~>#}}:y͸!\v: CHECKSUM ERROR  x>6͸7>212͂!^"!\bv i:fD*\ "!4D!58!^":A>@2!6!4N!5 6 !4F#~ š#~ ʥ"+#~ µ:<2#~ õ6 *~ ##~ "!p\ȇ!o#] !e~w#~w\!\l !u6B#6A#6Kl!l6\:\<8 2h:$ >2$ !\%  :\21 !% \ \ !1 \ \!% \ \<7 2$ =Ɓo&2  ] 2h2|>2&2':u  AWAITING # *$# (?H)}:2 22: ͸  ++Switching to CHECKSUM MODE++ >C2>= ͸m ͜ ک & u 7G:  :  xLH RCD, NOT SOH ͸ >:&<2& A : 1 :7 c= Ͱ ++ UNABLE TO RECEIVE BLOCK -- ABORTING ++ $: { :  ++ TIMEOUT ++ :&L :'ʧ 7: ʷ :  :' ++FRAMING ERR++  :' ++OVERRUN ERR++  :' ++PARITY ERR++  :&L͸m ͜ ک W͸m ͜ ک /x : V :  ++ BAD SECTOR # IN HDR z2#>2/ͩ!͸m ͜ ک w,‰ : Q2/͸m ͜ ک :#G:$- <@͸m ͜ ک  ʺ :  :  ++CRC err++ Ð :  :  ++ CKSUM ++ Ð 3 = >:d  SEND # *$ (?H)>:$:$/>2/ͩ!~,„ 2/yz{͵G:  xLH RCD, NOT ACK :&<2& :  : c7 CAN'T SEND SECTOR -- ABORTING $:  TIMEOUT ON ACK 1͸C>͸P>  ROUTINE CANCELLED >B2 Ð*$#"$}: \<FILES EXISTS -- TYPE 'Y' TO ERASE: Y\ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $#\*}"-!"}\2(y2+!")*)!"):+<2+:+O\˜! m2+!")ERROR WRITING FILE $sxGP6͊¼7ͷ2'ͲO: : :/ͺ: : :/ͺͲOy: 8:RAWAITING INITIAL NAK 6͸Ci@RCRC request received 2*"" "]2 ʿ!·6â#®::R: 2INVALID OPTION : V:/!] TRANSFERRED :\2!\t:2\!#:Qþ>212/2: p:ʐ ALL TRANSFERS COMPLETED >C2>22: !l\2|2h    >(L>)> > Oa{_ % |{0|L}LU ^0: l<ɯ2&MULTIPLE ERRORS ENCOUNTERED. TYPE Q TO QUIT, R TO RETRY: RQc~# : >Q2@~#3!\b͛:]EMGTʏSMR4: M ++Bad Option++ S:m  Re-enter PRIMARY option and file name only: 3Z:m £>2>2/>2!"O*yO}o|g|g}!o»"ͲͲ*T]*|>!#!>2$ /21:. PRIMARY OPTIONS: 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) BAU - Set modem baud rate TUR - Exit to TURBODOS S - Send file /^Y - Toggle save on/of R - Receive file / ^E - Exit to menu T - Terminal mode (optional file name) < ^T - File transfer mode E - Terminal mode with echo \ ^X - Cancel file transfer SECONDARY OPTIONS: B - Batch mode Multi File transfers T - Terminal mode after file transfer (memory save off) R - View what is received in file transfer S - View what is sent in file transfer  DEFAULT DRIVE: A Command: 3Z5=TUR=DIR=RETڌ*=WRT=XPR#=BAUҹ=DEL:5!7-×Z.: >2/2!t:: *>2/2!t:/2F#.7SRTEM~VN#?>#P7#5կE &ʥʥ hG#4+~#px#h#G~w+xF6 xh4h> >h>#> > ^G>#> > xhh>5h> > h> > F##> w#>Ha^{^_#^#6   ʚ   ªÚ    #- -6# > > > >w#:_@w# . w#~*=#/@R~*N#BR6?#R3!\b!Qt:l2Q:m +2Q~~# | :<2QØNOT FOUND>? !Rw# !mR _!:Q7@>A2L DRIVE ͊(_$P"P/ #P_{ ͊( x©ɯ WHICH BAUD RATE FOR THE MODEM A - 50 B - 75 C - 110 D - 134.5 E - 150 F - 300 G - 600 H - 1200 I - 1800 J - 2000 K - 2400 L - 3600 M - 4800 N - 7200 O - 9600 P - 19200 ENTER CHOICE - !(## ù#^%PABCDEFGHIJ K L M N OPDQRSVTDQRSVTBCP:w#:_@w# . w#~*=#/@R~*N#BR6?#R3!\b!Qt:l2Q:m +2Q~~# | :<2QØNOT FOUND>? !Rw# !mR _!:Q7@>A2L DRIVE ͊(_$P"P/ #P_{ ͊( x©ɯ WHICH BAUD RATE FOR THE MODEM A - 50 B - 75 C - 110.HE MODEM-7 FOR THE TURBODOS OPERATING SYSTEM TURBODOS MODEM PROGRAM DOCUMENTATION 04/20/84 Thi progra use th fil transfe routine writte b War Christense i hi CP/ fil transfe progra (V2. a o 8/6/79 an i compatabl wit hi progra i singl fil transfe mode Multi-fil transfer ar onl possibl betwee tw system runnin th progra describe below. Thi versio wa modifie t us th Turbodo 1.3 operatin syste b Rober N Bettis Al I/ use syste calls s i i hardware independent!! Turbodos is a trademark of Software 2000. This program has two functions: 1. Communication 2. Program transfer COMMUNICATIONӠ Th progra ma emulat termina o ech dat bac t sende (ac a computer). Terminal Mode - 'T' Option  Th termina mod ma b calle wit o withou fil name I fil i specifie (i shoul b ne file) the anythin receive b th mode ma b save i memor an late writte o disk Th sav featur i toggle ON/OF b Control-Y colo (: wil b printe a th beginnin o eac lin whe memor sav i active Th colo wil no b transmitte ove th mode no wil i b save i memory I fil i no specified the memor sav ca no b activated. I th memor buffe i ful (th buffe i fro th to o th progra t th botto o BDOS) th content ar automa- ticall writte t dis (bu th fil i no ye closed) Communication ma the continu wit th buffe reinitial- ized Th compute wit whic yo ar communicatin mus accep th X-O an X-OF (Control- an Control-S conven- tion o dat wil b lost. Whe communication ar over us Control- t exi fro th Termina mod an ente th Menu Th fil t whic yo ar writin mus the b close b usin th 'WRT command I thi i no done al dat wil b lost decide no t clos th fil automaticall sinc ther wil b time whe yo leav termina mod an the decid t re-enter Thi ma b don whil i th Men b usin th 'RET command Yo ma re-ente Termina mod an sav i th sam fil a man time a yo wis a lon a yo hav no close th fil wit th 'WRT command. .pa Whil i Termina mode Control- wil pu yo i Fil Transfe mode Thi wil allo yo t sen th content o a ASCIɠ fil ove th modem Thi routin doe n erro checkin an ther ar n protocol specifie betwee thi progra an th receivin compute othe tha tha i shoul b read t receiv dat vi th modem Control-ؠ wil cance th transfer. Computer mode - 'E' Option Thi mod echo dat receive b othe computer Onl on compute ma b i thi mod a on time Ther i n sav featur i thi mode Usefu i yo wis t communicat wit somebod runnin th termina portio o th program. File transfer - 'S' and 'R' Options Thes feature ar th sam a i th CP/͠ Mode progra writte b War Christense excep tha upo completio o th transfer contro return t th Men unles th secon- dar 'T optio ha bee selected I th latte case contro return t Termina mode Remembe tha i yo ar operatin remot compute usin timesharin progra (suc a War Christensen' "BYE") th remot shoul b instructe t sen o receiv i th quie (Q mod a secondar option Example o command fo sendin an re- ceivin ar liste below. Multi-file transfers Usin th (batch secondar option mor tha on fil an ambiguou filename ma b transferred T sen files us th primar optio "S an th secondar optio "B (alon wit an othe secondar options) T receiv th file bein sent us th "R primar optio an th "B secondar option File ma no b name sinc filename ar sen b th sendin program bu dis driv ma b specifie (o els th file ar writte t th defaul drive).  Backup option Ther i byt a th beginnin o th progra (104H tha wil creat backu fil i fil o th dis ha th sam nam a th fil bein receive i multi-fil transfe (se MODEM.SET) I thi byt i se t 0FFH backu fil wil b created I i i zer th fil o th dis wil b delete befor th ne fil i received Examples: Th sende enter SB B:*.CO t sen al th CO file o dis B Als specifie wa retur t termina mod whe done. .pa Th receive enter R t receiv al th file bein sen o th defaul drive. Th sende enter th comman S ASM.CO *.HE B:M*. whic wil sen ASM.CO fro th defaul drive al th HE file fro th defaul drive an al th file startin wit "M fro th drive. Multifil transfer ma onl b don fro th menu I ma no b specifie whe th MODE progra i called I othe word A>MODE͠ SA *.CO wil resul i a INVALIĠ OPTIO erro message. Return to Menu - 'M' option When asked to select an option, 'M' returns to Menu. The MENU I th Mode progra i entere wit n option th Men i called Th Men give th choic o selectin th standar option a define b War Christense (T E R an S) Th Termina mod ha bee greatl expande a describe above Th "R an "S command mus b calle wit filenam o yo wil b require t ente th primar comman ( o R an th filenam agai (bu NO th secondar options) I yo wan multi-fil transfers the th "R optio doe no nee filename. REԠ - Yo ma als ente termina mod usin th 'RET command bu n dat wil b save sinc fil ma no b name wit 'RET' Us th 'RET comman t RE-ENTE Termina mod afte i ha firs bee entere wit th 'T option I thi i done yo wil stil b abl t sav th communication i yo wer doin s befor yo exitte th termina mode. WR - Th 'WRT comman mus b use afte leavin Termina mode Thi write th las buffe t dis an close th file Failur t us th 'WRT comman result i los o al dat an fil o lengt zero. BA - Th 'BAU comman ma b use t chang th bau rat o th mode port DE̠ - Th 'DEL comman erase th mos recen fil accesse i Termina mode Usefu i yo decid afte communication tha yo don' wan t sav informatio jus gathered. CPM - The 'CPM' command reboots and returns to CP/M. XPҠ - Th 'XPR comman i toggl whic cause th men t b printe o no printed Initiall th men i o unles th progra i calle wit th "X optio (ie A>MODE ). DIR - Th'DIR comman list th director o disk driv mab specifie (ie DI B: o th defaul driv wil b listed Afte th director i listed th men wil no b printe whethe XP mod i o o off I XP mod i o an yo wis t se th menu hi return. 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 - terminal 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 mode 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 received in file transfer T - Terminal mode (used with remotely controlled computer) EXAMPLES (fn = filename, ft = filetype) Send another file S fn.ft Receiv fil o drive vie wha i bein received retur t termina mod RRT B:fn.ft Sen al CO files n message o console 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 RB A: Termina mode sav communicatio i file (i termina mus typ CTRL- t star save i men mus typ "WRT t clos file.) T fn.ft .pa COMPUTER TO COMPUTER TRANSFERS T us thi progra fo transfe o file betwee tw compu- ter tha eac ar runnin thi progra an ar directl connecte togethe b a RS-23 seria lin i i necessar t b careful i connectin them Eac computer' sen dat lin mus b connecte t th other receiv dat line. EXAMPLE: pins pins /----------\ RS-232 CABLE /----------\  | |2____________________________________3| | | Computer | | Computer | | # 1 |3____________________________________2| # 2 | | | | | | |7____________________________________7| | \----------/ \----------/ PLUS ANY NECESSARY HANDSHAKES sfe o file betwee tw compu- ter tha eac ar runnin thi progra an ar directl connecte togethe b a RS-23 seria lin i i necessar t b careful i connectin them Eac computer' sen dat lin mus b connecte t th other receiv dat line. EXAMPLE: pins pins /----------\ RS-232 CABLE /----------\ ; TITLE 'MODEM TRANSFER PROGRAM FOR TURBODOS 1.30' ; .Z80 ;***************************************************************************** ; ; PROGRAM :MODEM TRANSFER PROGRAM FOR TURBODOS 1.30 ; :BASED ON WARD CHRISTENSEN'S MODEM-7 PROGRAM V2.0 ; : ******* HARDWARE INDEPENDENT ******* !!!!!!! ; ; LANGUAGE : Z-80 ASSEMBLER ; SOFTWARE : TURBODOS 1.30 OR LATER COMPATIBLE OPERATING SYSTEM ; ; DATE : 20-APR-84 ; ; ; LAST CHANGE : CONVERT TO TURBODOS 1.30 ; : ROBERT N. BETTIS 20-APR-84 ; ;***************************************************************************** ; ; TRUE EQU 0FFH FALSE EQU 00 ; ;**** CHARACTER EQUATES **** ; NUL EQU 00 ; NULL SOH EQU 01H ; START OF HEADER STX EQU 02H ; START OF TEXT ETX EQU 03H ; ETX AND WARM REBOOT EOT EQU 04H ; END OF TRANSMISSION ENQ EQU 05H ; ENQUIRY ACK EQU 06H ; ACKNOWLEDGE BEL EQU 07H ; BELL BACKSP EQU 08H ; BACKSPACE TAB EQU 09H ; TAB ALF EQU 0AH ; LINE FEED FFEED EQU 0CH ; FORM FEED ACR EQU 0DH ; CARRIAGE RETURN XON EQU 11H ; TRANSMISSION ON CHAR. DC2 EQU 12H ; DC2 (TAPE) XOFF EQU 13H ; TRANSMISSION OFF CHAR. NAK EQU 15H ; NEGATIVE ACKNOWLEDGE SYNC EQU 16H ; SYNC CHARACTER SPOL EQU 70H ; SPECIFIC POLL SSEL EQU 71H ; SPECIFIC SELECT FSEL EQU 73H ; FAST SELECT DEL EQU 7FH ; DELETE ; EXITCH EQU 'E'-40H ; ^E = EXIT WITHOUT DISCONNECT DISCCH EQU 'D'-40H ; ^D = DISCONNECT TRANCH EQU 'T'-40H ; ^T = TRANSFER CHARACTER CAN EQU 'X'-40H ; ^X = CANCEL SEND/RECEIVE EOFCHR EQU 'Z'-40H ; ^Z = END OF FILE SAVECH EQU 'Y'-40H ; ^Y = TOGGLE SAVE CHARACTER ; BDNMCH EQU 75H ; BAD NAME MATCH OKNMCH EQU ACK ; OKAY NAME MATCH ; ; ;**** ADDRESS EQUATES FOR TURBODOS *** ; REBOOT EQU 0000 ; REBOOT ADDRESS OPSYSC EQU 0005 ; C-FUNCTION CALL ADDRESS OPSYST EQU 0050H ; T-FUNCTIONS CALL ADDRESS MODCHN EQU 01 ; USE CHANNEL ONE ; FCB EQU 005CH ; FILE CONTROL BLOCK ADDRESS FCBNAM EQU FCB+1 ; ADDRESS OF FILE NAME IN FCB FCBTYP EQU FCB+9 ; ADDRESS OF FILE TYPE FCBEXT EQU FCB+12 ; ADDRESS OF FILE EXTENT CURREC EQU FCB+32 ; CURRENT RECORD # FOR R/W RANREC EQU FCB+33 ; RANDOM RECORD POSITION RANOVF EQU FCB+35 ; HIGH ORDER (OVERFLOW) BYTE BUFFER EQU 0080H ; DEFAULT BUFFER ; TBASE EQU 0100H ; BASE ADDRESS FOR TRANSIENT PROGRAMS ; ;***************************************************************************** ; ERRLIM EQU 10 ; NUMBER OF TIMES TO RETRY SEND/RECEIVE ERRORS BOTRAM EQU LAST+100H AND 0FF00H DBUFSZ EQU 16 ; BUFFER SIZE IN KBYTES ; ; aseg org 100h ; BEGIN: JP PROGRM ; XPRFLG: DB 00 ; TRUE=NO MENU, FALSE=PRINT MENU BAKFLG: DB 0FFH ; CREATE BACKUP FLAG ; PROGRM: LD HL,0000 ; SAVE SYSTEM STACK POINTER ADD HL,SP LD (STACK),HL LD SP,STACK ; SET NEW STACK POINTER CALL HELLO DB ACR,ALF,'MODEM - 7 TRANSFER PROGRAM as of 04/20/84' DB ACR,ALF,'FOR SOFTWARE 2000 TURBODOS 1.30 OPERATING SYSTEM' DB ACR,ALF,'$' ; HELLO: POP DE ; GET MESSAGE ADDRESS & CLEAN UP STACK LD C,09 ; PRINT STRING CALL OPSYSC CALL INITAL ; SET DIRECT BIOS ENTRY POINTS LD A,TRUE ; SET SOME INITIAL VALUES LD (NFILFG),A CPL LD (SAVFLG),A CALL PROCOP ; PROCESS CONTROL OPTIONS LD A,(OPTION) ; GET MAIN OPTION CP 'X' ; EXPERT? JP NZ,RESTRT LD A,TRUE ; MAKE EXPERT LD (XPRFLG),A JP MENU RESTRT: LD A,(OPTION) ; GET MAIN OPTION LD B,A CP ' ' ; NO OPTION SPEC'D? JP Z,MENU ; TRUE, GO TO MENU CP 'M' ; MENU ASKED FOR? JP Z,MENU2 CALL SETMOD ; INITIALIZE THE MODEM PORT CALL MOVFCB LD A,00 LD (NFILFG),A ; CALL GOBBLE LD A,(OPTION) ; PROCESS MAIN OPTION CP 'E' ; ECHO MODE? JP Z,TRMECO ; YES CP 'T' ; TERMINAL MODE? JP Z,DSKSAV ; YES CP 'S' ; SEND A FILE? JP Z,SNDFIL ; YES CP 'R' ; RECEIVE A FILE JP Z,RCVFIL ; YES CP 'D' ; DISONNECT? JP Z,DISCN1 ; YES, DISCONNECT & GO MENU JP MENU ; NO OPTION SPEC'D, GO MENU ; ;**** TERMINAL ROUTINE ALLOWING MEMORY SAVE **** ; DSKSAV: LD A,(NFILFG) ; NEW FILE FLAG CP TRUE ; TRUE=NORMAL TERMINAL MODE JP Z,TERM LD A,(FCBNAM) ; FIRST CHAR OF FILENAME CP ' ' ; FILE SPEC'D? JP NZ,GOODNM ; YES, GOOD NAME LD A,TRUE LD (NFILFG),A CPL LD (SAVFLG),A JP TERM ; GOODNM: CALL ERASFL ; ERASE THE FILE CALL MOVE2 LD DE,FCB3 LD C,22 ; CREATE FILE CALL OPSYSC LD DE,FCB3 LD C,15 ; OPEN FILE CALL OPSYSC LD HL,BOTRAM ; SET BUFFER POINTER LD (BUFPTR),HL LD A,FALSE LD (NFILFG),A ; TERM: CALL STAT ; ANY CONSOLE DATA AVAILABLE JP Z,TERML ; NO, CHECK LINE CALL CONIN ; IF YES, GET IT LD B,A LD A,(EXACFL) OR A ; EXACT? LD A,00 LD (EXACFL),A ; CLEAR FOR NEXT TIME LD A,B ; RESTORE JP NZ,NOTOG CP EXITCH ; ^E ? JP Z,MENU ; YES, RETURN TO MENU CP DISCCH ; ^D ? JP Z,DISCN1 ; CP 1EH ; ^N ? JP Z,EXTFLG ; YES, SET FLAG FOR NEXT CHAR CP TRANCH ; ^T ? CALL Z,TRNSFR ; SEND A FILE (BLIND SEND) JP Z,TERM CP SAVECH ; ^Y ? JP NZ,NOTOG LD A,(NFILFG) ; DO NOT ALLOW SAVE IF THIS FLAG IS SET CP TRUE JP Z,TERML LD A,(SAVFLG) CPL LD (SAVFLG),A JP TERML ; EXTFLG: LD A,TRUE LD (EXACFL),A JP TERML ; NOTOG: CALL MODOUT ; OUTPUT THE CHAR TERML: CALL MODSTA ; GET A CHAR IF AVAILABLE JP NZ,TERM CP NUL ; NULL? JP Z,TERM AND 7FH ; STRIP OF HIGH BIT CALL CONOUT PUSH AF LD A,(SAVFLG) ; IN SAVING MODE? CP FALSE JP Z,NOSAVE ; IF NOT, RETURN POP AF LD (HL),A ; IF YES, SAVE IT INC HL LD (BUFPTR),HL ; MENU COMMAND DESTROYS HL-REG ; ..GET HL WHEN ENTERING VIA 'RET' CMD CP ALF ; END OF LINE? JP NZ,NCOLON LD A,':' ; IF YES, OUTPUT : AT START OF NEXT LINE CALL CONOUT NCOLON: LD A,(OPSYSC+2) ; HAS BELOW OPSYSC BEEN REACHED? DEC A ; IF SO, DISK SAVE IS NEEDED CP H CALL Z,IDSKSV JP TERM ; NOSAVE: POP AF JP TERM ; SAVFLG: DB FALSE LASTB1: DB NUL LASTB2: DB NUL ; IDSKSV: LD A,XOFF ; SHUT UP REMOTE CALL MODOUT LD D,00 ; D IS THE BUFFER COUNT CALL INMODM ; GET LAST BYTES SENT.. LD (LASTB1),A ; AFTER XOFF CALL INMODM ; DO IT SOME MORE LD (LASTB2),A ; ..AND STA LASTBYTE# IF YOU ARE ; ..LOSING BYTES WHEN MEMORY IS FULL PUSH DE CALL NUMRC1 CALL WRTDSK POP DE LD HL,BOTRAM INC D DEC D ; TEST BUFFER COUNT FOR ZERO JP Z,CTRLQ LD A,(LASTB1) ; GET THE LAST BYTES THAT WERE SAVED AND LD (HL),A ; ..PUT THEM IN BOTRAM INC HL CALL CONOUT DEC D JP Z,CTRLQ LD A,(LASTB2) LD (HL),A INC HL CALL CONOUT CTRLQ: LD A,XON ; SEND XON TO REMOTE CALL MODOUT RET ; NUMREC: LD (HL),EOFCHR INC HL LD DE,RANOVF ADD HL,DE NUMRC1: LD DE,-(BOTRAM) ADD HL,DE LD A,L ; DIVIDE HL BY 128 OR A RLA ; TO GET THE NUMBER OF SECTORS LD L,H LD H,00 PUSH AF ADD HL,HL POP AF LD A,00 ADC A,L LD L,A ; RETURNS WITH NUMBER OF RET ; ..128 BYTE RECORDS IN HL ; WRTDSK: LD DE,BOTRAM NEXTWT: LD C,26 ; SET DMA ADDRESS CALL BDOSRT PUSH DE LD DE,FCB3 LD C,21 ; WRITE NEXT RECORD CALL BDOSRT POP DE EX DE,HL PUSH DE LD DE,128 ADD HL,DE POP DE EX DE,HL DEC HL LD A,H OR L JP NZ,NEXTWT RET ; CLOSE3: LD DE,FCB3 ; CLOSE FILE LD C,16 CALL OPSYSC RET ; ;*** SAVE REGISTERS, CALL OPSYSC, AND RESTORE REGISTERS **** ; BDOSRT: PUSH BC PUSH DE PUSH HL PUSH AF CALL OPSYSC POP AF POP HL POP DE POP BC RET ; MOVE2: LD HL,FCB3 CALL INIFCB LD HL,FCB LD DE,FCB3 LD B,12 CALL MOVE RET ; ;**** FILE TRANSFER ROUTINE. CALLED WITH CONTROL-T FROM TERMINAL ROUTINE. **** ;**** TRANSFER MAY BE CANCELLED WHILE SENDING BY USING CONTROL-X **** ; TRNSFR: PUSH HL PUSH DE PUSH BC PUSH AF LD HL,FCB4 ; INITIALIZE FCB'S CALL INIFCB LD HL,FCB+16 CALL INIFCB GET: CALL GETNAM ; GET FILE NAME TO BE TRANSFERRED LD A,(CMDBUF+2) ; WAS FILE ENTERED? CP ' ' JP Z,TRNSL2 CALL MOVE4 CALL OPEN4 CP -1 ; RETURN WITH 0FFH MEANS FILE DOES NOT EXIST JP NZ,CONTIN ; TRNSL1: CALL ILPRT DB ACR,ALF,'++FILE DOES NOT EXIST++',ACR,ALF,NUL ; TRNSL2: CALL ILPRT DB 'TYPE "R" TO RETURN TO MODEM' DB ACR,ALF,'TYPE "A" TO RE-ENTER NAME: ',BEL,NUL CALL CONIN CALL UCASE CALL CONOUT ; ECHO RESPONSE CALL DOCRLF CP 'A' JP Z,GET CP 'R' JP Z,RETURN JP TRNSL2 ; CONTIN: LD DE,BUFFER LD C,26 CALL OPSYSC READMR: CALL RNEXTR CP 01 ; END OF FILE? JP Z,FILDUN CP 02 ; BAD READ? JP Z,TRNBAD CALL SEND80 CP EOFCHR ; END OF FILE - OMIT IF OBJECT CODE JP Z,FILDUN CP CAN ; CANCELLATION? JP Z,TRNCAN JP READMR ; FILDUN: CALL ILPRT DB ACR,ALF,'++FILE TRANSFER COMPLETED++',ACR,ALF,BEL,BEL,NUL JP RETURN ; TRNBAD: CALL ILPRT DB ACR,ALF,'++FILE TRANSFER UNSUCCESSFUL++',ACR,ALF,BEL,BEL,NUL JP RETURN ; TRNCAN: CALL ILPRT DB ACR,ALF,ACR,ALF,'++ TRANSFER CANCELLED ++',ACR,ALF,BEL,BEL,NUL RETURN: POP AF POP BC POP DE POP HL RET ; ;**** WILL INITIALIZE THE FCB AT HL. FILLS THE 1ST POSITION **** ;**** WITH 00, THE NEXT 11 WITH SPACES, LAST 21 WITH NULLS **** ; INIFCB: LD (HL),00 ; CLEAR THE DRIVE CODE CLRNAM: INC HL ; ENTRY HERE WILL LEAVE DRIVE NAME INTACT LD B,11 CNAME1: LD (HL),' ' INC HL DEC B JP NZ,CNAME1 LD B,21 CLRDAT: LD (HL),00 INC HL DEC B JP NZ,CLRDAT RET ; ;**** GET THE NAME OF THE FILE TO BE TRANSFERRED **** ; GETNAM: CALL ILPRT DB ACR,ALF,'ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: ',NUL LD DE,CMDBUF CALL INBUFF CALL DOCRLF RET ; MOVE4: LD DE,CMDBUF LD HL,FCB4 CALL CPMLIN RET ; OPEN4: LD DE,FCB4 ; OPEN FILE LD C,15 CALL OPSYSC RET ; RNEXTR: LD DE,FCB4 ; READ NEXT RECORD LD C,20 CALL OPSYSC RET ; SEND80: LD B,80H LD HL,BUFFER SENDC1: LD A,(HL) CALL MODOUT ; OUTPUT TO MODEM CALL CONOUT ; OUTPUT TO CONSOLE CP EOFCHR RET Z CALL STAT ; TEST TO SEE IF CANCELLATION REQUESTED OR A JP Z,SKIP12 CALL CONIN CP CAN RET Z SKIP12: INC HL DEC B JP NZ,SENDC1 RET ; FCB4: DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00,00,00,00 DB 00 ; ;**** TERMINAL ECHO MODE **** ; TRMECO: CALL MODSTA ; ANY INPUT FROM MODEM ? JP Z,LINECH CALL STAT ; ANY INPUT FROM CONSOLE? JP Z,TRMECO CALL CONIN ; GET THE CONSOLE CHAR CP EXITCH ; EXIT TERMINAL MODE? JP Z,MENU CALL MODOUT ; IF NOT, SEND OVER MODEM CALL CONOUT ; ECHO IT TO THE CONSOLE JP TRMECO ; LINECH: CALL MODOUT ; ECHO THE CHARACTER BACK OVER THE LINE CALL CONOUT ; PUT IT TO THE CONSOLE JP TRMECO ; ;**** SEND A FILE **** ;**** UNCOMMENTED LINES ARE THOSE OF ORIGINAL MODEM PROGRAM. **** ;**** COMMENTS DENOTE ADDITIONS. **** ; SNDFIL: LD A,(BATCHF) ; CHECK IF MULTIPLE FILE MODE IS SET OR A JP NZ,SENDF1 LD A,TRUE ; INDICATE BATCH SEND LD (SENDFG),A LD A,(FSTFLG) ; IF FIRST TIME THROUGH.. OR A ; ..SCAN THE COMMAND LINE.. CALL NZ,TNMBUF ; ..FOR MULTIPLE NAMES. CALL SENDFN ; SENDS FILE NAME TO RECEIVER JP NC,SENDF2 ; CARRY SET MEANS NO MORE FILES LD A,'B' ; STOP BATCH MODE OPTION LD (BATCHF),A LD A,EOT ; FINAL XFER END CALL SEND JP DONE ; SENDF1: LD A,(FCBNAM) CP ' ' JP Z,BLKFIL SENDF2: CALL COMSIZ CALL OPNFIL LD E,'P' CALL WAITNK SENDLP: CALL RDSECT JP C,SNDEOF CALL INCRSN XOR A LD (ERRCT),A SNDRPT: CALL SNDHDR CALL SNDSEC LD A,(CRCFLG) OR A CALL Z,SNDCRC CALL NZ,SNDCKS CALL GETACK JP C,SNDRPT JP SENDLP ; SNDEOF: LD A,EOT CALL SEND CALL GETACK JP C,SNDEOF JP DONE ; ;**** RECEIVE A FILE. **** ; RCVFIL: XOR A ; DEFAULT TO CRC MODE LD (CRCFLG),A LD A,(BATCHF) ; CHECK IF MULT FILE MODE OR A JP NZ,RCVC1 LD A,FALSE ; FLAG WHERE TO RETURN LD (SENDFG),A ; ..FOR NEXT FILE TRANS. CALL GETFN ; GET THE FILE NAME JP NC,RCVC2 ; CARRY SET MEANS NO MORE FILES LD A,'B' ; STOP BATCH MODE LD (BATCHF),A JP DONE ; RCVC1: LD A,(FCBNAM) ; MAKE SURE FILE IS NAMED CP ' ' JP Z,BLKFIL JP RCVC3 RCVC2: CALL CKCPM2 CALL CHEKBK RCVC3: CALL ERASFL CALL MAKFIL LD A,(QFLAG) OR A JP NZ,RCVFST LD A,(BATCHF) OR A ; DON'T PRINT MSG IF IN MULTI AND QUIET JP Z,RCVFST ; FILOPN: CALL ILPRT DB 'FILE OPEN, READY TO RECEIVE',ACR,ALF,NUL RCVFST: LD A,(CRCFLG) OR A LD A,15H JP NZ,RCVFL2 LD A,'C' RCVFL2: CALL SEND LD A,(CRCFLG) OR A JP NZ,SUMEFF ; CALL ILPRT ; IF IN CRC MODE, SAY SO DB 'CRC in effect',ACR,ALF,NUL JP RCVLP ; SUMEFF: CALL ILPRT ; ELSE SAY CHECKSUM MODE DB 'Checksum in effect',ACR,ALF,NUL RCVLP: CALL RCVSCT JP C,RCVEOT CALL WRSECT CALL INCRSN CALL SNDACK JP RCVLP ; RCVEOT: CALL WRBLOK CALL SNDACK CALL CLSFIL JP DONE ; ;**** SUBROUTINES **** ; SENDFN: LD A,(QFLAG) OR A JP Z,SWNAK CALL ILPRT DB 'AWAITING NAME NAK',ACR,ALF,NUL SWNAK: LD E,'P' CALL WAINLP LD A,ACK ; GOT NAK, SEND ACK CALL SEND LD HL,FILECT DEC (HL) JP M,NOMRNM LD HL,(NBSAVE) ; GET FILE NAME IN FCB LD DE,FCB LD B,12 CALL MOVE LD (NBSAVE),HL CALL SENDNM ; SEND IT OR A ; CLEAR CARRY RET ; NOMRNM: LD A,EOT CALL SEND SCF RET ; SENDNM: PUSH HL SNDNM1: LD D,11 ; COUNT CHARS IN NAME LD C,00 ; INIT CHECKSUM LD HL,FCBNAM ; ADDRESS NAME NAMLPS: LD A,(HL) ; SEND NAME AND 7FH ; STRIP MSB SO WON'T SEND.. CALL SEND ; ..R/O FILE DESIGNATION LD A,(QFLAG) ; SHOW NAME IF QFLAG NOT SET OR A LD A,(HL) CALL NZ,CONOUT ACKLP: PUSH BC ; SAVE CHECKSUM LD B,01 ; WAIT FOR RECEIVER TO ACK GETTING LETTER CALL RECV POP BC JP C,SCKSER CP ACK JP NZ,ACKLP INC HL ; NEXT CHAR DEC D JP NZ,NAMLPS LD A,EOFCHR ; TELL RECEIVER END OF NAME CALL SEND LD A,(QFLAG) OR A CALL NZ,DOCRLF LD D,C ; SAVE CHECKSUM LD B,01 CALL RECV ; GET CHECKSUM FROM RECEIVER CP D JP Z,NAMEOK SCKSER: LD A,BDNMCH ; BAD NAME-TELL RECEIVER CALL SEND LD A,(QFLAG) OR A JP Z,SKCSR1 CALL ILPRT DB 'CHECKSUM ERROR',ACR,ALF,NUL SKCSR1: LD E,'P' ; DO HANDSHAKING OVER CALL WAINLP ; DON'T PRINT "AWAITING NAK" MSG LD A,ACK CALL SEND JP SNDNM1 NAMEOK: LD A,OKNMCH ; GOOD NAME-TELL RECEIVER CALL SEND POP HL RET ; GETFN: LD HL,FCB CALL CLRNAM ; DON'T INITIALIZE DRIVE LD A,(QFLAG) OR A JP Z,GNAMLP CALL ILPRT DB 'AWAITING FILE NAME',ACR,ALF,NUL GNAMLP: CALL HSNAK JP C,GNAMLP CALL GETNM ; GET THE NAME CP EOT ; IF EOT, THEN NO MORE FILES JP Z,NOMRNG OR A RET ; NOMRNG: SCF RET ; GETNM: PUSH HL GETNM1: LD C,00 ; INIT. CHECKSUM LD HL,FCBNAM NAMLPG: LD B,05 ; GET CHAR CALL RECV JP NC,GETNM3 LD A,(QFLAG) OR A JP Z,GETNM2 CALL ILPRT DB 'TIME OUT RECEIVING FILENAME',ACR,ALF,NUL GETNM2: JP GCKSER GETNM3: CP EOT ; IF EOT, THEN NO MORE FILES JP Z,GNRET CP EOFCHR ; GOT END OF NAME JP Z,ENDNAM LD (HL),A ; PUT NAME IN FCB LD A,(QFLAG) ; TYPE IT IF NO QFLAG OR A LD A,(HL) CALL NZ,CONOUT PUSH BC ; SAVE CHECKSUM LD A,ACK ; ACK GETTING LETTER CALL SEND POP BC INC HL ; GET NEXT CHAR LD A,L ; DON'T LET NOISE CAUSE OVERFLOW.. CP DEL ; ..INTO PROGRAM AREA JP Z,GCKSER JP NAMLPG ; ENDNAM: LD A,(QFLAG) OR A CALL NZ,DOCRLF LD A,C ; SEND CHECKSUM CALL SEND LD B,01 CALL RECV ; CHECKSUM GOOD? CP OKNMCH ; YES IF OKNMCH SENT JP Z,GNRET ; ELSE DO IT OVER ; GCKSER: LD HL,FCB ; CLEAR FCB (EXCEPT DRIVE).. CALL CLRNAM ; ..SINCE IT MAY BE CRUNCHED.. LD A,(QFLAG) ; ..BY TOO MANY CHARS OR A JP Z,GCKSR1 CALL ILPRT DB 'CHECKSUM ERROR',ACR,ALF,NUL GCKSR1: CALL HSNAK ; DO HANDSHAKING OVER JP C,GCKSR1 JP GETNM1 GNRET: POP HL RET ; HSNAK: LD A,NAK ; SEND NAK UNTIL RECEIVE ACK CALL SEND CALL CKABRT ; DON'T GET HUNG UP HERE LD B,02 ; WAIT 2 SECONDS IN RECEIVE CALL RECV CP ACK RET Z SCF RET ; TNMBUF: LD A,FALSE ; CALL FROM SENDFIL ONLY ONCE LD (FSTFLG),A LD (FILECT),A CALL SCAN LD HL,NAMBUF LD (NBSAVE),HL ; SAVE ADDR OF 1ST NAME TNLP1: CALL TRTOBF LD HL,FCB LD DE,FCBBUF CALL CPMLIN ; PARSE NAME TO CP/M FORMAT TNLP2: CALL MFNAME ; SEARCH FOR NAMES (* FORMAT) JP C,NEXTNM LD A,(FCBTYP+1) ; IF CP/M 2 $SYS FILE, DON'T SEND AND 80H JP NZ,TNLP2 LD HL,(NBSAVE) ; GET NAME LD DE,FCB ; MOVE IT TO FCB EX DE,HL LD B,12 CALL MOVE EX DE,HL LD (NBSAVE),HL ; ADDRESS OF NEXT NAME LD HL,FILECT ; COUNT FILES FOUND INC (HL) JP TNLP2 ; NEXTNM: LD HL,NAMECT ; COUNT NAMES FOUND DEC (HL) JP NZ,TNLP1 LD HL,NAMBUF ; SAVE START OF BUFFER LD (NBSAVE),HL  LD A,(FILECT) CP 65 ; NO MORE THAN 64 TRANSFERS RET C LD A,64 ; ONLY XFER FIRST 64 LD (FILECT),A RET ; ;**** SCANS CMDBUF COUNTING NAMES AND PUTTING DELIMITER (SPACE) **** ;**** AFTER LAST NAME **** ; SCAN: PUSH HL LD HL,NAMECT LD (HL),00 LD HL,CMDBUF+1 ; FIND END OF COMMAND LINE.. LD C,(HL) ; .. AND PUT SPACE THERE. LD B,00 LD HL,CMDBUF+2 ADD HL,BC LD (HL),' ' LD HL,CMDBUF+1 LD B,(HL) INC B INC B SCANL1: INC HL DEC B JP Z,DNSCAN LD A,(HL) CP ' ' JP NZ,SCANL1 SCANL2: INC HL ; EAT EXTRA SPACES DEC B JP Z,DNSCAN LD A,(HL) CP ' ' JP Z,SCANL2 LD (BGNMS),HL ; SAVE START OF NAMES IN CMDBUF INC B DEC HL SCANL3: INC HL DEC B JP Z,DNSCAN LD A,(HL) CP ' ' JP NZ,SCANL3 LD A,(NAMECT) ; COUNTS NAMES INC A LD (NAMECT),A SCANL4: INC HL ; EATS SPACES DEC B JP Z,DNSCAN LD A,(HL) CP ' ' JP Z,SCANL4 JP SCANL3 ; DNSCAN: LD (HL),' ' ; SPACE AFTER LAST CHAR POP HL RET ; ;**** PLACES NEXT NAME IN BUFFER SO CPMLIN MAY PARSE IT **** ; TRTOBF: LD HL,(BGNMS) LD B,00 LD DE,FCBBUF+2 TBLP: LD A,(HL) CP ' ' JP Z,TRBFEN LD (DE),A INC HL INC DE INC B ; COUNT CHARS IN NAME JP TBLP ; TRBFEN: INC HL LD A,(HL) ; EAT EXTRA SPACES CP ' ' JP Z,TRBFEN LD (BGNMS),HL LD HL,FCBBUF+1 ; PUT # CHARS BEFORE NAME LD (HL),B RET ; ;**** FILE IS CHANGED TO 'BAK' **** ; CKCPM2: LD C,26 ; SET DMA ADDRESS LD DE,BUFFER CALL OPSYSC LD C,17 ; SEARCH FOR FILE LD DE,FCB CALL OPSYSC CP 0FFH RET Z ADD A,A ; MULTIPLY A * 32 TO GET RELATIVE STARTING ADDR. ADD A,A ADD A,A ADD A,A ADD A,A LD HL,BUFFER ADD A,L ; ADD OFFSET LD L,A ; HL POINTS TO DIR NAME INC HL ADD HL,DE ; POINT HL TO FILENAME + 1 LD DE,FCBNAM ; MOVE DIR NAME TO FCB.. LD B,11 ; ..WITHOUT CHANGING DRIVE CALL MOVE LD HL,FCBTYP ; R/O ATTRIB LD A,(HL) AND 7FH ; STRIP R/O ATTRIBUTE LD (HL),A INC HL LD A,(HL) ; SYS ATTRIB AND 7FH ; STRIP SYS ATTRIBUTE LD (HL),A LD DE,FCB ; SET NEW FILE ATTRIBUTES IN DIR LD C,30 CALL OPSYSC ; ;*** MAY BE CALLED CHEKBK BELOW. ITS RETURN DONE HERE **** ; MAKBAK: LD HL,FCB ; CHANGE NAME TO TYPE "BAK" LD DE,FCB+16 LD B,9 ; MOVE DRIVE & NAME (NOT TYPE) CALL MOVE LD HL,FCB+25 ; START OF TYPE IN FCB2 LD (HL),'B' INC HL LD (HL),'A' INC HL LD (HL),'K' LD DE,FCB+16 ; DELETE ANY PREVIOUS BACKUPS LD C,19 CALL OPSYSC LD HL,FCB+16 ; FCB2 DR FIELD SHOULD 0 FOR RENAME LD (HL),00 LD DE,FCB ; RENAME FILE LD C,23 CALL OPSYSC RET ; ;**** MAKE A BACKUP FILE IF THE BACKUP FLAG IS SET **** ;**** AND THE FILE ALREADY EXISTS **** ; CHEKBK: LD A,(BAKFLG) ; NEED BACKUP? OR A RET Z LD C,17 ; SEARCH FOR FILE LD DE,FCB CALL OPSYSC INC A RET Z ; IF NO SUCH FILE, RETURN JP MAKBAK ; IN "CKCPM2" - RET DONE THERE ; ;**** MULTI-FILE ACCESS SUBROUTINE FROM CP/M USER'S GROUP **** ;**** CARRY IS SET IF NO MORE NAME CAN BE FOUND **** ; MFNAME: PUSH BC PUSH DE PUSH HL LD C,26 ; SET DMA ADDRESS LD DE,BUFFER CALL OPSYSC POP HL POP DE POP BC XOR A LD (FCBEXT),A LD A,(MFFLG1) ; IF FIRST TIME OR A JP NZ,MFN01 LD A,01 ; TURN OFF FIRST TIME SWITCH LD (MFFLG1),A LD HL,FCB ; SAVE ORIGINAL REQUEST LD DE,MFREQ LD B,12 CALL MOVE LD A,(FCB) ; SAVE DISK IN CURR FCB LD (MFCUR),A LD HL,MFREQ ; MOVE THE NAME LD DE,FCB LD BC,12 CALL MOVE PUSH BC PUSH DE PUSH HL LD C,17 ; SEARCH FOR FILE LD DE,FCB CALL OPSYSC POP HL POP DE POP BC JP MFN02 ; MFN01: LD HL,MFCUR ; SEARCH FOR CURRENT NAMEO LD DE,FCB ; MOVE THE NAME LD B,12 CALL MOVE PUSH BC PUSH DE PUSH HL LD C,17 ; SEARCH FOR FILE LD DE,FCB CALL OPSYSC POP HL POP DE POP BC LD HL,MFREQ ; MOVE NEXT NAME LD DE,FCB LD B,12 CALL MOVE PUSH BC PUSH DE PUSH HL LD C,18 ; SEARCH FOR NEXT LD DE,FCB CALL OPSYSC POP HL POP DE POP BC ; MFN02: INC A ; RETURN CARRY IF FILE NAME NOT FOUND SCF JP NZ,MFFIX1 LD (MFFLG1),A RET MFFIX1: DEC A ; MOVE NAME FOUND TO CURRENT AND 03 ADD A,A  ADD A,A ADD A,A ADD A,A ADD A,A ADD A,81H LD L,A LD H,00 PUSH HL ; SAVE NAME POINTER LD DE,MFCUR+1 LD B,11 CALL MOVE POP HL ; MOVE NAME FOUND TO FCB LD DE,FCBNAM LD B,11 CALL MOVE XOR A LD (FCBEXT),A LD (CURREC),A RET ; MFFLG1: DB 00 MFREQ: DB 3EH DB 00,00,00,00,00,00,00 DB 00,00,00,00 MFCUR: DB 00,00,00,00,00 DB 00,00,00,00,00,00,00 ; RCVSCT: XOR A LD (ERRCT),A RCVRPT: XOR A ; CLEAR ERROR CODES LD (ERRCOD),A LD A,(QFLAG) OR A JP Z,RCVSQ CALL ILPRT DB ACR,'AWAITING # ',NUL PUSH HL ; SAVE IT LD HL,(SECTNO) ; GET SECTOR NUMBER INC HL ; BUMP IT CALL DECOUT ; PRINT SECTOR NUMBER IN DECIMAL CALL ILPRT DB ' (',NUL CALL DHXOUT ; 16 BIT CONVERSION & OUTPUT CALL ILPRT DB 'H)',NUL LD A,L ; ONLY LOW BYTE USED BY PROGRAM POP HL ; RESTORE IT ; ;**** IF CRC IS IN EFFECT, THERE IS ONLY A 3 SECOND WAIT FOR THE **** ;**** FIRST SOH. IF THE SOH IS NOT RECEIVED WITHIN 3 SECONDS, THEN **** ;**** A NAK IS SENT WHICH TELLS THE SENDER TO USE CHECKSUM CHECKING **** ;**** INSTEAD OF CRC. THIS ALLOWS AUTOMATIC COMPATABILITY WITH **** ;**** VERSIONS OF XMODEM THAT DO NOT IMPLEMENT CYCLIC REDUNDANCY **** ;**** CHECKING. (CRC) **** ; RCVSQ: LD A,(FIRSTM) ; FIRST SOH BEEN RECEIVED? OR A JP Z,RCVSQ2 ; IF YES, GO GET NEXT SOH XOR A ; TURN OFF FIRST SOH RECEIVED SWITCH LD (FIRSTM),A LD A,(CRCFLG) ; CRC IN EFFECT? OR A JP NZ,RCVSQ2 ; IF NO, DO LONG WAIT FOR FIRST SOH LD B,03 CALL RECV ; GET A CHAR FROM MODEM JP NC,RCVSQ3 ; GO SEE IF SOH CALL ILPRT DB ACR,ALF,'++Switching to CHECKSUM MODE++',ACR,ALF,NUL LD A,'C' ; TURN OFF CRC MODE LD (CRCFLG),A LD A,NAK ; SEND NAK TO TELL SENDER CHECKSUM IS.. CALL SEND ; ..IN EFFECT & TO START SENDING. JP RCVSCT ; GO START RECEIVING SECTOR ; RCVSQ2: LD B,07 ; 10 IN ORIG. PROGRAM CALL RECV JP C,RCVSTO RCVSQ3: CALL RCVERR ; CHECK FOR ERRORS JP C,RCDERR ; JUMP IF THERE WAS AN ERROR CP SOH JP Z,RCVSOH OR A JP Z,RCVSQ CP EOT SCF RET Z LD B,A LD A,(VSEFLG) OR A JP Z,RCVSEH LD A,(QFLAG) OR A JP Z,RCVSER RCVSEH: CALL ILPRT DB ACR,ALF,NUL LD A,B CALL HEXOUT CALL ILPRT DB 'H RCD, NOT SOH',ACR,ALF,NUL RCVSER: LD B,01 CALL RECV JP NC,RCVSER LD A,NAK CALL SEND LD A,(ERRCT) INC A LD (ERRCT),A CP ERRLIM JP C,RCVRPT LD A,(VSEFLG) OR A JP Z,RCVCKQ LD A,(QFLAG) OR A JP Z,RCVSAB RCVCKQ: CALL CKQUIT JP Z,RCVSCT RCVSAB: CALL CLSFIL CALL ERXIT DB ACR,ALF,'++ UNABLE TO RECEIVE BLOCK -- ABORTING ++' DB ACR,ALF,'$' ; RCVSTO: LD A,(VSEFLG) OR A JP Z,TIMOUT LD A,(QFLAG) OR A JP Z,RCVSER TIMOUT: CALL ILPRT DB ACR,ALF,'++ TIMEOUT ++ ',NUL RCVPRN: LD A,(ERRCT) CALL HEXOUT CALL DOCRLF JP RCVSER ; ;**** CHECKS FOR FRAMING, OVERRUN, AND PARITY ERRORS. PARITY ERRORS **** ;**** CANNOT BE DETECTED UNLESS THE PARITY OPTION HAS BEEN SELECTED. **** ;**** 1. ERROR CODE (ERRCOD) WAS SET IN RECV ROUTINE ;**** 2. ERRCOD = 0 FOR NO ERRORS, ERRCOD <> 0 FOR ERRORS. ;**** 3. IF THERE IS AN ERROR, ROUTINE RETURNS WITH CARRY FLAG SET ; RCVERR: PUSH AF ; SAVE CHAR XMITED LD A,(ERRCOD) ; GET RECEIVE ERROR CODE AND A ; ZERO? JP Z,NOERRS ; IF YES, NO RECEIVE ERROR POP AF ; RESTORE CHAR TRANSMITTED SCF ; SET CARRY TO INDICATE AN ERROR RET NOERRS: POP AF ; RESTORE CHAR TRANSMITTED RET ; ;**** CHECKS FOR A RECEIVE ERROR AND DISPLAYS APPROPRIATE ERROR **** ;**** MESSAGE. THEN GOES TO RCVSER TO PURGE THE LINE AND SEND A NAK. **** ; RCDERR: LD A,(VSEFLG) ; VIEWING MODE? OR A JP Z,RCDERP LD A,(QFLAG) ; QUIET MODE? OR A JP Z,RCVSER ; IF YES, NO MESSAGE RCDERP: CALL ILPRT DB ACR,ALF,NUL LD A,(ERRCOD) ; GET RECEIVE ERR CODE AND 20H ; FRAMING ERROR? JP Z,RCDER2 CALL ILPRT DB '++FRAMING ERR++ ',NUL CALL RCDER5 ; PRINT # OF ERROR RCDER2: LD A,(ERRCOD) AND 10H ; OVERRUN ERROR? JP Z,RCDER3 CALL ILPRT DB '++OVERRUN ERR++ ',NUL CALL RCDER5 RCDER3: LD A,(ERRCOD) AND 08H ; PARITY ERROR? JP Z,RCDER4 ; IF NO, GO PURGE LINE CALL ILP RT DB '++PARITY ERR++ ',NUL CALL RCDER5 RCDER4: JP RCVSER ; GO PURGE LINE, SEND NAK RCDER5: LD A,(ERRCT) ; GET ERROR NUMBER CALL HEXOUT ; DISPLAY IT CALL DOCRLF ; DO ACR,ALF RET ; RCVSOH: LD B,01 CALL RECV JP C,RCVSTO CALL RCVERR ; CHECK FOR RECEIVE ERROR JP C,RCDERR LD D,A LD B,01 CALL RECV JP C,RCVSTO CALL RCVERR ; CHECK FOR RECEIVE ERROR JP C,RCDERR CPL CP D JP Z,RCVDAT LD A,(VSEFLG) OR A JP Z,RCVBSE LD A,(QFLAG) OR A JP Z,RCVSER RCVBSE: CALL ILPRT DB ACR,ALF,'++ BAD SECTOR # IN HDR',ACR,ALF,NUL JP RCVSER ; RCVDAT: LD A,D LD (SCTNOB),A LD A,01 LD (DATAFG),A LD C,00 CALL CLRCRC ; CLEAR CRC COUNTER LD HL,BUFFER RCVCHR: LD B,01 CALL RECV JP C,RCVSTO CALL RCVERR ; CHECK FOR RECEIVE ERROR JP C,RCDERR LD (HL),A INC L JP NZ,RCVCHR LD A,(CRCFLG) OR A JP Z,RCVCRC LD D,C XOR A LD (DATAFG),A LD B,01 CALL RECV JP C,RCVSTO CALL RCVERR ; CHECK FOR RECEIVE ERROR JP C,RCDERR CP D JP NZ,RCVCER CHKSNU: LD A,(SCTNOB) LD B,A LD A,(SECTNO) CP B JP Z,RCVACK INC A CP B JP NZ,ABORT RET ; RCVCRC: LD E,02 ; # OF CRC BYTES RCVCR2: LD B,01 CALL RECV JP C,RCVSTO CALL RCVERR JP C,RCDERR DEC E JP NZ,RCVCR2 CALL CHKCRC OR A JP Z,CHKSNU LD A,(VSEFLG) OR A JP Z,RCDCER LD A,(QFLAG) OR A JP Z,RCVSER RCDCER: CALL ILPRT DB ACR,ALF,'++CRC err++ ',NUL JP RCVPRN ; RCVCER: LD A,(VSEFLG) OR A JP Z,RCVCPR LD A,(QFLAG) OR A JP Z,(RCVSER) RCVCPR: CALL ILPRT DB ACR,ALF,'++ CKSUM ++ ',NUL JP RCVPRN ; RCVACK: CALL SNDACK JP RCVSCT ; SNDACK: LD A,ACK CALL SEND RET ; SNDHDR: LD A,(QFLAG) OR A JP Z,SNDHNM CALL ILPRT DB ACR,'SEND # ',NUL PUSH HL LD HL,(SECTNO) ; GET SECTOR NUMBER CALL DECOUT ; PRINT IT IN DECIMAL CALL ILPRT DB ' (',NUL CALL DHXOUT ; 16-BIT CONVERSION & OUTPUT CALL ILPRT DB 'H)',NUL POP HL SNDHNM: LD A,SOH CALL SEND LD A,(SECTNO) CALL SEND LD A,(SECTNO) CPL CALL SEND RET ; SNDSEC: LD A,01 LD (DATAFG),A LD C,00 CALL CLRCRC LD HL,BUFFER SENDC: LD A,(HL) CALL SEND INC L JP NZ,SENDC XOR A LD (DATAFG),A RET ; SNDCKS: LD A,C CALL SEND RET ; SNDCRC: CALL FNDCRC LD A,D CALL SEND LD A,E CALL SEND XOR A RET ; GETACK: LD B,07 ; 10 IN ORIG. PROGRAM CALL RECVDG JP C,GETATO CP ACK RET Z LD B,A LD A,(QFLAG) OR A JP Z,ACKERR CALL ILPRT DB ACR,ALF,NUL LD A,B CALL HEXOUT CALL ILPRT DB 'H RCD, NOT ACK',ACR,ALF,NUL ACKERR: LD A,(ERRCT) INC A LD (ERRCT),A CP ERRLIM RET C LD A,(VSEFLG) OR A JP Z,GACKV LD A,(QFLAG) OR A JP Z,CSABRT GACKV: CALL CKQUIT SCF RET Z ; CSABRT: CALL ERXIT DB ACR,ALF,"CAN'T SEND SECTOR -- ABORTING",ACR,ALF,'$' GETATO: LD A,(QFLAG) OR A JP Z,ACKERR ; CALL ILPRT DB ACR,ALF,'TIMEOUT ON ACK',ACR,ALF,NUL JP ACKERR ; CKABRT: CALL STAT RET Z CALL CONIN CP CAN RET NZ ABORT: LD SP,STACK ABORTL: LD B,01 CALL RECV JP NC,ABORTL LD A,CAN CALL SEND ABORTW: LD B,01 CALL RECV JP NC,ABORTW LD A,' ' CALL SEND ; CALL ILPRT DB ACR,ALF,'ROUTINE CANCELLED',ACR,ALF,BEL,NUL ; LD A,'B' ; TURN MULTI-FILE MODE OFF SO ROUTINE ENDS LD (BATCHF),A JP DONTCE ; INCRSN: PUSH HL ; INCREASE THE SECTOR NUMBER LD HL,(SECTNO) INC HL LD (SECTNO),HL LD A,L POP HL RET ; ERASFL: LD A,(BATCHF) ; DON'T ASK FOR ERASE.. OR A ; ..IN MULTI-FILE MODE,.. JP Z,NOASK ; ..JUST DO IT LD DE,FCB LD C,17 ; SEARCH FOR FILE CALL OPSYSC INC A RET Z CALL ILPRT DB "FILES EXISTS -- TYPE 'Y' TO ERASE: ",BEL,NUL CALL CONIN PUSH AF CALL CONOUT POP AF CALL UCASE CP 'Y' JP NZ,MENU CALL DOCRLF ; NOASK: LD DE,FCB ; DELETE FILE LD C,19 CALL OPSYSC RET ; ;**** ROUTINE IF NO FILE IS NAMED FOR "SEND" OR "RECEIVE" **** ; BLKFIL: CALL ILPRT DB ACR,ALF,'No file specified',ACR,ALF,BEL,NUL JP MENU ; MAKFIL: LD DE,FCB LD C,22 ; CREATE FILE CALL OPSYSC INC A RET NZ CALL ERXIT DB "ERROR - CAN'T MAKE FILE",ACR,ALF DB "DIRECTORY MUST BE FULL",ACR,ALF,'$' ; COMSIZ: LD C,35 ; COMPUTE FILE SIZE LD DE,FCB ; POINT TO FILE CONTROL BLOCK CALL OPSYSC LD HL,(RANREC) ; GET RECORD COUNT LD (RCNT),HL ; STORE IT LD HL,0000 LD (RANREC),HL ; RESET RANDOM RECORD IN FCB RET ; OPNFIL: LD DE,FCB ; OPEN FILE LD C,15 CALL OPSYSC INC A JP NZ,OPENOK CALL ERXIT DB "CAN'T OPEN FILE$" ; OPENOK: LD A,(BATCHF) OR A JP NZ,OPNOK1 LD A,(QFLAG) OR A RET Z OPNOK1: CALL ILPRT DB 'FILE OPEN, SIZE: ',NUL LD HL,(RCNT) ; GET RECORD COUNT CALL DECOUT ; PRINT # SECTORS IN DECIMAL CALL ILPRT DB ' (',NUL CALL DHXOUT CALL ILPRT DB 'H) SECTORS',ACR,ALF,NUL RET ; CLSFIL: LD DE,FCB ; CLOSE FILE LD C,16 CALL OPSYSC INC A RET NZ CALL ERXIT DB "CAN'T CLOSE FILE$" ; RDSECT: LD A,(SECINB) DEC A LD (SECINB),A JP M,RDBLOK LD HL,(SECPTR) LD DE,BUFFER CALL MOV128 LD (SECPTR),HL RET RDBLOK: LD A,(EOFLG) CP 01 SCF RET Z LD C,00 LD DE,DBUF RDSCLP: PUSH BC PUSH DE LD C,26 ; SET DMA ADDRESS CALL OPSYSC LD DE,FCB ; READ NEXT RECORD LD C,20 CALL OPSYSC POP DE POP BC OR A JP Z,RDSCOK DEC A JP Z,REOF CALL ERXIT DB '++ FILE READ ERROR ++$' ; RDSCOK: LD HL,BUFFER ADD HL,DE EX DE,HL INC C LD A,C CP DBUFSZ*8 ; BUFFER SIZE IN 128 BYTE SECTORS JP Z,RDBFUL JP RDSCLP REOF: LD A,01 LD (EOFLG),A LD A,C RDBFUL: LD (SECINB),A LD HL,DBUF LD (SECPTR),HL LD DE,BUFFER ; SET DMA ADDRESS LD C,26 CALL OPSYSC JP RDSECT ; WRSECT: LD HL,(SECPTR) EX DE,HL LD HL,BUFFER CALL MOV128 EX DE,HL LD (SECPTR),HL LD A,(SECINB) INC A LD (SECINB),A CP DBUFSZ*8 ; BUFFER SIZE IN 128 BYTE SECTORS RET NZ ; WRBLOK: LD A,(SECINB) OR A RET Z LD C,A LD DE,DBUF ; SET DMA ADDRESS DKWRLP: PUSH HL PUSH DE PUSH BC LD C,26 CALL OPSYSC LD DE,FCB ; WRITE NEXT RECORD LD C,21 CALL OPSYSC POP BC POP DE POP HL OR A JP NZ,WRERR LD HL,BUFFER ADD HL,DE EX DE,HL DEC C JP NZ,DKWRLP XOR A LD (SECINB),A LD HL,DBUF LD (SECPTR),HL RET ; WRERR: LD C,CAN CALL SEND CALL ERXIT DB 'ERROR WRITING FILE',ACR,ALF,'$' ; ;********************** RECEIVE A CHARACTER ********************************* ;**** TIMEOUT IS IN B, IN SECONDS. ENTRY VIA 'RECVDG' DELETES GARBAGE **** ;**** CHARACTERS ON THE LINE. FOR EXAMPLE, HAVING JUST SENT A SECTOR, **** ;**** CALLING RECVDG WILL DELETE ANY LINE NOISE LONG BEFORE THE ACK/NAK **** ;**** WOULD BE RECEIVED. **** ; RECVDG: CALL GOBBLE ; GOBBLE UP LINE DATA ; RECV: PUSH DE LD A,B ADD A,A LD B,A MSEC: LD DE,50000 CALL CKABRT MWTI: CALL MODSTA ; CHAR AVAILABLE? JP Z,MCHAR DEC E JP NZ,MWTI DEC D JP NZ,MWTI DEC B JP NZ,MSEC POP DE SCF RET ; MCHAR: PUSH AF ; SAVE CHAR CALL GETERR ; GET ERROR CODES LD (ERRCOD),A POP AF ; GET CHAR BACK POP DE PUSH AF CALL UPDCRC ; CALCULATE CRC ADD A,C LD C,A LD A,(RSEEFG) OR A JP Z,MONIN LD A,(VSEFLG) OR A JP NZ,NOMONI LD A,(DATAFG) OR A JP Z,NOMONI MONIN: POP AF PUSH AF CALL SHOW NOMONI: POP AF OR A RET ; ; SEND: PUSH AF LD A,(SSEEFG) OR A JP Z,MONOUT LD A,(VSEFLG) OR A JP NZ,NOMONO LD A,(DATAFG) OR A JP Z,NOMONO MONOUT: POP AF PUSH AF CALL SHOW NOMONO: POP AF PUSH AF CALL UPDCRC ; CALCULATE CRC ADD A,C LD C,A POP AF CALL MODOUT RET ; WAITNK: LD A,(VSEFLG) OR A JP Z,WAINPR LD A,(QFLAG) OR A JP Z,WAINLP WAINPR: CALL ILPRT DB 'AWAITING INITIAL NAK',ACR,ALF,NUL WAINLP: CALL CKABRT LD B,01 CALL RECV CP NAK RET Z CP 'C' ; CRC REQUEST? JP Z,WAICRC DEC E JP Z,ABORT JP WAINLP WAICRC: CALL ILPRT DB 'CRC request received',ACR,ALF,NUL XOR A LD (CRCFLG),A RET ; INITAL: LD HL,(REBOOT+1) ; GET BIOS WARM ENTRY POINT LD DE,0003 ADD HL,DE LD (VSTAT+1),HL ; SET CHECK CONSOLE READY ADDRESS ADD HL,DE LD (VCONIN+1),HL ; SET READ FROM CONSOLE ADDRESS ADD HL,DE LD (VTYPE+1),HL ; SET OUTPUT TO CONSOLE ADDRESS RET ; PROCOP: LD DE,FCBNAM LD A,(DE) LD (OPTION),A OPTLP: INC DE LD A,(DE) CP ' ' J!P Z,ENDOPT LD HL,OPTBL LD B,OPTBE-OPTBL OPTCK: CP (HL) JP NZ,OPTNO LD (HL),00 JP OPTLP OPTNO: INC HL DEC B JP NZ,OPTCK JP BADOPT ; ENDOPT: LD A,(CRCFLG) OR A JP NZ,ENDOP2 LD A,(OPTION) CP 'R' JP NZ,BADOPT ; CRC ONLY ALLOWED FOR RECV ENDOP2: LD A,(VSEFLG) OR A RET NZ LD (QFLAG),A RET ; BADOPT: CALL ILPRT DB 'INVALID OPTION',ACR,ALF,BEL,NUL JP MENU ; DONE: LD A,(BATCHF) OR A JP NZ,DONTCC LD A,(QFLAG) OR A JP Z,NMSTRN LD HL,FCBNAM ; PUT FILE NAME IN SPACES.. LD DE,FTRNMS ; ..IN MESSAGE BELOW LD B,8 CALL MOVE INC DE ; PUT FILE TYPE AFTER SKIPPING ONE SPACE LD B,3 CALL MOVE CALL ILPRT FTRNMS: DB ' TRANSFERRED',ACR,ALF,ACR,ALF,NUL NMSTRN: LD A,(FCB) ; SAVE DRIVE NO. LD (DISKNO),A LD HL,FCB ; BLANK OUT FILE CONTROL BLOCK CALL INIFCB LD A,(DISKNO) ; PUT DRIVE NUMBER BACK LD (FCB),A LD HL,RESTSN ; RESTORE SECTOR NUMBERS.. LD DE,SCTNOB ; ..FOR NEW FILE TRANSFER LD B,SCTNOE-SCTNOB ; ROUTINE ALSO DONE IN MENU CALL MOVE LD A,(SENDFG) ; GOES TO EITHER SEND OR RECEVE FILE,.. OR A ; ..DEPENDING UPON WHICH ROUTINE SET.. JP NZ,SNDFIL ; ..THE FLAG IN MULTI-FILE MODE. JP RCVFIL ; DONTCC: LD A,TRUE LD (FSTFLG),A ; ..RESET MULTI-FILE TRANS LD (NFILFG),A ; NO FILES BEING USED IN TERMINAL ROUTINE CPL LD (SAVFLG),A ; STOP MEMORY SAVE IN TERMINAL ROUTINE LD A,(VSEFLG) OR A JP Z,TRNDUN LD A,(QFLAG) OR A JP Z,DONTCE TRNDUN: CALL ILPRT DB ACR,ALF,'ALL TRANSFERS COMPLETED',ACR,ALF,BEL,NUL DONTCE: LD A,'C' LD (CRCFLG),A ; TURN OFF CRC OPTION LD A,0FFH LD (FIRSTM),A ; SET FIRST TIME FLAG LD A,(TRMFLG) ; SEE IF RETURN TO TERMINAL MODE.. OR A ; ..AFTER TRANSFER JP NZ,MENU CALL DOCRLF JP TERM ; MOVFCB: LD HL,FCB+16 LD DE,FCB LD B,16 CALL MOVE XOR A LD (CURREC),A LD (FCBEXT),A RET ; SHOW: CP ALF JP Z,CONOUT CP ACR JP Z,CONOUT CP TAB JP Z,CONOUT CP ' ' JP C,SHWHEX CP DEL JP C,CONOUT SHWHEX: PUSH AF LD A,'(' CALL CONOUT POP AF CALL HEXOUT LD A,')' CALL CONOUT RET ; ;**** DO A CARRIAGE RETURN, LINE FEED **** ; DOCRLF: PUSH AF LD A,ACR CALL CONOUT LD A,ALF CALL CONOUT POP AF RET ; ;**** WRITE CONSOLE CHARACTER OUT **** ; CONOUT: PUSH AF PUSH BC PUSH DE PUSH HL LD C,A VTYPE: CALL $-$ ; CALL INSTRUCTION POP HL POP DE POP BC POP AF RET ; ;**** CHECK CONSOLE STATUS ROUTINE **** ; STAT: PUSH BC PUSH DE PUSH HL VSTAT: CALL $-$ ; CALL INSTRUCTION POP HL POP DE POP BC OR A RET ; ;*** CONSOLE INPUT ROUTINE **** ; CONIN: PUSH BC PUSH DE PUSH HL VCONIN: CALL $-$ ; CALL INSTRUCTION POP HL POP DE POP BC RET ; ;****CONVERT LOWER TO UPPER CASE **** ; UCASE: CP 'a' RET C CP '{' RET NC AND 5FH RET ; ; ; DECOUT: PUSH AF PUSH BC PUSH DE PUSH HL LD BC,-10 LD DE,-1 DECOU2: ADD HL,BC INC DE JP C,DECOU2 LD BC,0010 ADD HL,BC EX DE,HL LD A,H OR L CALL NZ,DECOUT LD A,E ADD A,'0' CALL CONOUT POP HL POP DE POP BC POP AF RET ; ;**** DOUBLE PRECISION HEX OUTPUT ROUTINE **** ; DHXOUT: PUSH HL PUSH AF LD A,H ; GET MS BYTE CALL HEXOUT LD A,L ; GET LS BYTE CALL HEXOUT POP AF POP HL RET ; ;**** OUTPUT THE ACC. AS HEX ASCII **** ; HEXOUT: PUSH AF RRA RRA RRA RRA CALL NIBBLE POP AF ; FALL THROUGH ROUTINE ; NIBBLE: AND 0FH CP 10 JP C,ISNUMB ADD A,07 ISNUMB: ADD A,'0' JP CONOUT ; ;**** RETURNS W/ZERO SET IF RETRY ASKED. IF MULTI-FILE MODE, JUST QUIT **** ; CKQUIT: LD A,(BATCHF) OR A JP NZ,MULERR ; ASK FOR RETRY INC A ; RESET ZERO FLAG RET ; MULERR: XOR A LD (ERRCT),A CALL ILPRT DB 'MULTIPLE ERRORS ENCOUNTERED.',ACR,ALF DB 'TYPE Q TO QUIT, R TO RETRY: ',BEL,NUL CALL CONIN PUSH AF CALL DOCRLF POP AF CALL UCASE CP 'R' RET Z CP 'Q' JP NZ,CKQUIT OR A RET ; ;**** PRINT MESSAGE FOLLOWING CALL TO THIS ROUTINE **** ; ILPRT: EX (SP),HL ; POINT TO MESSAGE ILPLP: LD A,(HL) OR A ; END OF MESSAGE? JP Z,ILPRET CALL CONOUT INC HL JP ILPLP ILPRET: EX (SP),HL RET ; PSTRNG: LD C,09 ; PRINT STRING AT DE JP OPSYSC ; ERXIT: POP DE ; GET MESSAGE ADDRESS INTO DE CALL PSTRNG ; PRINT THE MESSAGE CALL ILPRT ; GIVE A BEL FOR ATTENTION DB BEL,NUL LD A,(BATCHF) OR A JP NZ,DONTCE LD A,'Q' ; RESET QFLAG LD (QFLAG),A JP ABORT ; ABORT OTHER COMPUTER ; GOCPM: LD DE,BUFFER ; SET DMA ADDRESS LD C,26 CALL OPSYSC JP REBOOT ; ; MOV128: LD B,80H ; ;**** TRANSFER B BYTES FROM (HL) TO (DE) ; MOVE: LD A,(HL) LD (DE),A INC HL INC DE DEC B JP NZ,MOVE RET ; ;**** INITIALIZES FILE CONTROL BLOCKS AT 5CH & 6CH **** ; SETFCB: LD DE,CMDBUF LD HL,FCB CALL CPMLIN CALL PROCOP LD A,(FCBNAM) ; CHECK ON THE PRIMARY OPTION CP 'E' ; RETURN IF ECHO OPTION RET Z CP 'M' ; RETURN TO MENU RET Z LD B,A CP 'T' JP Z,TERMSL CP 'S' JP Z,CKFILE CP 'R' JP NZ,BDOPT LD A,(BATCHF) ; IF MULTI FILE MODE, THEN RECV OPT DOES.. OR A ; ..NOT NEED NAME. RET Z JP CKFILE ; BDOPT: CALL ILPRT DB ACR,ALF,'++Bad Option++',ACR,ALF,NUL JP REENT CKFILE: LD A,(FCB+17) ; IF OPTION THAT NEEDS FILE NAME,.. CP ' ' ; ..THEN CHECK TO SEE IF NAME EXISTS.. RET NZ ; ..IF NOT, DO EVERYTHING OVER. REENT: CALL ILPRT DB ACR,ALF,'Re-enter PRIMARY option and file name only: ',BEL,NUL LD DE,CMDBUF CALL INBUFF JP SETFCB ; TERMSL: LD A,(FCB+17) CP ' ' JP NZ,SAVAGN LD A,FALSE LD (SAVFLG),A LD A,TRUE LD (NFILFG),A CPL RET ; SAVAGN: LD A,FALSE LD (NFILFG),A RET ; ;**************************************************************** ;* CRCSUBS (Cyclic Redundancy Code Subroutines) version 1.20 * ;* Z-80 Mnemonics * ;* * ;* These subroutines will compute and check a true 16-bit * ;* Cyclic Redundancy Code for a message of arbitrary length. * ;* * ;* The use of this scheme will guarantee detection of all * ;* single and double bit errors, all errors with an odd * ;* number of error bits, all burst errors of length 16 or * ;* less, 99.9969% of all 17-bit error bursts, and 99.9984% * ;* of all possible longer error bursts. (Ref. Computer * ;* Networks, Andrew S. Tanenbaum, Prentiss-Hall, 1981) * ;* * ;* Designed & coded by Paul Hansknecht, June 13, 1981 * ;* * ;* Copyright (c) 1981, Carpenter Associates * ;* Box 451 * ;* Bloomfield Hills, MI 48013 * ;* (313)-855-3074 * ;* * ;* This program may be freely reproduced for non-profit use. * ;* * ;**************************************************************** ; CLRCRC: PUSH HL ; Reset CRC Accumulator for a new message. LD HL,0000 LD (CRCVAL),HL POP HL RET ; UPDCRC: PUSH AF ; Update CRC Accumulator using byte in (A). PUSH BC PUSH HL LD B,08 LD C,A LD HL,(CRCVAL) ; UPDLUP: LD A,C RLCA LD C,A LD A,L RLA LD L,A LD A,H RLA LD H,A JP NC,SKIPIT LD A,H ; The generator is X^16 + X^12 + X^5 + 1 XOR 10H ; as recommended by CCITT LD H,A ; An alternate generator which is often LD A,L ; used in synchronous transmission protocols XOR 21H ; is X^16 + X^15 + X^2 +1. This may be LD L,A ; used by substituting XOR 80H for XOR 10H SKIPIT: DEC B ; and XOR 05H for XOR 21H in the adjacent code. JP NZ,UPDLUP LD (CRCVAL),HL POP HL POP BC POP AF RET ; FNDCRC: PUSH AF ; Finish CRC calculation for outbound message. XOR A CALL UPDCRC CALL UPDCRC PUSH HL LD HL,(CRCVAL) LD D,H LD E,L POP HL POP AF RET ; CHKCRC: PUSH HL ; Check CRC bytes of received message. LD HL,(CRCVAL) LD A,H OR L POP HL RET Z LD A,-1 RET ; CRCVAL: DW 0000 ; ; ;**** RESET ALL OPTIONS, ETC. TO DEFAULT VALUES **** ; MENU: LD HL,RESTSN ; RESTORE SECTOR NUMBERS.. LD DE,SCTNOB ; ..FOR NEW FILE TRANSFER. LD B,SCTNOE-SCTNOB CALL MOVE LD HL,RSTOPT ; RESTORE OPTION TABLE LD DE,OPTBL LD B,OPTBE-OPTBL CALL MOVE LD A,00 ; RESET MFACCESS ROUTINE.. LD (MFFLG1),A CPL ; ..AND MULTI TRANS IN CASE OF ABORT LD (FSTFLG),A ; MENU1: LD A,(XPRFLG) ; EXPERT LEVEL ON? OR A JP NZ,PROMPT ; MENU2: CALL ILPRT DB A!CR,ALF,'PRIMARY OPTIONS:' DB ACR,ALF,'WRT - Write file to disk (from terminal mode)' DB ACR,ALF,'DEL - Erase present file (from terminal mode)' DB ACR,ALF,'RET - Return to terminal mode with no loss of data' DB ACR,ALF,NUL ; CALL ILPRT DB 'XPR - Toggle expert mode (Menu on/off)',ACR,ALF DB 'DIR - List directory (may specify drive)',ACR,ALF DB 'BAU - Set modem baud rate',ACR,ALF DB 'TUR - Exit to TURBODOS',ACR,ALF DB 'S - Send file /^Y - Toggle save on/of',ACR,ALF DB 'R - Receive file / ^E - Exit to menu',ACR,ALF DB 'T - Terminal mode (optional file name) < ^T - File transfer mode',ACR,ALF DB 'E - Terminal mode with echo \ ^X - Cancel file transfer',ACR,ALF DB 'SECONDARY OPTIONS:',ACR,ALF DB 'B - Batch mode Multi File transfers',ACR,ALF DB 'T - Terminal mode after file transfer (memory save off)',ACR,ALF DB 'R - View what is received in file transfer',ACR,ALF DB 'S - View what is sent in file transfer',ACR,ALF,NUL ; PROMPT: CALL ILPRT DB ACR,ALF,'DEFAULT DRIVE: ',NUL ; LD C,25 ; GET DISK NUMBER CALL OPSYSC ADD A,'A' ; CONVERT TO ASCII CALL CONOUT ; CALL ILPRT DB ACR,ALF,'Command: ',NUL LD DE,CMDBUF ; ENTER COMMAND CALL INBUFF CALL DOCRLF LD DE,CMDBUF+2 ; POINT TO COMMAND CALL MATCHS DB 'TUR',NUL JP NC,GOCPM CALL MATCHS DB 'DIR',NUL JP NC,GIVDIR CALL MATCHS DB 'RET',NUL JP C,NXTOPT ; CARRY SET = NO MATCH LD HL,(BUFPTR) ; RETURN TO TERMINAL MODE WITH SAVE OPTION.. JP TERM ; ..IF PREVIOUSLY ENABLED ; NXTOPT: CALL MATCHS DB 'WRT',NUL ; WRITE THE FILE? JP NC,WRTFIL CALL MATCHS DB 'XPR',NUL ; TOGGLE EXPERT MODE? JP NC,TOGEXP CALL MATCHS DB 'BAU',NUL ; CHANGE BAUD RATE? JP NC,DOBAUD CALL MATCHS DB 'DEL',NUL ; DELETE TERMINAL FILE? JP NC,DELFIL PUSH HL LD A,(CMDBUF+2) LD HL,CMPLST CALL COMPAR ; COMPARES LIST @ HL TO CHAR IN ACC. POP HL JP C,MENU1 ; CARRY SET = NO MATCH ; PUSH HL ; LOAD ORIGINAL FCB WITH TRANSFER.. CALL SETFCB ; ..COMMANDS AND GO TO START OF PROGRAM.. POP HL ; ..WILL FOLLOW SAME LOGIC AS IF PROGRAM.. JP RESTRT ; ..WERE CALLED WITH COMMAND LINE. ; DISCN1: JP MENU1 ; ;**** GIVE THE DIRECTORY OF A DISK **** ; GIVDIR: CALL DODIR JP PROMPT ; ;**** DELETE MOST RECENT FILE ACCESSED IN TERMINAL MODE **** ; DELFIL: LD A,(FCB3+1) CP ' ' JP Z,MENU1 ; IF NO FILE, DON'T ERASE LD DE,FCB3 LD C,19 CALL BDOSRT LD A,TRUE ; DO NOT ALLOW TERMINAL SAVE.. LD (NFILFG),A ; ..SINCE NO FILE SPECIFIED CPL LD (SAVFLG),A LD HL,FCB3 CALL INIFCB JP MENU1 ; ;****WRITE THE LAST BUFFER FILE TO DISK & CLOSE FILE (FROM TERMINAL MODE) **** ; WRTFIL: LD A,(NFILFG) CP TRUE JP Z,MENU1 LD A,(FCB3+1) ; CHECK THAT FILE WAS REQUESTED CP ' ' JP Z,MENU1 LD HL,(BUFPTR) CALL NUMREC CALL WRTDSK CALL CLOSE3 LD A,TRUE LD (NFILFG),A CPL LD (SAVFLG),A LD HL,FCB3 CALL INIFCB ; BLANK OUT FCB SO WRITTEN FILE.. JP MENU1 ; ..CAN'T BE ERASED ; ;*** TOGGLE THE EXPERT MODE **** ; TOGEXP: LD A,(XPRFLG) CPL LD (XPRFLG),A JP MENU1 ; ;**** COMPARES ACC. WITH LIST @ HL. FIRST ELEMENT OF LIST MUST **** ;**** BE NUMBER OF ELEMENTS BEING COMPARED. RETURNS CARRY SET **** ;**** IF ACC IS NOT IN LIST. **** ; COMPAR: LD B,(HL) COMPLP: INC HL CP (HL) RET Z DEC B JP NZ,COMPLP SCF RET ; CMPLST: DB 05 ; 5 ELEMENTS IN LIST DB 'SRTEM' ; ;**** CHECK THE STRING @ DE AGAINST STRING FOLLOWING THE CALL TO HERE **** ; MATCHS: EX (SP),HL ; POINT AT STRING PUSH DE MCHNXT: LD A,(HL) ; GET THE CHAR OR A ; NULL? (MEANS END OF STRING) JP Z,MCHBAK LD A,(DE) CP (HL) JP NZ,NOMTCH INC HL INC DE JP MCHNXT NOMTCH: LD A,00 FNDNUL: INC HL CP (HL) JP NZ,FNDNUL SCF MCHBAK: POP DE INC HL EX (SP),HL RET ; ;**** INPUTS FROM KEYBOARD TO BUFFER. SIMILAR **** ;**** TO C-FUNCTION 10 BUT DOES NOT RESET **** ;**** ON ^C. OUTPUTS BELL IF BUFFER OVERFLOW. **** ; INBUFF: PUSH AF ; SAVE REGISTERS PUSH HL PUSH BC PUSH DE START: CALL CLEAR ; CLEAR BUFFER AREA POP DE ; GET ADDRESS OF BUFFER PUSH DE XOR A INC DE ; ADDRESS COUNT FIELD LD (DE),A ; INITIALIZE WITH ZERO INC DE EX DE,HL ; POINT HL TO 1ST BUFFER BYTE INBUFA: CALL GETCHR CP ACR ; RETURN? JP Z,INBUFR CP DEL ; DELETE? JP Z,KILCHR CP BACKSP ; ^H (BACKSPACE) ? JP Z,KILCHR CP NAK ; ^U ? JP Z,INBUFO CP DC2 ; ^R ? JP Z,RETYPE CP ENQ ; ^E ? JP Z,PCRLF CP ' ' ; NO OTHER CONTROL CHARS OTHER THAN THE ABOVE JP C,INBUFA LD B,A ; SAVE CHAR EX DE,HL ; SAVE BUFFER POINTER IN DE POP HL ; GET ADDRESS OF BUFFER IN HL PUSH HL INC HL ; ADDRESS COUNT BYTE INC (HL) ; BUMP COUNT BYTE DEC HL ; ADDRESS MAXIMUM LENGTH LD A,(HL) INC HL CP (HL) ; COUNT = MAX? JP C,ALERT ; IF MAX, RING BELL & WAIT FOR CR EX DE,HL ; RESTORE BUFFER POINTER LD (HL),B ; SAVE CHAR LD A,B ; ECHO IT CALL CONOUT INC HL ; BUMP POINTER JP INBUFA ; KILCHR: EX DE,HL ; KILL A CHARACTER FROM INPUT BUFFER POP HL PUSH HL INC HL LD B,A  LD A,(HL) ; DECREMENT COUNT SUB 01 LD (HL),A JP C,NODEL ; DON'T DELETE PAST START OF BUFFER EX DE,HL DEC HL LD A,B LD B,(HL) ; RESTORE BLANK LD (HL),' ' CP BACKSP JP Z,BKSPC LD A,B CALL CONOUT JP INBUFA ; GET NEXT CHAR ; NODEL: INC (HL) ; DON'T LEAVE COUNT NEGATIVE EX DE,HL ; RESTORE POINTER JP INBUFA ; BKSPC: CALL CONOUT ; TRUE ERASE IF 08H LD A,' ' CALL CONOUT LD A,08 CALL CONOUT JP INBUFA ; INBUFO: LD A,'#' CALL CONOUT LD A,ACR CALL CONOUT LD A,ALF CALL CONOUT JP START ; RETYPE: POP DE ; POINT TO CURRENT NUMBER OF CHARS PUSH DE INC DE LD A,(DE) LD B,A LD A,'#' CALL CONOUT LD A,ACR CALL CONOUT LD A,ALF CALL CONOUT LD A,B ; TEST IF ZERO INPUT OR A JP Z,INBUFA CTLRLP: INC DE LD A,(DE) CALL CONOUT DEC B JP NZ,CTLRLP JP INBUFA ; ALERT: LD A,BEL CALL CONOUT DEC (HL) EX DE,HL JP INBUFA ; PCRLF: LD A,ACR CALL CONOUT LD A,ALF CALL CONOUT JP INBUFA ; INBUFR: LD A,ACR CALL CONOUT LD A,ALF CALL CONOUT POP DE POP BC POP HL POP AF RET ; ;**** FILL A DESIGNATED AREA WITH SPACES **** ; CLEAR: POP DE ; POP OFF RETURN ADDRESS POP HL ; GET POINTER PUSH HL ; RE-SAVE POINTER PUSH DE ; RE-SAVE RETURN ADDRESS LD B,(HL) ; GET COUNT OF BYTES TO FILL INC HL INC HL LD A,' ' ; FILLING WITH SPACES FILUP: LD (HL),A INC HL DEC B JP NZ,FILUP RET ; GETCHR: PUSH HL PUSH DE PUSH BC RDYLUP: CALL STAT ; CHAR AVAILABLE? OR A JP Z,RDYLUP CALL CONIN CP 'a' ; IS IT LOWER CASE ALPHA? JP C,NOCONV ; IF NO, DON'T CONVERT CP '{' JP NC,NOCONV AND 5FH ; IT IS L.C. ALPHA, SO CONVERT NOCONV: POP BC POP DE POP HL RET ; ; ;**** LOADS A COMMAND LINE @ (DE) INTO FCB @ (HL). **** ;**** MAX # CHARS @ (DE), # CHARS IN LINE @ (DE+1),LINE STARTS @ (DE+2) **** ;**** FCB SHOULD BE AT LEAST 33 BYTES LONG. **** ;**** BUFFER MUST HAVE MAX. LENGTH OF AT LEAST 1 MORE THAN **** ;**** THE GREATEST NUMBER OF CHARACTERS THAT WILL BE NEEDED. **** ; CPMLIN: PUSH AF PUSH BC PUSH DE PUSH HL CALL INIT ; FILL FCB WITH BLANKS & NULLS EX DE,HL ; POINT HL TO CMD LINE INC HL ; GET # BYTES TO DE PAIR LD E,(HL) LD D,00 INC HL ADD HL,DE ; POINT TO BYTE PAST LAST CHAR.. LD (HL),ACR ; ..IN CMD LINE AND STORE DELIMITER POP HL POP DE PUSH DE PUSH HL INC DE ; POINT TO START OF CMD INC DE CALL DRIVE ; NAME1: LD C,08 ; TRANSFER 1ST FILENAME TO FCB CALL TRANS CP ACR JP Z,TDONE CP ' ' ; IF SPACE, THEN START OF 2ND FILENAME JP Z,NAME2 POP HL ; FILE TYPE MUST BE AFTER 8TH BYTE OF NAME PUSH HL LD BC,0009 ADD HL,BC LD C,03 ; TRANSFER TYPE OF FIRST FILE CALL TRANS CP ACR JP Z,TDONE ; NAME2: LD A,(DE) ; EAT MULTIPLE SPACES BETWEEN NAMES CP ' ' JP NZ,NAME2C INC DE JP NAME2 LD A,(DE) CP ACR ; TEST IF 1ST NAME ONLY AND THEN SPACE. JP Z,TDONE NAME2C: POP HL ; SECOND NAME STARTS IN 16TH BYTE PUSH HL ; SO POINT HL TO THIS BYTE LD BC,0016 ADD HL,BC CALL DRIVE LD C,08 CALL TRANS CP "ACR JP Z,TDONE POP HL PUSH HL LD BC,0025 ; 2ND TYPE STARTS IN 25TH BYTE ADD HL,BC LD C,03 CALL TRANS ; TDONE: POP HL PUSH HL INC HL ; POINT TO 1ST CHAR OF 1ST NAME IN FCB CALL ASCAN ; CHECK FOR * (AMBIGUOUS FILE NAME). POP HL PUSH HL LD BC,0017 ; POINT TO 1ST CHAR OF 2ND NAME IN FCB ADD HL,BC CALL ASCAN POP HL POP DE POP BC POP AF RET ; ;**** INITIALIZES FCB WITH 1 NULL (FOR 1ST DRIVE) 11 SPACES, 4 NULLS, **** ;**** 1 NULL (FOR 2ND DRIVE), 11 SPACES, AND 4 NULLS **** ; INIT: PUSH HL PUSH BC LD (HL),00 INC HL LD B,11 LD A,' ' CALL INIFIL LD B,5 LD A,NUL CALL INIFIL LD B,11 LD A,' ' CALL INIFIL LD B,4 LD A,NUL CALL INIFIL POP BC POP HL RET ; INIFIL: LD (HL),A INC HL DEC B JP NZ,INIFIL RET ; ; DRIVE: INC DE ; CHECK 2ND BYTE OF FILENAME. IF IT.. LD A,(DE) ; ..IS A ':', THEN DRIVE WAS SPECIFIED DEC DE CP ':' JP NZ,DEFDR ; ELSE ZERO FOR DEFAULT DRIVE LD A,(DE) AND 5FH SUB 40H ; CALCULATE DRIVE (A=1, B=2, ETC.) LD (HL),A ; AND PUT IN FCB INC DE ; POINT AT FIRST BYTE OF CMD LINE INC DE DEFDR: INC HL ; POINT AT NAME FIELD IN FCB RET ; TRANS: LD A,(DE) ; TRANSFER FROM CMD LINE TO FCB INC DE ; UP TO # CHARS SPECIFIED BY C-REG. CP ACR ; SCAN FIELD UNTIL A DELIMITER IS REACHED. RET Z CP '.' RET Z CP ' ' RET Z DEC C JP M,TRANS LD (HL),A INC HL JP TRANS ; ASCAN: LD B,08 ; SCAN FILE NAME ADDRESSED BY HL TSTNAM: LD A,(HL) CP '*' ; IF '*' FOUND, FILL IN REST OF FIELD.. JP Z,FILL1 ; .. WITH '?' FOR AMBIGUOUS NAME. INC HL DEC B JP NZ,TSTNAM JP TSTTYP FILL1: CALL FILL ; TSTTYP: LD B,3 ; SCAN AND FILL TYPE FIELD FOR NAME SPEC'D TSTYPL: LD A,(HL) CP '*' JP Z,FILL2 INC HL DEC B RET Z JP TSTYPL FILL2: CALL FILL RET ; FILL: LD (HL),'?' ; TRANSFERS A COUNT OF B-REG '?'S INC HL DEC B JP NZ,FILL RET ; ; ;**** GIVE THE DIRECTORY **** ; DODIR: LD DE,CMDBUF ; PUT COMMAND LINE IN FCB LD HL,FCB CALL CPMLIN LD HL,SCHFCB THAT HOLDS THE COLUMN NUMBER $ :!_BCURRENT VALUE = $1 :<̓ W $T 1=2l $i âNEXT, ENTER THE POSITION IN THE SEQUENCE $w THAT HOLDS THE LINE NUMBER $ :! CURRENT VALUE = $ :<̓  $ 1=2 $ ) $" `MANY TERMINALS ADD A CONSTANT TO THE LINE $4 ÙAND COLUMN NUMBERS. ENTER THE CONSTANT BIAS $k øFOR YOUR TERMINAL $ :!CURRENT VALUE = $ :̓  $ 12 $ ANOW ENTER THE SKELETON FOR THE DIRECT CURSOR $ xCOMMAND. ENTER A ZERO IN THE PLACES WHERE $L àCOLUMN AND LINE NUMBERS GO $ û(11 BYTE MAX) $ :!!F#A  > !]:!2  $ .---- DIM/BRIGHT VIDEO/REVERSE VIDEO ---- $ @ $9 sENTER THE COMMAND THAT WILL SWITCH TO $K ßHIGH INTENSITY OR NORMAL VIDEO $~ ù(5 BYTE MAX) $ :!!F#A  >!]:!2  $ &EN NOFILE: CALL ILPRT DB 'NOT FOUND',NUL DIRDUN: CALL DOCRLF RET ; QSTMRK: LD A,'?' ; IF BLANK IN FCB, PUT IN 11 '?' LD B,11 LD HL,SCHFCB+1 QSTLP: LD (HL),A INC HL DEC B JP NZ,QSTLP RET ; MOVNAM: LD HL,FCB+17 LD DE,SCHFCB+1 LD B,11 CALL MOVE RET ; GETADD: AND 03 ADD A,A ; ADD 32 ADD A,A ADD A,A ADD A,A ADD A,A LD E,A LD D,00 LD HL,BUFFER ; ADD DMA OFFSET ADD HL,DE RET ; ;**** IF NO DRIVE SPECIFIED, CALCULATE DEFAULT DRIVE **** ; DDRIVE: LD A,(SCHFCB) OR A JP Z,(GETDSK) ADD A,'@' JP SAVDSK ; GETDSK: LD C,25 ; GET CURRENT DISK # CALL OPSYSC ADD A,'A' SAVDSK: LD (DSKLTR),A CALL ILPRT DB ACR,ALF,'DRIVE ' DSKLTR: DB ' ',ACR,ALF,NUL RET ; SCHFCB: DS 33 ; ; ;************************************************************************** ;******************** TURBODOS DEPENDENT ROUTINES ************************* ;************************************************************************** ; ;**** INITIALIZE THE COMM CHANNEL **** ; SETMOD: RET ; ;**** CLEAR MODEM INPUT PORT **** ; GOBBLE: CALL MODSTA ; GOBBLE UP GARBAGE CHARACTERS ON LINE JR Z,GOBBLE RET ; ;**** OUTPUT THE CHAR IN A TO THE MODEM **** ; MODOUT: PUSH AF PUSH BC PUSH DE PUSH HL LD E,A LD C,36 LD D,MODCHN CALL OPSYST POP HL POP DE POP BC POP AF RET ; ;**** IF A MODEM CHAR. IS AVAILABLE, RETURN WITH CHAR IN ACC **** ;**** AND ZERO FLAG SET. OTHERWISE RETURN WITH ZERO FLAG CLEAR. **** ; MODSTA: PUSH BC PUSH DE PUSH HL LD C,34 ; IS CHARACTER AVAILABLE? LD D,MODCHN CALL OPSYST CPL OR A JR NZ,STABAK LD C,35 ; GET THE CHARACTER LD D,MODCHN CALL OPSYST LD E,A ; SET ZERO FLAG XOR A LD A,E ; STABAK: POP HL POP DE POP BC RET ; ;**** THIS ROUTINE WILL LOOP UNTIL THE MODEM RECEIVES A CHARACTER **** ;**** OR 100 MS. IF A CHAR IS RECEIVED, A FLAG IS SET TO STORE THE **** ;**** CHARACTER. A MAXIMUM OF TWO CHARACTERS ARE STORED, BUT MORE **** ;**** MAY BE STORED IF DESIRED. (SEE COMMENT IN "IDSKSV" ) **** ; INMODM: LD BC,09C4H ; GET TIME-OUT CONSTANT TIMERL: CALL MODSTA JR Z,GOTBYT DEC BC LD A,B OR C JP NZ,TIMERL RET ; GOTBYT: INC D RET ; ;**** GET MODEM ERROR CODES, RETURN IN ACC. **** ;**** | 0 | 0 | F.E.|O.E.|P.E.| 0 | 0 | 0 | **** ; GETERR: XOR A RET ; NOT IMPLEMENTED ; ; ;**** SET THE MODEM BAUD RATE **** ; DOBAUD: CALL ILPRT DB ACR,ALF,'WHICH BAUD RATE FOR THE MODEM' DB ACR,ALF,'A - 50 B - 75' DB ACR,ALF,'C - 110 D - 134.5' DB ACR,ALF,'E - 150 F - 300' DB ACR,ALF,'G - 600 H - 1200' DB ACR,ALF,'I - 1800 J - 2000' DB ACR,ALF,'K - 2400 L - 3600' DB ACR,ALF,'M - 4800 N - 7200' DB ACR,ALF,'O - 9600 P - 19200' DB ACR,ALF,'ENTER CHOICE - ',NUL ; CALL CONIN ; GET THEIR CHOICE CALL UCASE ; CONVERT TO UPPER CASE CALL CONOUT ; ECHO THEIR RESPONSE LD HL,BTABLE LD B,16 ; 16 CHOICES BAULUP: CP (HL) ; MATCH? JR Z,GOTBAU INC HL ; POINT TO NEXT ENTRY; INC HL DEC B ; DONE? JR NZ,BAULUP ; IF NO, CHECK FURTHER JP DOBAUD ; OR TRY AGAIN ; GOTBAU: INC HL LD E,(HL) LD C,37 LD D,MODCHN CALL OPSYST JP MENU1 ; GO BACK TO MAIN ROUTINE ; BTABLE: DB 'A',00H ; 50 BAUD DB 'B',01H ; 75 BAUD DB 'C',02H ; 110 BAUD DB 'D',03H ; 134.5 BAUD DB 'E',04H ; 150 BAUD DB 'F',05H ; 300 BAUD DB 'G',06h ; 600 BAUD DB 'H',07h ; 1200 BAUD DB 'I',08h ; 1800 BAUD DB 'J',09h ; 2000 BAUD DB 'K',0Ah ; 2400 BAUD DB 'L',0Bh ; 3600 BAUD DB 'M',0Ch ; 4800 BAUD DB 'N',0Dh ; 7200 BAUD DB 'O',0Eh ; 9600 BAUD DB 'P',0Fh ; 19,200 BAUD ; ;************************************************************************** ;************* END OF TURBODOS DEPENDENT ROUTINES ************************* ;************************************************************************** ; ; ;**** FLAGS, POINTERS, BUFFERS, ETC. **** ; DNAMCT: DB 00 NFILFG: DB FALSE ; NORMALLY SET TO FALSE. ALLOWS WRITE TO.. ; ..MEMORY IN TERMINAL MODE OPTION: DB 00 OPTBL: DB 'D' QFLAG: DB 'Q' RSEEFG: DB 'R' SSEEFG: DB 'S' VSEFLG: DB 'V' TRMFLG: DB 'T' BATCHF: DB 00 ; SET TO 'B' BY MENU. NO INITIAL MULTI-FILE OPTBE EQU $ RSTOPT: DB 'DQRSVTB' ; MUST BE IN SAME ORDER AS TABLE ABOVE CRCFLG: DB 'C' RESTSN: DB 00,00,00,00,00,00 DW DBUF DB 00,00,00,00,00 ; ; SCTNOB: DB 00 SECTNO: DW 0000 ERRCT: DB 00 ERRCOD: DB 00 EOFLG: DB 00 SECPTR: DW DBUF SECINB: DB 00,00 RCNT: DB 00,00 DATAFG: DB 00 ; EXACFL: DB 00 SCTNOE EQU $ ; FSTFLG: DB TRUE FIRSTM: DB 0FFH CMDBUF: DB 80 DB 00 DB ':' DS 81 BUFPTR: DW 0000 DISKNO: DB 00 SENDFG: DB 00 NBSAVE: DW 0000 BGNMS: DW 0000 FILECT: DB 00 NAMECT: DS 61 ; STACK: DW 0000 FCB3: DS 33 FCBBUF: DS 15 DBUF EQU $ ; 16K DISK BUFFER NAMBUF EQU DBUF+(DBUFSZ*1024) ; BUFFER FOR NAMES IN BATCH MODE.. ; ..OVERLOWS ABOVE PROGRAM CODE LAST: END TBASE ":COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/31/84) 1ͧ !"8!>":͓*[R8.|("<++"8!>":͓0*<ͧInsufficient memorØe:_ ODGDDog DC( = K8 7(DN D ͧChecksuØ.#8N _#0ͧLinker controØW*8}N|- D ͧByte coun]g.D$eoO}wݾ #ͧMemor3[<z(*:R0 *:~#":ѷͧInsufficient memorͧ error ^~#+ 052484143954;9 1; TurboDOS Moni;tor, Copyright 1984, 6;*Software 2000, Inc![;?$" !"   2 2;T 1;  *!V ͟F;i~?DA_ !(;~^#V"5D;|;RY~Y;):͐.;ͺR͐ʹ";Hͺ~͐>} S;ʹHͺ~͐&;  # ( (+͐&  F;@08G~ẁq&;(F0#͂Lʹ@|;= !̀ C (C VA;RL1,VAL2 ) ;g Calculate sum/diffT;|erence D (D ADDR1,9;ADDR2 ) D;ump memory E (E ADg;DR ),; Examine memory F ; (F ADDR1,ADDR2,VAL,3;REP ) Fill memory; G (G [ADDR] ;$ ) Goto adz;9dress H (H \;N ) He;clp I (I PORT P;x ) InputT; port L (L FILENAM ;E [ADDR] ) Lo;ad file M (M ADDR1;,ADDR2,ADDR3,REP ) j;Move memory O (O P;ORT,VAL +; ) Output port P ; (P ADDR Q;5 ) Put memory QL;J (Q ;_ ) Quit R ;t(R ADDR1,ADDR2 1; ) Ram test S ; (S FILENAME [ADDR1,A;DDR2]) Save file T; (T ADDR1,ADDR2 ; ) Type memor;y V (V ADDR1,ADDR2I;,ADDR3 ) Verify; memory W (W VAL1,a;1VAL2,...,VALN ) ;FWhere Y (Y Q;[ ) To\;pp of memorʹ̀};Hxʹ@͔8t;@: : (f: (:; 2 Ϳ@ @ ;$a2 | !" F;͐ ;  +"  Ϳ; ͈InvalidP; file na meVFileH;- not fou ndV~;B@F0# L@M;WYʹ@ ((w#q;lA& + +À9;@+" * #q@F0;  A* #yf F0;   SG ʹ;:  : : ; (: I2 Ϳ ;A g2 n;|(" ̀|(" +;* $* ̀4;)9 S  H͂SF;? s6 (#6̀c;T"[ +F#Unable ;ito create output filep;~"VͿ@ @; Unable to write oZ;utput fi leVͿ  '; Unable to; close output fileV;@Invalid file name;IVʹ$ͺ~(+; 0>`͐& >} S{;' ĉf>S-;<@e3@* |(~ GO;Qgj-9̀Z~K;f( ~ #+[;{+S3 Hʹ!~;H* |7"  ;Bͱ#ͱ7" |!͟;~0 O)) ) ;@͇̀| #" ;!̈́~808 ))));o͇0~#& ,;|̀}@#;$0:8 & 0 ?;9?F#V|}! ;O$5V   (;dVʹ͑ͺ~ ͺG;yB͇ * |7;( ~#7(H"  7 ; !8 ^#" 6  S;: : d;_ @ѻ; Non-privileged us;erV {a-;   ; !_; 6O; K; `~; ui; T;  ;id file name;IVʹ$ͺ~(+; 0>`͐& >} S{;' ĉf>S-;<@e3@* |(~ GO;Qgj-9̀Z~K;f( ~ #+[;{+S3 Hʹ!~;H* |7"  ;Bͱ#ͱ7" |!͟;~0 O)) ) ;@͇̀| #" ;!̈́~808 ))));o͇0~#& ,;|̀}@#;$0:8 & 0 ?;9?F#V|}! ;O$5V   (;dVʹ͑ͺ~ ͺG;yB͇ * |7;( ~#7(H"  7 ; !8 ^#" 6  S;: : d;_ @ѻ; Non-privileged us;erV {a-;   ; !_; 6O; K; `Г#=I%8\SU1 MiH3@,+R@ PHCvhvR@0 >&83j@H"KR@ l" SxH O 83hh! * TP~M %&#=! (H"Ub) w>-\-BD6zYh]b3#$` P@XR@@ &@FRA0 :/i.HjgV]c #zux.~e$`8(єP3hh EP]  C$VPͦ" L;Z*PPԐ@Kr@P "7iH`e*QPI4* RphdF"SPՀ!S$u$+v@z ~2I2a{">2!"2!"w#s#r2P!"Q!{>{>#:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/21/84) 11 _$6;# &\͹/ͧ8ͳ:}0=t*y0 { -( ]2]sw0 :}0 N:t0(>_*( Kw0D {w0:}0 4O:t0y(=<8 ` K*(wX7&>: !}0 :!\}0~ (~ ( Copyright 1984, Software 2000, Inc. h%~~o%h%  *#1.$*r0R~/w/w(+"r0*r0| f*r0|?</ 0y:r!v06*r0&R"y0=:v0 !=[y0'!3:v0 ́~/w/wdd#| R  ͎ͳ!v068fo8`g"y08Wo8Qg"{0͟*y0ͳͱ*y0[{0ͳ͹*{0ͳ8+*r0|(R8 [{0*y08w #z BB78~!!15 60}07!!1[!1Rɯ!0w#<2!1}0<}0:}0=WA!~0n~#!'͜͜d͜ ͜ R0y 0|ͺ} 80~#_OSMASTERSYS!4"#1b3E;$.3'[#1"#1Fatal error loading O/S: to retry not founTestingK of memorno errorBad Memory @ loading from to, size, unexpected end-of-fil, not enough memor, bad memorZZ!9u5t6o%>0s#ð~.ZfZ ~.ZfZ"1R%K%n/f0*1ͳ"1u/t0u1t2Y%t.Zu Z*1n5f6Zf 6.63n9f:|(o%n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!Y%6.o%~/Zf !,!0!:08h!  o%!o%O ^#V|!""""o%"o%o%###!hH " $ o%o%o% o%G e 1o% o%o%o%!!o%.""#5#o%@"o%#o%o%o%o%!o%o%3L"o+lo%o%o%o/Ho%Zo%o%o%o%o%o%o%o%o%o%o%o%o%k"No%B d%o%ͬ(o%X(5o%ͬ 'K% ~(o%o% ~< ~wo%>Zn~@o% ̀[Fo%d%o%|vN++~˾o%o%~@i(6@ w@K%[u1t2 ͬF/d%vͅ7K%~? wl=B=%K%#~@ w#ɷd%* ͑}w3}oͬ=%ͧZ~8` o%d%>o%'͚ 1͚ͧ "ZVo% 68ͧ3Yͼ Oy (0'o%=%F\ ~3 =%D%D% Ao%>84 "| ,o%I ͬ> o%6 4 d%=%F\E ~3 =%D%D% d%o%>8m "| eo%I M ͬ: ;o%o% Co% :4o%| -o%I ͬ:  o%6w3 6d%o%o%4~ >w##4<(7#˾Bo% (ͬ o% K% #˾: o%o%>d%( ( ~8A o%d%o%͚ ͚ͧ o%   ͑~x  ~w(x=(#?(M [ 4(NxFz͢pz~x?(`/wxͬͼ( ~x?V o%K% ~8 o%d%>o%͚< o%K%#ͧ# ˾x880#[N( wͼ o% %=%͒F\i ~3 X ͡D% 8( ͬ> Yo%d% %=%͒F\ͩ ~3 X ͡D% d%(ͬ:> o%o%d%o%o%w3~iw~hw~gwo%7I ~wi#~+w#~#~G~#O>>~Ox ##y|>7o%p##q=~wg~wh=%D%ìd%(swgwhwi~@͚ ͧͼ w3("Zn(:~@(46@͚ +ͧ ~ nˮo%(o%(w@fi^hVgX=(n&ͳG)MDa~g8++~h8###~i8~wg++~wh###~wi~^##Vg{怄O>G{GzGz_>#q#p#wo%'8u~8# ͤ s1r2ͳY%~w/~`%nfY%~w1~w2~w/~w0~`%~1͛!3%[142()~1o%ѷ`%52 }/o|/g"1{ozg"1{Oz(>g~1w6o%<oY%ͅ8w6'8T`%͝~(`%͑`%(ͬ8ͅˮo% o%o%7͢6x6z(D<6x?~x?(O`ͧ 16͑*Fͬ/*F1 çͅK%͚>o%͑#| 5 Jͧ~@n(K%# ~##~X8w###6V~o%(*o%  Vo%O`/Gn&)))))}oD()= ˾##6#6#y=(n&ͳ+R8 s#̓(r#ݯ>###> wͧK%## #˿##~o%(BK%͚ @ 7ͅ82͚ͧ ( K% X8###w˾o%n6l~@K%#M+ͬNl6l1ͅql͘X1v(c)8:!"1! b+b#O`/ݦx_{(*1|g}oR0+ͬ1*zF8 vͬ͝~(9x(((( #(~(Q(K#(`/O :#˯~0+~lM ͑[Y^( >wAwB~l?ÅO?^CVDD( ~l?(sCrDnEfF|!uEtF~O*1 )"1YD= ͙͢1~#͛!O ?' +  )###4y !+++̓ y/OG(6"~8=)))0̓(r+sJ!11~#͛!21ͷ!1w#r#sZѯ1 ̓!1RDM!x(6=%u't()ͷ)s$r%w&G)yѳ_N`G<8= K% ̓( ^(#Vz[[([#~([͸~1w#~#o%(6~#v(< Î~#hԽhˇԽͳ+R͑:bk##B8B0! <ͬͧ{_G~  (wìx~ ##~Z~ =K%#$~# ! # yDIRDSKDͅ 6 #6#6#6#6#6#w66ͻ 8(6 ͳ+u~=w> O6ͻ (6^J{ 0%͝~( 3J~86D͝6>7͝~(0 ͑0!͝~  ͬ͝6#>7w~͑ͬ͝~  N###~< =y >ɯ~#͛!_!1~#3%:1o:1>7 ~/ͻط ͝#<_#{ x7NF >8= ɯwAwBRͳ+B0Rn&)= ͑#ì! ^#̓(V#z~?(w#w#wͧ ɯvyO̓y(G7~=~ =nAfBD!( ~l?(+uAtBnf!D%~1w=~=d%K%D%~1 ~@Z~(w@>d%~1=w\^1;G)=%s#r#wK%u7t8K%u9t:Zv 9~1(Zn ,w@0ZZZZZ:1w@:o%w=>`%~1w[Oz<(!2r$Oqn7f8|>#N#N#Fp+q+q#4#4#4K%~?(=~=l K% ~    K%~nLfMuLtMnNfOuNtO^PVQsPrQn!1^#V+R( $+:1(G72121*:1o:1gY%!,3|`%~1o%~1͛!OF2y<( }o|g"1ˀ!1y<( }o|`^#V!1R$dy(#### x uv Ez~=R u~(+ Zup(4h $ƒ͂Æ[1y3%Zx4=y<(8x(4@(x`` )!1 ^#Vz(y~ p+p!1 pj!1^#V!1R( ! ˶@`Î!1^#V!1R͙(d####N#͉w#~#> ##q#~*8>)~>6˾k~p~w 6!:1ݾ06k~v(< +k~#w# ut=Z4Î͂$!6!1$͂$!1$z#z8$ u+t,   ͂n+f,~#Û!*11RK%Z~(1͔!f!~wx!w.~K% ͔!s#r^ V n!~0>`%w6~8&!=t!N F! ~= 8qpn f!͘$!^V~F? ?nf| )R0=T  =v :!R0nf NFq p utsrNF nfR0; ut! ѷn f NF DM!Rut!nf#~wnf^VRx!#~v=<(͘$~=!%ut ~_!1^#Vz %6x! ~v( Î͔!r+ss r   6~_!2~~#w^#V^ V _! 2~Z*o%u1t2:L2d%K%^#V#~#!W~!_*  ;G !d%!#w ;x2 K%q#p#z"w#{"w 0 !!!!K%|<("M2*M2Y%:1w[o%o%6/Z~(w0!.u1t2!Y%=%MDK%R%o%Y%s1r2q/p0`%U# 0 ( ( ( ͮ"d%~1O!O2 0 ( 6~G "4ò#U#d%N1ò#~1O<(<(<²# P#P#U#d%K%:P2~#ͮ"K%o%P#d%K%|<(}2P2:P2d%K%^#V#~#foz~#ͮ"#c#KT2̀#P# o%o%TP#:T2o#:Y2OĽ#o#O:U2:V2ʎ:X2(:W2 ~YwYo%Yf(o% ~;=_!Q2F#^#V!`2$K%|"^2!\25$[`2!`2R(^#V#$##~#*Z2#"Z2:\2*^2+"^2|!\24Sd2!""f2!""h26# x {f2*h2*d2M*f2~#<(=$ ~# ~ xD##>)))))))';$;$d;$ ;$ R0y 0OͲ#N#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r%N˹Ͳ#~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!o%Rog_%;;| 7{_-( (M=(J_-!2~ 5_-:2_-O%_-:2_-_-!2~O_-~#% !2#&!28$s2~(=(3=ʬ'=[(=(m> 22& 'Q'> )Z' :2t'> 22& 6'Q'> )Z' :2 & 'Q'z3)Z' :2t'> 22͔(¥':2~ ˟~(22~G( ( n f "2nf +"2> )t'~22~22n f "2F!@)+"222͔(¥' (ͺ)~!2_ ˞W:2( N98O~( ͬ)( Ny<:2:2W!2w*2[2"2!24!25Ͳ#:2G(:2*2!28$!#!2#"2=22{2>[(6 (( V:2O:2_(22D) ( :2 :2 :2 )~0O)!y( ^#Vz ##u t > 22D)~)~3)>22D))~3)~>͔(>/!2f>22ͣ)> !<#> D)!2~6/ȯ~)f(22D)22:2ݾ(( w~22(~ >3)_!2!2"2!"2!2~> ):222(22o%D)!2:23)ѣ>22o%ͣ) !2#:2>  sj212 22:2=) :2O:Z22202222:Z222 !28$> {j2M> > ) ^#V|) n f ^!2)`M5*0M?5*(50*0M 5A*M;5R*(5c* (+t*4M*M* M*M*. %+*4M*S(+M*           !2#V+!28$s2~r+=ʚ+=,=ʦ,=+,z,> -*2F "2E, +,z,>0*2F "2-E, ,z,> -N-E, :2(T-{2ͦ,,z,*2:2>P:2w(y -+N,+n f "2nf}|~22~2222!24!25,:2'''G:2怰G:2w x-@:2G:28 :2G_>(˘N,u,:2O!2 ~(6,T-><+N,,u t ~''''!2_ 2>-:2p:2wG-/-#3-!2#!2wg!/-$!28$%{( .=(.=;.=ʿ/=/=/=0xK3*2(K3*3xN>x 3*3|(+"3*2~#*2+K2 R0YPS2!34!3#*3|(+"3*3~#*3+K3 R0YPS3!34!3#x> :3@(y>:3@(y>x> )(:3@((yy23.#! 3#(:3@((yy23.#!$3#>:3@(:3!.$! 38$>:3@(:3!.$!$38$sj212/]/{j2MG!3nO~(˹:T2 *2"2!"3*2[3RS3*2q#*2+K2 R0YPS23!3ͷ/G!3nO~(˹:T2 *3"3!"3*3[3RS3*3q#*3+K3 R0YPS33!3ͷ/=8$x!3(!3qyOx:2( Gy22!3x(!3~>y(q(Wx(>yQx(>yPZ(Z!*34$>Zf /N/^1!+3(y(( (  {04n6o%1111&&D+1$% `2`2 02222Ëy(χ2222L`2@33 3 3 3 3&3&3!2!2 ",32*,3 # q+ 43>2!>o>>> >>G^>o%343o%o%o%o%o%o%o%D)!U)"! }24!." !4 !4 *2""2"2"2*3""3"3"3D20#:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/21/84) 1D _76;# &\͹/ͧ8ͳ:}C=t*yC { -( ]2]swC :}C N:tC(>_*( Kw0D {wC:}C 4O:tCy(=<8 ` K*(wX7&>: !}C :!\}C~ (~ ( Copyright 1984, Software 2000, Inc. h8~~o8h8  *#D.$*rCR~/w/w(+"rC*rC| f*rC|?</ 0y:r!vC6*rC&R"yC=:vC !=[yC'!3:vC ́~/w/wdd#| R  ͎ͳ!vC68fo8`g"yC8Wo8Qg"{C͟*yCͳͱ*yC[{Cͳ͹*{Cͳ8+*rC|(R8 [{C*yC8w #z BB78~!!D5 6C}C7!!D[!DRɯ!Cw#<2!D}C<}C:}C=WA!~Cn~#!'͜͜d͜ ͜ R0y 0|ͺ} 80~#_OSMASTERSYS!G"#DbFE;7.F'.[#D"#DFatal error loading O/S: to retry not founTestingK of memorno errorBad Memory @ loading from to, size, unexpected end-of-fil, not enough memor, bad memorZZ!9u5t6o8>Cs6ð~.ZfZ ~.ZfZ"DR8K8n/f0*Dͳ"Du/t0u1t2Y8t.Zu Z*Dn5f6Zf 6.63n9f:|(o8n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!Y86.o8~/Zf !,!0!:08h!  o84o8O ^#V|45555o85o8o86664,,hH"$o8,,o8o8o8,Ge 1!o8o8o8,,o844o8.5"656o8@5o86o8o8o8o8-!-o8o83"L5o-+-l!o8o8o8o!!!2/0H0o8Z0o8o8o8o8o8o8o8o8o8o8o8o8o8k5N"o8B, d8o8ͬ#(o8X(5o8ͬ# 'K8 ~(o8o8 -~< %"~wo8>Zn~@-)o8 ̀o8d8o8|$-vN++~˾o8o8~@i(6@w@K8.%[-u1t2 .ͬ,.F&/d8v&ͅ%7K8~? wl)=B,)$$=8K8#~@ w#ɷd8*& .͑,.}w3}oͬ,=8ͧ&-Z~"8`o8d8)>o8'*͚" 1ͧ&͚+ "ZVo8 6&8ͧ&,3,Y)ͼ" Oy (0'*o8=8F\~3 =8D8D8 Ao8->84 "|$ ,o8I  ͬ#> o8-6& -4d8=8F\E~3 =8D8D8d8o8->8m "|$ eo8I  Mͬ#:# ;o8o8 Co8' :-4o8|$ -o8I  ͬ#:# o8-6w3-6d8)o8o8-4~ >w##4<"(7-#˾B,o8 (ͬ# o8 )K8 #˾:# o8o8>d8"("( ~"8Ao8d8o8͚"ͧ&͚+o8- #͑,~x" ~w(x=(#?(M& [&# 4(#NxFz͢"pz~x?(`,/wxͬ,ͼ"( ~x?Vo8K8 ~"8o8d8)>o8͚"<o8K8#ͧ&# ˾x880#[N( -"w&ͼ" o8%=8͒-F\i~3 X ͡-D88( ͬ#> Yo8&d8%=8͒-F\ͩ~3 X ͡-D8d8(ͬ#:#> o8o8d8o8'o8w3-~iw-~hw-~gw)o87I -~wi#~+w#~#~G~#O>>~Ox ##y|$>7o8-p##q=-~wg-~wh=8D8ì-"d8))(swgwhwi~@͚" ͧ&!ͼ" w3("Zn(:~@(46@͚" +ͧ& ~ -nˮo8(!o8-(w@fi^hVgX=(n&ͳ,-G)MDa~g8++~h8###~i8~wg++~wh###~wi-~^##Vg{怄O>G{GzGz_>-#q#p#wo8)'*8u)+~8# ͤ+ s1r2ͳ,Y8~w/~`8)nfY8~w1~w2~w/~w0~`8~1͛438[D42()~1o8ѷ`852 }/o|/g"D{ozg"D{Oz(>g~1w6o8<2oY8)ͅ+8w+6'*8+T*`8)+͝&~("#`8͑,#`8(#ͬ,+8)ͅ+-ˮo8 o8o87͢"%$6x6z"(D+<6x?~x?(O`,ͧ& 1#6&͑,*&%F&ͬ,/*&$F&1#&- ç&ͅ+K8͚+)>o8͑,#| 5$ J-ͧ&~@n(K8# ~##-~X,8w###6&V$~o8)(*o8$  V$o8O-`,/G-n&)))))}o-D()= -˾##6#6#y=(n&ͳ,+R8 s#̓,(r#ݯ->###> wͧ&K8## #˿##-~o8)(BK8͚+ @$% 7ͅ+82ͧ&͚+ ( K8 -X,8###w&-˾o8$-n6l-~@K8#M&+ͬ,Nl6l1&ͅ%ql͘,X&1&v&(c+)8:!"D-! b&+b&#O`,/ݦx_{(*D|g}oR0+ͬ,1&*&z&F&+8 v&&+ͬ,-͝&~(9x(((( #&(~(Q(K#&(`,/O :#˯~0+~lM& ͑,[&Y^( >wAwB~l?Å%O?^CVDD+,( ~l?(+sCrDnEfF|!uEtF~O*D )"DYD+=) ͢'͙(D~#͛4O ?' +  )###4y, !+++̓( y,/OG(6".--~-8=)))0̓,(r+sJ)!DD~#͛42Dͷ(!Dw#r#sZѯD ̓(!DRDM!x(6=8u't()ͷ()s$r%w&-G)y,-ѳ_-N-`,G-<8= K8 ̓,( ^(#Vz[[-([#~([͸-~1w#~#o8(6~#v-(< Î~#2h)Խ)h)ˇԽ)ͳ,+R͑,:bk##B8B0! <ͬ,ͧ&{_G~  (w&ì,x-~ ##~Z~ =K8#$~# !* # yDIRDSKD+ͅ+++ 6 #6#6#6#6#6#&w+6,++*6ͻ+ 8(6&,+ ͳ,+u)~=w> O6ͻ+ (6&^J){ +0%͝&~( ,3,J)~86&D++͝&6&>7͝&~(0- ͑,+0!͝&~ - &ͬ,͝&6#>7w+~͑,+͝&ͬ,~  N###~< =y >ɯ~#͛4_!D~#38:Do:D>7 ~/ͻ+ط +,͝&#<_#{ x7NF >8= ɯwAwB,,Rͳ,+B0,Rn&-)= ͑,#ì,-! ^#̓,(V#z)-~?(w#w#wͧ& ɯvy,O̓,y(-G7~=~ =nAfBD+!( ~l?(++uAtBnf!D8~1w=~=d8K8D8~1 ~@Z~(w@>d8~1=w\^1;G)=8s#r#wK8u7t8K8u9t:Zv 9~1(Zn ,w@0ZZZZZ:Dw@:o8w=>`8~1w[Oz<(!Er7Oqn7f8|>-#N#N#Fp+q+q-#4#4#4K8~?(=~=l K8 ~    K8~nLfMuLtMnNfOuNtO^PVQsPrQn0!D^#V+R( 7+:D(G72D2D*.:Do:DgY8!,F|`8~1o8~1͛4OF2y<( 1}o|g"Dˀ!Dy<( 1}o|`1^#V!DR$1d2y(#### x u2v Ez2~=1R2 u2~(+11 1Z2u2p(42h $1ƒ0͂2Æ0[Dy38Z2x42=y<(8x(4@(x`` )!D ^#Vz(y2~ p+p!D pj(!D^#V!DR( ! ˶@`Î!D^#V!DR͙1(d2####N#͉2w#~#> ##q#~*8>)~>62˾k2~2p2~w 6!:Dݾ06k2~v-(< +2k2~#w# ut=Z242Î͂27!6!D7͂27!D7z26z287 u+t,   ͂2n+f,~#Û4*DDRK8Z~(1͔4f4~wx4w.~K8 ͔4s#r^ V n4~0>`8w6~8&4=t4N F! ~=38qpn f!͘74^V~F?3?nf| )R0=T3 =v3:!R0nf NFq p utsrNF nfR0; ut43ѷn f NF DM!Rut4nf#~wnf^VRx4~v-=<(͘7~=4%ut ~_!D^#Vz %6x4 ~v-( Î͔4r+ss r   6~_!E~~#w^#V^ V _! E~Z*o8u1t2:LEd8K8^#V#~#4W~4_*  ;G 4d84#w ;x2 K8q#p#z5w#{5w 0 !!!!K8|<("ME*MEY8:Dw[o8o86/Z~(w0!.u1t2!Y8=8MDK8R8o8Y8s1r2q/p0`8U6 0 ( ( ( ͮ5d8~1O!OE 0 ( 6~G 54ò6U6d8N1ò6~1O<(<(<²6 P6P6U6d8K8:PE~#ͮ5K8o8P6d8K8|<(}2PE:PEd8K8^#V#~#foz~#ͮ56c6KTÈ6P6 o8o8TP6:TEo6:YEOĽ6o6O:UE:VEʎ:XE(:WE ~YwYo8Yf(o8 ~;=_!QEF#^#V!`E7K8|"^E!\E57[`E!`ER(^#V#7##~6*ZE#"ZE:\E*^E+"^E|!\E4SdE!""fE!""hE6# x {fE*hE*dEM*fE~#<(=7 ~# ~ xD##>)))))))';7;7d;7 ;7 R0y 0OͲ6N#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r8N˹Ͳ6~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!o8Rog_8;;| 7{_@( (M=(J_@!E~ 5_@:E_@O8_@:E_@_@!E~O_@~#8 !E69!E87sE~(=(3=ʬ:=[;=(m> 2E9 :Q:> 2E9 6:Q:> 2E͔;¥::E~ ˟~(2E~G; ; n f "Enf +"E> [;6 ;; V:EO:E_(2ED< ; :E :E :E <~0O 2ED<~<~3<>2ED<<~3<~>͔;>/!Ef>2Eͣ<> !<6> D3<_!E!E"E!"E!E~> <:E$2E(2Eo8D2Eo8ͣ< !E6:E>  sjE1E 2E:E=< :EO:ZE2E02E2E:ZE2E !E87> {jEM> > < ^#V|< n f ^!E<`M5=0M?5=(50=0M 5A=M;5R=(5c= (>t=4M=M= M=M=. %>=4M=S(>M=           !E6V>!E87sE~r>=ʚ>=?=ʦ?=>?z?> @*EF "EE? >?z?>0*EF "E@E? ?z?> @N@E? :E(T@{Eͦ??z?*E:E>P:Ew(y @>N?>n f "Enf}|~2E~2E2E!E4!E5?:E'''G:E怰G:Ew x@@:EG:E8 :EG_>(˘N?u?:EO!E ~(6?T@><>N??u t ~''''!E_ E>@:Ep:EwG@/@63@!E6!Ewg!/@7!E878{( A=(.=;A=ʿB=B=B=CxKF*E(KF*FxN>x 3*F|(+"F*E~#*E+KE R0YPSE!F4!F6*F|(+"F*F~#*F+KF R0YPSF!F4!F6x> :F@(y>:F@(y>x> )(:F@((yy2FA6! F6(:F@((yy2FA6!$F6>:F@(:F!A7! F87>:F@(:F!A7!$F87sjE1EB]B{jEMG!FnO~(˹:TE *E"E!"F*E[FRSF*Eq#*E+KE R0YPSEF!FͷBG!FnO~(˹:TE *F"F!"F*F[FRSF*Fq#*F+KF R0YPSFF!FͷB=87x!F(!FqyOx:E( Gy2E!Fx(!F~>y(q(Wx(>yQx(>yPZ(Z!*F47>Zf /N/^1!+F(y(( (  {04n6o8DDDD99D>1$8 `E`E 0EEEEËy(χEEEEL`2@FF F F F F&F&F!E!E ",FE*,F # q+ 4F>2!>o>>> >>G^>o8FGFo8o8o8o8o8o8o8D ͔"`:o&###"w:G՘͔ͅ !͔q͌ $! w#w#]Ts#r#s#r# #s#r 9*|Ô!! "* # q+ :=o&͔ :a(G!:b(G!12)͇6̀"͎o >2!>o>>> >>G^>/͗////*g"i"m"o! }2!m" ! ! *"""*""" D!" >G>> >d !%":"2G:2>sX{T"Z*Vu:b4*Z{Xɷ( ʢ L2c͛( :c.4/k֯ɷy<=(J=(M=(D=(G((9=((t(s!(tL2d"{(8:do <2doĆ͆͘>Yf { (͘i(:(K (!{ 0 Y6U4R////(7=(:ȏ4ѷȏ{<({2fz(!2e:I2fz :S\S^2d4x >@/!d6 *T| sT"V{T*V6;V4_4$n.Ͱ 4((ͰrͰrͰ(İ:G:(G:_:W4^{T*V44{T*VǑ!b~6İ/ڷ p<(Ͳ >u>2!"2P!O"Q ..O24/*[RR!!"\"^ZYf 4,>u/4.Ϳ:e_.:f_ .>@/!K>+r+s+w"2:/ڷ:b*##R>2b*[`R4*\|ʵ*^|4{X*Z>'͐͐d͐ ͐ R0y 0_. .ه ~( =(=(:XÉReaWrit Not read error, Drive:~AO~(D, Track:nf`, Sector:nf`^Vz(  -` (Retry,~( Ignore,Abort)͘˷(ͷͷ O:X:t=~ʵ:i<õ$nە/ 0:y0A:M g!~(76A(0͜*##~#2~#2~#( OS!~6 [ #~LO#"S 6}*"S͡S :3 !;~ 6C#6O#6M:A(:?P2<"=K:fP!\MMXͰ(͡(\͘Ͱ( ͡(l͘* 8 {< 0O{=ր2yЕە:2=2e:A( :?P2f* 0ЕLC:2 :( :<^!2S#"S|*S+|:~;:7~7#ٷ# !"> > _::  >u ^#V#~#foM!"Mw1w2 !#`8B( (87(!.(?:(B!+8!(/ 8 $kb 8 !!"!>(G!#~#08:030O:1<(>21:/G88888 0 2/x=("A8Q0@O:" y2":1= =21)(:.*(w#6?# (8=(,( O:(yٷ | s1r26#`b6#6 #!~(# m (!V:w+ ^qͰs#r~1< ~=2e~@2f |(/~ N#:0O[ySS!61A͘͜=(@M(~( #! #####:w#:w#qy(#*!W͹ٯ!6!"M!W^#V+R*|:>2:[͜!!Fˆ>N x = :|͜/!ί>uu!~1 ˎ:<=_uͻZu~ ʨ|4a4ZZ~( Zw(Zow@Z(Z~(B(( !(ѷ(#:G!~# ~(###Ym66m~Zf(!0!R,0O N#Fx( x(!ͥКmnf u t U44:Jw[6@Z͆| ;!!׷ bujtk:wN!" ~<(.^%V&:G!~# ~###(N !2<(wË6~| ~Yw#~o<~(  !uetfneffnjfk44Y.4N! ! ~( ͊(ws####^#Vz(hs#r!!~#w@~w7͘04͕֠6a! 6ʠœ!w#w#w͕~(<=( =(,6HOaѠ!͈͕~=(֠aʠ AH͕6a!.ѷ !!4 #4 #4Y8aѠ~(.4Ha͘å( N! p>..("/">/#~[("/"y }o|~[{ozg}/o|/gN#J~<~0w0Oͅ> ! z<(ez<(=(= {(wz  h^#VN! ɷ( ͊ #~#fo!!O !" ~N! 4!"(${24(:[}o|g"*["}o|g)(>00W4[4æ!~!j~#ZZ!9u5t6M/ͻ ף~.ZfZ ~.ZfZ" n/f0* ڣ"u/t0u1t2t.Zu Z*n5f6Zf 6.63n9f:|(Yn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!6.͎~/Zf !Ӥ,!0!a08h!  =jO ^#V|!'ˠ-ˉۏM^d+ۥoܦI K nXH#h7_vj}ΈbՅו>H ZʖR̰ӫwŐ¢:Q*juршѐћѣѳu/i4$Nӭ([(5Nӭ '  ~(t ~< ;~w[>Zn~@'́ ͧ[F[$gͣvN++~˾>e~@i(6@w@ +;[$u1t22Ӷ@m/$ͬ͝7 ~? wl'=i #~@ w#ɷ$QG͸9}w3}oӶΰZͥ8͇[$>(N 1ΰ "ZVġ 6 8ΰEZĀ Oy (0N\F\~3  AP>84 "ͣ ,p ӭ> 6 4$F\l~3 $>8m "ͣ ep Mӭa ; Cº? :4ͣ -p ӭa 6w36$'́Ⱥ4~ >w##4<(7#˾iN (ӭ ͞   #˾a o[>$(( ͥ8h[$(ΰ* ,͸~x ~w(x=(#?(t ͂B 4ONxFzɬpz~x?(͇/wxӶ( ~x?}\  ͥ8[$>(c& #ΰ# ˾x880#[N( w \%͹F\͐~3 ȷ8( ӭ> Y$%͹F\Щ~3 ȷ$ڷ(ӭa> ͞$º?w3~iw~hw ~gw'́7p~wi#~+w#~#~G~#O>>~Ox ##yͣ>7p##q= ~wg~whӷ$'(swgwhwi~@ ΰ( w3("Zn(:~@(46@ +ΰ ~ nˮ((&(w@fi^hVgX=(n&ڶG)MDa~g8++~h8###~i8~wg++~wh###~wi~^##Vg{怄O>G{GzGz_>#q#p#wHFN8͜~8# ˵ s1r2ڶ~w/~ Fnf~w1~w2~w/~w0~ ~1[42()~1ѷ 52 }/o|/g"{ozg"{Oz(>g~1w6H<9oFͬ8͞6N8{ Fİ~(, ͸B OӶ 8'ͬˮ> ͷ7ɬ;6x6z(k<6x?~x?(O͇ΰ X6 ͸Q;mӶ/Q mX  ΰͬ >(͸#| 5 Jΰ~@n( # ~##~8w###6 }~\(*͐###> wΰ ## #˿##~((B @; 7ͬ82ΰ ( 8###w ˾\n6l~@ #t+ӶNl6lXͬqlͿX͝(c)8:!"G! ͉+͉#O͇/ݦx_{(*G|g}oR0+ӶXQz8m 8 ͝8Ӷİ~(9x(((( J(~(Q(KJ(͇/O :#˯~0+~lt ͸͂Y^( >wAwB~l?ìO?^CVDk.( ~l?(sCrDnEfF|!uEtF~O*G )"GYk= ɱ'~#O ?' +  )###4͠ !+++ͪ ͠/OG(6"~8=)))0ͪ(r+sq!BF~#2'޲!(w#r#sZѯ' ͪ!CRDM!x(6u't()޲)s$r%w&G)͠ѳ_N͇G<8=  ͪ( ^(#Vz[[([#~([߷~1w#~#H÷(6~#͝(< õ~#2͏͏ˇڶ+R͸:bk##B8B0! <Ӷΰ{_G~  (w Ӷx~ ##~Z~ = #$~# H # yDIRDSKkͬ+ 6 #6#6#6#6#6# ͞6>+6 8(6 > ڶ+͜~=w> O6 (6 ^q{ 0%İ~( EZq~86 kİ6 >7İ~(0 ͸ 0!İ~  Ӷİ6#>7͞~͸İӶ~  N###~< =y >ɯ~#_!~#:o:>7 ~/ط >İ#<_#{ x7NF >8= ɯwAwB.>Rڶ+B0.Rn&)= ͸#Ӷ! ^#ͪ(V#z'~?(w#w#wΰ ɯv͠Oͪy(G7~=~ =nAfBk!( ~l?(+uAtBnf!~1w=~=$ ~1 ~@Z~(w@>$~1=w\^1bG)s#r#w u7t8 u9t:Zv 9~1(Zn ,w@0ZZZZZ:Iw@:w=> ~1w[Oz<(!2Oqn7f8|>#N#N#Fp+q+q#4#4#4 ~?(=~=l  ~    ~nLfMuLtMnNfOuNtO^PVQsPrQ~[(  [~(  [~(>>O~YwYI(( (!~((Gy( ([f(X>ͷ~Yw!1׷#bks#r#s#r#6#w#T]s#r#s#rҾ~I4I ˾!Q͹羯w####~@(n( ~#=!~=<I(v Xxˮx˶͎׷ nˮ͞[n6!"LM(3~` &eѷ(+!~( }ͣ͞SLX[Lz( >>!À!"L~2N#˾##~2OM(@:N0 ~2N"L#˾##0~2O :Ow6#  X*L|>I(Xˮỷ(͸(ỷ(͸ ˮ4N##Fºn#~ ##~++ͣq##pӭ #~IҾỷ}n9f:w9w:n5f6!9u5t6~['̧w[u5t6u9t:͞ҾR ^#V+˾͘͜5I#####~@~#w@N1F2u1t2q1p2w@羯NF /~͞I( ~ X ++++~IG> 2KҾ́پO!Qa!~= /> 2K!Qپ!QŔ I> >2K!QaāپҾR ~I(پ= !QR~@O(n( =~=<:KG#y ( (/((?($O~?(O͇/O ï/'́$͹F\j<(@9 GͰ A! ׷ 8####DM%#~#~#~`iq#p#q#p͹͹_(%ӷw3~\<(G͹^#V͘͜ȷ#~#~#~X͞Ow+w+wy͞[^[vI((_ ͪj( X>[v( xͪ$'́$͹F\9 j$_( ӷw3ȷ͎ ͜Ø͞[^_ط( ӭ !>#~##<ɯ2Pͪ(+####DM~## 2P# # # /!P4ͯ͹DM^#VB'~=>sJrKnJfK^#VuGtH####+nGfH̓͞ѷ̓͞·ͦ ȷ(G#^#VH͜Øuͷͦ x;>$[F$!xʹ## (^#V͜####͘^þuͬѷ>$ͷ!N#F#~#foB8;ͦx>$[F$!!xͦ!^#Vr+s## ($!ѷ =`iͳ##~#+< w#w+<ͩ[ !~շĎw3ʹ>!'x!'͎$( \ѯ!^'V( ~##(ͣ6##6ӭ6(!\>Ͳ)6"(\N#Fp+q#~q#~p#~6ºw+w+w~3(N#F p+q̓͞·/$> 2K[U!UR͂^#V #~!N#F###~#!^#Vr+s~2(/$~1 ~1H ~RwR~SwS}o|g"Y$ ~1H÷ {/ݦRwRz/ݦSwS*Y{/oz/g"Y~1i{ݦROzݦS*Y[CYwRwSi[*Y}O|>~R/O~S/GͶ!b^#V+R( ͘͜:[(G72_2\r:[o:\g!| ~1H÷~1OF2y<( T}o|g"`ˀ!fy<(T}o|ʨ^#V!fRlͬy(#### x ͽv E~=N͚ ͽ~(+ \͢ͽp(|h $\[`y͢x|=y<(8x(4@(x`` )!j ^#Vz(y2~ p+p! p͑!f^#V!fR( ! ˶@`õ!f^#V!fR(ì####N#w#~#> ##q#~*8>)~>69ȷ˾ͳ~2͸~w 6!:[ݾ06ͳ~͝(< sͳ~#w# ut=͢|õ͜!6!bù͜!fùxַ͎׷ u+t,   n+f,~#*ffR Z~(1ͮ~ww.~  s#r^ V ö~0> w6~8n=ʼN F! ~=\8qpn f!Xg^V~F?nf| )R0= =:!R0nf NFq p utsrNF nfR0; utW-ѷn f NF DM!RutWnf#~wnf^VRɷ~͝=<(X~=g%ut ~_!j^#Vz %6ɷ ~͝( õr+ss r   6~_!~~#w^#V^ V _!~Z*u1t2:$ ^#V#~#%W~%_*  bG C$C#w bx2 q#p#zcw#{cw 0 !!!! |<("*:Jw[66/Z~(w0!.u1t2!MD /s1r2q/p0 ͝ 0 ( ( ( $~1O! 0 ( 6~G 4͝$N1~1O<(<(< ͘͘˷͝$ :~# Ô͘$ |<(}2:$ ^#V#~#foz~#ͫK͘˷ x'T͘˷:ͷ:OͷO::ʵ:(: ~YwYYf(ͣ ~;=_!F#^#V*5 K#N@F\:w@6\NZZ[TA(Zp\q@*6(#6+>_~ (C~(ͤ"*ͤ"֗> ͜ |(m~@2 C*|( * ͊! ("6!% "  !wT!ܗ> !ù####C~<*####a<͜Ø*|(aZ*|Z0++++Ø~@:w@Tw@*|!^#V+R!""F#6#O(6 0(. (/(2(.0q#o&q5Yv(^Oз͐Y<ʵY6<Yn(YYv ;? ON<͐YvYn;ͲV< b;>( G&#6ͲNZF\Z6\TA(Zp\;Ty=g:fob#n@:fw@u@>_6|͘!uUtVnUfV|͘!uWtXnWfXه Spooler error (Ignore, Abort)͘˷(ͷͷ O:9=:1<ͮ ͮ ͮͮͮ ͮͮ N1F2˸!F?~ :ͭ!m++++'#!{N#F!{B( !/  H!{͹ R(!V ͜>՘((N!wN#F!wB(!! # ++ c!w͹!mw66S!{N#F!{B( !/ !{͹ !^#V#N#~#fo #H!˾!!F#~< +++w8 !Vԯ ~<(T:>͑!6!wN#F!wB(  !{N#F!{B(  ####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++͜kb!~#<(=(#F!:~#(###= !^#V=7~#fo!!"Sy2 # # !w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !e[eR(͜!c~(:a0 !a(B!eù!i[iR(͜!d~(:b0 !b( !iù4!È" "~02**u1t2:w0:w/!4~<6#4~<6#4~6[!RS |( ͔ b!1!ͫ!^#V͘!"ѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͜  ͳÎ x ^#V͜!ùs1!v ( e{M!>M!"{Q˾(k~˶!!~˾!"54> |(* s#r!"s1*!*!9@[!R(^#V###*|(!ͫ~=w!͜!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++͜!͹!͎ͫ׷!͜>35##ͳ3~4##^#V͜y ####*####v ~#fos#r  "R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['͜*[R>B"'s#r# "!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q͜͜*+F+N+V+^ s#r#*ͳ!^#V!R*R +V+^##͜"~#<(=Q ~# ~ xD##>)))))))'~~d~ ~ R0y 0ON#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rN˹~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!/گRog_F;;| 7 s1r2 :=e~=_b|۷ w ?!"OcZ((*ORSO( *Q"S6 *S4*Q6#"QcZ(s*S~#"S(bͲo&=)u t!X^>V?sr8W*+++KRB8HR8Ds>r?~$w~%w~&w69ȷµv(o͇oT "Q"SE !?!$T:$~12!b}(7j^=b$!b|(7j^=b=)!Us#r#^=b+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p )0 bN 6#ʟʬʴֆ! ///////ړܙ È!È*d:w3~12f:f {( (N=(=(g=*k|*oN>Wݷ !x*k+"k*o~#*iKg R0[iSo:q(:r>*q#"!r4>͕ݷ!x:r!͜!Î {( ʉ=(.==E=o={=ʝxK *(K"* xN>x 3* |(+" *~#*+K R0YPS! 4!x*"|(+""* ~#*+K R0YPS !$4!'xx> : @(y>:&@(y>x> )(: @((yy2 !x(:&@((yy2%C!-x>: @(: !͜!Î>:&@(:%!C͜!-Îs1͉{MG! nO~(˹: *"!" *[ RS *q#*+K R0YPS !=G!&nO~(˹: *" !""*["RS"*q#*+K R0YPS$!'==Îx! (!&qyOx:( Gy2! x(!&~>y(q(Wx(>yQx(>yPZ(Zs1!34~<8681{!5X~{((5n:4O!G~{((5>>>:EO!FqDH!Hx:F>!D͜!HÎ!x?!͎~8: :g(!6> !͈> ~6 =F~!W + ##q!6ct(N o(4:O!~_(w8 t : : : 0O!k~_#~?(+#u t >s>2!V~w# ~<=w~g vOwOG~a(x(?i(h '2W j(0=< $> < ́z < > GFx͜~2~2!@F)+"2:3 <̾ G::W!Z ˞:R( Nz( F(r(  98r Ob ~( (# Ny<~W|2́͟!w*["!4#5:ܾ*!͎!͈!x"=2{>F2!w#~( wxw >!"!"!~>͜~w_(2!!z6ѣ>>2 !x:> >=  > > !R_+~n f ^!N~n f "s1 !w#~=V(w#:w#N:w0+6!͎> {M`M 0M(M     P! x! ͎~2=Q= ==p>2ͤ/ w w ~G!M_u t >2ͤ( !. >> 2ͤ( ! >ɯnfCCCCCC^VC|2}2~2 ͷrn f "~2R >@QR(>Q!ROy@~P#*RO(y ~P#PORG(P y >*RO(y Pw#}o|g @2 @2 @2 @2y(= :G=2FZ!xx'F Ͷ8A >y >y &+~(!:F8F#( :D=2G2D:D:D8˖ˆ^˞!Î#####~=+45ʣ!~x2E,V´n(v~( Ͷ _ >y˦:E!x,ˆf \>yF JͿ:E8~(˾˶ˮ:E=Oy( >y!x'!~ÎͿ,Ϳ:E/ˎ˶˾F4:#W>/~@@F~<ˆ:#g."3{yy! >y!K!r[tC{ N:"=!D406'FN x_(ˎ!Z͜!xÎ,x_ !͜!Î>yyxG 7 x 7x  x>x =_!X:w!X:<:D:E_!$N !H_F6!h1>!*[C{ 1>^G>>>>!">>>!>!F͕!˾~(!͕@p#: (![S+~!S^#V#N#F +*"> > :2MS 2bu;33794YLǑ~0=(M=([͑ N #u$t%q&p'ѷ  V7>n$f%N&F'͵ n(f)Ͱs(r) wO B7Znfu]t^YV("~?(=O! ~#V?ut?^V N-qZN( ^aVbNc~ds r q w ~ʢw^#Vz(0##~ !#~ #~ #~ #~ #~ 8!׷wN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NF N-ѷ~ ([ S ~w^V YV ~͝ww6 6nf NF(,õ#+NXNXXbbnZkCx͈w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd͆͘6/ + $u1t2~qOwy$>/>/>~\w0~0!8MY~2<($=(!=!"84(2N]F^B % q2s0 ~4(=O!"2~4!"8`q4N]F^͆8I(<>߷w#:G!N#F< 6/u1t2 ~.>###6.> q#p~2!8q26.>g !t.>/>ɯZN~0(!=(!=(!"=(60> ͆>~06.>8(/ɯ2~2/~1!߷!/~1q1߷!w#6~#͝(< õO ~<7ȯ~N˹q##~#fo͆>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@Py(=1:=":!xN :22::>!x#~=2+45"n(vʸ*~( ¸>y^8I>yx8@>yˎ:!xN !!͎:~(˾˶ˮ::!͎>ˎ˶˾~ 4:W~g(;>y>yˎ:!xN :!͎ׯ:!͎>:=!406fxW (>y*ͨ8. +F#(% >y!:͜!ÎvR8:xG(!͜!Î>y* F >yx0:xG f>y:g."{yx8/>y[ C^8!>y >yx8>y!͜!Î:>y^>yjjjxG(7ɯ̈́̈́̈́xG 7͜͜͜xW(7ʹʹʹxW 7_!:w!:}!:::_!N!_6!1> !F@>@`O(> > >@`O > `W(> `W > `G > > !`G(`G > @@p#> > : (![S+~!E^#V#N#F +*"E $ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}2WWCOLDSTRTAUTWARMSTRTAUTOSSLAVE SYS,QQUU bbffeeeee1$?  -PRINT-?000$$eeiioossww{{y//@K@s@))&// JJËy(χ Advanced Digital Corp. Super Six up.$ prtvxz|~ABCDE zz~HIJKLMN 37;@DJD@WOZ_ekoúý2. %YYY+Cg CiPYL!"_P=)!Kgx( 0< [i0<"2k`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $@s@))@!$\c"IG:o&###v"w:x=o&M :U(G!v͘:V(G!v12 ͉ͬͬͬ"HͬͬÈ>2ͣG@ì^G>>>>O! s#r+}! }2!" ! ! *\v"^"`"b*uv"w"y"{D!xͻ:xG!|:(####+:w>!û:GM>sA{="C*?ͪ:Ki*C{Aɷ( ʁ2L( :L ͬ߯ɷyq=(J=(M=(D=(G((9=((t(s!(tʁ¯2M"{(8:Mo <2MoĻͻ>Yf { (i(:(K ͊(!{ 0 Y6U4Rͳ//(7=(: ѷ{<({2Oz(!2N:2Oz : SESG2M ͬ>@Ĭ!M6 *=| s="?{=*?6;ͪ  $n ͥ(ͧͧͥ: G:(G:_:W ͓{=*?  {=*?!K~6ͬ ͥ<(  >ͪ>2!"2P!"Q ʇO2 ͼ*[;RJ!!"E"GGZYf  ,>ͪͬ :N_:O_ >@ì!>+r+s+w"2: :K*##R>2K*[IRWi^*E|*G|i{A*C>'d  R0y 0_ S̈́~( =(=(:þSReaSWrit SNot readS error, Drive:~AOu~(DS, Track:nfS, Sector:nf^Vz( S -S (Retry,~( SIgnore,SAbort)Ϸ(22͈gO:đ:=~:<$n2*/ 0:y00A:͂ g!~(76v(0*##~#2~#2~#( OS6!~6 [ 2#~ʁO#"͈ 6Ͳ*"^!<2#"<|*<+|:~;:7~7#g# !"> > _::  >ê͈^#V#~#fo͂! ͂ȯw1w2 ! ͕08B( (M87(!.(?:(B!08!(/ M8 $kb M8 !! !Ö>(G! ~#08:030O:<(>2:G88888 0 2x=("A8Q0@O: y2 := =2^M(:.*(w#6?# (8=(,( O:(yg͈| s1r26#͕͗6#6 #!~(# (!V:w+ ^qs#r~1< ~=2N~@2O͈|(/~!N#:0O[yS͈!6fvr(@͂(~( #! v #####:w#:w#qy(#*!@6!6!"͂!@^#V+R*|:>2:D!!Fˆ>N  r :e/!ί>ͪͪ!~1 ˎ:<=_êZZ!9u5t6ͬ6ì~.ZfZ ~.ZfZ"͏͈n/f0*ͯ"u/t0u1t2͖t.Zu Z*n5f6Zf 6.63n9f:|(n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!͖6.2~/Zf !,!0!608h!  :ʸLO ^#V|mOnΜ΢Ҩkqr̬x̬*8B̝ȁͲAΚj`s]g̬εq̬(ȬEҬ .ά!Á~1w=~=á͈Á~1 ~@Z~(w@>á~1=w\^17G)zs#r#w͈u7t8͈u9t:Zv 9~1(Zn ,w@0ZZZZZ:w@: w=>Ý~1w[Oz<(!ͯOqn7f8|>5#N#N#Fp+q+q5#4#4#4͈~?(=~=l ͈ ~    ͈~nLfMuLtMnNfOuNtO^PVQsPrQZ*{u1t2:á͈^#V#~#͠W~͠_*  7G ;á;#w 7x2 ͈q#p#zw#{w 0 !!!!͈|<("*Ö:w[ͬì6/Z~(w0!.u1t2!ÖzMD͈͏͖ͬs1r2q/p0Ý 0 ( ( ( qá~1O! 0 ( 6~G ͘4uáN1u~1O<(<(_~ (;("*" > ͈|(m~@2! C*|( ͈*͈!͓ ("6!%͓ "͈ !w)ʷ͜>Ý!6v####;ͷ*####ͷ*|(*|0++++~@:w@)w@*|!^#V+R!""F#6#͊O(6 0(. (/(2(.0q#!6 ~<(@w)NfXJ9< >! 6)N 'Y͌>o&q5Yv(^ӷ Y_y͓<ʊY6<Yn(YYv Ͷͺ N< _yYvYnͶT-V< 79T>( G&#6->NZF\Z6\)A(Zp\N9>)Ny=rg:Oo7z#́Án@:Ow@ru@͌>_6r|!uUtVnUfV͌|!uWtXnWfXS̈́SSpooler error (Ignore, Abort)Ϸ(22͈gO:=:<Ó)3Ý)3Ý)3)3)3Ý)3)3ÝN1F2˸~/Zf @ʬ!.,!,O ^#Vz*y*Yz( !l7=́շ 7w.w37gͳշ Y׷S֯~/Zf(!1!aO ~w!. ~@Zn( Z~(Zf 6^(#͈~#?(~#<#~[~%wf(z~ƀwZf ~/ Ô ͈. #n(s1r2###v( ^>V?#utڷ^V N-qZN( ^aVbNc~ds r q w ~F^#Vz(0##~ !#~ #~ #~ #~ #~ 8!'vN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-ͼ۷~ ([ S ~w^V YV ~ͼwM6 6nf NF(ÊØڟ؟؟ڟ؟ڟنffړړڀkـڀnttttttt(ړ^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd*6/͈́J Cu1t2͟0~q́Owyġ>̓͟>͟>~\w0ß~0!8MY~2<($=(!#=!84(2N]F^B % q2s0́շ ~4(=O#!ͯ~4!8`q4#͋N]F^*8I(>w#:xG!{N#F͏͈6/́u1t2͖ ~.>###6.>+q#p~2!8q26.>ḱg !t.>͟>ɯZNn~0(!=(!=(!=(60>͈*>~06.>ͥ/ɯ2~2/~1!!/~1͢ڷq1!w#6~#ͼ̷(< ÊO ~<7ȯ~N˹q##~#fo*>~w !~#<( = (#~w :xG!|~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!|F~ ̓!a|++++'!oN#F!oB( !s  !o6 |R(!V >ͥ(N!kN#F!kB(!! # ++ cͳ!k6ͬ!agM66S!oN#F!oB( ! ͳ!o6 g!^#V#N#~#fo !˾!!F#~< +++wͿ8 !V̘ޯ ~<(*>g!6Ϳ!kN#F!kB(  ͪ!oN#F!oB(  ͪ####6#K{q#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kbͬ!~#<(=(#F!|:x~#(###= !^#V=7~#fo!"sSvy2u # # ͞!sw#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !Y[YR(!W~(:U0 !vU(B!Y6!][]R(!X~(:V0 !vV( !]64!͈|( ͏Ý7!1!(!^#VF!"vѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͏͈ 0 ͈|Ö ^#V!6s1 !v T( {M!M!"{QT˾(T~˶!!~˾!"54>͈|(* s#r!"s1*!*!9ͽ[!R(^#V#b##*|(!(~=~w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!6! (!>Ͱ5##0Ͱ~4@##^#Vy ####*####v ~#fos#r͈v͖Ý"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B"\s#r#͈"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*0!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OuN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:ÒKx |6|6!|\6ѷg|\g6[!"* N#Fx !*SZ&̀Sͽ*ͽ"b||1G*$>*|6)*|6S6*:د26xp6x!!" G 1*!:ZF( *: z!{=_ZF( : ({2s\>ZF(: :~\gͳշ U KY׷ E~. "v( p0wSv(͏ͳVT6.gw0ͳշ > 4Y׷ .Sv(͏ͳV(T63ó~/"gG>͏ͳѷ Iͳ  %5~<w~/"Y׷ S w3w3~/"ó:á~12!7}(7j~Ö^=7á!7|(7jÖ^=7=)!.͖s#r#^=7+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p͈)0 70͈6#ʁʎʖֆ!c ɬu{͈!*=:{w3~12?:?x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2gg͌!o(:@((yy2͌!>:h@(:g!g!o >:@(:!! s1 4{MG!hnO~(˹ͼ: *`"b!"d*\[dRSd*`q#*\+K^ R0YPS`f!i͑G!nO~(˹ͼ: *y"{!"}*u[}RS}*yq#*u+Kw R0YPSy!͑= x!h(!qyOx:[( Gy2[!hx(!~>y(q(Wx(>yQx(>yPZ(Zy(=()!h@p#!˾v(˶! !!~( !hF! > s1 > !! {Ò*y #"~wN! ~<(.^%V&:xG!{~# ~###(N !ͯ<(w96~-| ~Yw#~<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}@@COLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000YY]]ccggkkoo @  @kkqq|| ARROW PRECISION PRODUCTS Banked Super Slave A ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>s1!>!>!"!"!" !">ͻ{s1x>{s1>{s1ͻ>{vD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE I SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (H-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( U(Å~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. #n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(+F+N+V+^ s#r#*(!,^#V!,R*$R +V+^##"$~#<(= ~# ~ xD##>)))))))'d  R0y 0OYN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r=N˹Y~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72Wi!$"f!x:Z !,/0!08%h!` sʡֆ!r O ^#V|l !! 6 ѷ 'T8 ѷ s͗=(> w.ͳ!:S> *$+++KBRͳZF(!S45(!D(sB15{B:S1d!\D5*>~1(# :S*$+++[R8[R8 2S:S>Á .6eGkYi 00 $< V\nd2*\WD d: *\D5 d!EN5*\"d*d"\:Y<\dD!D[T5!D5*\DS\5!i !k!Dd*\i5>o>p2Xͬ*`R0![`"`SrKB5p:XOdK`x ``!D5`@ѷK5`@K5[F!H"F*D N#Fx !H*\DS\5ͯ5>ldS\͡*\͡"\F||1*j>+*\| *\|DS\5*\D5:Dد2Y\T\!!"f+ 1*T!Ϳ:V!"\*`![`Kf5*TD!D[T52YCZS\"^*^[\KZ:Y*T"T!ZF( !D:S STe>ZF( *T:S ^!{=_ZF( :S({2Vs\>ZF(:S:V~\Kܷ͗ UͲ K=޷ E~. "v( T0w7v(s͗Vʹ8ʹ6.ͳKw0ܷ͗ >Ͳ 4=޷ .7v(s͗Vʹ(8ʹ63×ͳ~/"̼KG>s͗ѷ I͗ Ͳ %~<w~/"=޷ 7 w3w3ʹ~/"×:Å~12!}(7jbz^=Å!|(7jz^==)!tzs#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pl)0 l6#erzֆ!G ɐY_l!*:w3~12:x 3*|(+"*~#*+K R0YPS!4!*|(+"*~#*+K R0YPS!4!x :w((/y>:w(/y>x (W(:w(/G(yy2p!W(:w(/O(yy2p!W:w(/G:!!W:w(/O:!!>P!F ˆ>@>@>@W l!nO~(˹: *"!"*[RS*q#*+K R0YPS!G!nO~(˹: *"!"*[RS*q#*+K R0YPS!=x!(!qyO( ( (>!Y~Oxy( >`!x(!~x>( y( y(x/O>(IA!|(64vy(=(C!> `G(`G @> @p#> > !˾v(˶!!!~( !@>@`O(> F> >@`O > !s01R_ 4͕_c{0@6W(T!!> _ > !4~<86͐͒{0v$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}aCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $-PRINT-?000a```@4DD OSSLAVE SYS @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C} CPYL!"_P=)!K}x( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s@1hy>{@">2!"2!"w#Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE I SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (I-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R:\#͸ No drive specifie=2+P(K͸ To park the drive you must be attached to the master and on bank >2P*">2P͸ Drive is now parke;~#_2me 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 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 lik)1! Px 5U@x IE+P(6QtA82 6!gw62 t 7-!` [!A870 0<N=(  #~0G:0( 4(`:_P6utqpP:_2  < `8_0 $Non-privileged user$Not attached to MASTER$Can't lockout drive$Drive to use as P:?$Must be in Bank 0 to do this$Drive not attached to master FDC$Drive type not compatable$Drive mapped$ 0. Kaypro 2 SSDD I. NEC PC-8001a SSDD 1. Kaypro 4/10 DSDD J. Ampro little board DSDD 2. IBM PC SSDD K. Gnat 10 96-tpi DSDD 3. IBM PC DSDD L. Wangwriter DSDD 4. Zenith 89 SSSD M. Epson QX-10 DSDD 5. Zenith 89 SSDD N. Olivetti M20 DSDD 6. Zenith 89 SSXD O. Osborne I SSSD 7. Zenith 89 DSDD P. Osborne II & Exec. SSDD 8. Zenith 89 DSXD Q. Advanced Digital DSDD 9. Zenith 100 SSDD R. Xerox 820-I SSSD A. Zenith 100 DSDD S. Xerox 820-II SSDD B. TRS-80 model I SSSD T. DEC VT180 SSDD C. HP 87/125 DSDD U. DEC Rainbow SSDD D. Otrona DSDD V. Cromemco SSDD E. Morrow MD2 SSDD W. Altos DSDD F. Morrow MD3 DSDD X. Eagle SSDD G. Sanyo 1000/1100 DSDD Y. NCR decision mate DSDD H. Televideo 802/803 DSDD Z. User defined format ???? WHICH?$ 0. CompuPro 8/16 SSDD 1. CompuPro 8/16 DSDD 2. Vector Graphic DSDD 3. Xerox 820-II SSDD 4. Xerox 820-I SSSD 5. SD Systems SSDD 6. Altos SSDD WHICH?$ (" P (8(\ ( (( ( (((S#(( _( ( (   (((  ((( (. ( ( ( S(     ( (: P  ( >P;PPM    HM(y4M     ,MyM(xM    0M(y4M     ,MyM(xM    rox 820-II SSDD 4. Xerox 820-I SSSD 5. SD Systems SSDD 6. Altos SSDD WHICH?$ (" P (8(\ ( (( ( (((S#(( _( ( (   (((  ((( (. ( ( ( S(     ( (: P $(26) $: "ENTER PORT NUMBER TO TEST: ";  A X=(A) (- "PORT NUMBER: ";A;" RETURNS VALUE OF: ";X 2 10 <  $(26) $: "ENTER PORT NUMBER TO TEST: ";  A X=(A) (- "PORT NUMBER: ";A;" RETURNS VALUE OF: ";X 2 10 <3#$` P@XR@@ &@FRA0 :/i.HjgV]c #zux.~e$`8(єP3hh EP]  C$VPͦ" L;Z*PPԐ@Kr@P "7iH`e*QPI4* RphdF"SPՀ!S$u$+v@z ~2I2a^͔ >͔ H͔ H ~( ^+~ ^5:N v  a{ v System log on v Enter user id:v Invalid user idv Enter password:v Incorrect passwordv Enter date::COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1P*B"E:D2Gh8rO:͛(/:͛():͛(0:͛(4:͛(%:͛()4>2Bq8m<2C2C<2C>2Bq8N2D!?`:?G(=[B:DGP:B= *:C($=g.H:D<P([E:GGPͪP:B((.:DA.:C(  :C( :C@. CP"B2D̈́ ̈́ (̈́= ̈́A?:7=2*@~#"@͛a{ PQFCOD Invalid Request  Printing is toSPOOLER on DRIVE to QUEUEPRINTEROFFLINCONSOL"~#.#_3"3D20#):COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/04/84) 1? 1 28_O:XO(/:YO(/:ZO(*:[O($:\O(:]O(% <> >>22!:G([:GP :GP 2"^:Al:(}@:= ͇͕͠Ͷ 8 8 (8= 8A?:7=2*~#"Oa{ QSGBTOͶ PrinterͶ Assigned toͶQUEUEͶ (StoppedͶOFFLINͶ Invalid Requestͼ~#_> >>G^>o8FGFo8o8o8o8o8o8o8Do&<2~:U<2o&w\7̀ Disk read error \̀ Disk write error ͆^~#@s@)) This disk contains two different modem programs: KMDM795 Modem Program version 7.95 for Kaypro KAYM version of AMODEM for Kaypro Both programs are very similiar in features. They will both work with virtually any modem. A documentaion file is included for KAYM. The source code for KMDM795 is also included. The following is a list of files included on this disk: READ.ME This file KAYM.COM KAYM program KAYM.DOC Documentation file for KAYM KMDM795.COM KMDM795 program KMDM795.ASM assembly language source for KMDM795 KMDM792.LIB assembly language library required for assembling KMDM795.ASM Although KMDM795 does not have a documentaion file its HELP command will explain most of the features and commands of KMDM795. BAUD RATE: KAYM does not and can not change the baud rate of the serial port. When using KAYM the serial port must already be set to the correct baud rate. If you desire a baud rate other than 300 baud, you must use either the BAUD or CONFIGURE programs found on your CP/M disk prior to running KAYM. The version of KMDM795 will always set the baud rate to 300 baud when the program is invoked. The baud rate can be changed, however, by using the TIM command. If it is desired that some other baud rate be used when the program is invoked the byte at location 115 hex must be patched to the appropriate value (0=300, 1=1200, 2=2400, 3=4800, 4=9600, 5=19,200). The following example will show you how the make a 1200 baud version of KMDM795 called M1200 using DDT to patch the location and the CP/M SAVE command to save it to disk. This example assumes that drive A contains the CP/M disk with DDT.COM on it and that the B drive has a copy of KMDM795.COM and at least 14k of free space. A>DDT B:KMDM795.COM DDT VERSION 2.2 NEXT PC 3700 0100 -S115 0115 00 01  0116 00 . -G0 Warm Boot A>SAVE 54 B:M1200.COM The commands actually typed by you are: DDT B:KMDM795.COM S115 01 . G0 SAVE 54 B:M1200.COM Where indicates the Return key. The SAVE command must be executed immediately after exiting DDT. ******** Note: you may want to change the name of KMDM795.COM to a shorter name with a .COM suffix so you don't have to type so much to run the program. ************************************************************************ alled M1200 using DDT to patch the location and the CP/M SAVE command to save it to disk. This example assumes that drive A contains the CP/M disk with DDT.COM on it and that the B drive has a copy of KMDM795.COM and at least 14k of free space. A>DDT B:KMDM795.COM DDT VERSION 2.2 NEXT PC 3700 0100 -S115 0115 00 01 *:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/12/84) 1S 22:k(:i2:] :e \!]~!a\ o\ ^ !~#(9(5 0* ( (& %:OG!> 4!6!4} I k͙ͅ :':'_Aѻ Aѻͯ  No FIFO file name specified FIFO file not found File not FIFO FIFO file empty Non-privileged user ~#_K}x( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s@1hy>{@">2!"2!"w#:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/15/84) 19 [Ͳ' Toͫ PSA-TO-MICROSOFT CONVERSION PROCESSOR Copyright 1984, Software 2000, Inc End of conversion ((!6!(C_+(G@(P#(f&(b\(~;ʬ Invalid input record forma͒g>;2 ͒>;! 5 2 ͒͸>;! 5 2 ͒͸[ z(6! F6> (> (>;! 5 2 : * 2 " 2 2 2 2 2 2 : ʝ!   #> ;2 <2 ! 5 6 2 r* #"  w: 2 8W: =(@=($: 2 2 * " ́ ~(JN: 2 * " J* ##"  : \* #" 2 ! 52 ! 4: 8 : * (: >;2 : * 2 " >;2 2 =2 >; Unanticipated end of input fil: Invalid input record checksu* |( 2 > ; : * }\|\ : J2 ́! ! !8. >?% >@w# ! q2 2 2 2 : 2 ! w >;!   !   ́  ~: ! 8ẃ! w#w#w#w2 2 <2 ͗>2 : 2 ͗2 2 ͗ ! F#^: * B: = : P : P: 8>P( * P: P8?: 8>P* P: ( : PO! ~P# : ȷr!5 6`<7 ![R~!w`(}lg g>()= )r! [ R~w! 56! 56  Disk is ful 2 2 :k(:i2 !\< :e!8 !< !Hw#<2< < Can't open input fil<$< Can't make output fil:  : (r<$!< 0: ͙: ͙_͸ѻ ͸ѻ  ^#{( ͇͇͇͇͇͇͇͐͐͐͐͐͐͐ REL $$$ 9 w! 56! 56  Disk is ful 2 2 :k(:i2 !\< :e!8 !< !Hw#<2< < Can't open input fil<$< Can't make output fil:  : (r<$!< 0: ͙: ͙_͸ѻ ͸ѻ  ^#{( ͇͇͇͇͇͇͇͐͐͐͐͐͐͐ REL $$$:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1j  2 2 2 :] :e :m :u !M !~( c͏!M F :l(!\ :{( :y! :m :u ͑:S GT ;(!N  O:  ˎ :  ˆ:\=J_P |7!" *j S R͂͆͆ " :S \ȇ_!~t" !" " * |(J" * [ R<" +[  O~# v* 8" " #" * [ R * |([+" * 2 *R8D* [ R()* B]T+* 2*  * B[ s#rS ßͪ<<<* |" !] ~#?(L:N  EY>2   : (: O: (: ( !N ˎ!N ˆ!" +#  6#m ?  ~w#6#:\2 2 ! ~( !  X:N G O O:M O(H͓! ͨ! ʹ>2   : (: O: (: ʵ  ʉ2 !   O~#  !  ! : _!~ J!~ G:N G O Q>2   : (: O: (: ʵ XS !   F: , !   < FP! $ (0  0  * +" |* #c: / 0:y0 > < < ~#= A<  # #~#< B~#fo;K ))) )K ͈8 \q2 x͈8lq͑! !~! ~*P |7"  ͥ#ͥ7"P | *R  !S ^#"P 6 : : _ѻ ѻ !M Úa{ YN Invalid drive letter usage Destination drive read only Ambiguous filename: confirm individual files (y/n)? Ok to rename  to  (y/n)? rename to same filename already exists, ok to delete? (y/n)  read only FIFO file, not deleted delete not renamed to  File not found Invalid filename 1 Invalid filename 2 Insufficient memory Network error Non-privileged user Invalid u*ser number usage ~#<   _T H ! ~*P |7"  ͥ#ͥ7"P | *R  !S ^#"P 6 : : _ѻ ѻ !M Úa{ YN Invalid drive letter usage Destination drive read only Ambiguous filename: confirm individual files (y/n)? Ok to rename  to  (y/n)? rename to same filename already exists, ok to delete? (y/n)  read only FIFO file, not deleted delete not renamed to  File not found Invalid filename 1 Invalid filename 2 Insufficient memory Network error Non-privileged user Invalid u<|\COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/12/84) 1 22:k(:i2:] :e \!]~(~!~(/##~() (#~( #~( (:O~#( :> > !a\ %\ Hb ̈́͞Ͳ :&:&_@ѻ @ѻ  Message sent to FIF No FIFO file name specified FIFO file not found File not FIFO FIFO file full Non-privileged user ~#_(4 (5(6(2~0q#4:N (y 0 @>^͔ >͔ H͔ H ~( ^+~ ^5:N v  a{ v System log on v Enter user id:v Invalid user idv Enter password:v Incorrect passwordv Enter date::COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1s  222:\ :] :e !Q!~( (>2 :(:O:(:(!Rˎ!Rˆ!" ͭ:RG O E:Q_(>x>2 :(:O:(:ʁ ͭ *#S (=(˾#:\ ͋͒ ; !~(:@~(:@#~(:@#~(:@͛((4 4 *+"|*#å͢:/ 0:y0 > @@*#~#@A@:\=~#foK ))) )K A8!\:k:i2ͷý*j|7"^#^7"j| *l !m^#"j6 :͛:͛_͵ѻ ͵ѻý !Q×a{ YNFRGA Destination drive read only Drivenot already set toread/writread onl Ambiguous filename: confirm individual files (y/n)? Ok to set attributes (y/n)?se File not found Invalid filename Non-privileged user Insufficient memory Network error~#@ _nH((4 4 *+"|*#å͢:/ 0:y0 > @@*#~#@A@:\=~#foK ))) )K A8!\:k:i2ͷý*j|7"^#^7"j| *l !m^#"j6 :͛:͛_͵ѻ ͵ѻý !Q×a{ YNFRGA Destination drive read only Drivenot already set toread/writread onl Ambiguous filename: confirm individual files (y/n)? Ok to set attributes (y/n)?se File not found Invalid filename Non-privileged user Insufficient memory Network error~#@ _nH+:COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/16/84) 1^ 222:\ :] :e !b!~( 2 :(:O:I(:J(!cˎ!cˆ !"*# ~ #(+ ~(~(#~(#~(:cW /G O ':bW(  ((  (  *+"|*#:/ 0:y0 > *#~# A:\=,~#fo%K ))) )K U8\!:k:i2Lß*e|7"r#r7"e| *g !h^#"e6 !bÒ:ͷ:ͷ_ѻ ѻHß a{ ~#'~# !cV __YNL Invalid file name Drive isread/write read only  Ambiguous filename: confirm individual files (y/n)? has attributes: Enter to continue File not found Insufficient memory Non-privileged useriH(  (  *+"|*#:/ 0:y0 > *#~#; ; ;**************************************************************** ;* BELOW IS ADDED TO THE SLAVE'S PAR FILE TO RUN A * ;* PRINTER DIRECTLY OFF OF A SLAVE * ;**************************************************************** ; ;PTRAST = 80,(0000), ; PRINTER A FIRST PRINTER ON MASTER ; 81,(0000), ; PRINTER B SECOND PRINTER ON MASTER ; 01,LSTDRA ; PRINTER C = SECOND SERIAL PORT ON TURBO SLAVE ; ; IF TERMINAL IS ON FIRST SERIAL PORT ; ;QUEAST = 80,(0000), ; QUEUE A = QUEUE A ON MASTER ; 81,(0000), ; QUEUE B = QUEUE B ON MASTER ; 00,(0) ; QUEUE C LOCAL ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ; ;QUEPTR = 1 ; COME UP ON PRINTER 1 = A, 2 = B, 3 = C ... ; ; IF PRINTER IS SPOOLED OR DIRECT ; ; ; * ONLY ONE OF THE 3 FOLLOWING PER DIFFERENT DRIVER * ;CTSBR = 6E ; IF LST'CTS' PRINTER DRIVER IS USED, SETS BAUD ; ; RATE TO 9600, ENABLES HARDWARE HAND SHAKING ;  ; AND DISABLES RECEIVING. ; ;XONBR = 07 ; IF LST'XON' PRINTER DRIVER IS USED, SETS BAUD ; ; RATE TO 1200 BAUD, DISABLES HARDWARE HAND SHAKING ; ; AND ENABLES RECEIVING. ; ;ETXBR = 07 ; IF LST'ETX' PRINTER DRIVER IS USED, SET BAUD ; ; RATE TO 1200 BAUD, DISABLES HARDWARE HAND SHAKING ; ; AND ENABLES RECEIVEING. ; ;PRTMOD = 0 ;DEFAULT PRINT MODE = DIRECT ;PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED ;PRTMOD = 2 ;DEFAULT PRINT MODE = CONSOLE ; ;**************************************************************** ;* GEN FILE INFORMATION * ;* PRINTER ON A SLAVE USED BY THAT SLAVE ONLY * ;* MASTER - NOTING ELSE NEEDED * ;* SLAVE - 'DSPOOL' AND 'LSTXXX' * ;* PRINTER ON A SLAVE ACCESSABLE BY OTHER PROCESSORS * ;* MASTER - 'MSGFMT' AND 'NETREQ' * ;* SLAVE - 'DSPOOL', 'LSTXXX' AND 'NETSVC' * ;**************************************************************** ; ;**************************************************************** ;* VALUES BELOW ARE FOR BAUD RATE CODES ON SERIAL PORTS. * ;* THE VALUE IS IN TWO PARTS 'XY', THE FIRST NIBBLE 'X', * ;* CONTROLS THEN FUNCTION OF THE DRIVER. BIT 6 OF THE * ;* BYTE IS SET TO ENABLE 'CTS' HARDWARE HAND SHAKING. * ;* BIT 5 IS SET TO DISABLE THE INPUT SIDE OF THE CHANNEL, * ;* YOU MUST HAVE INPUT TO HANDSHAKE FOR 'ETX' AND 'XON'. * ;* THE SECOND BYTE 'Y' CONTROLS THEN BAUD RATE AT WHICH * ;* THE PORT FUNCTIONS, THE TABLE BELOW DEFINES THAT * ;**************************************************************** ; ; BAUD RATE TABLE ; ; ;'Y' BAUD RATE ; ; 0 50 ; ; 1 75 ; ; 2 110 ; ; 3 134.5 ; ; 4 150 ; ; 5 300 ; ; 6 600 ; ; 7 1200 ; ; 8 1800 ; ; 9 2000 ; ; A 2400 ; ; B 38.4K ; ; C 4800 ; ; D 7200 ; ; E 9600 ; ; F 19.2K ; ;**************************************************************** ;* IF THE PRINTER ON THIS SLAVE IS TO BE ACCESSED BY * ;* OTHER PROCESSORS ON THE SYSTEM, THEN THE MASTER'S * ;* PAR FILE MUST BE SET ACCORDINGLY. IF AS WITH OUR * ;* EXAMPLE ABOVE THE PRINTER IS TO BE KNOWN AS PRINTER * ;* 'C', THEN MASTER'S PAR FILE MAY BE AS BELOW. ALSO * ;* 'NETREQ' AND 'MSGFMT' MUST BE PUT IN THE MASTER'S * ;* GEN FILE AND 'NETSVC', 'DSPOOL' AND 'LSTXXX' IN * ;* SLAVES GEN FILE. * ;**************************************************************** ; ;PTRAST = 00,LSTDRA ; PRINTER A FIRST PRINTER ON MASTER * EXAMPLE ; 01,LSTDRB ; PRINTER B SECOND PRINTER ON MASTER * EXAMPLE ; 82,(000'Z') ; PRINTER C = SET TO THIRD PRINTER ON ; ; SLAVE 'Z', (0001) FOR 1ST SLAVE (0002) FOR 2ND. ; ; THIRD PRINTER ON OUR SLAVE IS HIS PRINTER C ; ; AND NOW OUR PRINTER C. ; ;QUEAST = 00,(0) ; QUEUE A = QUEUE A ON MASTER ; 00,(0) ; QUEUE B = QUEUE B ON MASTER ; 82,(000'Z') ; QUEUE C REMOTE ON REMOTE NODE Z ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ;  ;QUEPTR = 1 ; COME UP ON PRINTER 1 = A, 2 = B, 3 = C ... ; ; INITAL PRINTER SPOOLED OR DIRECT ; N MASTER'S PAR FILE MAY BE AS BELOW. ALSO * ;* 'NETREQ' AND 'MSGFMT' MUST BE PUT IN THE MASTER'S * ;* GEN FILE AND 'NETSVC', 'DSPOOL' AND 'LSTXXX' IN * ;* SLAVES GEN FILE. * ;**************************************************************** ; ;PTRAST = 00,LSTDRA ; PRINTER A FIRST PRINTER ON MASTER * EXAMPLE ; 01,LSTDRB ; PRINTER B SECOND PRINTER ON MASTER * EXAMPLE ; 82,(000'Z') ; PRINTER C = SET TO THIRD PRINTER ON ; ; SLAVE 'Z', (0001) FOR 1ST SLAVE (0002) FOR 2ND. ; ; THIRD PRINTER ON OUR SLAVE IS HIS PRINTER C ; ; AND NOW OUR PRINTER C. ; ;QUEAST = 00,(0) ; QUEUE A = QUEUE A ON MASTER ; 00,(0) ; QUEUE B = QUEUE B ON MASTER ; 82,(000'Z') ; QUEUE C REMOTE ON REMOTE NODE Z ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ; +; ; ;**************************************************************** ;* BELOW IS ADDED TO THE SLAVE'S PAR FILE TO RUN A * ;* PRINTER DIRECTLY OFF OF A SLAVE * ;**************************************************************** ; ;PTRAST = 80,(0000), ; PRINTER A FIRST PRINTER ON MASTER ; 81,(0000), ; PRINTER B SECOND PRINTER ON MASTER ; 01,LSTDRA ; PRINTER C = SECOND SERIAL PORT ON TURBO SLAVE ; ; IF TERMINAL IS ON FIRST SERIAL PORT ; ;QUEAST = 80,(0000), ; QUEUE A = QUEUE A ON MASTER ; 81,(0000), ; QUEUE B = QUEUE B ON MASTER ; 00,(0) ; QUEUE C LOCAL ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ; ;QUEPTR = 1 ; COME UP ON PRINTER 1 = A, 2 = B, 3 = C ... ; ; IF PRINTER IS SPOOLED OR DIRECT ; ; ; * ONLY ONE OF THE 3 FOLLOWING PER DIFFERENT DRIVER * ;CTSBR = 6E ; IF LST'CTS' PRINTER DRIVER IS USED, SETS BAUD ; ; RATE TO 9600, ENABLES HARDWARE HAND SHAKING ;  ; AND DISABLES RECEIVING. ; ;XONBR = 07 ; IF LST'XON' PRINTER DRIVER IS USED, SETS BAUD ; ; RATE TO 1200 BAUD, DISABLES HARDWARE HAND SHAKING ; ; AND ENABLES RECEIVING. ; ;ETXBR = 07 ; IF LST'ETX' PRINTER DRIVER IS USED, SET BAUD ; ; RATE TO 1200 BAUD, DISABLES HARDWARE HAND SHAKING ; ; AND ENABLES RECEIVEING. ; ;PRTMOD = 0 ;DEFAULT PRINT MODE = DIRECT ;PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED ;PRTMOD = 2 ;DEFAULT PRINT MODE = CONSOLE ; ;**************************************************************** ;* GEN FILE INFORMATION * ;* PRINTER ON A SLAVE USED BY THAT SLAVE ONLY * ;* MASTER - NOTING ELSE NEEDED * ;* SLAVE - 'DSPOOL' AND 'LSTXXX' * ;* PRINTER ON A SLAVE ACCESSABLE BY OTHER PROCESSORS * ;* MASTER - 'MSGFMT' AND 'NETREQ' * ;* SLAVE - 'DSPOOL', 'LSTXXX' AND 'NETSVC' * ;**************************************************************** ; ;**************************************************************** ;* VALUES BELOW ARE FOR BAUD RATE CODES ON SERIAL PORTS. * ;* THE VALUE IS IN TWO PARTS 'XY', THE FIRST NIBBLE 'X', * ;* CONTROLS THEN FUNCTION OF THE DRIVER. BIT 6 OF THE * ;* BYTE IS SET TO ENABLE 'CTS' HARDWARE HAND SHAKING. * ;* BIT 5 IS SET TO DISABLE THE INPUT SIDE OF THE CHANNEL, * ;* YOU MUST HAVE INPUT TO HANDSHAKE FOR 'ETX' AND 'XON'. * ;* THE SECOND BYTE 'Y' CONTROLS THEN BAUD RATE AT WHICH * ;* THE PORT FUNCTIONS, THE TABLE BELOW DEFINES THAT * ;**************************************************************** ; ; BAUD RATE TABLE ; ; ;'Y' BAUD RATE ; ; 0 50 ; ; 1 75 ; ; 2 110 ; ; 3 134.5 ; ; 4 150 ; ; 5 300 ; ; 6 600 ; ; 7 1200 ; ; 8 1800 ; ; 9 2000 ; ; A 2400 ; ; B 38.4K ; ; C 4800 ; ; D 7200 ; ; E 9600 ; ; F 19.2K ; ;**************************************************************** ;* IF THE PRINTER ON THIS SLAVE IS TO BE ACCESSED BY * ;* OTHER PROCESSORS ON THE SYSTEM, THEN THE MASTER'S * ;* PAR FILE MUST BE SET ACCORDINGLY. IF AS WITH OUR * ;* EXAMPLE ABOVE THE PRINTER IS TO BE KNOWN AS PRINTER * ;* 'C', THEN MASTER'S PAR FILE MAY BE AS BELOW. ALSO * ;* 'NETREQ' AND 'MSGFMT' MUST BE PUT IN THE MASTER'S * ;* GEN FILE AND 'NETSVC', 'DSPOOL' AND 'LSTXXX' IN * ;* SLAVES GEN FILE. * ;**************************************************************** ; ;PTRAST = 00,LSTDRA ; PRINTER A FIRST PRINTER ON MASTER * EXAMPLE ; 01,LSTDRB ; PRINTER B SECOND PRINTER ON MASTER * EXAMPLE ; 82,(000'Z') ; PRINTER C = SET TO THIRD PRINTER ON ; ; SLAVE 'Z', (0001) FOR 1ST SLAVE (0002) FOR 2ND. ; ; THIRD PRINTER ON OUR SLAVE IS HIS PRINTER C ; ; AND NOW OUR PRINTER C. ; ;QUEAST = 00,(0) ; QUEUE A = QUEUE A ON MASTER ; 00,(0) ; QUEUE B = QUEUE B ON MASTER ; 82,(000'Z') ; QUEUE C REMOTE ON REMOTE NODE Z ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ;  ;QUEPTR = 1 ; COME UP ON PRINTER 1 = A, 2 = B, 3 = C ... ; ; INITAL PRINTER SPOOLED OR DIRECT ; N MASTER'S PAR FILE MAY BE AS BELOW. ALSO * ;* 'NETREQ' AND 'MSGFMT' MUST BE PUT IN THE MASTER'S * ;* GEN FILE AND 'NETSVC', 'DSPOOL' AND 'LSTXXX' IN * ;* SLAVES GEN FILE. * ;**************************************************************** ; ;PTRAST = 00,LSTDRA ; PRINTER A FIRST PRINTER ON MASTER * EXAMPLE ; 01,LSTDRB ; PRINTER B SECOND PRINTER ON MASTER * EXAMPLE ; 82,(000'Z') ; PRINTER C = SET TO THIRD PRINTER ON ; ; SLAVE 'Z', (0001) FOR 1ST SLAVE (0002) FOR 2ND. ; ; THIRD PRINTER ON OUR SLAVE IS HIS PRINTER C ; ; AND NOW OUR PRINTER C. ; ;QUEAST = 00,(0) ; QUEUE A = QUEUE A ON MASTER ; 00,(0) ; QUEUE B = QUEUE B ON MASTER ; 82,(000'Z') ; QUEUE C REMOTE ON REMOTE NODE Z ; ;DSPPAT = 01, ; PRINTER A USES QUEUE A ; 02, ; PRINTER B USES QUEUE B ; 03 ; PRINTER C USES QUEUE C ;  .xlist .xcref ; MR1A EQU 10H MR2A EQU 10H SRA EQU 11H CSRA EQU 11H CRA EQU 12H RHRA EQU 13H THRA EQU 13H IPCR EQU 14H UACR EQU 14H ISR EQU 15H IMR EQU 15H CTU EQU 16H CTL EQU 17H MR1B EQU 18H MR2B EQU 18H SRB EQU 19H CSRB EQU 19H CRB EQU 1AH RHRB EQU 1BH THRB EQU 1BH IP EQU 1DH OPCR EQU 1DH STCC EQU 1EH SOPBC EQU 1EH SPCC EQU 1FH ROPBC EQU 1FH TST EQU 0 SCE EQU 10H AUX EQU 20H VECTOR EQU 30H RDBUF EQU 40H WRBUF EQU 40H RDCNTR EQU 60H WRCNTR EQU 70H ; .cref .list  much to run the program. ************************************************************************ alled M1200 using DDT to patch the location and the CP/M SAVE command to save it to disk. This example assumes that drive A contains the CP/M disk with DDT.COM on it and that the B drive has a copy of KMDM795.COM and at least 14k of free space. A>DDT B:KMDM795.COM DDT VERSION 2.2 NEXT PC 3700 0100 -S115 0115 00 01 ,;*********************** TSASM.DO ********************************** ;* DO FILE FOR ASSEMBLING TurboSlave DRIVERS. REQUIRES MICROSOFT'S * ;* MACRO-80 ASSEMBLER VERSION 3.44 OR LATER. * ;******************************************************************* m80 tsinit,tsinit=tsinit tsint,tsint=tsint tscondr,tscondr=tscondr tsduart,tsduart=tsduart tscktdr,tscktdr=tscktdr tsrtc,tsrtc=tsrtc tsmcktdr,tsmcktdr=tsmcktdr tsboot,tsboot=tsboot tssom,tssom=tssom tssomb,tssomb=tssomb tsnobnk,tsnobnk=tsnobnk tsbnk,tsbnk=tsbnk K}x( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s@1hy>{@">2!"2!"w# title TurboDOS Operating System subttl Earth TurboSlave I Bank Switch Driver .z80 ; ; rev 3.1 R.O. 11/8/84 ; rev 3.3 R.O. 12/23/84 ; name ('tsbank') ;module id ; include TS.LIB ;turbo library ; null equ 0f8h ;normal state rpe equ 0feh ;reset parity error ; common /?bank?/ ;locate in common area ; bnknit:: ld a,null ;null latch out out (wrcntr),a ;bank zero please ld a,07fh ;reset all bits but led out (ropbc),a ; ld (spsave),sp ;save stack pointer ld sp,auxstk ;set up aux stack ld hl,0 ;initialize memory parity bank 0 ld de,0 ; ld bc,0 ; ldir ; ld a,1 ;bank 1 call selbnk ;select bank 1 ld hl,0 ;initialize memory parity bank 1 ld de,0 ; ld bc,0 ; ldir ; ld a,rpe ;get reset parity error status out (aux),a ;reset parity error status ld hl,duint ;get interrupt service address ld (duvec##),hl ;set interrupt vector xor a ;get bank 0 call selbnk ; ld sp,(spsave) ;restore stack pointer ret ; ; selbnk:: add a,null ;add to bank number requested out (wrcntr),a ;select requested bank ret ;done ; duint: ld (spsave),sp ;save stack pointer ld sp,auxstk ;set up auxilliary stack push af ;save af-reg xor a ;get bank 0 call selbnk ;select bank 0 call duisr## ;process interrupts di ;disable interrupts ld a,1 ;get bank 1 call selbnk ;select bank 1 pop af ;restore af-reg ld sp,(spsave) ;restore stack pointer ei ;enable interrupts ret ;done ; spsave: dw 0 ;stack pointer save area ds 12*2 ;auxilliary stack area auxstk equ $ ;top of auxilliary stack area ; end ct bank 1 ld hl,0 ;initialize memory parity bank 1 ld de,0 ; ld bc,0 ; ldir ; ld a,rpe ;get reset parity error status out (aux),a ;reset parity error status ld hl,duint ;get interrupt service address ld (duvec##),hl ;set interrupt vector xor a ;get bank 0 call selbnk ; ld sp,(spsave) ;restore stack pointer ret ; ; selbnk:: add a,null ;add to АS 9,BNKNITSq rY|i}s! vo=;VL@!@ ^^d 3%sWy4y,zvK# 9-9%R6QRTԣf@UY>zS@ @ @ @ @ @ @;process interrupts di ;disable interrupts ld a,1 ;get bank 1 call selbnk ;select bank 1 pop af ;restore af-reg ld sp,(spsave) ;restore stack pointer ei ;enable interrupts ret ;done ; spsave: dw 0 ;stack pointer save area ds 12*2 ;auxilliary stack area auxstk equ $ ;top of auxilliary stack area ; end ct bank 1 ld hl,0 ;initialize memory parity bank 1 ld de,0 ; ld bc,0 ; ldir ; ld a,rpe ;get reset parity error status out (aux),a ;reset parity error status ld hl,duint ;get interrupt service address ld (duvec##),hl ;set interrupt vector xor a ;get bank 0 call selbnk ; ld sp,(spsave) ;restore stack pointer ret ; ; selbnk:: add a,null ;add to  title TurboDOS operating system subttl Earth TurboSlave I Operating System Booter .z80 ; ; rev 3.1 R.O. 11/8/84 ; rev 3.3 R.O. 12/23/84 ; name ('tsboot') ;module id ; include TS.LIB ;use turboslave library ; mreqbuf equ 0 ;master request mack equ 1 ;master acknowledge mint equ 2 ;master interrupt slave perror equ 3 ;parity error ; resbuf equ 0fdh ;reset buffer pointer ; public did,sid,ssl ; blod:: dw start ;loading address blen:: dw rcvhdr-start ;length of boot ; boot: .phase 100h ;want it to execute at this address ;in the slave ; ;************************************************************************ ; initialize code * ;************************************************************************ ; start: di ld SP,start ;set up stack ld A,11111100b ;clear possible parity error out (aux),A ;and buffer pointer ; ;************************************************************************ ; send operating system request * ;************************************************************************ ; reqdta: ld HL,msglen ;point to block to send master ld B,(HL) ;get amount to send ld C,wrbuf ;write buffer address ld A,040H ;sreqbuf out (sopbc),A ;set output port bit notrdy: in A,(rdcntr) ;wait until master ready to receive bit mack,a ;only look at ack jr z,notrdy ;is ack there yet ld a,resbuf ;reset buffer pointer for write out (aux),a ; otir ;move it out ld a,resbuf ;reset buffer pointer for read out (aux),a ; ld A,040H ;drop sreqbuf out (ropbc),A ;reset output port bit ; waiting for master to process the request rdy1: in A,(rdcntr) ;wait until master done bit mack,a ;look ony at mack jr nz,rdy1 ;wait for no more mack ld a,resbuf ;reset buffer pointer out (aux),a ; ; ;************************************************************************ ; receive operating system from master * ; * ; this is a fake interrupt routine * ;*******************************************************,***************** ; b1: in a,(rdcntr) ;handshake to tell master we're ready bit mint,a ;to be data blasted jr z,b1 ;wait for mint high ld A,020H ;then set sack out (sopbc),A ;set output port bit b2: in a,(rdcntr) ;then wait for mint to drop bit mint,a ;only look at mint jr nz,b2 ;it will go away ; now that it went away drop sack in response ld A,020H ;drop sack out (ropbc),A ;reset output port bit b3: in a,(rdcntr) ;look at handshake to see if its time bit mreqbuf,a ;look at mreqbuf gone jr nz,b3 ;mreqbuf will go away now ; when mreqbuf goes away the master detected sack gone ld a,resbuf ;reset buffer pointer out (aux),a ; ld A,020H ;raise sack out (sopbc),A ;set output port bit ld HL,rcvhdr ;set up hl nodata: in a,(rdcntr) ;wait for mreqbuf high bit mreqbuf,a ;only look at master req. jr z,nodata ;wait til it's one rdy2: in A,(rdcntr) ;wait for master done ie. mreq low bit mreqbuf,a ;only look at master req jr nz,rdy2 ;wait for no mreq ld a,resbuf ;reset buffer pointer out (aux),a ; ld c,rdbuf ;point to read buffer in B,(C) ;get amount to receive ld (HL),B ;save it in buffer inc HL ;update pointers dec B ; inir ;get block from master ld a,resbuf ;reset buffer pointer out (aux),a ; ld A,020H ;drop sack out (ropbc),A ;reset output port bit ld A,(rcvhdr) ;get amount we received cp 0ch ;was it short block jr z,done ;if so leave ld HL,rcvbuf ;get start address of data in received block ld DE,(bufptr) ;get address to move it to ld BC,80h ; ldir ;move it ld (bufptr),DE ;save updated address back jp reqdta ;and go do more ; ;************************************************************************ ; got all of operating system, now put where it belongs and * ; execute it. It had better ask for a sign-on disk and go. * ;************************************************************************ ; done: dec HL ;get last char we just received ld A,(HL) ; ld HL,lodbuf ;point to beginning of receive buffer ld E,(HL) ;get starting address of what we received inc HL ; ld D,(HL) ;DE = address inc HL ; ld C,(HL) ;get length of what we received inc HL ; ld B,(HL) ;BC = length add HL,BC ;make hl = end of what we just received ex DE,HL ;save it for now add HL,BC ;make hl = ending load address + 1 dec HL ;correct for +1 ex DE,HL ;put source and dest in proper regs lddr ;move what we just got to execution addr inc DE ;make de point to start of code ld HL,(msgsid) ;get slave source id ld (80h),HL ;and save it in default buffer ex DE,HL ;and now go execute what we got jp (HL) ; ; bufptr: dw lodbuf ;pointer to next space in assemble buffer ; ;************************************************************************ ; This is the request operating system message * ;************************************************************************ ; msglen: db 0ch msgdid: dw 0 ;gets patched to network default id db 0 msgsid: dw 0 ;gets patched to slave network id dw 0 db 0,0,0 msgssl: db ' ' ;gets patched with slave operating system ;down load suffix rcvhdr: ds 0bh rcvbuf: ds 80h ;temp receive buffer lodbuf: ;system assembly buffer .dephase did equ boot + (msgdid - start) sid equ boot + (msgsid - start) ssl equ boot + (msgssl - start) end st in proper regs lddr ;move what we just got to execution addr inc DE ;make de point to start of code ld HL,(msgsid) ;get slave source id ld (80h),HL ;and save it in default buffer ex DE,HL ;and now go execute what we got jp (HL) ; ; bufptr: dw lodbuf ;pointer to next space in assemble buffer ; ;************************************************************************ ; This is the request operating system message * ;************************************************************************ ; msglen: db 0ch msgdid: dw 0 ;gets patched to network default id db 0 msgsid: dw 0 ;gets patched to slave netwoГ 4DH M%SSL D$T@$]c|i* @aفO>֘ڳ?Zbmd|ifY\PaفW>}`e a 02l#CL@ ;Hڲ?Zb./`&!b]`;VҚEg ^dnLT[ nH$:S 1=;fQ# M%;z'c|i* @aفO>֘ڳ?Zbmd|ifY\PaفW>}`est in proper regs lddr ;move what we just got to execution addr inc DE ;make de point to start of code ld HL,(msgsid) ;get slave source id ld (80h),HL ;and save it in default buffer ex DE,HL ;and now go execute what we got jp (HL) ; ; bufptr: dw lodbuf ;pointer to next space in assemble buffer ; ;************************************************************************ ; This is the request operating system message * ;************************************************************************ ; msglen: db 0ch msgdid: dw 0 ;gets patched to network default id db 0 msgsid: dw 0 ;gets patched to slave netwo title TurboDOS Operating System subttl Earth TurboSlave I Circuit Driver .z80 ; ; rev 3.1 R.O. 11/8/84 ; rev 3.3 R.O. 12/23/84 ; name ('tscktdr') ;module id ; include TS.LIB ;use turboslave library ; tbuf equ 080h ; ; rptr equ 0fdh ;reset buffer pointer ; sw equ 6 ;send waiting flag ra equ 7 ;receiver activated ; dseg ;locate in data area ; flags:: db 0 ;flags storage ; rcvsph:: dw 0 ;receive message semaphore ..rmhd: dw ..rmhd dw ..rmhd ; rmxshp: dw 1 ;receive mutual exclusion semaphore ..rxhd: dw ..rxhd dw ..rxhd ; sndsph: dw 0 ;send message semaphore ..smhd: dw ..smhd dw ..smhd ; smxsph: dw 1 ;send mutual exclusion semaphore ..mxhd: dw ..mxhd dw ..mxhd ; common /?init?/ ;locate in initialization area ; cktin@:: ld a,(nmbckt##) ;get number of circuits ld b,a ;number of circuits to b-reg ld hl,cktast##+1 ;get circuit assignment table ld a,(tbuf+1) ;get msb of passed destination id ..sl: cp (hl) ;circuit numbers equal? jr z,..didf ;if so, continue inc hl ;else, advance to next table entry inc hl inc hl inc hl djnz ..sl ;continue ret ;done ..didf: dec hl ;back up to lsb of destination id ld a,(tbuf) ;get lsb of passed destination id ld (hl),a ;set lsb of destination id ret ;done ; cseg ;locate in program area ; cktdr@:: inc de ;advance past link pointers inc de inc de inc de ld a,c ;get function number or a ;function number=0? jr z,rcvmsg ;if so, continue dec a ;function number=1? jr z,sndmsg ;if so, continue ret ;else, done ; rcvmsg: push de ;save message pointer ld hl,rcvsph ;get receive message semaphore call wait## ;wait for receive message di ;disable interrupts pop hl ;recover message pointer and exchange ; acknowledge the master so he or she can send the block ld a,020h ;sack set out (sopbc),a ;set output port bit .rrdy1: in a,(rdcntr) ;wait til master gets ready bit 0,a ;look at mreqbuf jr z,.rrdy1 ;wait for mreqbuf ; wait for mreqbuf to go a-way (master filled buffer) rrdy1: in a,(rdcntr) ;wait til master done bit 0,a ;look at mreqbuf jr nz,rrdy1 ;wait for no more mreqbuf ; the buffer has been filled ld c,rdbuf ;point to buffer ld a,rptr ;reset pointer of buffer out (aux),a ; in b,(c) ;get amount to receive ld (hl),b ;save in buffer inc hl ; dec b ;received one already inir ;get rest of message ; buffer is now been emptied by slave so ; drop slave acknowledge and done ld a,rptr ;reset buffer command out (aux),a ;output it ld a,20h ;no sack out (ropbc),a ;send it out ld hl,flags ;get flags address res ra,(hl) ;reset receiver activated ei ;enable interrupts & let the show go on bit sw,(hl) ;check for send waiting jr z,..x ;if not continue res sw,(hl) ;reset send waiting ld hl,sndsph ;send semaphore call signal## ;signal process as ready ..x: xor a ;set return code=0 ret ;done ; ;send message routine ; sndmsg: push de ;save message address ld hl,smxsph ;mutual exclusion please ! call wait## ;wait for someone else maybe ..wting: ld hl,flags ;get flags pointer di ;disable interrupts bit ra,(hl) ;look at receive activated jr z,..send ;if not continue ei ; set sw,(hl) ;set send waiting bit ld hl,sndsph ;get send message semaphore call wait## ;wait for receive to complete jr ..wting ;continue ; ..send: ei ;enable that guy pop hl ;recover message pointer and exchange ld c,wrbuf ; ld a,40h ;sreqbuf on out (sopbc),a ;output it now notrdy: in a,(rdcntr) ;wait until master ready bit 1,a ;look at one bit jr z,notrdy ;wait for mack di ;we got control so disable & do it! ld a,rptr ;reset pointer out (aux),a ; ld b,(hl) ;get byte count otir ;send message to buffer ld a,rptr ;reset pointer out (aux),a ; ld a,40h ;drop sreq ou (ropbc), ;output it ..trdy: in a,(rdcntr) ;wait until master done bit 1,a ;look at one bit jr nz,..trdy ;wait for mack to go away ld a,rptr ;reset pointer out (aux),a ; sph ;get send message semaphore call wait## ;wait for receive to complete jr ..wting ;continue ; ..send: ei ;enable that guy pop hl ;recover message pointer and exchange ld c,wrbuf ; ld a,40h ;sreqbuf on out (sopbc),a ;output it now notrdy: in a,(rdcntr) ;wait until master ready bit 1,a ;look at one bit jr z,notrdy ;wait for mack di ;we got control so disable & do it! ld a,rptr ;reset pointer out (aux),a ; ld b,(hl) ;get byte count otir ;send message to buffer ld a,rptr ;reset pointer out (aux),a ; ld a,40h ;drop sreq ou (ropbc), ;output it ..trdy: in a,(rdcntr) ;wait until master done bit 1,a ;look at one bit jr nz,..trdy ;wait for mack to go away ld a,rptr ;reset pointer out (aux),a ;  Tdu8I YMA"(4SUd4D -QIP25  @  *@ Cx#d _ 1F{Ecɖa0n(E6KTC@>4ͳ,(}6 8 1p]! ael[ph4WZ&͢ e-! ڦv 6 x?Zb3f>~L>02>8LR(CKTASTd4DE$CKTIN@Tdu8NMBCKTe$5e5̨SIGNALEtIɖ :͛:͛_͵ѻ ͵ѻý !Q×a{ YNFRGA Destination drive read only Drivenot already set toread/writread onl Ambiguous filename: confirm individual files (y/n)? Ok to set attributes (y/n)?se File not found Invalid filename Non-privileged user Insufficient memory Network error~#@ _nH title TurboDOS Operating System subttl Earth TurboSlave I Console Driver .z80 ; ; rev 3.1 R.O. 11/8/84 ; rev 3.3 R.O. 12/23/84 ; name ('tscondr') ;module id ; public conbr ; dseg ;locate in data area ; ffchr:: db 0ch ;form feed character initc: db 0 ;init complete flag clsstr:: ;clear screen string db 0ch,1ah,1bh,0aah,80h,80h,80h,80h ; cseg ;locate in program area ; condr@:: ld a,e ;get function no sub 2 ;function number = 2? jp m,serial## ;no, go on imediately if 0 or 1. jr z,conout ;yes, output ediately if 0 or 1. sub 6 ;function number=8? jr z,conso ;if so, error shift out dec a ;function number=9? jr z,consi ;if so, error shift in jp serial## ;else, continue ; conout: ;console output character routine ld hl,initc ;get initialization complete flag ld a,(hl) or a ;initialization complete flag set? jr nz,.cdrv ;if so, skip console initialization ; dec (hl) ;set initialization complete flag push de ;save function number push bc ;save channel number/character ld e,3 ;get set baud rate function conbr equ $+1 ld c,08eh ;set default console baud rate call serial## ;and do it pop bc ;restore channel number/character pop de ;restore function number ld a,(ffchr) ;get form feed character or a ;form feed character=0? jp z,serial## ;if so, continue push de ;save function number push bc ;save channel number/character ld c,a ;form feed character to c-reg call .cdrva ;output form feed pop bc ;restore channel number/character pop de ;restore function number jp serial## ;and exit ; .cdrv: ld a,(ffchr) ;do we have a ff char defined or a jp z,serial## ;leave if not cp c ;otherwise if outgoing char a ff jp nz,serial## ;leave if not .cdrva: ld hl,clsstr ;otherwise get clear screen string address .cdrvl: ld a,(hl) ;get char to send and 7fh ;clear parity bit ld c,a ;get set to send it push bc push de push hl call serial## ;send char pop hl pop de pop bc ld a,(hl) ;test- if last char bit 7,a ret nz ;return if true inc hl ;else do more jr .cdrvl ; conso: ;error message pre & post call consi: call dms## ;position to next line db 0dh,0ah+80h ret ;done ; end  form feed character or a ;form feed character=0? jp z,serial## ;if so, continue push de ;save function number push bc ;save channel number/character ld c,a ;form feed character to c-reg call .cdrva ;output form feed pop bc ;restore channel number/character pop de ;restore function number jp serial## ;and exit ; .cdrv: ld a,(ffchr) ;do we have a ff char defined or a jp z,serial## ;leave if not cp c ;otherwise if outgoing char a ff jp nz,serial## ;leave if not .cdrva: ld hl,clsstr ;otherwise get clear screen string address .cdrvl: ld a,(hl) ;get char to send and 7fh ;clear parity bit ld c,a ;get set to send it push bc push de push hl call serial## ;send char pop hl pop de pop bc ld a,(hl) ;testӑ T4%( !JCLSSTRӑ%@U p0 H-=OP k蠔à~[V<#@`*5XmB`XtujaS?9+Uͨ?ac41 iJQ Zhq MhI()EQU 1AH RHRB EQU 1BH THRB EQU 1BH IP EQU 1DH OPCR EQU 1DH STCC EQU 1EH SOPBC EQU 1EH SPCC EQU 1FH ROPBC EQU 1FH TST EQU 0 SCE EQU 10H AUX EQU 20H VECTOR EQU 30H RDBUF EQU 40H WRBUF EQU 40H RDCNTR EQU 60H WRCNTR EQU 70H ; .cref .list CKTDR.REL CRC = 6A 61 --> FILE: TSMST14M.DO CRC = 25 6A --> FILE: TSMST14M.GEN CRC = 3B C3 --> FILE: TSMST14M.PAR CRC = 90 23 --> FILE: TSNOBNK .MAC CRC = 0A 11 --> FILE: TSNOBNK .REL CRC = D0 F5 --> FILE: TSSOM .MAC CRC = D6 42 --> FILE: TSSOM .REL CRC = AB 6E --> FILE: TSLSTCTS.MAC CRC = 11 E2 --> FILE: TSLSTXON.MAC CRC = DB F3 --> FILE: TSLSTETX.MAC CRC = FB 2C#CRC.COM 5.0 6/18/82CRCKFILE???!9" 1 M @ CRC Ver 5.0 CTL-S pauses, CTL-C aborts :] O@ ++Searching for CRCKLIST file++@ Now searching for "CRCKFILE" file++ !  1 .) F!  ͡]͸! ͔0CRCKLIST???CRCKFILE???!9" M à*,*.}|ډ!".*,{z{** u*.".G*.",!".***,}>*.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking with file - ! ~T #M M 2 2 2 2 ! >2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: <2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x] #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 ! 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG???@ ++ Now searching for "-CATALOG" file++ !  ) .) ! ”>.”#””͡”››tK››͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›, › **}|!"*{z*~]*"Ü  DISK FULL: CRCFILE$!"*~*#"ɯ2i2}! "!"]]2 s : ~# ++FILE NOT FOUND++$: F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ ERROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ] FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ E. Using CRC Type CRC to verify all the files on this disk. Type CRC *.* F to generate CRC's for an entire disk and create a CRC file (CRCKLIST.CRC) for checking the CRC's of a copy of the disk etc. Omitting the F will suppress creation of a CRCKLIST.CRC file. *.* can be replaced with an unambiguous file name for checking just one file. 2 ;auxilliary stack area auxstk equ $ ;top of auxilliary stack area ; end ct bank 1 ld hl,0 ;initialize memory parity bank 1 ld de,0 ; ld bc,0 ; ldir ; ld a,rpe ;get reset parity error status out (aux),a ;reset parity error status ld hl,duint ;get interrupt service address ld (duvec##),hl ;set interrupt vector xor a ;get bank 0 call selbnk ; ld sp,(spsave) ;restore stack pointer ret ; ; selbnk:: add a,null ;add to  .op TurboSlave I S-100 Z-80 SLAVE PROCESSOR REFERENCE MANUAL Rev C Manual #8401-01 Copyright 1984 Earth Computers P.O. Box 8067 Fountain Valley CA 92728 (714) 964-5784 Copyright 1984 by Earth Computers Al right reserved N par o thi publicatio ma b reproduce i an for o b an mean withou th expres writte permissio o Eart Computers. Th informatio containe i thi manua i believe t b correc a th tim o publication However Eart Computer assume n liabilit resultin fro th us o thi publication. Publication History: Revision A printed August 1984 Revision B printed October 1984 Revision C printed November 1984 Z-80 is a trademark of Zilog, Inc. TurboSlave is a trademark of Earth Computers. TurboDOS is a trademark of SOFTWARE 2000, INC. .pa .HE COPYRIGHT 1984 BY EARTH COMPUTERS, INC. TABLE OF CONTENTS CHAPTER 1 INTRODUCTION 1.1 DESCRIPTION ......................................... 1 1.2 USING THIS MANUAL ................................... 2 1.3 CAUTIONS ............................................ 2 1.4 SPECIFICATIONS ...................................... 3 1.5 TURBOSLAVE BLOCK DIAGRAM ............................ 4 CHAPTER 2 CONFIGURATION 2.1 CONFIGURING FOR USE WITH TURBODOS OPERATING SYSTEM .. 5 2.2 INSTALLATION ........................................ 6 2.3 USER-SELECTABLE OPTIONS ............................. 6 2.3.1 THE PORT ADDRESS SELECT JUMPERS .............. 6 2.3.2 THE SERIAL PORT JUMPERS ...................... 7 2.3.3 THE AUTO-BOOT JUMPER ......................... 8 2.3.4 THE AUTO-TEST JUMPER ......................... 8 CHAPTER 3 PROGRAMMING INFORMATION 3.1 SERIAL PORTS ........................................ 9 3.2 COUNTER TIMER ....................................... 9 3.3 INTERRUPT VECTOR .................................... 9 3.4 F.I.F.O. BUFFER ..................................... 9 3.5 ROM SELECTION ....................................... 9 CHAPTER 4 THE TurboSlave ROM-RESIDENT FIRMWARE 4.1 COLD START ENTRY .................................... 10 4.2 THE BOOTSTRAP LOADER ................................ 11 4.3 THE MEMORY SCHEME ................................... 11 4.4 THE MONITOR ......................................... 11 CHAPTER 5  HARDWARE DESIGN 5.1 Z-80 CPU ............................................ 13 5.2 CLOCK CONTROL ....................................... 13 5.3 EPROM ............................................... 14 5.4 MEMORY .............................................. 15 5.5 DUART ............................................... 16 5.6 I/O DECODE .......................................... 16 5.7 INTERRUPTS .......................................... 16 5.8 FIFO BUFFER ......................................... 17 5.9 S-100 INTERFACE ..................................... 18 TECHNICAL INFORMATION APPENDIX A A.1 PARTS LIST A.2 SCHEMATIC/LOGIC DIAGRAM A.3 ASSEMBLY DRAWING A.4 DUART SPEC SHEET A.5 SAMPLE BOOT ROUTINE .PA .pn 1 CHAPTER 1 INTRODUCTION 1.1 GENERAL DESCRIPTION Th TurboSlav ɠ i Z-8 base S-10 slav processo designe䠠 fo us i multiprocesso compute systems Th TurboSlav feature a megahert Z-8 microprocessor I 12 o hig spee ra i provided i i programmabl fo u t 1 o commo area Th ra feature parit erro detectio whic ca generat interrupts se a erro ligh an notif th hos throug statu port standar 273 epro i provide fo diagnostics standar monito functions an loadin a operatin syste fro th host Al o th abov option ar softwar programmabl no di switche a o othe boards Jumpe option ar provide t suppor 276 o 2712 eprom. Turboslav utilize 268 duar fo tw RS-23 compatibl ports Th 268 feature softwar programmabl bau rat generato allowin th tw RS-23 port t b se fro 5 t 38.4 baud Th 268 als include a interna time capabl o generatin rea tim cloc interrupts. por mappe F.I.F.O buffe facilitate hig spee communication wit th hos processo o th S-10 bus I use 2ˠ stati ra tha ca accep dat u t megabyt pe secon fro th host. uniqu diagnosti indicato allow fo eas service I parit erro occur th indicato wil remai illuminated I th boar i se fo diagnosti mod th indicato flashe binar error code if a failure occurs. Designe t confor t th IEE 69 specification fo th S-10 bus TurboSlav shoul functio i an syste adherin t th standard. 1.2 USING THIS MANUAL Mos TurboSlav ɠ user wil no fin i neccessar t consul thi manual Muc o th informatio require fo us o thi produc relate t th operatin system Eart Computer offer variou operatin砠 syste driver whic蠠 includ documentatio o configurin th boar fo th堠 particula operatin system Thi manua i provide fo thos. wh wil a som tim reconfigure progra o troubleshoo th TurboSlav I Chapte provide instruction fo al o th configuratio options Chapte provide th neccessar informatio fo us o th monito whil Chapte goe i dept o programmin th hardwar function o TurboSlav an th al importan us o th F.I.F.O fo communicatin wit th hos processo (th S-10 bu master) Programmin th 268 duar i als covere i Chapte 3 Ful programmin instruction fo th Z-8 processo i no provide䠠 becaus documentatio woul b dependen o wha programming tools are being used. 1.3 CAUTIONS Befor installin an testin you TurboSlav I pleas rea the following instructions. 1 ALWAYӠ powe dow you syste an allo som tim fo th S-10 filte capacitor t discharg befor installin o removin boards Thi coul tak 3 second o s o som machines.  2 IC' ma wor loos durin shipping Ensur tha al sockete chip ar firml seate befor yo instal th board. 3 Dynami RAM ar sensitiv t heat Mak sur tha you system is properly cooled. Clean the fan filter if dirty. 4 I you powe suppl i a unregulate linea suppl (a mos are an adjustable adjus i a clos t volt (unde load) t insur bes results. 5 Do NOԠ touc th heatsin o TurboSlav ɠ durin o shortly after operation, it will be hot! 6 Read Chapte an documentatio provide wit th TurboSlave I operating system drivers if you are using them. .pa 1.4 SPECIFICATIONS ON BOARD DEVICES Z-80H CPU 8 mhz operation 2681 DUART Dual UART with baud rate generator 16 bit counter-timer 8 bit parallel input and output ports Z8581 CLOCK GENERATOR  2K x 8 RAM Utilized as a FIFO communications buffer 2732 EPROM Monitor with diagnostics and boot loader MEMORY CAPACITY: 128K bytes TYPE: 4164 dynamic ram, seven bit refresh ACCESS TIME: 150 nanoseconds CELL REFRESH: Every M1 cycle BANK SCHEME: Programmable 16k common area in bank 0 SYSTEM INTERFACE S-100: Complies with IEEE 696, port mapped POWER CONSUMPTION: +8 volts, 1.25 amps max. -16 volts, 100 milliamps max. DISSIPATION: 11.6 watts max., 9 watts typical. ENVIRONMENTAL REQUIREMENTS TEMPERATURE: 0-70 degrees C (32-155 F) HUMIDITY: 0-90 percent non-condensing ADDITIONAL FEATURES Vecto interrup capabilit (t on-boar Z-80) Lo powe schottk an mo device fo minimu powe consumption Fiberglass epoxy (FR-4) p.c. board Soldermasked both sides Gold plated connector fingers and posts. Silk-screene componen outline an referenc number .pa 1.5 TURBOSLAVE BLOCK DIAGRAM +---------+ +-----------------+ | RS423 | | Clock Generator | +----+----+ +--+-----+--------+ | | | | /---------/ | | | | +----+--+-+ +--------+---+ +----------+ +-------+ | DUART | | Z-80 CPU | | 128K Ram | | EPROM | | | | | | | | | +-+-----+-+ +---+----+---+ +--+---+---+ +-+---+-+ | | | | | | | | | +---------------+---------------+--------------/ Address Bus | | | | +----------------+----------------+--------------+ Data Bus | | | +----+----+ +----+----+ +-------+-------+ | buffer | | buffer | | int. register | +----+----+ +--+---+--+ +---------------+ +---------+ | | ^ | Ram & | | | | | Buffer |<-->+ | | | Control | | | \---------\ +---------+ | | | +----+----+ +----+----+ +-----+-----+ | buffer | | buffer | | register | +----+----+ +----+----+ +-----+-----+ | | | --------------------------------------- V S-100/IEEE-696 .pa CHAPTER 2 CONFIGURATION 2.1 CONFIGURING FOR USE WITH TURBODOS OPERATING SYSTEM See read.me on supplied diskette. .PA 2.2 INSTALLATION singl RS-23 cabl i provide wit eac Turboslav I Thi cabl ha 2 pi heade o on en an femal DB-2 connecto o th othe end Th heade connecto shoul b connecte t J (console o th TurboSlav I B sur th re stri o th cabl correspond t pi o th board I th secon seria por i utilize th sam typ cabl woul b plugge int J (aux) Th boar i usuall shippe wit bot port se u fo mos vide device whic wil allo mos vide terminal t operat withou changin an jumpers Th TurboSlav ɠ driver an monito ar shippe configure fo dat bits sto bits an n parity T chang th TurboDO driver i don b entrie i th appropriat slav PA fil a th tabl i GLOBA (se appendix) Th monito canno easil b changed bu if you must please contact us and we will work something out. I yo ar goin t us thi a slav processo an yo hav堠 you operatin syste configure yo shoul d th following: A. Verify the following jumpers are set: E10-E11 Auto Boot Port 0 as DTE A1 Board address according to driver documentation B. With power off plug the board into your S-100 system. C Tur th syste o an pres reset I th termina doe no displa th TurboDO message procee t CHAPTEҠ TROUBLESHOOTING. fe second afte th TurboDOӠ messag appear you operatin syste shoul signon I not verif th boar addres i se correctly Chec t se tha othe TurboSlave i th syste hav signe on I non have yo ma hav a improperl configure operatin system. 2.3 USER SELECTABLE OPTIONS 2.3.1 THE PORT ADDRESS SELECT JUMPERS Th TurboSlav i selecte b th por addres se a locatio A1(JB1) Pi i th mos significan bit Connectin pin a indicate belo wil se th require䠠 slav address Al slave mus hav differen address Puttin n jumpe (NJ o represent zer an jumpe (J represent one TurboSlav i normall shippe wit a addres o 70H Addres bi i decode internall an ca no b changed Se below for possible placement of jumpers. 1 2 3 4 5 6 7 +----+----+----+----+----+----+----+ JB1 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | +----+----+----+----+----+----+----+ 70H NJ J J J NJ NJ NJ 2.3.2 THE SERIAL PORT JUMPERS Th seria por jumper ca b se fo DC o DT o som mi i between Th boar wil norm/all b set- up for a console and a serial printer when shipped. DCE configurations: console aux C o o o o--o o o o o o--o o | | B o o o o o o o o o o o o | | A o o o o o o o o o o o o 1 2 3 4 5 6 7 8 9 10 11 12 As shipped: B1-C1 A2-B2 B7-C7 A8-B8 C10-C11 DTE configurations: console aux C o o o o o o o o o o o o | | B o o o o o o o o o o o o | | A o o o o o o o o o o o o 1 2 3 4 5 6 7 8 9 10 11 12  See the logic diagrams for other configurations. .PA 2.3.3 THE AUTO-BOOT JUMPER Th TurboSlav wil automaticall boo u a operatin syste i jumpe i place fro E1 t E11 otherwis th monito wil com u an "B mus b presse t boo up E1 i th pi betwee E1 an E1 nex t th 268 DUART Note D NO us th "B t boo TurboDO a i wil no work us th aut boot Thi i bein use b numbe o user t ru th TurboSlave I for other uses. Other uses have been: CP/M 2.2 (more memory and speed) CP/M 3.0 (more speed) 68000 Slave processor 8086 Slave processor Note W d no suppor al o thes bu ar gla t se i i bein use fo othe tha Z8 slav processor I yo ar usin i fo somethin no show abov le u kno abou it. 2.3.4 THE AUTO-TEST JUMPER I jumpe i place fro E1 t E1 th monito will do a continous self-test of the board. The tests will be as follows: Eprom Checksum Ram Bank 0 Ram Bank 1 FIFO Buffer Duart ACIDTEST Th fil "ACIDTEST.COM i use t complet th testin o TurboSlav I Thi progra i ru o th system' maste processo an shoul selec slav tha i no runnin TurboDO a tha time Acidtes i designe t tes th buffe an S-10 interfac o an slave I th tes fails th slav i addresse incorrectly defectiv o yo ar experiencin bu nois problems Yo ma verif thi b movin th suspec slav close t th maste processo i th backplane. .pa CHAPTER 3 PROGRAMMING INFORMATION 3.1 SERIAL PORTS See appendix 3.2 COUNTER TIMER See appendix 3.3 INTERRUPT VECTOR Th interrup vecto i programme b outpu t por 30 o th slave Thi vecto i the drive ont th bu b th interrup acknowledg fro th Z-80 Th interrup vecto registe ca onl b writte t an ca no b rea b an othe metho othe tha interrupt acknowledge. 3.4 FIFO BUFFER Th fif buffe i writte t an rea fro por addres 40 o th slave Readin an writin t th FIFϠ wil incremen th addres counte an therefor excep 25 byte o data B outputin t por 20 wit "DB1 lo wil rese th counte t th firs address. 3.5 ROM SELECTION Th EPRO i selecte b a outpu t por 70 o th slave Othe thing als ar selecte b outputin t thi port. +-----+-----+-----+-----+-----+-----+-----+-----+  | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | +-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | | | | | | | | | | | \---BANK SELECT \-----+-----+-----/ | | | 0=bank 0,1=bank 1 Common area size select \---Not used 0=16k 8=8k | | 1=15k 9=7k | \---------Not used 2=14k A=6k | 3=13k B=5k \---------------Promon- 4=12k C=4k 0=prom-o 1=prom-off 5=11k D=3k 6=10k E=2k 7=9k F=1k .PA  CHAPTER 4 ROM-RESIDENT FIRMWARE 4.1 COLDSTART ENTRY O col star th EPRO a H wil b switche o an wil attemp t brin u TurboSlav I Th monito wil firs tes t se i th EPRO check first I i passe thi tes i wil tes th uppe 4 byte o ban 0 I i fail an thes test the i wil outpu th erro code o th LE a th to righ han sid o TurboSlav I otherwis i wil loa th monitor I wil tr t outpu a erro cod t th on-boar LED Th monito wil outpu a eigh bi erro cod leas significan bi first on ( lon pulse indicate i passe tha test Th erro cod i a follows: +-----+-----+-----+-----+-----+-----+-----+-----+ | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | +-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | | | |  | | | | | | | \---Stuck bits | \-----+-----/ | | | | | \---------Upper Address | | | | | | | \---------------Lower Address | | | | | \---------------------Parity Check | | | \---------------------------------Not used (0) | \-------------------------------------------Eprom Checksum .pa 4.2 THE BOOTSTRAP LOADER Th monito contain bootstra loade routin tha ma b use fo othe application a well T us th loade i reall quit simple Firs th maste processo send fou (4 bytes Th firs byte ar th loa addres an th secon byte ar th numbe o byte t follo (th lengt o th progra yo ar downloading) No th maste processo send th progra itsel i 25 byt piece unti i ha i all Afte receivin al o th progra jum t th beginnin o th progra i done Thi is the same method used to boot up TurboDOS or CPM. See Appendix. 4.3 THE MEMORY SCHEME Th memor i divide int tw 64 bank wit commo are betwee the t allo swappin fro on t th other Th monito reside i ban an use tha ban fo everythin bu testin routine i used Th EPRO i i bot bank a addres 0000 t 3FFFH Th EPRO take u 16 o memor n matte wha siz EPRO i used Th EPRO i turne "off an i replace b dynami ra soo afte power-u anywa b th monitor FFFFH F000H 4000H 0000H |---------|----------~--------|---------| bank monito ram EPRO i EPRO ON |---------+----------~--------+---------| /bank1 | unavail.| ram | EPROM | +---------+----------~--------+---------+ bank0 | monitor | ram | if EPROM OFF +---------+--------------~--------------+ bank1 | unavail | ram | +---------+--------------~--------------+ 4.4 THE MONITOR Th monito i locate i th uppe par o ban 0 Th monito allow larg numbe o command t b execute a th console T ge hel men fro th monitor typ i a 'H o '?' Th following ar some of th command provided: B Load a Bootstrap D Dump Memory F Fill Memory with a constant G Start execution of a program I Input from a port M Move memory O Output to a port S Substitute memory T Test sections of memory X Exchange banks of memory Z Test the F.I.F.O. buffer  .PA CHAPTER 5 HARDWARE DESIGN Th Turb Slav i Z-8 base slav processo designe fo us i multiprocesso compute systems Th boar feature a megahert Z-8 microprocessor 128 o hig spee banke ra wit upt 16 o commo area 273 EPROM 268 DUARԠ fo tw seria interfaces Th boar use port o I/ spac o th hos processo t whic i i attached Upt 1 TurboSlave ma b connecte t th hos processo pe drive i typica TurboDo implementation. +---------+ +-----------------+ | RS423 | | Clock Generator | +----+----+ +--+-----+--------+ | | | | /---------/ | | | | +----+--+-+ +--------+---+ +----------+ +-------+ | DUART | | Z-80 CPU | | 128K Ram | | EPROM | | | | | | | | | +-+-----+-+ +---+----+---+ +--+---+---+ +-+---+-+ | | | | | | | | | +---------------+---------------+--------------/ Address Bus | | | | +----------------+----------------+--------------+ Data Bus | | | +----+----+ +----+----+ +-------+-------+ | buffer | | buffer | | int. register | +----+----+ +--+---+--+ +---------------+ +---------+ | | ^ | Ram & | | | | | Buffer |<-->+ | | | Control | | | \---------\ +---------+ | | | +----+----+ +----+----+ +-----+-----+ | buffer | | buffer | | register | +----+----+ +----+----+ +-----+-----+ | | | ---------------------------------------  V S-100/IEEE-696 FIGURE 5-1. TurboSlave I Block Diagram .pa 5.1 Z-80 CPU Th Z-8 microprocesso i th contro elemen o th Turb Slav I I provide th contro signal require t rea an writ t memor an I/ ports Th Z-8 run a Mh t provid ver powerfu slav processor Th Z-8 drive th addres line t th res o th boar excep fo th dynami ram wher the ar redrive b AM296 bu driver a G an H7 Non- maskabl interrupt ar no use o th TurboSlav ɠ an thi inpu t th Z-8 i pulle high Fo th Z-8 t operat a th hig spee cloc rate, th Turb Slav require specia cloc signa tha ha ver fas edge an als ha ver larg voltag swin (se below) Th Zilo Z858 satisfie thes requirements. ----------+ +----------+ <- Vihc = Vcc-.6v ZCLK | | | +----------+  +-- <- Vilc = .45v clock fall time clock rise time Z-80H 10ns 10ns 5.2 CLOCK CONTROL Th Zilo Z858 a G i th hear o th cloc contro circuitry I provide th cloc an rese contro fo th Z-8 microprocesso an als drive th cloc fo th DUART Th Z858 use th rese fro th S-10 (pi 75 an it ow powe u conditio t rese th Z-80 Th Z858 wait 1 clock afte th rese conditio ha gon awa befor i stop resettin th Z-80 Thi i t insur tha th Z-8 ha complete it rese cycl an tha Vc i stable Th rese outpu fro G i OR' wit th rese signa fro th S-10 maste processo befor i goe t th res o th boar s tha i ca b rese b th master Pa # a F provide th necessar informatio t th cloc generato t stretc th cloc fo M an EPRO accesses Typica waveform ar show i Figur 2 Th flip-flo a E delay M comin fro th Z-8 fo prope delay i th clock Th Z858 i use䠠 instea o wai state becaus o栠 th堠 performanc difference Therefor th wai inpu t th Z-8 i pulle high. .pa Typical ZCLK Waveforms 16Mhz |<62ns>| --+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +- | | | | | | | | | | | | | | | | | | +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ memory read or write (RAM) ZCLK |<---125ns--->| ------ +------ +------ +------ +------+ T1 | | T2 | | T3 | | T1 | | T2 | +------+ +------+ +------+ +------+ +- opcode fetch (RAM) ZCLK |<------187ns------->|<------187ns------->|<---125ns--->| ------ +------------- +------------- +------+ T | T2 | T3 T | +------+ +------+ +------ +- opcode fetch (EPROM) ZCLK |<-----------375ns--------->|<---125ns--->|<---125ns--->| ------+ +-----//------+ +------+ +------+ T1 | | T2 | | T3 | | T4 | +-----//------+ +------+ +------+ +- Figure 2 Pa # i use fo severa differen functions Pa # determine i th acces i t th commo are o ra an i s force th acces t ban 0 Pa # decode th interrup acknow ledg (IOR an M1 fro th Z-8 an cause th interrup regis te a C t driv th dat bu wit th interrup vecto pre viousl store there Pa # als determine memor acces t EPROM Upo determinin thi th PA drive SRAS- (sto ras an PROMCE- (pro chi enable). 5.3 EPROM Th EPRO a H ca b 2716 2732 276 o 2712 type Jumper E4-E selec th typ o EPROM Standar configuratio i 273 (450ns EPROM Th EPRO a shippe ou wil contai th monito an TurboDo boo routines Th EPRO reside a addres 0000H Th monito i th EPRO͠ check memor an othe TurboSlav function an i everythin check out,i wil cop portio o itsel t 0F000 an the wil execut 0F000H I th monito the doe no sens jumpe E1 (aut boot o jumpe E1 (continou selftest) i wil sign-o t th consol mod an allo inpu o th monito commands I th monito sense jumpe E1 (aut boot i wil wai fo boo reques fro th maste processo an the aut boot I th monito sense jumpe E1 (continou selftest) i wil d continou selftes an wil no respon t the keyboard I parit erro occur durin selftes o norma operatio th re LE wil com o continously I som othe erro i detecte th LE wil flas o an of a erro cod t tel yo wha i wrong See th0e ROM Monitor section. Note coupl o quic flash o th LE durin initializatio i normal a i i settin u th parit i th tw bank o ram Thi usuall cause parit erro bu th initializatio the turn of th LE afte i i done. 5.4 MEMORY Th Turb Slav ha 128 byte (wit parity o ban selectabl memor wit commo are a th to o ban 0 Th commo are i programmabl fro 1 t 16 byte i size I a acces t bank b th Z-8 i t th commo area th acces i mad t ban instead Thi allow plac fo th ban manage routine t reside Th memor integrit i protecte b od parit o bot banks memor rea wit eve parit wil se th flip-flo a E an th re LE o th edg o th car wil light Th dat bu i fee int 74LS28 parit checke generator Durin memor rea operation i th outpu (DBPI i no od the a th en o th cycl RD- clock a erro int E3 Thi onl happen i MUX- i true indicatin memor operation Durin memor writ operation pull-u resisto o DBР force od parit o th curren dat bu content an th outpu (DBPI i fe int th parit ra fo storag alon wit th othe data Th flip-flo a E i rese b a outpu t por 20 wit bi low. Th addres t th RA i multiplexe b G an H7 H drive th Z-80' uppe addres bit t th RAM' whil G wil driv th lowe addres bit t th RAM's Th lowe addres bit ar alway drive excep whe memor operatio i i progress Durin memor acces th addres line ar sequence a require b th RAM's C drive th RAS- CAS- an WE- o th RAM's. Fo ever access RAS- i drive lo fo bot RA͠ banks Thi i don t allo slowe acces RAM' t b use a th cos o littl mor powe bein dissipate i th ban tha i no bein accessed Note Th dat i onl change i ban wher both RAS- and CAS- go low. Th signa WE- fo th RAM' i generate b invertin th Z-8 RD- signal Thi i becaus th writ signa i o shor duratio an th RAM' woul g int rea mod an the switc t writ mod late i th memor cycle Thi i commonl don i memor design bu require tha th inpu an outpu dat bi no b connecte together therefore costing more Th signa CAS- i probabl th mos critica signa o th board CAS- i decode fro th feedbac o RAS- fro th RAM' an the delaye b B an the generate MUX MU i use t swa fro ro t colum addresses Whe MU goe HIG th signa MUX- goe lo drivin th colum addresse t th RAM's Ther i dela b B t allo th addres t becom stabl an CAӠ i generated I th signa COMMON- i no true the th signa BANK wil selec CAS0- o CAS1- BANK wil selec CAS1- i i i HIG an CAS0- i i i LOW I COMMON- i tru CAS0- wil b selecte eve i BANK i HIGH t selec th commo are o memory. 5.5 DUART Th DUAR a E o th TurboSlav ha tw seria ports 1 bi timer/counter dua bau rat generators on inpu por o bit an on outpu por o bits Th seria port ca b configure fo DT o DC device b onboar jumpering O th inpu an outpu ports bit an ar use fo handshak control F (AM26LS32 i th RS42 receive fo bot seria port an th inpu handshak contro bits E (AM26LS30 i th drive fo bot seria port an th outpu handshak contro bits Bi (MREQ an bi (MINT o th DUARԠ inpu por ar connecte t th S-10 t allo th maste t ge th attentio o th slav processor Bit an o th inpu por ar use fo selftes an autoboo sensing Bi o th DUAR outpu por i use t tur O th LE fo error o testing Th 1 bi timer/counte i use fo rea tim cloc interrup (usuall abou 16ms) Th bau rat generato i softwar programmabl t 1 differen rate fro 5 t 38.4 baud Th DUARԠ i th sourc o al interrupt o th board B readin por 15 o th TurboSlave th sourc o th interrup ca b determine an th appropriat actio take b th appropriat interrup subroutine 5.6 I/O DECODE Th 74LS13 a F i th I/ decode o th TurboSlave Th outputs are decoded as follows; 00h TST- Used for testing only. 10h SCE- CE- for the DUART. 20h AUX- Used for resetting parity errors and the FIFO pointer. 30h VECTOR- For clocking in the interrupt vector. 40h BUF- Used to enable the buffer for all R/W accesses to the FIFO. 60h RDCNTRL- Used for reading S-100 interface status. 70h WRCNTRL- Used to control the interface signals and select the size of the common area. 5.7 INTERRUPTS Interrupt ca onl b generate b th DUAR o TurboSlav I bu sinc everythin tha require interrup contro i connecte t th DUAR thi i ver efficient Th DUAR canno generat a interrup vector therefor th 74LS37 a C wil suppl tha vecto durin a interrup acknowledg cycle. 5.8 FIFO BUFFER FIFϠ buffe i incorporate i th TurboSlav堠 t communicat wit th maste processor Thi i on Turb Slav featur tha make i simpl an a th sam tim ver fast Th maste processo an th slav processo us handshak signal MREQBUƠ (maste requestin buffer) MAC (maste acknowledge) SREQBUƠ (slav requestin buffer) SAC (slav acknowledge an MINԠ (maste interrup slave t determin wh i t us th buffer an t avoi accessin th buffe a th sam time Th FIFϠ ha pointe t tel wher th nex byt i th buffe is Thi pointe ca b rese b th slav processo only Afte bein reset th pointe i incremente (b hardware afte eac acces b th slav o maste processo s tha th nex byt locatio i th FIF i availabl b eithe processo o th nex rea o write. MASTER to SLAVE REQUEST MREQBUF_/~~~~~~~~~~~~~~~~~~~~~~~~~~~~\___________________________ |<-fill slave buffer->| |<-empty slave buffer->| SACK ________/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\____ SLAVE to MASTER REQUEST SREQBUF _/~~~~~~~~~~~~~~~~~~~~~~~~~~~~\__________________________ |<-fill slave buffer->| |<-empty slave buffer->| MACK ________/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\___ MASTER to SLAVE INTERRUPT MINT _/~~~~~~~~~~~~~~~~~~~~~~~~~~~~\___________________________ |<---- master interrupts---->| |<------------slave acknowledges------------>| SACK ________/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\____ Durin maste t slav requests th maste raise MREQBUF Afte th slav reset th pointe i raise SACK Th maste the fill th buffer Afte th maste fill th buffe i drop MREQBUF Th slav the reset th buffe pointe an transfer th dat t memory Afte th slav i don i drop SACˠ t notif th maste o successfu completion I i th responsibilit o th slav t rese th buffe pointe befor al transfers Durin slav t maste requests th slav raise SREQBUF Afte th maste respond wit MACK th slav reset th buffe pointe an transfer it dat t th buffer The th slav reset th buffe pointe an drop SREQBUF Th maste ca t0he rea th dat ou o th buffe an dro MAC whe complete Whe transferin dat t th buffer bot th maste an slav processor shoul us Z-8 bloc mov instructio fo performanc reason bu i i no required Usin hardwar DM o th maste processo woul eve b better. Durin maste t slav interrupts th maste raise MINT Th slav i interrupte b thi an respond wit SACK Afte th slav ha responde th maste wil dro MIN an the seein thi g fals th slav dro SACK Unde TurboDO thi i th method used to send messages and check for slave timeouts. 5.9 S-100 INTERFACE Th TurbSlav I use onl tw I/ addresse o th maste processor On fo contro an status an th othe fo data Th TurboSlav use th lowe eigh (8 S-10 addres line an compare the wit a bi comparato t seve (7 jumper se o th board I th addresse matc an th maste processo i doin a I/ operation th comparato enable PA # a B t generat enable an strobes Th output o PA # are; BUFCS- Indicates that the buffer is to be read or written to. BUFWE- Indicates that the buffer access is a write. RD0BUF- Enableth buffe content ont the S-100 bus. WR0BUF- Enableth S-10 bu ont th buffer bus. RD0STAT- Enables the TurboSlave status onto the S-100 bus. WR0STAT- Strobes the S-100 bus into a reg. from the S-100 bus. .pa .op APPENDIX A.1  Parts List .pa APPENDIX A.2 Schematic .pa APPENDIX A.3 Assembly .pa APPENDIX A.4 Duart Spec .pa APPENDIX A.5 Sample Boot Routines .pa .he Monitor Duart Setup Table NOTE: THE ADDRESSES IN THE FOLLOWING EXAMPLES WILL CHANGE WITHOUT NOTICE SO CHECK FOR THE CORRECT VALUE BEFORE CHANGING TO SOME OTHER VALUE. THE TURBODOS VALUE ARE CHANGE IN THE PAR FILE. ;************************************************* ; monitor duart setup table * ;************************************************* ; 0024 EOT = '$' 000D CR = 0DH 000A LF = 0AH ; ALL THIS JUST FOR ONE DUART 0010  UART = 10H ;duart serial i/o 0010 DUMR1A = UART ;DUART MODE REGISTER A 0010 DUMR2A = UART ;DUART MODE REGISTER A 0011 DUSRA = UART+1 ;STATUS REG. A 0011 DUCSRA = UART+1 ;CLOCK SELECT REGISTER A 0012 DUCRA = UART+2 ;COMMAND REGISTER A 0013 DURHRA = UART+3 ;RX HOLDING REG. A 0013 DUTHRA = UART+3 ;TX HOLDING REG. A 0014 DUIPCR = UART+4 ;INPUT PORT CHANGE REG. 0014 DUACR = UART+4 ;AUX. CONTROL REGISTER 0015 DUISR = UART+5 ;INTERRUPT STATUS REG. 0015 DUIMR = UART+5 ;INTERRUPT MASK REG. 0016 DUCTU = UART+6 ;CONTR/TIMER UPPER 0016 DUCTUR = UART+6 ;CONTR/TIMER UPPER REG. 0017 DUCTL = UART+7 ;CONTR/TIMER LOWER 0017 DUCTLR = UART+7 ;CONTR/TIMER LOWER REG. 0018 DUMR1B = UART+8 ;MODE REGISTER B 0018 DUMR2B = UART+8 ;MODE REGISTER B 0019 DUSRB = UART+9 ;STATUS REGISTER B 0019 DUCSRB = UART+9 ;CLOCK SELECT REG B 001A DUCRB = UART+10 ;COMMAND REGISTER B 001B DURHRB = UART+11 ;RX HOLDING REG. B 001B DUTHRB = UART+11 ;TX HOLDING REG. B 001D DUIP = UART+13 ;INPUT PORT 001D DUOPCR = UART+13 ;OUTPUT PORT CONF REG. 001E DUSCC = UART+14 ;START CONTR COMMAND 001E DUSOPC = UART+14 ;SET OUTPUT PORT BITS 001F DUSTCC = UART+15 ;STOP CONTR COMMAND 001F DUROPC = UART+15 ;RESET OUTPUT PORT BITS 0020 aux = 20H ;control port 0030 VECTOR = 30H ;INTERRUPT ADDRESS 0040 RDBUF = 40H ;READ BUFFER 0040 WRBUF = 40H ;WRITE BUFFER 0060 RDCTRL = 60H ;READ CONTROL PORT 0070 WRCTRL = 70H ;WRITE CONTROL PORT ; F0E9 INTAB = $ ;data table F0E9 70 .BYTE WRCTRL F0EA C8 .BYTE 11001000B ;bank 0 rom off ; F000 BASE ADDRESS F0EB 1F .BYTE DUROPC F0EC FF .BYTE 11111111B ;NO SACK AND NO SREQBUF ; F0ED 10 .BYTE DUMR1A F0EE 13 .BYTE 00010011B ;no parity 8 bits ; F0EF 10 .BYTE DUMR2A F0F0 0F .BYTE 00001111B ;2 stop bits ; F0F1 11 .BYTE DUCSRA F0F2 BB .BYTE 10111011B ;9600 baud ; F0F3 15 .BYTE DUIMR F0F4 08 .BYTE 00001000B ;int cntr ; F0F5 14 .BYTE DUACR F0F6 E0 .BYTE 11100000B ;cntr x1 brg=2 ; F0F7 16 .BYTE DUCTU F0F8 78 .BYTE 01111000B ;30,720 counts ; F0F9 17 .BYTE DUCTL F0FA 00 .BYTE 00000000B ;16.666 ms int. ; F0FB 12 .BYTE DUCRA F0FC 45 .BYTE 01000101B ;rst err & tx rx on ; F0FD 30 .BYTE VECTOR F0FE 00 .BYTE 00H ; F0FF 20 .BYTE aux F100 FC .BYTE 11111100B ;rst parity error ; AND BUFFER POINTER F101 1E .BYTE DUSOPC F102 80 .BYTE 10000000B ;turn light "off" ; F103 FF .BYTE -1 ;end of table .pa .he Monitor Boot Code ;*********************************************** ; Monitor boot code * ;*********************************************** ;************************************************ ;* Boot code B * ;************************************************ F3DD F3 BOOT: DI ;NO INTERRUPTS HERE F3DE 3E FC ld a,0fch ;clear parity error F3E0 D3 20 out (aux),a ;and buffer pointer F3E2 3E 20 ld a,20h ;send out sack F3E4 D3 1E out (dusopc),a ;send it out F3E6 DB 60 brdy1: in a,(rdctrl) ;wait for mint F3E8 CB 57 bit 2,a ;request here yet F3EA 28 FA jr z,brdy1 ;if not wait for it ; we have a boot request F3EC 0E 40 nowait: ld c,rdbuf ;point to read buffer F3EE 21 94F8 ld hl,lodadr ;buffer location ; wait for interrupt to go away F3F1 DB 60 brdy: in a,(rdctrl) ;wait for int to go away F3F3 CB 57 bit 2,a ;no more int F3F5 20 FA jr nz,brdy ; ; the master has put four bytes in the buffer F3F7 06 04 ld b,4 ;move in 4 bytes F3F9 3E FD ld a,0fdh ;reset buffer F3FB D3 20 out (aux),a ; ; reset the buffer pointer for read F3FD EDB2 inir ; got four bytes now reset buffer again F3FF 3E FD ld a,0fdh ;reset buffer F401 D3 20 out (aux),a ; F403 3E 20 ld a,20h ;no more sack please ! F405 D3 1F out (duropc),a ; F407 DB 60 brdy3: in a,(rdctrl) ;wait for mreqbuf to go away F409 CB 47 bit 0,a ;this means master sees sack not F40B 20 FA jr nz,brdy3 ;is it gone ????? F40D 2A 94F8 ld hl,(lodadr) ;get load address F410 E5 push hl ;save for later F411 ED5B 96F8 ld de,(lodlng) ;get length to load F415 43 ld b,e ;get byte coun1t to "b" reg. F416 7B ld a,e ;is it even no. of pages F417 B7 or a ; F418 20 01 jr nz,bootin ; F41A 15 dec d ; F41B 3E 20 bootin: ld a,20h ;send out sack F41D D3 1E out (dusopc),a ;send it out F41F DB 60 spin: in a,(rdctrl) ;wait for int F421 CB 57 bit 2,a ;look at int F423 28 FA jr z,spin ;is it one yet ? F425 DB 60 brdy2: in a,(rdctrl) ;wait for int F427 CB 57 bit 2,a ;no more int F429 20 FA jr nz,brdy2 ; ; master has put code in the buffer F42B 3E FD ld a,0fdh ;reset buffer F42D D3 20 out (aux),a ; ; get bytes from buffer. "B" already has count. F42F EDB2 inir ;get bytes ; reset buffer for next time we use it F431 3E FD ld a,0fdh ;reset buffer F433 D3 20 out (aux),a ;output it F435 3E 20 ld a,20h ;no more sack please ! F437 D3 1F out (duropc),a ; F439 DB 60 brdy4: in a,(rdctrl) ;wait for mreqbuf to go away F43B CB 47 bit 0,a ;this means master sees sack not F43D 20 FA jr nz,brdy4 ;is it gone ????? ; we are OK for now so see if we want to go again F43F 15 dec d ;is there more? F440 F2 1BF4 jp p,bootin ;go get more F443 E1 pop hl ;get back address F444 E9 jp (hl) ;execute what we got .pa .he TurboDOS Duart Program Table ;*************************************************** ; TurboDOS duart program table * ;*************************************************** ; ; duart program table ; 003D! 70 F8 dupgm:: db wrcntr,11111000b ; ; write control register ; bit 7,6,5,4 - 1k common memory ; bit 3 - eprom off ; bit 2 - not used ; bit 1 - not used ; bit 0 - bank 0 ; 003F! 12 10 db cra,00010000b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; * 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 0041! 10 13 db mr1a,00010011b ; ; mode register one A ; bit 7 - rx RTS control ; bit 6 - rx int select ; 0=rxrdy 1=ffull ; bit 5  - error mode ; 0=char. 1=block ; bit 4,3 - parity mode ; 00=with parity ; 01=force parity ; 10=no parity ; 11=multi-drop mode ; bit 2 - parity type ; 0=even 1=odd ; bit 1,0 - bits per char ; 00=5 01=6 10=7 11=8 ; 0043! 10 0F db mr2a,00001111b ; ; mode register two A ; bit 7,6 - channel mode ; 00=normal ; 01=auto echo ; 10=local doop ; 11=remote loop ; bit 5 - tx RTS control ; 0=no 1=yes ; bit 4 - CTS enable tx ; 0=no 1=yes ; bit 3,2,1,0 - stop bit length ; 0=0.563 1=0.625 2=0.688 3=0.750 ; 4=0.813 5=0.875 6=0.938 7=1.000 ; 8=1.563 9=1.625 A=1.688 B=1.750 ; C=1.813 D=1.875 E=1.938 F=2.000 ; 0045! 11 BB db csra,10111011b ; ; clock select register A ; bit 7,6,5,4 - receiver clock select ; see brtbl: above ; bit 3,2,1,0 - transmitter clock select ; see brtbl: above ; 9600 baud default 0047! 15 2A db imr,00101010b ; ; interrupt mask register ; bit 7 - input port change ; 0=off 1=on ; bit 6 - delta break B int ; 0=off 1=on ; bit 5 - rxrdy/ffullb int ; 0=off 1=on ; bit 4 - txrdyb int ; 0=off 1=on ; bit 3 - counter ready int ; 0=off 1=on ; bit 2 - delta break A int ; 0=off 1=on ; bit 1 - rxrdy/ffulla int ; 0=off 1=on ; bit 0 - txrdyA int ; 0=off 1=on ; 0049! 14 E0 db uacr,11100000b ; ; aux. control register ; bit 7 - brg set select ; 0=set 1 1=set 2 ; bit 6,5,4 - counter/timer mode and source ; 000=external (ip2) ; 001=TXCA - 1x clock of channel A trans. ; 010=TXCB - 1x clock of channel B trans. ; 011=Crystal or external clock div. 16 ; 100=external (ip2) ; 101=external (ip2) div. 16 ; 110=external crystal clock source ; 111=external crystal clock source div. 16 ; bit 3 - delta ip3 int ; 0=off 1=on ; bit 2 - delta ip2 int ; 0=off 1=on ; bit 1 - delta ip1 int ; 0=off 1=on ; bit 0 - delta ip0 int ; 0=off 1=on ; 004B! 16 78 db ctu,01111000b ;30720 counts ; counter/timer upper 004D! 17 00 db ctl,00000000b ;16.666ms int ; counter/timer lower 004F! 12 20 db cra,00100000b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver  ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 0051! 12 45 db cra,01000101b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ;1 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 0053! 1A 10 db crb,00010000b ; ; command register B ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 0055! 18 13 db mr1b,00010011b ; ; mode register one B ; bit 7 - rx RTS control ; bit 6 - rx int select ; 0=rxrdy 1=ffull ; bit 5 - error mode ; 0=char. 1=block ; bit 4,3 - parity mode ; 00=with parity ; 01=force parity ; 10=no parity ; 11=multi-drop mode ; bit 2 - parity type ; 0=even 1=odd ; bit 1,0 - bits per char ; 00=5 01=6 10=7 11=8 ; 0057! 18 0F db mr2b,00001111b ; ; mode register two B ; bit 7,6 - channel mode ; 00=normal ; 01=auto echo  ; 10=local loop ; 11=remote loop ; bit 5 - tx RTS control ; 0=no 1=yes ; bit 4 - CTS enable tx ; 0=no 1=yes ; bit 3,2,1,0 - stop bit length ; 0=0.563 1=0.625 2=0.688 3=0.750 ; 4=0.813 5=0.875 6=0.938 7=1.000 ; 8=1.563 9=1.625 A=1.688 B=1.750 ; C=1.813 D=1.875 E=1.938 F=2.000 ; 0059! 19 BB db csrb,10111011b ; ; clock select register B ; bit 7,6,5,4 - receiver clock select ; see brtbl: above ; bit 3,2,1,0 - transmitter clock select ; see brtbl: above ; 9600 baud default 005B! 1A 20 db crb,00100000b ; ; command register B  ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 005D! 1A 45 db crb,01000101b ; ; command register B ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 005F! 1D 00 db opcr,00000000b ; ; output port configuration register ; bit 7 - op7 0=opr[7] 1=txrdyb ; bit 6 - op6 0=opr[6] 1=txrdya ; bit 5 - op5 0=opr[5] 1=rxrdy/ffullb ; bit 4 - op4 0=opr[4] 1=rxrdy/ffulla ; bit 3,2 - op3 00=opr[3] 01=c/t output ; 10=txcb(1x) 11=rxcb(1x) ; bit 1,0 - op2 00=opr[2] 01=txca(16x) ; 10=txca(1x) 11=rxca(1x) ; 0061! FF db 0ffh ;end of table ; ; ;end of initialization routine ;  bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 005F! 1D 00 db opcr,00000000b ; ; output port configuration register ; bit 7 - op7 0=opr[7] 1=txrdyb ; bit 6 - op6 0=opr[6] 1=txrdya ; bit 5 - op5 0=opr[5] 1=rxrdy/ffullb ; bit 4 - op4 0=opr[4] 1=rxrdy/ffulla ; bit 3,2 - op3 00=opr[3] 01=c/t output ; 10=txcb(1x) 11=rxcb(1x) ; bit 1,0 - op2 00=opr[2] 01=txca(16x) ; 10=txcPTe4$4(UA6SLVCNTTӕ e3%5L% Mj(SUTETHMI%2COMDRVL`b3B(׌ \?a $a 0bc"" eQLl8%9%P^/@㴎}i y8F~O,*` E@XE@XpȀXxEXp|@]EGX"(h  h@"@hn(LH= =eV!*́YVzʷLôX$n(IxU A8|dUQ@|V"`~X V%PK0JҞ }D84h! 0y j(XU7X ݤ< v"AS@H 8[@ @m\F@23l:/sYL|d.`# ugq@LL6>O qe!evt^#My`,f,ô ,( @,(âYO qe!evt^#My`,f,ô ,( @,(âY4ͳ,(}6 8 1p]! ael[ph4WZ&͢ e-! ڦv 6 x?Zb3f>~L>02>8LR(CKTASTd4DE$CKTIN@Tdu8NMBCKTe$5e5̨SIGNALEtIɖ :͛:͛_͵ѻ ͵ѻý !Q×a{ YNFRGA Destination drive read only Drivenot already set toread/writread onl Ambiguous filename: confirm individual files (y/n)? Ok to set attributes (y/n)?se File not found Invalid filename Non-privileged user Insufficient memory Network error~#@ _nH;********************************************************** ; TSLAVB14.GEN file to generate an "OSSLAVE.SYS" (banked)* ; FOR TurboSlave UNDER TURBODOS 1.4 * ;********************************************************** STDSLAVE ; STANDARD NETWORKING SLAVE PATCH ; PATCH MODULE BNKMGR ; BANKED MEMORY MANAGER BNKREQ ; ALTERNATE TO NETLOD CPMSUP ; CP/M FUNCTION SUPPORT MODULE MPMSUP ; MP/M FUNCTION SUPPORT MODULE QUEMGR ; QUEUE MANAGER ; tsinit ;initialization routine calls tscondr ;console driver tsduart ;duart driver tscktdr ;circuit driver tsbnk ;bank driver tssom ;TurboSlave I sign on message tsint ;interrupt routines and real time clock driver ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE **  c,a ;get set to send it push bc push de push hl call serial## ;send char pop hl pop de pop bc ld a,(hl) ;testSRHDRV = 03 ;SEARCH SYSTEM DISK FOR .COM FILES COMPAT = 0F0 ;FILE/RECORD LOCKING COMPATIBILITY FLAGS ;CPMVER = 022 ;INHIBIT CB-80 RECORD LOCKING ;CONBR = 08B ;USE 38.4K BAUD TERMINAL FOR CONSOLE ; ; NOTE THAT THIS IS REALLY 3600 BAUD BUT SINCE NOBODY I KNOW ; HAS THAT WE GAVE YOU ACCESS TO 38.4K BAUD INSTEAD 'OK' ; ;CONBR = 08F ;USE 19.2K BAUD TERMINAL FOR CONSOLE CONBR = 08E ;USE 9600 BAUD TERMINAL FOR CONSOLE ;CONBR = 08C ;USE 4800 BAUD TERMINAL FOR CONSOLE ;CONBR = 08A ;USE 2400 BAUD TERMINAL FOR CONSOLE ATNCHR = 1D ;USE "^]" KEY FOR ATTENTION ptrast = 80,(0000) ;ptr a is remote matrix 81,(0000) ;ptr b is remote daisy wheel 01,lstdra ;ptr c is local daisy wheel queast = 80,(0000) ;queue a is remote a 81,(0000) ;queue b is remote b 00,(0000) ;queue c is local dsppat = 1,2,3 ;assign printers to queues PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED spldrv = 2 ;spool to hard disk AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; usrsom = 0D,0A,"Printer A is to parallel Printer (Default).", 0D,0A,"Printer B is to serial Printer ", "with ETX ", ; "with CTS ", ; "with XON/XOFF ", ; "with No ", "Protocol.", ; ; the following escape sequence will display in the status line ; of your terminal. If you don't have a status line or yours is ; different then put a semicolon in front of the next line. ; 1B,"F", "TurboDOS 1.41 (M-User) 128k, Rev 3.4 drivers.",0D, "$" ;this must be the last character ; TERMINAL FOR CONSOLE ATNCHR = 1D ;USE "^]" KEY FOR ATTENTION ptrast = 80,(0000) ;ptr a is remote matrix 81,(0000) ;ptr b is remote daisy wheel 01,lstdra ;ptr c is local daisy wheel queast = 80,(0000) ;queue a is remote a 81,(0000) ;queue b is remote b 00,(0000) ;queue c is local dsppat = 1,2,3 ;assign printers to queues PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED spldrv = 2 ;spool to hard disk AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; usrsom = 0D,0A,"Printer A is to parallel Printer3;THIS FILE WILL GENERATE A NON-BANKED SLAVE OPERATING SYSTEM gen TSLAVE OSSLAVE.SYS  "Protocol.", ; ; the following escape sequence will display in the status line ; of your terminal. If you don't have a status line or yours is ; different then put a semicolon in front of the next line. ; 1B,"F", "TurboDOS 1.41 (M-User) 128k, Rev 3.4 drivers.",0D, "$" ;this must be the last character ; TERMINAL FOR CONSOLE ATNCHR = 1D ;USE "^]" KEY FOR ATTENTION ptrast = 80,(0000) ;ptr a is remote matrix 81,(0000) ;ptr b is remote daisy wheel 01,lstdra ;ptr c is local daisy wheel queast = 80,(0000) ;queue a is remote a 81,(0000) ;queue b is remote b 00,(0000) ;queue c is local dsppat = 1,2,3 ;assign printers to queues PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED spldrv = 2 ;spool to hard disk AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; usrsom = 0D,0A,"Printer A is to parallel Printer;********************************************************** ;TSLAVE.GEN file to generate an "OSSLAVE.SYS" (nobanked)* ; FOR TurboSlave UNDER TURBODOS 1.3X * ;********************************************************** ; STDSLAVE ;STANDARD SLAVE O.S. NETLOD ;NO BANK MANAGER CPMSUP ;CPM SUPPORT ROUTINES ; tsinit ;initialization routine calls tscondr ;console driver tsduart ;duart driver tscktdr ;circuit driver tsnobnk ;no bank driver tssom ;turbo sign on message tsint ;interrupt routines patch ;patch area ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE **  d͔  ͔ 0T  Җ Wyʩ 0T 0ztiil# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ ESRHDRV = 01 ;SEARCH SYSTEM DISK FOR .COM FILES COMPAT = 0F0 ;FILE/RECORD LOCKING COMPATIBILITY FLAGS ;CPMVER = 022 ;INHIBIT CB-80 RECORD LOCKING ;CONBR = 08B ;USE 38.4K BAUD TERMINAL FOR CONSOLE ; ; NOTE THAT THIS IS REALLY 3600 BAUD BUT SINCE NOBODY I KNOW ; HAS THAT WE GAVE YOU ACCESS TO 38.4K BAUD INSTEAD 'OK' ; ;CONBR = 08F ;USE 19.2K BAUD TERMINAL FOR CONSOLE CONBR = 08E ;USE 9600 BAUD TERMINAL FOR CONSOLE ;CONBR = 08C ;USE 4800 BAUD TERMINAL FOR CONSOLE ATNCHR = 0 ;USE BREAK KEY FOR ATTENTION PRTMOD = 0 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED SLRCHR = "|" ;SLAVE RESET CHARACTER ; ; USRSOM = 0D,0A,"EARTH COMPUTERS TURBO-SLAVE I (64K)",0D,0A,"$" ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ctor xor a ;get bank 0 call selbnk ; ld sp,(spsave) ;restore stack pointer ret ; ; selbnk:: add a,null ;add to ; ; Generate a non-banked TurboSlave I system "OSSLAVE.SYS" ; gen tslave14 osslave.sys  ;end of initialization routine ;  bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 005F! 1D 00 db opcr,00000000b ; ; output port configuration register ; bit 7 - op7 0=opr[7] 1=txrdyb ; bit 6 - op6 0=opr[6] 1=txrdya ; bit 5 - op5 0=opr[5] 1=rxrdy/ffullb ; bit 4 - op4 0=opr[4] 1=rxrdy/ffulla ; bit 3,2 - op3 00=opr[3] 01=c/t output ; 10=txcb(1x) 11=rxcb(1x) ; bit 1,0 - op2 00=opr[2] 01=txca(16x) ; 10=txc3;********************************************************** ;TSLAVE14.GEN file to generate an "OSSLAVE.SYS" (nobanked)* ; FOR TurboSlave UNDER TURBODOS 1.4 * ;********************************************************** STDSLAVE ; STANDARD NETWORKING SLAVE NETLOD CPMSUP ; CP/M FUNCTION SUPPORT MODULE MPMSUP ; MP/M FUNCTION SUPPORT MODULE QUEMGR ; QUEUE MANAGER PATCH ; PATCH MODULE ; tsinit ;initialization routine calls tscondr ;console driver tsduart ;duart driver tscktdr ;circuit driver tsnobnk ;non-bank driver tssom ;TurboSlave I sign on message tsint ;interrupt routines and real time clock driver ; ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** KAYM DOCKAYM DOCKAYM DOCdKMDM795 COMlLABEL MLANG1985BAKLANG1985BAKLANG1985LSTSRHDRV = 03 ;SEARCH SYSTEM DISK FOR .COM FILES COMPAT = 0F0 ;FILE/RECORD LOCKING COMPATIBILITY FLAGS ;CPMVER = 022 ;INHIBIT CB-80 RECORD LOCKING ;CONBR = 08B ;USE 38.4K BAUD TERMINAL FOR CONSOLE ; ; NOTE THAT THIS IS REALLY 3600 BAUD BUT SINCE NOBODY I KNOW ; HAS THAT WE GAVE YOU ACCESS TO 38.4K BAUD INSTEAD 'OK' ; ;CONBR = 08F ;USE 19.2K BAUD TERMINAL FOR CONSOLE CONBR = 08E ;USE 9600 BAUD TERMINAL FOR CONSOLE ;CONBR = 08C ;USE 4800 BAUD TERMINAL FOR CONSOLE ATNCHR = 0 ;USE BREAK KEY FOR ATTENTION PRTMOD = 0 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; USRSOM = 0D,0A,"EARTH COMPUTERS TURBO-SLAVE I (64K)",0D,0A,"$" ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** OSLOAD SYSgOSMASTERSYS !"#$%OSMASTERSYSf&'()*+,OSSLAVEASYS-./01234OSSLAVEASYS5OSSLAVEHSYS6789:;<=OSSLAVEHSYS>PARK OM?;THIS FILE WILL GENERATE A BANKED SLAVE OPERATING SYSTEM GEN TSLAVEB OSSLAVE.SYS ;KFC00 PRLTOCOMMEREAD ME FGRECEIVE MHRELCVT MIJRENAME MKLSEND MMSET MNOSHOW MPSLAVELSTBAK!QRSSLAVELSTPAR!TUVTS LIBWTSASM DO XTSBNK MAC YTSBNK RELZTSBOOT MAC+[\]TSBOOT REL^TSCKTDR MAC"_`aTSCKTDR RELbTSCONDR MACcdTSCONDR RELeTSCRC CMfgTSCRC DOChTSDOC ijklmnopTSDOC qrstuvwxTSDOC yz{|}~TSDOC ZTSDUART MAC;*************************************************************** ;* TSLAVE.GEN file to generate an "OSSLAVE.SYS" (banked) * ;* FOR TurboSlave UNDER TURBODOS 1.3X * ;*************************************************************** ; STDSLAVE ;STANDARD SLAVE O.S. CPMSUP ;CPM SUPPORT ROUTINES BNKMGR ;BANK MANAGER ; tsinit ;initialization routine calls tscondr ;console driver tsduart ;duart driver tscktdr ;circuit driver tsbnk ;bank driver tssom ;turbo sign on message tsint ;interrupt routines and real time clock driver patch ;patch area ; ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** DBASEMSCOVR%&DBASEMSGCOM>'()*DBASERPGOVR+,DBASESRTOVR -DBASETTLOVR.DBASEUPDOVR/DBASIC COM01234567DBASIC COM_89:;<=4SRHDRV = 0FF ;SEARCH SYSTEM DISK FOR .COM FILES COMPAT = 0F0 ;FILE/RECORD LOCKING COMPATIBILITY FLAGS ;CPMVER = 022 ;INHIBIT CB-80 RECORD LOCKING ;CONBR = 08B ;USE 38.4K BAUD TERMINAL FOR CONSOLE ; ; NOTE THAT THIS IS REALLY 3600 BAUD BUT SINCE NOBODY I KNOW ; HAS THAT WE GAVE YOU ACCESS TO 38.4K BAUD INSTEAD 'OK' ; ;CONBR = 08F ;USE 19.2K BAUD TERMINAL FOR CONSOLE CONBR = 08E ;USE 9600 BAUD TERMINAL FOR CONSOLE ;CONBR = 08C ;USE 4800 BAUD TERMINAL FOR CONSOLE ;CONBR = 08A ;USE 2400 BAUD TERMINAL FOR CONSOLE ATNCHR = 0 ;USE BREAK KEY FOR ATTENTION PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED SLRCHR = "|" ;SLAVE RESET CHARACTER ; USRSOM = 0D,0A,"EARTH COMPUTERS TURBO-SLAVE I (128K)",0D,0A,"$" ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ; ; ;PATCHES FOR THE BANK MANAGER ;VERSION 4/11/84 ; SMBFCN+33 = PATCH+2,PATCH+0B,PATCH+2 = 2A CURBNK+6,22,PATCH,0C3,SMBFCN+2B4,PATCH+0B = 2A PATCH,22,CURBNK+6,0C3,SMBFCN+2B4,SMBFCN+0A3 = PATCH+14 PATCH+14 = 2A,CURBNK+6,7C,0B5,0C2,SMBFCN+2D0,0C3,SMBFCN+2E8 SMBFCN+27B = 0CD,PATCH+1F,PATCH+1F = 2A,CURBNK+6,7C,0B5,0C0,0F1 0C3,SMBFCN+2E8,XFRBNK-38 = 0AF,0 XFRBNK+ 0E = CINTRY-21 XFRBNK+1C1 = CINTRY-21 XFRBNK+1D4 = CINTRY-21 XFRBNK+1FC = CINTRY-21 XFRBNK+20D = CINTRY-21 XFRBNK+268 = CINTRY-21 XFRBNK+2B0 = CINTRY-21 XFRBNK+2D5 = CINTRY-21 XFRBNK+3D1 = CINTRY-21 XFRBNK+3D4 = CINTRY-1D  TERMINAL FOR CONSOLE ATNCHR = 0 ;USE BREAK KEY FOR ATTENTION PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED SLRCHR = "|" ;SLAVE RESET CHARACTER ; USRSOM = 0D,0A,"EARTH COMPUTERS TURBO-SLAVE I (128K)",0D,0A,"$" ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ; ; ;PATCHES FOR THE BANK MANAGER ;VERSION 4/11/84 ; SMBFCN+33 = PATCH+2,PATCH+0B,PATCH+2 = 2A CURBNK+6,22,PATCH,0C3,SMBFCN+2B4,PATCH+0B = 2A PATCH,22,CURBNK+6,0C3,SMBFCN+ title TurboDOS Operating System subttl DATA TERMINAL READY PRINTER DRIVER .z80 ; ; copyright 1983 by software 2000, inc. ; name ('tslstcts') ;module id ; aff equ 0ch ; dseg ;locate in data area ; public ctsbr ctsff:: db aff ;form feed character initc: db 0,0,0,0,0,0,0,0 ;initialization complete flags db 0,0,0,0,0,0,0,0 ; cseg ;locate in program area ; lstdr@:: ld hl,initc ;get initialization complete flags push de ;save function number ld e,b ;channel number to de-reg ld d,0 ;double length add hl,de ;index into flags table pop de ;restore function number ld a,(hl) ;get initialization complete flag or a ;initialization complete flag set? call z,..init ;if not, initialize list channel ld a,e ;get function number cp 2 ;function number=2? jr z,lstout ;if so, continue cp 7 ;function number=7? jr z,lstwsr ;if so, continue ret ;else, done ..init: dec (hl) ;set initialization complete flag push de ;save function number push bc ;save channel number/character ctsbr equ $+1 ld c,6eh ;get baud rate code (9600 baud) ld e,3 ;set function number=3 call serial## ;set channel buad rate pop bc ;restore channel number/character pop de ;restore function number ret ;done ; lstwsr: ld a,(ctsff) ;get form feed character ld c,a ;form feed character to c-reg ld e,2 ;set function number=2 ; lstout: jp serial## ;continue ; end to de-reg ld d,0 ;double length add hl,de ;index into flags table pop de ;restore function number ld a,(hl) ;get initialization complete flag or a ;initialization complete flag set? call z,..init ;if not, initialize list channel ld a,e ;get function number cp 2 ;function number=2? jr z,lstout ;if so, continue cp 7 ;function number=7? jr z,lstwsr ;if so, continue ret ;else, done ..init: dec (hl) ;set initialization complete flag push de ;save function numbT5E4%( QMLSTDR@MK% h5K`e~[(q@95jA 0Z,'L:@jhJQ ɊjH 8mber ret ;done ; lstwsr: ld a,(ctsff) ;get form feed character ld c,a ;form feed character to c-reg ld e,2 ;set function number=2 ; lstout: jp serial## ;continue ; end to de-reg ld d,0 ;double length add hl,de ;index into flags table pop de ;restore function number ld a,(hl) ;get initialization complete flag or a ;initialization complete flag set? call z,..init ;if not, initialize list channel ld a,e ;get function number cp 2 ;function number=2? jr z,lstout ;if so, continue cp 7 ;function number=7? jr z,lstwsr ;if so, continue ret ;else, done ..init: dec (hl) ;set initialization complete flag push de ;save function numb title TurboDOS Operating System subttl - ETX/ACK PRINTER DRIVER .z80 ; copyright 1983 by software 2000, inc. name ('tslstetx') ;module id ; aff equ 0ch aetx equ 03h aack equ 06h aesc equ 1bh ; dseg ;locate in data area ; public etxbr etxlen:: db 140 ;character count between etx's etxseq:: db 3 ;max escape sequence length etxff:: db aff ;form feed character chrcnt: db 0,0,0,0,0,0,0,0 ;character count 0,0,0,0,0,0,0,0 seqcnt: db 0,0,0,0,0,0,0,0 ;sequence count 0,0,0,0,0,0,0,0 initc: db 0,0,0,0,0,0,0,0 ;initialization complete flags db 0,0,0,0,0,0,0,0 ; cseg ;locate in program area ; lstdr@:: ld hl,initc ;get initialization complete flags call index ;index into flags table ld a,(hl) ;get initialization complete flag or a ;initialization complete flag set? call z,..init ;if not, initialize list channel ld a,e ;get function number cp 2 ;function number=2? jr z,lstout ;if so, continue cp 7 ;function number=7? jr z,lstwsr ;if so, continue ret ;else, done ..init: dec (hl) ;set initialization complete flag push de ;save function number push bc ;save channel number/character etxbr equ $+1 ld c,7 ;get baud rate code (1200 baud) ld e,3 ;set function number=3 call serial## ;set channel buad rate pop bc ;restore channel number/character pop de ;restore function number ret ;done ; lstwsr: ld a,(etxff) ;get form feed character ld c,a ;form feed character to c-reg ld e,2 ;set function number=2 ; lstout: call ..gcca ;get character count address ld a,(hl) ;get character count ld hl,etxlen ;get character count between etx's cp (hl) ;max character count outstanding? jr c,..out ;if not, continue call ..gsca ;else, get sequence count address ld a,(hl) ;get sequence count or a ;in escape sequence? jr nz,..out ;if so, continue push bc ;else, save output character ld c,aetx ;get etx character call ..sout ;output etx char4acter ..wait: call ..sin ;else, get serial input and 7fh ;strip sign bit sub aack ;character=ack? jr nz,..wait ;if not, wait call ..gcca ;else, get character count address ld (hl),a ;reset character count pop bc ;restore output character ..out: ld a,c ;get output character and 7fh ;strip sign bit cp aesc ;character=escape? jr nz,..nesc ;if not, continue call ..gsca ;else, get sequence count address ld a,(etxseq) ;get max escape sequence length ld (hl),a ;set sequence count ..nesc: call ..sout ;output character call ..gcca ;get character count address inc (hl) ;increment character count call ..gsca ;get sequence count address dec (hl) ;decrement sequence count ret p ;if positive, done inc (hl) ;else, restore count to 0 ret ;done ..sin: push bc ;save channel number/character push de ;save function number ld e,1 ;set function number=1 call serial## ;get serial input jr ..sioc ;continue ..sout: push bc ;save channel number/character push de ;save function number call serial## ;output character ..sioc: pop de ;restore function number pop bc ;restore channel number/character ret ;done ..gcca: ld hl,chrcnt ;get character count table jr index ;continue ..gsca: ld hl,seqcnt ;get sequence count table ; index: push de ;save function number ld e,b ;channel number to de-reg ld d,0 ;double length add hl,de ;index into table pop de ;restore function number ret ;done ; end haracter count call ..gsca ;get sequence count address dec (hl) ;decrement sequence count ret p ;if positive, done inc (hl) ;else, restore count to 0 ret ;done ..sin: push bc ;save channel number/character push de ;save function number ld e,1 ;set function number=1 call serial## ;get serial input jr ..sioc ;continue ..sout: push bc ;save ch`TUE%(Qa1:ETXSEQQUd5DE$ A$\%FͰ@2!@a#V٠` xxͯ@_l~[Pp \kvmz;O.c6 kٵ^5x ,Vxͣ+ͭ  $C1jEJQ Ȫ  ɊjHP 8%FͰ@2!er to de-reg ld d,0 ;double length add hl,de ;index into table pop de ;restore function number ret ;done ; end haracter count call ..gsca ;get sequence count address dec (hl) ;decrement sequence count ret p ;if positive, done inc (hl) ;else, restore count to 0 ret ;done ..sin: push bc ;save channel number/character push de ;save function number ld e,1 ;set function number=1 call serial## ;get serial input jr ..sioc ;continue ..sout: push bc ;save ch titl TurboDO Operatin Syste subttl XON/XOF Printer Driver .z80 ; ; Copyright 1983 by Software 2000, inc. ; name ('tslstxon') ;module id ; aff equ 0ch adc1 equ 11h adc3 equ 13h ; dseg ;locate in data area ; public xonbr xonff:: db aff ;form feed character initc: db 0,0,0,0,0,0,0,0 ;initialization complete flags db 0,0,0,0,0,0,0,0 ; cseg ;locate in program area ; lstdr@:: ld hl,initc ;get initialization complete flags push de ;save function number ld e,b ;channel number to de-reg ld d,0 ;double length add hl,de ;index into flags table pop de ;restore function number ld a,(hl) ;get initialization complete flag or a ;initialization complete flag set? call z,..init ;if not, initialize list channel ld a,e ;get function number cp 2 ;function number=2? jr z,lstout ;if so, continue cp 7 ;function number=7? jr z,lstwsr ;if so, continue ret ;else, done ..init: dec (hl) ;set initialization complete flag push de ;save function number push bc ;save channel number/character xonbr equ $+1 ld c,7 ;get baud rate code (1200 baud) ld e,3 ;set function number=3 call serial## ;set channel buad rate pop bc ;restore channel number/character pop de ;restore function number ret ;done ; lstwsr: ld a,(xonff) ;get form feed character ld c,a ;form feed character to c-reg ld e,2 ;set function number=2 ; lstout: call ..sst ;get serial status or a ;character available? jr z,..out ;if not, continue call ..sin ;else, get serial input and 7fh ;strip sign bit cp adc3 ;character=dc3 (xoff)? jr nz,lstout ;if not, wait ..wait: call ..sin ;get serial input and 7fh ;strip sign bit cp adc1 ;character=dc1 (xon)? jr nz,..wait ;if not, wait ..out: jp serial## ;output character ..sst: push bc ;save channel number/character push de ;save function number ld e,0 ;set function number=0 call serial## ;get serial status jr ..ssic ;continue ..sin: push bc  ;save channel number/character push de ;save function number ld e,1 ;set function number=1 call serial## ;get serial input ..ssic: pop de ;restore function number pop bc ;restore channel number/character ret ;done ; end store function number ret ;done ; lstwsr: ld a,(xonff) ;get form feed character ld c,a ;form feed character to c-reg ld e,2 ;set function number=2 ; lstout: call ..sst ;get serial status or a ;character available? jr z,..out ;if not, continue call ..sin ;else, get serial input and 7fh ;strip sign bit cp adc3 ;character=dc3 (xoff)? jr nz,lstout ;if not, wait ..wait: call ..sin ;get serial input and 7fh ;strip sign bit cp adc1 ;character=dc1 (xon)? jr nz,..wait ;if not, wait ..out: jp serial## ;output character ..sst: push bc ;save channel number/character push de ;save function number ld e,0 ;set function number=0 call serial## ;get serial status jr ..ssic ;continue ..sin: push bc 5 U%(a=9LSTDR@MV@% h5K`e~[(q@95jAp 0Z,'Lڌ<mOs݇HPQv+T<f԰ɊjH@  JQ 8c6 kٵ^5x ,Vxͣ+ͭ  $CTSDUART MACHTSDUART REL TSINIT MACTSINIT RELTSINT MACTSINT RELTSLAVB14DO TSLAVB14GENTSLAVB14PAR TSLAVE DO TSLAVE GENTSLAVE PARTSLAVE14DO TSLAVE14GENTSLAVE14PARTSLAVEB DO TSLAVEB GENTSLAVEB PAR TSLSTCTSMAC TSLSTCTSRELTSLSTETXMACTSLSTETXRELTSLSTXONMACTSLSTXONREL;THIS FILE WILL GENERATE A BANKED SLAVE OPERATING SYSTEM ;FOR USE IN M U L T I P L E CIRCUIT DRIVER SYSTEMS ;WHERE TurboSlave's CIRCUIT DRIVER (TSMCKTDR) IS THE SECOND ;DRIVER ON THE SYSTEM UNDER TURBODOS 1.4 GEN TSLVB14M OSSLAVE.SYS ;KFC00 real time clock interrupt handler * ;**************************************************************** ; rtcisr:: in a,(1fh) ;stop counter ld HL,ticcnt ;point to tick counter inc (HL) ;bump it up ld A,(HL) ;get count cp 60 ;at 1 second yet jr C,notyet ;skip reset if not ld (HL),0 ;else reset tick counter call rtcsec## ;and signal 1 second has passed notyet: call dlytic## ;signal tick has occured ..isr2: pop hl pop de pop bc pop af ld sp,(intsp##) ;restore sp & reg jp isrxit## ;and continue ; ;******************************************************** ; end of interrupt routines * ;******************************************************** ; end ;********************** TSLVB14M.GEN ****************************** ;* GEN FILE FOR BANKED TurboSlave UNDER TURBODOS 1.4 * ;* WHEN UTILIZIZING MULTIPLE CIRCUIT DRIVERS WHERE THE TSMCKTDR * ;* IS THE SECOND CIRCUIT DRIVER * ;****************************************************************** STDSLAVE ; STANDARD NETWORKING SLAVE BNKMGR ; BANKED MEMORY MANAGER BNKREQ ; ALTERNATE TO NETLOD CPMSUP ; CP/M FUNCTION SUPPORT MODULE MPMSUP ; MP/M FUNCTION SUPPORT MODULE QUEMGR ; QUEUE MANAGER PATCH ; PATCH MODULE ; tsinit ;initialization routine calls tscondr ;console driver tsduart ;duart driver tscktdr ;circuit driver tsbnk ;bank driver tssom ;TurboSlave I sign on message tsint ;interrupt routines and real time clock driver ; ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** master done bit 1,a ;look at one bit jr nz,..trdy ;wait for mack to go away ld a,rptr ;reset pointer out (aux),a ; ;******************** TSLVB14M.PAR ************************************ ;* PAR FILE FOR BANKED TurboSlave UNDER TURBODOS 1.4 * ;* WHEN RUNNING MULTIPLE NETWORKS, ANOTHER VENDORS SLAVE AS CIRCUIT 0 * ;* AND EARTH TurboSlaves AS CIRCUIT 2 - SEE TSMASTER1 FOR MASTER * ;* GENERATION. YOU PROBABLY WILL NOT HAVE TO MODIFY THE OTHER VENDORS * ;* GEN AND PAR AS LONG AS YOU LEAVE THEIR SLAVES ON CIRCUIT 0 (i.e. * ;* THEIR CIRCUIT DRIVER IS FIRST IN MAS14M.GEN AND TURBOSLAVE'S * ;* IS SECOND (TSMCKTDR)). * ;********************************************************************** SRHDRV = 0FF ;SEARCH SYSTEM DISK FOR .COM FILES COMPAT = 0F0 ;FILE/RECORD LOCKING COMPATIBILITY FLAGS ;CPMVER = 022 ;INHIBIT CB-80 RECORD LOCKING ;CONBR = 08B ;USE 38.4K BAUD TERMINAL FOR CONSOLE ; ; NOTE THAT THIS IS REALLY 3600 BAUD BUT SINCE NOBODY I KNOW ; HAS THAT WE GAVE YOU ACCESS TO 38.4K BAUD INSTEAD 'OK' ; ;CONBR = 08F ;USE 19.2K BAUD TERMINAL FOR CONSOLE CONBR = 08E ;USE 9600 BAUD TERMINAL FOR CONSOLE ;CONBR = 08C ;USE 4800 BAUD TERMINAL FOR CONSOLE ATNCHR = 1D ;USE "^]" KEY FOR ATTENTION PRTMOD = 1 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; usrsom = 0D,0A,"Printer A is to parallel Printer (Default).", 0D,0A,"Printer B is to serial Printer ", "with ETX ", ; "with CTS ", ; "with XON/XOFF ", ; "with No ", "Protocol.", ; ; the following escape sequence will display in the status line ; of your terminal. If you don't have a status line or yours is ; different then put a semicolon in front of the next line. ; 1B,"F", "TurboDOS 1.41 (M-User) 128k, Rev 3.4 drivers.",0D, "$" ;this must be the last character ;************* NETWORKING PATCHES ************************************** ; DEFDID = (0100) ;DEFAULT DESTINATION FOR UNSPECIFIED ACCESSES DSKAST = 80,(0100), ;REMOTE DISK A ON CIRCUIT 1 81,(0100), ;REMOTE DISK B ON CIRCUIT 1 82,(0100), ;REMOTE DISK C ON CI5RCUIT 1 83,(0100), ;REMOTE DISK D ON CIRCUIT 1 84,(0100), ;REMOTE DISK E ON CIRCUIT 1 85,(0100), ;REMOTE DISK F ON CIRCUIT 1 86,(0100) ;REMOTE DISK G ON CIRCUIT 1 ; CKTAST = (0100),CKTDRA ;DEVICES USING CURCUIT 1 USE CKTDRA ; PRTAST = 80,(0100), ;PRINTER A ON REMOTE CIRCUIT 1 81,(0100), ;PRINTER B ON REMOTE CIRCUIT 1 82,(0100), ;PRINTER C ON REMOTE CIRCUIT 1 83,(0100), ;PRINTER D ON REMOTE CIRCUIT 1 84,(0100) ;PRINTER E ON REMOTE CIRCUIT 1 ; QUEAST = 80,(0100), ;QUEUE A ON REMOTE CIRCUIT 1 81,(0100), ;QUEUE B ON REMOTE CIRCUIT 1 82,(0100), ;QUEUE C ON REMOTE CIRCUIT 1 83,(0100), ;QUEUE D ON REMOTE CIRCUIT 1 84,(0100) ;QUEUE E ON REMOTE CIRCUIT 1 ; DSPPAT = 1, ;ASSIGN PRINTER A TO QUEUE A 2 ;ASSIG PRINTE T QUEU B 3, ;ASSIG PRINTE C T QUEU C 4, ;ASSIG PRINTE D T QUEU D ;ASSIG PRINTE E T QUEU E ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ;** BUT REMEMBER THIS SLAVE IS ON CIRCUIT (010'Z') NOT (000'Z') ** ; CUIT 1 USE CKTDRA ; PRTAST = 80,(0100), ;PRINTER A ON REMOTE CIRCUIT 1 81,(0100), ;PRINTER B ON REMOTE CIRCUIT 1 82,(0100), ;PRINTER C ON REMOTE CIRCUIT 1 83,(0100), ;PRINTER D ON REMOTE CIRCUIT 1 84,(0100) ;PRINTER E ON REMOTE CIRCUIT 1 ; QUEAST = 80,(0100), ;QUEUE A ON REMOTE CIRCUIT 1 81,(0100), ;QUEUE B ON REMOTE CIRCUIT 1 82,(0100), ;QUEUE C ON REMOTE CIRCUIT 1 83,(0100), ;QUEUE D ON REMOTE CIRCUIT 1 84,(0100) ;QUEUE E ON REMOTE CIRCUIT 1 ; DSPPAT = 1, ;ASSIGN PRINTER A TO QUEUE A 2 ;ASSIG PRINTE T QUEU B 3, ;ASSIG PRINTE C T QUEU C 4, ;ASSIG PRINTE D T QUEU D ;ASSIG PRINTEGEN MASTER OSMASTER.SYS CUIT (010'Z') NOT (000'Z') ** ; CUIT 1 USE CKTDRA ; PRTAST = 80,(0100), ;PRINTER A ON REMOTE CIRCUIT 1 81,(0100), ;PRINTER B ON REMOTE CIRCUIT 1 82,(0100), ;PRINTER C ON REMOTE CIRCUIT 1 83,(0100), ;PRINTER D ON REMOTE CIRCUIT 1 84,(0100) ;PRINTER E ON REMOTE CIRCUIT 1 ; QUEAST = 80,(0100), ;QUEUE A ON REMOTE CIRCUIT 1 81,(0100), ;QUEUE B ON REMOTE CIRCUIT 1 82,(0100), ;QUEUE C ON REMOTE CIRCUIT 1 83,(0100), ;QUEUE D ON REMOTE CIRCUIT 1 84,(0100) ;QUEUE E ON REMOTE CIRCUIT 1 ; DSPPAT = 1, ;ASSIGN PRINTER A TO QUEUE A 2 ;ASSIG PRINTE T QUEU B 3, ;ASSIG PRINTE C T QUEU C 4, ;ASSIG PRINTE D T QUEU D ;ASSIG PRINTE;************************************************************************ ;* SAMPLE IMPLEMENTATION OF TURBOSLAVE CIRCUIT DRIVERS ON AN * ;* ADVANCED DIGITAL SUPER QUAD. * ;************************************************************************ ; STDMASTR ;STANDARD NETWORKING MASTER FASLOD ;OPTIMIZED PROGRAM LOADER CPMSUP ;CP/M FUNCTION SUPPORT MODULE SQNIT ;SUPER QUAD HARDWARE INITIALIZATION ;CONDR ;CONSOLE DRIVER CONREM ;REMOTE CONSOLE DRIVER (FOR ANY SLAVE) SQSIO ;SUPER QUAD SERIAL I/O DRIVERS SQRTC ;SUPER QUAD REAL TIME CLOCK DRIVER LSTPAR ;LIST DRIVER FOR PARALLEL PORT LSTCTS ;LIST DRIVER FOR 9600 BAUD PRINTER (CTS HANDSHAKE{PIN 20}) SQDSK ;SUPER QUAD DISK DRIVER SQDST8F ;SUPER QUAD DISK SPEC. TABLES ; ;********** ADDED DRIVERS FOR THE TURBOSLAVE ********* ; TSMCKTDR ;MASTER CIRCUIT DRIVER FOR SLAVE TSBOOT ;SLAVE BOOT-STRAP LOADER ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** ;**************************************************************** ;* SAMPLE IMPLEMENTATION OF EARTH SLAVES ON ADVANCED * ;* DIGITAL'S SUPER QUAD. * ;**************************************************************** ; SRHDRV = 0FF ;SEARCH SYSTEM DISK FOR COMMAND FILES COMPAT = 0F0 ;RECORD/FILE LOCKING COMPATIBILITY FLAGS PTRAST = 0,LSTDRA,1,LSTDRB ;1st = PARALLEL PORT, 2nd = 2nd SERIAL PORT DSPPAT = 1,2 ;ASSIGN EACH PRINTER TO ITS OWN QUEUE QUEAST = 0,(0),0,(0) ;MAKE QUEUE FOR EACH PRINTER ; DSKAST = 0,DSKDRA,1,DSKDRA ;ENABLE DRIVES A & B TO DRIVER A STEPRA = 0 ;0 = 3MS STEP RATE FOR QUME DRIVES ;1 = 6MS ;2 = 10MS ; MEMRES = 1000 ;AMOUNT OF DYNAMIC SPACE BELOW THE O.S. AUTUSR = 080 ;DEFAULT TO PRIVLEGED, USER 0 NMBUFS = 10 ;DEFAULT NUMBER OF BUFFERS (16) BUFSIZ = 03 ;DEFAULT BUFFER SIZE (LOG2(SIZE/128)) NMBMBS = 3 ;PRE-ALLOCATE NMBSVC*2 MESSAGE BUFFERS NMBRPS = 3 ;PRE-ALLOCATE NMBSVC*2 REPLY WAITING BUFFERS NMBSVC = 1 ;NUMBER OF "SERVER PROCESSES" (NUMBER OF SLAVES FOR TURBO DOS) ; NMBESA = 1 ;NUMBER OF EARTH SLAVES SUPPORTED ON FIRST EARTH DRIVER ADTA = 70,72,74,76,78,7A,7C,7E ;PORT ADDRESS OF EARTH SLAVES 80,82,84,86,88,8A,8C,8E ; " " " " " ASTA = ' ' ;SLAVE OS SUFFIX TABLE IE OSSLAVE?.SYS ;NOW SET TO OSSLAVE.SYS FOR ALL SLAVES ; ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE **  DSKAST = 0,DSKDRA,1,DSKDRA ;ENABLE DRIVES A & B TO DRIVER A STEPRA = 0 ;0 = 3MS STEP RATE FOR QUME DRIVES ;1 = 6MS ;2 = 10MS ; MEMRES = 1000 ;AMOUNT OF DYNAMIC SPACE BELOW THE O.S. AUTUSR = 080 ;DEFAULT TO PRIVLEGED, USER 0 NMBUFS = 10 ;DEFAULT NUMBER OF BUFFERS (16) BUFSIZ = 03 ;DEFAULT BUFFER SIZE (LOG2(SIZE/128)) NMBMBS = 3 ;PRE-ALLOCATE NMBSVC*2 MESSAGE BUFFERS NMBRPS = 3 ;PRE-ALLOCATE NMBSVC*2 REPLY WAITING BUFFERS NMBSVC = 1 ;NUMBER OF "SERVER PROCESSES" (NUMBER OF SLAVES FO6 title TurboDOS Operating System subttl Earth TurboSlave I Master Circuit Driver .z80 ; ; rev 3.3 R.O. 12/23/84 ; fixed spooling with queues in the slaves ; rev 3.4 r.o. 1/9/84 ; fixed crashing on boot with excessive buffers set ; name ('tsmcktdr') ;module id ; reset equ 8 ;reset slave processor mack equ 2 ;master acknowledge mreqbuf equ 1 ;master request buffer sack equ 0 ;slave acknowledge sreqbuf equ 2 ;slave request buffer int equ 4 ;slave interrupt request mint equ mreqbuf+int ;interrupt and master request ; rb equ 0 ;receive blinded (flgtbl) se equ 1 ;slave error (flgtbl) ra equ 2 ;receive activated (flgtbl) sw equ 3 ;send waiting (flgtbl) to equ 4 ;timeout flag (flgtbl) dn equ 5 ;slave is down (flgtbl) dl equ 6 ;download in progress (flgtbl) ed equ 7 ;end of download (flgtbl) ; dseg ;locate in data area ; nmbslv: nmbes@:: db 1 ;number of earth slaves installed ; ckt: ckt@:: db 0 ;circuit number ; adt: ;port address table adt@:: db 70h,72h,74h,76h db 78h,7ah,7ch,7eh db 80h,82h,84h,86h db 88h,8ah,8ch,8eh ; ast: ;slave o.s. suffix table ast@:: db ' ' ; rcvadr: dw 0 ;receive message address sndadr: dw 0 ;send message address rcvslv: db 0 ;receive slave processor number sndslv: db 0 ;send slave processor number maxlen: db 0 ;maximum message length nitcnt: db 0 ;initialization count ; flgtbl: db 0,0,0,0,0,0,0,0 ;flag table db 0,0,0,0,0,0,0,0 ; tictbl: db 0,0,0,0,0,0,0,0 ;tick count table db 0,0,0,0,0,0,0,0 ; errtbl: db 0,0,0,0,0,0,0,0 ;error count table db 0,0,0,0,0,0,0,0 ; rcvsph: dw 0 ;receive message semaphore ..rmhd: dw ..rmhd dw ..rmhd ; sndsph: dw 0 ;send message semaphore ..smhd: dw ..smhd dw ..smhd ; smxsph: dw 1 ;send mutual exclusion semaphore ..mxhd: dw ..mxhd dw ..mxhd ; common /?init?/ ;locate in initialization area ; cktin@:: ld a,(nmbslv) ;get number of slave processors ld (nitcnt),a ;set initialization count ret ;done ; cseg ;locate in program area ; cktdr@:: inc de ;increment past link pointers inc de ; inc de ; inc de ; ld a,c ;get function number or a ;function number=0? jr z,rcvmsg ;if so, continue dec a ;function number=1? jp z,sndmsg ;if so, continue ret ;else, done ; ;************************************************************************ ;* RECEIVE MESSAGE HANDLER ROUTINE * ;************************************************************************ ; rcvmsg: ex de,hl ;exchange register de and hl ld a,(nitcnt) ;get initialization count dec a ;decrement initialization count jp p,..err1rm ;if positive goto init routine ld (rcvadr),hl ;save msg address ld de,rcvpol ;get receive poll routine call lnkpol## ;link poll routine on poll list ld hl,rcvsph ;get receive message semaphore call wait## ;wait for request call rmcom ;do common setup bit se,(hl) ;check for slave error jr nz,..err2rm ;if error true handle it ld a,(rcvslv) ;get receive slave no. call settc ;set tick count for this slave xor a ;set return code=0 ret ;done ; ..err1rm: ld (nitcnt),a ;update initialization count 'is now 1 less' ld (rcvslv),a ;set receive slave processor number ..err2rm: ld a,(rcvslv) ;get receive slave processor number call settc ;set tick count for this slave ld a,(rcvslv) ;get receive slave processor number call errcom ;reset flags, inc err count, ;get cir num and set crash code ld a,0ffh ;error code ret ; ;**************************************************************** ; SEND MESSAGE HANDLER ROUTINE * ;**************************************************************** ; sndmsg: push de ;save message buffer address ld hl,smxsph ;get mutual exclusion semaphore call wait## ;wait on mutual exclusion pop hl ;get message address back in hl inc hl ;advance to message dest id ld a,(hl) ;get message id dec a ;decrement id ld (sndslv),a ;save send slave for common set up dec hl ;back up to length inc (hl) ;set flag on length dec (hl) ;set flag on correct length after above jp z,..ml0 ;if length of 0 jump to length 0 routine ld (sndadr),hl ;save send msg address ..swtl: call smcom ;do common setup bit dn,(hl) ;slave is down flag set? jr z,..snd ;if not, continue bit dl,(hl) ;download in progress flag set? jp z,..errsm ;if not, continue push hl ld hl,(sndadr) ;restore message buffer address ld a,(hl) ;get message length pop hl cp 11+128 ;download record message? jr z,..snd ;if so, continue cp 11+1 ;end of download message? jp nz,..errsm ;if not, continue set ed,(hl) ;else, set end of download flag ..snd: di ;disable interrupts ; interrupt slave and signal to send with mreqbuf ld a,mint ;load up a mreqbuf and interrupt out (c),a ;output to slave processor call wsack ;wait for sack jr c,..errsm ;if carry then error ld a,mreqbuf ;load up mreqbuf only out (c),a ;output to slave processor call wsackn ;wait for sack to go away jr c,..errsm ;if carry then error ; this will cause the slave to wait til the master notices that ; the slave has dropped sack before it sets it again ld a,0 ;output no int and no mreqbuf out (c),a ;output to slave processor ei ;we done res se,(hl) ;start with no error push hl ;save flags ld de,sndpol ;point to poll routine call lnkpol## ;link poll routine ld a,(sndslv) ;get slave number call settc ;set tick count ld hl,sndsph ;point to semaphore call wait## ;wait for event pop hl ;get flags back bit se,(hl) ;check for slave error jr nz,..errsm ;then error out ld hl,smxsph ;get mutual exclusion semaphore call signal## ;release mutual exclusion ld a,(sndslv) ;get slave number call settc ;set tick count call getfta ;get flag entry table bit ed,(hl) ;end of download flag set? jr z,..ned ;if not, continue res ed,(hl) ;else, reset end of download flag res dl,(hl) ;reset download in progress flag res dn,(hl) ;reset slave is down flag ..ned: ld a,(sndslv) ;get slave number call rercnt ;reset error count xor a ;set up good status ret ;done ; ..errsm: ld a,(sndslv) ;get send slave processor number call errcom ;reset flags, inc err count ; get cir num and set crash code ..smexit: push de ;save circuit number ld hl,smxsph ;get mutual exclusion semaphore call signal## ;release mutual exclusion pop de ;restore ckt num ld a,0ffh ;get error code ret ; errcom: call srmcom ;do common setup res se,(hl) ;reset slave error flag set dn,(hl) ;set slave is down flag res dl,(hl) ;reset download in progress flag res ed,(hl) ;reset end of download flag push hl ;save flag address call geteca ;get error count address ld a,(hl) ;get error count cp 10 ;error count=10? jr nz,errc ;stop incrementing pop hl ;get flags address back set to,(hl) ;set timeout jr errc2 ;continue errc: inc (hl) ;increment error count pop hl ; errc2: inc e ;correct slave num offset ld a,(ckt) ;get circuit number ld d,a ;circuit number to d-reg ret ;done ; ;************************************************************************ ; This is where a slave boot request is started. The slave is * ; first reset and then sndpol2 is linked in to load a bootstrap. * ;************************************************************************ ; ..ml0: call srmcom ;do common setup ld a,(hl) ;get flags bit to,a ;test for time out jr z,..dl1 ;continue then call ..smexit ;release mutual exclusion xor a ;set return code=0 ret ;if error count=10, done ; ..dl1: set dl,(hl) ;set download in progress flag ld a,reset ;get reset command for this slave out (c),a ;send it out ld a,0 ;reset reset for slave out (c),a ;send it out res se,(hl) ;reset slave error flag push hl ;save flags address ld a,(sndslv) ;get slave number call settc ;set tick count ld de,sndpol2 ;get send poll routine call lnkpol## ;link poll routine on poll list ld hl,sndsph ;get send message semaphore call wait## ;wait for slave to respond6 pop hl ;get flags address back bit se,(hl) ;send error flag set? jr nz,..errbm ;if so, continue ld a,(sndslv) ;get slave number call settc ;set tick count ld hl,smxsph ;get mutual exclusion semaphore call signal## ;release mutual exclusion xor a ;set return code=0 ret ;done ; ..errbm: ld a,(sndslv) ;get send slave processor number call errcom ;reset flags, inc err count ; get cir num and set crash code push de ; ld hl,smxsph ;get mutual exclusion semaphore call signal## ;release mutual exclusion pop de ;restore ckt num ld a,0ffh ;get error code ret ; ;************************************************************************ ; Receive poll routine. Will look for SREQBUF and if found * ; will start processing a message. If not it will return. * ;************************************************************************ ; rcvpol: dw 0 ;successor link pointer dw 0 ;predecessor link pointer ; ld a,(nmbslv) ;get number of TurboSlaves or a  ;number of slaves=0? ret z ;if so, done ; we got some slaves here dec a ;else, calculate max slave number and 0fh ;limit to 16 slave processors ld hl,rcvslv ;get current slave number inc (hl) ;increment current slave number cp (hl) ;valid slave processor number? jr nc,..vspn ;if so, continue ld (hl),0 ;else, set slave processor number=0 ..vspn: call rmcom ;do common setup bit to,(hl) ;test for slave present ret nz ;done if slave timed out is true in a,(c) ;else, get slave processor status bit sreqbuf,a ;request bit set? jr nz,..vsp2 ;if no request then see if slave ok! ; we have got a slave request buffer. so go ; acknowledge the slave so he can use the buffer ld a,mack ;send mack out (c),a ;do it ld hl,(rcvadr) ;get address for message call wsreqn ;wait for sreqbuf to be gone jr c,kilslv ;if carry then error ; now that request is gone the buffer contains our message inc c ;point to data port ini ;input msg length dec hl ;backup to message length ld b,(hl) ;get msg len inc hl ;restore msg buf addr dec b ;dec msg len jr z,kilslv ;if msg len=0 kill slave inir ;move all that data in dec c ;point c back to control port ..rrdn: ld a,0 ;drop the big mack out (c),a ;do it ; we got the message now and gave up the buffer ld hl,rcvpol ;get receive poll routine call unlink## ;unlink poll routine from poll list ld hl,rcvsph ;get receive message semaphore jp signal## ;signal process as ready ; ..vsp2: bit dl,(hl) ;check if slave is downloading ret nz ;done then no time check call chkctc ;check current count ret c ;if time not expired done. ; if time out then interrupt slave to see if it's OK call intslv ;interrupt slave then jr c,kilslv ;error so kill slave ld a,(rcvslv) ;get receive slave processor number jp settc ;set tick count for this slave ; kilslv: call rmcom ;do common setup set se,(hl) ;set slave error flag jr ..rrdn ;finish up ; ;******************************************************** ; send poll routine for slave messages. This * ; routine will wait for sack and will send the * ; required message to the slave and check for * ; timeouts and errors. * ;******************************************************** ; sndpol: ; dw 0 ;successor link pointer dw 0 ;predecessor link pointer ; call smcom ;do common set-up in a,(c) ;get slave status bit sack,a ;look at sack jr z,..sig ;wait for sack call chkctc ;do time check ret c ;no timeout if carry set ..sig0: set se,(hl) ;we got trouble right here !!! ..sig1: ld hl,sndpol ;point to send poll call unlink## ;unlink this routine ld hl,sndsph ;point to snd semaphore jp signal## ;signal process as ready ; ..sig: ld a,mreqbuf ;send master request out (c),a ;do it push hl ;save flag table address ld hl,(sndadr) ;get message address inc c ;point c to data port ld b,(hl) ;get message length otir ;blast that data to slave dec c ;point c back to control port ld a,0 ;reset master request out (c),a ;do it pop hl ;recover flag table pointer call wsackn ;wait for sack to go away jr nc,..sig1 ;if no carry then done jr ..sig0 ;if carry then error ; ;************************************************************************ ; send poll routine for slave reset only. This routine will * ; wait for sack until found and then download an O.S. boot to * ; that slave. * ;************************************************************************ ; sndpol2: ;this is poll to link for slave boot dw 0 ;successor link pointer dw 0 ;predecessor link pointer ; ld a,(sndslv) ; call srmcom ;do common setup in a,(c) ;get slave processor status bit sack,a ;request bit set? jr nz,..vsp3 ;check time if no request ld a,mint ;send master request out (c),a ;do it ld a,(ckt) ;get circuit number ld h,a ;circuit number to h-reg ld l,0 ;set circuit node address to 0 ld (did##),hl ;set slave processor destination id ld a,e ;get slave processor number inc a ;increment slave processor number ld l,a ;slave processor number to l-reg ld (sid##),hl ;set slave processor source id ld hl,ast ;get slave suffix letter table add hl,de ;index into slave suffix table ld a,(hl) ;get slave o/s suffix letter ld (ssl##),a ;set slave suffix letter ld hl,blod## ;else, get load address/length ld b,4 ;get length of load address/length inc c ;c=slave processor data port otir ;output message bytes dec c ;correct c reg ld a,mreqbuf ;drop int but keep mreqbuf out (c),a ;put it out call wsackn ;wait for no sack jr c,..serr ;if carry then error ld a,0 ;drop mreqbuf and int out (c),a ;put it out ld DE,(blen##) ;else, get load length ld b,e ;lsb of load length to b-reg call wsack ;wait for sack jr c,..serr ;if carry then error ..ldl: ld a,mint ;request for boot itself out (c),a ;send it out inc c ;point c to data port otir ;blast that data to slave dec c ;point c back to control port ld a,mreqbuf ;reset int. request out (c),a ;do it call wsackn ;wait for sack gone jr c,..serr ;if carry then error ..ldd: ld a,0 ;drop mreqbuf and int out (c),a ;put it out ld hl,sndpol2 ;get send poll routine call unlink## ;unlink poll routine from poll list ld hl,sndsph ;get send message semaphore jp signal## ;signal process as ready ; ..serr: ld a,(sndslv) ; call srmcom ;do common setup set se,(hl) ;set slave error jr ..ldd ;finish up ; ;**************************************************************** ; you got one second to respond after reset if not look * ; out we gonna report it to the O.S. then. * ;**************************************************************** ; ..vsp3: call chkctc1 ;check the time ret c ;done set se,(hl) ;set slave error jr ..ldd ;finish up ; ;**************************************************************** ; intslv is used to interrupt the slave if it has not * ; been talked to for some time. int with no mreq will * ; cause the slave to return a sack in about 50us. * ; if the slave does not respond within 10.24ms * ; the master will kill the slave and restart it. * ;**************************************************************** ; intslv: ld a,int ;get interrupt bit out (c),a ;interrupt slave processor call wsack ;wait for interrupt response ld a,0 ;get zero ; fails tests cause of timeout out (c),a ;output it ret ;done ; ;**************************************************************** ; wait on sack going low or time-out in 10.24 ms (4Mhz) * ;**************************************************************** ; on return carry means time-out else sack is low ; wsack: call .ws. ; ret nc ;done if no carry call .ws. ; ret nc ;done if no carry call .ws. ; ret nc ;done if no carry ; .ws.: ld b,0 ;get count .wt1: in a,(c) ;get status of slave 3us bit sack,a ;check sack bit 2us jr z,.wsk1 ;done then else 1.75us djnz .wt1 ;loop about 2msec. then 3.25us scf ;set carry then ______ ret ;done 7 2.56ms = 10 us x 256 ; .wsk1: xor a ;reset carry ret ;done ; ;**************************************************************** ; wait on sack going high or time-out in 10.24 msec * ;**************************************************************** ; on return carry means time-out else sack is high ; wsackn: call .wns. ; ret nc ;done if no carry call .wns. ; ret nc ;done if no carry call .wns. ; ret nc ;done if no carry ; .wns.: ld b,0 ;get count .wt2: in a,(c) ;get status of slave bit sack,a ;check sack bit jr nz,.wsk1 ;done then else djnz .wt2 ;loop for about 2.56 msec. then scf ;set carry then ret ;done ; ;**************************************************************** ; wait on sreqbuf going low or time-out in 10.24 msec * ;**************************************************************** ; on return carry means time-out else sreqbuf is low ; wsreq: call .wsr. ; ret nc ;done if no carry call .wsr. ; ret nc ;done if no carry call .wsr. ; ret nc ;done if no carry ; .wsr.: ld b,0 ;get count .wt3: in a,(c) ;get status of slave bit sreqbuf,a ;check sreqbuf bit jr z,.wsk1 ;done then else djnz .wt3 ;loop about 2.56 msec. then scf ;set carry then ret ;done ; ;**************************************************************** ; wait on sreqbuf going high or time-out in 10.24 msec * ;**************************************************************** ; on return carry means time-out else sreqbuf is high ; wsreqn: call .wsrn. ; ret nc ;done if no carry call .wsrn. ; ret nc ;done if no carry call .wsrn. ; ret nc ;done if no carry ; .wsrn.: ld b,0 ;get count .wt4: in a,(c) ;get status of slave bit sreqbuf,a ;check sreqbuf bit jr nz,.wsk1 ;done then else djnz .wt4 ;loop for about 2.56msec. then scf ;set carry then ret ;done ; ;**************************************************************** ; set the current tick count for the slave selected * ; by the 'A' register * ;**************************************************************** ; settc: ld e,a ;slave processor number to de-reg ld d,0 ;double length ld hl,tictbl ;get tick count table add hl,de ;index into tick count table ld a,(ticcnt##) ;get current tick count ld (hl),a ;set tick count ret ;done ; ;**************************************************************** ; check for time out (2 seconds) * ; * ; hl = saved on entry and restored on exit * ; de = slave number on entry * ; a = destroyed * ; carry set if no timeout * ;**************************************************************** ; chkctc: push hl ;save flags address ld hl,tictbl ;get tick count table add hl,de ;index into tick count table ld a,(ticcnt##) ;get current tick count sub (hl) ;calc elapsed number of ticks pop hl ;restore flags address cp 125 ;minimum number of ticks elapsed? ret ;done two seconds if 125! ; ;**************************************************************** ; check for time out (1/2 second) * ; * ; hl = saved on entry and restored on exit * ; de = slave number on entry * ; a = destroyed * ; carry set if no timeout * ;**************************************************************** ; chkctc1: push hl ;save flags address ld hl,tictbl ;get tick count table add hl,de ;index into tick count table ld a,(ticcnt##) ;get current tick count sub (hl) ;calc elapsed number of ticks pop hl ;restore flags address cp 31 ;minimum number of ticks elapsed? ret ;done 1/2 second if 31 ; ;**************************************************************** ; RECEIVE MESSAGE ENTRY POINT FOR COMMON SET UP * ;**************************************************************** ; rmcom: ld a,(rcvslv) ;get receive slave processor number jr srmcom ;continue ; ;**************************************************************** ; SEND MESSAGE ENTRY POINT FOR COMMON SET UP * ;**************************************************************** ; smcom: ld a,(sndslv) ;get send slave processor number ; ;**************************************************************** ; SEND-RECEIVE MESSAGE COMMON SET UP * ; RETURNS IN 'C' THE PORT ADDRESS OF SLAVE SENT IN * ; REGISTER 'A' RETURNS FLAG TABLE ADDRESS IN HL ALSO. * ;**************************************************************** ; srmcom: ld e,a ;slave processor number to de-reg ld d,0 ;zero d ld hl,adt ;get port address table add hl,de ;calc port address ld c,(hl) ;data port address to c-reg getfta: ld hl,flgtbl ;get flag table add hl,de ;index into flag table ret ;done ; ;**************************************************************** ; reset error count to zero * ; * ; a = slave number on entry * ; hl = error count address on exit * ; (hl) = zero * ;**************************************************************** ; rercnt: ld e,a ;slave processor number to de-reg ld d,0 ; call geteca ;get error count address ld (hl),0 ;set error count=0 ret ;done ; ;**************************************************************** ; get error count address in hl * ; * ; de = slave number on entry * ; hl = error count address on exit * ;**************************************************************** ; geteca: ld hl,errtbl ;get error count table add hl,de ;index into error count table ret ;done ; end ress to c-reg getfta: ld hl,flgtbl ;get flag table add hl,de ;index into flag table ret ;done ; ;**************************************************************** ; reset error count to zero * ; * ; a = slave number on entry * ; hl = error count address on exit * ; (hl) = zero * ;**************************************************************** ; rercnt: ld e,a ;slave processor number to de-reg ld d,0 ; call geteca ;get error count address ld (hl),0 ;set erP d$U4 -QADT@T"%9%PCKTIN@% R9pp9ǃA!ȄR1 @ @e f f $Xe@2L&<Q*2]cR=yS0"h!@ @d8u\ ^b&b`mb`m?-Qff =bpXjʠ ",H͠@lp,;2xU,PW<y6 # ͱC;O,su\#zYlC'ìNͺBͻ@ H3oTC>@u!E63o,veq|vEXocD+#+d  Qfé`,x 803o-k6O 8$ͼ`M[8ClYHCv`|v\H #;V`yplxl3h(# +: qpDdž!@` 1ڳ.6ǁ-6muGWiYGicyްmbpmefml2;O,su\#zYlC'ìNͺBͻ@ H3oTC>@u!E63o,veq|vEXocD+#+d  Qfé`,x 803o-k6O 8$ͼ`M[8ClYHCv`|v\H #;V`yplxl3h(# +: qpDdž!@` 1ڳ.6ǁ-6muGWiYGicyްmbpmefml2;O,su\#zYlC'ìNͺBͻ@ H3oTC>@u!E63o,veq|vEXocD+#+d  Qfé`,x 803o-k6O 8$ͼ`M[8ClYHCv`|v\H #;V`yplxl3h(# +: qpDdž!@` 1ڳ.6ǁ-6muGWiYGicyްmbpmefml2|4L>! v昁Ii* vo=;VL@!@ ^^d 3%s ;end of initialization routine ;  bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; 005F! 1D 00 db opcr,00000000b ; ; output port configuration register ; bit 7 - op7 0=opr[7] 1=txrdyb ; bit 6 - op6 0=opr[6] 1=txrdya ; bit 5 - op5 0=opr[5] 1=rxrdy/ffullb ; bit 4 - op4 0=opr[4] 1=rxrdy/ffulla ; bit 3,2 - op3 00=opr[3] 01=c/t output ; 10=txcb(1x) 11=rxcb(1x) ; bit 1,0 - op2 00=opr[2] 01=txca(16x) ; 10=txcDEAR S-100 USER, Thank YOՠ for purchasing TurboSlave I the fastest bit slav o th marke fo S-10 TurboDOӠ systems We appreciate your patronage. We look forward to hearing from you soon We will stan behin thi produc 100% Yo ar mor tha welcom t cal t ge hel o t tel u wha product yo ar intereste in. THIS DISK INCLUDES THE FOLLOWING: 1. TURBOSLAV DO GE PA FILES TSLAVE. fo generatin non-banke 64 slav an TSLAVEB. fo generatin banke 128 slave 2. MASTE DO GE PA FILES MASTER. ar presente a example s yo ca se wha you file fo generatin maste operatin syste shoul loo like I yo ar usin a Advance Digita Superqua thes wil wor a is. 3. TSDOC Thi i PRELIMINAR documentatio fo TurboSlav I Yo wil receiv complet printe versio o thi soon. 4. TSCRC.CO Thi i checksu utility Man problem ar cause b ba turbodo re modules Th fil TSCRC.CR contain th cr code fo th re module yo wer sent Prin i ou an verif the b typin TSCR TS*.REL i an code ar differen fro you printou reassembl th correspondin MA file. YOUҠ BOARĠ ANĠ DRIVER ARŠ SHIPPEĠ CONFIGUREĠ TϠ WOR TOGETHER AS FOLLOWS: 1. J (th lef connector i configure fo standar termina an i se fo 960 bau b th monito ro an th turbodo drivers ( bits stop an n par.) 2.JB an th Turbodo driver se th slav addres t 70H B sur thi doesn' conflic wit othe board i you system. 3 E1 i jumpere s th boar wil automaticall reques t b boote b TurboDOS (a oppose t comin u i th monitor). HERE'S HOW TO GET STARTED: 1. Plu th boar int you S-10 system. 2. Instal th supplie seria interfac cabl b pluggin th heade connecto ont J wit th re wir o th lef sid (b th re l.e.d). 3.Plu you terminal' cabl int th seria interfac cable DB-2 connector 4. Tur o you system an brin i u wit TurboDO an inser bootabl dis wit copie o everythin yo usuall us whe regenin you operatin syste i driv A. 5. Inser thi dis i driv an cop it content t you dis A (Yo won' nee th *.ma file sinc yo hav the *.rel files). 6. Pu thi dis away an o driv A typ D TSLAVE t ge banke slav operatin system i wil b calle th TurboDO defaul OSSLAVE.SYS I yo ar usin 64 slave o TurboDOS 1.2 yo wil wan t typ D TSLAV t generat non-banke slav operatin system. 7. I YOUҠ system maste GE fil remov th circui drive nam an boo file i existen an ad TSMCKTD an TSBOO (TurboSlav maste circui drive an boo routines se exampl MASTER.GEN). 8. I YOUҠ system' maste PA fil ad NMBES an modif o ad NMBSV 1. 9. GEΠ you MASTEҠ operatin syste accordin t you manufacturer instructions. 10. Pres rese an shortl TurboSlav shoul sig o wit th TurboDOS prompt Hav fu ! NOTE:I availabl chec ou ge file agains on supplie fo anothe slav b th vendo o you master Require TurboDOS module var fro releas t release. CHANGING THE ADDRESS OF TURBOSLAVE I I yo alread hav device i you syste addresse a 7 hex, you will have to change th8e address of your slave by: 1. Jumpe JB wit th correc address JB1- throug JB1- represen addres bit A throug A respectivel (ye backward an ther i n A becaus Turboslav take tw por addres an mus resid o a eve address) See manual if you have any questions. **************************************************************** * NOTE: THE SUPPLIED MANUAL SPECIFIES SLAVE ADDRESSING FOR * * SERIAL NUMBERS 1021 AND UP. ALL PREVIOUS BOARDS HAVE THE * * ADDRESS BITS INVERTED THEREFORE YOU MUST PUT A JUMPER ON * * FOR A ZERO AND OFF FOR A ONE ON ALL BOARDS WITH SERIAL * * NUMBERS BEFORE 1021 ! * **************************************************************** 2. Add to you system' MASTE PA fil ADT 0 i yo wan TurboSlav a por he o whateve addres yo decid on TROUBLESHOOTING 1. Remember we are only a phone call away. 2. REMOVE THE JUMPER FROM E10 AND RESET THE SYSTEM. Th consol attache t TurboSlav an th monito progra shoul sig on I s procee t ste 3 I th L.E.D o TurboSlav i o pres reset i shoul g out I no th boar probabl i defective I th ligh goe ou an yo stil ge n respons fro th consol yo ma hav th cabl plugge i backwards I th re wir t th L.E.D sid o th connector I th L.E.D start blinkin the loo a th manua an i wil tel yo wha i wrong I yo ca no fi i then go to STEP 1. 3. Pressin an retur shoul prin lis o commands Chec th manua i yo hav question o thes also T tes th memor an F.I.F.O d th following. X0 (set bank 0) (he commands below will tes rang o memory printing a '{' after each successful pass) T EFF (wil prin '{ unti retur i pressed) X1 (set bank 1) T0 EFFF (will print '{' until return is pressed) Z (will print '{' until return is pressed) (Will test the F.I.F.O) 4. I thes test repor a erro th boar coul b BA and although this is not likely again go to STEP 1. 5. Verify the Software installation above.  a th manua an i wil tel yo wha i wrong I yo ca no fi i then go to STEP 1. 3. Pressin an retur shoul prin lis o commands Chec th manua i yo hav question o thes also T tes th memor an F.I.F.O d th following. X0 (set bank 0)  title TurboDOS Operating System subttl TurboSlave I sign on message ; name ('tssom') ;module id ; common /?init?/ ;locate in initialization area ; USRSOM:: db 'TurboDOS Signon Message$' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' end R ATTENTION PRTMOD = 0 ;DEFAULT PRINT MODE = SPOOLED AUTUSR = 80 ;DEFAULT = USER 0, PRIVILEGED ; USRSOM = 0D,0A,"EARTH COMPUTERS TURBO-SLAVE I (64K)",0D,0A,"$" ; ;** SEE SLAVELST.PAR FOR WHAT IS NEEDED TO PUT A PRINTER ON A SLAVE ** OSLOAD SYSgOSMASTERSYS !"#$%OSMASTERSYSf&'()*+,OSSLAVEASYS-./01234OSSLAVEASYS5OSSLAVEHSYS6789:;<=OSSLAVEHSYS>PARK OM?Ub%9%PUSRSOMA)*b7 1Lg7is0̢A@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ USRSOM@ @ @ @ @ @ @ SLAVELSTBAK!QRSSLAVELSTPAR!TUVTS LIBWTSASM DO XTSBNK MAC YTSBNK RELZTSBOOT MAC+[\]TSBOOT REL^TSCKTDR MAC"_`aTSCKTDR RELbTSCONDR MACcdTSCONDR RELeTSCRC CMfgTSCRC DOChTSDOC ijklmnopTSDOC qrstuvwxTSDOC yz{|}~TSDOC ZTSDUART MAC9 title TurboDOS Operating System subttl Earth TurboSlave I Dual Port I/O Driver .z80 ; ; rev 3.1 R.O. 11/8/84 ; rev 3.3 R.O. 12/24/84 ; rev 3.4 R.O. 01/20/84 ; ; fix seropt0 & 1 and rts and fix break detect on console ; name ('tsduart') ;module id ; include TS.LIB ;use turboslave library public slrchr,dupgm,slvcnt ; tbe equ 4 ;transmit buffer empty ; csra equ 11h ;duart baud rate A csrb equ 19h ;duart baud rate B ; DSEG ;locate in data area ; brkflag: db 0 ;flag for break baudrt: db 0 ;baud rate register value rccnt:: db -2 ;reset count ; s0ibsz:: dw 64 ;serial 0 input buffer size s0ibuf: dw 0 ;serial 0 input buffer address s0iptr: dw 0 ;serial 0 input pointer s0optr: dw 0 ;serial 0 output pointer s0icnt: dw 0 ;serial 0 input count s0iwct: db 0 ;serial 0 input wait count s0ochr: db 0 ;serial 0 output character s0br: db 0 ;serial 0 baud rate code ; s0isph: ;serial 0 input semaphore dw 0 ;semaphore count ..s0ih: dw ..s0ih ;semaphore p/d head dw ..s0ih ; ;serial 0 output semaphore s0osph: dw 0 ;semaphore count ..s0oh: dw ..s0oh ;semaphore p/d head dw ..s0oh ; s1ibsz:: dw 16 ;serial 1 input buffer size s1ibuf: dw 0 ;serial 1 input buffer address s1iptr: dw 0 ;serial 1 input pointer s1optr: dw 0 ;serial 1 output pointer s1icnt: dw 0 ;serial 1 input count s1iwct: db 0 ;serial 1 input wait count s1ochr: db 0 ;serial 1 output character s1br: db 0 ;serial 1 baud rate code ; ;serial 1 input semaphore s1isph: dw 0 ;semaphore count ..s1ih: dw ..s1ih ;semaphore p/d head dw ..s1ih ; ;serial 1 output semaphore s1osph: dw 0 ;semaphore count ..s1oh: dw ..s1oh ;semaphore p/d head dw ..s1oh ; ; baud rate table ; brtbl: ; no. baud rate set # ; -- --------- ----- db 0 ; 0 50 1 db 0 ; 1 75 2 db 11H ; 2 110 2 db 22H ; 3 134.5 2 db 33H ; 4 150 2 db 44H ; 5 300 2 db 55H ; 6 600 2 db 66H ; 7 1200 2 db 0AAH ; 8 1800 2 db 77H ; 9 2000 2 db 88H ; A 2400  2 db 0CCH ; B 38.4K 1 * db 99H ; C 4800 2 db 0AAH ; D 7200 1 db 0BBH ; E 9600 2 db 0CCH ; F 19.2K 2 ; ; * this item is defined as 3600 baud but we make it 38.4K instead ; because we can not easily generate it and I don't know anybody ; that uses it anyway. The 38.4K makes for ; an incredibly fast screen update. ; COMMON /?init?/ ;locate in initialization area ; dunit:: im 2 ;set interrupt mode 2 ld hl,duvec## ;get interrupt vector address ld a,h ;get msb of interrupt vector ld i,a ;save it ld a,l ;get lsb of interrupt vector out (vector),a ;use it ld hl,duisr## ;get interrupt service address ld (duvec##),hl ;set interrupt vector address ld hl,dupgm ;get duart program list sinit: ld c,(hl) ;get port address inc hl ; ld a,(hl) ;data inc hl ; out (c),a ;output data bit 7,(hl) ;test for end jr z,sinit ; ; end of initialization routine ; ld hl,(s0ibsz) ;get serial 0 input buffer size call alloc## ;allocate packet for serial buffer ld (s0ibuf),hl ;save serial 0 input buffer address ld (s0iptr),hl ;set serial 0 input pointer ld (s0optr),hl ;set serial 0 output pointer ld hl,(s1ibsz) ;get serial 1 input buffer size call alloc## ;allocate packet for serial buffer ld (s1ibuf),hl ;save serial 1 input buffer address ld (s1iptr),hl ;set serial 1 input pointer ld (s1optr),hl ;set serial 1 output pointer ret ;done ; ; duart program table ; dupgm:: db wrcntr,11111000b ; ; write control register ; bit 7,6,5,4 - 1k common memory ; bit 3 - eprom off ; bit 2 - not used ; bit 1 - not used ; bit 0 - bank 0 ; db cra,00010000b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; * 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db mr1a,00010011b ; ; mode register one A ; bit 7 - rx RTS control ; bit 6 - rx int select ; 0=rxrdy 1=ffull ; bit 5 - error mode ; 0=char. 1=block ; bit 4,3 - parity mode ; 00=with parity ; 01=force parity ; 10=no parity ; 11=multi-drop mode ; bit 2 - parity type ; 0=even 1=odd ; bit 1,0 - bits per char ; 00=5 01=6 10=7 11=8 ; db mr2a,00001111b ; ; mode register two A ; bit 7,6 - channel mode ; 00=normal ; 01=auto echo ; 10=local doop ; 11=remote loop ; bit 5 - tx RTS control ; 0=no 1=yes ; bit 4 - CTS enable tx ; 0=no 1=yes ; bit 3,2,1,0 - stop bit length ; 0=0.563 1=0.625 2=0.688 3=0.750 ; 4=0.813 5=0.875 6=0.938 7=1.000 ; 8=1.563 9=1.625 A=1.688 B=1.750 ; C=1.813 D=1.875 E=1.938 F=2.000 ; db csra,10111011b ; ; clock select register A ; bit 7,6,5,4 - receiver clock select ; see brtbl: above ; bit 3,2,1,0 - transmitter clock select ; see brtbl: above ; 9600 baud default db imr,00101110b ; ; interrupt mask register ; bit 7 - input port change ; 0=off 1=on ; bit 6 - delta break B int ; 0=off 1=on ; bit 5 - rxrdy/ffullb int ; 0=off 1=on ; bit 4 - txrdyb int ; 0=off 1=on ; bit 3 - counter ready int ; 0=off 1=on ; bit 2 - delta break A int ; 0=off 1=on ; bit 1 - rxrdy/ffulla int ; 0=off 1=on ; bit 0 - txrdyA int ; 0=off 1=on ; db uacr,11100000b ; ; aux. control register ; bit 7 - brg set select ; 0=set 1 1=set 2 ; bit 6,5,4 - counter/timer mode and source ; 000=external (ip2) ; 001=TXCA - 1x clock of channel A trans. ; 010=TXCB - 1x clock of channel B trans. ; 011=Crystal or external clock div. 16 ; 100=external (ip2) ; 101=external (ip2) div. 16 ; 110=external crystal clock source ; 111=external crystal clock source div. 16 ; bit 3 - delta ip3 int ; 0=off 1=on ; bit 2 - delta ip2 int ; 0=off 1=on ; bit 1 - delta ip1 int ; 0=off 1=on ; bit 0 - delta ip0 int ; 0=off 1=on ; db ctu,01111000b ;30720 counts ; counter/timer upper db ctl,00000000b ;16.666ms int ; counter/timer lower db cra,00100000b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db cra,01000101b ; ; command register A ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db crb,00010000b ; ; command register B ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db mr1b,00010011b ; ; mode register one B ; bit 7 - rx RTS control ; bit 6 - rx int select ; 9 0=rxrdy 1=ffull ; bit 5 - error mode ; 0=char. 1=block ; bit 4,3 - parity mode ; 00=with parity ; 01=force parity ; 10=no parity ; 11=multi-drop mode ; bit 2 - parity type ; 0=even 1=odd ; bit 1,0 - bits per char ; 00=5 01=6 10=7 11=8 ; db mr2b,00001111b ; ; mode register two B ; bit 7,6 - channel mode ; 00=normal ; 01=auto echo ; 10=local loop ; 11=remote loop ; bit 5 - tx RTS control ; 0=no 1=yes ; bit 4 - CTS enable tx ; 0=no 1=yes ; bit 3,2,1,0 - stop bit length ; 0=0.563 1=0.625 2=0.688 3=0.750 ; 4=0.813 5=0.875 6=0.938 7=1.000 ; 8=1.563 9=1.625 A=1.688 B=1.750 ; C=1.813 D=1.875 E=1.938 F=2.000 ; db csrb,10111011b ; ; clock select register B ; bit 7,6,5,4 - receiver clock select ; see brtbl: above ; bit 3,2,1,0 - transmitter clock select ; see brtbl: above ; 9600 baud default db crb,00100000b ; ; command register B ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db crb,01000101b ; ; command register B ; bit 7 - not used (0) ; bit 6,5,4 - 000 no command ; 001 reset mr pointer ; 010 reset receiver ; 011 reset transmitter ; 100 reset error status ; 101 reset chan. A break change int. ; 110 start break chan. A ; 111 stop break chan. A ; bit 3 - disable transmitter ; bit 2 - enable transmitter ; bit 1 - disable receiver ; bit 0 - enable receiver ; db opcr,00000000b ; ; output port configuration register ; bit 7 - op7 0=opr[7] 1=txrdyb ; bit 6 - op6 0=opr[6] 1=txrdya ; bit 5 - op5 0=opr[5] 1=rxrdy/ffullb ; bit 4 - op4 0=opr[4] 1=rxrdy/ffulla ; bit 3,2 - op3 00=opr[3] 01=c/t output ; 10=txcb(1x) 11=rxcb(1x) ; bit 1,0 - op2 00=opr[2] 01=txca(16x) ; 10=txca(1x) 11=rxca(1x) ; db 0ffh ;end of table ; ; ;end of initialization routine ; cseg ;locate in program area ; serial:: comdrv:: ld a,e ;get function number or a ;function number=0? jr z,serst ;status cp 10 ;function number=10? jp z,seropt ;output now dec a ;function number=1? jr z,serin ;input dec a ;function number=2? jp z,serout ;output dec a ;function number=3? jp z,sersbr ;set baud rate dec a ;function number=4? jp z,serrbr ;read baud rate dec a ;function number=5? jp z,sersmc ;set modem controls dec a ;function number=6? jp z,serrmc ;read modem controls ret ;else done ; ; serial status routine ; serst: ld a,b ;get channel number ld bc,(s0icnt) ;get serial 0 input buffer count ld hl,(s0optr) ;get serial 0 output pointer or a ;channel number=0 jr z,..com ;if so, continue ld bc,(s1icnt) ;get serial 1 input buffer count ld hl,(s1optr) ;get serial 1 output pointer ..com: ld a,b ; or c ;serial input buffer count=0? ret z ;if so, done ld c,(hl) ;else, get serial input character ld a,0ffh ;set return code=0ffh ret ;done ; ; serial input routine ; serin: ld a,b ;get channel number or a ;channel number=0? jr nz,..s1i ;if not, continue ..s0i: di ;else, disable interrupts ld hl,(s0icnt) ;get serial 0 input count ld a,h ; or l ;serial 0 input count=0? jr z,..wt0 ;if so, continue dec hl ;decrement serial 0 input count ld (s0icnt),hl ;update serial 0 input count ld hl,(s0optr) ;get serial 0 output pointer ld a,(hl) ;get character from buffer inc hl ;increment serial 0 output pointer ex de,hl ;serial 0 output pointer to de-reg ld hl,(s0ibsz) ;get serial 0 input buffer size dec hl ;decrement input buffer size ld bc,(s0ibuf) ;get serial 0 input buffer address add hl,bc ;calc last input buffer address sbc hl,de ;buffer wrap-around? jr nc,..nwa0 ;if not, continue ld e,c ;get serial 0 input buffer address ld d,b ..nwa0: ld (s0optr),de ;update serial 0 output pointer ei ;enable interrupts ret ;done ; ..wt0: ld hl,s0iwct ;get serial 0 input wait count inc (hl) ;increment input wait count ld hl,s0isph ;get serial 0 input semaphore call wait## ;wait for console input jr ..s0i ;continue ; ..s1i: di ;disable interrupts ld hl,(s1icnt) ;get serial 1 input count ld a,h or l ;serial 1 input count=0? jr z,..wt1 ;if so, continue dec hl ;decrement serial 1 input count ld (s1icnt),hl ;update serial 1 input count ld hl,(s1optr) ;get serial 1 output pointer ld a,(hl) ;get character from buffer inc hl ;increment serial 1 output pointer ex de,hl ;serial 1 output pointer to de-reg ld hl,(s1ibsz) ;get serial 1 input buffer size dec hl ;decrement input buffer size ld bc,(s1ibuf) ;get serial 1 input buffer address add hl,bc ;calc last input buffer address sbc hl,de ;buffer wrap-around? jr nc,..nwa1 ;if not, continue ld e,c ;get serial 1 input buffer address ld d,b ; ..nwa1: ld (s1optr),de ;update serial 1 output pointer ei ;enable interrupts ret ;done ; ..wt1: ld hl,s1iwct ;get serial 1 input wait count inc (hl) ;increment input wait count ld hl,s1isph ;get serial 1 input semaphore call wait## ;wait for console input jr ..s1i ;continue ; ; serial output routine for immediate output (no polling) ; seropt: ld a,b ;get channel number or a ;channel number=1? jr nz,..s1o ;if channel number=1, continue in a,(sra) ;get duart port a status and 04 ;transmit buffer empty? ret z ;if not, done ld a,(s0br) ;else, get serial 0 baud rate code bit 6,a ;cts handshaking requested? jr z,..nhr0 ;if not, continue in a,(ip) ;else, get duart port a status cpl ;flip over cts bit and 01 ;check clear to send status ret z ;if clear to send false, done ..nhr0: ld a,c ;get serial 0 output character out (rhra),a ;output character ld a,0ffh ;set return code=0ffh ret ;done ; ..s1o: in a,(srb) ;get duart port b status and 04 ;transmit buffer empty? ret z ;if not, done ld a,(s1br) ;else, get serial 1 baud rate code bit 6,a ;cts handshaking requested? jr z,..nhr1 ;if not, continue in a,(ip) ;else, get duart port b status cpl ;flip over cts bit and 02 ;check clear to send status ret z ;if clear to send false, done ..nhr1: ld a,c ;get serial 1 output character out (thrb),a ;output character ld a,0ffh ;set return code=0ffh ret ;done ; ; serial output (poll if transmit buffer not empty) ; serout: ld a,b ;get channel number or a ;channel number=1? jr nz,..s1o1 ;if channel number=1, continue in a,(sra) ;get duart port a status bit 2,a ;transmit buffer empty? jr z,..s0nr ;if not, continue ld a,(s0br) ;else, get serial 0 baud rate code bit 6,a ;cts handshaking requested? jr z,..nhr2 ;if not, continue in a,(ip) ;else, get duart port a status cpl ;flip over cts bit bit 0,a ;check clear to send status jr z,..s0nr ;if clear to send false, continue ..nhr2: ld a,c ;get serial 0 output character out (thra),a ;output character ret ;done ; ..s0nr: ld a,c ;get serial 0 output character ld (s0ochr),a ;save output character ld de,s0opol ;get serial 0 out poll routine call lnkpol## ;create poll routine ld hl,s0osph ;get serial 0 out semaphore jp wait## ;dispatch if necessary ; ..s1o1: in a,(srb) ;get duart port b status bit 2,a ;transmit buffer empty? jr z,..s1Nr ;if not, continue ld a,(s1br) ;else, get serial 1 baud rate code bit 6,a ;ats handshaking requested? jr z,..nhr3 ;if not, continue in a,(ip) ;else, get duart port b status cpl ;flip over cts bit bit 1,a ;cheak clear to send status jr z,..s1nr ;if clear to send false, continue ..nhr3: ld a,c ;get serial 1 output ch:aracter out (thrb),a ;output character ret ;done ; ..s1nr: ld a,c ;get serial 1 output character ld (s1ochr),a ;save output character ld de,s1opol ;get serial 1 out poll routine call lnkpol## ;create poll routine ld hl,s1osph ;get serial 1 out semaphore jp wait## ;dispatch if necessary ; ; serial port 0 poll routine ; s0opol: ;serial 0 output poll routine dw 0 ;successor link pointer dw 0 ;predecessor link pointer ; in a,(sra) ;get duart port a status bit 2,a ;transmit buffer empty? ret z ;if not, done ld a,(s0br) ;else, get serial 0 baud rate code bit 6,a ;cts handshaking requested? jr z,..nhr ;if not, continue in a,(ip) ;else, get duart port a status cpl ;flip over cts bit bit 0,a ;check clear to send status ret z ;if clear to send false, done ..nhr: ld a,(s0ochr) ;get serial 0 output character out (thra),a ;output character ld hl,s0opol ;get serial 0 out poll routine call unlink## ;unlink poll routine ld hl,s0osph ;get serial 0 out semaphore jp signal## ;signal process as ready ; ; serial port 1 poll routine ; s1opol: ;serial 1 output poll routine dw 0 ;successor link pointer dw 0 ;predecessor link pointer ; in a,(srb) ;get duart port b status bit 2,a ;transmit buffer empty? ret z ;if not, done ld a,(s1br) ;else, get serial 1 baud rate code bit 6,a ;cts handshaking requested? jr z,..nhra ;if not, continue in a,(ip) ;else, get duart port b status cpl ;flip over cts bit bit 1,a ;check clear to send status ret z ;if clear to send false, done ..nhra: ld a,(s1ochr) ;get serial 1 output character out (thrb),a ;output character ld hl,s1opol ;get serial 1 out poll routine call unlink## ;unlink poll routine ld hl,s1osph ;get serial 1 out semaphore jp signal## ;signal process as ready ; ; process break routine ; if we get a break then clear the fifo cause it gets stuck ; in a funny mode then read the fifo to pop the data then ; repeat two more times to get the other locations and done.  ; .prc2: ld a,01010000b ;reset chan. A break change int. out (cra),a ;output to duart ld hl,brkflag ;point at break flag bit 0,(hl) ;check bit jr nz,.prc1 ;then exit break processing set 0,(hl) ;store we are here now ret ;done .prc1: res 0,(hl) ;reset check bit ; this will unload the receive fifo for good to start over in a,(rhra) ;get character 1 ld a,01000000b ;reset chan. A receive break out (cra),a ;output to duart in a,(rhra) ;get character 2 ld a,01000000b ;reset chan. A receive break out (cra),a ;output to duart in a,(rhra) ;get character 3 ld a,01000000b ;reset chan. A receive break out (cra),a ;output to duart ret ; ; ; receive port 0 routine (uses interrupts) ; ..s0i1:: in a,(isr) ;get interrupt status and 06h ;check rxrdy bit and delta break ret z ;if zero then done bit 2,a ;check for just break jr nz,.prc2 ; .prc: in a,(rhra) ;get duart port a data character call slvres ;check for slave shut-down!!!! ld hl,s0br ;get serial 0 baud rate code bit 5,(hl) ;inhibit input flag set? ret nz ;if so, done ld c,a ;serial 0 data character to c-reg bit 7,(hl) ;sign bit on baud rate code? jr z,..nad0 ;if not continue res 7,c ;else, strip sign bit on character ld a,(atnchr##) ;get attention character cp c ;character=attention character? jr nz,..nad0 ;if not, continue ld hl,(s0iptr) ;else, get serial 0 input pointer ld (s0optr),hl ;reset serial 0 output pointer ld hl,0 ; ld (s0icnt),hl ;set serial 0 input count=0 ..nad0: ld hl,(s0ibsz) ;get serial 0 input buffer size ld de,(s0icnt) ;get serial 0 input count inc de ;increment serial 0 input count or a ;clear carry flag sbc hl,de ;serial 0 input buffer full? ret c ;if so, done ld (s0icnt),de ;else, update serial 0 input count ld hl,(s0iptr) ;get serial 0 input pointer ld (hl),c ;store input character in buffer inc hl ;increment input pointer ex de,hl ;de=input pointer/hl=buffer size ld hl,(s0ibsz) ;get serial 0 input buffer size dec hl ;decrement input buffer size ld bc,(s0ibuf) ;get serial 0 input buffer address add hl,bc ;calc last input buffer address sbc hl,de ;buffer wrap-around? jr nc,..nwa2 ;if not, continue ld e,c ;get serial 0 input buffer address ld d,b ; ..nwa2: ld (s0iptr),de ;update serial 0 input pointer ld de,s0iwct ;get serial 0 input wait count ld hl,s0isph ;get serial 0 input semaphore call ..sigc ;signal if necessary jr ..s0i1 ;continue ; ; receive port 1 routine (uses interrupts) ; ..s1i1:: in a,(srb) ;get duart port b status bit 0,a ;character available ret z ;if not, done in a,(rhrb) ;get duart port b data character ld hl,s1br ;get serial 1 baud rate code bit 5,(hl) ;inhibit input flag set? ret nz ;if so, done ld c,a ;seria, 1 data character to c-reg bit 7,(hl) ;attention detection flag set? jr z,..nad1 ;if not, continue res 7,c ;else, strip sign bit on character ld a,(atnchr##) ;get attention character cp c ;character=attention character? jr nz,..nad1 ;if not, continue ld hl,(s1iptr) ;else, get serial 1 input pointer ld (s1optr),hl ;reset serial 1 output pointer ld hl,0 ld (s1icnt),hl ;get serial 1 input count=1 ..nad1: ld hl,(s1ibsz) ;get serial 1 input buffer size ld de,(s1icnt) ;get serial 1 input count inc de ;increment serial 1 input count or a ;clear carry flag sbc hl,de ;serial 1 input buffer full? ret c ;if so, done ld (s1icnt),de ;else, update serial 1 input count ld hl,(s1iptr) ;get serial 1 input pointer ld (hl),c ;store input character in buffer inc hl ;increment input pointer ex de,hl ;de=input pointer hl=buffer size ld hl,(s1ibsz) ;get serial 1 input buffer size dec hl ;decrement input buffer size ld bc,(s1ibuf) ;get serial 1 input buffer address add hl,bc ;calc last input buffer address sbc hl,de ;buffer wrap-around? jr nc,..nwa3 ;if not, continue ld e,c ;get serial 1 input buffer address ld d,b ; ..nwa3: ld (s1iptr),de ;update serial 1 input po)nter ld de,s1iwct ;get serial 1 input wait count ld hl,s1isph ;get serial 1 input semaphore call ..sigc ;signal if necessary jr ..s1i1 ;continue ; ..sigc: ld a,(de) ;get serial input wait count or a ;serial input wait count=0? ret z ;if so, done dec a ;decrement serial input wait count ld (de),a ;update serial input wait count jp signal## ;signal process as ready ; ; set serial rate routine ; sersbr: ld a,b ;get channel number ld hl,s0br ;get serial 0 baud rate code or a ;channel number=0? jr z,..com1 ;if so, continue ld hl,s1br ;else, get serial 1 baud rate code ..com1: ld (hl),c ;save baud rate code ld a,c ;get requested baud rate code and 0fh ;extract relevant bits ld c,a ;update requested baud rate code cp 0 ;set #1 baud rate jr z,brset1 ;50 baud cp 0BH ; jr z,brset1 ;38.4K baud cp 0DH ; jr z,brset1 ;7200 baud brset2: ld a,0E0H ;go for set # 2 out (uacr),a ; brentr: ld hl,brtbl ;point to baud rate table ld e,c ;get new baud rate ld d,0 ;zero out d reg. add hl,de ;point to new baud rate in table ld a,(hl) ;get new baud rate ld c,a ;save that value ld a,b ;get channel number or a ;channel number=0? ld a,c ;get baud rate register vadue jr z,..ch0 ;if channel number=0, jump out (csrb),a ;set baud rate for b channel ret ;done brset1: ld a,60H ;use baud rate set #1 out (uacr),a ; jr brentr ; ; ..ch0: out (csra),a ;set baud rate generator register ret ;done ; ; read serial baud rate routine ; serrbr: ld hl,s0br ;get serial 0 baud rate ld a,b ;get channel number or a ;channel number=0? jr z,..com5 ;if so, continue ld hl,s1br ;else, get serial 1 baud rate ..com5: ld a,(hl) ;get current baud rate code ret ;done ; ; set serial modem controls routine ; b=channel c=control bits ; sersmc: ld a,b ;get channel number or a ;channel number =0? ld a,0 ;get all zeros jr z,..smc0 ;do zero then set 1,a ;if so, set rts bit 1 bit 7,c ;rts requested? jr z,..nrts ;reset rts then ..rts: out (sopbc),a ;se:t that bit then ret ;done ..smc0: set 0,a ;if so set rts bit 0 bit 7,c ;rts requested? jr z,..nrts ; jr ..rts ;done then ..nrts: out (ropbc),a ;set that bit then ret ;done ; ; read modem control bits ; serrmc: ld a,b ;get channel number or a ;channel number=0? in a,(ip) ;get status bits cpl ;flip over cts bits ld c,a ;put it in 'c' for now ld a,0 ;we want zero jr z,..com4 ;if so, continue bit 1,c ;cts true? ret z ;no cts then set 7,a ;else say it is so ret ;done ..com4: bit 0,c ;cts true ret z ;no cts then set 7,a ;else, set cts bit ret ;done ; slvres: ld hl,rccnt ;reset character count slrchr equ $+1 ;sneaky way to allow a change cp '|' ;is it reset character jr z,..rc ;if so continue slvcnt equ $+1 ;sneaky way to allow a change ld (hl),-2 ;reset count to -2 ret ;done ..rc: inc (hl) ;increment reset count ret nz ;if not=0 then done di ;stop interrupts halt ;stop everything else ; end @!$\c"IG:o&###v"w:x=o&M :U(G!v͘:V(G!v12 ͉ͬͬͬ"HͬͬÈ>2ͣG@ì^G>>>>O! s#r+}! }2!" ! ! *\v"^"`"b*uv"w"y"{D!xͻ:xG!|:(####+:w>!û:GM>sA{="C*?ͪ:Ki*C{Aɷ( ʁ2L( :L ͬ߯ɷyq=(J=(M=(D=(G((9=((t(s!(tʁ¯2M"{(8:Mo <2MoĻͻ>Yf { (i(:(K ͊(!{ 0 Y6U4Rͳ//(7=(: ѷ{<({2Oz(!2N:2Oz : SESG2M ͬ>@Ĭ!M6 *=| s="?{=*?6;ͪ  $n ͥ(ͧͧͥ: G:(G:_:W ͓{=*?  {=*?!K~6ͬ ͥ<(  >ͪ>2!"2P!"Q ʇO2 ͼ*[;RJ!!"E"GGZYf  ,>ͪͬ :N_:O_ >@ì!>+r+s+w"2: :K*##R>2K*[IRWi^*E|*G|i{A*C>'d  R0y 0_ S̈́~( =(=(:þSReaSWrit SNot readS error, Drive:~AOu~(DS, Track:nfS, Sector:nf^Vz( S -S (Retry,~( SIgnore,SAbort)Ϸ(22͈gO:đ:=~:<$n2*/ 0:y00A:͂ g!~(76v(0*##~#2~#2~#( OS6!~6 [ 2#~ʁO#"͈ 6Ͳ*"^!<2#"<|*<+|:~;:7~7#g# !"> > _::  >ê͈^#V#~#fo͂! ͂ȯw1w2 ! ͕08B( (M87(!.(?:(B!08!(/ M8 $kb M8 !! !Ö>(G! ~#08:030O:<(>2:G88888 0 2x=("A8Q0@O: y2 := =2^M(:.*(w#6?# (8=(,( O:(yg͈| s1r26#͕͗6#6 #!~(# (!V:w+ ^qs#r~1< ~=2N~@2O͈|(/~!N#:0O[yS͈!6fvr(@͂(~( #! v #####:w#:w#qy(#*!@6!6!"͂!@^#V+R*|:>2:D!!Fˆ>N  r :e/!ί>ͪͪ!~1 ˎ:<=_êZZ!9u5t6ͬ6ì~.ZfZ ~.ZfZ"͏͈n/f0*ͯ"u/t0u1t2͖t.Zu Z*n5f6Zf 6.63n9f:|(n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!͖6.2~/Zf !,!0!608h!  :ʸLO ^#V|mOnΜ΢Ҩkqr̬x̬*8B̝ȁͲAΚj`s]g̬εq̬(ȬEҬ .ά!Á~1w=~=á͈Á~1 ~@Z~(w@>á~1=w\^17G)zs#r#w͈u7t8͈u9t:Zv 9~1(Zn ,w@0ZZZZZ:w@: w=>Ý~1w[Oz<(!ͯOqn7f8|>5#N#N#Fp+q+q5#4#4#4͈~?(=~=l ͈ ~    ͈~nLfMuLtMnNfOuNtO^PVQsPrQZ*{u1t2:á͈^#V#~#͠W~͠_*  7G ;á;#w 7x2 ͈q#p#zw#{w 0 !!!!͈|<("*Ö:w[ͬì6/Z~(w0!.u1t2!ÖzMD͈͏͖ͬs1r2q/p0Ý 0 ( ( ( qá~1O! 0 ( 6~G ͘4uáN1u~1O<(<(_~ (;("*" > ͈|(m~@2! C*|( ͈*͈!͓ ("6!%͓ "͈ !w)ʷ͜>Ý!6v####;ͷ*####ͷ*|(*|0++++~@:w@)w@*|!^#V+R!""F#6#͊O(6 0(. (/(2(.0q#!6 ~<(@w)NfXJ9< >! 6)N 'Y͌>o&q5Yv(^ӷ Y_y͓<ʊY6<Yn(YYv Ͷͺ N< _yYvYnͶT-V< 79T>( G&#6->NZF\Z6\)A(Zp\N9>)Ny=rg:Oo7z#́Án@:Ow@ru@͌>_6r|!uUtVnUfV͌|!uWtXnWfXS̈́SSpooler error (Ignore, Abort)Ϸ(22͈gO:=:<Ó)3Ý)3Ý)3)3)3Ý)3)3ÝN1F2˸~/Zf @ʬ!.,!,O ^#Vz*y*Yz( !l7=́շ 7w.w37gͳշ Y׷S֯~/Zf(!1!aO ~w!. ~@Zn( Z~(Zf 6^(#͈~#?(~#<#~[~%wf(z~ƀwZf ~/ Ô ͈. #n(s1r2###v( ^>V?#utڷ^V N-qZN( ^aVbNc~ds r q w ~F^#Vz(0##~ !#~ #~ #~ #~ #~ 8!;vN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-ͼ۷~ ([ S ~w^V YV ~ͼwM6 6nf NF(ÊØڟ؟؟ڟ؟ڟنffړړڀkـڀnttttttt(ړ^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd*6/͈́J Cu1t2͟0~q́Owyġ>̓͟>͟>~\w0ß~0!8MY~2<($=(!#=!84(2N]F^B % q2s0́շ ~4(=O#!ͯ~4!8`q4#͋N]F^*8I(>w#:xG!{N#F͏͈6/́u1t2͖ ~.>###6.>+q#p~2!8q26.>ḱg !t.>͟>ɯZNn~0(!=(!=(!=(60>͈*>~06.>ͥ/ɯ2~2/~1!!/~1͢ڷq1!w#6~#ͼ̷(< ÊO ~<7ȯ~N˹q##~#fo*>~w !~#<( = (#~w :xG!|~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!|F~ ̓!a|++++'!oN#F!oB( !s  !o6 |R(!V >ͥ(N!kN#F!kB(!! # ++ cͳ!k6ͬ!agM66S!oN#F!oB( ! ͳ!o6 g!^#V#N#~#fo !˾!!F#~< +++wͿ8 !V̘ޯ ~<(*>g!6Ϳ!kN#F!kB(  ͪ!oN#F!oB(  ͪ####6#K{q#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kbͬ!~#<(=(#F!|:x~#(###= !^#V=7~#fo!"sSvy2u # # ͞!sw#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !Y[YR(!W~(:U0 !vU(B!Y6!][]R(!X~(:V0 !vV( !]64!͈|( ͏Ý7!1!(!^#VF!"vѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͏͈ 0 ͈|Ö ^#V!6s1 !v T( {M!M!"{QT˾(T~˶!!~˾!"54>͈|(* s#r!"s1*!*!9ͽ[!R(^#V#b##*|(!(~=~w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!6! (!>Ͱ5##0Ͱ~4@##^#Vy ####*####v ~#fos#r͈v͖Ý"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B"\s#r#͈"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*0!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OuN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:ÒKx |6|6!|\6ѷg|\g6[!"* N#Fx !*SZ&̀Sͽ*ͽ"b||1G*$>*|6)*|6S6*:د26xp6x!!" G 1*!:ZF( *: z!{=_ZF( : ({2s\>ZF(: :~\gͳշ U KY׷ E~. "v( p0wSv(͏ͳVT6.gw0ͳշ > 4Y׷ .Sv(͏ͳV(T63ó~/"gG>͏ͳѷ Iͳ  %5~<w~/"Y׷ S w3w3~/"ó:á~12!7}(7j~Ö^=7á!7|(7jÖ^=7=)!.͖s#r#^=7+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p͈)0 70͈6#ʁʎʖֆ!c ɬu{͈!*=:{w3~12?:?x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2gg͌!o(:@((yy2͌!>:h@(:g!g!o >:@(:!! s1 4{MG!hnO~(˹ͼ: *`"b!"d*\[dRSd*`q#*\+K^ R0YPS`f!i͑G!nO~(˹ͼ: *y"{!"}*u[}RS}*yq#*u+Kw R0YPSy!͑= x!h(!qyOx:[( Gy2[!hx(!~>y(q(Wx(>yQx(>yPZ(Zy(=()!h@p#!˾v(˶! !!~( !hF! > s1 > !! {Ò*y #"~wN! ~<(.^%V&:xG!{~# ~###(N !ͯ<(w96~-| ~Yw#~<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}@@COLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000YY]]ccggkkoo @  @kkqq|| ARROW PRECISION PRODUCTS -- Banked Super Slave B ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>s1!>!>!"!"!" !">ͻ{s1x>{s1>{s1ͻ>{vD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>@!$\c"IG:o&###v"w:x=o&M :U(G!v͘:V(G!v12 ͉ͬͬͬ"HͬͬÈ>2ͣG@ì^G>>>>O! s#r+}! }2!" ! ! *\v"^"`"b*uv"w"y"{D!xͻ:xG!|:(####+:w>!û:GM>sA{="C*?ͪ:Ki*C{Aɷ( ʁ2L( :L ͬ߯ɷyq=(J=(M=(D=(G((9=((t(s!(tʁ¯2M"{(8:Mo <2MoĻͻ>Yf { (i(:(K ͊(!{ 0 Y6U4Rͳ//(7=(: ѷ{<({2Oz(!2N:2Oz : SESG2M ͬ>@Ĭ!M6 *=| s="?{=*?6;ͪ  $n ͥ(ͧͧͥ: G:(G:_:W ͓{=*?  {=*?!K~6ͬ ͥ<(  >ͪ>2!"2P!"Q ʇO2 ͼ*[;RJ!!"E"GGZYf  ,>ͪͬ :N_:O_ >@ì!>+r+s+w"2: :K*##R>2K*[IRWi^*E|*G|i{A*C>'d  R0y 0_ S̈́~( =(=(:þSReaSWrit SNot readS error, Drive:~AOu~(DS, Track:nfS, Sector:nf^Vz( S -S (Retry,~( SIgnore,SAbort)Ϸ(22͈gO:đ:=~:<$n2*/ 0:y00A:͂ g!~(76v(0*##~#2~#2~#( OS6!~6 [ 2#~ʁO#"͈ 6Ͳ*"^!<2#"<|*<+|:~;:7~7#g# !"> > _::  >ê͈^#V#~#fo͂! ͂ȯw1w2 ! ͕08B( (M87(!.(?:(B!08!(/ M8 $kb M8 !! !Ö>(G! ~#08:030O:<(>2:G88888 0 2x=("A8Q0@O: y2 := =2^M(:.*(w#6?# (8=(,( O:(yg͈| s1r26#͕͗6#6 #!~(# (!V:w+ ^qs#r~1< ~=2N~@2O͈|(/~!N#:0O[yS͈!6fvr(@͂(~( #! v #####:w#:w#qy(#*!@6!6!"͂!@^#V+R*|:>2:D!!Fˆ>N  r :e/!ί>ͪͪ!~1 ˎ:<=_êZZ!9u5t6ͬ6ì~.ZfZ ~.ZfZ"͏͈n/f0*ͯ"u/t0u1t2͖t.Zu Z*n5f6Zf 6.63n9f:|(n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!͖6.2~/Zf !,!0!608h!  :ʸLO ^#V|mOnΜ΢Ҩkqr̬x̬*8B̝ȁͲAΚj`s]g̬εq̬(ȬEҬ .ά!Á~1w=~=á͈Á~1 ~@Z~(w@>á~1=w\^17G)zs#r#w͈u7t8͈u9t:Zv 9~1(Zn ,w@0ZZZZZ:w@: w=>Ý~1w[Oz<(!ͯOqn7f8|>5#N#N#Fp+q+q5#4#4#4͈~?(=~=l ͈ ~    ͈~nLfMuLtMnNfOuNtO^PVQsPrQZ*{u1t2:á͈^#V#~#͠W~͠_*  7G ;á;#w 7x2 ͈q#p#zw#{w 0 !!!!͈|<("*Ö:w[ͬì6/Z~(w0!.u1t2!ÖzMD͈͏͖ͬs1r2q/p0Ý 0 ( ( ( qá~1O! 0 ( 6~G ͘4uáN1u~1O<(<(_~ (;("*" > ͈|(m~@2! C*|( ͈*͈!͓ ("6!%͓ "͈ !w)ʷ͜>Ý!6v####;ͷ*####ͷ*|(*|0++++~@:w@)w@*|!^#V+R!""F#6#͊O(6 0(. (/(2(.0q#!6 ~<(@w)NfXJ9< >! 6)N 'Y͌>o&q5Yv(^ӷ Y_y͓<ʊY6<Yn(YYv Ͷͺ N< _yYvYnͶT-V< 79T>( G&#6->NZF\Z6\)A(Zp\N9>)Ny=rg:Oo7z#́Án@:Ow@ru@͌>_6r|!uUtVnUfV͌|!uWtXnWfXS̈́SSpooler error (Ignore, Abort)Ϸ(22͈gO:=:<Ó)3Ý)3Ý)3)3)3Ý)3)3ÝN1F2˸~/Zf @ʬ!.,!,O ^#Vz*y*Yz( !l7=́շ 7w.w37gͳշ Y׷S֯~/Zf(!1!aO ~w!. ~@Zn( Z~(Zf 6^(#͈~#?(~#<#~[~%wf(z~ƀwZf ~/ Ô ͈. #n(s1r2###v( ^>V?#utڷ^V N-qZN( ^aVbNc~ds r q w ~F^#Vz(0##~ !#~ #~ #~ #~ #~ 8!vN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-ͼ۷~ ([ S ~w^V YV ~ͼwM6 6nf NF(ÊØڟ؟؟ڟ؟ڟنffړړڀkـڀnttttttt(ړ^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd*6/͈́J Cu1t2͟0~q́Owyġ>̓͟>͟>~\w0ß~0!8MY~2<($=(!#=!84(2N]F^B % q2s0́շ ~4(=O#!ͯ~4!8`q4#͋N]F^*8I(>w#:xG!{N#F͏͈6/́u1t2͖ ~.>###6.>+q#p~2!8q26.>ḱg !t.>͟>ɯZNn~0(!=(!=(!=(60>͈*>~06.>ͥ/ɯ2~2/~1!!/~1͢ڷq1!w#6~#ͼ̷(< ÊO ~<7ȯ~N˹q##~#fo*>~w !~#<( = (#~w :xG!|~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!|F~ ̓!a|++++'!oN#F!oB( !s  !o6 |R(!V >ͥ(N!kN#F!kB(!! # ++ cͳ!k6ͬ!agM66S!oN#F!oB( ! ͳ!o6 g!^#V#N#~#fo !˾!!F#~< +++wͿ8 !V̘ޯ ~<(*>g!6Ϳ!kN#F!kB(  ͪ!oN#F!oB(  ͪ####6#K{q#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kbͬ!~#<(=(#F!|:x~#(###= !^#V=7~#fo!"sSvy2u # # ͞!sw#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !Y[YR(!W~(:U0 !vU(B!Y6!][]R(!X~(:V0 !vV( !]64!͈|( ͏Ý7!1!(!^#VF!"vѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͏͈ 0 ͈|Ö ^#V!6s1 !v T( {M!M!"{QT˾(T~˶!!~˾!"54>͈|(* s#r!"s1*!*!9ͽ[!R(^#V#b##*|(!(~=~w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!6! (!>Ͱ5##0Ͱ~4@##^#Vy ####*####v ~#fos#r͈v͖Ý"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B"\s#r#͈"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*0!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OuN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:ÒKx |6|6!|\6ѷg|\g6[!"* N#Fx !*SZ&̀Sͽ*ͽ"b||1G*$>*|6)*|6S6*:د26xp6x!!" G 1*!:ZF( *: z!{=_ZF( : ({2s\>ZF(: :~\gͳշ U KY׷ E~. "v( p0wSv(͏ͳVT6.gw0ͳշ > 4Y׷ .Sv(͏ͳV(T63ó~/"gG>͏ͳѷ Iͳ  %5~<w~/"Y׷ S w3w3~/"ó:á~12!7}(7j~Ö^=7á!7|(7jÖ^=7=)!.͖s#r#^=7+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p͈)0 70͈6#ʁʎʖֆ!c ɬu{͈!*=:{w3~12?:?x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2gg͌!o(:@((yy2͌!>:h@(:g!g!o >:@(:!! s1 4{MG!hnO~(˹ͼ: *`"b!"d*\[dRSd*`<q#*\+K^ R0YPS`f!i͑G!nO~(˹ͼ: *y"{!"}*u[}RS}*yq#*u+Kw R0YPSy!͑= x!h(!qyOx:[( Gy2[!hx(!~>y(q(Wx(>yQx(>yPZ(Zy(=()!h@p#!˾v(˶! !!~( !hF! > s1 > !! {Ò*y #"~wN! ~<(.^%V&:xG!{~# ~###(N !ͯ<(w96~-| ~Yw#~<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}@@COLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000YY]]ccggkkoo @  @kkqq|| ARROW PRECISION PRODUCTS -- Banked Super Slave C ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>s1!>!>!"!"!" !">ͻ{s1x>{s1>{s1ͻ>{vD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>@!$\c"IG:o&###v"w:x=o&M :U(G!v͘:V(G!v12 ͉ͬͬͬ"HͬͬÈ>2ͣG@ì^G>>>>O! s#r+}! }2!" ! ! *\v"^"`"b*uv"w"y"{D!xͻ:xG!|:(####+:w>!û:GM>sA{="C*?ͪ:Ki*C{Aɷ( ʁ2L( :L ͬ߯ɷyq=(J=(M=(D=(G((9=((t(s!(tʁ¯2M"{(8:Mo <2MoĻͻ>Yf { (i(:(K ͊(!{ 0 Y6U4Rͳ//(7=(: ѷ{<({2Oz(!2N:2Oz : SESG2M ͬ>@Ĭ!M6 *=| s="?{=*?6;ͪ  $n ͥ(ͧͧͥ: G:(G:_:W ͓{=*?  {=*?!K~6ͬ ͥ<(  >ͪ>2!"2P!"Q ʇO2 ͼ*[;RJ!!"E"GGZYf  ,>ͪͬ :N_:O_ >@ì!>+r+s+w"2: :K*##R>2K*[IRWi^*E|*G|i{A*C>'d  R0y 0_ S̈́~( =(=(:þSReaSWrit SNot readS error, Drive:~AOu~(DS, Track:nfS, Sector:nf^Vz( S -S (Retry,~( SIgnore,SAbort)Ϸ(22͈gO:đ:=~:<$n2*/ 0:y00A:͂ g!~(76v(0*##~#2~#2~#( OS6!~6 [ 2#~ʁO#"͈ 6Ͳ*"^!<2#"<|*<+|:~;:7~7#g# !"> => _::  >ê͈^#V#~#fo͂! ͂ȯw1w2 ! ͕08B( (M87(!.(?:(B!08!(/ M8 $kb M8 !! !Ö>(G! ~#08:030O:<(>2:G88888 0 2x=("A8Q0@O: y2 := =2^M(:.*(w#6?# (8=(,( O:(yg͈| s1r26#͕͗6#6 #!~(# (!V:w+ ^qs#r~1< ~=2N~@2O͈|(/~!N#:0O[yS͈!6fvr(@͂(~( #! v #####:w#:w#qy(#*!@6!6!"͂!@^#V+R*|:>2:D!!Fˆ>N  r :e/!ί>ͪͪ!~1 ˎ:<=_êZZ!9u5t6ͬ6ì~.ZfZ ~.ZfZ"͏͈n/f0*ͯ"u/t0u1t2͖t.Zu Z*n5f6Zf 6.63n9f:|(n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!͖6.2~/Zf !,!0!608h!  :ʸLO ^#V|mOnΜ΢Ҩkqr̬x̬*8B̝ȁͲAΚj`s]g̬εq̬(ȬEҬ .ά!Á~1w=~=á͈Á~1 ~@Z~(w@>á~1=w\^17G)zs#r#w͈u7t8͈u9t:Zv 9~1(Zn ,w@0ZZZZZ:w@: w=>Ý~1w[Oz<(!ͯOqn7f8|>5#N#N#Fp+q+q5#4#4#4͈~?(=~=l ͈ ~    ͈~nLfMuLtMnNfOuNtO^PVQsPrQZ*{u1t2:á͈^#V#~#͠W~͠_*  7G ;á;#w 7x2 ͈q#p#zw#{w 0 !!!!͈|<("*Ö:w[ͬì6/Z~(w0!.u1t2!ÖzMD͈͏͖ͬs1r2q/p0Ý 0 ( ( ( qá~1O! 0 ( 6~G ͘4uáN1u~1O<(<(_~ (;("*" > ͈|(m~@2! C*|( ͈*͈!͓ ("6!%͓ "͈ !w)ʷ͜>Ý!6v####;ͷ*####ͷ*|(*|0++++~@:w@)w@*|!^#V+R!""F#6#͊O(6 0(. (/(2(.0q#!6 ~<(@w)NfXJ9< >! 6)N 'Y͌>o&q5Yv(^ӷ Y_y͓<ʊY6<Yn(YYv Ͷͺ N< _yYvYnͶT-V< 79T>( G&#6->NZF\Z6\)A(Zp\N9>)Ny=rg:Oo7z#́Án@:Ow@ru@͌>_6r|!uUtVnUfV͌|!uWtXnWfXS̈́SSpooler error (Ignore, Abort)Ϸ(22͈gO:=:<Ó)3Ý)3Ý)3)3)3Ý)3)3ÝN1F2˸~/Zf @ʬ!.,!,O ^#Vz*y*Yz( !l7=́շ 7w.w37gͳշ Y׷S֯~/Zf(!1!aO ~w!. ~@Zn( Z~(Zf 6^(#͈~#?(~#<#~[~%wf(z~ƀwZf ~/ Ô ͈. #n(s1r2###v( ^>V?#utڷ^V N-qZN( ^aVbNc~ds r q w ~F^#Vz(0##~ !#~ #~ #~ #~ #~ 8!vN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-ͼ۷~ ([ S ~w^V YV ~ͼwM6 6nf NF(ÊØڟ؟؟ڟ؟ڟنffړړڀkـڀnttttttt(ړ^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd*6/͈́J Cu1t2͟0~q́Owyġ>̓͟>͟>~\w0ß~0!8MY~2<($=(!#=!84(2N]F^B % q2s0́շ ~4(=O#!ͯ~4!8`q4#͋N]F^*8I(>w#:xG!{N#F͏͈6/́u1t2͖ ~.>###6.>+q#p~2!8q26.>ḱg !t.>͟>ɯZNn~0(!=(!=(!=(60>͈*>~06.>ͥ/ɯ2~2/~1!!/~1͢ڷq1!w#6~#ͼ̷(< ÊO ~<7ȯ~N˹q##~#fo*>~w !~#<( = (#~w :xG!|~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!|F~ ̓!a|++++'!oN#F!oB( !s  !o6 |R(!V >ͥ(N!kN#F!kB(!! # ++ cͳ!k6ͬ!agM66S!oN#F!oB( ! ͳ!o6 g!^#V#N#~#fo !˾!!F#~< +++wͿ8 !V̘ޯ ~<(*>g!6Ϳ!kN#F!kB(  ͪ!oN#F!oB(  ͪ####6#K{q#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kbͬ!~#<(=(#F!|:x~#(###= !^#V=7~#fo!"sSvy2u # # ͞!sw#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !Y[YR(!W~(:U0 !vU(B!Y6!][]R(!X~(:V0 !vV( !]64!͈|( ͏Ý7!1!(!^#VF!"vѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͏͈ 0 ͈|Ö ^#V!6s1 !v T( {M!M!"{QT˾(T~˶!!~˾!"54>͈|(* s#r!"s1*!*!9ͽ[!R(^#V#b##*|(!(~=~w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!6! (!>Ͱ5##0Ͱ~4@##^#Vy ####*####v ~#fos#r͈v͖Ý"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B"\s#r#͈"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*0!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OuN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:Ò=Kx |6|6!|\6ѷg|\g6[!"* N#Fx !*SZ&̀Sͽ*ͽ"b||1G*$>*|6)*|6S6*:د26xp6x!!" G 1*!:ZF( *: z!{=_ZF( : ({2s\>ZF(: :~\gͳշ U KY׷ E~. "v( p0wSv(͏ͳVT6.gw0ͳշ > 4Y׷ .Sv(͏ͳV(T63ó~/"gG>͏ͳѷ Iͳ  %5~<w~/"Y׷ S w3w3~/"ó:á~12!7}(7j~Ö^=7á!7|(7jÖ^=7=)!.͖s#r#^=7+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p͈)0 70͈6#ʁʎʖֆ!c ɬu{͈!*=:{w3~12?:?x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2gg͌!o(:@((yy2͌!>:h@(:g!g!o >:@(:!! s1 4{MG!hnO~(˹ͼ: *`"b!"d*\[dRSd*`q#*\+K^ R0YPS`f!i͑G!nO~(˹ͼ: *y"{!"}*u[}RS}*yq#*u+Kw R0YPSy!͑= x!h(!qyOx:[( Gy2[!hx(!~>y(q(Wx(>yQx(>yPZ(Zy(=()!h@p#!˾v(˶! !!~( !hF! > s1 > !! {Ò*y #"~wN! ~<(.^%V&:xG!{~# ~###(N !ͯ<(w96~-| ~Yw#~<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}@@COLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000YY]]ccggkkoo @  @kkqq|| ARROW PRECISION PRODUCTS -- Banked Super Slave D ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>s1!>!>!"!"!" !">ͻ{s1x>{s1>{s1ͻ>{vD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>> A!\c"Q%:o&###T" w:=o&k+ :](G!Tv:^(G!Tͭ12͉͊͊͊"H͊͊f>2ͣG@Ê^G>>>>O! s#r+}! }2!" ! ! *\T"^"`"b*uT"w"y"{D!ͻ:G!:(####+:w>!û:G+>sI{E"K*G͈:SG*K{Iɷ( ʵ _2Tͮ( :T͊߯ɷyO=(J=(M=(D=(G((9=((t(s!(t_¯2U"{(8:Uo <2Uoę͙>Yf { (i(:(K h(!{ 0 Y6U4R͑//(7=(:ѷ{<({2Wz(!2V:2Wz :SMSO2U ͊>@Ċ!U6 *E| sE"G{E*G6;͈ir$n ̓(̓ͅͅ:G:(G:_:Wq{E*G{E*G!S~6͊ ̓<( >͈>2!"2P!b"Q ɇO2͚*[CR(!!"M"O%ZYf ,>͈͊:V_:W_ >@Ê!^>+r+s+w"2::S*##R>2S*[QR5G<*M|*O|G{I*K>'ͣͣdͣ ͣ R0y 0_ 1b~( =(=(:kÜ1Rea1Writ 1Not read1 error, Drive:~AOS~(D1, Track:nfͻ1, Sector:nfͻ^Vz( 1 -ͻ1 (Retry,~( 1Ignore,1Abort)η(fEO:kđ:=~:|<$n/ 0:y0A: ` g!~(76T(0* ##~#2~#2~#( OS !~6 [  #~_O#" f 6͐* "Dʹ0S:$ !,~ 6C#6O#6M:2(:0c#<5=^:Wc!\``k(ʹ(\ͫ( ʹ(lͫ*8 {< 0O{=ր2y:#=2V:2( :0c2W*0_C:# : ( :<^!#D#"D|*D+|:~;:7~7#E# !" > > _::  >Èf^#V#~#fo`!`ȯw1w2 !s8B( (+87(!.(?:(B!8!(/ +8 $kb +8 !!!t>(G!~#08:030O:"<(>2": G88888 0 2 x=("A8Q0@O: y2:"= =2"<+(:.*(w#6?# (8 =(,( O:(yEf| s1r26#su6#6 #!~(# (!V:w+ ^qs#r~1< ~=2V~@2Wf|(/~{N#:0O[ yS f!6DTP(@`(~( #! T #####:w#:w#qy(#* !H!6!" `!H^#V+R* |:>2:Lͯ!!Fˆ>N  P :mͯ/!ί>͈͈!~1 ˎ:<=_ÈZZͪ!9u5t6ͨ͊ͽÊ~.ZfZ ~.ZfZ"mfn/f0*ͪͽ͍"u/t0u1t2tt.Zu Z*n5f6Zf 6.63n9f:|(ʹn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!t6.~/Zf !,!0!08h!t  ʖ*O ^#V|K-Lz΀цIOηνPˊVsˊ {_͐xͽH>Q;E͓̊O̊ɹȊ#Ҋ Ί!_~1w=~=f_~1 ~@Z~(w@>~1=w\^1G)Xs#r#wfu7t8fu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:w=>{~1w[Oz<(!͍Oqn7f8|>#N#N#Fp+q+q#4#4#4f~?(=~=l f ~    f~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:f^#V#~#~W~~_*  G ͜͜#w x2 fq#p#zͼw#{ͼw 0 !!!!f|<("*t:w[͊Ê6/Z~(w0!.u1t2!tXMDfm͊ts1r2q/p0{ 0 ( ( ( O~1O! 0 ( 6~G v4SN1S~1O<(<(_~ (͜("*"> f|(m~@2 C*|( f*f!q ("6!%q "f !wʷz>{!T####͕͜*####ͺ͕*|(ͺͳ*|ij0++++~@:w@w@*|!^#V+R!""F#6#hO(6 0(. (/(2(.0q#o&q5Yv(^ͨӷY=Wq( G&#6 NZF\Z6\A(Zp\,,y=Pg:WoX#__n@:Ww@Pu@j>_6P|!uUtVnUfVj|!uWtXnWfX1b1Spooler error (Ignore, Abort)η(fEO:=:<q;{;{;;;{;;{N1F2˸~/Zf @ʊ! ,!,O ^#Vz*Yz( !J7=_շ 7w.w37E͑շ ͬ7׷1֯ͮ~/Zf(!!?O ~w!. ~@Zn( Z~(Zf 6^(#f~#?(~#<#~[~%wf(X~ƀwZf ~/ r f. #n(s1r2###v( ^>V?utڷ^V N-qZN( ^aVbNc~ds r q w ~$^#Vz(0##~ !#~ #~ #~ #~ #~ 8!TN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͚۷~ ([ S ~w^V YV ~͚w+6 6nf NFʹ(ͮhv}}ڥح}}}}}}dDDqqq^I^^LRRRRRRRq^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/_f( !u1t2}~q_Owy>}a>}>~\w0}~0!͠8MY~2<($=(!=!͠84(2N]F^B % q2s0_շ ~4(=O!͍~4!͠8`q4iN]F^8I(;>w#:G!N#F;mf6/_u1t2t ~.>###6.> q#p~2!͠8q26.>I_g !t.>}>ɯZNL~0(!=(!=(!=(60>f>~0͠6.>̓/ɯ2~2/~1!͠!/~1̀ڷq1!w#͠6~#̷͚(< hO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ a!iZ++++'!wN#F!wB( !{  !w ZR(!V ͭͭ>̓(N!sN#F!sB(!! # ++ c͑!s͊!iE+66S!wN#F!wB( ! ͑!w E!^#V#N#~#fo !˾!!F#~< +++w͝8 !Vvޯ ~<(>E!6͝!sN#F!sB(  ͈!wN#F!wB(  ͈####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͊!~#<(=(#F!:~#(###= !^#V=7~#fo!"{S~y2} # # |!{w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !a[aR(!_~(:]0 !T](Bͷ!a!e[eR(!`~(:^0 !T^( ͷ!e4!f|( m{!1!!^#V$>!"Tѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!mf fZt ^#V!s1!v 2( {M!M!"{Q2˾(2~˶!!~˾!"54>f|(* s#r!"s1*!*!9͛[!R(^#V#@##*|(!~=\w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!!!>͎5##͎~4##^#Vy ####*####v ~#fos#rfTt{"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B":s#r#f"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OSN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r7N˹S~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72c!$"(!r: !~,/0!08%h!Z mʛֆ!l O ^#V|f !! 6ʷ 'N8ʷ m͑=(>w.ͭ!:> *+++KCBRͭZF(!45(!(s1G{:1G^!\*>è~1(# :*+++[CR8[R8 2:>{(0_AeScz**6PVn^2*Q ^: * ^!N*"&*&":o>p2ͦ*"R0!["""S4KB2:O^K"x ZZ!Z:ѷEZ:E[!"* N#Fx !*Sͩ8.^S͛*͛"@||1G*,>*|*|S*:د2VNV!!"(% 1*!͹:ZF( *: X!{=_ZF( :({2s\>ZF(::~\E͑շ Uͬ K7׷ E~. "v( N0w1v(m͑Vͮ2ͮ6.ͭEw0͑շ >ͬ 47׷ .1v(m͑Vͮ(2ͮ63Ñͭ~/"̶EG>m͑ѷ I͑ ͬ %~<w~/"7׷ 1 w3w3ͮ~/"Ñ:~12!}(7j\t^=!|(7jt^==)!6ts#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pf)0 f6#_ltֆ!A ɊSYf!*E:w3~12G:G>>:RO!Sqj!U:S>!!U{( =(.==ʡ===xKd*b(K}*{xN>x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2goj!o(:@((yy2j!>:h@(:g!o!o>:@(:!!s1<{MG!hnO~(˹: *`"b!"d*\[dRSd*`q#*\+K^ R0YPS`f!i͙G!nO~(˹: *y"{!"}*u[}RS}*yq#*u+Kw R0YPSy!͙=x!h(!qyOx:[( Gy2[!hx(!~>y(q(Wx(>yQx(>yPZ(Zy(=()!p@p#!˾v(˶!!!~( !pF!> s1> !!{p*y #"~wN! ~<(.^%V&:G!~# ~###(N !͍<(wA6~5| ~Yw#~%<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}#HHCOLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000aaeekkoossww@^  WW@kkqq|| ARROW PRECISION PRODUCTS -- Banked Super Slave E ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CX CZPYL!"_P=)!KXx( 0< [Z0<"}2\`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'ͣ>{">2!"2!"w#s#r2P!"Q!{>{>?s1!>!>!"!"!" !">ͻ{s1̀>{s1>{s1>{v"_P=)!KXx( 0< [Z0<"}2\`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'ͣ>{">2!"2!"w#s#r2P!"Q!{>{>@!$\c"IG:o&###v"w:x=o&M :U(G!v͘:V(G!v12 ͉ͬͬͬ"HͬͬÈ>2ͣG@ì^G>>>>O! s#r+}! }2!" ! ! *\v"^"`"b*uv"w"y"{D!xͻ:xG!|:(####+:w>!û:GM>sA{="C*?ͪ:Ki*C{Aɷ( ʁ2L( :L ͬ߯ɷyq=(J=(M=(D=(G((9=((t(s!(tʁ¯2M"{(8:Mo <2MoĻͻ>Yf { (i(:(K ͊(!{ 0 Y6U4Rͳ//(7=(: ѷ{<({2Oz(!2N:2Oz : SESG2M ͬ>@Ĭ!M6 *=| s="?{=*?6;ͪ  $n ͥ(ͧͧͥ: G:(G:_:W ͓{=*?  {=*?!K~6ͬ ͥ<(  >ͪ>2!"2P!"Q ʇO2 ͼ*[;RJ!!"E"GGZYf  ,>ͪͬ :N_:O_ >@ì!>+r+s+w"2: :K*##R>2K*[IRWi^*E|*G|i{A*C>'d  R0y 0_ S̈́~( =(=(:þSReaSWrit SNot readS error, Drive:~AOu~(DS, Track:nfS, Sector:nf^Vz( S -S (Retry,~( SIgnore,SAbort)Ϸ(22͈gO:đ:=~:<$n2*/ 0:y00A:͂ g!~(76v(0*##~#2~#2~#( OS6!~6 [ 2#~ʁO#"͈ 6Ͳ*"^!<2#"<|*<+|:~;:7~7#g# !"> > _::  >ê͈^#V#~#fo͂! ͂ȯw1w2 ! ͕08B( (M87(!.(?:(B!08!(/ M8 $kb M8 !! !Ö>(G! ~#08:030O:<(>2:G88888 0 2x=("A8Q0@O: y2 := =2^M(:.*(w#6?# (8=(,( O:(yg͈| s1r26#͕͗6#6 #!~(# (!V:w+ ^qs#r~1< ~=2N~@2O͈|(/~!N#:0O[yS͈!6fvr(@͂(~( #! v #####:w#:w#qy(#*!@6!6!"͂!@^#V+R*|:>2:D!!Fˆ>N  r :e/!ί>ͪͪ!~1 ˎ:<=_êZZ!9u5t6ͬ6ì~.ZfZ ~.ZfZ"͏͈n/f0*ͯ"u/t0u1t2͖t.Zu Z*n5f6Zf 6.63n9f:|(n3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!͖6.2~/Zf !,!0!608h!  :ʸLO ^#V|mOnΜ΢Ҩkqr̬x̬*8B̝ȁͲAΚj`s]g̬εq̬(ȬEҬ .ά!Á~1w=~=á͈Á~1 ~@Z~(w@>á~1=w\^17G)zs#r#w͈u7t8͈u9t:Zv 9~1(Zn ,w@0ZZZZZ:w@: w=>Ý~1w[Oz<(!ͯOqn7f8|>5#N#N#Fp+q+q5#4#4#4͈~?(=~=l ͈ ~    ͈~nLfMuLtMnNfOuNtO^PVQsPrQZ*{u1t2:á͈^#V#~#͠W~͠_*  7G ;á;#w 7x2 ͈q#p#zw#{w 0 !!!!͈|<("*Ö:w[ͬì6/Z~(w0!.u1t2!ÖzMD͈͏͖ͬs1r2q/p0Ý 0 ( ( ( qá~1O! 0 ( 6~G ͘4uáN1u~1O<(<(_~ (;("*" > ͈|(m~@2! C*|( ͈*͈!͓ ("6!%͓ "͈ !w)ʷ͜>Ý!6v####;ͷ*####ͷ*|(*|0++++~@:w@)w@*|!^#V+R!""F#6#͊O(6 0(. (/(2(.0q#!6 ~<(@w)NfXJ9< >! 6)N 'Y͌>o&q5Yv(^ӷ Y_y͓<ʊY6<Yn(YYv Ͷͺ N< _yYvYnͶT-V< 79T>( G&#6->NZF\Z6\)A(Zp\N9>)Ny=rg:Oo7z#́Án@:Ow@ru@͌>_6r|!uUtVnUfV͌|!uWtXnWfXS̈́SSpooler error (Ignore, Abort)Ϸ(22͈gO:=:<Ó)3Ý)3Ý)3)3)3Ý)3)3ÝN1F2˸~/Zf @ʬ!.,!,O ^#Vz*y*Yz( !l7=́շ 7w.w37gͳշ Y׷S֯~/Zf(!1!aO ~w!. ~@Zn( Z~(Zf 6^(#͈~#?(~#<#~[~%wf(z~ƀwZf ~/ Ô ͈. #n(s1r2###v( ^>V?#utڷ^V N-qZN( ^aVbNc~ds r q w ~F^#Vz(0##~ !#~ #~ #~ #~ #~ 8!?vN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-ͼ۷~ ([ S ~w^V YV ~ͼwM6 6nf NF(ÊØڟ؟؟ڟ؟ڟنffړړڀkـڀnttttttt(ړ^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd*6/͈́J Cu1t2͟0~q́Owyġ>̓͟>͟>~\w0ß~0!8MY~2<($=(!#=!84(2N]F^B % q2s0́շ ~4(=O#!ͯ~4!8`q4#͋N]F^*8I(>w#:xG!{N#F͏͈6/́u1t2͖ ~.>###6.>+q#p~2!8q26.>ḱg !t.>͟>ɯZNn~0(!=(!=(!=(60>͈*>~06.>ͥ/ɯ2~2/~1!!/~1͢ڷq1!w#6~#ͼ̷(< ÊO ~<7ȯ~N˹q##~#fo*>~w !~#<( = (#~w :xG!|~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!|F~ ̓!a|++++'!oN#F!oB( !s  !o6 |R(!V >ͥ(N!kN#F!kB(!! # ++ cͳ!k6ͬ!agM66S!oN#F!oB( ! ͳ!o6 g!^#V#N#~#fo !˾!!F#~< +++wͿ8 !V̘ޯ ~<(*>g!6Ϳ!kN#F!kB(  ͪ!oN#F!oB(  ͪ####6#K{q#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kbͬ!~#<(=(#F!|:x~#(###= !^#V=7~#fo!"sSvy2u # # ͞!sw#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !Y[YR(!W~(:U0 !vU(B!Y6!][]R(!X~(:V0 !vV( !]64!͈|( ͏Ý7!1!(!^#VF!"vѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!͏͈ 0 ͈|Ö ^#V!6s1 !v T( {M!M!"{QT˾(T~˶!!~˾!"54>͈|(* s#r!"s1*!*!9ͽ[!R(^#V#b##*|(!(~=~w!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!6! (!>Ͱ5##0Ͱ~4@##^#Vy ####*####v ~#fos#r͈v͖Ý"R0S!"#"!^#V!R('+V+^*##R(58*R8S"*|( ![R0 +r+s['*[R>B"\s#r#͈"!^#V!R(U*+F+N R(+V+^K B(+V+^## DM*+p+q*+F+N+V+^ s#r#*0!^#V!R*R +V+^##"~#<(= ~# ~ xD##>)))))))'d  R0y 0OuN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#rYN˹u~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72ͅ!$" !: !,/0!08%h!| 6ʏ6ʽֆ! O ^#V|͈ !! 6)ʷ 'p8)ʷ ͏ͳ=(>)w.!: > *+++K;BRZF(! 45(!(s1G{: 1G̀!\*>è~1(# : *+++[;R8[R8 2 : >Ý666666666'6666$$JR$$$666666$c6$$6666$$66u6666!'!88LL6666666666)56@666X6666666)6r6666666x66ǹ2*s ̀: * ̀!N*"*"$:o>p2*R0!["S,KB*:ÒKx |6|6!|\6ѷg|\g6[!"* N#Fx !*SZ&̀Sͽ*ͽ"b||1G*$>*|6)*|6S6*:د26xp6x!!" G 1*!:ZF( *: z!{=_ZF( : ({2s\>ZF(: :~\gͳշ U KY׷ E~. "v( p0wSv(͏ͳVT6.gw0ͳշ > 4Y׷ .Sv(͏ͳV(T63ó~/"gG>͏ͳѷ Iͳ  %5~<w~/"Y׷ S w3w3~/"ó:á~12!7}(7j~Ö^=7á!7|(7jÖ^=7=)!.͖s#r#^=7+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#p͈)0 70͈6#ʁʎʖֆ!c ɬu{͈!*=:{w3~12?:?x 3*d|(+"d*b~#*\+K^ R0YPSb!f4!i*}|(+"}*{~#*u+Kw R0YPS{!4!x> :h@(y>:@(y>x> )(:h@((yy2gg͌!o(:@((yy2͌!>:h@(:g!g!o >:@(:!! s1 4{MG!hnO~(˹ͼ: *`"b!"d*\[dRSd*`@~wY#~w<#~wW#~wX#~wI#~wJ#~wK#~wR#~wS#~w_#~w`#~wN#~wO#~wP#~wQ#~wj#~wk>-| ~Yw#~<~(  !uetfneffnjfk$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}@@COLDSTRTAUTWARMSTRTAUT1$ -PRINT-?000YY]]ccggkkoo @  @kkqq|| ARROW PRECISION PRODUCTS -- Banked Super Slave F ready.$ $OSSLAVE SYS37;@DJD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>s1!>!>!"!"!" !">ͻ{s1x>{s1>{s1ͻ>{vD@WOZ_ekoúý2. %YYY+CP CRPYL!"_P=)!KPx( 0< [R0<"u2wT`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s1'>{">2!"2!"w#s#r2P!"Q!{>{>Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE I SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (L-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( U@Å~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. #n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(D!D[T5!D5*\DS\5!i !k!Dd*\i5>o>p2Xͬ*`R0![`"`SrKB5p:XOdK`x ``!D5`@ѷK5`@K5[F!H"F*D N#Fx !H*\DS\5ͯ5>ldS\͡*\͡"\F||1*j>+*\| *\|DS\5*\D5:Dد2Y\T\!!"f+ 1*T!Ϳ:V!"\*`![`Kf5*TD!D[T52YCZS\"^*^[\KZ:Y*T"T!ZF( !D:S STe>ZF( *T:S ^!{=_ZF( :S({2Vs\>ZF(:S:V~\Kܷ͗ UͲ K=޷ E~. "v( T0w7v(s͗Vʹ8ʹ6.ͳKw0ܷ͗ >Ͳ 4=޷ .7v(s͗Vʹ(8ʹ63×ͳ~/"̼KG>s͗ѷ I͗ Ͳ %~<w~/"=޷ 7 w3w3ʹ~/"×:Å~12!}(7jbz^=Å!|(7jz^==)!tzs#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pl)0 l6#erzֆ!G ɐY_l!*:w3~12:x 3*|(+"*~#*+K R0YPS!4!*|(+"*~#*+K R0YPS!4!x :w(A/y>:w(/y>x (W(:w(/G(yy2p!W(:w(/O(yy2p!W:w(/G:!!W:w(/O:!!>P!F ˆ>@>@>@W l!nO~(˹: *"!"*[RS*q#*+K R0YPS!G!nO~(˹: *"!"*[RS*q#*+K R0YPS!=x!(!qyO( ( (>!Y~Oxy( >`!x(!~x>( y( y(x/O>(IA!|(64vy(=(C!> `G(`G @> @p#> > !˾v(˶!!!~( !@>@`O(> F> >@`O > !s01R_ 4͕_c{0@6W(T!!> _ > !4~<86͐͒{0v$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}aCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. A#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(+F+N+V+^ s#r#*(!,^#V!,R*$R +V+^##"$~#<(= ~# ~ xD##>)))))))'d  R0y 0OYN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r=N˹Y~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72Wi!$"f!x:Z !,/0!08%h!` sʡֆ!r O ^#V|l !! 6 ѷ 'T8 ѷ s͗=(> w.ͳ!:S> *$+++KBRͳZF(!S45(!D(sB15{B:S1d!\D5*>~1(# :S*$+++[R8[R8 2S:S>Á .6eGkYi 00 $< V\nd2*\WD d: *\D5 d!EN5*\"d*d"\:Y<\dD!D[T5!D5*\DS\5!i !k!Dd*\i5>o>p2Xͬ*`R0![`"`SrKB5p:XOdK`x ``!D5`@ѷK5`@K5[F!H"F*D N#Fx !H*\DS\5ͯ5>ldS\͡*\͡"\F||1*j>+*\| *\|DS\5*\D5:Dد2Y\T\!!"f+ 1*T!Ϳ:V!"\*`![`Kf5*TD!D[T52YCZS\"^*^[\KZ:Y*T"T!ZF( !D:S STe>ZF( *T:S ^!{=_ZF( :S({2Vs\>ZF(:S:V~\Kܷ͗ UͲ K=޷ E~. "v( T0w7v(s͗Vʹ8ʹ6.ͳKw0ܷ͗ >Ͳ 4=޷ .7v(s͗Vʹ(8ʹ63×ͳ~/"̼KG>s͗ѷ I͗ Ͳ %~<w~/"=޷ 7 w3w3ʹ~/"×:Å~12!}(7jbz^=Å!|(7jz^==)!tzs#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pl)0 l6#erzֆ!G ɐY_l!*:w3~12:x 3*|(+"*~#*+K R0YPS!4!*|(+"*~#*+K R0YPS!4!x :w(/y>:w(/y>x (W(:w(/G(yy2p!W(:w(/O(yy2p!W:w(/G:!!W:w(/O:!!>P!F ˆ>@>@>@W l!nO~(˹: *"!"*[RS*q#*+K R0YPS!G!nO~(˹: *"!"*[RS*q#*+K R0YPS!=x!(!qyO( ( (>!Y~Oxy( >`!x(!~x>( y( y(x/O>(IA!|(64vy(=(C!> `G(`G @> @p#> > !˾v(˶!!!~( !@>@`O(> F> >@`O > !s01R_ 4͕_c{0@6W(T!!> _ > !4~<86͐͒{0v$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}aCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $B>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE I SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (J-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. B#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(+F+N+V+^ s#r#*(!,^#V!,R*$R +V+^##"$~#<(= ~# ~ xD##>)))))))'d  R0y 0OYN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r=N˹Y~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72Wi!$"f!x:Z !,/0!08%h!` sʡֆ!r O ^#V|l !! 6 ѷ 'T8 ѷ s͗=(> w.ͳ!:S> *$+++KBRͳZF(!S45(!D(sB15{B:S1d!\D5*>~1(# :S*$+++[R8[R8 2S:S>Á .6eGkYi 00 $< V\nd2*\WD d: *\D5 d!EN5*\"d*d"\:Y<\dD!D[T5!D5*\DS\5!i !k!Dd*\i5>o>p2Xͬ*`R0![`"`SrKB5p:XOdK`x ``!D5`@ѷK5`@K5[F!H"F*D N#Fx !H*\DS\5ͯ5>ldS\͡*\͡"\F||1*j>+*\| *\|DS\5*\D5:Dد2Y\T\!!"f+ 1*T!Ϳ:V!"\*`![`Kf5*TD!D[T52YCZS\"^*^[\KZ:Y*T"T!ZF( !D:S STe>ZF( *T:S ^!{=_ZF( :S({2Vs\>ZF(:S:V~\Kܷ͗ UͲ K=޷ E~. "v( T0w7v(s͗Vʹ8ʹ6.ͳKw0ܷ͗ >Ͳ 4=޷ .7v(s͗Vʹ(8ʹ63×ͳ~/"̼KG>s͗ѷ I͗ Ͳ %~<w~/"=޷ 7 w3w3ʹ~/"×:Å~12!}(7jbz^=Å!|(7jz^==)!tzs#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pl)0 l6#erzֆ!G ɐY_l!*:w3~12:x 3*|(+"*~#*+K R0YPS!4!*|(+"*~#*+K R0YPS!4!x :w(/y>:w(/y>x (W(:w(/G(yy2p!W(:w(/O(yy2p!W:w(/G:!!W:w(/O:!!>P!F ˆ>@>@>@W l!nO~(˹: *"!"*[RS*q#*+K R0YPS!G!nO~(˹: *"!"*[RS*q#*+K R0YPS!=x!(!qyO( ( (>!Y~Oxy( >`!x(!~x>( y( y(x/O>(IA!|(64vy(=(C!> `G(`G @> @p#> > !˾v(˶!!!~( !@>@`O(> F> >@`O > !s01R_ 4͕_c{0@6W(T!!> _ > !4~<86͐͒{0v$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}aCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $C>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE K SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (K-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. C#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(/y>:w(/y>x (W(:w(/G(yy2p!W(:w(/O(yy2p!W:w(/G:!!W:w(/O:!!>P!F ˆ>@>@>@W l!nO~(˹: *"!"*[RS*q#*+K R0YPS!G!nO~(˹: *"!"*[RS*q#*+K R0YPS!=x!(!qyO( ( (>!Y~Oxy( >`!x(!~x>( y( y(x/O>(IA!|(64vy(=(C!> `G(`G @> @p#> > !˾v(˶!!!~( !@>@`O(> F> >@`O > !s01R_ 4͕_c{0@6W(T!!> _ > !4~<86͐͒{0v$ DSK <-- $Invalid command$Command not found$Insufficient memory$Non-privileged user$ Program terminated due to insufficient memory $\}aCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $D>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE L SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (L-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. D#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(Vʹ8ʹ6.ͳKw0ܷ͗ >Ͳ 4=޷ .7v(s͗Vʹ(8ʹ63×ͳ~/"̼KG>s͗ѷ I͗ Ͳ %~<w~/"=޷ 7 w3w3ʹ~/"×:Å~12!}(7jbz^=Å!|(7jz^==)!tzs#r#^=+w#G7w#(w#s#r#i&)= +s#r#7 r#s###q#pl)0 l6#erzֆ!G ɐY_l!*:w3~12:x 3*|(+"*~#*+K R0YPS!4!*|(+"*~#*+K R0YPS!4!x :w(E>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE M SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (M-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. E#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut !F>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $Qů:!_c"+:Eo&###Z"Iw:=o&q1 :(G!Z|:(G!Zͳ12R͉͐͐͐"͐͐͐l2͈͙Ð^! |G}0!" !N#~#y~(*Z"""*Z"""p.x E E:G!:(####+:w EARTH TURBOSLAVE N SYSTEM READY Printer A is to serial Printer with CTS Protocol.FTurboDOS 1.41 (N-User) 128k, Rev 3.4 drivers. $ >s{"*͎:M*{ɷ( ʻ e2ʹǷ( :͐ɷyU=(J=(M=(D=(G((9=((t(s!(teɯ2"{(8:o <2oğ͟>Yf { (i(: (K n(!{ 0 Y6U4R͗//(7=(:ѷ{<({2z(!2:2z :RSS2 ͐>@Đ!6 *| s"{*6;͎ox$n ͉(͉͋͋:RG:D(G:B_:CWw{*{*!~6͐ ͉<( >͎>2!"2P!h"Q ЇO2͠*$[R.!!""+ZYf ,>͎͐:_:_ >@Ð!d>+r+s+w"2:S:*##R>2*[R;MB*|*|M{*>'ͩͩdͩ ͩ R0y 0_ 7h~( =(=(:qâ7Rea7Writ 7Not read7 error, Drive:~AOY~(D7, Track:nf7, Sector:nf^Vz( 7 -7 (Retry,~( 7Ignore,7Abort)շ(lKO:qˑ:=~:<$n/ 0:y0A:Gf g!M~(76Z(0*I##~#2M~#2N~#( OSK!N~6 [I #~eO#"Kl 6͖*K"ͺ6SO:b !j~ 6C#6O#6M:p(:nia<;=d:i!\ffq(ͺ(\ͱ( ͺ(lͱ*O8 {< 0O{=ր2y:a=2:p( :ni2*O0eC:a :H( :R<^!a#"|*+|:F~;:F7~7#K# !"K> > _:N:N  >Îl^#V#~#fof!Qfϯw1w2 !Ry8B( (187(!.(?:(B!Z8!(/ 18 $kb 18 !!Q!z>(G!R~#08:030O:`<(>2`:^G88888 0 2^x=("A8Q0@O:Q y2Q:`= =2`B1(:.*(w#6?# (8;(=(,( O:F(yKl| s1r26#y{6#6 #!~(# (!V:Fw+ ^qs#r~1< ~=2~@2el|(/~N#:E0O[IySKl!M6JZV(@f(~( #! Z #####:Mw#:Nw#qy(#*K!!M6!"Kf!^#V+R*K|:F>2N:͵!!Fˆ>N  V :͵/!ί>͎͎Ƿ!~1 ˎ:<=_ÎZZͰ!9u5t6ͮ͐Ð~.ZfZ ~.ZfZ"sln/f0*Ͱ͓"u/t0u1t2zt.Zu Z*n5f6Zf 6.63n9f:|(ͺn3f4^1V2N/F0~.Zf}Dq/p0s1r2u3t4Zf(!z6.~/Zf !,!0!08h!z  ʜ0O ^#V|Q3RՀՆ،OUսVҐ\yҐ&ӁeԖ%~NDWAKӐԙUӐ пϐ)ِՐ!e~1w=~=Åle~1 ~@Z~(w@>Å~1=w\^1G)^s#r#wlu7t8lu9t:Zv 9~1(Zn ,w@0ZZZZZ:w@:Rw=>Á~1w[Oz<(!͓Oqn7f8|>#N#N#Fp+q+q#4#4#4l~?(=~=l l ~    l~nLfMuLtMnNfOuNtO^PVQsPrQZ*u1t2:Ål^#V#~#̈́W~̈́_*  G ͢Å͢#w x2 lq#p#zw#{w 0 !!!!l|<("*z:w[͐Ð6/Z~(w0!.u1t2!z^MDls͐zs1r2q/p0Á 0 ( ( ( UÅ~1O! 0 ( 6~G |4YÅN1Y~1O<(<(_~ (͢("*"> l|(m~@2 C*|( l*l!w ("6!%w "l !w ѷ̀>Á!Z####͛͢*####͛*|(͹*|Ĺ0++++~@:w@ w@*|!^#V+R!""F#6#nO(6 0(. (/(2(.0q#o&q5Yv(^ͮڷYC]w( G&#6"NZF\Z6\ A(Zp\2" 2y=Vg:o^#een@:w@Vu@p>_6V|!uUtVnUfVp|!uWtXnWfX7h7Spooler error (Ignore, Abort)շ(lKO:=:<w ͗Á ͗Á × × ͗Á × ͗ÁN1F2˸~/Zf @ʐ!,!,O ^#Vz*Yz( !P7=eܷ 7w.w37Kܷ͗ Ͳ=޷7ݯʹ~/Zf(!!EO ~w!. ~@Zn( Z~(Zf 6^(#l~#?(~#<#~[~%wf(^~ƀwZf ~/ x l. F#n(s1r2###v( ^>V?ut^V N-qZN( ^aVbNc~ds r q w ~*^#Vz(0##~ !#~ #~ #~ #~ #~ 8!ZN#Fr+sq#p#~w#~w#~ w#~ w#~ w#~ wnf NFN-͠~ ([ S ~w^V YV ~͠w16 6nf NFͺ(ʹn|߳߃߃߃jJJwwwdOddRXXXXXXX w^#Vz>N#F#p+q^#V#~#wa~#wb~#wc~wd6/el. 'u1t2̓~qeOwyą>̓g>̓>~\w0Ã~0!,ͦ8MY~2<($=(!=!\ͦ84(2N]F^B % q2s0eܷ ~4(=O!\͓~4!\ͦ8`q4oN]F^8I(>w#:G!N#Fsl6/eu1t2z ~.>###6.>q#p~2!,ͦ8q26.>Oeg !t.>̓>ɯZNR~0(!=(!,=(!\=(60>l>~0ͦ6.>͉/ɯ2~2/~1!ͦ!/~1͆q1!w#ͦ6~#͠ӷ(< nO ~<7ȯ~N˹q##~#fo>~w !~#<( = (#~w :G!~ ( ####>+~w_ n]f^u]t^((hhh8(h8((8((h@P!F~ g!`++++'!N#F!B( !  ! `R(!V ͳͳ>͉(N!N#F!B(!! # ++ c͗!͐!K166S!N#F!B( ! ͗! K!^#V#N#~#fo !˾!!F#~< +++wͣ8 !V| ~<(>K!6ͣ!N#F!B(  ͎!N#F!B(  ͎####6#Kq#p#>w#s#r#s#r#w#w#w##w######6 ##N#F+++kb͐!~#<(=(#F!:~#(###= !^#V=7~#fo!"Sy2 # # ͂!w#w#MDq#p#q#p#MDq#p#q#pnf ^Vsrut ![R(!~(:0 !Z(Bͽ!![R(!~(:0 !Z( ͽ!4!l|( sÁ!1$! !^#V*!"Zѷ"6#z !-:w<2! +p+qMD!q#p!s#r#q#p!sl l`z ^#V!s01R!v 8( {0M!M!"{0Q8˾(8~˶!!~˾!"54>l|(* s#r!"s1$*!*!9͡[!R(^#V#F##*|(! ~=bw!!":(!˶*"{*#"*#"!K"x!^#V!R!^#VBr+s(0##^#V+++!! !>͔5##͔~4$##^#Vy ####*####v ~#fos#rlZzÁ"&R0S&!"*#"(!,^#V!,R('+V+^*&##R(58**R8S*"(*(|( ![*R0 +r+s[&'*$[&R>B"$@s#r#l"(!,^#V!,R(U*(+F+N R(+V+^K( B(+V+^## DM*(+p+q*(+F+N+V+^ s#r#*(!,^#V!,R*$R +V+^##"$~#<(= ~# ~ xD##>)))))))'d  R0y 0OYN#F#^#V+++q#p+}|##~#foN#Fr+sq#p+ _ W| }##s#r=N˹Y~#a{ !=)n>f?u>t?n1f2n3f4u3t4w.w3!Rog_;;| 72Wi!$"f!x:Z !,/0!08%h!` sʡֆ!r O ^#V|l !! 6 ѷ 'T8 ѷ s͗=(> w.ͳ!:S> *$+++KBRͳZF(!S45(!D(sB15{B:S1d!\D5*>~1(# :S*$+++[R8[R8 2S:S>Á .6eGkYi 00 $< V\nd2*\WD d: *\D5 d!EN5*\"d*d"\:Y<\daCOLDSTRTAUTWARMSTRTAUT1$8  -PRINT-?000z@d,,DD @"3DUfw̙37;@DJD@WOZ_ekoúý2. %YYY+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $G>s@1hͩ>{@">2!"2!"w#s#r2P!"Q!{B>{@>>p>s1!>!> !" {ps1>{Y+C CPYL!"_P=)!Kx( 0< [0<"2`i($/$)$TurboDOS 1.40, Copyright 1984, Software 2000, Inc. $GHHIIJJKKLL