6@(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! Ͳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 * "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ *M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&62*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨5~wN#Fq#p>BØ%!0" * F#%2NG*V0##~w*V0##~<͉:.t!.N!. yq~t +aG=#w#wY*M0!0n& {ozg"V0!K0{#z"M0b*M0!0N#yʢ ~Õb!."O1:N *M0!$/{#z"V0$ _!.*V0~#~1 ~#"M0û1 !͒%Þ%SYMBOL TABLE OVERFLOW G*V0##~w*V0##~=*V0_###1 s#r1 ^#V1 ##"X0P wP ~O!0~z 6~=ͼ !0N#~ͼ „ Ͳ O2Ny *\ ?=)$=)w#Ž&!\60 ڱ&>GO#w ³&>O # &6 &6L#6I#6B#w2|r&\u'>2]0!"%![0~2%wG&!,x&>82%2%!"b0*"M0!1"%"&"@&#"K0"T0' _#~6' D':%A6'>:6'D'>.6'D'>-6'x&!,N'!k-x&!,N':% '> ':%'_!% '6 4ɯ2%2]02e02d02g02%:\ =)!%w#w#w#w#w#w#>2^02_0:m$(!~#$,(~(# 3(%Aʩ(Pʩ(Sʩ(Hʩ(Lʩ(*t(+t(-¶(^0~Sʣ(Mʣ(e0Lʣ(d0Qʣ(g0Rʣ(%1¶(x#3(~AҶ(#3(#6 !)-x&!x&!%͉&!%͉&ͳ'(`&͛'͠':%)!&͉&l&͛'͠'!%60#60#60#>2f0!"&:O0*!"%2%2%2%Z&%u'!-x&z{:]0ʢ)*%F)w)!"%r&\‰)*%#"%+~):.2]0ʢ)r&\!~-N'*%F))Z&!"%*%B&%)¼))*)6# )G&*%*%#"%~!<-x&G:%7*$*x*7*x2*Ϳ'5*9**&*&w#"&!F)`&!"&*&%~ʅ*B&Œ*`*G&`*!S-x&ö,͟**>&*@&w#">&!F)l&!">&*@&&`*_!%~ *2%*b0}!,~ +*#+> *>#**> **b0~>+*#2+> *> *> *}2%!%*O*:/ :O0:%y*:%!O0•+:e0!]0+~,:/ ,!/~ +:f0,:/++:_0,+:/#,:/ ,:_0=+!/~ +!0s!%~!%*4:0!/,G~Y+#x=+> Y+> Y+20!/>x6 #=,G!/~ pͳ'*&}?,>*/,`&%͈':^0*+,!&6S#6Y#6M#w!&w:%2%!"&ͳ'*2%`&%͛'͠'+,:%ʶ,:%.*P0"%.*>&}ʶ,>͕*æ,+,:%,l&&͈'!-x&CP/M MACRO ASSEM 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR INVALID PARAMETER: SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES UNBALANCED MACRO LIB END OF ASSEMBLY G:%x-!%~--.-*P0*%O {-z-.*P0"%!%^4!%w..WƐ'@'Õ*>:͕*!%^Ww*%{-|-}--{?.!%~#-6.-> ͕*> ͕*͞*> ͞*;.L>(>;;H;;;;5;<=r=<<SETDMA INTERCEPT CODE LHLD IRDJ+ ; GET ORIG. READ VECTOR PUSH H ; HOLD IT LXI H,IREAD ; G INTERCEPT READ VECTOR SHLD IRDJ+1 0005H USE FACTOR ENDDATATA ORIG. WRITE VECTOR PUSH H ; HOLD IT LXI H,IWRITE X>C;<1TECSHLD IWRJ+1 ; SAVE IT IN COPIED JUMP TABLE POP H ; ORIG. WRITE VECTOR SHLD IWR1+1 ; PATCH IT INTO WRITE INTERz*;&***z*8z*z*9&*-&&, DW 63 ; DIRECTORY SIZE - 1 DB 0C0H ; TWO CLUSTERS RESERVED FOR DIRECTORY DB 0 ; ALLOC 2 DW 16 ; 16 SECTOR DIRECTORY DW 2 ; TWO SYSTEM TRACKS SKEW6: DB 1, 7, 13, 19, 25 DB 5, 11, 17, 23 DB 3, 9, 15, 21 DB 2, 8, 14, 20, 26 DB 6, 12, 18, 24 DB 4, 10, 16, 22 ; BEGIN$DATA EQU $ DIRBUF DS 128 ; SYSTEM DIRECTORY BUFFER ALV0 DS 31 CSV0 DS 16 ALV1 DS 31 CSV1 DS 16 ALV2 DS 31 CSV2 DS 16 ALV3 DS 31 CSV3 DS 16 END$DATA EQU $ DB 0 ; FORCE OUT LAST ADDRESS FOR RELOCATION END 1,26,6,1024,243,64,64,2,0 ; DISKDEF 1,0 ; DISKDEF 2,0 ; DISKDEF 3,0 ; ENDEF DPBASE: DW SKEW6,0 DW 0,0 DW DIRBUF, SINGGLE$TAB DW CSV2, ALV2 DW SKEW6, 0 DW 0,0 DW DIRBUF, SINGLE$TAB DW CSV3, ALV3 SINGLE$TAB: DW 26 ; SECTORS PER TRACK DB 3 ; 2**3 (=8) SECTORS PER CLUSTER DB 7 ; 2**3-1 (BLICK MASK) DB 0 ; EXTENT MASK DW 242 ; NUMBER OF LAST CLUSTER INGLETAB 423D SKEW6 4141 SWAP 4149 SWP1 41B3 TRYCOUNT 418B WAIT0 416B WAITIO 41B3 WERROR 41AD WREADY 0006 WRITF 41E2 XFLAG 4155 XREAD 412A XSECTRN 4102 XSELDSK 415A XWRITE 40BE ZZZZZZ 00000000000000057422E42834364431A00FE :10423000030700F2003F00C0001000020001070D5C :104240001319050B111703090F1502080E141A068E :074250000C1218040A1016FD :014393000029 :0000000000 D>=RETRY NUMDISKSz;BASE;DSTATRTYPER;RBYTE=ILOW?;IHIGHf;READFWRITF;RECAL<IORDY>BEGIN@=CCPVEC@DUMMY6@PIPJMP@ ;NEWJMP@|<ISDJ@<ISTJ!@"<ISSJ$@7<ISMJ'@U<IRDJ*@IWRJ-@s<ISXJ3@MOVERK@EXIT5A@<ISELDSK@;ISD1@L<ISETTRK@;IST1@<ISETSEC@;ISS1@+<ISETDMA@;ISM1@ <IREAD@;IRD1@;IWRITE@h<IWR1@<ISECTRN@;ISX1@=SWAPAAZZZZZZ@<XFLAGA<XSELDSKA_<IOTA<IOSAh=IODA<XREADUAXWRITEZA<XSECTRN*A=DBANKA'=SELTABLEA=IOFA!;DPBASEASWP1IA >SETFUNC\A=WAITIOkA+;REWAITmA<INTYPEA=INBYTEAp;IOPBA =IODR1A3=WAIT0A=INSTATA\;WREADYA=WERRORATRYCOUNTAI=INTYP1AT=INBYT1A|=INSTA1A_=IONA<SKEW6=B=DIRBUFWB=CSV0B=CSV1%C>CSV2TCCSV3C=SINGLETAB.BBEGINDATAWB1>ALV0B:>ALV1CC>ALV25CALV3dC;ENDDATACVI C,READF ;SET TO READ FUNCTION JMP SETFUNC ; XWRITE: ;DISK WRITE FUNCTION MVI C,WRITF ; SETFUNC: ; SET FUNCTION FOR NEXT I/O (COMMAND IN REG-C) LXI H,IOF ;IO FUNCTION ADDRESS MOV A,M ;GET IT TO ACCUMULATOR FOR MASKING ANI 1111$1000B ;REMOVE PREVIOUS COMMAND ORA C ;SET TO NEW COMMAND MOV M,A ;REPLACED IN IOPB ; SINGLE DENSITY DRIVE 1 REQUIRES BIT 5 ON IN SECTOR # ; MASK THE BIT FROM THE CURRENT I/O 6@6@6@6@6@6@6@6@6@6@6@6@6@6@6@6@6@*"@!@"*!@0w# K@!5A"@*@!@"@"@*"@!@""@"@*%@!@"%@"@*(@!@"(@"@*+@!@"+@"@*.@!@".@"@*4@!@"4@"AAA@2AyA6@y2A6@y2A6@i`"A6@:AUA6@:AZA6@:A*A6@>2A!y2A!A ~2A`i))))A`i#z n`AA*@"*@0Fwx# IA\A!A~w !Aw ͺAA:A>A†AӉxӊËAәxӚAʋAͺAʭA³AAڭA³AAóA mA>:AAۉۙ:AAۋۛ:AAۈۘ00=BWB.BBB=BWB.B%CC=BWB.BTC5C=BWB.BCdC?      ADDRESS JMP WAIT0 ;TO WAIT FOR COMPLETE IODR1: ;DRIVE BANK 1 OUT ILOW+10H ;88 FOR DRIVE BANK 10 MOV A,B OUT IHIGH+10H WAIT0: CALL INSTAT ;WAIT FOR COMPLETION ANI IORDY ;READY? JZ WAIT0 ; CHECK IO COMPLETION OK CALL INTYPE ;MUST BE IO COMPLETE (00) UNLINKED ; 00 UNLINKED I/O COMPLETE, 01 LINKED I/O COMPLETE (NOT USED) ; 10 DISK STATUS CHANGED 11 (NOT USED) CPI 10B ;READY STATUS CHANGE? JZ WREADY ; MUST BE 00 IN THE ACCUMULATOR ORA A JNZ WERROR ;SOME OTHER CONDITION, RETRY ; CHECK I/O ERROR BITS CALL INBYTE RAL JC WREADY ;UNIT NOT READY RAR ANI 11111100B ;MASK OUT CRC ERRORS AND DELETED DATA OK JNZ WERROR