MR%ͨ3>5!pQ2!rS>#D͘(MRGͨ3>5!wQ2!S>D͘(MRiͨ3>5!~Q2!S>D͘(MRͨ3>5!Q2!S>D͘(MRͨ3>5!Q2!S>D͘(MRͨ3>5!Q2!S>D͘(MRͨ3>5!Q2!T>D͘(MRͨ3>5!Q2!T>D͘(MR5ͨ3>5!Q2!/T>D͘(MRWͨ3>5!Q2!AT>D͘(MRͨ3>5!Q2!XT>D͘(!U>D͘(!UD͘(!GR>D͘(M&)&*U#G"VF&~*Vw)&*UG*V#>G\E)&*UG*V >G\E*V 6?*V6*V6?R2ͨ3!Q2!^T> D͘(MU&!UE!V6!TRUxaD!jTUxaDœR}ͨ3!Q2!kT>D͘(M!V!Vn&+MDG!V> KE!GRUxaD³!V6!SRUxaD!V͛!V ͏DU&!UEB!mTV>BD!HRV>("V!V~#&*VV>XE*VmT>G\E`!V*V+MD*VG>\E!V*V#!D*VG>\E*V"V!V&„*V"V!V'Rͨ3!Q2!U>D͘(!GR>D͘(*V>D͘(!HR>D͘(*V>D͘(!pT>D͘(M*V)&*UG>G\E*V)&*UG>G\EôV~# .)&*U#G"V*V~*Vw)&*V^#VG*V#>G\E)&*V^#VG*V >G\E*V 6?*V"V!V&Rͨ3!Q2!T>D͘(MU&!VE!V͛!TKD)&+*UG!TxaDQ*U)&*UG^#VͨH"U*U)&+++*UG^#VͨH"UF&"V!V)*U+"U*U"V*U"V*V*VͨH)&*VG)&*V#GD*V#"VpRͨ3!Q2!T> D͘(M*U*UͨHRͨ3>5M!"URͨ3>5!Q2!T>$D͘(MU&!VE!V͛!TKD2V:VfRfͨ3>5!Q2!T>D͘(MRwͨ3>5M!V6!"V*U"V*V*VͨH/:V/ )&+*VG!TxaD:V}R/ͨ3>5!Q2!T>D͘()&*VG>D͘(!HR>D͘()&*VG>D͘(!T> D͘(MU&!VE!V͛!UE!TUxaDfF&"V!V)z!TUxaDz!V6Rͨ3>5!Q2!T>D͘()&*VG>D͘(!HR>D͘()&*VG>D͘(MF&"V!V);&U&!UE!V6*V#"VÈ_!V~# *V~/*V~og@ }3>!VE:U\!VU>GEa!V6)&*U#G"U*U#"U*V~*Uw)&*V^#VG*U#>G\E)&*V^#VG*U >G\E*U*U$DF&~*Uw*U 6*U 6)&*V^#VG!V>KE!SRV>("V!V~#M!V*V+MDG!V>KE)&*V^#VG>D!HR>D!VD!GRDDD!V(E!VD!UD!UDD!V(E!UVxaD*U {(DT\E*U 6?:U!Vc'*U"V!V&!UVxaD!UV:D$*U"V!V&*U 6*U 6*U"W!W'rRcͨ3!Q2!T>D͘(M:Up!Wc':U!Wc'*U" W!W&B2U;&*U GͨH >@ogWH"VR ͨ3>5!Q2! U>D͘(!VD͘(!U>D͘(!V>D͘(!VD͘(!GR>D͘(M*U#"U!V6!V6:V3!"V*U~=2W! W&:UG!Wc'!"V*V+"W*W*VͨH/:V/*U*V)"W!W)'*V@ "V*U"W!W&ʢ!V6*V"V*V#"VT!"V*U~=2W!W&:U!Wc'!"V*V+" W* W*VͨH/:V0*U*V)"$W!"W)'*V@ "V*U"(W!&W'&!V6!V6*V#"V*U",W!*W&B2U:VRkͨ3!Q2!U>D͘(M*U 6?*U"0W!.W&!UVxaD!UV:D¾Rͨ3!R2!/U>)D͘(M*U*UD*U"4W!2W&*U"8W!6W&!:W':U !W&B2U:Vw RAͨ3!R2!XU>D͘(M:UReͨ3! R2!^U> D͘(Mͤ3!R2ͳ/!GW(EM!iUGW>BD“>!SRGW>(}2EW!GWKDG!^W>\E!\W͛!UE:EW!GW!DG!U>KE!UiU>\E3!GW:EWog++MDG!U>KE!GW:EWog#!DG!aW>KE!_W͞!UE!iUU>BDU!UU>GE:U2U!UD!iU> DW(|r>2U<2DW!Un&}2vW:vWog:DWogͨH!U:DW_DG!FW>\E:Uog G!FWn& }2U!DW4Ä*U:UogͨH>F R ͨ3!R2!sU>D͘(M% ͤ3!R2ͳ/!UEM!uUU>aD8 >!wW͛!UE!Un& "BW:Uog*BWͨH*BW+|o >&*BW}ü!R ͨ3!!R2!WR>D͘(M$2{W:{W¦ R ͨ3>5M!|W6!"yW*U"}W*}W*yWͨH/:|W!)&+*yWG!TxaDe!!W2|W:|We!)&+*yWGuU>G\E*U)&*yWG^#VͨH"U*U)&+++*yWG^#VͨH"U;&|!U&!UE!|W6*yW#"yW :|W!R!ͨ3!&R2!vU> D͘(MR!ͨ3>5Mç")&+*UG!TxaD2")&+*UGT>G\E)&*UG^#V*U"U)&+++*UG^#V*U"UR{"ͨ3!-R2!U>D͘(*U> C͘(!U>D͘(*U> C͘(!U>D͘(M*U#"U*U*UͨH"R"ͨ3>5M!"UØ#)&+*UG!TxaD #*U)&*UG^#VͨH"U*U)&+++*UG^#VͨH"U)&+*UGSR>G\ERl#ͨ3!5R2!U>D͘(*U> C͘(!U>D͘(*U> C͘(!U>D͘(M*U#"U*U*UͨH#R#ͨ3>5M!"U%)&*U#G"UF&~*Uw)&*UG*U#>G\E)&*UG*U >G\E*U 6*U 6R$ͨ3>5M!W&B2U*U#"U;&*U GͨH >@ogWH"W!W6!W6:W:W/%!"W"W*W+"W*W*WͨH/:W/$*U*W)"W!W)'*W@ "W!W&$!W6*W"W*W#"W$!"W"W*W+"W*W*WͨH/:W%!"W!U>;C!U>;CC̈́A"W*W*WͨH/:Wg%*U*W*W!U>G\E!UUxaDW%!W6]%!WZ&*W#"W%*W "W;&%U&!UE!UUxaD %U&!UEå%!W6*W#"W$b$!W&B2UR%ͨ3>5M͕O^#V^%#V %%%"&  Later CP/M or MP/M Version Required$*VZ**VZ{ozg-&|g}o!\!l!a&q&3>q&%!&*3>%K* !&*%% %  >  %%%%%%%%%%%%%%%% %% %%!%%"%%#%%$%%%%%(|HDMoHogͯH'QY(QY!9͗F+|'3333(!!͗E/<|ÕHF(I(OI(@(# M(+(H(((glʐ(~ ʆ((#s(#h(H o&."P(«(BZ!9((~#͆/ñ(> ͆/(&9(x2Py (2P"W͸)<**Ww)x2P=HA )A))G:P=ںHx2P"W͸)!PF6!P~#:)x=2P*>E͆/:P+S)-/2P͐*͚**) * ͣ*͐*).*͐*͚**ͣ*͐**e'*Ej*͐*+7*͐*@*-@*͐*͚*ҺHG͐*͚*^*xGGG͐*f*GyOy* ºH͐*j*:Pҋ*ͣ*|*y2Pʗ*~#z0 0!P_w!P~*4_!PsúHH2PG:P<2P=ºH:PºH&+*:P*!P5!P4ʺH:PG:P +!P*>2PI+͆/!P5+:P!P<_!P>w w>+;+!P~5>.́+G:Px0h+:P> !P~{+5!P4!P5-2Px!P^4{+Қ+!P~0>0"W*P~2W:Pʸ+6.ʸ+ͺH:W2W>V#.!W+5~/o :P,>9#.,>*#.+ +*:W!9q#=+.>2W<2W2Ẃ+2W:W_:W.*P~2W:W9c,:WS,:W2W.S,:W=O:W͖.͎.:WO:W͎. . ,Zm,*¸,O:W|,y2W:Wʠ,:W0 ,:WO:W*ʚ,> ͎.ò,:W2W:WO:W͎. . ,:W.L-:Wc.,:Ws.,:WO:W͖.͎. .,:W2W:WO> ͎. .,:W<-:W0-:WO> ͎.F-:W=O:W͖.͎.:WO:W͎.:W2WF-:WO:W͎. . ,:WVŠ-:Wx-:W2W.x-:W=O:W͖.͎.:W„-<2W.,:WO:WT.¿-:Wª-:WBʴ-ö-:W*ʶ-> ͎. .,:WO:WC-D:P-> ͎. ͎.-:WC-͎. >R͎.-͎. >B͎. . .,:W*W!W4!W4S+-$G:WOx*P## -.<>S#.>+#.>-#.>C#.>D#.:/,.B!WN*P# Ⱦj.G:W_:WO x*P# Ⱦ….!i#9w$G:P¯.x+-.Sʽ.x+.-S.>+>-> 2 .x=.GN/. /:6P./!%Px./}/.Ͳ5. /.> ͆/ / ,/x&/>}/. 7/N/.xA/>.=Ͳ5A/{/x!#Pc/{/N/:4Pn/{/:#P> ͆/c/>2W!W5:4Pʢ/!#PҢ/> ͪ/> ͪ/ͪ/2W!W5ͥ1/y<>/= /\0O 2ol1####WT1/60#0E/>ew#.0e0x0w1 /_1GZ+y=@0x=800 @060$B0w L0+6.$y="0x="00x<¤0!9͍1 ̍1 ʌ0 ʌ0w# ʺHt0H !9 ʟ0+wÔ0xOo>g9x ͍1ʺH ʲ0 ʲ0w#ï0 2=0< 2<_ 2K 2 0oWl1##T191K0ںH 10_ҺH 1ºHK0w# 1x91w1 0_1GZO1+wD1xw1T1xw1ºH_1o>g9##͍1ʺH w1 w1 ںH;8¡1!WgJ> 2 º1ʥ1;8î1 1x1>2å1 1å12x!#P121:4P12:#P;81>2W!W5!WgJ{2ͼ2^2^#VT222{22#FM2#NM2#^#r+s#^#V++r+s~252ͼ25^2q#p2Oͼ24~ ҙ2_2s#r#s#r#q!2gJ22MP22 Format Overflow*OP-&`P!W2O:pPy2!9G2~#'22y2O:hP3W3͊33{3*4P|H3j& *4P*#PͨH#ͨH> ܒ3> ܒ3͊3> 3{=>'Ē3!9y3=~#'r3{>'̒3͒3]3{=>'Ē3{>b̒3*#P++|2X!X5ɯï3>ï3>2X"X"X`i"X!9"X!X3X ~# 3*X~?4*X~4!X>DG3!!!qP͘6!qP"X!X\8<4!X>DG3!R.!!P͘6!P"X!X\8Q4*X"X!X\8!Xͷ6*X^#V!,Ps#r*X^#V!.Ps#r*X^#V D|*Y!6YgJ5×6:hP6*.Y~ 6*#P#"#P×6*.Y~ $6!#P6#6×6:pP6*.Y~ F6*'P#"'P!%P6#6×6*.Y~ —6*%P#"%P!%P#h6!%P6#6*%P*6P#ͨH|—6!MP"DY!"HY!@YgJ6Ͳ5!+P6"JY!9"LY!JYͷ6! 9^TY~# ¼6*TY^#V|6*TY*VY D*VY nb7*VY !YY>XE 7!NY>D*TYD!YYE*TY~#L7*TY^#V)))|L7*TY6P#6*TY~#†7*TY^#V))|z7*TY6#6Æ7*TY6<#6*TY6#6*TY6#6*TY6#6*TY 6*TY^#V}SA}2XY*TY^#V}7!XY44*TY^#V}7>2XY*TY^#V}8*VY~#8*VY6#6*TY"qY*VY"mY*VY"oY!gY<*TY^#V|[8*TY"{Y!"}Y!sYgJ^#V^#VN:OPy8!8gJ2OPO!`Pˆ86Í8 +~#w!PP s#r!OP4Mɦ88MP88 I/O Stack Overflow:+P8!P"Y!Y͏=8!Y68:+P2Y!+P6:Y 8*#P#"#P:Y 9!#P6#6:Y"u?"w?*u?^#V#"u?^#V9"9"{?"9"?|'9|~9"9yaW9A =.:;<>[]y *y?I9 s99I9$s9I91ڡ9 o&))))\xH  ʾ9#w ¾9s9y9*?#9A9Gs9I9:9 69p4s9+͋9:#I9(:#*:6?:ws9:I9/:s9:#6 (:.h:s9 ͋9\:I9h:#*T:6?X:ws9C:I9o:s9\:#6 h:%#6q:*?##^ ~?ˆ:# :xCON CON RDR PUN LST M!: ~y9$ ;s9I91:\:l ;$ ;!~ ;s9!:I9; ;s9#:x=G:s9>ɯ*?+";^#V*;#{#z";6#6*; r+s!YF#~ځ;!Y6P  2N 2N!Y^r+s6 #6 !Y4^N*?|±;}=ž;Q;í;ͩ:ʩ;O>~ʽ;ʽ;>;N*?|;Yͩ:=;y;2N;>~;=;>;q2?*?/"?1;V<{;;*;*?*?#:?O?<*;#s#rH|v<+}o 99~2}?9"y?'9:}?҅=Ͳ:ʸ{ >*?:}?w#=6F=*s?"q?<\=:}?>M=<>!"q?*?(n?w# h=*?~#0@*?N>f?*{?w#wf? 9'9f?͋;9qf? 9'9f?9N;f?*?~" 4#4#4 9'9f?~=>͢@f?;;>(>f? 9'9f?~;;>(>f?*?~>>f?>ͧ@f?*?!*~!/2?*?|=>(^#VB9B9{zP>z>2~?z>:?s>͋;qz>N;#Z>*?|ʴ>*~ʴ>=!~?ڱ>:?;ʮ>ª>wÑ>͵=> 9'9f?|}f?~> f?*{?w=f?*?N*{?^#V6+6++ͩIf? 999f?>f?"N#F#~9q#p#w>f? 999f?>f?*~B9!U?=G?>!*?" s#r#w=f?*w? }!Y6 4>2Y*Y!4#4#4~#N#F#y#x#:Y*Y!!:Y?ʹ?Ҟ?:Y~G~#~O?@#~@! p! y! q<"@<͞?ɯ~#N#F#w#q#p͕?ͅ?~L@#!!$@! 6?<ʇ@= _!x{@@FNZ@wxG>O>G!$q#p#6é@"Y"Y2Yx2Yͅ?2Y͕?!Y~5MA?@=A:YA*Y<@YA*Y:YO*Y:Y Ay O&A:Yž?*Yw# Aͥ?:Y@A*Y!ʹ?@A$@*Y"Yþ@:Y/g.>Gx|g}oZA"Y>B*Y"YgA͔A*Y"YgA͔A*YG!9!xA A+½A$%ºHgA-ʲA0H:H0T])ںH)ںHںH)ںHo|gںHâA{B$%ºH}B|ںHz-̕Ho&9}O!9 w#%B60#60! 9~ TB!97>?'w#EB-!9~͙BmB~#͙BZB! 9~.B+60ËB0‹B6 #sB+r>o&9y>o&90w+°B6.!9xG}!BH/C)ںH=B|/G!kC QC>0`C VC>-3bCT]))kC寕iO>`G>0 ҎC<ÆC DM0 > og|C͕H!͜GCw#C!9!7>?'w#CȇD) Dyw# D~#(D~#W #ÅD!9Oo>gyͩD~#o>gxGҾDG\EwF#"YxDD*Y!9G_>WObk++D~+Dy~#/H͕H#"Y"Y`i"YxG*Y"Y!Yw`i"Y͇F͊F"Y*Y*YnF"Y͇F"Y*YG͇F͕H*Y*Y|0F͕H*YnF͕H*Y|HF)))HFHF*YnF*Y))CF)HF:YO:YGzhFzhF ))WFWF:YÜG͕HDM>!=))yF F͊F|g}oYGF=GFxG2Y"Y!Yr#q#pxG*Y"Y!Yw!Yr#q#p:YG:Y)H:YG:Y)H:YG:Y)H:YG:Y)H:YG:Y)H:YG:Y)H G G !G|e. +Go&:Y*YDMÜG"Y!QG^#V!9*Y3333!lG^#V!9!33333333###~‡GGOW_goހ_W+~G~+N+f.z¬GzG ))ҬGìG}G$GGGxGGG>H>HyƀGOS\{E)HD)HzE)HD)H\e. H HS\e. (H.HEg)3H )8H )=H )BH )GH )LH )QH )VH z|HDM|HoHHx>H!>)҂H ҊH=ʓH)|Hɯo>g^#V#N#F{ozg||/=!HgJHHHHH Conversion2H!HgJHHHHH2Ix2 I!IgJ IIII#}OD*VZ~UI##~#foI!1IgJ9I:I;I=I?I Free Space Exhausted##^#V#{_zWJ{_zW!I4z{I{ڤI##^#V# ##s#rs#r#s#r+++~sw#r####}*VZ}|J*{zJ+F+N+V+5^{J{zJ}|J{IIi`~sw#r##q#p i`N#F#^#V~Jq4#p+i`##s#r$JðO@JðO FREE Request Out-of-Range$ Free Space Overwrite$GKJMbkJLLFKLNKLN#FKL^#V"Py2PxҒJi&͌MJJx©J>J!MP{#z*,P*.PMxyxJ0K_!hL^#V͇K*K>(,KycK>),K| KKK|KK͇K͙KÕO>,,K*K> _2N 2N 2N0:,K,K:K:K*K|HK}HK sKduK uKڀKwKx:KN #~,KÉK!ZL͇K*PZ!9{_zºK{ںK KK*K>#,K*PZ>=^#V#TKKK>: K>?,K!RL͇K͇K>=,K^#V|$L}L.))LÇK#F>AK> #?L~ >.K~ K=0L^#V# File: Traceback:xLLLLLLLL ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILE UNDEFINED FILE KEYNULCONCONRDRPUNLSTBADG!P~MMðO Condition Stack Overflow$4Ox!Z w#s#r#s#r!9!P s#r!PN!Z +++++TM#{mM#zrM++~TM++!P5!~# M}M!PN!Z +++++œM#~#M+{»M#zM++~ÜM#^#V=!OP~N5:OP_!PP^#V"MPP.~# M*w!/xdOyʁO >O6# [O KO=ɯ ~#fo++N!RZ~#ʭO*TZN•OOðOO  Insufficient Memory$ Invalid I/O List End of Execution$O 8 8 8SYSINSYSPRINT     $ ' '                No files. :. k :LSX BC ToDEMRTUV???????????? New Files occupying k(k remaining)Sorry, CP/M 2.x only. Which******k remaining on Drive SWEEP version 2.6 - December 15, 1981by Robert FisherDePaul UniversityChicago, IllinoisOptions:B: Last fileC: Copy fileD: Delete fileE: Erase all untagged filesL: Login new disk and reset systemM: Mass copy of tagged filesR: Rename fileS: Space remaining on diskT: Tag file for transferU: Untag a fileV: View a file at consoleX: Exit to CP/M?: Redisplay menuspace or cr: Next fileDrive New name:   already exists Delete? (Y/N):Y* Deleted.Do you wish to be prompted? (Y/N) : NType A at prompt to abort.Erase ?(Y/N/A)AErasing $ Out of directory spaceCopying =====> Error. Disk full. Warning: source = target. Re-log drive. drive and user: 0123456789: #****Aborted. Total of tagged files = k (k) Total of tagged files = ( U UVVUU Vҵ VUUU12 3 space9V vBV   PV  ./0,-&')*+(%12VUVVVVUVVVVUVVWUU WWUWWWU$W(W,W0W4W8WUU@W^WaWUyW{WUWUUUWWWWMPWWWWMPWW Invalid Format ItemXXXXXX Stream/Record Sequen/Direct Input/Output Keyed Access P< $conXXPXXXXXXX YY YYYY%Y 'Y4Y*Y+Y>Y,Y-YHY.datXYYYqYRYSY{Y}YYY]ZXXXXXX Stream/Record Sequen/Direct Input/Output Keyed Access P< $conXXPXXXltalst add c sta last call seekit lda reps dcr a sta reps jnz dosek ret seekit mov b,a lda buffer+1 sub b push psw mov a,b sta buffer+1 pop psw mvi b,0 jc movin mvi b,1 cma inr a movin cma inr a mov c,a call seek chkseek mvi a,rhedr out comnd sekwait in status ani opdone jz sekwait mvi a,isbuff out comnd in data in data in data in data mov b,a lda buffer+1 cmp b rz push b lxi d,sekmsg1 call pbuff lda buffer+1 call putadc lxi d,sekmsg2 call pbuff pop b mov a,b call putadc lxi d,sekmsg3 call pbuff sek00 call trkzro xra a sta buffer+1 ori 1 ret ***************************************************************** * * * Cformat formats one track on the current head. * * * ***************************************************************** cformat mvi a,1 ;Initialize the sector count sta buffer+2 lda buffer+1 ana a mvi a,80h jz putkey xra a putkey sta buffer+3 call indx call phytyp mvi b,secm26 lxi d,skewm26 jz floop mvi b,secm10 lxi d,skewm10 floop lxi h,buffer+2 incsec ldax d mov m,a inx d dcx h ;Adjust the pointer to the sector header dcx h mvi a,isbuff ;Initialize the controller pointer out comnd ;Give the command mvi c,hdrlen ;Header length ldloop mov a,m ;Transfer the contents of the buffer to out data ; the controller inx h ;Bump pointer to next byte dcr c ;Update the counter jnz ldloop mvi a,whedr ;Write header command out comnd ;Issue the write header command bwait in status ;Wait for the write to complete ani opdone jz bwait dcr b ;Test for sector count equal to 0 jnz floop ret skewm26 db 22,12,2,23,13,3,24,14,4,25,15,5,26,16,6 db 27,17,7,28,18,8,29,19,9,30,20,10,31,21,11,32,1 skewm10 db 8,15,2,9,16,3,10,17,4,11 db 18,5,12,19,6,13,20,7,14,21,1 zers lxi h,errors call phytyp lxi b,secm26 jz zersx lxi b,secm10 zersx mvi m,0 inx h mvi m,0 inx h dcx b mov a,b ora c jnz zersx ret initfld sta cnt mov a,m push psw call phytyp mvi b,secm26 jz iniflx mvi b,secm10 iniflx pop psw inilp push psw push h lxi h,cnt mov d,m pop h inilop mvi c,hdrlen iniloop mov m,a inx h cma dcr c jnz iniloop inr a dcr d jnz inilop pop psw inr a dcr b jnz inilp ret makbuf0 lxi h,drive ;Get drive # mov a,m rlc rlc ;Move to left four bits rlc rlc mov b,a ;Save drive # in B lda head ;Add in the head # sta buffer add b ani 7 ;Strip off the drive # rlc rlc rlc ;Head # in to four significant bits rlc cma ;Head # is negative logic ani 0fch ;Strip off the drive bits add m ;Add in this drive sta dfnreg ;Save the function register out functn ;Output the function ret incerr ani 3fh mov l,a mvi h,0 lxi d,errors dad d mov e,m inx h mov d,m inx d mov m,d dcx h mov m,e ret newpat lda tsttyp ana a mov a,m jz long short lda sflg ana a mvi a,0 sta sflg mov a,m jnz shortx mvi a,1 sta sflg mov a,m cma ral cma shortx cma dcr a long inr a mov m,a ana a ret ***************************************************************** * * * Pbuff is the CP/M print buffer command. * * * ***************************************************************** pbuff lda quiet ana a jz pbuffx push d lxi d,nulls call pbuffx pop d pblop ldax d inx d cpi '$' jnz pblop pbuffx mvi c,9 ;Print buffer command jmp bdos ;Go and enter the BDOS ***************************************************************** * * * Rbuff is the CP/M read buffer command. * * * ***************************************************************** rbuff lxi d,bufmax ;Beginning of buffer mvi c,10 ;Read console command call bdos ;Read and fill the buffer lda buflen ;Check for zero length ana a ;if zero the return with acr in A mvi a,acr rz lda bufdat ;Otherwise return with the character cpi 'a' ;Fold to upper case rc cpi 'z'+1 rnc sui 20h ;Perform the mapping to upper case ret bufmax db 10 ;Maximum length buflen db 0 ;Current length bufdat ds 10 ;Storage or read in data ***************************************************************** * * * Exit prints a message on the CP/M console then does a warm * * boot. * * * ***************************************************************** exit call pbuff lxi d,insmsg call pbuff call rbuff jmp wboot hlcde mov a,h cmp d rnz mov a,l cmp e ret putadc mov l,a mvi h,0 ***************************************************************** * * * Putdc prints the ascii decimal equivalent of the number in HL * * * ***************************************************************** putdc lxi b,-10 phl push d mov d,b mov e,b phllp dad b inx d jc phllp xthl xchg mov a,h ora l cnz phl pop h mvi a,'0' add l sub c pchar push h push b push d push psw mov e,a mvi c,2 call bdos pop psw pop d pop b pop h ret ***************************************************************** * * * Panic checks if a character has been hit on the console. * * If a character has been pressed, then panic acknowledges the * * fact and asks for an abort. * * * ***************************************************************** panic mvi c,11 call bdos ani 1 rz lxi d,panmsg call pbuff mvi c,1 call bdos call rbuff cpi 'Y' jz wboot cpi 'R' jz askall lxi d,acralf jmp pbuff ***************************************************************** * * * Messages output by the program. * * * ***************************************************************** prompt db 'Discus M26 ,M20, and M10 Hard Disk Format Program Rev. ' db revnum/10+'0' db '.' db (revnum mod 10)+'0' db '$' db 'Rev ' db revnum/10+'0' db '.' db (revnum mod 10)+'0' db '$' phnum db acr,alf db 'Enter Physical Drive Number to be Tested or Formated ' db '(1 - 4, RETURN to exit): $' db acr,alf db 'Physical (1-4): $' lognum db acr,alf db 'Enter Logical Drive Number to be Formated ' db '(1 - 3, RETURN to exit): $' db acr,alf db 'Logical (1-3): $' hdmsg db acr,alf db 'Enter Amount of Formatting Desired:' db acr,alf,atab db 'H = Format Headers Only (Data Remains Intact).' db acr,alf,atab db 'D = Erase Data Field Also.' db acr,alf db 'Function: $' db acr,alf db 'Function (H,D): $' rdymsg db acr,alf db 'Drive is not ready.$' db acr,alf db 'Drive is not ready.$' hltmsg db acr,alf db 'Controller not halted.$' db acr,alf db 'Controller not halted.$' wfmsg db acr,alf db 'Write fault on drive.$' db acr,alf db 'Write fault on drive.$' astrk db '.$' db '.$' hardmsg equ $ softmsg equ $ acralf db acr,alf,'$' db acr,alf,'$' rdywait db acr,alf db 'Waiting for drive to become ready, could take ' db 'as long as 2 minutes.$' db acr,alf db 'Waiting.$' headmsg db acr,alf db 'Testing sector headers, will take about 30 minutes.' db acr,alf,'$' db acr,alf db 'Testing headers.$' formmsg db acr,alf db 'Formatting the entire physical disk, ' db 'will take about 4 minutes.$' db acr,alf db 'Formatting.$' logmsg db acr,alf db 'Formatting a logical drive, will take about 1.5 minutes.$' db acr,alf db 'Formatting.$' errmsg db 'Sector Error, Track $' db 'Sector Error, Track $' secmsg db ', Sector $' db ', Sector $' hedmsg db ', Head $' db ', Head $' rtymsg db ', Error count $' db ', Error count $' donmsg db acr,alf db 'All Finished, Returning to CP/M.$' db acr,alf db '-> CP/M.$' panmsg db acr,alf db 'Want to abort ? (Yes or No, R to restart): $' db acr,alf db 'Abort (Y,N,R): $' datmsg db acr,alf db 'Testing sector data field, will take about 12-14 Hours.' db acr,alf,'$' db acr,alf db 'Testing data.$' failmsg db acr,alf db 'Error Writing Sector Map to Track Zero.$' db acr,alf db 'Error Writing Map.$' fullmsg db acr,alf db 'Bad Sector Map Overflow.$' db acr,alf db 'Overflow.$' seekmsg db acr,alf db 'Testing Track Seek Mechanism, will take about 15 minutes.' db acr,alf,'$' db acr,alf db 'Testing Seeks.$' sekmsg1 db acr,alf db 'Seek error, Looking For Track $' db acr,alf db 'Seek error, Looking For Track $' sekmsg2 db ', Found Track $' db ', Found Track $' sekmsg3 db '.',acr,alf,'$' db '.',acr,alf,'$' unknown db acr,alf db 'Unknown Command.$' db acr,alf db 'Unknown Command.$' bdrvmsg db acr,alf db 'Bad Drive Number.$' db acr,alf db 'Bad Drive.$' funcmsg db acr,alf db 'Choose The Desired Function:' db acr,alf,atab db 'L = Format a Logical Drive.' db acr,alf,atab db 'F = Format an Entire Physical Drive.' db acr,alf,atab db 'C = Continue An Interupted Test.' db acr,alf,atab db 'D = Run a Diagnostic Test.' db acr,alf db 'Function (RETURN to Exit): $' db acr,alf db 'Function (L,F,C,D): $' notyet db acr,alf db 'Not Yet Implemented.$' db acr,alf db 'Not Yet Implemented.$' drvtyp db acr,alf db 'Select The Drive Type:' db acr,alf,atab db 'A = Discus M26, 26 Megabyte Drive.' db acr,alf,atab db 'B = Discus M10, 10 Megabyte Drive.' db acr,alf,atab db 'C = Discus M20, 20 Megabyte Drive.' db acr,alf db 'Drive type (RETURN to Exit): $' db acr,alf db 'Drive type (A,B,C): $' muchmsg db acr,alf db 'How Much of the Diagnostic Do You Want to Run: ' db acr,alf,atab db '1 = Sector Header Field Test Only.' db acr,alf,atab db '2 = Sector Data Field Test Only.' db acr,alf,atab db '4 = Seek Mechanism Test Only.' db acr,alf db 'Choose the Diagnostic by Adding together the ' db 'Desired Options.' db acr,alf db 'Options (RETURN to Exit): $' db acr,alf db 'Option Sum (1-7): $' repmsg db acr,alf db 'Repeat forever (Yes or No): $' db acr,alf db 'Repeat (Y,N): $' prefmt db acr,alf db 'Has the Drive Been Preformated ? (Y or N, RETURN to Exit): $' db acr,alf db 'Preformated (Y,N): $' nulls db 0,0,0,0,0,0,0,0,0,0,'$' insmsg db acr,alf db 'Press RETURN to return to CP/M: $' db acr,alf db 'CP/M: $' ***************************************************************** * * * Dynamic data locations. * * * ***************************************************************** quiet db 1 much db 0 sekcnt db 0 first db 0 last db 0 dltafst db 0 dltalst db 0 reps db 0 disktyp db 0 heads db 0 nodata db 0 frsttrk db 0 lasttrk db 0 settle dw 0 ;20ms time constant buffer ds hdrlen head db 0 dfnreg db 0fch errflg db 0 cnt db 0 badsec db 0 mappnt dw 0 ;Pointer into map table drive db 0ffh ;If this location is NOT 0ffh then ; NO prompting will occur sflg db 0 tsttyp db 1 phase db 0 hedbuf1 ds secm26*hdrlen hedbuf2 ds secm10*hdrlen ds 100h-($ mod 100h) datbuf1 ds seclen mapbeg ds seclen*2 errors ds secm26*2 ds 30 stack equ $ end